diff --git a/src/main/java/net/Chipperfluff/chipi/world/gen/ChipiDungeonGenerator.java b/src/main/java/net/Chipperfluff/chipi/world/gen/ChipiDungeonGenerator.java index d1a03c6..3febbb7 100644 --- a/src/main/java/net/Chipperfluff/chipi/world/gen/ChipiDungeonGenerator.java +++ b/src/main/java/net/Chipperfluff/chipi/world/gen/ChipiDungeonGenerator.java @@ -1,5 +1,6 @@ package net.Chipperfluff.chipi.world.gen; +import net.Chipperfluff.chipi.world.gen.struct.CorridorEWStructure; import net.Chipperfluff.chipi.world.gen.struct.CorridorNSStructure; import net.Chipperfluff.chipi.world.gen.struct.RoomBaseStructure; import net.minecraft.block.BlockState; @@ -15,6 +16,8 @@ public class ChipiDungeonGenerator { // Structure extents from NBT sizes (centered) private static final int ROOM_EXTENT_SOUTH = 8; private static final int ROOM_EXTENT_NORTH = 8; + private static final int ROOM_EXTENT_EAST = 7; + private static final int ROOM_EXTENT_WEST = 9; // Fixed Y-levels private static final int ROOM_Y = 89; @@ -25,7 +28,7 @@ public class ChipiDungeonGenerator { // Center-to-center step so corridors start 1 block inside the north room and end 1 block inside the south room. private static final int STEP_Z = ROOM_EXTENT_SOUTH + CORRIDOR_LENGTH + ROOM_EXTENT_NORTH - 1; // 25 - private static final int STEP_X = STEP_Z; // symmetric spacing on X + private static final int STEP_X = ROOM_EXTENT_EAST + CORRIDOR_LENGTH + ROOM_EXTENT_WEST - 1; // 25 private static final int ROWS_SOUTH = 40; // rows of rooms south of spawn (spawn room itself is already placed) private static final int COLS_EW = 40; // columns across X (split roughly evenly around center) @@ -38,6 +41,10 @@ public class ChipiDungeonGenerator { return new CorridorNSStructure(); } + private static CorridorEWStructure getTunnelEW() { + return new CorridorEWStructure(); + } + private ChipiDungeonGenerator() {} public static void generateInitialLayout(ServerWorld world, BlockPos portalSpawnPos) { @@ -53,6 +60,7 @@ public class ChipiDungeonGenerator { RoomBaseStructure room = getRoom(); CorridorNSStructure corridorNS = getTunnelNS(); + CorridorEWStructure corridorEW = getTunnelEW(); // Place the first room (absolute coordinates). firstRoom.placeAt(world, firstGeneratedRoomCenter); @@ -95,6 +103,25 @@ public class ChipiDungeonGenerator { } } + // Connect east-west neighbors in each row. + for (int row = 0; row < ROWS_SOUTH; row++) { + for (int col = minCol; col < maxCol; col++) { + BlockPos currentCenter = new BlockPos( + firstGeneratedRoomCenter.getX() + (col * STEP_X), + ROOM_Y, + firstGeneratedRoomCenter.getZ() + (row * STEP_Z) + ); + + BlockPos anchorEast = new BlockPos( + currentCenter.getX() + ROOM_EXTENT_EAST, + CORRIDOR_Y, + currentCenter.getZ() + ); + + corridorEW.placeAt(world, anchorEast); + } + } + cleanUpEntrance(world); } diff --git a/src/main/java/net/Chipperfluff/chipi/world/gen/ChipiStructure.java b/src/main/java/net/Chipperfluff/chipi/world/gen/ChipiStructure.java index 6ee30d7..55726c5 100644 --- a/src/main/java/net/Chipperfluff/chipi/world/gen/ChipiStructure.java +++ b/src/main/java/net/Chipperfluff/chipi/world/gen/ChipiStructure.java @@ -40,7 +40,7 @@ public abstract class ChipiStructure { } /** Pure structure placement */ - public void placeAt(ServerWorld world, BlockPos origin) { + public void placeAt(ServerWorld world, BlockPos centerPos) { Optional opt = world.getStructureTemplateManager().getTemplate(id); @@ -49,6 +49,10 @@ public abstract class ChipiStructure { return; } + BlockPos origin = centerPos.add( + new BlockPos(deltaX, deltaY, deltaZ) + ); + StructureTemplate template = opt.get(); template.place( @@ -64,13 +68,12 @@ public abstract class ChipiStructure { /** Command placement (structure + optional marker) */ public void placeCommand(ServerWorld world, BlockPos placePos, boolean marker) { - + placeAt(world, placePos); + BlockPos origin = placePos.add( new BlockPos(deltaX, deltaY, deltaZ) ); - placeAt(world, origin); - if (!marker) return; world.setBlockState(origin, Blocks.STRUCTURE_BLOCK.getDefaultState(), 3);