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 }