mirror of
https://github.com/Samsuik/Sakura.git
synced 2025-12-24 01:09:16 +00:00
67 lines
3.9 KiB
Diff
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;
|
|
}
|