001    package net.minecraft.src;
002    
003    import java.util.Arrays;
004    import java.util.List;
005    import java.util.Random;
006    
007    public class WorldChunkManagerHell extends WorldChunkManager
008    {
009        /** The biome generator object. */
010        private BiomeGenBase biomeGenerator;
011        private float hellTemperature;
012    
013        /** The rainfall in the world */
014        private float rainfall;
015    
016        public WorldChunkManagerHell(BiomeGenBase par1BiomeGenBase, float par2, float par3)
017        {
018            this.biomeGenerator = par1BiomeGenBase;
019            this.hellTemperature = par2;
020            this.rainfall = par3;
021        }
022    
023        /**
024         * Returns the BiomeGenBase related to the x, z position on the world.
025         */
026        public BiomeGenBase getBiomeGenAt(int par1, int par2)
027        {
028            return this.biomeGenerator;
029        }
030    
031        /**
032         * Returns an array of biomes for the location input.
033         */
034        public BiomeGenBase[] getBiomesForGeneration(BiomeGenBase[] par1ArrayOfBiomeGenBase, int par2, int par3, int par4, int par5)
035        {
036            if (par1ArrayOfBiomeGenBase == null || par1ArrayOfBiomeGenBase.length < par4 * par5)
037            {
038                par1ArrayOfBiomeGenBase = new BiomeGenBase[par4 * par5];
039            }
040    
041            Arrays.fill(par1ArrayOfBiomeGenBase, 0, par4 * par5, this.biomeGenerator);
042            return par1ArrayOfBiomeGenBase;
043        }
044    
045        /**
046         * Returns a list of temperatures to use for the specified blocks.  Args: listToReuse, x, y, width, length
047         */
048        public float[] getTemperatures(float[] par1ArrayOfFloat, int par2, int par3, int par4, int par5)
049        {
050            if (par1ArrayOfFloat == null || par1ArrayOfFloat.length < par4 * par5)
051            {
052                par1ArrayOfFloat = new float[par4 * par5];
053            }
054    
055            Arrays.fill(par1ArrayOfFloat, 0, par4 * par5, this.hellTemperature);
056            return par1ArrayOfFloat;
057        }
058    
059        /**
060         * Returns a list of rainfall values for the specified blocks. Args: listToReuse, x, z, width, length.
061         */
062        public float[] getRainfall(float[] par1ArrayOfFloat, int par2, int par3, int par4, int par5)
063        {
064            if (par1ArrayOfFloat == null || par1ArrayOfFloat.length < par4 * par5)
065            {
066                par1ArrayOfFloat = new float[par4 * par5];
067            }
068    
069            Arrays.fill(par1ArrayOfFloat, 0, par4 * par5, this.rainfall);
070            return par1ArrayOfFloat;
071        }
072    
073        /**
074         * Returns biomes to use for the blocks and loads the other data like temperature and humidity onto the
075         * WorldChunkManager Args: oldBiomeList, x, z, width, depth
076         */
077        public BiomeGenBase[] loadBlockGeneratorData(BiomeGenBase[] par1ArrayOfBiomeGenBase, int par2, int par3, int par4, int par5)
078        {
079            if (par1ArrayOfBiomeGenBase == null || par1ArrayOfBiomeGenBase.length < par4 * par5)
080            {
081                par1ArrayOfBiomeGenBase = new BiomeGenBase[par4 * par5];
082            }
083    
084            Arrays.fill(par1ArrayOfBiomeGenBase, 0, par4 * par5, this.biomeGenerator);
085            return par1ArrayOfBiomeGenBase;
086        }
087    
088        /**
089         * Return a list of biomes for the specified blocks. Args: listToReuse, x, y, width, length, cacheFlag (if false,
090         * don't check biomeCache to avoid infinite loop in BiomeCacheBlock)
091         */
092        public BiomeGenBase[] getBiomeGenAt(BiomeGenBase[] par1ArrayOfBiomeGenBase, int par2, int par3, int par4, int par5, boolean par6)
093        {
094            return this.loadBlockGeneratorData(par1ArrayOfBiomeGenBase, par2, par3, par4, par5);
095        }
096    
097        /**
098         * Finds a valid position within a range, that is in one of the listed biomes. Searches {par1,par2} +-par3 blocks.
099         * Strongly favors positive y positions.
100         */
101        public ChunkPosition findBiomePosition(int par1, int par2, int par3, List par4List, Random par5Random)
102        {
103            return par4List.contains(this.biomeGenerator) ? new ChunkPosition(par1 - par3 + par5Random.nextInt(par3 * 2 + 1), 0, par2 - par3 + par5Random.nextInt(par3 * 2 + 1)) : null;
104        }
105    
106        /**
107         * checks given Chunk's Biomes against List of allowed ones
108         */
109        public boolean areBiomesViable(int par1, int par2, int par3, List par4List)
110        {
111            return par4List.contains(this.biomeGenerator);
112        }
113    }