Create raw chat type as resource file instead of in source (#9226)

Sets up the ability to load new or modified resource files into Paper.

Updates paperweight to 1.5.6

This should work with all run configs, like runDev, runShadow, runReobf as well as correctly build jars for production.
This commit is contained in:
Jake Potrebic 2023-09-15 11:03:42 -07:00 committed by GitHub
parent 29d1c7b602
commit eb60bffa98
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 128 additions and 68 deletions

View file

@ -345,10 +345,10 @@ index 0000000000000000000000000000000000000000..3b53d87a52cafb2503419f21ddd87d42
+}
diff --git a/src/main/java/io/papermc/paper/adventure/ChatProcessor.java b/src/main/java/io/papermc/paper/adventure/ChatProcessor.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ddec8e330ab058e72d90b68c5361a6c4feb2393
index 0000000000000000000000000000000000000000..57081e84d50f7eca7ea11540b550da8269378e9e
--- /dev/null
+++ b/src/main/java/io/papermc/paper/adventure/ChatProcessor.java
@@ -0,0 +1,412 @@
@@ -0,0 +1,414 @@
+package io.papermc.paper.adventure;
+
+import io.papermc.paper.chat.ChatRenderer;
@ -378,6 +378,7 @@ index 0000000000000000000000000000000000000000..7ddec8e330ab058e72d90b68c5361a6c
+import net.minecraft.network.chat.OutgoingChatMessage;
+import net.minecraft.network.chat.PlayerChatMessage;
+import net.minecraft.resources.ResourceKey;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.server.MinecraftServer;
+import net.minecraft.server.level.ServerPlayer;
+import org.bukkit.command.ConsoleCommandSender;
@ -397,6 +398,7 @@ index 0000000000000000000000000000000000000000..7ddec8e330ab058e72d90b68c5361a6c
+
+@DefaultQualifier(NonNull.class)
+public final class ChatProcessor {
+ static final ResourceKey<ChatType> PAPER_RAW = ResourceKey.create(Registries.CHAT_TYPE, new ResourceLocation(ResourceLocation.PAPER_NAMESPACE, "raw"));
+ static final String DEFAULT_LEGACY_FORMAT = "<%1$s> %2$s"; // copied from PlayerChatEvent/AsyncPlayerChatEvent
+ final MinecraftServer server;
+ final ServerPlayer player;
@ -568,7 +570,7 @@ index 0000000000000000000000000000000000000000..7ddec8e330ab058e72d90b68c5361a6c
+ final ChatRenderer renderer = event.renderer();
+
+ final Set<Audience> viewers = event.viewers();
+ final ResourceKey<ChatType> chatTypeKey = renderer instanceof ChatRenderer.Default ? ChatType.CHAT : ChatType.RAW;
+ final ResourceKey<ChatType> chatTypeKey = renderer instanceof ChatRenderer.Default ? ChatType.CHAT : PAPER_RAW;
+ final ChatType.Bound chatType = ChatType.bind(chatTypeKey, this.player.level().registryAccess(), PaperAdventure.asVanilla(displayName(player)));
+
+ OutgoingChat outgoingChat = viewers instanceof LazyChatAudienceSet lazyAudienceSet && lazyAudienceSet.isLazy() ? new ServerOutgoingChat() : new ViewersOutgoingChat();
@ -1825,26 +1827,6 @@ index 825ab7534f1ad9787ae2a6c2bf9a300f52cbfc95..53be8a43d784db5e8450c242adeb06f3
+ }
+ // Paper end
}
diff --git a/src/main/java/net/minecraft/network/chat/ChatType.java b/src/main/java/net/minecraft/network/chat/ChatType.java
index 618a9335faf9df4a7d0cc971a8e62a0e3b239aa3..375b6d1d1bb491680bdb9f664ed10a9cce1a9cfa 100644
--- a/src/main/java/net/minecraft/network/chat/ChatType.java
+++ b/src/main/java/net/minecraft/network/chat/ChatType.java
@@ -26,6 +26,7 @@ public record ChatType(ChatTypeDecoration chat, ChatTypeDecoration narration) {
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"); // Paper
private static ResourceKey<ChatType> create(String id) {
return ResourceKey.create(Registries.CHAT_TYPE, new ResourceLocation(id));
@@ -39,6 +40,7 @@ public record ChatType(ChatTypeDecoration chat, ChatTypeDecoration narration) {
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(RAW, new ChatType(new ChatTypeDecoration("%s", java.util.List.of(ChatTypeDecoration.Parameter.CONTENT), Style.EMPTY), new ChatTypeDecoration("%s", java.util.List.of(ChatTypeDecoration.Parameter.CONTENT), Style.EMPTY))); // Paper
}
public static ChatType.Bound bind(ResourceKey<ChatType> typeKey, Entity entity) {
diff --git a/src/main/java/net/minecraft/network/chat/Component.java b/src/main/java/net/minecraft/network/chat/Component.java
index 8f5e07047f88138422ae82143a80427be869a760..37fc353c3e59dd5af2fd6c58ac084fb0e6e155d7 100644
--- a/src/main/java/net/minecraft/network/chat/Component.java
@ -2172,22 +2154,6 @@ index 762a9392ffac3042356709dddd15bb3516048bed..3544e2dc2522e9d6305d727d56e73490
buf.writeComponent(this.header);
buf.writeComponent(this.footer);
}
diff --git a/src/main/java/net/minecraft/resources/RegistryDataLoader.java b/src/main/java/net/minecraft/resources/RegistryDataLoader.java
index 5f051cb22ae77f4d8994b07ac5b963bd0ff05673..7952635a963e28cb670c8f4869664103c7ebfefb 100644
--- a/src/main/java/net/minecraft/resources/RegistryDataLoader.java
+++ b/src/main/java/net/minecraft/resources/RegistryDataLoader.java
@@ -61,6 +61,11 @@ public class RegistryDataLoader {
RegistryOps.RegistryInfoLookup registryInfoLookup = createContext(baseRegistryManager, list);
list.forEach((loader) -> {
loader.getSecond().load(resourceManager, registryInfoLookup);
+ // Paper start
+ if (loader.getFirst().key() == Registries.CHAT_TYPE) {
+ Registry.register((Registry<ChatType>) loader.getFirst(), ChatType.RAW, new ChatType(new net.minecraft.network.chat.ChatTypeDecoration("%s", List.of(net.minecraft.network.chat.ChatTypeDecoration.Parameter.CONTENT), net.minecraft.network.chat.Style.EMPTY), new net.minecraft.network.chat.ChatTypeDecoration("%s", List.of(net.minecraft.network.chat.ChatTypeDecoration.Parameter.CONTENT), net.minecraft.network.chat.Style.EMPTY))); // CraftBukkit
+ }
+ // Paper end
});
list.forEach((loader) -> {
Registry<?> registry = loader.getFirst();
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index e896917b3546f9d075179198c6dcd714f6cddd50..58457e3493100e9726288ae7b027ab47947bd4d4 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
@ -5069,6 +5035,26 @@ index 0000000000000000000000000000000000000000..28d777610b52ba74f808bf3245d73b83
+++ b/src/main/resources/META-INF/services/net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer$Provider
@@ -0,0 +1 @@
+io.papermc.paper.adventure.providers.PlainTextComponentSerializerProviderImpl
diff --git a/src/main/resources/data/paper/chat_type/raw.json b/src/main/resources/data/paper/chat_type/raw.json
new file mode 100644
index 0000000000000000000000000000000000000000..3aedd0bbc97edacc1ebf71264b310e55aaaa5cb3
--- /dev/null
+++ b/src/main/resources/data/paper/chat_type/raw.json
@@ -0,0 +1,14 @@
+{
+ "chat": {
+ "parameters": [
+ "content"
+ ],
+ "translation_key": "%s"
+ },
+ "narration": {
+ "parameters": [
+ "content"
+ ],
+ "translation_key": "%s"
+ }
+}
diff --git a/src/test/java/io/papermc/paper/adventure/ComponentServicesTest.java b/src/test/java/io/papermc/paper/adventure/ComponentServicesTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..b6c4f8e2d375396a0ef3300a8bc324d77f23a768