Fix player chat messages from vanished players resulting in kicks (#8777)

Co-authored-by: Nassim Jahnke <nassim@njahnke.dev>
This commit is contained in:
Corey Shupe 2023-01-10 08:01:42 -05:00 committed by GitHub
parent 8e08d9b023
commit 7a64b85f92
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 10 deletions

View File

@ -2349,7 +2349,7 @@ index be097f13dba5d408f58d6fada893bed2638d4219..3d7d1ba148dbc3591d8c76b99a2ee7d9
@Override @Override
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index 25227822aa0e1dd7fbbe98a0925ccd023af8d0dc..7cd2af9a08bfca0c7de1ecac21ee7f8a790e8b64 100644 index 25227822aa0e1dd7fbbe98a0925ccd023af8d0dc..8c1937ff71b8b4dad85e20b55dcf2a0cc06ce2df 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java --- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -8,6 +8,7 @@ import com.mojang.logging.LogUtils; @@ -8,6 +8,7 @@ import com.mojang.logging.LogUtils;
@ -2464,7 +2464,7 @@ index 25227822aa0e1dd7fbbe98a0925ccd023af8d0dc..7cd2af9a08bfca0c7de1ecac21ee7f8a
} }
// CraftBukkit end // CraftBukkit end
@@ -1181,14 +1181,24 @@ public abstract class PlayerList { @@ -1181,24 +1181,43 @@ public abstract class PlayerList {
} }
public void broadcastChatMessage(PlayerChatMessage message, ServerPlayer sender, ChatType.Bound params) { public void broadcastChatMessage(PlayerChatMessage message, ServerPlayer sender, ChatType.Bound params) {
@ -2487,20 +2487,31 @@ index 25227822aa0e1dd7fbbe98a0925ccd023af8d0dc..7cd2af9a08bfca0c7de1ecac21ee7f8a
boolean flag = this.verifyChatTrusted(message); boolean flag = this.verifyChatTrusted(message);
- this.server.logChatMessage(message.decoratedContent(), params, flag ? null : "Not Secure"); - this.server.logChatMessage(message.decoratedContent(), params, flag ? null : "Not Secure");
+ this.server.logChatMessage((unsignedFunction == null ? message : message.withUnsignedContent(unsignedFunction.apply(this.server.console))).decoratedContent(), params, flag ? null : "Not Secure"); // Paper + this.server.logChatMessage((unsignedFunction == null ? Component.literal(message.signedContent()) : unsignedFunction.apply(this.server.console)), params, flag ? null : "Not Secure"); // Paper
OutgoingChatMessage outgoingchatmessage = OutgoingChatMessage.create(message); OutgoingChatMessage outgoingchatmessage = OutgoingChatMessage.create(message);
boolean flag1 = false; boolean flag1 = false;
@@ -1198,7 +1208,7 @@ public abstract class PlayerList { boolean flag2;
+ Packet<?> disguised = sender != null && unsignedFunction == null ? new net.minecraft.network.protocol.game.ClientboundDisguisedChatPacket(outgoingchatmessage.content(), params.toNetwork(sender.level.registryAccess())) : null; // Paper - don't send player chat packets from vanished players
for (Iterator iterator = this.players.iterator(); iterator.hasNext(); flag1 |= flag2 && message.isFullyFiltered()) {
ServerPlayer entityplayer1 = (ServerPlayer) iterator.next(); ServerPlayer entityplayer1 = (ServerPlayer) iterator.next();
flag2 = shouldSendFiltered.test(entityplayer1); flag2 = shouldSendFiltered.test(entityplayer1);
- entityplayer1.sendChatMessage(outgoingchatmessage, flag2, params); - entityplayer1.sendChatMessage(outgoingchatmessage, flag2, params);
+ // Paper start - don't send player chat packets from vanished players
+ if (sender != null && !entityplayer1.getBukkitEntity().canSee(sender.getBukkitEntity())) {
+ entityplayer1.connection.send(unsignedFunction != null
+ ? new net.minecraft.network.protocol.game.ClientboundDisguisedChatPacket(unsignedFunction.apply(entityplayer1.getBukkitEntity()), params.toNetwork(sender.level.registryAccess()))
+ : disguised);
+ continue;
+ }
+ // Paper end
+ entityplayer1.sendChatMessage(outgoingchatmessage, flag2, params, unsignedFunction == null ? null : unsignedFunction.apply(entityplayer1.getBukkitEntity())); // Paper + entityplayer1.sendChatMessage(outgoingchatmessage, flag2, params, unsignedFunction == null ? null : unsignedFunction.apply(entityplayer1.getBukkitEntity())); // Paper
} }
if (flag1 && sender != null) { if (flag1 && sender != null) {
@@ -1207,7 +1217,7 @@ public abstract class PlayerList { @@ -1207,7 +1226,7 @@ public abstract class PlayerList {
} }

View File

@ -15940,7 +15940,7 @@ index e4435962a60cf9c6d833183bd244a2758ff42808..b85545f997447875e737e4d22a8a8dbc
StringReader stringreader = new StringReader(packet.getCommand()); StringReader stringreader = new StringReader(packet.getCommand());
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index 5ecdd3ed015c220eb8217ea36388d68c05fa1d4c..08f7bafbe1979c3b531cb13255704ea5319b9c07 100644 index 257b13703166bf953c73c83db8982b412ca96565..da36a7342c5ef34af9ea4330e6cee2880d8d4dc8 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java --- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -251,7 +251,7 @@ public abstract class PlayerList { @@ -251,7 +251,7 @@ public abstract class PlayerList {
@ -15963,7 +15963,7 @@ index 5ecdd3ed015c220eb8217ea36388d68c05fa1d4c..08f7bafbe1979c3b531cb13255704ea5
entityplayer1.spawnIn(worldserver1); entityplayer1.spawnIn(worldserver1);
entityplayer1.unsetRemoved(); entityplayer1.unsetRemoved();
entityplayer1.connection.teleport(new Location(worldserver1.getWorld(), entityplayer1.getX(), entityplayer1.getY(), entityplayer1.getZ(), entityplayer1.getYRot(), entityplayer1.getXRot())); entityplayer1.connection.teleport(new Location(worldserver1.getWorld(), entityplayer1.getX(), entityplayer1.getY(), entityplayer1.getZ(), entityplayer1.getYRot(), entityplayer1.getXRot()));
@@ -1272,7 +1272,7 @@ public abstract class PlayerList { @@ -1281,7 +1281,7 @@ public abstract class PlayerList {
public void setViewDistance(int viewDistance) { public void setViewDistance(int viewDistance) {
this.viewDistance = viewDistance; this.viewDistance = viewDistance;
@ -15972,7 +15972,7 @@ index 5ecdd3ed015c220eb8217ea36388d68c05fa1d4c..08f7bafbe1979c3b531cb13255704ea5
Iterator iterator = this.server.getAllLevels().iterator(); Iterator iterator = this.server.getAllLevels().iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {
@@ -1287,7 +1287,7 @@ public abstract class PlayerList { @@ -1296,7 +1296,7 @@ public abstract class PlayerList {
public void setSimulationDistance(int simulationDistance) { public void setSimulationDistance(int simulationDistance) {
this.simulationDistance = simulationDistance; this.simulationDistance = simulationDistance;

View File

@ -6,10 +6,10 @@ Subject: [PATCH] Use username instead of display name in
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index 3d458d034cf074f56fc828ced0f3b97b096371ea..af78bee12160435fc2ea01bfa7a1cd919e353833 100644 index 0093be36b2d107549da99d51894f7a332af5e3fa..c092bfa679c60fd11eb95aaa4828b4f3403869f8 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java --- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -1398,7 +1398,7 @@ public abstract class PlayerList { @@ -1407,7 +1407,7 @@ public abstract class PlayerList {
// CraftBukkit start // CraftBukkit start
public ServerStatsCounter getPlayerStats(ServerPlayer entityhuman) { public ServerStatsCounter getPlayerStats(ServerPlayer entityhuman) {
ServerStatsCounter serverstatisticmanager = entityhuman.getStats(); ServerStatsCounter serverstatisticmanager = entityhuman.getStats();