001 package net.minecraft.src;
002
003 import java.util.Arrays;
004 import java.util.Iterator;
005 import java.util.List;
006 import java.util.Map;
007 import java.util.Random;
008 import java.util.Map.Entry;
009
010 public class MapGenVillage extends MapGenStructure
011 {
012 /** A list of all the biomes villages can spawn in. */
013 public static final List villageSpawnBiomes = Arrays.asList(new BiomeGenBase[] {BiomeGenBase.plains, BiomeGenBase.desert});
014
015 /** World terrain type, 0 for normal, 1 for flat map */
016 private int terrainType;
017 private int field_82665_g;
018 private int field_82666_h;
019
020 public MapGenVillage()
021 {
022 this.terrainType = 0;
023 this.field_82665_g = 32;
024 this.field_82666_h = 8;
025 }
026
027 public MapGenVillage(Map par1Map)
028 {
029 this();
030 Iterator var2 = par1Map.entrySet().iterator();
031
032 while (var2.hasNext())
033 {
034 Entry var3 = (Entry)var2.next();
035
036 if (((String)var3.getKey()).equals("size"))
037 {
038 this.terrainType = MathHelper.func_82714_a((String)var3.getValue(), this.terrainType, 0);
039 }
040 else if (((String)var3.getKey()).equals("distance"))
041 {
042 this.field_82665_g = MathHelper.func_82714_a((String)var3.getValue(), this.field_82665_g, this.field_82666_h + 1);
043 }
044 }
045 }
046
047 protected boolean canSpawnStructureAtCoords(int par1, int par2)
048 {
049 int var3 = par1;
050 int var4 = par2;
051
052 if (par1 < 0)
053 {
054 par1 -= this.field_82665_g - 1;
055 }
056
057 if (par2 < 0)
058 {
059 par2 -= this.field_82665_g - 1;
060 }
061
062 int var5 = par1 / this.field_82665_g;
063 int var6 = par2 / this.field_82665_g;
064 Random var7 = this.worldObj.setRandomSeed(var5, var6, 10387312);
065 var5 *= this.field_82665_g;
066 var6 *= this.field_82665_g;
067 var5 += var7.nextInt(this.field_82665_g - this.field_82666_h);
068 var6 += var7.nextInt(this.field_82665_g - this.field_82666_h);
069
070 if (var3 == var5 && var4 == var6)
071 {
072 boolean var8 = this.worldObj.getWorldChunkManager().areBiomesViable(var3 * 16 + 8, var4 * 16 + 8, 0, villageSpawnBiomes);
073
074 if (var8)
075 {
076 return true;
077 }
078 }
079
080 return false;
081 }
082
083 protected StructureStart getStructureStart(int par1, int par2)
084 {
085 return new StructureVillageStart(this.worldObj, this.rand, par1, par2, this.terrainType);
086 }
087 }