From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Fortern Date: Thu, 24 Oct 2024 23:10:34 +0800 Subject: [PATCH] Fix Incorrect Collision Behavior for Block Shape diff --git a/src/main/java/ca/spottedleaf/moonrise/patches/collisions/CollisionUtil.java b/src/main/java/ca/spottedleaf/moonrise/patches/collisions/CollisionUtil.java index fb251665cdbafab90c6ff5e1bcb34fc17124d4d9..1d67244809da1b178448478e4b92727660af4a64 100644 --- a/src/main/java/ca/spottedleaf/moonrise/patches/collisions/CollisionUtil.java +++ b/src/main/java/ca/spottedleaf/moonrise/patches/collisions/CollisionUtil.java @@ -101,6 +101,14 @@ public final class CollisionUtil { (box1.minZ - box2.maxZ) < -COLLISION_EPSILON && (box1.maxZ - box2.minZ) > COLLISION_EPSILON; } + // Leaves start + public static boolean voxelShapeIntersectVanilla(final net.minecraft.world.phys.AABB box1, final net.minecraft.world.phys.AABB box2) { + return box1.minX < box2.maxX && box1.maxX > box2.minX && + box1.minY < box2.maxY && box1.maxY > box2.minY && + box1.minZ < box2.maxZ && box1.maxZ > box2.minZ; + } + // Leaves end + // assume !isEmpty(target) && abs(source_move) >= COLLISION_EPSILON public static double collideX(final AABB target, final AABB source, final double source_move) { if ((source.minY - target.maxY) < -COLLISION_EPSILON && (source.maxY - target.minY) > COLLISION_EPSILON && @@ -2042,7 +2050,10 @@ public final class CollisionUtil { AABB singleAABB = ((CollisionVoxelShape)blockCollision).moonrise$getSingleAABBRepresentation(); if (singleAABB != null) { singleAABB = singleAABB.move((double)blockX, (double)blockY, (double)blockZ); - if (!voxelShapeIntersect(aabb, singleAABB)) { + // Leaves start - Fix incorrect collision behavior for block shape + boolean isBlockShape = blockCollision == net.minecraft.world.phys.shapes.Shapes.block(); + if (isBlockShape && !voxelShapeIntersectVanilla(aabb, singleAABB) || !isBlockShape && !voxelShapeIntersect(aabb, singleAABB)) { + // Leaves end - Fix incorrect collision behavior for block shape continue; }