From 41b84ccfdcc4fe0777f183cadef1f52cf4eaead6 Mon Sep 17 00:00:00 2001 From: saboooor Date: Sat, 10 Oct 2026 07:20:43 -0400 Subject: [PATCH] fix: preserve unsigned chat content in message cloning --- .../PacketEventsOutMessagePacketHelper.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/skullian/platform/PacketEventsOutMessagePacketHelper.java b/src/main/java/net/skullian/platform/PacketEventsOutMessagePacketHelper.java index ac819b4..9b12f87 100644 --- a/src/main/java/net/skullian/platform/PacketEventsOutMessagePacketHelper.java +++ b/src/main/java/net/skullian/platform/PacketEventsOutMessagePacketHelper.java @@ -147,18 +147,19 @@ private static void initializeMessagePacketHandlers() { }, WrapperPlayServerChatMessage::new, p -> { ChatMessage chatMessage = p.getMessage(); ChatMessage clonedChatMessage; + // Preserve unsigned content: getChatContent() only contains the raw signed text. if (chatMessage instanceof ChatMessage_v1_21_5) { ChatMessage_v1_21_5 c = (ChatMessage_v1_21_5) chatMessage; - clonedChatMessage = new ChatMessage_v1_21_5(c.getGlobalIndex(), c.getSenderUUID(), c.getIndex(), Arrays.copyOf(c.getSignature(), c.getSignature().length), c.getPlainContent(), c.getTimestamp(), c.getSalt(), c.getLastSeenMessagesPacked(), c.getChatContent(), c.getFilterMask(), c.getChatFormatting()); + clonedChatMessage = new ChatMessage_v1_21_5(c.getGlobalIndex(), c.getSenderUUID(), c.getIndex(), copySignature(c.getSignature()), c.getPlainContent(), c.getTimestamp(), c.getSalt(), c.getLastSeenMessagesPacked(), c.getUnsignedChatContent().orElse(null), c.getFilterMask(), c.getChatFormatting()); } else if (chatMessage instanceof ChatMessage_v1_19_3) { ChatMessage_v1_19_3 c = (ChatMessage_v1_19_3) chatMessage; - clonedChatMessage = new ChatMessage_v1_19_3(c.getSenderUUID(), c.getIndex(), Arrays.copyOf(c.getSignature(), c.getSignature().length), c.getPlainContent(), c.getTimestamp(), c.getSalt(), c.getLastSeenMessagesPacked(), c.getChatContent(), c.getFilterMask(), c.getChatFormatting()); + clonedChatMessage = new ChatMessage_v1_19_3(c.getSenderUUID(), c.getIndex(), copySignature(c.getSignature()), c.getPlainContent(), c.getTimestamp(), c.getSalt(), c.getLastSeenMessagesPacked(), c.getUnsignedChatContent().orElse(null), c.getFilterMask(), c.getChatFormatting()); } else if (chatMessage instanceof ChatMessage_v1_19_1) { ChatMessage_v1_19_1 c = (ChatMessage_v1_19_1) chatMessage; - clonedChatMessage = new ChatMessage_v1_19_1(c.getPlainContent(), c.getChatContent(), c.getUnsignedChatContent(), c.getSenderUUID(), c.getChatFormatting(), Arrays.copyOf(c.getPreviousSignature(), c.getPreviousSignature().length), Arrays.copyOf(c.getSignature(), c.getSignature().length), c.getTimestamp(), c.getSalt(), c.getLastSeenMessages(), c.getFilterMask()); + clonedChatMessage = new ChatMessage_v1_19_1(c.getPlainContent(), c.getChatContent(), c.getUnsignedChatContent(), c.getSenderUUID(), c.getChatFormatting(), copySignature(c.getPreviousSignature()), copySignature(c.getSignature()), c.getTimestamp(), c.getSalt(), c.getLastSeenMessages(), c.getFilterMask()); } else if (chatMessage instanceof ChatMessage_v1_19) { ChatMessage_v1_19 c = (ChatMessage_v1_19) chatMessage; - clonedChatMessage = new ChatMessage_v1_19(c.getChatContent(), c.getUnsignedChatContent(), c.getType(), c.getSenderUUID(), c.getSenderDisplayName(), c.getTeamName(), c.getTimestamp(), c.getSalt(), Arrays.copyOf(c.getSignature(), c.getSignature().length)); + clonedChatMessage = new ChatMessage_v1_19(c.getChatContent(), c.getUnsignedChatContent(), c.getType(), c.getSenderUUID(), c.getSenderDisplayName(), c.getTeamName(), c.getTimestamp(), c.getSalt(), copySignature(c.getSignature())); } else if (chatMessage instanceof ChatMessage_v1_16) { ChatMessage_v1_16 c = (ChatMessage_v1_16) chatMessage; clonedChatMessage = new ChatMessage_v1_16(c.getChatContent(), c.getType(), c.getSenderUUID()); @@ -269,6 +270,10 @@ private static void initializeMessagePacketHandlers() { }, WrapperPlayServerActionBar::new, p -> new WrapperPlayServerActionBar(p.getActionBarText()))); } + private static byte[] copySignature(byte[] signature) { + return signature == null ? null : Arrays.copyOf(signature, signature.length); + } + public static class PacketEventsHandler> { private final MessagePacketHandler> handler;