package net.minecraft.world.gen.structure; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Random; import java.util.Map.Entry; import net.minecraft.util.MathHelper; import net.minecraft.world.biome.BiomeGenBase; public class MapGenVillage extends MapGenStructure { /** A list of all the biomes villages can spawn in. */ public static List villageSpawnBiomes = Arrays.asList(new BiomeGenBase[] {BiomeGenBase.plains, BiomeGenBase.desert}); /** World terrain type, 0 for normal, 1 for flat map */ private int terrainType; private int field_82665_g; private int field_82666_h; public MapGenVillage() { this.terrainType = 0; this.field_82665_g = 32; this.field_82666_h = 8; } public MapGenVillage(Map par1Map) { this(); Iterator var2 = par1Map.entrySet().iterator(); while (var2.hasNext()) { Entry var3 = (Entry)var2.next(); if (((String)var3.getKey()).equals("size")) { this.terrainType = MathHelper.parseIntWithDefaultAndMax((String)var3.getValue(), this.terrainType, 0); } else if (((String)var3.getKey()).equals("distance")) { this.field_82665_g = MathHelper.parseIntWithDefaultAndMax((String)var3.getValue(), this.field_82665_g, this.field_82666_h + 1); } } } protected boolean canSpawnStructureAtCoords(int par1, int par2) { int var3 = par1; int var4 = par2; if (par1 < 0) { par1 -= this.field_82665_g - 1; } if (par2 < 0) { par2 -= this.field_82665_g - 1; } int var5 = par1 / this.field_82665_g; int var6 = par2 / this.field_82665_g; Random var7 = this.worldObj.setRandomSeed(var5, var6, 10387312); var5 *= this.field_82665_g; var6 *= this.field_82665_g; var5 += var7.nextInt(this.field_82665_g - this.field_82666_h); var6 += var7.nextInt(this.field_82665_g - this.field_82666_h); if (var3 == var5 && var4 == var6) { boolean var8 = this.worldObj.getWorldChunkManager().areBiomesViable(var3 * 16 + 8, var4 * 16 + 8, 0, villageSpawnBiomes); if (var8) { return true; } } return false; } protected StructureStart getStructureStart(int par1, int par2) { return new StructureVillageStart(this.worldObj, this.rand, par1, par2, this.terrainType); } }