From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Nassim Jahnke 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 6a5fc3f92b5d56bedc20054b36f4513fc8bab303..fc64c09f466e6a0fb3eb6aa47f28f90748e81ce6 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -2196,24 +2196,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 parseresults = this.parseCommand(command); - // CraftBukkit end - - Map map; + // Paper start - Fix cancellation and message changing + ParseResults parseresults = this.parseCommand(packet.command()); + Map 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.mapSource(parseresults, (commandlistenerwrapper) -> { // CraftBukkit - decompile error