From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Samsuik Date: Wed, 22 May 2024 23:40:02 +0100 Subject: [PATCH] Protect block shapes against plugins diff --git a/src/main/java/net/minecraft/world/level/block/CarpetBlock.java b/src/main/java/net/minecraft/world/level/block/CarpetBlock.java index 0cc3df1f8a7784af812a1519e0a508b67314ce9a..9a267f4cfe10d4145d6a2966b7a2bfb6fe4688c6 100644 --- a/src/main/java/net/minecraft/world/level/block/CarpetBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CarpetBlock.java @@ -14,6 +14,7 @@ import net.minecraft.world.phys.shapes.VoxelShape; public class CarpetBlock extends Block { public static final MapCodec CODEC = simpleCodec(CarpetBlock::new); protected static final VoxelShape SHAPE = Block.box(0.0, 0.0, 0.0, 16.0, 1.0, 16.0); + private static final VoxelShape SHAPE_COPY = SHAPE.copy(); // Sakura - protect block shapes @Override public MapCodec codec() { @@ -26,7 +27,7 @@ public class CarpetBlock extends Block { @Override protected VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { - return SHAPE; + return SHAPE_COPY; // Sakura - protect block shapes } @Override diff --git a/src/main/java/net/minecraft/world/level/block/LadderBlock.java b/src/main/java/net/minecraft/world/level/block/LadderBlock.java index 54781ea0771327f93a7cf672bb4b2945700c47e5..e26a86fb8595705bcbb747872c3d8f73a519b42c 100644 --- a/src/main/java/net/minecraft/world/level/block/LadderBlock.java +++ b/src/main/java/net/minecraft/world/level/block/LadderBlock.java @@ -28,6 +28,12 @@ public class LadderBlock extends Block implements SimpleWaterloggedBlock { protected static final VoxelShape WEST_AABB = Block.box(13.0, 0.0, 0.0, 16.0, 16.0, 16.0); protected static final VoxelShape SOUTH_AABB = Block.box(0.0, 0.0, 0.0, 16.0, 16.0, 3.0); protected static final VoxelShape NORTH_AABB = Block.box(0.0, 0.0, 13.0, 16.0, 16.0, 16.0); + // Sakura start - protect block shapes + private static final VoxelShape EAST_AABB_COPY = EAST_AABB.copy(); + private static final VoxelShape WEST_AABB_COPY = WEST_AABB.copy(); + private static final VoxelShape SOUTH_AABB_COPY = SOUTH_AABB.copy(); + private static final VoxelShape NORTH_AABB_COPY = NORTH_AABB.copy(); + // Sakura end - protect block shapes // Sakura start - physics version api protected static final VoxelShape LEGACY_EAST_AABB = Block.box(0.0, 0.0, 0.0, 2.0, 16.0, 16.0); protected static final VoxelShape LEGACY_WEST_AABB = Block.box(14.0, 0.0, 0.0, 16.0, 16.0, 16.0); @@ -68,14 +74,16 @@ public class LadderBlock extends Block implements SimpleWaterloggedBlock { // Sakura end - physics version api switch ((Direction)state.getValue(FACING)) { case NORTH: - return NORTH_AABB; + // Sakura start - protect block shapes + return NORTH_AABB_COPY; case SOUTH: - return SOUTH_AABB; + return SOUTH_AABB_COPY; case WEST: - return WEST_AABB; + return WEST_AABB_COPY; case EAST: default: - return EAST_AABB; + return EAST_AABB_COPY; + // Sakura end - protect block shapes } } diff --git a/src/main/java/net/minecraft/world/phys/shapes/VoxelShape.java b/src/main/java/net/minecraft/world/phys/shapes/VoxelShape.java index 24c1caa060e7c41eac81c19f873ac9273c6b84c2..6de2496807c1701510d3637d6817f6e9438a2362 100644 --- a/src/main/java/net/minecraft/world/phys/shapes/VoxelShape.java +++ b/src/main/java/net/minecraft/world/phys/shapes/VoxelShape.java @@ -481,6 +481,12 @@ public abstract class VoxelShape { return new OffsetDoubleList(src, by); } // Paper end - optimise collisions + // Sakura start - protect block shapes + public final VoxelShape copy() { + this.cachedToAABBs = null; + return this.move(0.0, 0.0, 0.0); + } + // Sakura end - protect block shapes public VoxelShape move(double x, double y, double z) { // Paper start - optimise collisions