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 }