--- a/net/minecraft/network/chat/PlayerChatMessage.java
+++ b/net/minecraft/network/chat/PlayerChatMessage.java
@@ -15,7 +15,19 @@
 import net.minecraft.util.SignatureUpdater;
 import net.minecraft.util.SignatureValidator;
 
-public record PlayerChatMessage(SignedMessageLink link, @Nullable MessageSignature signature, SignedMessageBody signedBody, @Nullable Component unsignedContent, FilterMask filterMask) {
+// Paper start
+public record PlayerChatMessage(SignedMessageLink link, @Nullable MessageSignature signature, SignedMessageBody signedBody, @Nullable Component unsignedContent, FilterMask filterMask, @Nullable net.minecraft.network.chat.ChatDecorator.Result result) {
+    public PlayerChatMessage(SignedMessageLink link, @Nullable MessageSignature signature, SignedMessageBody signedBody, @Nullable Component unsignedContent, FilterMask filterMask) {
+        this(link, signature, signedBody, unsignedContent, filterMask, null);
+    }
+    public PlayerChatMessage withResult(net.minecraft.network.chat.ChatDecorator.Result result) {
+        final PlayerChatMessage msg = this.withUnsignedContent(result.component());
+        return new PlayerChatMessage(msg.link, msg.signature, msg.signedBody, msg.unsignedContent, msg.filterMask, result);
+    }
+    public net.minecraft.network.chat.ChatDecorator.Result requireResult() {
+        return Objects.requireNonNull(this.result, "Requires a decoration result to be set here");
+    }
+    // Paper end
     public static final MapCodec<PlayerChatMessage> MAP_CODEC = RecordCodecBuilder.mapCodec((instance) -> {
         return instance.group(SignedMessageLink.CODEC.fieldOf("link").forGetter(PlayerChatMessage::link), MessageSignature.CODEC.optionalFieldOf("signature").forGetter((message) -> {
             return Optional.ofNullable(message.signature);
@@ -40,7 +52,7 @@
     }
 
     public PlayerChatMessage withUnsignedContent(Component unsignedContent) {
-        Component component = !unsignedContent.equals(Component.literal(this.signedContent())) ? unsignedContent : null;
+        Component component = !(unsignedContent instanceof io.papermc.paper.adventure.AdventureComponent advComponent ? advComponent.deepConverted() : unsignedContent).equals(Component.literal(this.signedContent())) ? unsignedContent : null; // Paper
         return new PlayerChatMessage(this.link, this.signature, this.signedBody, component, this.filterMask);
     }
 
