2023-09-17 00:54:33 +02:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Aikar <aikar@aikar.co>
|
|
|
|
Date: Thu, 3 Mar 2016 01:17:12 -0600
|
|
|
|
Subject: [PATCH] Improve Player chat API handling
|
|
|
|
|
|
|
|
Properly split up the chat and command handling to reflect the server now
|
|
|
|
having separate packets for both, and the client always using the correct packet. Text
|
|
|
|
from a chat packet should never be parsed into a command, even if it starts with the `/`
|
|
|
|
character.
|
|
|
|
|
|
|
|
Add a missing async catcher and improve Spigot's async catcher error message.
|
|
|
|
|
|
|
|
== AT ==
|
|
|
|
public net.minecraft.server.network.ServerGamePacketListenerImpl isChatMessageIllegal(Ljava/lang/String;)Z
|
|
|
|
|
|
|
|
Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
|
|
Co-authored-by: SoSeDiK <mrsosedik@gmail.com>
|
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
2023-09-23 01:58:19 +02:00
|
|
|
index ea53b30fb9b9e0b2b9751b7a2675259fe85c66e4..4376e09828655444d1339020a2676c67197abfb9 100644
|
2023-09-17 00:54:33 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
2023-09-22 22:13:57 +02:00
|
|
|
@@ -1925,7 +1925,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
|
2023-09-17 00:54:33 +02:00
|
|
|
}
|
|
|
|
OutgoingChatMessage outgoing = OutgoingChatMessage.create(original);
|
|
|
|
|
|
|
|
- if (!async && s.startsWith("/")) {
|
|
|
|
+ if (false && !async && s.startsWith("/")) { // Paper - Don't handle commands in chat logic
|
|
|
|
this.handleCommand(s);
|
|
|
|
} else if (this.player.getChatVisibility() == ChatVisiblity.SYSTEM) {
|
|
|
|
// Do nothing, this is coming from a plugin
|
2023-09-22 22:13:57 +02:00
|
|
|
@@ -2009,7 +2009,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
|
2023-09-17 00:54:33 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
- private void handleCommand(String s) {
|
|
|
|
+ public void handleCommand(String s) { // Paper - private -> public
|
|
|
|
+ org.spigotmc.AsyncCatcher.catchOp("Command Dispatched Async: " + s); // Paper - Add async catcher
|
|
|
|
co.aikar.timings.MinecraftTimings.playerCommandTimer.startTiming(); // Paper
|
|
|
|
if ( org.spigotmc.SpigotConfig.logCommands ) // Spigot
|
|
|
|
this.LOGGER.info(this.player.getScoreboardName() + " issued server command: " + s);
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
2023-09-23 04:06:03 +02:00
|
|
|
index 97801c6b11df3b80ad80d7e6fd03d769c400b417..0afb5b57fdd027b0a5aa05c4710b4ebb9c3d12ac 100644
|
2023-09-17 00:54:33 +02:00
|
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
2023-09-23 04:06:03 +02:00
|
|
|
@@ -888,7 +888,7 @@ public final class CraftServer implements Server {
|
2023-09-17 00:54:33 +02:00
|
|
|
public boolean dispatchCommand(CommandSender sender, String commandLine) {
|
|
|
|
Preconditions.checkArgument(sender != null, "sender cannot be null");
|
|
|
|
Preconditions.checkArgument(commandLine != null, "commandLine cannot be null");
|
|
|
|
- org.spigotmc.AsyncCatcher.catchOp("command dispatch"); // Spigot
|
|
|
|
+ org.spigotmc.AsyncCatcher.catchOp("Command Dispatched Async: " + commandLine); // Spigot // Paper - Include command in error message
|
|
|
|
|
|
|
|
if (this.commandMap.dispatch(sender, commandLine)) {
|
|
|
|
return true;
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
2023-09-23 04:06:03 +02:00
|
|
|
index ca8c713342c7e217c8bbcd2c92309ad188f7dd27..422ed20cf1d77c0b7fa0a674a5bba95cb7cbc2df 100644
|
2023-09-17 00:54:33 +02:00
|
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
2023-09-22 22:13:57 +02:00
|
|
|
@@ -494,7 +494,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
2023-09-17 00:54:33 +02:00
|
|
|
|
|
|
|
if (this.getHandle().connection == null) return;
|
|
|
|
|
|
|
|
- this.getHandle().connection.chat(msg, PlayerChatMessage.system(msg), false);
|
|
|
|
+ // Paper start - Improve chat handling
|
|
|
|
+ if (ServerGamePacketListenerImpl.isChatMessageIllegal(msg)) {
|
|
|
|
+ this.getHandle().connection.disconnect(Component.translatable("multiplayer.disconnect.illegal_characters"));
|
|
|
|
+ } else {
|
|
|
|
+ if (msg.startsWith("/")) {
|
|
|
|
+ this.getHandle().connection.handleCommand(msg);
|
|
|
|
+ } else {
|
|
|
|
+ final PlayerChatMessage playerChatMessage = PlayerChatMessage.system(msg).withResult(new net.minecraft.network.chat.ChatDecorator.ModernResult(Component.literal(msg), true, false));
|
|
|
|
+ // TODO chat decorating
|
|
|
|
+ // TODO text filtering
|
|
|
|
+ this.getHandle().connection.chat(msg, playerChatMessage, false);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // Paper end
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|