From c032050ad824d8aa60219e8a9a84262c20f200d7 Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Tue, 2 Aug 2022 19:19:16 +0200 Subject: [PATCH] Fix command preprocess cancelling and command changing When a command with signed arguments is cancelled, message headers need to be sent out. Same thing for when the executed command is changed. --- ...rocess-cancelling-and-command-changi.patch | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 patches/server/0929-Fix-command-preprocess-cancelling-and-command-changi.patch diff --git a/patches/server/0929-Fix-command-preprocess-cancelling-and-command-changi.patch b/patches/server/0929-Fix-command-preprocess-cancelling-and-command-changi.patch new file mode 100644 index 000000000..47180bae6 --- /dev/null +++ b/patches/server/0929-Fix-command-preprocess-cancelling-and-command-changi.patch @@ -0,0 +1,40 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Nassim Jahnke +Date: Tue, 2 Aug 2022 19:16:23 +0200 +Subject: [PATCH] Fix command preprocess cancelling and command changing + + +diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +index a68b737cdd1e9f1054e0fc3bfee92c20a062fab5..c39e6a96a120cd9c5f7734ead5dac2091fed7fc8 100644 +--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java ++++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +@@ -2261,13 +2261,24 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic + 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); +- Map map = (packet.command().equals(command)) ? this.collectSignedArguments(packet, PreviewableCommand.of(parseresults)) : Collections.emptyMap(); ++ // Paper start - send message headers for cancelled or changed commands ++ ParseResults parseresults = this.parseCommand(packet.command()); ++ Map map = this.collectSignedArguments(packet, PreviewableCommand.of(parseresults)); ++ if (event.isCancelled() || !packet.command().equals(command)) { ++ for (final PlayerChatMessage message : map.values()) { ++ player.server.getPlayerList().broadcastMessageHeader(message, Set.of()); ++ } ++ if (event.isCancelled()) { ++ return; ++ } ++ ++ // Remove signatures if the command was changed and use the changed command source stack ++ map.clear(); ++ parseresults = this.parseCommand(command); ++ } ++ // Paper end + // CraftBukkit end + Iterator iterator = map.values().iterator(); +