1287 lines
72 KiB
Java
1287 lines
72 KiB
Java
package net.minecraft.world.level.levelgen.structure.structures;
|
|
|
|
import com.google.common.collect.Lists;
|
|
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import javax.annotation.Nullable;
|
|
import net.minecraft.Util;
|
|
import net.minecraft.core.BlockPos;
|
|
import net.minecraft.core.Direction;
|
|
import net.minecraft.nbt.CompoundTag;
|
|
import net.minecraft.resources.ResourceLocation;
|
|
import net.minecraft.util.RandomSource;
|
|
import net.minecraft.util.Tuple;
|
|
import net.minecraft.world.entity.EntitySpawnReason;
|
|
import net.minecraft.world.entity.EntityType;
|
|
import net.minecraft.world.entity.Mob;
|
|
import net.minecraft.world.level.ServerLevelAccessor;
|
|
import net.minecraft.world.level.block.Blocks;
|
|
import net.minecraft.world.level.block.ChestBlock;
|
|
import net.minecraft.world.level.block.Mirror;
|
|
import net.minecraft.world.level.block.Rotation;
|
|
import net.minecraft.world.level.block.state.BlockState;
|
|
import net.minecraft.world.level.levelgen.structure.BoundingBox;
|
|
import net.minecraft.world.level.levelgen.structure.TemplateStructurePiece;
|
|
import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext;
|
|
import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceType;
|
|
import net.minecraft.world.level.levelgen.structure.templatesystem.BlockIgnoreProcessor;
|
|
import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings;
|
|
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate;
|
|
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager;
|
|
import net.minecraft.world.level.storage.loot.BuiltInLootTables;
|
|
|
|
public class WoodlandMansionPieces {
|
|
public static void generateMansion(
|
|
StructureTemplateManager p_229986_,
|
|
BlockPos p_229987_,
|
|
Rotation p_229988_,
|
|
List<WoodlandMansionPieces.WoodlandMansionPiece> p_229989_,
|
|
RandomSource p_229990_
|
|
) {
|
|
WoodlandMansionPieces.MansionGrid woodlandmansionpieces$mansiongrid = new WoodlandMansionPieces.MansionGrid(p_229990_);
|
|
WoodlandMansionPieces.MansionPiecePlacer woodlandmansionpieces$mansionpieceplacer = new WoodlandMansionPieces.MansionPiecePlacer(p_229986_, p_229990_);
|
|
woodlandmansionpieces$mansionpieceplacer.createMansion(p_229987_, p_229988_, p_229989_, woodlandmansionpieces$mansiongrid);
|
|
}
|
|
|
|
static class FirstFloorRoomCollection extends WoodlandMansionPieces.FloorRoomCollection {
|
|
@Override
|
|
public String get1x1(RandomSource p_229995_) {
|
|
return "1x1_a" + (p_229995_.nextInt(5) + 1);
|
|
}
|
|
|
|
@Override
|
|
public String get1x1Secret(RandomSource p_230000_) {
|
|
return "1x1_as" + (p_230000_.nextInt(4) + 1);
|
|
}
|
|
|
|
@Override
|
|
public String get1x2SideEntrance(RandomSource p_229997_, boolean p_229998_) {
|
|
return "1x2_a" + (p_229997_.nextInt(9) + 1);
|
|
}
|
|
|
|
@Override
|
|
public String get1x2FrontEntrance(RandomSource p_230002_, boolean p_230003_) {
|
|
return "1x2_b" + (p_230002_.nextInt(5) + 1);
|
|
}
|
|
|
|
@Override
|
|
public String get1x2Secret(RandomSource p_230005_) {
|
|
return "1x2_s" + (p_230005_.nextInt(2) + 1);
|
|
}
|
|
|
|
@Override
|
|
public String get2x2(RandomSource p_230007_) {
|
|
return "2x2_a" + (p_230007_.nextInt(4) + 1);
|
|
}
|
|
|
|
@Override
|
|
public String get2x2Secret(RandomSource p_230009_) {
|
|
return "2x2_s1";
|
|
}
|
|
}
|
|
|
|
abstract static class FloorRoomCollection {
|
|
public abstract String get1x1(RandomSource p_230011_);
|
|
|
|
public abstract String get1x1Secret(RandomSource p_230014_);
|
|
|
|
public abstract String get1x2SideEntrance(RandomSource p_230012_, boolean p_230013_);
|
|
|
|
public abstract String get1x2FrontEntrance(RandomSource p_230015_, boolean p_230016_);
|
|
|
|
public abstract String get1x2Secret(RandomSource p_230017_);
|
|
|
|
public abstract String get2x2(RandomSource p_230018_);
|
|
|
|
public abstract String get2x2Secret(RandomSource p_230019_);
|
|
}
|
|
|
|
static class MansionGrid {
|
|
private static final int DEFAULT_SIZE = 11;
|
|
private static final int CLEAR = 0;
|
|
private static final int CORRIDOR = 1;
|
|
private static final int ROOM = 2;
|
|
private static final int START_ROOM = 3;
|
|
private static final int TEST_ROOM = 4;
|
|
private static final int BLOCKED = 5;
|
|
private static final int ROOM_1x1 = 65536;
|
|
private static final int ROOM_1x2 = 131072;
|
|
private static final int ROOM_2x2 = 262144;
|
|
private static final int ROOM_ORIGIN_FLAG = 1048576;
|
|
private static final int ROOM_DOOR_FLAG = 2097152;
|
|
private static final int ROOM_STAIRS_FLAG = 4194304;
|
|
private static final int ROOM_CORRIDOR_FLAG = 8388608;
|
|
private static final int ROOM_TYPE_MASK = 983040;
|
|
private static final int ROOM_ID_MASK = 65535;
|
|
private final RandomSource random;
|
|
final WoodlandMansionPieces.SimpleGrid baseGrid;
|
|
final WoodlandMansionPieces.SimpleGrid thirdFloorGrid;
|
|
final WoodlandMansionPieces.SimpleGrid[] floorRooms;
|
|
final int entranceX;
|
|
final int entranceY;
|
|
|
|
public MansionGrid(RandomSource p_230043_) {
|
|
this.random = p_230043_;
|
|
int i = 11;
|
|
this.entranceX = 7;
|
|
this.entranceY = 4;
|
|
this.baseGrid = new WoodlandMansionPieces.SimpleGrid(11, 11, 5);
|
|
this.baseGrid.set(this.entranceX, this.entranceY, this.entranceX + 1, this.entranceY + 1, 3);
|
|
this.baseGrid.set(this.entranceX - 1, this.entranceY, this.entranceX - 1, this.entranceY + 1, 2);
|
|
this.baseGrid.set(this.entranceX + 2, this.entranceY - 2, this.entranceX + 3, this.entranceY + 3, 5);
|
|
this.baseGrid.set(this.entranceX + 1, this.entranceY - 2, this.entranceX + 1, this.entranceY - 1, 1);
|
|
this.baseGrid.set(this.entranceX + 1, this.entranceY + 2, this.entranceX + 1, this.entranceY + 3, 1);
|
|
this.baseGrid.set(this.entranceX - 1, this.entranceY - 1, 1);
|
|
this.baseGrid.set(this.entranceX - 1, this.entranceY + 2, 1);
|
|
this.baseGrid.set(0, 0, 11, 1, 5);
|
|
this.baseGrid.set(0, 9, 11, 11, 5);
|
|
this.recursiveCorridor(this.baseGrid, this.entranceX, this.entranceY - 2, Direction.WEST, 6);
|
|
this.recursiveCorridor(this.baseGrid, this.entranceX, this.entranceY + 3, Direction.WEST, 6);
|
|
this.recursiveCorridor(this.baseGrid, this.entranceX - 2, this.entranceY - 1, Direction.WEST, 3);
|
|
this.recursiveCorridor(this.baseGrid, this.entranceX - 2, this.entranceY + 2, Direction.WEST, 3);
|
|
|
|
while (this.cleanEdges(this.baseGrid)) {
|
|
}
|
|
|
|
this.floorRooms = new WoodlandMansionPieces.SimpleGrid[3];
|
|
this.floorRooms[0] = new WoodlandMansionPieces.SimpleGrid(11, 11, 5);
|
|
this.floorRooms[1] = new WoodlandMansionPieces.SimpleGrid(11, 11, 5);
|
|
this.floorRooms[2] = new WoodlandMansionPieces.SimpleGrid(11, 11, 5);
|
|
this.identifyRooms(this.baseGrid, this.floorRooms[0]);
|
|
this.identifyRooms(this.baseGrid, this.floorRooms[1]);
|
|
this.floorRooms[0].set(this.entranceX + 1, this.entranceY, this.entranceX + 1, this.entranceY + 1, 8388608);
|
|
this.floorRooms[1].set(this.entranceX + 1, this.entranceY, this.entranceX + 1, this.entranceY + 1, 8388608);
|
|
this.thirdFloorGrid = new WoodlandMansionPieces.SimpleGrid(this.baseGrid.width, this.baseGrid.height, 5);
|
|
this.setupThirdFloor();
|
|
this.identifyRooms(this.thirdFloorGrid, this.floorRooms[2]);
|
|
}
|
|
|
|
public static boolean isHouse(WoodlandMansionPieces.SimpleGrid p_230048_, int p_230049_, int p_230050_) {
|
|
int i = p_230048_.get(p_230049_, p_230050_);
|
|
return i == 1 || i == 2 || i == 3 || i == 4;
|
|
}
|
|
|
|
public boolean isRoomId(WoodlandMansionPieces.SimpleGrid p_230052_, int p_230053_, int p_230054_, int p_230055_, int p_230056_) {
|
|
return (this.floorRooms[p_230055_].get(p_230053_, p_230054_) & 65535) == p_230056_;
|
|
}
|
|
|
|
@Nullable
|
|
public Direction get1x2RoomDirection(WoodlandMansionPieces.SimpleGrid p_230068_, int p_230069_, int p_230070_, int p_230071_, int p_230072_) {
|
|
for (Direction direction : Direction.Plane.HORIZONTAL) {
|
|
if (this.isRoomId(p_230068_, p_230069_ + direction.getStepX(), p_230070_ + direction.getStepZ(), p_230071_, p_230072_)) {
|
|
return direction;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private void recursiveCorridor(WoodlandMansionPieces.SimpleGrid p_230058_, int p_230059_, int p_230060_, Direction p_230061_, int p_230062_) {
|
|
if (p_230062_ > 0) {
|
|
p_230058_.set(p_230059_, p_230060_, 1);
|
|
p_230058_.setif(p_230059_ + p_230061_.getStepX(), p_230060_ + p_230061_.getStepZ(), 0, 1);
|
|
|
|
for (int i = 0; i < 8; i++) {
|
|
Direction direction = Direction.from2DDataValue(this.random.nextInt(4));
|
|
if (direction != p_230061_.getOpposite() && (direction != Direction.EAST || !this.random.nextBoolean())) {
|
|
int j = p_230059_ + p_230061_.getStepX();
|
|
int k = p_230060_ + p_230061_.getStepZ();
|
|
if (p_230058_.get(j + direction.getStepX(), k + direction.getStepZ()) == 0
|
|
&& p_230058_.get(j + direction.getStepX() * 2, k + direction.getStepZ() * 2) == 0) {
|
|
this.recursiveCorridor(
|
|
p_230058_,
|
|
p_230059_ + p_230061_.getStepX() + direction.getStepX(),
|
|
p_230060_ + p_230061_.getStepZ() + direction.getStepZ(),
|
|
direction,
|
|
p_230062_ - 1
|
|
);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
Direction direction1 = p_230061_.getClockWise();
|
|
Direction direction2 = p_230061_.getCounterClockWise();
|
|
p_230058_.setif(p_230059_ + direction1.getStepX(), p_230060_ + direction1.getStepZ(), 0, 2);
|
|
p_230058_.setif(p_230059_ + direction2.getStepX(), p_230060_ + direction2.getStepZ(), 0, 2);
|
|
p_230058_.setif(
|
|
p_230059_ + p_230061_.getStepX() + direction1.getStepX(), p_230060_ + p_230061_.getStepZ() + direction1.getStepZ(), 0, 2
|
|
);
|
|
p_230058_.setif(
|
|
p_230059_ + p_230061_.getStepX() + direction2.getStepX(), p_230060_ + p_230061_.getStepZ() + direction2.getStepZ(), 0, 2
|
|
);
|
|
p_230058_.setif(p_230059_ + p_230061_.getStepX() * 2, p_230060_ + p_230061_.getStepZ() * 2, 0, 2);
|
|
p_230058_.setif(p_230059_ + direction1.getStepX() * 2, p_230060_ + direction1.getStepZ() * 2, 0, 2);
|
|
p_230058_.setif(p_230059_ + direction2.getStepX() * 2, p_230060_ + direction2.getStepZ() * 2, 0, 2);
|
|
}
|
|
}
|
|
|
|
private boolean cleanEdges(WoodlandMansionPieces.SimpleGrid p_230046_) {
|
|
boolean flag = false;
|
|
|
|
for (int i = 0; i < p_230046_.height; i++) {
|
|
for (int j = 0; j < p_230046_.width; j++) {
|
|
if (p_230046_.get(j, i) == 0) {
|
|
int k = 0;
|
|
k += isHouse(p_230046_, j + 1, i) ? 1 : 0;
|
|
k += isHouse(p_230046_, j - 1, i) ? 1 : 0;
|
|
k += isHouse(p_230046_, j, i + 1) ? 1 : 0;
|
|
k += isHouse(p_230046_, j, i - 1) ? 1 : 0;
|
|
if (k >= 3) {
|
|
p_230046_.set(j, i, 2);
|
|
flag = true;
|
|
} else if (k == 2) {
|
|
int l = 0;
|
|
l += isHouse(p_230046_, j + 1, i + 1) ? 1 : 0;
|
|
l += isHouse(p_230046_, j - 1, i + 1) ? 1 : 0;
|
|
l += isHouse(p_230046_, j + 1, i - 1) ? 1 : 0;
|
|
l += isHouse(p_230046_, j - 1, i - 1) ? 1 : 0;
|
|
if (l <= 1) {
|
|
p_230046_.set(j, i, 2);
|
|
flag = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return flag;
|
|
}
|
|
|
|
private void setupThirdFloor() {
|
|
List<Tuple<Integer, Integer>> list = Lists.newArrayList();
|
|
WoodlandMansionPieces.SimpleGrid woodlandmansionpieces$simplegrid = this.floorRooms[1];
|
|
|
|
for (int i = 0; i < this.thirdFloorGrid.height; i++) {
|
|
for (int j = 0; j < this.thirdFloorGrid.width; j++) {
|
|
int k = woodlandmansionpieces$simplegrid.get(j, i);
|
|
int l = k & 983040;
|
|
if (l == 131072 && (k & 2097152) == 2097152) {
|
|
list.add(new Tuple<>(j, i));
|
|
}
|
|
}
|
|
}
|
|
|
|
if (list.isEmpty()) {
|
|
this.thirdFloorGrid.set(0, 0, this.thirdFloorGrid.width, this.thirdFloorGrid.height, 5);
|
|
} else {
|
|
Tuple<Integer, Integer> tuple = list.get(this.random.nextInt(list.size()));
|
|
int l1 = woodlandmansionpieces$simplegrid.get(tuple.getA(), tuple.getB());
|
|
woodlandmansionpieces$simplegrid.set(tuple.getA(), tuple.getB(), l1 | 4194304);
|
|
Direction direction1 = this.get1x2RoomDirection(this.baseGrid, tuple.getA(), tuple.getB(), 1, l1 & 65535);
|
|
int i2 = tuple.getA() + direction1.getStepX();
|
|
int i1 = tuple.getB() + direction1.getStepZ();
|
|
|
|
for (int j1 = 0; j1 < this.thirdFloorGrid.height; j1++) {
|
|
for (int k1 = 0; k1 < this.thirdFloorGrid.width; k1++) {
|
|
if (!isHouse(this.baseGrid, k1, j1)) {
|
|
this.thirdFloorGrid.set(k1, j1, 5);
|
|
} else if (k1 == tuple.getA() && j1 == tuple.getB()) {
|
|
this.thirdFloorGrid.set(k1, j1, 3);
|
|
} else if (k1 == i2 && j1 == i1) {
|
|
this.thirdFloorGrid.set(k1, j1, 3);
|
|
this.floorRooms[2].set(k1, j1, 8388608);
|
|
}
|
|
}
|
|
}
|
|
|
|
List<Direction> list1 = Lists.newArrayList();
|
|
|
|
for (Direction direction : Direction.Plane.HORIZONTAL) {
|
|
if (this.thirdFloorGrid.get(i2 + direction.getStepX(), i1 + direction.getStepZ()) == 0) {
|
|
list1.add(direction);
|
|
}
|
|
}
|
|
|
|
if (list1.isEmpty()) {
|
|
this.thirdFloorGrid.set(0, 0, this.thirdFloorGrid.width, this.thirdFloorGrid.height, 5);
|
|
woodlandmansionpieces$simplegrid.set(tuple.getA(), tuple.getB(), l1);
|
|
} else {
|
|
Direction direction2 = list1.get(this.random.nextInt(list1.size()));
|
|
this.recursiveCorridor(this.thirdFloorGrid, i2 + direction2.getStepX(), i1 + direction2.getStepZ(), direction2, 4);
|
|
|
|
while (this.cleanEdges(this.thirdFloorGrid)) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void identifyRooms(WoodlandMansionPieces.SimpleGrid p_230064_, WoodlandMansionPieces.SimpleGrid p_230065_) {
|
|
ObjectArrayList<Tuple<Integer, Integer>> objectarraylist = new ObjectArrayList<>();
|
|
|
|
for (int i = 0; i < p_230064_.height; i++) {
|
|
for (int j = 0; j < p_230064_.width; j++) {
|
|
if (p_230064_.get(j, i) == 2) {
|
|
objectarraylist.add(new Tuple<>(j, i));
|
|
}
|
|
}
|
|
}
|
|
|
|
Util.shuffle(objectarraylist, this.random);
|
|
int k3 = 10;
|
|
|
|
for (Tuple<Integer, Integer> tuple : objectarraylist) {
|
|
int k = tuple.getA();
|
|
int l = tuple.getB();
|
|
if (p_230065_.get(k, l) == 0) {
|
|
int i1 = k;
|
|
int j1 = k;
|
|
int k1 = l;
|
|
int l1 = l;
|
|
int i2 = 65536;
|
|
if (p_230065_.get(k + 1, l) == 0
|
|
&& p_230065_.get(k, l + 1) == 0
|
|
&& p_230065_.get(k + 1, l + 1) == 0
|
|
&& p_230064_.get(k + 1, l) == 2
|
|
&& p_230064_.get(k, l + 1) == 2
|
|
&& p_230064_.get(k + 1, l + 1) == 2) {
|
|
j1 = k + 1;
|
|
l1 = l + 1;
|
|
i2 = 262144;
|
|
} else if (p_230065_.get(k - 1, l) == 0
|
|
&& p_230065_.get(k, l + 1) == 0
|
|
&& p_230065_.get(k - 1, l + 1) == 0
|
|
&& p_230064_.get(k - 1, l) == 2
|
|
&& p_230064_.get(k, l + 1) == 2
|
|
&& p_230064_.get(k - 1, l + 1) == 2) {
|
|
i1 = k - 1;
|
|
l1 = l + 1;
|
|
i2 = 262144;
|
|
} else if (p_230065_.get(k - 1, l) == 0
|
|
&& p_230065_.get(k, l - 1) == 0
|
|
&& p_230065_.get(k - 1, l - 1) == 0
|
|
&& p_230064_.get(k - 1, l) == 2
|
|
&& p_230064_.get(k, l - 1) == 2
|
|
&& p_230064_.get(k - 1, l - 1) == 2) {
|
|
i1 = k - 1;
|
|
k1 = l - 1;
|
|
i2 = 262144;
|
|
} else if (p_230065_.get(k + 1, l) == 0 && p_230064_.get(k + 1, l) == 2) {
|
|
j1 = k + 1;
|
|
i2 = 131072;
|
|
} else if (p_230065_.get(k, l + 1) == 0 && p_230064_.get(k, l + 1) == 2) {
|
|
l1 = l + 1;
|
|
i2 = 131072;
|
|
} else if (p_230065_.get(k - 1, l) == 0 && p_230064_.get(k - 1, l) == 2) {
|
|
i1 = k - 1;
|
|
i2 = 131072;
|
|
} else if (p_230065_.get(k, l - 1) == 0 && p_230064_.get(k, l - 1) == 2) {
|
|
k1 = l - 1;
|
|
i2 = 131072;
|
|
}
|
|
|
|
int j2 = this.random.nextBoolean() ? i1 : j1;
|
|
int k2 = this.random.nextBoolean() ? k1 : l1;
|
|
int l2 = 2097152;
|
|
if (!p_230064_.edgesTo(j2, k2, 1)) {
|
|
j2 = j2 == i1 ? j1 : i1;
|
|
k2 = k2 == k1 ? l1 : k1;
|
|
if (!p_230064_.edgesTo(j2, k2, 1)) {
|
|
k2 = k2 == k1 ? l1 : k1;
|
|
if (!p_230064_.edgesTo(j2, k2, 1)) {
|
|
j2 = j2 == i1 ? j1 : i1;
|
|
k2 = k2 == k1 ? l1 : k1;
|
|
if (!p_230064_.edgesTo(j2, k2, 1)) {
|
|
l2 = 0;
|
|
j2 = i1;
|
|
k2 = k1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
for (int i3 = k1; i3 <= l1; i3++) {
|
|
for (int j3 = i1; j3 <= j1; j3++) {
|
|
if (j3 == j2 && i3 == k2) {
|
|
p_230065_.set(j3, i3, 1048576 | l2 | i2 | k3);
|
|
} else {
|
|
p_230065_.set(j3, i3, i2 | k3);
|
|
}
|
|
}
|
|
}
|
|
|
|
k3++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
static class MansionPiecePlacer {
|
|
private final StructureTemplateManager structureTemplateManager;
|
|
private final RandomSource random;
|
|
private int startX;
|
|
private int startY;
|
|
|
|
public MansionPiecePlacer(StructureTemplateManager p_230078_, RandomSource p_230079_) {
|
|
this.structureTemplateManager = p_230078_;
|
|
this.random = p_230079_;
|
|
}
|
|
|
|
public void createMansion(
|
|
BlockPos p_230081_, Rotation p_230082_, List<WoodlandMansionPieces.WoodlandMansionPiece> p_230083_, WoodlandMansionPieces.MansionGrid p_230084_
|
|
) {
|
|
WoodlandMansionPieces.PlacementData woodlandmansionpieces$placementdata = new WoodlandMansionPieces.PlacementData();
|
|
woodlandmansionpieces$placementdata.position = p_230081_;
|
|
woodlandmansionpieces$placementdata.rotation = p_230082_;
|
|
woodlandmansionpieces$placementdata.wallType = "wall_flat";
|
|
WoodlandMansionPieces.PlacementData woodlandmansionpieces$placementdata1 = new WoodlandMansionPieces.PlacementData();
|
|
this.entrance(p_230083_, woodlandmansionpieces$placementdata);
|
|
woodlandmansionpieces$placementdata1.position = woodlandmansionpieces$placementdata.position.above(8);
|
|
woodlandmansionpieces$placementdata1.rotation = woodlandmansionpieces$placementdata.rotation;
|
|
woodlandmansionpieces$placementdata1.wallType = "wall_window";
|
|
if (!p_230083_.isEmpty()) {
|
|
}
|
|
|
|
WoodlandMansionPieces.SimpleGrid woodlandmansionpieces$simplegrid = p_230084_.baseGrid;
|
|
WoodlandMansionPieces.SimpleGrid woodlandmansionpieces$simplegrid1 = p_230084_.thirdFloorGrid;
|
|
this.startX = p_230084_.entranceX + 1;
|
|
this.startY = p_230084_.entranceY + 1;
|
|
int i = p_230084_.entranceX + 1;
|
|
int j = p_230084_.entranceY;
|
|
this.traverseOuterWalls(
|
|
p_230083_, woodlandmansionpieces$placementdata, woodlandmansionpieces$simplegrid, Direction.SOUTH, this.startX, this.startY, i, j
|
|
);
|
|
this.traverseOuterWalls(
|
|
p_230083_, woodlandmansionpieces$placementdata1, woodlandmansionpieces$simplegrid, Direction.SOUTH, this.startX, this.startY, i, j
|
|
);
|
|
WoodlandMansionPieces.PlacementData woodlandmansionpieces$placementdata2 = new WoodlandMansionPieces.PlacementData();
|
|
woodlandmansionpieces$placementdata2.position = woodlandmansionpieces$placementdata.position.above(19);
|
|
woodlandmansionpieces$placementdata2.rotation = woodlandmansionpieces$placementdata.rotation;
|
|
woodlandmansionpieces$placementdata2.wallType = "wall_window";
|
|
boolean flag = false;
|
|
|
|
for (int k = 0; k < woodlandmansionpieces$simplegrid1.height && !flag; k++) {
|
|
for (int l = woodlandmansionpieces$simplegrid1.width - 1; l >= 0 && !flag; l--) {
|
|
if (WoodlandMansionPieces.MansionGrid.isHouse(woodlandmansionpieces$simplegrid1, l, k)) {
|
|
woodlandmansionpieces$placementdata2.position = woodlandmansionpieces$placementdata2.position
|
|
.relative(p_230082_.rotate(Direction.SOUTH), 8 + (k - this.startY) * 8);
|
|
woodlandmansionpieces$placementdata2.position = woodlandmansionpieces$placementdata2.position
|
|
.relative(p_230082_.rotate(Direction.EAST), (l - this.startX) * 8);
|
|
this.traverseWallPiece(p_230083_, woodlandmansionpieces$placementdata2);
|
|
this.traverseOuterWalls(p_230083_, woodlandmansionpieces$placementdata2, woodlandmansionpieces$simplegrid1, Direction.SOUTH, l, k, l, k);
|
|
flag = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
this.createRoof(p_230083_, p_230081_.above(16), p_230082_, woodlandmansionpieces$simplegrid, woodlandmansionpieces$simplegrid1);
|
|
this.createRoof(p_230083_, p_230081_.above(27), p_230082_, woodlandmansionpieces$simplegrid1, null);
|
|
if (!p_230083_.isEmpty()) {
|
|
}
|
|
|
|
WoodlandMansionPieces.FloorRoomCollection[] awoodlandmansionpieces$floorroomcollection = new WoodlandMansionPieces.FloorRoomCollection[]{
|
|
new WoodlandMansionPieces.FirstFloorRoomCollection(),
|
|
new WoodlandMansionPieces.SecondFloorRoomCollection(),
|
|
new WoodlandMansionPieces.ThirdFloorRoomCollection()
|
|
};
|
|
|
|
for (int l2 = 0; l2 < 3; l2++) {
|
|
BlockPos blockpos = p_230081_.above(8 * l2 + (l2 == 2 ? 3 : 0));
|
|
WoodlandMansionPieces.SimpleGrid woodlandmansionpieces$simplegrid2 = p_230084_.floorRooms[l2];
|
|
WoodlandMansionPieces.SimpleGrid woodlandmansionpieces$simplegrid3 = l2 == 2
|
|
? woodlandmansionpieces$simplegrid1
|
|
: woodlandmansionpieces$simplegrid;
|
|
String s = l2 == 0 ? "carpet_south_1" : "carpet_south_2";
|
|
String s1 = l2 == 0 ? "carpet_west_1" : "carpet_west_2";
|
|
|
|
for (int i1 = 0; i1 < woodlandmansionpieces$simplegrid3.height; i1++) {
|
|
for (int j1 = 0; j1 < woodlandmansionpieces$simplegrid3.width; j1++) {
|
|
if (woodlandmansionpieces$simplegrid3.get(j1, i1) == 1) {
|
|
BlockPos blockpos1 = blockpos.relative(p_230082_.rotate(Direction.SOUTH), 8 + (i1 - this.startY) * 8);
|
|
blockpos1 = blockpos1.relative(p_230082_.rotate(Direction.EAST), (j1 - this.startX) * 8);
|
|
p_230083_.add(new WoodlandMansionPieces.WoodlandMansionPiece(this.structureTemplateManager, "corridor_floor", blockpos1, p_230082_));
|
|
if (woodlandmansionpieces$simplegrid3.get(j1, i1 - 1) == 1
|
|
|| (woodlandmansionpieces$simplegrid2.get(j1, i1 - 1) & 8388608) == 8388608) {
|
|
p_230083_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, "carpet_north", blockpos1.relative(p_230082_.rotate(Direction.EAST), 1).above(), p_230082_
|
|
)
|
|
);
|
|
}
|
|
|
|
if (woodlandmansionpieces$simplegrid3.get(j1 + 1, i1) == 1
|
|
|| (woodlandmansionpieces$simplegrid2.get(j1 + 1, i1) & 8388608) == 8388608) {
|
|
p_230083_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager,
|
|
"carpet_east",
|
|
blockpos1.relative(p_230082_.rotate(Direction.SOUTH), 1).relative(p_230082_.rotate(Direction.EAST), 5).above(),
|
|
p_230082_
|
|
)
|
|
);
|
|
}
|
|
|
|
if (woodlandmansionpieces$simplegrid3.get(j1, i1 + 1) == 1
|
|
|| (woodlandmansionpieces$simplegrid2.get(j1, i1 + 1) & 8388608) == 8388608) {
|
|
p_230083_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager,
|
|
s,
|
|
blockpos1.relative(p_230082_.rotate(Direction.SOUTH), 5).relative(p_230082_.rotate(Direction.WEST), 1),
|
|
p_230082_
|
|
)
|
|
);
|
|
}
|
|
|
|
if (woodlandmansionpieces$simplegrid3.get(j1 - 1, i1) == 1
|
|
|| (woodlandmansionpieces$simplegrid2.get(j1 - 1, i1) & 8388608) == 8388608) {
|
|
p_230083_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager,
|
|
s1,
|
|
blockpos1.relative(p_230082_.rotate(Direction.WEST), 1).relative(p_230082_.rotate(Direction.NORTH), 1),
|
|
p_230082_
|
|
)
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
String s2 = l2 == 0 ? "indoors_wall_1" : "indoors_wall_2";
|
|
String s3 = l2 == 0 ? "indoors_door_1" : "indoors_door_2";
|
|
List<Direction> list = Lists.newArrayList();
|
|
|
|
for (int k1 = 0; k1 < woodlandmansionpieces$simplegrid3.height; k1++) {
|
|
for (int l1 = 0; l1 < woodlandmansionpieces$simplegrid3.width; l1++) {
|
|
boolean flag1 = l2 == 2 && woodlandmansionpieces$simplegrid3.get(l1, k1) == 3;
|
|
if (woodlandmansionpieces$simplegrid3.get(l1, k1) == 2 || flag1) {
|
|
int i2 = woodlandmansionpieces$simplegrid2.get(l1, k1);
|
|
int j2 = i2 & 983040;
|
|
int k2 = i2 & 65535;
|
|
flag1 = flag1 && (i2 & 8388608) == 8388608;
|
|
list.clear();
|
|
if ((i2 & 2097152) == 2097152) {
|
|
for (Direction direction : Direction.Plane.HORIZONTAL) {
|
|
if (woodlandmansionpieces$simplegrid3.get(l1 + direction.getStepX(), k1 + direction.getStepZ()) == 1) {
|
|
list.add(direction);
|
|
}
|
|
}
|
|
}
|
|
|
|
Direction direction1 = null;
|
|
if (!list.isEmpty()) {
|
|
direction1 = list.get(this.random.nextInt(list.size()));
|
|
} else if ((i2 & 1048576) == 1048576) {
|
|
direction1 = Direction.UP;
|
|
}
|
|
|
|
BlockPos blockpos3 = blockpos.relative(p_230082_.rotate(Direction.SOUTH), 8 + (k1 - this.startY) * 8);
|
|
blockpos3 = blockpos3.relative(p_230082_.rotate(Direction.EAST), -1 + (l1 - this.startX) * 8);
|
|
if (WoodlandMansionPieces.MansionGrid.isHouse(woodlandmansionpieces$simplegrid3, l1 - 1, k1)
|
|
&& !p_230084_.isRoomId(woodlandmansionpieces$simplegrid3, l1 - 1, k1, l2, k2)) {
|
|
p_230083_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(this.structureTemplateManager, direction1 == Direction.WEST ? s3 : s2, blockpos3, p_230082_)
|
|
);
|
|
}
|
|
|
|
if (woodlandmansionpieces$simplegrid3.get(l1 + 1, k1) == 1 && !flag1) {
|
|
BlockPos blockpos2 = blockpos3.relative(p_230082_.rotate(Direction.EAST), 8);
|
|
p_230083_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(this.structureTemplateManager, direction1 == Direction.EAST ? s3 : s2, blockpos2, p_230082_)
|
|
);
|
|
}
|
|
|
|
if (WoodlandMansionPieces.MansionGrid.isHouse(woodlandmansionpieces$simplegrid3, l1, k1 + 1)
|
|
&& !p_230084_.isRoomId(woodlandmansionpieces$simplegrid3, l1, k1 + 1, l2, k2)) {
|
|
BlockPos blockpos4 = blockpos3.relative(p_230082_.rotate(Direction.SOUTH), 7);
|
|
blockpos4 = blockpos4.relative(p_230082_.rotate(Direction.EAST), 7);
|
|
p_230083_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, direction1 == Direction.SOUTH ? s3 : s2, blockpos4, p_230082_.getRotated(Rotation.CLOCKWISE_90)
|
|
)
|
|
);
|
|
}
|
|
|
|
if (woodlandmansionpieces$simplegrid3.get(l1, k1 - 1) == 1 && !flag1) {
|
|
BlockPos blockpos5 = blockpos3.relative(p_230082_.rotate(Direction.NORTH), 1);
|
|
blockpos5 = blockpos5.relative(p_230082_.rotate(Direction.EAST), 7);
|
|
p_230083_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, direction1 == Direction.NORTH ? s3 : s2, blockpos5, p_230082_.getRotated(Rotation.CLOCKWISE_90)
|
|
)
|
|
);
|
|
}
|
|
|
|
if (j2 == 65536) {
|
|
this.addRoom1x1(p_230083_, blockpos3, p_230082_, direction1, awoodlandmansionpieces$floorroomcollection[l2]);
|
|
} else if (j2 == 131072 && direction1 != null) {
|
|
Direction direction3 = p_230084_.get1x2RoomDirection(woodlandmansionpieces$simplegrid3, l1, k1, l2, k2);
|
|
boolean flag2 = (i2 & 4194304) == 4194304;
|
|
this.addRoom1x2(p_230083_, blockpos3, p_230082_, direction3, direction1, awoodlandmansionpieces$floorroomcollection[l2], flag2);
|
|
} else if (j2 == 262144 && direction1 != null && direction1 != Direction.UP) {
|
|
Direction direction2 = direction1.getClockWise();
|
|
if (!p_230084_.isRoomId(woodlandmansionpieces$simplegrid3, l1 + direction2.getStepX(), k1 + direction2.getStepZ(), l2, k2)) {
|
|
direction2 = direction2.getOpposite();
|
|
}
|
|
|
|
this.addRoom2x2(p_230083_, blockpos3, p_230082_, direction2, direction1, awoodlandmansionpieces$floorroomcollection[l2]);
|
|
} else if (j2 == 262144 && direction1 == Direction.UP) {
|
|
this.addRoom2x2Secret(p_230083_, blockpos3, p_230082_, awoodlandmansionpieces$floorroomcollection[l2]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void traverseOuterWalls(
|
|
List<WoodlandMansionPieces.WoodlandMansionPiece> p_230089_,
|
|
WoodlandMansionPieces.PlacementData p_230090_,
|
|
WoodlandMansionPieces.SimpleGrid p_230091_,
|
|
Direction p_230092_,
|
|
int p_230093_,
|
|
int p_230094_,
|
|
int p_230095_,
|
|
int p_230096_
|
|
) {
|
|
int i = p_230093_;
|
|
int j = p_230094_;
|
|
Direction direction = p_230092_;
|
|
|
|
do {
|
|
if (!WoodlandMansionPieces.MansionGrid.isHouse(p_230091_, i + p_230092_.getStepX(), j + p_230092_.getStepZ())) {
|
|
this.traverseTurn(p_230089_, p_230090_);
|
|
p_230092_ = p_230092_.getClockWise();
|
|
if (i != p_230095_ || j != p_230096_ || direction != p_230092_) {
|
|
this.traverseWallPiece(p_230089_, p_230090_);
|
|
}
|
|
} else if (WoodlandMansionPieces.MansionGrid.isHouse(p_230091_, i + p_230092_.getStepX(), j + p_230092_.getStepZ())
|
|
&& WoodlandMansionPieces.MansionGrid.isHouse(
|
|
p_230091_, i + p_230092_.getStepX() + p_230092_.getCounterClockWise().getStepX(), j + p_230092_.getStepZ() + p_230092_.getCounterClockWise().getStepZ()
|
|
)) {
|
|
this.traverseInnerTurn(p_230089_, p_230090_);
|
|
i += p_230092_.getStepX();
|
|
j += p_230092_.getStepZ();
|
|
p_230092_ = p_230092_.getCounterClockWise();
|
|
} else {
|
|
i += p_230092_.getStepX();
|
|
j += p_230092_.getStepZ();
|
|
if (i != p_230095_ || j != p_230096_ || direction != p_230092_) {
|
|
this.traverseWallPiece(p_230089_, p_230090_);
|
|
}
|
|
}
|
|
} while (i != p_230095_ || j != p_230096_ || direction != p_230092_);
|
|
}
|
|
|
|
private void createRoof(
|
|
List<WoodlandMansionPieces.WoodlandMansionPiece> p_230103_,
|
|
BlockPos p_230104_,
|
|
Rotation p_230105_,
|
|
WoodlandMansionPieces.SimpleGrid p_230106_,
|
|
@Nullable WoodlandMansionPieces.SimpleGrid p_230107_
|
|
) {
|
|
for (int i = 0; i < p_230106_.height; i++) {
|
|
for (int j = 0; j < p_230106_.width; j++) {
|
|
BlockPos $$27 = p_230104_.relative(p_230105_.rotate(Direction.SOUTH), 8 + (i - this.startY) * 8);
|
|
$$27 = $$27.relative(p_230105_.rotate(Direction.EAST), (j - this.startX) * 8);
|
|
boolean flag = p_230107_ != null && WoodlandMansionPieces.MansionGrid.isHouse(p_230107_, j, i);
|
|
if (WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, j, i) && !flag) {
|
|
p_230103_.add(new WoodlandMansionPieces.WoodlandMansionPiece(this.structureTemplateManager, "roof", $$27.above(3), p_230105_));
|
|
if (!WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, j + 1, i)) {
|
|
BlockPos blockpos1 = $$27.relative(p_230105_.rotate(Direction.EAST), 6);
|
|
p_230103_.add(new WoodlandMansionPieces.WoodlandMansionPiece(this.structureTemplateManager, "roof_front", blockpos1, p_230105_));
|
|
}
|
|
|
|
if (!WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, j - 1, i)) {
|
|
BlockPos blockpos5 = $$27.relative(p_230105_.rotate(Direction.EAST), 0);
|
|
blockpos5 = blockpos5.relative(p_230105_.rotate(Direction.SOUTH), 7);
|
|
p_230103_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, "roof_front", blockpos5, p_230105_.getRotated(Rotation.CLOCKWISE_180)
|
|
)
|
|
);
|
|
}
|
|
|
|
if (!WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, j, i - 1)) {
|
|
BlockPos blockpos6 = $$27.relative(p_230105_.rotate(Direction.WEST), 1);
|
|
p_230103_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, "roof_front", blockpos6, p_230105_.getRotated(Rotation.COUNTERCLOCKWISE_90)
|
|
)
|
|
);
|
|
}
|
|
|
|
if (!WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, j, i + 1)) {
|
|
BlockPos blockpos7 = $$27.relative(p_230105_.rotate(Direction.EAST), 6);
|
|
blockpos7 = blockpos7.relative(p_230105_.rotate(Direction.SOUTH), 6);
|
|
p_230103_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, "roof_front", blockpos7, p_230105_.getRotated(Rotation.CLOCKWISE_90)
|
|
)
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (p_230107_ != null) {
|
|
for (int k = 0; k < p_230106_.height; k++) {
|
|
for (int i1 = 0; i1 < p_230106_.width; i1++) {
|
|
BlockPos blockpos3 = p_230104_.relative(p_230105_.rotate(Direction.SOUTH), 8 + (k - this.startY) * 8);
|
|
blockpos3 = blockpos3.relative(p_230105_.rotate(Direction.EAST), (i1 - this.startX) * 8);
|
|
boolean flag1 = WoodlandMansionPieces.MansionGrid.isHouse(p_230107_, i1, k);
|
|
if (WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, i1, k) && flag1) {
|
|
if (!WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, i1 + 1, k)) {
|
|
BlockPos blockpos8 = blockpos3.relative(p_230105_.rotate(Direction.EAST), 7);
|
|
p_230103_.add(new WoodlandMansionPieces.WoodlandMansionPiece(this.structureTemplateManager, "small_wall", blockpos8, p_230105_));
|
|
}
|
|
|
|
if (!WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, i1 - 1, k)) {
|
|
BlockPos blockpos9 = blockpos3.relative(p_230105_.rotate(Direction.WEST), 1);
|
|
blockpos9 = blockpos9.relative(p_230105_.rotate(Direction.SOUTH), 6);
|
|
p_230103_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, "small_wall", blockpos9, p_230105_.getRotated(Rotation.CLOCKWISE_180)
|
|
)
|
|
);
|
|
}
|
|
|
|
if (!WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, i1, k - 1)) {
|
|
BlockPos blockpos10 = blockpos3.relative(p_230105_.rotate(Direction.WEST), 0);
|
|
blockpos10 = blockpos10.relative(p_230105_.rotate(Direction.NORTH), 1);
|
|
p_230103_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, "small_wall", blockpos10, p_230105_.getRotated(Rotation.COUNTERCLOCKWISE_90)
|
|
)
|
|
);
|
|
}
|
|
|
|
if (!WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, i1, k + 1)) {
|
|
BlockPos blockpos11 = blockpos3.relative(p_230105_.rotate(Direction.EAST), 6);
|
|
blockpos11 = blockpos11.relative(p_230105_.rotate(Direction.SOUTH), 7);
|
|
p_230103_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, "small_wall", blockpos11, p_230105_.getRotated(Rotation.CLOCKWISE_90)
|
|
)
|
|
);
|
|
}
|
|
|
|
if (!WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, i1 + 1, k)) {
|
|
if (!WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, i1, k - 1)) {
|
|
BlockPos blockpos12 = blockpos3.relative(p_230105_.rotate(Direction.EAST), 7);
|
|
blockpos12 = blockpos12.relative(p_230105_.rotate(Direction.NORTH), 2);
|
|
p_230103_.add(new WoodlandMansionPieces.WoodlandMansionPiece(this.structureTemplateManager, "small_wall_corner", blockpos12, p_230105_));
|
|
}
|
|
|
|
if (!WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, i1, k + 1)) {
|
|
BlockPos blockpos13 = blockpos3.relative(p_230105_.rotate(Direction.EAST), 8);
|
|
blockpos13 = blockpos13.relative(p_230105_.rotate(Direction.SOUTH), 7);
|
|
p_230103_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, "small_wall_corner", blockpos13, p_230105_.getRotated(Rotation.CLOCKWISE_90)
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
if (!WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, i1 - 1, k)) {
|
|
if (!WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, i1, k - 1)) {
|
|
BlockPos blockpos14 = blockpos3.relative(p_230105_.rotate(Direction.WEST), 2);
|
|
blockpos14 = blockpos14.relative(p_230105_.rotate(Direction.NORTH), 1);
|
|
p_230103_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, "small_wall_corner", blockpos14, p_230105_.getRotated(Rotation.COUNTERCLOCKWISE_90)
|
|
)
|
|
);
|
|
}
|
|
|
|
if (!WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, i1, k + 1)) {
|
|
BlockPos blockpos15 = blockpos3.relative(p_230105_.rotate(Direction.WEST), 1);
|
|
blockpos15 = blockpos15.relative(p_230105_.rotate(Direction.SOUTH), 8);
|
|
p_230103_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, "small_wall_corner", blockpos15, p_230105_.getRotated(Rotation.CLOCKWISE_180)
|
|
)
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
for (int l = 0; l < p_230106_.height; l++) {
|
|
for (int j1 = 0; j1 < p_230106_.width; j1++) {
|
|
BlockPos blockpos4 = p_230104_.relative(p_230105_.rotate(Direction.SOUTH), 8 + (l - this.startY) * 8);
|
|
blockpos4 = blockpos4.relative(p_230105_.rotate(Direction.EAST), (j1 - this.startX) * 8);
|
|
boolean flag2 = p_230107_ != null && WoodlandMansionPieces.MansionGrid.isHouse(p_230107_, j1, l);
|
|
if (WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, j1, l) && !flag2) {
|
|
if (!WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, j1 + 1, l)) {
|
|
BlockPos blockpos16 = blockpos4.relative(p_230105_.rotate(Direction.EAST), 6);
|
|
if (!WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, j1, l + 1)) {
|
|
BlockPos blockpos2 = blockpos16.relative(p_230105_.rotate(Direction.SOUTH), 6);
|
|
p_230103_.add(new WoodlandMansionPieces.WoodlandMansionPiece(this.structureTemplateManager, "roof_corner", blockpos2, p_230105_));
|
|
} else if (WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, j1 + 1, l + 1)) {
|
|
BlockPos blockpos18 = blockpos16.relative(p_230105_.rotate(Direction.SOUTH), 5);
|
|
p_230103_.add(new WoodlandMansionPieces.WoodlandMansionPiece(this.structureTemplateManager, "roof_inner_corner", blockpos18, p_230105_));
|
|
}
|
|
|
|
if (!WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, j1, l - 1)) {
|
|
p_230103_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, "roof_corner", blockpos16, p_230105_.getRotated(Rotation.COUNTERCLOCKWISE_90)
|
|
)
|
|
);
|
|
} else if (WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, j1 + 1, l - 1)) {
|
|
BlockPos blockpos19 = blockpos4.relative(p_230105_.rotate(Direction.EAST), 9);
|
|
blockpos19 = blockpos19.relative(p_230105_.rotate(Direction.NORTH), 2);
|
|
p_230103_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, "roof_inner_corner", blockpos19, p_230105_.getRotated(Rotation.CLOCKWISE_90)
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
if (!WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, j1 - 1, l)) {
|
|
BlockPos blockpos17 = blockpos4.relative(p_230105_.rotate(Direction.EAST), 0);
|
|
blockpos17 = blockpos17.relative(p_230105_.rotate(Direction.SOUTH), 0);
|
|
if (!WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, j1, l + 1)) {
|
|
BlockPos blockpos20 = blockpos17.relative(p_230105_.rotate(Direction.SOUTH), 6);
|
|
p_230103_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, "roof_corner", blockpos20, p_230105_.getRotated(Rotation.CLOCKWISE_90)
|
|
)
|
|
);
|
|
} else if (WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, j1 - 1, l + 1)) {
|
|
BlockPos blockpos21 = blockpos17.relative(p_230105_.rotate(Direction.SOUTH), 8);
|
|
blockpos21 = blockpos21.relative(p_230105_.rotate(Direction.WEST), 3);
|
|
p_230103_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, "roof_inner_corner", blockpos21, p_230105_.getRotated(Rotation.COUNTERCLOCKWISE_90)
|
|
)
|
|
);
|
|
}
|
|
|
|
if (!WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, j1, l - 1)) {
|
|
p_230103_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, "roof_corner", blockpos17, p_230105_.getRotated(Rotation.CLOCKWISE_180)
|
|
)
|
|
);
|
|
} else if (WoodlandMansionPieces.MansionGrid.isHouse(p_230106_, j1 - 1, l - 1)) {
|
|
BlockPos blockpos22 = blockpos17.relative(p_230105_.rotate(Direction.SOUTH), 1);
|
|
p_230103_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, "roof_inner_corner", blockpos22, p_230105_.getRotated(Rotation.CLOCKWISE_180)
|
|
)
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void entrance(List<WoodlandMansionPieces.WoodlandMansionPiece> p_230086_, WoodlandMansionPieces.PlacementData p_230087_) {
|
|
Direction direction = p_230087_.rotation.rotate(Direction.WEST);
|
|
p_230086_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(this.structureTemplateManager, "entrance", p_230087_.position.relative(direction, 9), p_230087_.rotation)
|
|
);
|
|
p_230087_.position = p_230087_.position.relative(p_230087_.rotation.rotate(Direction.SOUTH), 16);
|
|
}
|
|
|
|
private void traverseWallPiece(List<WoodlandMansionPieces.WoodlandMansionPiece> p_230130_, WoodlandMansionPieces.PlacementData p_230131_) {
|
|
p_230130_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, p_230131_.wallType, p_230131_.position.relative(p_230131_.rotation.rotate(Direction.EAST), 7), p_230131_.rotation
|
|
)
|
|
);
|
|
p_230131_.position = p_230131_.position.relative(p_230131_.rotation.rotate(Direction.SOUTH), 8);
|
|
}
|
|
|
|
private void traverseTurn(List<WoodlandMansionPieces.WoodlandMansionPiece> p_230133_, WoodlandMansionPieces.PlacementData p_230134_) {
|
|
p_230134_.position = p_230134_.position.relative(p_230134_.rotation.rotate(Direction.SOUTH), -1);
|
|
p_230133_.add(new WoodlandMansionPieces.WoodlandMansionPiece(this.structureTemplateManager, "wall_corner", p_230134_.position, p_230134_.rotation));
|
|
p_230134_.position = p_230134_.position.relative(p_230134_.rotation.rotate(Direction.SOUTH), -7);
|
|
p_230134_.position = p_230134_.position.relative(p_230134_.rotation.rotate(Direction.WEST), -6);
|
|
p_230134_.rotation = p_230134_.rotation.getRotated(Rotation.CLOCKWISE_90);
|
|
}
|
|
|
|
private void traverseInnerTurn(List<WoodlandMansionPieces.WoodlandMansionPiece> p_230136_, WoodlandMansionPieces.PlacementData p_230137_) {
|
|
p_230137_.position = p_230137_.position.relative(p_230137_.rotation.rotate(Direction.SOUTH), 6);
|
|
p_230137_.position = p_230137_.position.relative(p_230137_.rotation.rotate(Direction.EAST), 8);
|
|
p_230137_.rotation = p_230137_.rotation.getRotated(Rotation.COUNTERCLOCKWISE_90);
|
|
}
|
|
|
|
private void addRoom1x1(
|
|
List<WoodlandMansionPieces.WoodlandMansionPiece> p_230109_,
|
|
BlockPos p_230110_,
|
|
Rotation p_230111_,
|
|
Direction p_230112_,
|
|
WoodlandMansionPieces.FloorRoomCollection p_230113_
|
|
) {
|
|
Rotation rotation = Rotation.NONE;
|
|
String s = p_230113_.get1x1(this.random);
|
|
if (p_230112_ != Direction.EAST) {
|
|
if (p_230112_ == Direction.NORTH) {
|
|
rotation = rotation.getRotated(Rotation.COUNTERCLOCKWISE_90);
|
|
} else if (p_230112_ == Direction.WEST) {
|
|
rotation = rotation.getRotated(Rotation.CLOCKWISE_180);
|
|
} else if (p_230112_ == Direction.SOUTH) {
|
|
rotation = rotation.getRotated(Rotation.CLOCKWISE_90);
|
|
} else {
|
|
s = p_230113_.get1x1Secret(this.random);
|
|
}
|
|
}
|
|
|
|
BlockPos blockpos = StructureTemplate.getZeroPositionWithTransform(new BlockPos(1, 0, 0), Mirror.NONE, rotation, 7, 7);
|
|
rotation = rotation.getRotated(p_230111_);
|
|
blockpos = blockpos.rotate(p_230111_);
|
|
BlockPos blockpos1 = p_230110_.offset(blockpos.getX(), 0, blockpos.getZ());
|
|
p_230109_.add(new WoodlandMansionPieces.WoodlandMansionPiece(this.structureTemplateManager, s, blockpos1, rotation));
|
|
}
|
|
|
|
private void addRoom1x2(
|
|
List<WoodlandMansionPieces.WoodlandMansionPiece> p_230122_,
|
|
BlockPos p_230123_,
|
|
Rotation p_230124_,
|
|
Direction p_230125_,
|
|
Direction p_230126_,
|
|
WoodlandMansionPieces.FloorRoomCollection p_230127_,
|
|
boolean p_230128_
|
|
) {
|
|
if (p_230126_ == Direction.EAST && p_230125_ == Direction.SOUTH) {
|
|
BlockPos blockpos13 = p_230123_.relative(p_230124_.rotate(Direction.EAST), 1);
|
|
p_230122_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(this.structureTemplateManager, p_230127_.get1x2SideEntrance(this.random, p_230128_), blockpos13, p_230124_)
|
|
);
|
|
} else if (p_230126_ == Direction.EAST && p_230125_ == Direction.NORTH) {
|
|
BlockPos blockpos12 = p_230123_.relative(p_230124_.rotate(Direction.EAST), 1);
|
|
blockpos12 = blockpos12.relative(p_230124_.rotate(Direction.SOUTH), 6);
|
|
p_230122_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, p_230127_.get1x2SideEntrance(this.random, p_230128_), blockpos12, p_230124_, Mirror.LEFT_RIGHT
|
|
)
|
|
);
|
|
} else if (p_230126_ == Direction.WEST && p_230125_ == Direction.NORTH) {
|
|
BlockPos blockpos11 = p_230123_.relative(p_230124_.rotate(Direction.EAST), 7);
|
|
blockpos11 = blockpos11.relative(p_230124_.rotate(Direction.SOUTH), 6);
|
|
p_230122_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, p_230127_.get1x2SideEntrance(this.random, p_230128_), blockpos11, p_230124_.getRotated(Rotation.CLOCKWISE_180)
|
|
)
|
|
);
|
|
} else if (p_230126_ == Direction.WEST && p_230125_ == Direction.SOUTH) {
|
|
BlockPos blockpos10 = p_230123_.relative(p_230124_.rotate(Direction.EAST), 7);
|
|
p_230122_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, p_230127_.get1x2SideEntrance(this.random, p_230128_), blockpos10, p_230124_, Mirror.FRONT_BACK
|
|
)
|
|
);
|
|
} else if (p_230126_ == Direction.SOUTH && p_230125_ == Direction.EAST) {
|
|
BlockPos blockpos9 = p_230123_.relative(p_230124_.rotate(Direction.EAST), 1);
|
|
p_230122_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, p_230127_.get1x2SideEntrance(this.random, p_230128_), blockpos9, p_230124_.getRotated(Rotation.CLOCKWISE_90), Mirror.LEFT_RIGHT
|
|
)
|
|
);
|
|
} else if (p_230126_ == Direction.SOUTH && p_230125_ == Direction.WEST) {
|
|
BlockPos blockpos8 = p_230123_.relative(p_230124_.rotate(Direction.EAST), 7);
|
|
p_230122_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, p_230127_.get1x2SideEntrance(this.random, p_230128_), blockpos8, p_230124_.getRotated(Rotation.CLOCKWISE_90)
|
|
)
|
|
);
|
|
} else if (p_230126_ == Direction.NORTH && p_230125_ == Direction.WEST) {
|
|
BlockPos blockpos7 = p_230123_.relative(p_230124_.rotate(Direction.EAST), 7);
|
|
blockpos7 = blockpos7.relative(p_230124_.rotate(Direction.SOUTH), 6);
|
|
p_230122_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, p_230127_.get1x2SideEntrance(this.random, p_230128_), blockpos7, p_230124_.getRotated(Rotation.CLOCKWISE_90), Mirror.FRONT_BACK
|
|
)
|
|
);
|
|
} else if (p_230126_ == Direction.NORTH && p_230125_ == Direction.EAST) {
|
|
BlockPos blockpos6 = p_230123_.relative(p_230124_.rotate(Direction.EAST), 1);
|
|
blockpos6 = blockpos6.relative(p_230124_.rotate(Direction.SOUTH), 6);
|
|
p_230122_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, p_230127_.get1x2SideEntrance(this.random, p_230128_), blockpos6, p_230124_.getRotated(Rotation.COUNTERCLOCKWISE_90)
|
|
)
|
|
);
|
|
} else if (p_230126_ == Direction.SOUTH && p_230125_ == Direction.NORTH) {
|
|
BlockPos blockpos5 = p_230123_.relative(p_230124_.rotate(Direction.EAST), 1);
|
|
blockpos5 = blockpos5.relative(p_230124_.rotate(Direction.NORTH), 8);
|
|
p_230122_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(this.structureTemplateManager, p_230127_.get1x2FrontEntrance(this.random, p_230128_), blockpos5, p_230124_)
|
|
);
|
|
} else if (p_230126_ == Direction.NORTH && p_230125_ == Direction.SOUTH) {
|
|
BlockPos blockpos4 = p_230123_.relative(p_230124_.rotate(Direction.EAST), 7);
|
|
blockpos4 = blockpos4.relative(p_230124_.rotate(Direction.SOUTH), 14);
|
|
p_230122_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, p_230127_.get1x2FrontEntrance(this.random, p_230128_), blockpos4, p_230124_.getRotated(Rotation.CLOCKWISE_180)
|
|
)
|
|
);
|
|
} else if (p_230126_ == Direction.WEST && p_230125_ == Direction.EAST) {
|
|
BlockPos blockpos3 = p_230123_.relative(p_230124_.rotate(Direction.EAST), 15);
|
|
p_230122_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, p_230127_.get1x2FrontEntrance(this.random, p_230128_), blockpos3, p_230124_.getRotated(Rotation.CLOCKWISE_90)
|
|
)
|
|
);
|
|
} else if (p_230126_ == Direction.EAST && p_230125_ == Direction.WEST) {
|
|
BlockPos blockpos2 = p_230123_.relative(p_230124_.rotate(Direction.WEST), 7);
|
|
blockpos2 = blockpos2.relative(p_230124_.rotate(Direction.SOUTH), 6);
|
|
p_230122_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, p_230127_.get1x2FrontEntrance(this.random, p_230128_), blockpos2, p_230124_.getRotated(Rotation.COUNTERCLOCKWISE_90)
|
|
)
|
|
);
|
|
} else if (p_230126_ == Direction.UP && p_230125_ == Direction.EAST) {
|
|
BlockPos blockpos1 = p_230123_.relative(p_230124_.rotate(Direction.EAST), 15);
|
|
p_230122_.add(
|
|
new WoodlandMansionPieces.WoodlandMansionPiece(
|
|
this.structureTemplateManager, p_230127_.get1x2Secret(this.random), blockpos1, p_230124_.getRotated(Rotation.CLOCKWISE_90)
|
|
)
|
|
);
|
|
} else if (p_230126_ == Direction.UP && p_230125_ == Direction.SOUTH) {
|
|
BlockPos blockpos = p_230123_.relative(p_230124_.rotate(Direction.EAST), 1);
|
|
blockpos = blockpos.relative(p_230124_.rotate(Direction.NORTH), 0);
|
|
p_230122_.add(new WoodlandMansionPieces.WoodlandMansionPiece(this.structureTemplateManager, p_230127_.get1x2Secret(this.random), blockpos, p_230124_));
|
|
}
|
|
}
|
|
|
|
private void addRoom2x2(
|
|
List<WoodlandMansionPieces.WoodlandMansionPiece> p_230115_,
|
|
BlockPos p_230116_,
|
|
Rotation p_230117_,
|
|
Direction p_230118_,
|
|
Direction p_230119_,
|
|
WoodlandMansionPieces.FloorRoomCollection p_230120_
|
|
) {
|
|
int i = 0;
|
|
int j = 0;
|
|
Rotation rotation = p_230117_;
|
|
Mirror mirror = Mirror.NONE;
|
|
if (p_230119_ == Direction.EAST && p_230118_ == Direction.SOUTH) {
|
|
i = -7;
|
|
} else if (p_230119_ == Direction.EAST && p_230118_ == Direction.NORTH) {
|
|
i = -7;
|
|
j = 6;
|
|
mirror = Mirror.LEFT_RIGHT;
|
|
} else if (p_230119_ == Direction.NORTH && p_230118_ == Direction.EAST) {
|
|
i = 1;
|
|
j = 14;
|
|
rotation = p_230117_.getRotated(Rotation.COUNTERCLOCKWISE_90);
|
|
} else if (p_230119_ == Direction.NORTH && p_230118_ == Direction.WEST) {
|
|
i = 7;
|
|
j = 14;
|
|
rotation = p_230117_.getRotated(Rotation.COUNTERCLOCKWISE_90);
|
|
mirror = Mirror.LEFT_RIGHT;
|
|
} else if (p_230119_ == Direction.SOUTH && p_230118_ == Direction.WEST) {
|
|
i = 7;
|
|
j = -8;
|
|
rotation = p_230117_.getRotated(Rotation.CLOCKWISE_90);
|
|
} else if (p_230119_ == Direction.SOUTH && p_230118_ == Direction.EAST) {
|
|
i = 1;
|
|
j = -8;
|
|
rotation = p_230117_.getRotated(Rotation.CLOCKWISE_90);
|
|
mirror = Mirror.LEFT_RIGHT;
|
|
} else if (p_230119_ == Direction.WEST && p_230118_ == Direction.NORTH) {
|
|
i = 15;
|
|
j = 6;
|
|
rotation = p_230117_.getRotated(Rotation.CLOCKWISE_180);
|
|
} else if (p_230119_ == Direction.WEST && p_230118_ == Direction.SOUTH) {
|
|
i = 15;
|
|
mirror = Mirror.FRONT_BACK;
|
|
}
|
|
|
|
BlockPos blockpos = p_230116_.relative(p_230117_.rotate(Direction.EAST), i);
|
|
blockpos = blockpos.relative(p_230117_.rotate(Direction.SOUTH), j);
|
|
p_230115_.add(new WoodlandMansionPieces.WoodlandMansionPiece(this.structureTemplateManager, p_230120_.get2x2(this.random), blockpos, rotation, mirror));
|
|
}
|
|
|
|
private void addRoom2x2Secret(
|
|
List<WoodlandMansionPieces.WoodlandMansionPiece> p_230098_,
|
|
BlockPos p_230099_,
|
|
Rotation p_230100_,
|
|
WoodlandMansionPieces.FloorRoomCollection p_230101_
|
|
) {
|
|
BlockPos blockpos = p_230099_.relative(p_230100_.rotate(Direction.EAST), 1);
|
|
p_230098_.add(new WoodlandMansionPieces.WoodlandMansionPiece(this.structureTemplateManager, p_230101_.get2x2Secret(this.random), blockpos, p_230100_, Mirror.NONE));
|
|
}
|
|
}
|
|
|
|
static class PlacementData {
|
|
public Rotation rotation;
|
|
public BlockPos position;
|
|
public String wallType;
|
|
}
|
|
|
|
static class SecondFloorRoomCollection extends WoodlandMansionPieces.FloorRoomCollection {
|
|
@Override
|
|
public String get1x1(RandomSource p_230144_) {
|
|
return "1x1_b" + (p_230144_.nextInt(4) + 1);
|
|
}
|
|
|
|
@Override
|
|
public String get1x1Secret(RandomSource p_230149_) {
|
|
return "1x1_as" + (p_230149_.nextInt(4) + 1);
|
|
}
|
|
|
|
@Override
|
|
public String get1x2SideEntrance(RandomSource p_230146_, boolean p_230147_) {
|
|
return p_230147_ ? "1x2_c_stairs" : "1x2_c" + (p_230146_.nextInt(4) + 1);
|
|
}
|
|
|
|
@Override
|
|
public String get1x2FrontEntrance(RandomSource p_230151_, boolean p_230152_) {
|
|
return p_230152_ ? "1x2_d_stairs" : "1x2_d" + (p_230151_.nextInt(5) + 1);
|
|
}
|
|
|
|
@Override
|
|
public String get1x2Secret(RandomSource p_230154_) {
|
|
return "1x2_se" + (p_230154_.nextInt(1) + 1);
|
|
}
|
|
|
|
@Override
|
|
public String get2x2(RandomSource p_230156_) {
|
|
return "2x2_b" + (p_230156_.nextInt(5) + 1);
|
|
}
|
|
|
|
@Override
|
|
public String get2x2Secret(RandomSource p_230158_) {
|
|
return "2x2_s1";
|
|
}
|
|
}
|
|
|
|
static class SimpleGrid {
|
|
private final int[][] grid;
|
|
final int width;
|
|
final int height;
|
|
private final int valueIfOutside;
|
|
|
|
public SimpleGrid(int p_230164_, int p_230165_, int p_230166_) {
|
|
this.width = p_230164_;
|
|
this.height = p_230165_;
|
|
this.valueIfOutside = p_230166_;
|
|
this.grid = new int[p_230164_][p_230165_];
|
|
}
|
|
|
|
public void set(int p_230171_, int p_230172_, int p_230173_) {
|
|
if (p_230171_ >= 0 && p_230171_ < this.width && p_230172_ >= 0 && p_230172_ < this.height) {
|
|
this.grid[p_230171_][p_230172_] = p_230173_;
|
|
}
|
|
}
|
|
|
|
public void set(int p_230180_, int p_230181_, int p_230182_, int p_230183_, int p_230184_) {
|
|
for (int i = p_230181_; i <= p_230183_; i++) {
|
|
for (int j = p_230180_; j <= p_230182_; j++) {
|
|
this.set(j, i, p_230184_);
|
|
}
|
|
}
|
|
}
|
|
|
|
public int get(int p_230168_, int p_230169_) {
|
|
return p_230168_ >= 0 && p_230168_ < this.width && p_230169_ >= 0 && p_230169_ < this.height
|
|
? this.grid[p_230168_][p_230169_]
|
|
: this.valueIfOutside;
|
|
}
|
|
|
|
public void setif(int p_230175_, int p_230176_, int p_230177_, int p_230178_) {
|
|
if (this.get(p_230175_, p_230176_) == p_230177_) {
|
|
this.set(p_230175_, p_230176_, p_230178_);
|
|
}
|
|
}
|
|
|
|
public boolean edgesTo(int p_230186_, int p_230187_, int p_230188_) {
|
|
return this.get(p_230186_ - 1, p_230187_) == p_230188_
|
|
|| this.get(p_230186_ + 1, p_230187_) == p_230188_
|
|
|| this.get(p_230186_, p_230187_ + 1) == p_230188_
|
|
|| this.get(p_230186_, p_230187_ - 1) == p_230188_;
|
|
}
|
|
}
|
|
|
|
static class ThirdFloorRoomCollection extends WoodlandMansionPieces.SecondFloorRoomCollection {
|
|
}
|
|
|
|
public static class WoodlandMansionPiece extends TemplateStructurePiece {
|
|
public WoodlandMansionPiece(StructureTemplateManager p_230191_, String p_230192_, BlockPos p_230193_, Rotation p_230194_) {
|
|
this(p_230191_, p_230192_, p_230193_, p_230194_, Mirror.NONE);
|
|
}
|
|
|
|
public WoodlandMansionPiece(StructureTemplateManager p_230196_, String p_230197_, BlockPos p_230198_, Rotation p_230199_, Mirror p_230200_) {
|
|
super(StructurePieceType.WOODLAND_MANSION_PIECE, 0, p_230196_, makeLocation(p_230197_), p_230197_, makeSettings(p_230200_, p_230199_), p_230198_);
|
|
}
|
|
|
|
public WoodlandMansionPiece(StructureTemplateManager p_230202_, CompoundTag p_230203_) {
|
|
super(
|
|
StructurePieceType.WOODLAND_MANSION_PIECE,
|
|
p_230203_,
|
|
p_230202_,
|
|
p_391083_ -> makeSettings(p_230203_.read("Mi", Mirror.LEGACY_CODEC).orElseThrow(), p_230203_.read("Rot", Rotation.LEGACY_CODEC).orElseThrow())
|
|
);
|
|
}
|
|
|
|
@Override
|
|
protected ResourceLocation makeTemplateLocation() {
|
|
return makeLocation(this.templateName);
|
|
}
|
|
|
|
private static ResourceLocation makeLocation(String p_230211_) {
|
|
return ResourceLocation.withDefaultNamespace("woodland_mansion/" + p_230211_);
|
|
}
|
|
|
|
private static StructurePlaceSettings makeSettings(Mirror p_230205_, Rotation p_230206_) {
|
|
return new StructurePlaceSettings().setIgnoreEntities(true).setRotation(p_230206_).setMirror(p_230205_).addProcessor(BlockIgnoreProcessor.STRUCTURE_BLOCK);
|
|
}
|
|
|
|
@Override
|
|
protected void addAdditionalSaveData(StructurePieceSerializationContext p_230208_, CompoundTag p_230209_) {
|
|
super.addAdditionalSaveData(p_230208_, p_230209_);
|
|
p_230209_.store("Rot", Rotation.LEGACY_CODEC, this.placeSettings.getRotation());
|
|
p_230209_.store("Mi", Mirror.LEGACY_CODEC, this.placeSettings.getMirror());
|
|
}
|
|
|
|
@Override
|
|
protected void handleDataMarker(String p_230213_, BlockPos p_230214_, ServerLevelAccessor p_230215_, RandomSource p_230216_, BoundingBox p_230217_) {
|
|
if (p_230213_.startsWith("Chest")) {
|
|
Rotation rotation = this.placeSettings.getRotation();
|
|
BlockState blockstate = Blocks.CHEST.defaultBlockState();
|
|
if ("ChestWest".equals(p_230213_)) {
|
|
blockstate = blockstate.setValue(ChestBlock.FACING, rotation.rotate(Direction.WEST));
|
|
} else if ("ChestEast".equals(p_230213_)) {
|
|
blockstate = blockstate.setValue(ChestBlock.FACING, rotation.rotate(Direction.EAST));
|
|
} else if ("ChestSouth".equals(p_230213_)) {
|
|
blockstate = blockstate.setValue(ChestBlock.FACING, rotation.rotate(Direction.SOUTH));
|
|
} else if ("ChestNorth".equals(p_230213_)) {
|
|
blockstate = blockstate.setValue(ChestBlock.FACING, rotation.rotate(Direction.NORTH));
|
|
}
|
|
|
|
this.createChest(p_230215_, p_230217_, p_230216_, p_230214_, BuiltInLootTables.WOODLAND_MANSION, blockstate);
|
|
} else {
|
|
List<Mob> list = new ArrayList<>();
|
|
switch (p_230213_) {
|
|
case "Mage":
|
|
list.add(EntityType.EVOKER.create(p_230215_.getLevel(), EntitySpawnReason.STRUCTURE));
|
|
break;
|
|
case "Warrior":
|
|
list.add(EntityType.VINDICATOR.create(p_230215_.getLevel(), EntitySpawnReason.STRUCTURE));
|
|
break;
|
|
case "Group of Allays":
|
|
int i = p_230215_.getRandom().nextInt(3) + 1;
|
|
|
|
for (int j = 0; j < i; j++) {
|
|
list.add(EntityType.ALLAY.create(p_230215_.getLevel(), EntitySpawnReason.STRUCTURE));
|
|
}
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
|
|
for (Mob mob : list) {
|
|
if (mob != null) {
|
|
mob.setPersistenceRequired();
|
|
mob.snapTo(p_230214_, 0.0F, 0.0F);
|
|
mob.finalizeSpawn(p_230215_, p_230215_.getCurrentDifficultyAt(mob.blockPosition()), EntitySpawnReason.STRUCTURE, null);
|
|
p_230215_.addFreshEntityWithPassengers(mob);
|
|
p_230215_.setBlock(p_230214_, Blocks.AIR.defaultBlockState(), 2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |