2022-06-08 15:12:28 +02:00
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Nassim Jahnke <jahnke.nassim@gmail.com>
Date: Mon, 17 Jan 2022 19:47:19 +0100
2022-06-12 03:11:18 +02:00
Subject: [PATCH] Kick on main for illegal chat
2022-06-08 15:12:28 +02:00
2022-06-12 03:11:18 +02:00
Makes the PlayerKickEvent fire on the main thread for
illegal characters or chat out-of-order errors.
2022-06-08 15:12:28 +02:00
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
2022-07-29 18:31:02 +02:00
index abd9ee4c2cddf0fd1e31bffbb60db025491e8315..067b18932a39a97cd13b59d43350c1fe7239a3da 100644
2022-06-08 15:12:28 +02:00
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
2022-07-29 18:31:02 +02:00
@@ -2173,7 +2173,9 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
2022-06-08 15:12:28 +02:00
}
// CraftBukkit end
2022-07-27 23:32:15 +02:00
if (ServerGamePacketListenerImpl.isChatMessageIllegal(packet.message())) {
2022-06-08 15:12:28 +02:00
+ this.server.scheduleOnMain(() -> { // Paper - push to main for event firing
this.disconnect(Component.translatable("multiplayer.disconnect.illegal_characters"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_CHARACTERS); // Paper - add cause
+ }); // Paper - push to main for event firing
} else {
2022-07-27 23:32:15 +02:00
if (this.tryHandleChat(packet.message(), packet.timeStamp(), packet.lastSeenMessages())) {
// this.server.submit(() -> { // CraftBukkit - async chat
2022-07-29 18:31:02 +02:00
@@ -2201,7 +2203,9 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
2022-06-08 15:12:28 +02:00
@Override
public void handleChatCommand(ServerboundChatCommandPacket packet) {
if (ServerGamePacketListenerImpl.isChatMessageIllegal(packet.command())) {
+ this.server.scheduleOnMain(() -> { // Paper - push to main for event firing
2022-07-29 18:31:02 +02:00
this.disconnect(Component.translatable("multiplayer.disconnect.illegal_characters"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_CHARACTERS); // Paper
2022-06-08 15:12:28 +02:00
+ }); // Paper - push to main for event firing
} else {
2022-07-27 23:32:15 +02:00
if (this.tryHandleChat(packet.command(), packet.timeStamp(), packet.lastSeenMessages())) {
this.server.submit(() -> {
2022-07-29 18:31:02 +02:00
@@ -2287,7 +2291,9 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
2022-07-27 23:32:15 +02:00
private boolean tryHandleChat(String message, Instant timestamp, LastSeenMessages.Update acknowledgment) {
if (!this.updateChatOrder(timestamp)) {
ServerGamePacketListenerImpl.LOGGER.warn("{} sent out-of-order chat: '{}'", this.player.getName().getString(), message);
2022-06-12 03:11:18 +02:00
+ this.server.scheduleOnMain(() -> { // Paper - push to main
2022-07-29 18:31:02 +02:00
this.disconnect(Component.translatable("multiplayer.disconnect.out_of_order_chat"), org.bukkit.event.player.PlayerKickEvent.Cause.OUT_OF_ORDER_CHAT); // Paper - kick event cause
2022-06-12 03:11:18 +02:00
+ }); // Paper - push to main
return false;
2022-07-27 23:32:15 +02:00
} else if (this.player.isRemoved() || this.player.getChatVisibility() == ChatVisiblity.HIDDEN) { // CraftBukkit - dead men tell no tales
this.send(new ClientboundSystemChatPacket(Component.translatable("chat.disabled.options").withStyle(ChatFormatting.RED), false));