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)
This commit is contained in:
abel1502 2025-07-11 15:07:42 +03:00
parent 16fcac0a3c
commit 3c2d49419f
No known key found for this signature in database
GPG Key ID: 076926596A536338

View File

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