From 8c532ede8eba97742173c9301f9c2a546b965800 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Fri, 10 Oct 2025 10:03:01 +0800 Subject: [PATCH] fix: ignore the block when out of bounds --- .../java/com/dfsek/terra/allay/delegate/AllayChunk.java | 7 +++++++ .../com/dfsek/terra/allay/delegate/AllayFakeEntity.java | 2 +- .../com/dfsek/terra/allay/delegate/AllayProtoChunk.java | 7 +++++++ .../com/dfsek/terra/allay/delegate/AllayProtoWorld.java | 5 +++++ .../com/dfsek/terra/allay/delegate/AllayServerWorld.java | 5 +++++ 5 files changed, 25 insertions(+), 1 deletion(-) diff --git a/platforms/allay/src/main/java/com/dfsek/terra/allay/delegate/AllayChunk.java b/platforms/allay/src/main/java/com/dfsek/terra/allay/delegate/AllayChunk.java index 0ffc1766b..b206af951 100644 --- a/platforms/allay/src/main/java/com/dfsek/terra/allay/delegate/AllayChunk.java +++ b/platforms/allay/src/main/java/com/dfsek/terra/allay/delegate/AllayChunk.java @@ -21,6 +21,13 @@ public record AllayChunk(ServerWorld world, Chunk allayChunk) implements com.dfs @Override public void setBlock(int x, int y, int z, BlockState data, boolean physics) { + var dimensionInfo = allayChunk.getDimensionInfo(); + if (x < 0 || x > 15 || + z < 0 || z > 15 || + y < dimensionInfo.minHeight() || y > dimensionInfo.maxHeight()) { + return; + } + AllayBlockState allayBlockState = (AllayBlockState) data; allayChunk.setBlockState(x, y, z, allayBlockState.allayBlockState()); if(allayBlockState.containsWater() || allayChunk.getBlockState(x, y, z).getBlockType().hasBlockTag(BlockTags.WATER)) { diff --git a/platforms/allay/src/main/java/com/dfsek/terra/allay/delegate/AllayFakeEntity.java b/platforms/allay/src/main/java/com/dfsek/terra/allay/delegate/AllayFakeEntity.java index 7ac5cc113..cf228e5f4 100644 --- a/platforms/allay/src/main/java/com/dfsek/terra/allay/delegate/AllayFakeEntity.java +++ b/platforms/allay/src/main/java/com/dfsek/terra/allay/delegate/AllayFakeEntity.java @@ -7,7 +7,7 @@ import com.dfsek.terra.api.world.ServerWorld; /** - * NOTICE: Entity is not supported currently, and this is a fake implementation. + * TODO: Entity is not supported currently, and this is a fake implementation. * * @author daoge_cmd */ diff --git a/platforms/allay/src/main/java/com/dfsek/terra/allay/delegate/AllayProtoChunk.java b/platforms/allay/src/main/java/com/dfsek/terra/allay/delegate/AllayProtoChunk.java index 517957678..9bee9b223 100644 --- a/platforms/allay/src/main/java/com/dfsek/terra/allay/delegate/AllayProtoChunk.java +++ b/platforms/allay/src/main/java/com/dfsek/terra/allay/delegate/AllayProtoChunk.java @@ -26,6 +26,13 @@ public record AllayProtoChunk(UnsafeChunk allayChunk) implements ProtoChunk { @Override public void setBlock(int x, int y, int z, @NotNull BlockState blockState) { + var dimensionInfo = allayChunk.getDimensionInfo(); + if (x < 0 || x > 15 || + z < 0 || z > 15 || + y < dimensionInfo.minHeight() || y > dimensionInfo.maxHeight()) { + return; + } + AllayBlockState allayBlockState = (AllayBlockState) blockState; allayChunk.setBlockState(x, y, z, allayBlockState.allayBlockState()); if(allayBlockState.containsWater() || allayChunk.getBlockState(x, y, z).getBlockType().hasBlockTag(BlockTags.WATER)) { diff --git a/platforms/allay/src/main/java/com/dfsek/terra/allay/delegate/AllayProtoWorld.java b/platforms/allay/src/main/java/com/dfsek/terra/allay/delegate/AllayProtoWorld.java index 2e7af50d2..ea9907254 100644 --- a/platforms/allay/src/main/java/com/dfsek/terra/allay/delegate/AllayProtoWorld.java +++ b/platforms/allay/src/main/java/com/dfsek/terra/allay/delegate/AllayProtoWorld.java @@ -43,6 +43,11 @@ public record AllayProtoWorld(AllayServerWorld allayServerWorld, OtherChunkAcces @Override public void setBlockState(int x, int y, int z, BlockState data, boolean physics) { + var dimensionInfo = allayServerWorld.allayDimension().getDimensionInfo(); + if (y < dimensionInfo.minHeight() || y > dimensionInfo.maxHeight()) { + return; + } + AllayBlockState allayBlockState = (AllayBlockState) data; context.setBlockState(x, y, z, allayBlockState.allayBlockState()); if(allayBlockState.containsWater() || context.getBlockState(x, y, z).getBlockType().hasBlockTag(BlockTags.WATER)) { diff --git a/platforms/allay/src/main/java/com/dfsek/terra/allay/delegate/AllayServerWorld.java b/platforms/allay/src/main/java/com/dfsek/terra/allay/delegate/AllayServerWorld.java index c784d690d..fd493b328 100644 --- a/platforms/allay/src/main/java/com/dfsek/terra/allay/delegate/AllayServerWorld.java +++ b/platforms/allay/src/main/java/com/dfsek/terra/allay/delegate/AllayServerWorld.java @@ -27,6 +27,11 @@ public record AllayServerWorld(AllayGeneratorWrapper allayGeneratorWrapper, Dime @Override public void setBlockState(int x, int y, int z, BlockState data, boolean physics) { + var dimensionInfo = allayDimension.getDimensionInfo(); + if (y < dimensionInfo.minHeight() || y > dimensionInfo.maxHeight()) { + return; + } + // In dimension#setBlockState() method, Water will be moved to layer 1 if it is placed at layer 0 allayDimension.setBlockState(x, y, z, ((AllayBlockState) data).allayBlockState()); }