From b9e5686a9c938851a0a3b41e34f0558890d6623a Mon Sep 17 00:00:00 2001 From: Shane Freeder Date: Sun, 15 Oct 2017 00:29:07 +0100 Subject: [PATCH] Increase time allowed for a keepalive reply This patch intends to bump up the time that a client has to reply to the server back to 30 seconds as per pre 1.12.2, which allowed clients more than enough time to reply potentially allowing them to be less tempermental due to lag spikes on the network thread, e.g. that caused by plugins that are interacting with netty. diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java index a92bf8967..5a620f3fd 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java @@ -179,18 +179,25 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable { } this.minecraftServer.methodProfiler.a("keepAlive"); - long i = this.d(); - - if (i - this.f >= 25000L) { // CraftBukkit - if (this.g) { - this.disconnect(new ChatMessage("disconnect.timeout", new Object[0])); - } else { - this.g = true; - this.f = i; - this.h = i; - this.sendPacket(new PacketPlayOutKeepAlive(this.h)); + // Paper Start - give clients a longer time to respond to pings as per pre 1.12.2 timings + // This should effectively place the keepalive handling back to "as it was" before 1.12.2 + long currentTime = this.getCurrentMillis(); + long elapsedTime = currentTime - this.getLastPing(); + if (this.isPendingPing()) { + // We're pending a ping from the client + if (!this.processedDisconnect && elapsedTime >= 30000L) { // 30 seconds for a ping reply also, don't fire if already disconnected + PlayerConnection.LOGGER.warn("{} was kicked due to keepalive timeout!", this.player.getName()); // more info + this.disconnect(new ChatMessage("disconnect.timeout")); + } + } else { + if (elapsedTime >= 15000L) { // 15 seconds + this.setPendingPing(true); + this.setLastPing(currentTime); + this.setKeepAliveID(currentTime); + this.sendPacket(new PacketPlayOutKeepAlive(this.getKeepAliveID())); } } + // Paper end this.minecraftServer.methodProfiler.b(); // CraftBukkit start -- 2.15.1