diff options
Diffstat (limited to 'src/main/java/net/minecraft/server/WorldGenVillagePiece.java')
-rw-r--r-- | src/main/java/net/minecraft/server/WorldGenVillagePiece.java | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/src/main/java/net/minecraft/server/WorldGenVillagePiece.java b/src/main/java/net/minecraft/server/WorldGenVillagePiece.java new file mode 100644 index 00000000..9733b8a8 --- /dev/null +++ b/src/main/java/net/minecraft/server/WorldGenVillagePiece.java @@ -0,0 +1,189 @@ +package net.minecraft.server; + +import java.util.List; +import java.util.Random; + +abstract class WorldGenVillagePiece extends StructurePiece { + + protected int k = -1; + private int a; + private boolean b; + + public WorldGenVillagePiece() {} + + protected WorldGenVillagePiece(WorldGenVillageStartPiece worldgenvillagestartpiece, int i) { + super(i); + if (worldgenvillagestartpiece != null) { + this.b = worldgenvillagestartpiece.b; + } + } + + protected void a(NBTTagCompound nbttagcompound) { + nbttagcompound.setInt("HPos", this.k); + nbttagcompound.setInt("VCount", this.a); + nbttagcompound.setBoolean("Desert", this.b); + } + + protected void b(NBTTagCompound nbttagcompound) { + this.k = nbttagcompound.getInt("HPos"); + this.a = nbttagcompound.getInt("VCount"); + this.b = nbttagcompound.getBoolean("Desert"); + } + + protected StructurePiece a(WorldGenVillageStartPiece worldgenvillagestartpiece, List list, Random random, int i, int j) { + switch (this.g) { + case 0: + return WorldGenVillagePieces.a(worldgenvillagestartpiece, list, random, this.f.a - 1, this.f.b + i, this.f.c + j, 1, this.d()); + + case 1: + return WorldGenVillagePieces.a(worldgenvillagestartpiece, list, random, this.f.a + j, this.f.b + i, this.f.c - 1, 2, this.d()); + + case 2: + return WorldGenVillagePieces.a(worldgenvillagestartpiece, list, random, this.f.a - 1, this.f.b + i, this.f.c + j, 1, this.d()); + + case 3: + return WorldGenVillagePieces.a(worldgenvillagestartpiece, list, random, this.f.a + j, this.f.b + i, this.f.c - 1, 2, this.d()); + + default: + return null; + } + } + + protected StructurePiece b(WorldGenVillageStartPiece worldgenvillagestartpiece, List list, Random random, int i, int j) { + switch (this.g) { + case 0: + return WorldGenVillagePieces.a(worldgenvillagestartpiece, list, random, this.f.d + 1, this.f.b + i, this.f.c + j, 3, this.d()); + + case 1: + return WorldGenVillagePieces.a(worldgenvillagestartpiece, list, random, this.f.a + j, this.f.b + i, this.f.f + 1, 0, this.d()); + + case 2: + return WorldGenVillagePieces.a(worldgenvillagestartpiece, list, random, this.f.d + 1, this.f.b + i, this.f.c + j, 3, this.d()); + + case 3: + return WorldGenVillagePieces.a(worldgenvillagestartpiece, list, random, this.f.a + j, this.f.b + i, this.f.f + 1, 0, this.d()); + + default: + return null; + } + } + + protected int b(World world, StructureBoundingBox structureboundingbox) { + int i = 0; + int j = 0; + + for (int k = this.f.c; k <= this.f.f; ++k) { + for (int l = this.f.a; l <= this.f.d; ++l) { + if (structureboundingbox.b(l, 64, k)) { + i += Math.max(world.i(l, k), world.worldProvider.getSeaLevel()); + ++j; + } + } + } + + if (j == 0) { + return -1; + } else { + return i / j; + } + } + + protected static boolean a(StructureBoundingBox structureboundingbox) { + return structureboundingbox != null && structureboundingbox.b > 10; + } + + protected void a(World world, StructureBoundingBox structureboundingbox, int i, int j, int k, int l) { + if (this.a < l) { + for (int i1 = this.a; i1 < l; ++i1) { + int j1 = this.a(i + i1, k); + int k1 = this.a(j); + int l1 = this.b(i + i1, k); + + if (!structureboundingbox.b(j1, k1, l1)) { + break; + } + + ++this.a; + EntityVillager entityvillager = new EntityVillager(world, this.b(i1)); + + entityvillager.setPositionRotation((double) j1 + 0.5D, (double) k1, (double) l1 + 0.5D, 0.0F, 0.0F); + world.addEntity(entityvillager); + } + } + } + + protected int b(int i) { + return 0; + } + + protected Block b(Block block, int i) { + if (this.b) { + if (block == Blocks.LOG || block == Blocks.LOG2) { + return Blocks.SANDSTONE; + } + + if (block == Blocks.COBBLESTONE) { + return Blocks.SANDSTONE; + } + + if (block == Blocks.WOOD) { + return Blocks.SANDSTONE; + } + + if (block == Blocks.WOOD_STAIRS) { + return Blocks.SANDSTONE_STAIRS; + } + + if (block == Blocks.COBBLESTONE_STAIRS) { + return Blocks.SANDSTONE_STAIRS; + } + + if (block == Blocks.GRAVEL) { + return Blocks.SANDSTONE; + } + } + + return block; + } + + protected int c(Block block, int i) { + if (this.b) { + if (block == Blocks.LOG || block == Blocks.LOG2) { + return 0; + } + + if (block == Blocks.COBBLESTONE) { + return 0; + } + + if (block == Blocks.WOOD) { + return 2; + } + } + + return i; + } + + protected void a(World world, Block block, int i, int j, int k, int l, StructureBoundingBox structureboundingbox) { + Block block1 = this.b(block, i); + int i1 = this.c(block, i); + + super.a(world, block1, i1, j, k, l, structureboundingbox); + } + + protected void a(World world, StructureBoundingBox structureboundingbox, int i, int j, int k, int l, int i1, int j1, Block block, Block block1, boolean flag) { + Block block2 = this.b(block, 0); + int k1 = this.c(block, 0); + Block block3 = this.b(block1, 0); + int l1 = this.c(block1, 0); + + super.a(world, structureboundingbox, i, j, k, l, i1, j1, block2, k1, block3, l1, flag); + } + + protected void b(World world, Block block, int i, int j, int k, int l, StructureBoundingBox structureboundingbox) { + Block block1 = this.b(block, i); + int i1 = this.c(block, i); + + super.b(world, block1, i1, j, k, l, structureboundingbox); + } +} |