mirror of
https://github.com/PaperMC/Paper.git
synced 2025-08-17 13:24:17 -07:00
190 lines
6.1 KiB
Java
190 lines
6.1 KiB
Java
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);
|
|
}
|
|
}
|