Code/net/minecraft/world/level/levelgen/structure/structures/StrongholdPieces.java

1760 lines
96 KiB
Java
Raw Normal View History

2025-07-01 06:20:03 +00:00
package net.minecraft.world.level.levelgen.structure.structures;
import com.google.common.collect.Lists;
import com.mojang.serialization.Codec;
import java.util.List;
import javax.annotation.Nullable;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.util.ExtraCodecs;
import net.minecraft.util.RandomSource;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.level.StructureManager;
import net.minecraft.world.level.WorldGenLevel;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.ButtonBlock;
import net.minecraft.world.level.block.DoorBlock;
import net.minecraft.world.level.block.EndPortalFrameBlock;
import net.minecraft.world.level.block.FenceBlock;
import net.minecraft.world.level.block.IronBarsBlock;
import net.minecraft.world.level.block.LadderBlock;
import net.minecraft.world.level.block.SlabBlock;
import net.minecraft.world.level.block.StairBlock;
import net.minecraft.world.level.block.WallTorchBlock;
import net.minecraft.world.level.block.entity.SpawnerBlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.DoubleBlockHalf;
import net.minecraft.world.level.block.state.properties.SlabType;
import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.levelgen.structure.BoundingBox;
import net.minecraft.world.level.levelgen.structure.StructurePiece;
import net.minecraft.world.level.levelgen.structure.StructurePieceAccessor;
import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext;
import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceType;
import net.minecraft.world.level.storage.loot.BuiltInLootTables;
public class StrongholdPieces {
private static final int SMALL_DOOR_WIDTH = 3;
private static final int SMALL_DOOR_HEIGHT = 3;
private static final int MAX_DEPTH = 50;
private static final int LOWEST_Y_POSITION = 10;
private static final boolean CHECK_AIR = true;
public static final int MAGIC_START_Y = 64;
private static final StrongholdPieces.PieceWeight[] STRONGHOLD_PIECE_WEIGHTS = new StrongholdPieces.PieceWeight[]{
new StrongholdPieces.PieceWeight(StrongholdPieces.Straight.class, 40, 0),
new StrongholdPieces.PieceWeight(StrongholdPieces.PrisonHall.class, 5, 5),
new StrongholdPieces.PieceWeight(StrongholdPieces.LeftTurn.class, 20, 0),
new StrongholdPieces.PieceWeight(StrongholdPieces.RightTurn.class, 20, 0),
new StrongholdPieces.PieceWeight(StrongholdPieces.RoomCrossing.class, 10, 6),
new StrongholdPieces.PieceWeight(StrongholdPieces.StraightStairsDown.class, 5, 5),
new StrongholdPieces.PieceWeight(StrongholdPieces.StairsDown.class, 5, 5),
new StrongholdPieces.PieceWeight(StrongholdPieces.FiveCrossing.class, 5, 4),
new StrongholdPieces.PieceWeight(StrongholdPieces.ChestCorridor.class, 5, 4),
new StrongholdPieces.PieceWeight(StrongholdPieces.Library.class, 10, 2) {
@Override
public boolean doPlace(int p_229450_) {
return super.doPlace(p_229450_) && p_229450_ > 4;
}
},
new StrongholdPieces.PieceWeight(StrongholdPieces.PortalRoom.class, 20, 1) {
@Override
public boolean doPlace(int p_229456_) {
return super.doPlace(p_229456_) && p_229456_ > 5;
}
}
};
private static List<StrongholdPieces.PieceWeight> currentPieces;
static Class<? extends StrongholdPieces.StrongholdPiece> imposedPiece;
private static int totalWeight;
static final StrongholdPieces.SmoothStoneSelector SMOOTH_STONE_SELECTOR = new StrongholdPieces.SmoothStoneSelector();
public static void resetPieces() {
currentPieces = Lists.newArrayList();
for (StrongholdPieces.PieceWeight strongholdpieces$pieceweight : STRONGHOLD_PIECE_WEIGHTS) {
strongholdpieces$pieceweight.placeCount = 0;
currentPieces.add(strongholdpieces$pieceweight);
}
imposedPiece = null;
}
private static boolean updatePieceWeight() {
boolean flag = false;
totalWeight = 0;
for (StrongholdPieces.PieceWeight strongholdpieces$pieceweight : currentPieces) {
if (strongholdpieces$pieceweight.maxPlaceCount > 0 && strongholdpieces$pieceweight.placeCount < strongholdpieces$pieceweight.maxPlaceCount) {
flag = true;
}
totalWeight = totalWeight + strongholdpieces$pieceweight.weight;
}
return flag;
}
private static StrongholdPieces.StrongholdPiece findAndCreatePieceFactory(
Class<? extends StrongholdPieces.StrongholdPiece> p_229427_,
StructurePieceAccessor p_229428_,
RandomSource p_229429_,
int p_229430_,
int p_229431_,
int p_229432_,
@Nullable Direction p_229433_,
int p_229434_
) {
StrongholdPieces.StrongholdPiece strongholdpieces$strongholdpiece = null;
if (p_229427_ == StrongholdPieces.Straight.class) {
strongholdpieces$strongholdpiece = StrongholdPieces.Straight.createPiece(p_229428_, p_229429_, p_229430_, p_229431_, p_229432_, p_229433_, p_229434_);
} else if (p_229427_ == StrongholdPieces.PrisonHall.class) {
strongholdpieces$strongholdpiece = StrongholdPieces.PrisonHall.createPiece(
p_229428_, p_229429_, p_229430_, p_229431_, p_229432_, p_229433_, p_229434_
);
} else if (p_229427_ == StrongholdPieces.LeftTurn.class) {
strongholdpieces$strongholdpiece = StrongholdPieces.LeftTurn.createPiece(p_229428_, p_229429_, p_229430_, p_229431_, p_229432_, p_229433_, p_229434_);
} else if (p_229427_ == StrongholdPieces.RightTurn.class) {
strongholdpieces$strongholdpiece = StrongholdPieces.RightTurn.createPiece(p_229428_, p_229429_, p_229430_, p_229431_, p_229432_, p_229433_, p_229434_);
} else if (p_229427_ == StrongholdPieces.RoomCrossing.class) {
strongholdpieces$strongholdpiece = StrongholdPieces.RoomCrossing.createPiece(
p_229428_, p_229429_, p_229430_, p_229431_, p_229432_, p_229433_, p_229434_
);
} else if (p_229427_ == StrongholdPieces.StraightStairsDown.class) {
strongholdpieces$strongholdpiece = StrongholdPieces.StraightStairsDown.createPiece(
p_229428_, p_229429_, p_229430_, p_229431_, p_229432_, p_229433_, p_229434_
);
} else if (p_229427_ == StrongholdPieces.StairsDown.class) {
strongholdpieces$strongholdpiece = StrongholdPieces.StairsDown.createPiece(
p_229428_, p_229429_, p_229430_, p_229431_, p_229432_, p_229433_, p_229434_
);
} else if (p_229427_ == StrongholdPieces.FiveCrossing.class) {
strongholdpieces$strongholdpiece = StrongholdPieces.FiveCrossing.createPiece(
p_229428_, p_229429_, p_229430_, p_229431_, p_229432_, p_229433_, p_229434_
);
} else if (p_229427_ == StrongholdPieces.ChestCorridor.class) {
strongholdpieces$strongholdpiece = StrongholdPieces.ChestCorridor.createPiece(
p_229428_, p_229429_, p_229430_, p_229431_, p_229432_, p_229433_, p_229434_
);
} else if (p_229427_ == StrongholdPieces.Library.class) {
strongholdpieces$strongholdpiece = StrongholdPieces.Library.createPiece(p_229428_, p_229429_, p_229430_, p_229431_, p_229432_, p_229433_, p_229434_);
} else if (p_229427_ == StrongholdPieces.PortalRoom.class) {
strongholdpieces$strongholdpiece = StrongholdPieces.PortalRoom.createPiece(p_229428_, p_229430_, p_229431_, p_229432_, p_229433_, p_229434_);
}
return strongholdpieces$strongholdpiece;
}
private static StrongholdPieces.StrongholdPiece generatePieceFromSmallDoor(
StrongholdPieces.StartPiece p_229418_,
StructurePieceAccessor p_229419_,
RandomSource p_229420_,
int p_229421_,
int p_229422_,
int p_229423_,
Direction p_229424_,
int p_229425_
) {
if (!updatePieceWeight()) {
return null;
} else {
if (imposedPiece != null) {
StrongholdPieces.StrongholdPiece strongholdpieces$strongholdpiece = findAndCreatePieceFactory(
imposedPiece, p_229419_, p_229420_, p_229421_, p_229422_, p_229423_, p_229424_, p_229425_
);
imposedPiece = null;
if (strongholdpieces$strongholdpiece != null) {
return strongholdpieces$strongholdpiece;
}
}
int j = 0;
while (j < 5) {
j++;
int i = p_229420_.nextInt(totalWeight);
for (StrongholdPieces.PieceWeight strongholdpieces$pieceweight : currentPieces) {
i -= strongholdpieces$pieceweight.weight;
if (i < 0) {
if (!strongholdpieces$pieceweight.doPlace(p_229425_) || strongholdpieces$pieceweight == p_229418_.previousPiece) {
break;
}
StrongholdPieces.StrongholdPiece strongholdpieces$strongholdpiece1 = findAndCreatePieceFactory(
strongholdpieces$pieceweight.pieceClass, p_229419_, p_229420_, p_229421_, p_229422_, p_229423_, p_229424_, p_229425_
);
if (strongholdpieces$strongholdpiece1 != null) {
strongholdpieces$pieceweight.placeCount++;
p_229418_.previousPiece = strongholdpieces$pieceweight;
if (!strongholdpieces$pieceweight.isValid()) {
currentPieces.remove(strongholdpieces$pieceweight);
}
return strongholdpieces$strongholdpiece1;
}
}
}
}
BoundingBox boundingbox = StrongholdPieces.FillerCorridor.findPieceBox(p_229419_, p_229420_, p_229421_, p_229422_, p_229423_, p_229424_);
return boundingbox != null && boundingbox.minY() > 1 ? new StrongholdPieces.FillerCorridor(p_229425_, boundingbox, p_229424_) : null;
}
}
static StructurePiece generateAndAddPiece(
StrongholdPieces.StartPiece p_229437_,
StructurePieceAccessor p_229438_,
RandomSource p_229439_,
int p_229440_,
int p_229441_,
int p_229442_,
@Nullable Direction p_229443_,
int p_229444_
) {
if (p_229444_ > 50) {
return null;
} else if (Math.abs(p_229440_ - p_229437_.getBoundingBox().minX()) <= 112 && Math.abs(p_229442_ - p_229437_.getBoundingBox().minZ()) <= 112) {
StructurePiece structurepiece = generatePieceFromSmallDoor(p_229437_, p_229438_, p_229439_, p_229440_, p_229441_, p_229442_, p_229443_, p_229444_ + 1);
if (structurepiece != null) {
p_229438_.addPiece(structurepiece);
p_229437_.pendingChildren.add(structurepiece);
}
return structurepiece;
} else {
return null;
}
}
public static class ChestCorridor extends StrongholdPieces.StrongholdPiece {
private static final int WIDTH = 5;
private static final int HEIGHT = 5;
private static final int DEPTH = 7;
private boolean hasPlacedChest;
public ChestCorridor(int p_229465_, RandomSource p_229466_, BoundingBox p_229467_, Direction p_229468_) {
super(StructurePieceType.STRONGHOLD_CHEST_CORRIDOR, p_229465_, p_229467_);
this.setOrientation(p_229468_);
this.entryDoor = this.randomSmallDoor(p_229466_);
}
public ChestCorridor(CompoundTag p_229470_) {
super(StructurePieceType.STRONGHOLD_CHEST_CORRIDOR, p_229470_);
this.hasPlacedChest = p_229470_.getBooleanOr("Chest", false);
}
@Override
protected void addAdditionalSaveData(StructurePieceSerializationContext p_229492_, CompoundTag p_229493_) {
super.addAdditionalSaveData(p_229492_, p_229493_);
p_229493_.putBoolean("Chest", this.hasPlacedChest);
}
@Override
public void addChildren(StructurePiece p_229480_, StructurePieceAccessor p_229481_, RandomSource p_229482_) {
this.generateSmallDoorChildForward((StrongholdPieces.StartPiece)p_229480_, p_229481_, p_229482_, 1, 1);
}
public static StrongholdPieces.ChestCorridor createPiece(
StructurePieceAccessor p_229484_, RandomSource p_229485_, int p_229486_, int p_229487_, int p_229488_, Direction p_229489_, int p_229490_
) {
BoundingBox boundingbox = BoundingBox.orientBox(p_229486_, p_229487_, p_229488_, -1, -1, 0, 5, 5, 7, p_229489_);
return isOkBox(boundingbox) && p_229484_.findCollisionPiece(boundingbox) == null
? new StrongholdPieces.ChestCorridor(p_229490_, p_229485_, boundingbox, p_229489_)
: null;
}
@Override
public void postProcess(
WorldGenLevel p_229472_,
StructureManager p_229473_,
ChunkGenerator p_229474_,
RandomSource p_229475_,
BoundingBox p_229476_,
ChunkPos p_229477_,
BlockPos p_229478_
) {
this.generateBox(p_229472_, p_229476_, 0, 0, 0, 4, 4, 6, true, p_229475_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateSmallDoor(p_229472_, p_229475_, p_229476_, this.entryDoor, 1, 1, 0);
this.generateSmallDoor(p_229472_, p_229475_, p_229476_, StrongholdPieces.StrongholdPiece.SmallDoorType.OPENING, 1, 1, 6);
this.generateBox(p_229472_, p_229476_, 3, 1, 2, 3, 1, 4, Blocks.STONE_BRICKS.defaultBlockState(), Blocks.STONE_BRICKS.defaultBlockState(), false);
this.placeBlock(p_229472_, Blocks.STONE_BRICK_SLAB.defaultBlockState(), 3, 1, 1, p_229476_);
this.placeBlock(p_229472_, Blocks.STONE_BRICK_SLAB.defaultBlockState(), 3, 1, 5, p_229476_);
this.placeBlock(p_229472_, Blocks.STONE_BRICK_SLAB.defaultBlockState(), 3, 2, 2, p_229476_);
this.placeBlock(p_229472_, Blocks.STONE_BRICK_SLAB.defaultBlockState(), 3, 2, 4, p_229476_);
for (int i = 2; i <= 4; i++) {
this.placeBlock(p_229472_, Blocks.STONE_BRICK_SLAB.defaultBlockState(), 2, 1, i, p_229476_);
}
if (!this.hasPlacedChest && p_229476_.isInside(this.getWorldPos(3, 2, 3))) {
this.hasPlacedChest = true;
this.createChest(p_229472_, p_229476_, p_229475_, 3, 2, 3, BuiltInLootTables.STRONGHOLD_CORRIDOR);
}
}
}
public static class FillerCorridor extends StrongholdPieces.StrongholdPiece {
private final int steps;
public FillerCorridor(int p_229496_, BoundingBox p_229497_, Direction p_229498_) {
super(StructurePieceType.STRONGHOLD_FILLER_CORRIDOR, p_229496_, p_229497_);
this.setOrientation(p_229498_);
this.steps = p_229498_ != Direction.NORTH && p_229498_ != Direction.SOUTH ? p_229497_.getXSpan() : p_229497_.getZSpan();
}
public FillerCorridor(CompoundTag p_229500_) {
super(StructurePieceType.STRONGHOLD_FILLER_CORRIDOR, p_229500_);
this.steps = p_229500_.getIntOr("Steps", 0);
}
@Override
protected void addAdditionalSaveData(StructurePieceSerializationContext p_229517_, CompoundTag p_229518_) {
super.addAdditionalSaveData(p_229517_, p_229518_);
p_229518_.putInt("Steps", this.steps);
}
public static BoundingBox findPieceBox(
StructurePieceAccessor p_229510_, RandomSource p_229511_, int p_229512_, int p_229513_, int p_229514_, Direction p_229515_
) {
int i = 3;
BoundingBox boundingbox = BoundingBox.orientBox(p_229512_, p_229513_, p_229514_, -1, -1, 0, 5, 5, 4, p_229515_);
StructurePiece structurepiece = p_229510_.findCollisionPiece(boundingbox);
if (structurepiece == null) {
return null;
} else {
if (structurepiece.getBoundingBox().minY() == boundingbox.minY()) {
for (int j = 2; j >= 1; j--) {
boundingbox = BoundingBox.orientBox(p_229512_, p_229513_, p_229514_, -1, -1, 0, 5, 5, j, p_229515_);
if (!structurepiece.getBoundingBox().intersects(boundingbox)) {
return BoundingBox.orientBox(p_229512_, p_229513_, p_229514_, -1, -1, 0, 5, 5, j + 1, p_229515_);
}
}
}
return null;
}
}
@Override
public void postProcess(
WorldGenLevel p_229502_,
StructureManager p_229503_,
ChunkGenerator p_229504_,
RandomSource p_229505_,
BoundingBox p_229506_,
ChunkPos p_229507_,
BlockPos p_229508_
) {
for (int i = 0; i < this.steps; i++) {
this.placeBlock(p_229502_, Blocks.STONE_BRICKS.defaultBlockState(), 0, 0, i, p_229506_);
this.placeBlock(p_229502_, Blocks.STONE_BRICKS.defaultBlockState(), 1, 0, i, p_229506_);
this.placeBlock(p_229502_, Blocks.STONE_BRICKS.defaultBlockState(), 2, 0, i, p_229506_);
this.placeBlock(p_229502_, Blocks.STONE_BRICKS.defaultBlockState(), 3, 0, i, p_229506_);
this.placeBlock(p_229502_, Blocks.STONE_BRICKS.defaultBlockState(), 4, 0, i, p_229506_);
for (int j = 1; j <= 3; j++) {
this.placeBlock(p_229502_, Blocks.STONE_BRICKS.defaultBlockState(), 0, j, i, p_229506_);
this.placeBlock(p_229502_, Blocks.CAVE_AIR.defaultBlockState(), 1, j, i, p_229506_);
this.placeBlock(p_229502_, Blocks.CAVE_AIR.defaultBlockState(), 2, j, i, p_229506_);
this.placeBlock(p_229502_, Blocks.CAVE_AIR.defaultBlockState(), 3, j, i, p_229506_);
this.placeBlock(p_229502_, Blocks.STONE_BRICKS.defaultBlockState(), 4, j, i, p_229506_);
}
this.placeBlock(p_229502_, Blocks.STONE_BRICKS.defaultBlockState(), 0, 4, i, p_229506_);
this.placeBlock(p_229502_, Blocks.STONE_BRICKS.defaultBlockState(), 1, 4, i, p_229506_);
this.placeBlock(p_229502_, Blocks.STONE_BRICKS.defaultBlockState(), 2, 4, i, p_229506_);
this.placeBlock(p_229502_, Blocks.STONE_BRICKS.defaultBlockState(), 3, 4, i, p_229506_);
this.placeBlock(p_229502_, Blocks.STONE_BRICKS.defaultBlockState(), 4, 4, i, p_229506_);
}
}
}
public static class FiveCrossing extends StrongholdPieces.StrongholdPiece {
protected static final int WIDTH = 10;
protected static final int HEIGHT = 9;
protected static final int DEPTH = 11;
private final boolean leftLow;
private final boolean leftHigh;
private final boolean rightLow;
private final boolean rightHigh;
public FiveCrossing(int p_229527_, RandomSource p_229528_, BoundingBox p_229529_, Direction p_229530_) {
super(StructurePieceType.STRONGHOLD_FIVE_CROSSING, p_229527_, p_229529_);
this.setOrientation(p_229530_);
this.entryDoor = this.randomSmallDoor(p_229528_);
this.leftLow = p_229528_.nextBoolean();
this.leftHigh = p_229528_.nextBoolean();
this.rightLow = p_229528_.nextBoolean();
this.rightHigh = p_229528_.nextInt(3) > 0;
}
public FiveCrossing(CompoundTag p_229532_) {
super(StructurePieceType.STRONGHOLD_FIVE_CROSSING, p_229532_);
this.leftLow = p_229532_.getBooleanOr("leftLow", false);
this.leftHigh = p_229532_.getBooleanOr("leftHigh", false);
this.rightLow = p_229532_.getBooleanOr("rightLow", false);
this.rightHigh = p_229532_.getBooleanOr("rightHigh", false);
}
@Override
protected void addAdditionalSaveData(StructurePieceSerializationContext p_229554_, CompoundTag p_229555_) {
super.addAdditionalSaveData(p_229554_, p_229555_);
p_229555_.putBoolean("leftLow", this.leftLow);
p_229555_.putBoolean("leftHigh", this.leftHigh);
p_229555_.putBoolean("rightLow", this.rightLow);
p_229555_.putBoolean("rightHigh", this.rightHigh);
}
@Override
public void addChildren(StructurePiece p_229542_, StructurePieceAccessor p_229543_, RandomSource p_229544_) {
int i = 3;
int j = 5;
Direction direction = this.getOrientation();
if (direction == Direction.WEST || direction == Direction.NORTH) {
i = 8 - i;
j = 8 - j;
}
this.generateSmallDoorChildForward((StrongholdPieces.StartPiece)p_229542_, p_229543_, p_229544_, 5, 1);
if (this.leftLow) {
this.generateSmallDoorChildLeft((StrongholdPieces.StartPiece)p_229542_, p_229543_, p_229544_, i, 1);
}
if (this.leftHigh) {
this.generateSmallDoorChildLeft((StrongholdPieces.StartPiece)p_229542_, p_229543_, p_229544_, j, 7);
}
if (this.rightLow) {
this.generateSmallDoorChildRight((StrongholdPieces.StartPiece)p_229542_, p_229543_, p_229544_, i, 1);
}
if (this.rightHigh) {
this.generateSmallDoorChildRight((StrongholdPieces.StartPiece)p_229542_, p_229543_, p_229544_, j, 7);
}
}
public static StrongholdPieces.FiveCrossing createPiece(
StructurePieceAccessor p_229546_, RandomSource p_229547_, int p_229548_, int p_229549_, int p_229550_, Direction p_229551_, int p_229552_
) {
BoundingBox boundingbox = BoundingBox.orientBox(p_229548_, p_229549_, p_229550_, -4, -3, 0, 10, 9, 11, p_229551_);
return isOkBox(boundingbox) && p_229546_.findCollisionPiece(boundingbox) == null
? new StrongholdPieces.FiveCrossing(p_229552_, p_229547_, boundingbox, p_229551_)
: null;
}
@Override
public void postProcess(
WorldGenLevel p_229534_,
StructureManager p_229535_,
ChunkGenerator p_229536_,
RandomSource p_229537_,
BoundingBox p_229538_,
ChunkPos p_229539_,
BlockPos p_229540_
) {
this.generateBox(p_229534_, p_229538_, 0, 0, 0, 9, 8, 10, true, p_229537_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateSmallDoor(p_229534_, p_229537_, p_229538_, this.entryDoor, 4, 3, 0);
if (this.leftLow) {
this.generateBox(p_229534_, p_229538_, 0, 3, 1, 0, 5, 3, CAVE_AIR, CAVE_AIR, false);
}
if (this.rightLow) {
this.generateBox(p_229534_, p_229538_, 9, 3, 1, 9, 5, 3, CAVE_AIR, CAVE_AIR, false);
}
if (this.leftHigh) {
this.generateBox(p_229534_, p_229538_, 0, 5, 7, 0, 7, 9, CAVE_AIR, CAVE_AIR, false);
}
if (this.rightHigh) {
this.generateBox(p_229534_, p_229538_, 9, 5, 7, 9, 7, 9, CAVE_AIR, CAVE_AIR, false);
}
this.generateBox(p_229534_, p_229538_, 5, 1, 10, 7, 3, 10, CAVE_AIR, CAVE_AIR, false);
this.generateBox(p_229534_, p_229538_, 1, 2, 1, 8, 2, 6, false, p_229537_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateBox(p_229534_, p_229538_, 4, 1, 5, 4, 4, 9, false, p_229537_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateBox(p_229534_, p_229538_, 8, 1, 5, 8, 4, 9, false, p_229537_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateBox(p_229534_, p_229538_, 1, 4, 7, 3, 4, 9, false, p_229537_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateBox(p_229534_, p_229538_, 1, 3, 5, 3, 3, 6, false, p_229537_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateBox(p_229534_, p_229538_, 1, 3, 4, 3, 3, 4, Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), false);
this.generateBox(p_229534_, p_229538_, 1, 4, 6, 3, 4, 6, Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), false);
this.generateBox(p_229534_, p_229538_, 5, 1, 7, 7, 1, 8, false, p_229537_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateBox(p_229534_, p_229538_, 5, 1, 9, 7, 1, 9, Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), false);
this.generateBox(p_229534_, p_229538_, 5, 2, 7, 7, 2, 7, Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), false);
this.generateBox(p_229534_, p_229538_, 4, 5, 7, 4, 5, 9, Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), false);
this.generateBox(p_229534_, p_229538_, 8, 5, 7, 8, 5, 9, Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), false);
this.generateBox(
p_229534_,
p_229538_,
5,
5,
7,
7,
5,
9,
Blocks.SMOOTH_STONE_SLAB.defaultBlockState().setValue(SlabBlock.TYPE, SlabType.DOUBLE),
Blocks.SMOOTH_STONE_SLAB.defaultBlockState().setValue(SlabBlock.TYPE, SlabType.DOUBLE),
false
);
this.placeBlock(p_229534_, Blocks.WALL_TORCH.defaultBlockState().setValue(WallTorchBlock.FACING, Direction.SOUTH), 6, 5, 6, p_229538_);
}
}
public static class LeftTurn extends StrongholdPieces.Turn {
public LeftTurn(int p_229557_, RandomSource p_229558_, BoundingBox p_229559_, Direction p_229560_) {
super(StructurePieceType.STRONGHOLD_LEFT_TURN, p_229557_, p_229559_);
this.setOrientation(p_229560_);
this.entryDoor = this.randomSmallDoor(p_229558_);
}
public LeftTurn(CompoundTag p_229562_) {
super(StructurePieceType.STRONGHOLD_LEFT_TURN, p_229562_);
}
@Override
public void addChildren(StructurePiece p_229572_, StructurePieceAccessor p_229573_, RandomSource p_229574_) {
Direction direction = this.getOrientation();
if (direction != Direction.NORTH && direction != Direction.EAST) {
this.generateSmallDoorChildRight((StrongholdPieces.StartPiece)p_229572_, p_229573_, p_229574_, 1, 1);
} else {
this.generateSmallDoorChildLeft((StrongholdPieces.StartPiece)p_229572_, p_229573_, p_229574_, 1, 1);
}
}
public static StrongholdPieces.LeftTurn createPiece(
StructurePieceAccessor p_229576_, RandomSource p_229577_, int p_229578_, int p_229579_, int p_229580_, Direction p_229581_, int p_229582_
) {
BoundingBox boundingbox = BoundingBox.orientBox(p_229578_, p_229579_, p_229580_, -1, -1, 0, 5, 5, 5, p_229581_);
return isOkBox(boundingbox) && p_229576_.findCollisionPiece(boundingbox) == null
? new StrongholdPieces.LeftTurn(p_229582_, p_229577_, boundingbox, p_229581_)
: null;
}
@Override
public void postProcess(
WorldGenLevel p_229564_,
StructureManager p_229565_,
ChunkGenerator p_229566_,
RandomSource p_229567_,
BoundingBox p_229568_,
ChunkPos p_229569_,
BlockPos p_229570_
) {
this.generateBox(p_229564_, p_229568_, 0, 0, 0, 4, 4, 4, true, p_229567_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateSmallDoor(p_229564_, p_229567_, p_229568_, this.entryDoor, 1, 1, 0);
Direction direction = this.getOrientation();
if (direction != Direction.NORTH && direction != Direction.EAST) {
this.generateBox(p_229564_, p_229568_, 4, 1, 1, 4, 3, 3, CAVE_AIR, CAVE_AIR, false);
} else {
this.generateBox(p_229564_, p_229568_, 0, 1, 1, 0, 3, 3, CAVE_AIR, CAVE_AIR, false);
}
}
}
public static class Library extends StrongholdPieces.StrongholdPiece {
protected static final int WIDTH = 14;
protected static final int HEIGHT = 6;
protected static final int TALL_HEIGHT = 11;
protected static final int DEPTH = 15;
private final boolean isTall;
public Library(int p_229589_, RandomSource p_229590_, BoundingBox p_229591_, Direction p_229592_) {
super(StructurePieceType.STRONGHOLD_LIBRARY, p_229589_, p_229591_);
this.setOrientation(p_229592_);
this.entryDoor = this.randomSmallDoor(p_229590_);
this.isTall = p_229591_.getYSpan() > 6;
}
public Library(CompoundTag p_229594_) {
super(StructurePieceType.STRONGHOLD_LIBRARY, p_229594_);
this.isTall = p_229594_.getBooleanOr("Tall", false);
}
@Override
protected void addAdditionalSaveData(StructurePieceSerializationContext p_229612_, CompoundTag p_229613_) {
super.addAdditionalSaveData(p_229612_, p_229613_);
p_229613_.putBoolean("Tall", this.isTall);
}
public static StrongholdPieces.Library createPiece(
StructurePieceAccessor p_229604_, RandomSource p_229605_, int p_229606_, int p_229607_, int p_229608_, Direction p_229609_, int p_229610_
) {
BoundingBox boundingbox = BoundingBox.orientBox(p_229606_, p_229607_, p_229608_, -4, -1, 0, 14, 11, 15, p_229609_);
if (!isOkBox(boundingbox) || p_229604_.findCollisionPiece(boundingbox) != null) {
boundingbox = BoundingBox.orientBox(p_229606_, p_229607_, p_229608_, -4, -1, 0, 14, 6, 15, p_229609_);
if (!isOkBox(boundingbox) || p_229604_.findCollisionPiece(boundingbox) != null) {
return null;
}
}
return new StrongholdPieces.Library(p_229610_, p_229605_, boundingbox, p_229609_);
}
@Override
public void postProcess(
WorldGenLevel p_229596_,
StructureManager p_229597_,
ChunkGenerator p_229598_,
RandomSource p_229599_,
BoundingBox p_229600_,
ChunkPos p_229601_,
BlockPos p_229602_
) {
int i = 11;
if (!this.isTall) {
i = 6;
}
this.generateBox(p_229596_, p_229600_, 0, 0, 0, 13, i - 1, 14, true, p_229599_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateSmallDoor(p_229596_, p_229599_, p_229600_, this.entryDoor, 4, 1, 0);
this.generateMaybeBox(p_229596_, p_229600_, p_229599_, 0.07F, 2, 1, 1, 11, 4, 13, Blocks.COBWEB.defaultBlockState(), Blocks.COBWEB.defaultBlockState(), false, false);
int j = 1;
int k = 12;
for (int l = 1; l <= 13; l++) {
if ((l - 1) % 4 == 0) {
this.generateBox(p_229596_, p_229600_, 1, 1, l, 1, 4, l, Blocks.OAK_PLANKS.defaultBlockState(), Blocks.OAK_PLANKS.defaultBlockState(), false);
this.generateBox(p_229596_, p_229600_, 12, 1, l, 12, 4, l, Blocks.OAK_PLANKS.defaultBlockState(), Blocks.OAK_PLANKS.defaultBlockState(), false);
this.placeBlock(p_229596_, Blocks.WALL_TORCH.defaultBlockState().setValue(WallTorchBlock.FACING, Direction.EAST), 2, 3, l, p_229600_);
this.placeBlock(p_229596_, Blocks.WALL_TORCH.defaultBlockState().setValue(WallTorchBlock.FACING, Direction.WEST), 11, 3, l, p_229600_);
if (this.isTall) {
this.generateBox(p_229596_, p_229600_, 1, 6, l, 1, 9, l, Blocks.OAK_PLANKS.defaultBlockState(), Blocks.OAK_PLANKS.defaultBlockState(), false);
this.generateBox(p_229596_, p_229600_, 12, 6, l, 12, 9, l, Blocks.OAK_PLANKS.defaultBlockState(), Blocks.OAK_PLANKS.defaultBlockState(), false);
}
} else {
this.generateBox(p_229596_, p_229600_, 1, 1, l, 1, 4, l, Blocks.BOOKSHELF.defaultBlockState(), Blocks.BOOKSHELF.defaultBlockState(), false);
this.generateBox(p_229596_, p_229600_, 12, 1, l, 12, 4, l, Blocks.BOOKSHELF.defaultBlockState(), Blocks.BOOKSHELF.defaultBlockState(), false);
if (this.isTall) {
this.generateBox(p_229596_, p_229600_, 1, 6, l, 1, 9, l, Blocks.BOOKSHELF.defaultBlockState(), Blocks.BOOKSHELF.defaultBlockState(), false);
this.generateBox(p_229596_, p_229600_, 12, 6, l, 12, 9, l, Blocks.BOOKSHELF.defaultBlockState(), Blocks.BOOKSHELF.defaultBlockState(), false);
}
}
}
for (int l1 = 3; l1 < 12; l1 += 2) {
this.generateBox(p_229596_, p_229600_, 3, 1, l1, 4, 3, l1, Blocks.BOOKSHELF.defaultBlockState(), Blocks.BOOKSHELF.defaultBlockState(), false);
this.generateBox(p_229596_, p_229600_, 6, 1, l1, 7, 3, l1, Blocks.BOOKSHELF.defaultBlockState(), Blocks.BOOKSHELF.defaultBlockState(), false);
this.generateBox(p_229596_, p_229600_, 9, 1, l1, 10, 3, l1, Blocks.BOOKSHELF.defaultBlockState(), Blocks.BOOKSHELF.defaultBlockState(), false);
}
if (this.isTall) {
this.generateBox(p_229596_, p_229600_, 1, 5, 1, 3, 5, 13, Blocks.OAK_PLANKS.defaultBlockState(), Blocks.OAK_PLANKS.defaultBlockState(), false);
this.generateBox(p_229596_, p_229600_, 10, 5, 1, 12, 5, 13, Blocks.OAK_PLANKS.defaultBlockState(), Blocks.OAK_PLANKS.defaultBlockState(), false);
this.generateBox(p_229596_, p_229600_, 4, 5, 1, 9, 5, 2, Blocks.OAK_PLANKS.defaultBlockState(), Blocks.OAK_PLANKS.defaultBlockState(), false);
this.generateBox(p_229596_, p_229600_, 4, 5, 12, 9, 5, 13, Blocks.OAK_PLANKS.defaultBlockState(), Blocks.OAK_PLANKS.defaultBlockState(), false);
this.placeBlock(p_229596_, Blocks.OAK_PLANKS.defaultBlockState(), 9, 5, 11, p_229600_);
this.placeBlock(p_229596_, Blocks.OAK_PLANKS.defaultBlockState(), 8, 5, 11, p_229600_);
this.placeBlock(p_229596_, Blocks.OAK_PLANKS.defaultBlockState(), 9, 5, 10, p_229600_);
BlockState blockstate5 = Blocks.OAK_FENCE.defaultBlockState().setValue(FenceBlock.WEST, true).setValue(FenceBlock.EAST, true);
BlockState blockstate = Blocks.OAK_FENCE.defaultBlockState().setValue(FenceBlock.NORTH, true).setValue(FenceBlock.SOUTH, true);
this.generateBox(p_229596_, p_229600_, 3, 6, 3, 3, 6, 11, blockstate, blockstate, false);
this.generateBox(p_229596_, p_229600_, 10, 6, 3, 10, 6, 9, blockstate, blockstate, false);
this.generateBox(p_229596_, p_229600_, 4, 6, 2, 9, 6, 2, blockstate5, blockstate5, false);
this.generateBox(p_229596_, p_229600_, 4, 6, 12, 7, 6, 12, blockstate5, blockstate5, false);
this.placeBlock(p_229596_, Blocks.OAK_FENCE.defaultBlockState().setValue(FenceBlock.NORTH, true).setValue(FenceBlock.EAST, true), 3, 6, 2, p_229600_);
this.placeBlock(
p_229596_, Blocks.OAK_FENCE.defaultBlockState().setValue(FenceBlock.SOUTH, true).setValue(FenceBlock.EAST, true), 3, 6, 12, p_229600_
);
this.placeBlock(
p_229596_, Blocks.OAK_FENCE.defaultBlockState().setValue(FenceBlock.NORTH, true).setValue(FenceBlock.WEST, true), 10, 6, 2, p_229600_
);
for (int i1 = 0; i1 <= 2; i1++) {
this.placeBlock(
p_229596_,
Blocks.OAK_FENCE.defaultBlockState().setValue(FenceBlock.SOUTH, true).setValue(FenceBlock.WEST, true),
8 + i1,
6,
12 - i1,
p_229600_
);
if (i1 != 2) {
this.placeBlock(
p_229596_,
Blocks.OAK_FENCE.defaultBlockState().setValue(FenceBlock.NORTH, true).setValue(FenceBlock.EAST, true),
8 + i1,
6,
11 - i1,
p_229600_
);
}
}
BlockState blockstate6 = Blocks.LADDER.defaultBlockState().setValue(LadderBlock.FACING, Direction.SOUTH);
this.placeBlock(p_229596_, blockstate6, 10, 1, 13, p_229600_);
this.placeBlock(p_229596_, blockstate6, 10, 2, 13, p_229600_);
this.placeBlock(p_229596_, blockstate6, 10, 3, 13, p_229600_);
this.placeBlock(p_229596_, blockstate6, 10, 4, 13, p_229600_);
this.placeBlock(p_229596_, blockstate6, 10, 5, 13, p_229600_);
this.placeBlock(p_229596_, blockstate6, 10, 6, 13, p_229600_);
this.placeBlock(p_229596_, blockstate6, 10, 7, 13, p_229600_);
int j1 = 7;
int k1 = 7;
BlockState blockstate1 = Blocks.OAK_FENCE.defaultBlockState().setValue(FenceBlock.EAST, true);
this.placeBlock(p_229596_, blockstate1, 6, 9, 7, p_229600_);
BlockState blockstate2 = Blocks.OAK_FENCE.defaultBlockState().setValue(FenceBlock.WEST, true);
this.placeBlock(p_229596_, blockstate2, 7, 9, 7, p_229600_);
this.placeBlock(p_229596_, blockstate1, 6, 8, 7, p_229600_);
this.placeBlock(p_229596_, blockstate2, 7, 8, 7, p_229600_);
BlockState blockstate3 = blockstate.setValue(FenceBlock.WEST, true).setValue(FenceBlock.EAST, true);
this.placeBlock(p_229596_, blockstate3, 6, 7, 7, p_229600_);
this.placeBlock(p_229596_, blockstate3, 7, 7, 7, p_229600_);
this.placeBlock(p_229596_, blockstate1, 5, 7, 7, p_229600_);
this.placeBlock(p_229596_, blockstate2, 8, 7, 7, p_229600_);
this.placeBlock(p_229596_, blockstate1.setValue(FenceBlock.NORTH, true), 6, 7, 6, p_229600_);
this.placeBlock(p_229596_, blockstate1.setValue(FenceBlock.SOUTH, true), 6, 7, 8, p_229600_);
this.placeBlock(p_229596_, blockstate2.setValue(FenceBlock.NORTH, true), 7, 7, 6, p_229600_);
this.placeBlock(p_229596_, blockstate2.setValue(FenceBlock.SOUTH, true), 7, 7, 8, p_229600_);
BlockState blockstate4 = Blocks.TORCH.defaultBlockState();
this.placeBlock(p_229596_, blockstate4, 5, 8, 7, p_229600_);
this.placeBlock(p_229596_, blockstate4, 8, 8, 7, p_229600_);
this.placeBlock(p_229596_, blockstate4, 6, 8, 6, p_229600_);
this.placeBlock(p_229596_, blockstate4, 6, 8, 8, p_229600_);
this.placeBlock(p_229596_, blockstate4, 7, 8, 6, p_229600_);
this.placeBlock(p_229596_, blockstate4, 7, 8, 8, p_229600_);
}
this.createChest(p_229596_, p_229600_, p_229599_, 3, 3, 5, BuiltInLootTables.STRONGHOLD_LIBRARY);
if (this.isTall) {
this.placeBlock(p_229596_, CAVE_AIR, 12, 9, 1, p_229600_);
this.createChest(p_229596_, p_229600_, p_229599_, 12, 8, 1, BuiltInLootTables.STRONGHOLD_LIBRARY);
}
}
}
static class PieceWeight {
public final Class<? extends StrongholdPieces.StrongholdPiece> pieceClass;
public final int weight;
public int placeCount;
public final int maxPlaceCount;
public PieceWeight(Class<? extends StrongholdPieces.StrongholdPiece> p_229619_, int p_229620_, int p_229621_) {
this.pieceClass = p_229619_;
this.weight = p_229620_;
this.maxPlaceCount = p_229621_;
}
public boolean doPlace(int p_229623_) {
return this.maxPlaceCount == 0 || this.placeCount < this.maxPlaceCount;
}
public boolean isValid() {
return this.maxPlaceCount == 0 || this.placeCount < this.maxPlaceCount;
}
}
public static class PortalRoom extends StrongholdPieces.StrongholdPiece {
protected static final int WIDTH = 11;
protected static final int HEIGHT = 8;
protected static final int DEPTH = 16;
private boolean hasPlacedSpawner;
public PortalRoom(int p_229629_, BoundingBox p_229630_, Direction p_229631_) {
super(StructurePieceType.STRONGHOLD_PORTAL_ROOM, p_229629_, p_229630_);
this.setOrientation(p_229631_);
}
public PortalRoom(CompoundTag p_229633_) {
super(StructurePieceType.STRONGHOLD_PORTAL_ROOM, p_229633_);
this.hasPlacedSpawner = p_229633_.getBooleanOr("Mob", false);
}
@Override
protected void addAdditionalSaveData(StructurePieceSerializationContext p_229654_, CompoundTag p_229655_) {
super.addAdditionalSaveData(p_229654_, p_229655_);
p_229655_.putBoolean("Mob", this.hasPlacedSpawner);
}
@Override
public void addChildren(StructurePiece p_229643_, StructurePieceAccessor p_229644_, RandomSource p_229645_) {
if (p_229643_ != null) {
((StrongholdPieces.StartPiece)p_229643_).portalRoomPiece = this;
}
}
public static StrongholdPieces.PortalRoom createPiece(
StructurePieceAccessor p_229647_, int p_229648_, int p_229649_, int p_229650_, Direction p_229651_, int p_229652_
) {
BoundingBox boundingbox = BoundingBox.orientBox(p_229648_, p_229649_, p_229650_, -4, -1, 0, 11, 8, 16, p_229651_);
return isOkBox(boundingbox) && p_229647_.findCollisionPiece(boundingbox) == null
? new StrongholdPieces.PortalRoom(p_229652_, boundingbox, p_229651_)
: null;
}
@Override
public void postProcess(
WorldGenLevel p_229635_,
StructureManager p_229636_,
ChunkGenerator p_229637_,
RandomSource p_229638_,
BoundingBox p_229639_,
ChunkPos p_229640_,
BlockPos p_229641_
) {
this.generateBox(p_229635_, p_229639_, 0, 0, 0, 10, 7, 15, false, p_229638_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateSmallDoor(p_229635_, p_229638_, p_229639_, StrongholdPieces.StrongholdPiece.SmallDoorType.GRATES, 4, 1, 0);
int i = 6;
this.generateBox(p_229635_, p_229639_, 1, 6, 1, 1, 6, 14, false, p_229638_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateBox(p_229635_, p_229639_, 9, 6, 1, 9, 6, 14, false, p_229638_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateBox(p_229635_, p_229639_, 2, 6, 1, 8, 6, 2, false, p_229638_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateBox(p_229635_, p_229639_, 2, 6, 14, 8, 6, 14, false, p_229638_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateBox(p_229635_, p_229639_, 1, 1, 1, 2, 1, 4, false, p_229638_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateBox(p_229635_, p_229639_, 8, 1, 1, 9, 1, 4, false, p_229638_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateBox(p_229635_, p_229639_, 1, 1, 1, 1, 1, 3, Blocks.LAVA.defaultBlockState(), Blocks.LAVA.defaultBlockState(), false);
this.generateBox(p_229635_, p_229639_, 9, 1, 1, 9, 1, 3, Blocks.LAVA.defaultBlockState(), Blocks.LAVA.defaultBlockState(), false);
this.generateBox(p_229635_, p_229639_, 3, 1, 8, 7, 1, 12, false, p_229638_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateBox(p_229635_, p_229639_, 4, 1, 9, 6, 1, 11, Blocks.LAVA.defaultBlockState(), Blocks.LAVA.defaultBlockState(), false);
BlockState blockstate = Blocks.IRON_BARS.defaultBlockState().setValue(IronBarsBlock.NORTH, true).setValue(IronBarsBlock.SOUTH, true);
BlockState blockstate1 = Blocks.IRON_BARS.defaultBlockState().setValue(IronBarsBlock.WEST, true).setValue(IronBarsBlock.EAST, true);
for (int j = 3; j < 14; j += 2) {
this.generateBox(p_229635_, p_229639_, 0, 3, j, 0, 4, j, blockstate, blockstate, false);
this.generateBox(p_229635_, p_229639_, 10, 3, j, 10, 4, j, blockstate, blockstate, false);
}
for (int i1 = 2; i1 < 9; i1 += 2) {
this.generateBox(p_229635_, p_229639_, i1, 3, 15, i1, 4, 15, blockstate1, blockstate1, false);
}
BlockState blockstate5 = Blocks.STONE_BRICK_STAIRS.defaultBlockState().setValue(StairBlock.FACING, Direction.NORTH);
this.generateBox(p_229635_, p_229639_, 4, 1, 5, 6, 1, 7, false, p_229638_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateBox(p_229635_, p_229639_, 4, 2, 6, 6, 2, 7, false, p_229638_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateBox(p_229635_, p_229639_, 4, 3, 7, 6, 3, 7, false, p_229638_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
for (int k = 4; k <= 6; k++) {
this.placeBlock(p_229635_, blockstate5, k, 1, 4, p_229639_);
this.placeBlock(p_229635_, blockstate5, k, 2, 5, p_229639_);
this.placeBlock(p_229635_, blockstate5, k, 3, 6, p_229639_);
}
BlockState blockstate6 = Blocks.END_PORTAL_FRAME.defaultBlockState().setValue(EndPortalFrameBlock.FACING, Direction.NORTH);
BlockState blockstate2 = Blocks.END_PORTAL_FRAME.defaultBlockState().setValue(EndPortalFrameBlock.FACING, Direction.SOUTH);
BlockState blockstate3 = Blocks.END_PORTAL_FRAME.defaultBlockState().setValue(EndPortalFrameBlock.FACING, Direction.EAST);
BlockState blockstate4 = Blocks.END_PORTAL_FRAME.defaultBlockState().setValue(EndPortalFrameBlock.FACING, Direction.WEST);
boolean flag = true;
boolean[] aboolean = new boolean[12];
for (int l = 0; l < aboolean.length; l++) {
aboolean[l] = p_229638_.nextFloat() > 0.9F;
flag &= aboolean[l];
}
this.placeBlock(p_229635_, blockstate6.setValue(EndPortalFrameBlock.HAS_EYE, aboolean[0]), 4, 3, 8, p_229639_);
this.placeBlock(p_229635_, blockstate6.setValue(EndPortalFrameBlock.HAS_EYE, aboolean[1]), 5, 3, 8, p_229639_);
this.placeBlock(p_229635_, blockstate6.setValue(EndPortalFrameBlock.HAS_EYE, aboolean[2]), 6, 3, 8, p_229639_);
this.placeBlock(p_229635_, blockstate2.setValue(EndPortalFrameBlock.HAS_EYE, aboolean[3]), 4, 3, 12, p_229639_);
this.placeBlock(p_229635_, blockstate2.setValue(EndPortalFrameBlock.HAS_EYE, aboolean[4]), 5, 3, 12, p_229639_);
this.placeBlock(p_229635_, blockstate2.setValue(EndPortalFrameBlock.HAS_EYE, aboolean[5]), 6, 3, 12, p_229639_);
this.placeBlock(p_229635_, blockstate3.setValue(EndPortalFrameBlock.HAS_EYE, aboolean[6]), 3, 3, 9, p_229639_);
this.placeBlock(p_229635_, blockstate3.setValue(EndPortalFrameBlock.HAS_EYE, aboolean[7]), 3, 3, 10, p_229639_);
this.placeBlock(p_229635_, blockstate3.setValue(EndPortalFrameBlock.HAS_EYE, aboolean[8]), 3, 3, 11, p_229639_);
this.placeBlock(p_229635_, blockstate4.setValue(EndPortalFrameBlock.HAS_EYE, aboolean[9]), 7, 3, 9, p_229639_);
this.placeBlock(p_229635_, blockstate4.setValue(EndPortalFrameBlock.HAS_EYE, aboolean[10]), 7, 3, 10, p_229639_);
this.placeBlock(p_229635_, blockstate4.setValue(EndPortalFrameBlock.HAS_EYE, aboolean[11]), 7, 3, 11, p_229639_);
if (flag) {
BlockState blockstate7 = Blocks.END_PORTAL.defaultBlockState();
this.placeBlock(p_229635_, blockstate7, 4, 3, 9, p_229639_);
this.placeBlock(p_229635_, blockstate7, 5, 3, 9, p_229639_);
this.placeBlock(p_229635_, blockstate7, 6, 3, 9, p_229639_);
this.placeBlock(p_229635_, blockstate7, 4, 3, 10, p_229639_);
this.placeBlock(p_229635_, blockstate7, 5, 3, 10, p_229639_);
this.placeBlock(p_229635_, blockstate7, 6, 3, 10, p_229639_);
this.placeBlock(p_229635_, blockstate7, 4, 3, 11, p_229639_);
this.placeBlock(p_229635_, blockstate7, 5, 3, 11, p_229639_);
this.placeBlock(p_229635_, blockstate7, 6, 3, 11, p_229639_);
}
if (!this.hasPlacedSpawner) {
BlockPos blockpos = this.getWorldPos(5, 3, 6);
if (p_229639_.isInside(blockpos)) {
this.hasPlacedSpawner = true;
p_229635_.setBlock(blockpos, Blocks.SPAWNER.defaultBlockState(), 2);
if (p_229635_.getBlockEntity(blockpos) instanceof SpawnerBlockEntity spawnerblockentity) {
spawnerblockentity.setEntityId(EntityType.SILVERFISH, p_229638_);
}
}
}
}
}
public static class PrisonHall extends StrongholdPieces.StrongholdPiece {
protected static final int WIDTH = 9;
protected static final int HEIGHT = 5;
protected static final int DEPTH = 11;
public PrisonHall(int p_229660_, RandomSource p_229661_, BoundingBox p_229662_, Direction p_229663_) {
super(StructurePieceType.STRONGHOLD_PRISON_HALL, p_229660_, p_229662_);
this.setOrientation(p_229663_);
this.entryDoor = this.randomSmallDoor(p_229661_);
}
public PrisonHall(CompoundTag p_229665_) {
super(StructurePieceType.STRONGHOLD_PRISON_HALL, p_229665_);
}
@Override
public void addChildren(StructurePiece p_229675_, StructurePieceAccessor p_229676_, RandomSource p_229677_) {
this.generateSmallDoorChildForward((StrongholdPieces.StartPiece)p_229675_, p_229676_, p_229677_, 1, 1);
}
public static StrongholdPieces.PrisonHall createPiece(
StructurePieceAccessor p_229679_, RandomSource p_229680_, int p_229681_, int p_229682_, int p_229683_, Direction p_229684_, int p_229685_
) {
BoundingBox boundingbox = BoundingBox.orientBox(p_229681_, p_229682_, p_229683_, -1, -1, 0, 9, 5, 11, p_229684_);
return isOkBox(boundingbox) && p_229679_.findCollisionPiece(boundingbox) == null
? new StrongholdPieces.PrisonHall(p_229685_, p_229680_, boundingbox, p_229684_)
: null;
}
@Override
public void postProcess(
WorldGenLevel p_229667_,
StructureManager p_229668_,
ChunkGenerator p_229669_,
RandomSource p_229670_,
BoundingBox p_229671_,
ChunkPos p_229672_,
BlockPos p_229673_
) {
this.generateBox(p_229667_, p_229671_, 0, 0, 0, 8, 4, 10, true, p_229670_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateSmallDoor(p_229667_, p_229670_, p_229671_, this.entryDoor, 1, 1, 0);
this.generateBox(p_229667_, p_229671_, 1, 1, 10, 3, 3, 10, CAVE_AIR, CAVE_AIR, false);
this.generateBox(p_229667_, p_229671_, 4, 1, 1, 4, 3, 1, false, p_229670_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateBox(p_229667_, p_229671_, 4, 1, 3, 4, 3, 3, false, p_229670_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateBox(p_229667_, p_229671_, 4, 1, 7, 4, 3, 7, false, p_229670_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateBox(p_229667_, p_229671_, 4, 1, 9, 4, 3, 9, false, p_229670_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
for (int i = 1; i <= 3; i++) {
this.placeBlock(
p_229667_, Blocks.IRON_BARS.defaultBlockState().setValue(IronBarsBlock.NORTH, true).setValue(IronBarsBlock.SOUTH, true), 4, i, 4, p_229671_
);
this.placeBlock(
p_229667_,
Blocks.IRON_BARS
.defaultBlockState()
.setValue(IronBarsBlock.NORTH, true)
.setValue(IronBarsBlock.SOUTH, true)
.setValue(IronBarsBlock.EAST, true),
4,
i,
5,
p_229671_
);
this.placeBlock(
p_229667_, Blocks.IRON_BARS.defaultBlockState().setValue(IronBarsBlock.NORTH, true).setValue(IronBarsBlock.SOUTH, true), 4, i, 6, p_229671_
);
this.placeBlock(
p_229667_, Blocks.IRON_BARS.defaultBlockState().setValue(IronBarsBlock.WEST, true).setValue(IronBarsBlock.EAST, true), 5, i, 5, p_229671_
);
this.placeBlock(
p_229667_, Blocks.IRON_BARS.defaultBlockState().setValue(IronBarsBlock.WEST, true).setValue(IronBarsBlock.EAST, true), 6, i, 5, p_229671_
);
this.placeBlock(
p_229667_, Blocks.IRON_BARS.defaultBlockState().setValue(IronBarsBlock.WEST, true).setValue(IronBarsBlock.EAST, true), 7, i, 5, p_229671_
);
}
this.placeBlock(
p_229667_, Blocks.IRON_BARS.defaultBlockState().setValue(IronBarsBlock.NORTH, true).setValue(IronBarsBlock.SOUTH, true), 4, 3, 2, p_229671_
);
this.placeBlock(
p_229667_, Blocks.IRON_BARS.defaultBlockState().setValue(IronBarsBlock.NORTH, true).setValue(IronBarsBlock.SOUTH, true), 4, 3, 8, p_229671_
);
BlockState blockstate1 = Blocks.IRON_DOOR.defaultBlockState().setValue(DoorBlock.FACING, Direction.WEST);
BlockState blockstate = Blocks.IRON_DOOR.defaultBlockState().setValue(DoorBlock.FACING, Direction.WEST).setValue(DoorBlock.HALF, DoubleBlockHalf.UPPER);
this.placeBlock(p_229667_, blockstate1, 4, 1, 2, p_229671_);
this.placeBlock(p_229667_, blockstate, 4, 2, 2, p_229671_);
this.placeBlock(p_229667_, blockstate1, 4, 1, 8, p_229671_);
this.placeBlock(p_229667_, blockstate, 4, 2, 8, p_229671_);
}
}
public static class RightTurn extends StrongholdPieces.Turn {
public RightTurn(int p_229687_, RandomSource p_229688_, BoundingBox p_229689_, Direction p_229690_) {
super(StructurePieceType.STRONGHOLD_RIGHT_TURN, p_229687_, p_229689_);
this.setOrientation(p_229690_);
this.entryDoor = this.randomSmallDoor(p_229688_);
}
public RightTurn(CompoundTag p_229692_) {
super(StructurePieceType.STRONGHOLD_RIGHT_TURN, p_229692_);
}
@Override
public void addChildren(StructurePiece p_229702_, StructurePieceAccessor p_229703_, RandomSource p_229704_) {
Direction direction = this.getOrientation();
if (direction != Direction.NORTH && direction != Direction.EAST) {
this.generateSmallDoorChildLeft((StrongholdPieces.StartPiece)p_229702_, p_229703_, p_229704_, 1, 1);
} else {
this.generateSmallDoorChildRight((StrongholdPieces.StartPiece)p_229702_, p_229703_, p_229704_, 1, 1);
}
}
public static StrongholdPieces.RightTurn createPiece(
StructurePieceAccessor p_229706_, RandomSource p_229707_, int p_229708_, int p_229709_, int p_229710_, Direction p_229711_, int p_229712_
) {
BoundingBox boundingbox = BoundingBox.orientBox(p_229708_, p_229709_, p_229710_, -1, -1, 0, 5, 5, 5, p_229711_);
return isOkBox(boundingbox) && p_229706_.findCollisionPiece(boundingbox) == null
? new StrongholdPieces.RightTurn(p_229712_, p_229707_, boundingbox, p_229711_)
: null;
}
@Override
public void postProcess(
WorldGenLevel p_229694_,
StructureManager p_229695_,
ChunkGenerator p_229696_,
RandomSource p_229697_,
BoundingBox p_229698_,
ChunkPos p_229699_,
BlockPos p_229700_
) {
this.generateBox(p_229694_, p_229698_, 0, 0, 0, 4, 4, 4, true, p_229697_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateSmallDoor(p_229694_, p_229697_, p_229698_, this.entryDoor, 1, 1, 0);
Direction direction = this.getOrientation();
if (direction != Direction.NORTH && direction != Direction.EAST) {
this.generateBox(p_229694_, p_229698_, 0, 1, 1, 0, 3, 3, CAVE_AIR, CAVE_AIR, false);
} else {
this.generateBox(p_229694_, p_229698_, 4, 1, 1, 4, 3, 3, CAVE_AIR, CAVE_AIR, false);
}
}
}
public static class RoomCrossing extends StrongholdPieces.StrongholdPiece {
protected static final int WIDTH = 11;
protected static final int HEIGHT = 7;
protected static final int DEPTH = 11;
protected final int type;
public RoomCrossing(int p_229718_, RandomSource p_229719_, BoundingBox p_229720_, Direction p_229721_) {
super(StructurePieceType.STRONGHOLD_ROOM_CROSSING, p_229718_, p_229720_);
this.setOrientation(p_229721_);
this.entryDoor = this.randomSmallDoor(p_229719_);
this.type = p_229719_.nextInt(5);
}
public RoomCrossing(CompoundTag p_229723_) {
super(StructurePieceType.STRONGHOLD_ROOM_CROSSING, p_229723_);
this.type = p_229723_.getIntOr("Type", 0);
}
@Override
protected void addAdditionalSaveData(StructurePieceSerializationContext p_229745_, CompoundTag p_229746_) {
super.addAdditionalSaveData(p_229745_, p_229746_);
p_229746_.putInt("Type", this.type);
}
@Override
public void addChildren(StructurePiece p_229733_, StructurePieceAccessor p_229734_, RandomSource p_229735_) {
this.generateSmallDoorChildForward((StrongholdPieces.StartPiece)p_229733_, p_229734_, p_229735_, 4, 1);
this.generateSmallDoorChildLeft((StrongholdPieces.StartPiece)p_229733_, p_229734_, p_229735_, 1, 4);
this.generateSmallDoorChildRight((StrongholdPieces.StartPiece)p_229733_, p_229734_, p_229735_, 1, 4);
}
public static StrongholdPieces.RoomCrossing createPiece(
StructurePieceAccessor p_229737_, RandomSource p_229738_, int p_229739_, int p_229740_, int p_229741_, Direction p_229742_, int p_229743_
) {
BoundingBox boundingbox = BoundingBox.orientBox(p_229739_, p_229740_, p_229741_, -4, -1, 0, 11, 7, 11, p_229742_);
return isOkBox(boundingbox) && p_229737_.findCollisionPiece(boundingbox) == null
? new StrongholdPieces.RoomCrossing(p_229743_, p_229738_, boundingbox, p_229742_)
: null;
}
@Override
public void postProcess(
WorldGenLevel p_229725_,
StructureManager p_229726_,
ChunkGenerator p_229727_,
RandomSource p_229728_,
BoundingBox p_229729_,
ChunkPos p_229730_,
BlockPos p_229731_
) {
this.generateBox(p_229725_, p_229729_, 0, 0, 0, 10, 6, 10, true, p_229728_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateSmallDoor(p_229725_, p_229728_, p_229729_, this.entryDoor, 4, 1, 0);
this.generateBox(p_229725_, p_229729_, 4, 1, 10, 6, 3, 10, CAVE_AIR, CAVE_AIR, false);
this.generateBox(p_229725_, p_229729_, 0, 1, 4, 0, 3, 6, CAVE_AIR, CAVE_AIR, false);
this.generateBox(p_229725_, p_229729_, 10, 1, 4, 10, 3, 6, CAVE_AIR, CAVE_AIR, false);
switch (this.type) {
case 0:
this.placeBlock(p_229725_, Blocks.STONE_BRICKS.defaultBlockState(), 5, 1, 5, p_229729_);
this.placeBlock(p_229725_, Blocks.STONE_BRICKS.defaultBlockState(), 5, 2, 5, p_229729_);
this.placeBlock(p_229725_, Blocks.STONE_BRICKS.defaultBlockState(), 5, 3, 5, p_229729_);
this.placeBlock(p_229725_, Blocks.WALL_TORCH.defaultBlockState().setValue(WallTorchBlock.FACING, Direction.WEST), 4, 3, 5, p_229729_);
this.placeBlock(p_229725_, Blocks.WALL_TORCH.defaultBlockState().setValue(WallTorchBlock.FACING, Direction.EAST), 6, 3, 5, p_229729_);
this.placeBlock(p_229725_, Blocks.WALL_TORCH.defaultBlockState().setValue(WallTorchBlock.FACING, Direction.SOUTH), 5, 3, 4, p_229729_);
this.placeBlock(p_229725_, Blocks.WALL_TORCH.defaultBlockState().setValue(WallTorchBlock.FACING, Direction.NORTH), 5, 3, 6, p_229729_);
this.placeBlock(p_229725_, Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), 4, 1, 4, p_229729_);
this.placeBlock(p_229725_, Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), 4, 1, 5, p_229729_);
this.placeBlock(p_229725_, Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), 4, 1, 6, p_229729_);
this.placeBlock(p_229725_, Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), 6, 1, 4, p_229729_);
this.placeBlock(p_229725_, Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), 6, 1, 5, p_229729_);
this.placeBlock(p_229725_, Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), 6, 1, 6, p_229729_);
this.placeBlock(p_229725_, Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), 5, 1, 4, p_229729_);
this.placeBlock(p_229725_, Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), 5, 1, 6, p_229729_);
break;
case 1:
for (int i1 = 0; i1 < 5; i1++) {
this.placeBlock(p_229725_, Blocks.STONE_BRICKS.defaultBlockState(), 3, 1, 3 + i1, p_229729_);
this.placeBlock(p_229725_, Blocks.STONE_BRICKS.defaultBlockState(), 7, 1, 3 + i1, p_229729_);
this.placeBlock(p_229725_, Blocks.STONE_BRICKS.defaultBlockState(), 3 + i1, 1, 3, p_229729_);
this.placeBlock(p_229725_, Blocks.STONE_BRICKS.defaultBlockState(), 3 + i1, 1, 7, p_229729_);
}
this.placeBlock(p_229725_, Blocks.STONE_BRICKS.defaultBlockState(), 5, 1, 5, p_229729_);
this.placeBlock(p_229725_, Blocks.STONE_BRICKS.defaultBlockState(), 5, 2, 5, p_229729_);
this.placeBlock(p_229725_, Blocks.STONE_BRICKS.defaultBlockState(), 5, 3, 5, p_229729_);
this.placeBlock(p_229725_, Blocks.WATER.defaultBlockState(), 5, 4, 5, p_229729_);
break;
case 2:
for (int i = 1; i <= 9; i++) {
this.placeBlock(p_229725_, Blocks.COBBLESTONE.defaultBlockState(), 1, 3, i, p_229729_);
this.placeBlock(p_229725_, Blocks.COBBLESTONE.defaultBlockState(), 9, 3, i, p_229729_);
}
for (int j = 1; j <= 9; j++) {
this.placeBlock(p_229725_, Blocks.COBBLESTONE.defaultBlockState(), j, 3, 1, p_229729_);
this.placeBlock(p_229725_, Blocks.COBBLESTONE.defaultBlockState(), j, 3, 9, p_229729_);
}
this.placeBlock(p_229725_, Blocks.COBBLESTONE.defaultBlockState(), 5, 1, 4, p_229729_);
this.placeBlock(p_229725_, Blocks.COBBLESTONE.defaultBlockState(), 5, 1, 6, p_229729_);
this.placeBlock(p_229725_, Blocks.COBBLESTONE.defaultBlockState(), 5, 3, 4, p_229729_);
this.placeBlock(p_229725_, Blocks.COBBLESTONE.defaultBlockState(), 5, 3, 6, p_229729_);
this.placeBlock(p_229725_, Blocks.COBBLESTONE.defaultBlockState(), 4, 1, 5, p_229729_);
this.placeBlock(p_229725_, Blocks.COBBLESTONE.defaultBlockState(), 6, 1, 5, p_229729_);
this.placeBlock(p_229725_, Blocks.COBBLESTONE.defaultBlockState(), 4, 3, 5, p_229729_);
this.placeBlock(p_229725_, Blocks.COBBLESTONE.defaultBlockState(), 6, 3, 5, p_229729_);
for (int k = 1; k <= 3; k++) {
this.placeBlock(p_229725_, Blocks.COBBLESTONE.defaultBlockState(), 4, k, 4, p_229729_);
this.placeBlock(p_229725_, Blocks.COBBLESTONE.defaultBlockState(), 6, k, 4, p_229729_);
this.placeBlock(p_229725_, Blocks.COBBLESTONE.defaultBlockState(), 4, k, 6, p_229729_);
this.placeBlock(p_229725_, Blocks.COBBLESTONE.defaultBlockState(), 6, k, 6, p_229729_);
}
this.placeBlock(p_229725_, Blocks.WALL_TORCH.defaultBlockState(), 5, 3, 5, p_229729_);
for (int l = 2; l <= 8; l++) {
this.placeBlock(p_229725_, Blocks.OAK_PLANKS.defaultBlockState(), 2, 3, l, p_229729_);
this.placeBlock(p_229725_, Blocks.OAK_PLANKS.defaultBlockState(), 3, 3, l, p_229729_);
if (l <= 3 || l >= 7) {
this.placeBlock(p_229725_, Blocks.OAK_PLANKS.defaultBlockState(), 4, 3, l, p_229729_);
this.placeBlock(p_229725_, Blocks.OAK_PLANKS.defaultBlockState(), 5, 3, l, p_229729_);
this.placeBlock(p_229725_, Blocks.OAK_PLANKS.defaultBlockState(), 6, 3, l, p_229729_);
}
this.placeBlock(p_229725_, Blocks.OAK_PLANKS.defaultBlockState(), 7, 3, l, p_229729_);
this.placeBlock(p_229725_, Blocks.OAK_PLANKS.defaultBlockState(), 8, 3, l, p_229729_);
}
BlockState blockstate = Blocks.LADDER.defaultBlockState().setValue(LadderBlock.FACING, Direction.WEST);
this.placeBlock(p_229725_, blockstate, 9, 1, 3, p_229729_);
this.placeBlock(p_229725_, blockstate, 9, 2, 3, p_229729_);
this.placeBlock(p_229725_, blockstate, 9, 3, 3, p_229729_);
this.createChest(p_229725_, p_229729_, p_229728_, 3, 4, 8, BuiltInLootTables.STRONGHOLD_CROSSING);
}
}
}
static class SmoothStoneSelector extends StructurePiece.BlockSelector {
@Override
public void next(RandomSource p_229749_, int p_229750_, int p_229751_, int p_229752_, boolean p_229753_) {
if (p_229753_) {
float f = p_229749_.nextFloat();
if (f < 0.2F) {
this.next = Blocks.CRACKED_STONE_BRICKS.defaultBlockState();
} else if (f < 0.5F) {
this.next = Blocks.MOSSY_STONE_BRICKS.defaultBlockState();
} else if (f < 0.55F) {
this.next = Blocks.INFESTED_STONE_BRICKS.defaultBlockState();
} else {
this.next = Blocks.STONE_BRICKS.defaultBlockState();
}
} else {
this.next = Blocks.CAVE_AIR.defaultBlockState();
}
}
}
public static class StairsDown extends StrongholdPieces.StrongholdPiece {
private static final int WIDTH = 5;
private static final int HEIGHT = 11;
private static final int DEPTH = 5;
private final boolean isSource;
public StairsDown(StructurePieceType p_229764_, int p_229765_, int p_229766_, int p_229767_, Direction p_229768_) {
super(p_229764_, p_229765_, makeBoundingBox(p_229766_, 64, p_229767_, p_229768_, 5, 11, 5));
this.isSource = true;
this.setOrientation(p_229768_);
this.entryDoor = StrongholdPieces.StrongholdPiece.SmallDoorType.OPENING;
}
public StairsDown(int p_229759_, RandomSource p_229760_, BoundingBox p_229761_, Direction p_229762_) {
super(StructurePieceType.STRONGHOLD_STAIRS_DOWN, p_229759_, p_229761_);
this.isSource = false;
this.setOrientation(p_229762_);
this.entryDoor = this.randomSmallDoor(p_229760_);
}
public StairsDown(StructurePieceType p_229770_, CompoundTag p_229771_) {
super(p_229770_, p_229771_);
this.isSource = p_229771_.getBooleanOr("Source", false);
}
public StairsDown(CompoundTag p_229773_) {
this(StructurePieceType.STRONGHOLD_STAIRS_DOWN, p_229773_);
}
@Override
protected void addAdditionalSaveData(StructurePieceSerializationContext p_229795_, CompoundTag p_229796_) {
super.addAdditionalSaveData(p_229795_, p_229796_);
p_229796_.putBoolean("Source", this.isSource);
}
@Override
public void addChildren(StructurePiece p_229783_, StructurePieceAccessor p_229784_, RandomSource p_229785_) {
if (this.isSource) {
StrongholdPieces.imposedPiece = StrongholdPieces.FiveCrossing.class;
}
this.generateSmallDoorChildForward((StrongholdPieces.StartPiece)p_229783_, p_229784_, p_229785_, 1, 1);
}
public static StrongholdPieces.StairsDown createPiece(
StructurePieceAccessor p_229787_, RandomSource p_229788_, int p_229789_, int p_229790_, int p_229791_, Direction p_229792_, int p_229793_
) {
BoundingBox boundingbox = BoundingBox.orientBox(p_229789_, p_229790_, p_229791_, -1, -7, 0, 5, 11, 5, p_229792_);
return isOkBox(boundingbox) && p_229787_.findCollisionPiece(boundingbox) == null
? new StrongholdPieces.StairsDown(p_229793_, p_229788_, boundingbox, p_229792_)
: null;
}
@Override
public void postProcess(
WorldGenLevel p_229775_,
StructureManager p_229776_,
ChunkGenerator p_229777_,
RandomSource p_229778_,
BoundingBox p_229779_,
ChunkPos p_229780_,
BlockPos p_229781_
) {
this.generateBox(p_229775_, p_229779_, 0, 0, 0, 4, 10, 4, true, p_229778_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateSmallDoor(p_229775_, p_229778_, p_229779_, this.entryDoor, 1, 7, 0);
this.generateSmallDoor(p_229775_, p_229778_, p_229779_, StrongholdPieces.StrongholdPiece.SmallDoorType.OPENING, 1, 1, 4);
this.placeBlock(p_229775_, Blocks.STONE_BRICKS.defaultBlockState(), 2, 6, 1, p_229779_);
this.placeBlock(p_229775_, Blocks.STONE_BRICKS.defaultBlockState(), 1, 5, 1, p_229779_);
this.placeBlock(p_229775_, Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), 1, 6, 1, p_229779_);
this.placeBlock(p_229775_, Blocks.STONE_BRICKS.defaultBlockState(), 1, 5, 2, p_229779_);
this.placeBlock(p_229775_, Blocks.STONE_BRICKS.defaultBlockState(), 1, 4, 3, p_229779_);
this.placeBlock(p_229775_, Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), 1, 5, 3, p_229779_);
this.placeBlock(p_229775_, Blocks.STONE_BRICKS.defaultBlockState(), 2, 4, 3, p_229779_);
this.placeBlock(p_229775_, Blocks.STONE_BRICKS.defaultBlockState(), 3, 3, 3, p_229779_);
this.placeBlock(p_229775_, Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), 3, 4, 3, p_229779_);
this.placeBlock(p_229775_, Blocks.STONE_BRICKS.defaultBlockState(), 3, 3, 2, p_229779_);
this.placeBlock(p_229775_, Blocks.STONE_BRICKS.defaultBlockState(), 3, 2, 1, p_229779_);
this.placeBlock(p_229775_, Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), 3, 3, 1, p_229779_);
this.placeBlock(p_229775_, Blocks.STONE_BRICKS.defaultBlockState(), 2, 2, 1, p_229779_);
this.placeBlock(p_229775_, Blocks.STONE_BRICKS.defaultBlockState(), 1, 1, 1, p_229779_);
this.placeBlock(p_229775_, Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), 1, 2, 1, p_229779_);
this.placeBlock(p_229775_, Blocks.STONE_BRICKS.defaultBlockState(), 1, 1, 2, p_229779_);
this.placeBlock(p_229775_, Blocks.SMOOTH_STONE_SLAB.defaultBlockState(), 1, 1, 3, p_229779_);
}
}
public static class StartPiece extends StrongholdPieces.StairsDown {
public StrongholdPieces.PieceWeight previousPiece;
@Nullable
public StrongholdPieces.PortalRoom portalRoomPiece;
public final List<StructurePiece> pendingChildren = Lists.newArrayList();
public StartPiece(RandomSource p_229801_, int p_229802_, int p_229803_) {
super(StructurePieceType.STRONGHOLD_START, 0, p_229802_, p_229803_, getRandomHorizontalDirection(p_229801_));
}
public StartPiece(CompoundTag p_229805_) {
super(StructurePieceType.STRONGHOLD_START, p_229805_);
}
@Override
public BlockPos getLocatorPosition() {
return this.portalRoomPiece != null ? this.portalRoomPiece.getLocatorPosition() : super.getLocatorPosition();
}
}
public static class Straight extends StrongholdPieces.StrongholdPiece {
private static final int WIDTH = 5;
private static final int HEIGHT = 5;
private static final int DEPTH = 7;
private final boolean leftChild;
private final boolean rightChild;
public Straight(int p_229813_, RandomSource p_229814_, BoundingBox p_229815_, Direction p_229816_) {
super(StructurePieceType.STRONGHOLD_STRAIGHT, p_229813_, p_229815_);
this.setOrientation(p_229816_);
this.entryDoor = this.randomSmallDoor(p_229814_);
this.leftChild = p_229814_.nextInt(2) == 0;
this.rightChild = p_229814_.nextInt(2) == 0;
}
public Straight(CompoundTag p_229818_) {
super(StructurePieceType.STRONGHOLD_STRAIGHT, p_229818_);
this.leftChild = p_229818_.getBooleanOr("Left", false);
this.rightChild = p_229818_.getBooleanOr("Right", false);
}
@Override
protected void addAdditionalSaveData(StructurePieceSerializationContext p_229840_, CompoundTag p_229841_) {
super.addAdditionalSaveData(p_229840_, p_229841_);
p_229841_.putBoolean("Left", this.leftChild);
p_229841_.putBoolean("Right", this.rightChild);
}
@Override
public void addChildren(StructurePiece p_229828_, StructurePieceAccessor p_229829_, RandomSource p_229830_) {
this.generateSmallDoorChildForward((StrongholdPieces.StartPiece)p_229828_, p_229829_, p_229830_, 1, 1);
if (this.leftChild) {
this.generateSmallDoorChildLeft((StrongholdPieces.StartPiece)p_229828_, p_229829_, p_229830_, 1, 2);
}
if (this.rightChild) {
this.generateSmallDoorChildRight((StrongholdPieces.StartPiece)p_229828_, p_229829_, p_229830_, 1, 2);
}
}
public static StrongholdPieces.Straight createPiece(
StructurePieceAccessor p_229832_, RandomSource p_229833_, int p_229834_, int p_229835_, int p_229836_, Direction p_229837_, int p_229838_
) {
BoundingBox boundingbox = BoundingBox.orientBox(p_229834_, p_229835_, p_229836_, -1, -1, 0, 5, 5, 7, p_229837_);
return isOkBox(boundingbox) && p_229832_.findCollisionPiece(boundingbox) == null
? new StrongholdPieces.Straight(p_229838_, p_229833_, boundingbox, p_229837_)
: null;
}
@Override
public void postProcess(
WorldGenLevel p_229820_,
StructureManager p_229821_,
ChunkGenerator p_229822_,
RandomSource p_229823_,
BoundingBox p_229824_,
ChunkPos p_229825_,
BlockPos p_229826_
) {
this.generateBox(p_229820_, p_229824_, 0, 0, 0, 4, 4, 6, true, p_229823_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateSmallDoor(p_229820_, p_229823_, p_229824_, this.entryDoor, 1, 1, 0);
this.generateSmallDoor(p_229820_, p_229823_, p_229824_, StrongholdPieces.StrongholdPiece.SmallDoorType.OPENING, 1, 1, 6);
BlockState blockstate = Blocks.WALL_TORCH.defaultBlockState().setValue(WallTorchBlock.FACING, Direction.EAST);
BlockState blockstate1 = Blocks.WALL_TORCH.defaultBlockState().setValue(WallTorchBlock.FACING, Direction.WEST);
this.maybeGenerateBlock(p_229820_, p_229824_, p_229823_, 0.1F, 1, 2, 1, blockstate);
this.maybeGenerateBlock(p_229820_, p_229824_, p_229823_, 0.1F, 3, 2, 1, blockstate1);
this.maybeGenerateBlock(p_229820_, p_229824_, p_229823_, 0.1F, 1, 2, 5, blockstate);
this.maybeGenerateBlock(p_229820_, p_229824_, p_229823_, 0.1F, 3, 2, 5, blockstate1);
if (this.leftChild) {
this.generateBox(p_229820_, p_229824_, 0, 1, 2, 0, 3, 4, CAVE_AIR, CAVE_AIR, false);
}
if (this.rightChild) {
this.generateBox(p_229820_, p_229824_, 4, 1, 2, 4, 3, 4, CAVE_AIR, CAVE_AIR, false);
}
}
}
public static class StraightStairsDown extends StrongholdPieces.StrongholdPiece {
private static final int WIDTH = 5;
private static final int HEIGHT = 11;
private static final int DEPTH = 8;
public StraightStairsDown(int p_229846_, RandomSource p_229847_, BoundingBox p_229848_, Direction p_229849_) {
super(StructurePieceType.STRONGHOLD_STRAIGHT_STAIRS_DOWN, p_229846_, p_229848_);
this.setOrientation(p_229849_);
this.entryDoor = this.randomSmallDoor(p_229847_);
}
public StraightStairsDown(CompoundTag p_229851_) {
super(StructurePieceType.STRONGHOLD_STRAIGHT_STAIRS_DOWN, p_229851_);
}
@Override
public void addChildren(StructurePiece p_229861_, StructurePieceAccessor p_229862_, RandomSource p_229863_) {
this.generateSmallDoorChildForward((StrongholdPieces.StartPiece)p_229861_, p_229862_, p_229863_, 1, 1);
}
public static StrongholdPieces.StraightStairsDown createPiece(
StructurePieceAccessor p_229865_, RandomSource p_229866_, int p_229867_, int p_229868_, int p_229869_, Direction p_229870_, int p_229871_
) {
BoundingBox boundingbox = BoundingBox.orientBox(p_229867_, p_229868_, p_229869_, -1, -7, 0, 5, 11, 8, p_229870_);
return isOkBox(boundingbox) && p_229865_.findCollisionPiece(boundingbox) == null
? new StrongholdPieces.StraightStairsDown(p_229871_, p_229866_, boundingbox, p_229870_)
: null;
}
@Override
public void postProcess(
WorldGenLevel p_229853_,
StructureManager p_229854_,
ChunkGenerator p_229855_,
RandomSource p_229856_,
BoundingBox p_229857_,
ChunkPos p_229858_,
BlockPos p_229859_
) {
this.generateBox(p_229853_, p_229857_, 0, 0, 0, 4, 10, 7, true, p_229856_, StrongholdPieces.SMOOTH_STONE_SELECTOR);
this.generateSmallDoor(p_229853_, p_229856_, p_229857_, this.entryDoor, 1, 7, 0);
this.generateSmallDoor(p_229853_, p_229856_, p_229857_, StrongholdPieces.StrongholdPiece.SmallDoorType.OPENING, 1, 1, 7);
BlockState blockstate = Blocks.COBBLESTONE_STAIRS.defaultBlockState().setValue(StairBlock.FACING, Direction.SOUTH);
for (int i = 0; i < 6; i++) {
this.placeBlock(p_229853_, blockstate, 1, 6 - i, 1 + i, p_229857_);
this.placeBlock(p_229853_, blockstate, 2, 6 - i, 1 + i, p_229857_);
this.placeBlock(p_229853_, blockstate, 3, 6 - i, 1 + i, p_229857_);
if (i < 5) {
this.placeBlock(p_229853_, Blocks.STONE_BRICKS.defaultBlockState(), 1, 5 - i, 1 + i, p_229857_);
this.placeBlock(p_229853_, Blocks.STONE_BRICKS.defaultBlockState(), 2, 5 - i, 1 + i, p_229857_);
this.placeBlock(p_229853_, Blocks.STONE_BRICKS.defaultBlockState(), 3, 5 - i, 1 + i, p_229857_);
}
}
}
}
abstract static class StrongholdPiece extends StructurePiece {
protected StrongholdPieces.StrongholdPiece.SmallDoorType entryDoor = StrongholdPieces.StrongholdPiece.SmallDoorType.OPENING;
protected StrongholdPiece(StructurePieceType p_229874_, int p_229875_, BoundingBox p_229876_) {
super(p_229874_, p_229875_, p_229876_);
}
public StrongholdPiece(StructurePieceType p_229878_, CompoundTag p_229879_) {
super(p_229878_, p_229879_);
this.entryDoor = p_229879_.read("EntryDoor", StrongholdPieces.StrongholdPiece.SmallDoorType.LEGACY_CODEC).orElseThrow();
}
@Override
protected void addAdditionalSaveData(StructurePieceSerializationContext p_229891_, CompoundTag p_229892_) {
p_229892_.store("EntryDoor", StrongholdPieces.StrongholdPiece.SmallDoorType.LEGACY_CODEC, this.entryDoor);
}
protected void generateSmallDoor(
WorldGenLevel p_229881_,
RandomSource p_229882_,
BoundingBox p_229883_,
StrongholdPieces.StrongholdPiece.SmallDoorType p_229884_,
int p_229885_,
int p_229886_,
int p_229887_
) {
switch (p_229884_) {
case OPENING:
this.generateBox(
p_229881_, p_229883_, p_229885_, p_229886_, p_229887_, p_229885_ + 3 - 1, p_229886_ + 3 - 1, p_229887_, CAVE_AIR, CAVE_AIR, false
);
break;
case WOOD_DOOR:
this.placeBlock(p_229881_, Blocks.STONE_BRICKS.defaultBlockState(), p_229885_, p_229886_, p_229887_, p_229883_);
this.placeBlock(p_229881_, Blocks.STONE_BRICKS.defaultBlockState(), p_229885_, p_229886_ + 1, p_229887_, p_229883_);
this.placeBlock(p_229881_, Blocks.STONE_BRICKS.defaultBlockState(), p_229885_, p_229886_ + 2, p_229887_, p_229883_);
this.placeBlock(p_229881_, Blocks.STONE_BRICKS.defaultBlockState(), p_229885_ + 1, p_229886_ + 2, p_229887_, p_229883_);
this.placeBlock(p_229881_, Blocks.STONE_BRICKS.defaultBlockState(), p_229885_ + 2, p_229886_ + 2, p_229887_, p_229883_);
this.placeBlock(p_229881_, Blocks.STONE_BRICKS.defaultBlockState(), p_229885_ + 2, p_229886_ + 1, p_229887_, p_229883_);
this.placeBlock(p_229881_, Blocks.STONE_BRICKS.defaultBlockState(), p_229885_ + 2, p_229886_, p_229887_, p_229883_);
this.placeBlock(p_229881_, Blocks.OAK_DOOR.defaultBlockState(), p_229885_ + 1, p_229886_, p_229887_, p_229883_);
this.placeBlock(
p_229881_,
Blocks.OAK_DOOR.defaultBlockState().setValue(DoorBlock.HALF, DoubleBlockHalf.UPPER),
p_229885_ + 1,
p_229886_ + 1,
p_229887_,
p_229883_
);
break;
case GRATES:
this.placeBlock(p_229881_, Blocks.CAVE_AIR.defaultBlockState(), p_229885_ + 1, p_229886_, p_229887_, p_229883_);
this.placeBlock(p_229881_, Blocks.CAVE_AIR.defaultBlockState(), p_229885_ + 1, p_229886_ + 1, p_229887_, p_229883_);
this.placeBlock(p_229881_, Blocks.IRON_BARS.defaultBlockState().setValue(IronBarsBlock.WEST, true), p_229885_, p_229886_, p_229887_, p_229883_);
this.placeBlock(p_229881_, Blocks.IRON_BARS.defaultBlockState().setValue(IronBarsBlock.WEST, true), p_229885_, p_229886_ + 1, p_229887_, p_229883_);
this.placeBlock(
p_229881_,
Blocks.IRON_BARS.defaultBlockState().setValue(IronBarsBlock.EAST, true).setValue(IronBarsBlock.WEST, true),
p_229885_,
p_229886_ + 2,
p_229887_,
p_229883_
);
this.placeBlock(
p_229881_,
Blocks.IRON_BARS.defaultBlockState().setValue(IronBarsBlock.EAST, true).setValue(IronBarsBlock.WEST, true),
p_229885_ + 1,
p_229886_ + 2,
p_229887_,
p_229883_
);
this.placeBlock(
p_229881_,
Blocks.IRON_BARS.defaultBlockState().setValue(IronBarsBlock.EAST, true).setValue(IronBarsBlock.WEST, true),
p_229885_ + 2,
p_229886_ + 2,
p_229887_,
p_229883_
);
this.placeBlock(
p_229881_, Blocks.IRON_BARS.defaultBlockState().setValue(IronBarsBlock.EAST, true), p_229885_ + 2, p_229886_ + 1, p_229887_, p_229883_
);
this.placeBlock(p_229881_, Blocks.IRON_BARS.defaultBlockState().setValue(IronBarsBlock.EAST, true), p_229885_ + 2, p_229886_, p_229887_, p_229883_);
break;
case IRON_DOOR:
this.placeBlock(p_229881_, Blocks.STONE_BRICKS.defaultBlockState(), p_229885_, p_229886_, p_229887_, p_229883_);
this.placeBlock(p_229881_, Blocks.STONE_BRICKS.defaultBlockState(), p_229885_, p_229886_ + 1, p_229887_, p_229883_);
this.placeBlock(p_229881_, Blocks.STONE_BRICKS.defaultBlockState(), p_229885_, p_229886_ + 2, p_229887_, p_229883_);
this.placeBlock(p_229881_, Blocks.STONE_BRICKS.defaultBlockState(), p_229885_ + 1, p_229886_ + 2, p_229887_, p_229883_);
this.placeBlock(p_229881_, Blocks.STONE_BRICKS.defaultBlockState(), p_229885_ + 2, p_229886_ + 2, p_229887_, p_229883_);
this.placeBlock(p_229881_, Blocks.STONE_BRICKS.defaultBlockState(), p_229885_ + 2, p_229886_ + 1, p_229887_, p_229883_);
this.placeBlock(p_229881_, Blocks.STONE_BRICKS.defaultBlockState(), p_229885_ + 2, p_229886_, p_229887_, p_229883_);
this.placeBlock(p_229881_, Blocks.IRON_DOOR.defaultBlockState(), p_229885_ + 1, p_229886_, p_229887_, p_229883_);
this.placeBlock(
p_229881_,
Blocks.IRON_DOOR.defaultBlockState().setValue(DoorBlock.HALF, DoubleBlockHalf.UPPER),
p_229885_ + 1,
p_229886_ + 1,
p_229887_,
p_229883_
);
this.placeBlock(
p_229881_,
Blocks.STONE_BUTTON.defaultBlockState().setValue(ButtonBlock.FACING, Direction.NORTH),
p_229885_ + 2,
p_229886_ + 1,
p_229887_ + 1,
p_229883_
);
this.placeBlock(
p_229881_,
Blocks.STONE_BUTTON.defaultBlockState().setValue(ButtonBlock.FACING, Direction.SOUTH),
p_229885_ + 2,
p_229886_ + 1,
p_229887_ - 1,
p_229883_
);
}
}
protected StrongholdPieces.StrongholdPiece.SmallDoorType randomSmallDoor(RandomSource p_229900_) {
int i = p_229900_.nextInt(5);
switch (i) {
case 0:
case 1:
default:
return StrongholdPieces.StrongholdPiece.SmallDoorType.OPENING;
case 2:
return StrongholdPieces.StrongholdPiece.SmallDoorType.WOOD_DOOR;
case 3:
return StrongholdPieces.StrongholdPiece.SmallDoorType.GRATES;
case 4:
return StrongholdPieces.StrongholdPiece.SmallDoorType.IRON_DOOR;
}
}
@Nullable
protected StructurePiece generateSmallDoorChildForward(
StrongholdPieces.StartPiece p_229894_, StructurePieceAccessor p_229895_, RandomSource p_229896_, int p_229897_, int p_229898_
) {
Direction direction = this.getOrientation();
if (direction != null) {
switch (direction) {
case NORTH:
return StrongholdPieces.generateAndAddPiece(
p_229894_,
p_229895_,
p_229896_,
this.boundingBox.minX() + p_229897_,
this.boundingBox.minY() + p_229898_,
this.boundingBox.minZ() - 1,
direction,
this.getGenDepth()
);
case SOUTH:
return StrongholdPieces.generateAndAddPiece(
p_229894_,
p_229895_,
p_229896_,
this.boundingBox.minX() + p_229897_,
this.boundingBox.minY() + p_229898_,
this.boundingBox.maxZ() + 1,
direction,
this.getGenDepth()
);
case WEST:
return StrongholdPieces.generateAndAddPiece(
p_229894_,
p_229895_,
p_229896_,
this.boundingBox.minX() - 1,
this.boundingBox.minY() + p_229898_,
this.boundingBox.minZ() + p_229897_,
direction,
this.getGenDepth()
);
case EAST:
return StrongholdPieces.generateAndAddPiece(
p_229894_,
p_229895_,
p_229896_,
this.boundingBox.maxX() + 1,
this.boundingBox.minY() + p_229898_,
this.boundingBox.minZ() + p_229897_,
direction,
this.getGenDepth()
);
}
}
return null;
}
@Nullable
protected StructurePiece generateSmallDoorChildLeft(
StrongholdPieces.StartPiece p_229902_, StructurePieceAccessor p_229903_, RandomSource p_229904_, int p_229905_, int p_229906_
) {
Direction direction = this.getOrientation();
if (direction != null) {
switch (direction) {
case NORTH:
return StrongholdPieces.generateAndAddPiece(
p_229902_,
p_229903_,
p_229904_,
this.boundingBox.minX() - 1,
this.boundingBox.minY() + p_229905_,
this.boundingBox.minZ() + p_229906_,
Direction.WEST,
this.getGenDepth()
);
case SOUTH:
return StrongholdPieces.generateAndAddPiece(
p_229902_,
p_229903_,
p_229904_,
this.boundingBox.minX() - 1,
this.boundingBox.minY() + p_229905_,
this.boundingBox.minZ() + p_229906_,
Direction.WEST,
this.getGenDepth()
);
case WEST:
return StrongholdPieces.generateAndAddPiece(
p_229902_,
p_229903_,
p_229904_,
this.boundingBox.minX() + p_229906_,
this.boundingBox.minY() + p_229905_,
this.boundingBox.minZ() - 1,
Direction.NORTH,
this.getGenDepth()
);
case EAST:
return StrongholdPieces.generateAndAddPiece(
p_229902_,
p_229903_,
p_229904_,
this.boundingBox.minX() + p_229906_,
this.boundingBox.minY() + p_229905_,
this.boundingBox.minZ() - 1,
Direction.NORTH,
this.getGenDepth()
);
}
}
return null;
}
@Nullable
protected StructurePiece generateSmallDoorChildRight(
StrongholdPieces.StartPiece p_229908_, StructurePieceAccessor p_229909_, RandomSource p_229910_, int p_229911_, int p_229912_
) {
Direction direction = this.getOrientation();
if (direction != null) {
switch (direction) {
case NORTH:
return StrongholdPieces.generateAndAddPiece(
p_229908_,
p_229909_,
p_229910_,
this.boundingBox.maxX() + 1,
this.boundingBox.minY() + p_229911_,
this.boundingBox.minZ() + p_229912_,
Direction.EAST,
this.getGenDepth()
);
case SOUTH:
return StrongholdPieces.generateAndAddPiece(
p_229908_,
p_229909_,
p_229910_,
this.boundingBox.maxX() + 1,
this.boundingBox.minY() + p_229911_,
this.boundingBox.minZ() + p_229912_,
Direction.EAST,
this.getGenDepth()
);
case WEST:
return StrongholdPieces.generateAndAddPiece(
p_229908_,
p_229909_,
p_229910_,
this.boundingBox.minX() + p_229912_,
this.boundingBox.minY() + p_229911_,
this.boundingBox.maxZ() + 1,
Direction.SOUTH,
this.getGenDepth()
);
case EAST:
return StrongholdPieces.generateAndAddPiece(
p_229908_,
p_229909_,
p_229910_,
this.boundingBox.minX() + p_229912_,
this.boundingBox.minY() + p_229911_,
this.boundingBox.maxZ() + 1,
Direction.SOUTH,
this.getGenDepth()
);
}
}
return null;
}
protected static boolean isOkBox(BoundingBox p_229889_) {
return p_229889_ != null && p_229889_.minY() > 10;
}
protected static enum SmallDoorType {
OPENING,
WOOD_DOOR,
GRATES,
IRON_DOOR;
@Deprecated
public static final Codec<StrongholdPieces.StrongholdPiece.SmallDoorType> LEGACY_CODEC = ExtraCodecs.legacyEnum(
StrongholdPieces.StrongholdPiece.SmallDoorType::valueOf
);
}
}
public abstract static class Turn extends StrongholdPieces.StrongholdPiece {
protected static final int WIDTH = 5;
protected static final int HEIGHT = 5;
protected static final int DEPTH = 5;
protected Turn(StructurePieceType p_229930_, int p_229931_, BoundingBox p_229932_) {
super(p_229930_, p_229931_, p_229932_);
}
public Turn(StructurePieceType p_229934_, CompoundTag p_229935_) {
super(p_229934_, p_229935_);
}
}
}