mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-30 16:19:03 +01:00
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.
This commit is contained in:
parent
e0486ae2cd
commit
c032050ad8
1 changed files with 40 additions and 0 deletions
|
@ -0,0 +1,40 @@
|
||||||
|
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();
|
||||||
|
|
Loading…
Reference in a new issue