From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Shane Freeder Date: Mon, 3 Apr 2023 08:55:52 +0100 Subject: [PATCH] Prevent causing expired keys from impacting new joins diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerInfoUpdatePacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerInfoUpdatePacket.java index 23e0e6937e28f09271a4ec7c35e0076a576cf3d3..4aa8b483841028fbcc43f9ed47730881263e5065 100644 --- a/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerInfoUpdatePacket.java +++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerInfoUpdatePacket.java @@ -94,7 +94,13 @@ public class ClientboundPlayerInfoUpdatePacket implements Packet { serialized.chatSession = buf.readNullable(RemoteChatSession.Data::read); }, (buf, entry) -> { - buf.writeNullable(entry.chatSession, RemoteChatSession.Data::write); + // Paper start + RemoteChatSession.Data chatSession = entry.chatSession; + if (chatSession != null && chatSession.profilePublicKey().hasExpired()) { + chatSession = null; + } + buf.writeNullable(chatSession, RemoteChatSession.Data::write); + // Paper end }), UPDATE_GAME_MODE((serialized, buf) -> { serialized.gameMode = GameType.byId(buf.readVarInt()); diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java index e7af33c702fcfe187c549b795c65029c727c6517..ae82ab0e3d8e99f87ca8465fbcbb44b5ce18bf96 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -296,6 +296,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic private final AtomicReference lastChatTimeStamp; @Nullable private RemoteChatSession chatSession; + private boolean hasLoggedExpiry = false; // Paper private SignedMessageChain.Decoder signedMessageDecoder; private final LastSeenMessagesValidator lastSeenMessages; private final MessageSignatureCache messageSignatureCache; @@ -436,6 +437,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic this.disconnect(Component.translatable("multiplayer.disconnect.idling"), org.bukkit.event.player.PlayerKickEvent.Cause.IDLING); // Paper - kick event cause } + // Paper start + if (!hasLoggedExpiry && this.chatSession != null && this.chatSession.profilePublicKey().data().hasExpired()) { + LOGGER.info("Player profile key for {} has expired!", this.player.getName().getString()); + hasLoggedExpiry = true; + } + // Paper end + } public void resetPosition() { @@ -3598,6 +3606,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic private void resetPlayerChatState(RemoteChatSession session) { this.chatSession = session; + this.hasLoggedExpiry = false; // Paper this.signedMessageDecoder = session.createMessageDecoder(this.player.getUUID()); this.chatMessageChain.append((executor) -> { this.player.setChatSession(session);