From 09e9afd2952b44a922697bdfe795481b89334aba Mon Sep 17 00:00:00 2001 From: Shane Freeder Date: Mon, 19 May 2025 18:44:42 +0100 Subject: [PATCH] Avoid off-main mutations of state --- ...collision-checking-in-player-move-packet-ha.patch | 12 ++++++------ ...cord-movement-for-vehicles-players-unaffect.patch | 4 ++-- .../network/ServerGamePacketListenerImpl.java.patch | 9 ++++++++- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/paper-server/patches/features/0029-Optimise-collision-checking-in-player-move-packet-ha.patch b/paper-server/patches/features/0029-Optimise-collision-checking-in-player-move-packet-ha.patch index 5f51081292..67dfe4cc2a 100644 --- a/paper-server/patches/features/0029-Optimise-collision-checking-in-player-move-packet-ha.patch +++ b/paper-server/patches/features/0029-Optimise-collision-checking-in-player-move-packet-ha.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Optimise collision checking in player move packet handling Move collision logic to just the hasNewCollision call instead of getCubes + hasNewCollision diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 12c83cb084563a4e3f7f357d8b600941544ef2b0..90e582ca30851857add5e2d830e9876667fd1807 100644 +index 73ca5aff2365df4f31c960989778b245a7f7bcd3..a0fea6f87000e17d1affc377d2b7e617ce345db6 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -563,7 +563,7 @@ public class ServerGamePacketListenerImpl @@ -88,7 +88,7 @@ index 12c83cb084563a4e3f7f357d8b600941544ef2b0..90e582ca30851857add5e2d830e98766 } @Override -@@ -1371,7 +1403,7 @@ public class ServerGamePacketListenerImpl +@@ -1372,7 +1404,7 @@ public class ServerGamePacketListenerImpl } } @@ -97,7 +97,7 @@ index 12c83cb084563a4e3f7f357d8b600941544ef2b0..90e582ca30851857add5e2d830e98766 d3 = d - this.lastGoodX; // Paper - diff on change, used for checking large move vectors above d4 = d1 - this.lastGoodY; // Paper - diff on change, used for checking large move vectors above d5 = d2 - this.lastGoodZ; // Paper - diff on change, used for checking large move vectors above -@@ -1410,6 +1442,7 @@ public class ServerGamePacketListenerImpl +@@ -1411,6 +1443,7 @@ public class ServerGamePacketListenerImpl boolean flag1 = this.player.verticalCollisionBelow; this.player.move(MoverType.PLAYER, new Vec3(d3, d4, d5)); this.player.onGround = packet.isOnGround(); // CraftBukkit - SPIGOT-5810, SPIGOT-5835, SPIGOT-6828: reset by this.player.move @@ -105,7 +105,7 @@ index 12c83cb084563a4e3f7f357d8b600941544ef2b0..90e582ca30851857add5e2d830e98766 // Paper start - prevent position desync if (this.awaitingPositionFromClient != null) { return; // ... thanks Mojang for letting move calls teleport across dimensions. -@@ -1442,7 +1475,17 @@ public class ServerGamePacketListenerImpl +@@ -1443,7 +1476,17 @@ public class ServerGamePacketListenerImpl } // Paper start - Add fail move event @@ -124,7 +124,7 @@ index 12c83cb084563a4e3f7f357d8b600941544ef2b0..90e582ca30851857add5e2d830e98766 if (teleportBack) { io.papermc.paper.event.player.PlayerFailMoveEvent event = fireFailMove(io.papermc.paper.event.player.PlayerFailMoveEvent.FailReason.CLIPPED_INTO_BLOCK, toX, toY, toZ, toYaw, toPitch, false); -@@ -1578,7 +1621,7 @@ public class ServerGamePacketListenerImpl +@@ -1579,7 +1622,7 @@ public class ServerGamePacketListenerImpl private boolean updateAwaitingTeleport() { if (this.awaitingPositionFromClient != null) { @@ -133,7 +133,7 @@ index 12c83cb084563a4e3f7f357d8b600941544ef2b0..90e582ca30851857add5e2d830e98766 this.awaitingTeleportTime = this.tickCount; this.teleport( this.awaitingPositionFromClient.x, -@@ -1597,6 +1640,33 @@ public class ServerGamePacketListenerImpl +@@ -1598,6 +1641,33 @@ public class ServerGamePacketListenerImpl } } diff --git a/paper-server/patches/features/0031-Do-not-record-movement-for-vehicles-players-unaffect.patch b/paper-server/patches/features/0031-Do-not-record-movement-for-vehicles-players-unaffect.patch index 72a1e59c25..5d157fe93c 100644 --- a/paper-server/patches/features/0031-Do-not-record-movement-for-vehicles-players-unaffect.patch +++ b/paper-server/patches/features/0031-Do-not-record-movement-for-vehicles-players-unaffect.patch @@ -11,7 +11,7 @@ a portal in spectator mode and then later switching to creative mode would portal the player. diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 90e582ca30851857add5e2d830e9876667fd1807..c569cdfa4cba4f65892ffd4045c611837049f440 100644 +index a0fea6f87000e17d1affc377d2b7e617ce345db6..a2c70d36f79b7f8560923e098e52fa7f82ca7416 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -659,7 +659,7 @@ public class ServerGamePacketListenerImpl @@ -23,7 +23,7 @@ index 90e582ca30851857add5e2d830e9876667fd1807..c569cdfa4cba4f65892ffd4045c61183 Vec3 vec3 = new Vec3(rootVehicle.getX() - x, rootVehicle.getY() - y, rootVehicle.getZ() - z); this.handlePlayerKnownMovement(vec3); rootVehicle.setOnGroundWithMovement(packet.onGround(), vec3); -@@ -1577,7 +1577,7 @@ public class ServerGamePacketListenerImpl +@@ -1578,7 +1578,7 @@ public class ServerGamePacketListenerImpl Vec3 vec3 = new Vec3(this.player.getX() - x, this.player.getY() - y, this.player.getZ() - z); this.player.setOnGroundWithMovement(packet.isOnGround(), packet.horizontalCollision(), vec3); this.player.doCheckFallDamage(vec3.x, vec3.y, vec3.z, packet.isOnGround()); diff --git a/paper-server/patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch b/paper-server/patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch index 6ce6f262a0..f50ef390af 100644 --- a/paper-server/patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch +++ b/paper-server/patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch @@ -396,7 +396,14 @@ this.player.setClientLoaded(true); } -@@ -521,6 +_,7 @@ +@@ -515,12 +_,14 @@ + + @Override + public void handleBundleItemSelectedPacket(ServerboundSelectBundleItemPacket packet) { ++ PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); // Paper + this.player.containerMenu.setSelectedBundleItemIndex(packet.slotId(), packet.selectedItemIndex()); + } + @Override public void handleRecipeBookChangeSettingsPacket(ServerboundRecipeBookChangeSettingsPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel());