From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Shane Freeder Date: Thu, 11 Apr 2024 16:37:44 +0100 Subject: [PATCH] Fix premature player kicks on shutdown When the server is stopping, the default execution handler method will throw a RejectedExecutionException in order to prevent further execution, this causes us to lose the actual kick reason. To mitigate this, we'll use a seperate marked class in order to gracefully ignore these. diff --git a/src/main/java/io/papermc/paper/util/ServerStopRejectedExecutionException.java b/src/main/java/io/papermc/paper/util/ServerStopRejectedExecutionException.java new file mode 100644 index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 --- /dev/null +++ b/src/main/java/io/papermc/paper/util/ServerStopRejectedExecutionException.java @@ -0,0 +0,0 @@ +package io.papermc.paper.util; + +import java.util.concurrent.RejectedExecutionException; + +public class ServerStopRejectedExecutionException extends RejectedExecutionException { + public ServerStopRejectedExecutionException() { + } + + public ServerStopRejectedExecutionException(final String message) { + super(message); + } + + public ServerStopRejectedExecutionException(final String message, final Throwable cause) { + super(message, cause); + } + + public ServerStopRejectedExecutionException(final Throwable cause) { + super(cause); + } +} diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java @@ -0,0 +0,0 @@ public class Connection extends SimpleChannelInboundHandler> { Connection.genericsFtw(packet, packetlistener); } catch (RunningOnDifferentThreadException cancelledpackethandleexception) { ; + } catch (io.papermc.paper.util.ServerStopRejectedExecutionException ignored) { // Paper - do not prematurely disconnect players on stop } catch (RejectedExecutionException rejectedexecutionexception) { this.disconnect((Component) Component.translatable("multiplayer.disconnect.server_shutdown")); } catch (ClassCastException classcastexception) { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -0,0 +0,0 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop