package net.minecraft.server; 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; public class WorldGenVillage extends StructureGenerator { public static final List<BiomeBase> a = Arrays.asList(new BiomeBase[] { Biomes.c, Biomes.d, Biomes.K, Biomes.g}); private int b; private int d; private final int h; public WorldGenVillage() { this.d = 32; this.h = 8; } public WorldGenVillage(Map<String, String> map) { this(); Iterator iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Entry entry = (Entry) iterator.next(); if (((String) entry.getKey()).equals("size")) { this.b = MathHelper.a((String) entry.getValue(), this.b, 0); } else if (((String) entry.getKey()).equals("distance")) { this.d = MathHelper.a((String) entry.getValue(), this.d, 9); } } } public String a() { return "Village"; } protected boolean a(int i, int j) { int k = i; int l = j; if (i < 0) { i -= this.d - 1; } if (j < 0) { j -= this.d - 1; } int i1 = i / this.d; int j1 = j / this.d; Random random = this.g.a(i1, j1, this.g.spigotConfig.villageSeed); // Spigot i1 *= this.d; j1 *= this.d; i1 += random.nextInt(this.d - 8); j1 += random.nextInt(this.d - 8); if (k == i1 && l == j1) { boolean flag = this.g.getWorldChunkManager().a(k * 16 + 8, l * 16 + 8, 0, WorldGenVillage.a); if (flag) { return true; } } return false; } public BlockPosition getNearestGeneratedFeature(World world, BlockPosition blockposition, boolean flag) { this.g = world; return a(world, this, blockposition, this.d, 8, 10387312, false, 100, flag); } protected StructureStart b(int i, int j) { return new WorldGenVillage.WorldGenVillageStart(this.g, this.f, i, j, this.b); } public static class WorldGenVillageStart extends StructureStart { private boolean c; public WorldGenVillageStart() {} public WorldGenVillageStart(World world, Random random, int i, int j, int k) { super(i, j); List list = WorldGenVillagePieces.a(random, k); WorldGenVillagePieces.WorldGenVillageStartPiece worldgenvillagepieces_worldgenvillagestartpiece = new WorldGenVillagePieces.WorldGenVillageStartPiece(world.getWorldChunkManager(), 0, random, (i << 4) + 2, (j << 4) + 2, list, k); this.a.add(worldgenvillagepieces_worldgenvillagestartpiece); worldgenvillagepieces_worldgenvillagestartpiece.a((StructurePiece) worldgenvillagepieces_worldgenvillagestartpiece, this.a, random); List list1 = worldgenvillagepieces_worldgenvillagestartpiece.f; List list2 = worldgenvillagepieces_worldgenvillagestartpiece.e; int l; while (!list1.isEmpty() || !list2.isEmpty()) { StructurePiece structurepiece; if (list1.isEmpty()) { l = random.nextInt(list2.size()); structurepiece = (StructurePiece) list2.remove(l); structurepiece.a((StructurePiece) worldgenvillagepieces_worldgenvillagestartpiece, this.a, random); } else { l = random.nextInt(list1.size()); structurepiece = (StructurePiece) list1.remove(l); structurepiece.a((StructurePiece) worldgenvillagepieces_worldgenvillagestartpiece, this.a, random); } } this.d(); l = 0; Iterator iterator = this.a.iterator(); while (iterator.hasNext()) { StructurePiece structurepiece1 = (StructurePiece) iterator.next(); if (!(structurepiece1 instanceof WorldGenVillagePieces.WorldGenVillageRoadPiece)) { ++l; } } this.c = l > 2; } public boolean a() { return this.c; } public void a(NBTTagCompound nbttagcompound) { super.a(nbttagcompound); nbttagcompound.setBoolean("Valid", this.c); } public void b(NBTTagCompound nbttagcompound) { super.b(nbttagcompound); this.c = nbttagcompound.getBoolean("Valid"); } } }