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 f082e121331be8aee523751a2d3f3393e3b0d02c..ca7afdbfa936801e53e8bb0d154538bc0f042ad3 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -2259,13 +2259,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(); @@ -2569,6 +2580,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic } }); } else if (this.player.getChatVisibility() == ChatVisiblity.SYSTEM) { // Re-add "Command Only" flag check + this.server.getPlayerList().broadcastMessageHeader(message, Set.of()); // Paper this.send(new ClientboundSystemChatPacket(Component.translatable("chat.cannotSend").withStyle(ChatFormatting.RED), false)); } else { this.chat(s, message, true);