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.nbt.NBTTagCompound; import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; public class MapGenVillage extends MapGenStructure { /** A list of all the biomes villages can spawn in. */ public static final List villageSpawnBiomes = Arrays.asList(new BiomeGenBase[] {BiomeGenBase.plains, BiomeGenBase.desert, BiomeGenBase.savanna}); /** World terrain type, 0 for normal, 1 for flat map */ private int terrainType; private int field_82665_g; private int field_82666_h; private static final String __OBFID = "CL_00000514"; public MapGenVillage() { this.field_82665_g = 32; this.field_82666_h = 8; } public MapGenVillage(Map p_i2093_1_) { this(); Iterator var2 = p_i2093_1_.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); } } } public String getStructureName() { return "Village"; } protected boolean canSpawnStructureAtCoords(int p_75047_1_, int p_75047_2_) { int var3 = p_75047_1_; int var4 = p_75047_2_; if (p_75047_1_ < 0) { p_75047_1_ -= this.field_82665_g - 1; } if (p_75047_2_ < 0) { p_75047_2_ -= this.field_82665_g - 1; } int var5 = p_75047_1_ / this.field_82665_g; int var6 = p_75047_2_ / 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 p_75049_1_, int p_75049_2_) { return new MapGenVillage.Start(this.worldObj, this.rand, p_75049_1_, p_75049_2_, this.terrainType); } public static class Start extends StructureStart { private boolean hasMoreThanTwoComponents; private static final String __OBFID = "CL_00000515"; public Start() {} public Start(World worldIn, Random p_i2092_2_, int p_i2092_3_, int p_i2092_4_, int p_i2092_5_) { super(p_i2092_3_, p_i2092_4_); List var6 = StructureVillagePieces.getStructureVillageWeightedPieceList(p_i2092_2_, p_i2092_5_); StructureVillagePieces.Start var7 = new StructureVillagePieces.Start(worldIn.getWorldChunkManager(), 0, p_i2092_2_, (p_i2092_3_ << 4) + 2, (p_i2092_4_ << 4) + 2, var6, p_i2092_5_); this.components.add(var7); var7.buildComponent(var7, this.components, p_i2092_2_); List var8 = var7.field_74930_j; List var9 = var7.field_74932_i; int var10; while (!var8.isEmpty() || !var9.isEmpty()) { StructureComponent var11; if (var8.isEmpty()) { var10 = p_i2092_2_.nextInt(var9.size()); var11 = (StructureComponent)var9.remove(var10); var11.buildComponent(var7, this.components, p_i2092_2_); } else { var10 = p_i2092_2_.nextInt(var8.size()); var11 = (StructureComponent)var8.remove(var10); var11.buildComponent(var7, this.components, p_i2092_2_); } } this.updateBoundingBox(); var10 = 0; Iterator var13 = this.components.iterator(); while (var13.hasNext()) { StructureComponent var12 = (StructureComponent)var13.next(); if (!(var12 instanceof StructureVillagePieces.Road)) { ++var10; } } this.hasMoreThanTwoComponents = var10 > 2; } public boolean isSizeableStructure() { return this.hasMoreThanTwoComponents; } public void func_143022_a(NBTTagCompound p_143022_1_) { super.func_143022_a(p_143022_1_); p_143022_1_.setBoolean("Valid", this.hasMoreThanTwoComponents); } public void func_143017_b(NBTTagCompound p_143017_1_) { super.func_143017_b(p_143017_1_); this.hasMoreThanTwoComponents = p_143017_1_.getBoolean("Valid"); } } }