--- a/net/minecraft/network/chat/ChatType.java
+++ b/net/minecraft/network/chat/ChatType.java
@@ -2,6 +2,7 @@
 
 import com.mojang.serialization.Codec;
 import com.mojang.serialization.codecs.RecordCodecBuilder;
+import java.util.List;
 import java.util.Optional;
 import javax.annotation.Nullable;
 import net.minecraft.commands.CommandSourceStack;
@@ -15,6 +16,7 @@
 import net.minecraft.world.entity.Entity;
 
 public record ChatType(ChatTypeDecoration chat, ChatTypeDecoration narration) {
+
     public static final Codec<ChatType> CODEC = RecordCodecBuilder.create((instance) -> {
         return instance.group(ChatTypeDecoration.CODEC.fieldOf("chat").forGetter(ChatType::chat), ChatTypeDecoration.CODEC.fieldOf("narration").forGetter(ChatType::narration)).apply(instance, ChatType::new);
     });
@@ -26,19 +28,21 @@
     public static final ResourceKey<ChatType> TEAM_MSG_COMMAND_INCOMING = create("team_msg_command_incoming");
     public static final ResourceKey<ChatType> TEAM_MSG_COMMAND_OUTGOING = create("team_msg_command_outgoing");
     public static final ResourceKey<ChatType> EMOTE_COMMAND = create("emote_command");
+    public static final ResourceKey<ChatType> RAW = create("raw"); // CraftBukkit
 
     private static ResourceKey<ChatType> create(String id) {
         return ResourceKey.create(Registries.CHAT_TYPE, new ResourceLocation(id));
     }
 
     public static void bootstrap(BootstapContext<ChatType> messageTypeRegisterable) {
-        messageTypeRegisterable.register(CHAT, new ChatType(DEFAULT_CHAT_DECORATION, ChatTypeDecoration.withSender("chat.type.text.narrate")));
-        messageTypeRegisterable.register(SAY_COMMAND, new ChatType(ChatTypeDecoration.withSender("chat.type.announcement"), ChatTypeDecoration.withSender("chat.type.text.narrate")));
-        messageTypeRegisterable.register(MSG_COMMAND_INCOMING, new ChatType(ChatTypeDecoration.incomingDirectMessage("commands.message.display.incoming"), ChatTypeDecoration.withSender("chat.type.text.narrate")));
-        messageTypeRegisterable.register(MSG_COMMAND_OUTGOING, new ChatType(ChatTypeDecoration.outgoingDirectMessage("commands.message.display.outgoing"), ChatTypeDecoration.withSender("chat.type.text.narrate")));
-        messageTypeRegisterable.register(TEAM_MSG_COMMAND_INCOMING, new ChatType(ChatTypeDecoration.teamMessage("chat.type.team.text"), ChatTypeDecoration.withSender("chat.type.text.narrate")));
-        messageTypeRegisterable.register(TEAM_MSG_COMMAND_OUTGOING, new ChatType(ChatTypeDecoration.teamMessage("chat.type.team.sent"), ChatTypeDecoration.withSender("chat.type.text.narrate")));
-        messageTypeRegisterable.register(EMOTE_COMMAND, new ChatType(ChatTypeDecoration.withSender("chat.type.emote"), ChatTypeDecoration.withSender("chat.type.emote")));
+        messageTypeRegisterable.register(ChatType.CHAT, new ChatType(ChatType.DEFAULT_CHAT_DECORATION, ChatTypeDecoration.withSender("chat.type.text.narrate")));
+        messageTypeRegisterable.register(ChatType.SAY_COMMAND, new ChatType(ChatTypeDecoration.withSender("chat.type.announcement"), ChatTypeDecoration.withSender("chat.type.text.narrate")));
+        messageTypeRegisterable.register(ChatType.MSG_COMMAND_INCOMING, new ChatType(ChatTypeDecoration.incomingDirectMessage("commands.message.display.incoming"), ChatTypeDecoration.withSender("chat.type.text.narrate")));
+        messageTypeRegisterable.register(ChatType.MSG_COMMAND_OUTGOING, new ChatType(ChatTypeDecoration.outgoingDirectMessage("commands.message.display.outgoing"), ChatTypeDecoration.withSender("chat.type.text.narrate")));
+        messageTypeRegisterable.register(ChatType.TEAM_MSG_COMMAND_INCOMING, new ChatType(ChatTypeDecoration.teamMessage("chat.type.team.text"), ChatTypeDecoration.withSender("chat.type.text.narrate")));
+        messageTypeRegisterable.register(ChatType.TEAM_MSG_COMMAND_OUTGOING, new ChatType(ChatTypeDecoration.teamMessage("chat.type.team.sent"), ChatTypeDecoration.withSender("chat.type.text.narrate")));
+        messageTypeRegisterable.register(ChatType.EMOTE_COMMAND, new ChatType(ChatTypeDecoration.withSender("chat.type.emote"), ChatTypeDecoration.withSender("chat.type.emote")));
+        messageTypeRegisterable.register(ChatType.RAW, new ChatType(new ChatTypeDecoration("%s", List.of(ChatTypeDecoration.Parameter.CONTENT), Style.EMPTY), new ChatTypeDecoration("%s", List.of(ChatTypeDecoration.Parameter.CONTENT), Style.EMPTY))); // CraftBukkit
     }
 
     public static ChatType.Bound bind(ResourceKey<ChatType> typeKey, Entity entity) {
@@ -50,8 +54,9 @@
     }
 
     public static ChatType.Bound bind(ResourceKey<ChatType> typeKey, RegistryAccess registryManager, Component name) {
-        Registry<ChatType> registry = registryManager.registryOrThrow(Registries.CHAT_TYPE);
-        return registry.getOrThrow(typeKey).bind(name);
+        Registry<ChatType> iregistry = registryManager.registryOrThrow(Registries.CHAT_TYPE);
+
+        return ((ChatType) iregistry.getOrThrow(typeKey)).bind(name);
     }
 
     public ChatType.Bound bind(Component name) {
@@ -59,8 +64,9 @@
     }
 
     public static record Bound(ChatType chatType, Component name, @Nullable Component targetName) {
+
         Bound(ChatType type, Component name) {
-            this(type, name, (Component)null);
+            this(type, name, (Component) null);
         }
 
         public Component decorate(Component content) {
@@ -76,14 +82,16 @@
         }
 
         public ChatType.BoundNetwork toNetwork(RegistryAccess registryManager) {
-            Registry<ChatType> registry = registryManager.registryOrThrow(Registries.CHAT_TYPE);
-            return new ChatType.BoundNetwork(registry.getId(this.chatType), this.name, this.targetName);
+            Registry<ChatType> iregistry = registryManager.registryOrThrow(Registries.CHAT_TYPE);
+
+            return new ChatType.BoundNetwork(iregistry.getId(this.chatType), this.name, this.targetName);
         }
     }
 
     public static record BoundNetwork(int chatType, Component name, @Nullable Component targetName) {
+
         public BoundNetwork(FriendlyByteBuf buf) {
-            this(buf.readVarInt(), buf.readComponent(), buf.readNullable(FriendlyByteBuf::readComponent));
+            this(buf.readVarInt(), buf.readComponent(), (Component) buf.readNullable(FriendlyByteBuf::readComponent));
         }
 
         public void write(FriendlyByteBuf buf) {
@@ -93,10 +101,11 @@
         }
 
         public Optional<ChatType.Bound> resolve(RegistryAccess registryManager) {
-            Registry<ChatType> registry = registryManager.registryOrThrow(Registries.CHAT_TYPE);
-            ChatType chatType = registry.byId(this.chatType);
-            return Optional.ofNullable(chatType).map((type) -> {
-                return new ChatType.Bound(type, this.name, this.targetName);
+            Registry<ChatType> iregistry = registryManager.registryOrThrow(Registries.CHAT_TYPE);
+            ChatType chatmessagetype = (ChatType) iregistry.byId(this.chatType);
+
+            return Optional.ofNullable(chatmessagetype).map((chatmessagetype1) -> {
+                return new ChatType.Bound(chatmessagetype1, this.name, this.targetName);
             });
         }
     }
