--- a/net/minecraft/network/protocol/PlayerConnectionUtils.java +++ b/net/minecraft/network/protocol/PlayerConnectionUtils.java @@ -7,6 +7,11 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +// CraftBukkit start +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.network.PlayerConnection; +// CraftBukkit end + public class PlayerConnectionUtils { private static final Logger LOGGER = LogManager.getLogger(); @@ -20,6 +25,7 @@ public static void ensureMainThread(Packet packet, T t0, IAsyncTaskHandler iasynctaskhandler) throws CancelledPacketHandleException { if (!iasynctaskhandler.isMainThread()) { iasynctaskhandler.execute(() -> { + if (MinecraftServer.getServer().hasStopped() || (t0 instanceof PlayerConnection && ((PlayerConnection) t0).processedDisconnect)) return; // CraftBukkit, MC-142590 if (t0.a().isConnected()) { packet.a(t0); } else { @@ -28,6 +34,10 @@ }); throw CancelledPacketHandleException.RUNNING_ON_DIFFERENT_THREAD; + // CraftBukkit start - SPIGOT-5477, MC-142590 + } else if (MinecraftServer.getServer().hasStopped() || (t0 instanceof PlayerConnection && ((PlayerConnection) t0).processedDisconnect)) { + throw CancelledPacketHandleException.RUNNING_ON_DIFFERENT_THREAD; + // CraftBukkit end } } }