diff options
Diffstat (limited to 'patches/server/1027-Fix-PlayerCommandPreprocessEvent-on-signed-commands.patch')
-rw-r--r-- | patches/server/1027-Fix-PlayerCommandPreprocessEvent-on-signed-commands.patch | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/patches/server/1027-Fix-PlayerCommandPreprocessEvent-on-signed-commands.patch b/patches/server/1027-Fix-PlayerCommandPreprocessEvent-on-signed-commands.patch new file mode 100644 index 0000000000..88334f2709 --- /dev/null +++ b/patches/server/1027-Fix-PlayerCommandPreprocessEvent-on-signed-commands.patch @@ -0,0 +1,52 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Nassim Jahnke <[email protected]> +Date: Sat, 21 Sep 2024 22:01:52 +0200 +Subject: [PATCH] Fix PlayerCommandPreprocessEvent on signed commands + + +diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +index b57f9e048581f67ab031731553e82829d7eb7c1d..bcf6c5ec1cb4be806d49f30f3404498018760f91 100644 +--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java ++++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +@@ -2195,24 +2195,32 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl + + PlayerCommandPreprocessEvent event = new PlayerCommandPreprocessEvent(this.getCraftPlayer(), command, new LazyPlayerSet(this.server)); + this.cserver.getPluginManager().callEvent(event); +- +- if (event.isCancelled()) { +- return; +- } + command = event.getMessage().substring(1); + +- ParseResults<CommandSourceStack> parseresults = this.parseCommand(command); +- // CraftBukkit end +- +- Map map; ++ // Paper start - Fix cancellation and message changing ++ ParseResults<CommandSourceStack> parseresults = this.parseCommand(packet.command()); + ++ Map<String, PlayerChatMessage> map; + try { +- map = (packet.command().equals(command)) ? this.collectSignedArguments(packet, SignableCommand.of(parseresults), lastSeenMessages) : Collections.emptyMap(); // CraftBukkit ++ // Always parse the original command to add to the chat chain ++ map = this.collectSignedArguments(packet, SignableCommand.of(parseresults), lastSeenMessages); + } catch (SignedMessageChain.DecodeException signedmessagechain_a) { + this.handleMessageDecodeFailure(signedmessagechain_a); + return; + } + ++ if (event.isCancelled()) { ++ // Only now are we actually good to return ++ return; ++ } ++ ++ // Remove signed parts if the command was changed ++ if (!command.equals(packet.command())) { ++ parseresults = this.parseCommand(command); ++ map = Collections.emptyMap(); ++ } ++ // Paper end - Fix cancellation and message changing ++ + CommandSigningContext.SignedArguments commandsigningcontext_a = new CommandSigningContext.SignedArguments(map); + + parseresults = Commands.<CommandSourceStack>mapSource(parseresults, (commandlistenerwrapper) -> { // CraftBukkit - decompile error |