made strucutres better

This commit is contained in:
Chipperfluff 2025-12-17 10:43:59 +01:00
parent bfd39cd54b
commit 068feb0d4d
2 changed files with 35 additions and 5 deletions

View File

@ -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);
}

View File

@ -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<StructureTemplate> 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);