c032050ad8
When a command with signed arguments is cancelled, message headers need to be sent out. Same thing for when the executed command is changed.
41 Zeilen
2.2 KiB
Diff
41 Zeilen
2.2 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Nassim Jahnke <nassim@njahnke.dev>
|
|
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<CommandSourceStack> parseresults = this.parseCommand(command);
|
|
- Map<String, PlayerChatMessage> map = (packet.command().equals(command)) ? this.collectSignedArguments(packet, PreviewableCommand.of(parseresults)) : Collections.emptyMap();
|
|
+ // Paper start - send message headers for cancelled or changed commands
|
|
+ ParseResults<CommandSourceStack> parseresults = this.parseCommand(packet.command());
|
|
+ Map<String, PlayerChatMessage> 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();
|
|
|