diff options
Diffstat (limited to 'patches/server/0159-handle-ServerboundKeepAlivePacket-async.patch')
-rw-r--r-- | patches/server/0159-handle-ServerboundKeepAlivePacket-async.patch | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/patches/server/0159-handle-ServerboundKeepAlivePacket-async.patch b/patches/server/0159-handle-ServerboundKeepAlivePacket-async.patch new file mode 100644 index 0000000000..bb33ae2596 --- /dev/null +++ b/patches/server/0159-handle-ServerboundKeepAlivePacket-async.patch @@ -0,0 +1,40 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Shane Freeder <[email protected]> +Date: Thu, 5 Oct 2017 01:54:07 +0100 +Subject: [PATCH] handle ServerboundKeepAlivePacket async + +In 1.12.2, Mojang moved the processing of ServerboundKeepAlivePacket off the main +thread, while entirely correct for the server, this causes issues with +plugins which are expecting the PlayerQuitEvent on the main thread. + +In order to counteract some bad behavior, we will post handling of the +disconnection to the main thread, but leave the actual processing of the packet +off the main thread. + +also adding some additional logging in order to help work out what is causing +random disconnections for clients. + +diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +index 32c4383cfb4cab6329d7046c48daf3050fa027c6..c4f1ded84ec1ed152faeb835a3f50b7e31356655 100644 +--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java ++++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +@@ -3242,14 +3242,18 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic + + @Override + public void handleKeepAlive(ServerboundKeepAlivePacket packet) { +- PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel()); // CraftBukkit ++ //PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel()); // CraftBukkit // Paper - This shouldn't be on the main thread + if (this.keepAlivePending && packet.getId() == this.keepAliveChallenge) { + int i = (int) (Util.getMillis() - this.keepAliveTime); + + this.player.latency = (this.player.latency * 3 + i) / 4; + this.keepAlivePending = false; + } else if (!this.isSingleplayerOwner()) { ++ // Paper start - This needs to be handled on the main thread for plugins ++ server.submit(() -> { + this.disconnect(Component.translatable("disconnect.timeout")); ++ }); ++ // Paper end + } + + } |