aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/1027-Fix-PlayerCommandPreprocessEvent-on-signed-commands.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/1027-Fix-PlayerCommandPreprocessEvent-on-signed-commands.patch')
-rw-r--r--patches/server/1027-Fix-PlayerCommandPreprocessEvent-on-signed-commands.patch52
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