diff --git a/paper-server/patches/sources/net/minecraft/server/network/ServerCommonPacketListenerImpl.java.patch b/paper-server/patches/sources/net/minecraft/server/network/ServerCommonPacketListenerImpl.java.patch index ffa5d9ae0..67c0eec0a 100644 --- a/paper-server/patches/sources/net/minecraft/server/network/ServerCommonPacketListenerImpl.java.patch +++ b/paper-server/patches/sources/net/minecraft/server/network/ServerCommonPacketListenerImpl.java.patch @@ -107,15 +107,27 @@ private void close() { if (!this.closed) { this.closedListenerTime = Util.getMillis(); -@@ -80,6 +129,7 @@ +@@ -80,13 +129,18 @@ @Override public void handleKeepAlive(ServerboundKeepAlivePacket packet) { -+ PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); // CraftBukkit ++ //PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); // CraftBukkit // Paper - handle ServerboundKeepAlivePacket async if (this.keepAlivePending && packet.getId() == this.keepAliveChallenge) { int i = (int) (Util.getMillis() - this.keepAliveTime); -@@ -94,9 +144,57 @@ + this.latency = (this.latency * 3 + i) / 4; + this.keepAlivePending = false; + } else if (!this.isSingleplayerOwner()) { +- this.disconnect(ServerCommonPacketListenerImpl.TIMEOUT_DISCONNECTION_MESSAGE); ++ // Paper start - This needs to be handled on the main thread for plugins ++ server.submit(() -> { ++ this.disconnect(ServerCommonPacketListenerImpl.TIMEOUT_DISCONNECTION_MESSAGE); ++ }); ++ // Paper end - This needs to be handled on the main thread for plugins + } + + } +@@ -94,9 +148,57 @@ @Override public void handlePong(ServerboundPongPacket packet) {} @@ -174,7 +186,7 @@ @Override public void handleResourcePackResponse(ServerboundResourcePackPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, (BlockableEventLoop) this.server); -@@ -104,11 +202,34 @@ +@@ -104,11 +206,34 @@ ServerCommonPacketListenerImpl.LOGGER.info("Disconnecting {} due to resource pack {} rejection", this.playerProfile().getName(), packet.id()); this.disconnect((Component) Component.translatable("multiplayer.requiredTexturePrompt.disconnect")); } @@ -209,7 +221,7 @@ this.disconnect(ServerCommonPacketListenerImpl.DISCONNECT_UNEXPECTED_QUERY); } -@@ -116,7 +237,7 @@ +@@ -116,7 +241,7 @@ Profiler.get().push("keepAlive"); long i = Util.getMillis(); @@ -218,7 +230,7 @@ if (this.keepAlivePending) { this.disconnect(ServerCommonPacketListenerImpl.TIMEOUT_DISCONNECTION_MESSAGE); } else if (this.checkIfClosed(i)) { -@@ -156,6 +277,14 @@ +@@ -156,6 +281,14 @@ } public void send(Packet packet, @Nullable PacketSendListener callbacks) { @@ -233,7 +245,7 @@ if (packet.isTerminal()) { this.close(); } -@@ -175,20 +304,72 @@ +@@ -175,20 +308,72 @@ } }