9
0
mirror of https://github.com/Samsuik/Sakura.git synced 2025-12-24 01:09:16 +00:00
Files
SakuraMC/patches/server/0048-Fix-paper-world-border-collision.patch

67 lines
3.9 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Samsuik <40902469+Samsuik@users.noreply.github.com>
Date: Wed, 29 Nov 2023 23:36:21 +0000
Subject: [PATCH] Fix paper world border collision
diff --git a/src/main/java/io/papermc/paper/util/CollisionUtil.java b/src/main/java/io/papermc/paper/util/CollisionUtil.java
index 310ad76abcb263fbb067270f522007457c62c81b..1edae701aa293ae61039119421ced42828b9a470 100644
--- a/src/main/java/io/papermc/paper/util/CollisionUtil.java
+++ b/src/main/java/io/papermc/paper/util/CollisionUtil.java
@@ -1555,27 +1555,19 @@ public final class CollisionUtil {
public static boolean isAlmostCollidingOnBorder(final WorldBorder worldborder, final double boxMinX, final double boxMaxX,
final double boxMinZ, final double boxMaxZ) {
- final double borderMinX = worldborder.getMinX(); // -X
- final double borderMaxX = worldborder.getMaxX(); // +X
+ // Sakura start - this method always returned true
+ final double borderMinX = worldborder.getMinX() + COLLISION_EPSILON; // -X
+ final double borderMaxX = worldborder.getMaxX() - COLLISION_EPSILON; // +X
- final double borderMinZ = worldborder.getMinZ(); // -Z
- final double borderMaxZ = worldborder.getMaxZ(); // +Z
+ final double borderMinZ = worldborder.getMinZ() + COLLISION_EPSILON; // -Z
+ final double borderMaxZ = worldborder.getMaxZ() - COLLISION_EPSILON; // +Z
return
- // Not intersecting if we're smaller
- !voxelShapeIntersect(
- boxMinX + COLLISION_EPSILON, Double.NEGATIVE_INFINITY, boxMinZ + COLLISION_EPSILON,
- boxMaxX - COLLISION_EPSILON, Double.POSITIVE_INFINITY, boxMaxZ - COLLISION_EPSILON,
- borderMinX, Double.NEGATIVE_INFINITY, borderMinZ, borderMaxX, Double.POSITIVE_INFINITY, borderMaxZ
- )
- &&
-
- // Are intersecting if we're larger
- voxelShapeIntersect(
- boxMinX - COLLISION_EPSILON, Double.NEGATIVE_INFINITY, boxMinZ - COLLISION_EPSILON,
- boxMaxX + COLLISION_EPSILON, Double.POSITIVE_INFINITY, boxMaxZ + COLLISION_EPSILON,
- borderMinX, Double.NEGATIVE_INFINITY, borderMinZ, borderMaxX, Double.POSITIVE_INFINITY, borderMaxZ
- );
+ // within the border at present
+ !isCollidingWithBorderEdge(worldborder, boxMinX, boxMaxX, boxMinZ, boxMaxZ)
+ // outside the border if we are larger or the border is shrunk
+ && boxMinX < borderMinX || boxMaxX > borderMaxX || boxMinZ < borderMinZ || boxMaxZ > borderMaxZ;
+ // Sakura end
}
public static boolean isCollidingWithBorderEdge(final WorldBorder worldborder, final AABB boundingBox) {
@@ -1584,11 +1576,13 @@ public final class CollisionUtil {
public static boolean isCollidingWithBorderEdge(final WorldBorder worldborder, final double boxMinX, final double boxMaxX,
final double boxMinZ, final double boxMaxZ) {
- final double borderMinX = worldborder.getMinX() + COLLISION_EPSILON; // -X
- final double borderMaxX = worldborder.getMaxX() - COLLISION_EPSILON; // +X
+ // Sakura start - compare against an enlarged border
+ final double borderMinX = worldborder.getMinX() - COLLISION_EPSILON; // -X
+ final double borderMaxX = worldborder.getMaxX() + COLLISION_EPSILON; // +X
- final double borderMinZ = worldborder.getMinZ() + COLLISION_EPSILON; // -Z
- final double borderMaxZ = worldborder.getMaxZ() - COLLISION_EPSILON; // +Z
+ final double borderMinZ = worldborder.getMinZ() - COLLISION_EPSILON; // -Z
+ final double borderMaxZ = worldborder.getMaxZ() + COLLISION_EPSILON; // +Z
+ // Sakura end
return boxMinX < borderMinX || boxMaxX > borderMaxX || boxMinZ < borderMinZ || boxMaxZ > borderMaxZ;
}