38 lines
2.6 KiB
Diff
38 lines
2.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: MrHua269 <wangxyper@163.com>
|
|
Date: Sat, 2 Nov 2024 21:48:13 +0800
|
|
Subject: [PATCH] Leaves 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 8e2a3d85b7fb78d4e7198c09f356acb51f5be1e0..7ce7da8f6a4e4ffd6e319fc340289ae6bcc0d5fe 100644
|
|
--- a/src/main/java/ca/spottedleaf/moonrise/patches/collisions/CollisionUtil.java
|
|
+++ b/src/main/java/ca/spottedleaf/moonrise/patches/collisions/CollisionUtil.java
|
|
@@ -56,6 +56,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 net.minecraft.world.phys.AABB target, final net.minecraft.world.phys.AABB source, final double source_move) {
|
|
if ((source.minY - target.maxY) < -COLLISION_EPSILON && (source.maxY - target.minY) > COLLISION_EPSILON &&
|
|
@@ -1700,7 +1708,10 @@ public final class CollisionUtil {
|
|
net.minecraft.world.phys.AABB singleAABB = ((ca.spottedleaf.moonrise.patches.collisions.shape.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;
|
|
}
|
|
|