geforkt von Mirrors/Paper
70ce6ce831
This makes it easier for downstream projects (forks) to replace the version fetching system with their own. It is as simple as implementing an interface and overriding the default implementation of org.bukkit.UnsafeValues#getVersionFetcher() It also makes it easier for us to organize things like the version history feature. Lastly I have updated the paper implementation to check against the site API rather than against jenkins.
45 Zeilen
2.1 KiB
Diff
45 Zeilen
2.1 KiB
Diff
From 330817dca764349bb50c946483075807774e49e8 Mon Sep 17 00:00:00 2001
|
|
From: Shane Freeder <theboyetronic@gmail.com>
|
|
Date: Thu, 5 Oct 2017 01:54:07 +0100
|
|
Subject: [PATCH] handle PacketPlayInKeepAlive async
|
|
|
|
In 1.12.2, Mojang moved the processing of PacketPlayInKeepAlive 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/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
index 572da14f9..61793dd1d 100644
|
|
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
@@ -2503,14 +2503,18 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
|
|
|
@Override
|
|
public void a(PacketPlayInKeepAlive packetplayinkeepalive) {
|
|
- PlayerConnectionUtils.ensureMainThread(packetplayinkeepalive, this, this.player.getWorldServer()); // CraftBukkit
|
|
+ //PlayerConnectionUtils.ensureMainThread(packetplayinkeepalive, this, this.player.getWorldServer()); // CraftBukkit // Paper - This shouldn't be on the main thread
|
|
if (this.awaitingKeepAlive && packetplayinkeepalive.b() == this.h) {
|
|
int i = (int) (SystemUtils.getMonotonicMillis() - this.lastKeepAlive);
|
|
|
|
this.player.ping = (this.player.ping * 3 + i) / 4;
|
|
this.awaitingKeepAlive = false;
|
|
} else if (!this.isExemptPlayer()) {
|
|
- this.disconnect(new ChatMessage("disconnect.timeout", new Object[0]));
|
|
+ // Paper start - This needs to be handled on the main thread for plugins
|
|
+ minecraftServer.scheduleOnMain(() -> {
|
|
+ this.disconnect(new ChatMessage("disconnect.timeout"));
|
|
+ });
|
|
+ // Paper end
|
|
}
|
|
|
|
}
|
|
--
|
|
2.21.0
|
|
|