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