diff --git a/leaf-server/minecraft-patches/features/0300-Prevent-executing-commands-if-server-stopped.patch b/leaf-server/minecraft-patches/features/0300-Prevent-executing-commands-if-server-stopped.patch new file mode 100644 index 00000000..ca0ef264 --- /dev/null +++ b/leaf-server/minecraft-patches/features/0300-Prevent-executing-commands-if-server-stopped.patch @@ -0,0 +1,33 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> +Date: Mon, 29 Sep 2025 03:28:55 -0400 +Subject: [PATCH] Prevent executing commands if server stopped + +The server is executing player's commands when server stopped, but the player didn't disconnect. +Since the server is stopped, the commands execute on current thread instead of the main thread. + +It's a kind of weird race condition, not sure what causes it, +so just add a `isStopped` check, like the check under `handleChat` + +diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java +index 581791bf2892715543f003c36e301e690cc393f1..0d7a00a7865dd79a2aaec6b1060e763e5815f12a 100644 +--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java ++++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java +@@ -2369,7 +2369,7 @@ public class ServerGamePacketListenerImpl + final boolean isAfkCommandCooldown = this.performAfkCooldown(packet.command()); // Leaf - Improve Purpur AFK system + this.tryHandleChat(packet.command(), () -> { + // CraftBukkit start - SPIGOT-7346: Prevent disconnected players from executing commands +- if (this.player.hasDisconnected()) { ++ if (this.player.hasDisconnected() || this.server.isStopped()) { // Leaf - Prevent executing commands if server stopped + return; + } + // CraftBukkit end +@@ -2411,7 +2411,7 @@ public class ServerGamePacketListenerImpl + final boolean isAfkCommandCooldown = this.performAfkCooldown(packet.command()); // Leaf - Improve Purpur AFK system + this.tryHandleChat(packet.command(), () -> { + // CraftBukkit start - SPIGOT-7346: Prevent disconnected players from executing commands +- if (this.player.hasDisconnected()) { ++ if (this.player.hasDisconnected() || this.server.isStopped()) { // Leaf - Prevent executing commands if server stopped + return; + } + // CraftBukkit end