From 3c2d49419fe1392a3e1cd0522bb660ff2c02ec7d Mon Sep 17 00:00:00 2001 From: abel1502 Date: Fri, 11 Jul 2025 15:07:42 +0300 Subject: [PATCH] Use separate collision and visual boxes on doors Also improve the user experience with smaller doors, by making the visual hitbox cover the entire door even when open. (In repsonse to Mellow's critique) --- .../java/com/hbm/tileentity/DoorDecl.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/DoorDecl.java b/src/main/java/com/hbm/tileentity/DoorDecl.java index 9c9887c13..d04b030d3 100644 --- a/src/main/java/com/hbm/tileentity/DoorDecl.java +++ b/src/main/java/com/hbm/tileentity/DoorDecl.java @@ -166,7 +166,7 @@ public abstract class DoorDecl { } else if(y > 1) { return AxisAlignedBB.getBoundingBox(0, 0.75, 0, 1, 1, 1); } else if(y == 0) { - return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 0.1, 1); + return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.1, 1); } else { return super.getBlockBound(x, y, z, open, forCollision); } @@ -245,7 +245,7 @@ public abstract class DoorDecl { if(y == 3) { return AxisAlignedBB.getBoundingBox(0, 0.5, 0, 1, 1, 1); } else if(y == 0) { - return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 0.08, 1); + return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.08, 1); } } return super.getBlockBound(x, y, z, open, forCollision); @@ -328,9 +328,8 @@ public abstract class DoorDecl { @Override public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { - if(open) { - if(y == 0) return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.25, 1, 0, 1); - return AxisAlignedBB.getBoundingBox(0, 0.9375, 1 - 0.25, 1, 1, 1); + if(forCollision && open) { + return AxisAlignedBB.getBoundingBox(0, 0, 0, 0, 0, 0); } else { return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.25, 1, 1, 1); } @@ -437,7 +436,7 @@ public abstract class DoorDecl { return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 1, 1); } if(y == 1) { - return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 0.0625, 1); + return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.0625, 1); } else if(y == 4) { return AxisAlignedBB.getBoundingBox(0, 0.5, 0.15, 1, 1, 0.85); } else { @@ -514,7 +513,7 @@ public abstract class DoorDecl { } else if(y == 3) { return AxisAlignedBB.getBoundingBox(0, 0.5, 0, 1, 1, 1); } else if(y == 0) { - return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 0.0625, 1); + return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.0625, 1); } return super.getBlockBound(x, y, z, open, forCollision); }; @@ -596,7 +595,7 @@ public abstract class DoorDecl { @Override public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { - if(open) { + if(forCollision && open) { if(z == 0) { return AxisAlignedBB.getBoundingBox(1 - 0.125, 0, 1 - 0.1875, 1, 1, 1); } else { @@ -697,7 +696,7 @@ public abstract class DoorDecl { if(y > 1) return AxisAlignedBB.getBoundingBox(0, 0.5, 0.5, 1, 1, 1); else if(y == 0) - return AxisAlignedBB.getBoundingBox(0, 0, 0.5, 1, 0.1, 1); + return AxisAlignedBB.getBoundingBox(0, 0, 0.5, 1, forCollision ? 0 : 0.1, 1); return super.getBlockBound(x, y, z, open, forCollision); }; @@ -820,7 +819,7 @@ public abstract class DoorDecl { } else if(y > 1) { return AxisAlignedBB.getBoundingBox(0, 0.85, 0.75, 1, 1, 1); } else if(y == 0) { - return AxisAlignedBB.getBoundingBox(0, 0, 0.75, 1, 0.15, 1); + return AxisAlignedBB.getBoundingBox(0, 0, 0.75, 1, forCollision ? 0 : 0.15, 1); } return super.getBlockBound(x, y, z, open, forCollision); }; @@ -1025,6 +1024,8 @@ public abstract class DoorDecl { return AxisAlignedBB.getBoundingBox(0.4, 0, 0, 1, 1, 1); } else if(z == -3) { return AxisAlignedBB.getBoundingBox(0, 0, 0, 0.6, 1, 1); + } else if(y == 0) { + return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, forCollision ? 0 : 0.0625, 1); } return super.getBlockBound(x, y, z, open, forCollision); };