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