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..2c5cd77103c5a33d4349ab6b9ee2d8378bb60eb4 --- /dev/null +++ b/src/main/java/io/papermc/paper/util/ServerStopRejectedExecutionException.java @@ -0,0 +1,20 @@ +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 fd2a5c829899d45641a5b5d30116f4f368953c15..f57679d88cd015caa8996d44b486da694df29521 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java @@ -277,6 +277,7 @@ 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.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 b2a46033d522f3122041cc2966105159c8869fdc..9ba2a71e5bedbf8e65f9dd1652639afd397439c7 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -2071,7 +2071,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop