diff --git a/build-data/dev-imports.txt b/build-data/dev-imports.txt index 286aeeaaa9..302359e8a3 100644 --- a/build-data/dev-imports.txt +++ b/build-data/dev-imports.txt @@ -8,4 +8,8 @@ # To import classes from the vanilla Minecraft jar use `minecraft` as the artifactId: # minecraft net.minecraft.world.level.entity.LevelEntityGetterAdapter # minecraft net/minecraft/world/level/entity/LevelEntityGetter.java +# To import minecraft data files, like the default chat type, use `mc_data` as the prefix: +# mc_data chat_type/chat.json +# mc_data dimension_type/overworld.json +# diff --git a/build.gradle.kts b/build.gradle.kts index aa78c58d53..1aa5de39b1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ plugins { java `maven-publish` id("com.github.johnrengelman.shadow") version "8.1.1" apply false - id("io.papermc.paperweight.core") version "1.5.5" + id("io.papermc.paperweight.core") version "1.5.6" } allprojects { diff --git a/patches/server/Adventure.patch b/patches/server/Adventure.patch index 29dfa1c4ed..dcbec569e7 100644 --- a/patches/server/Adventure.patch +++ b/patches/server/Adventure.patch @@ -378,6 +378,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 +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..00000000000000000000000000000000 + +@DefaultQualifier(NonNull.class) +public final class ChatProcessor { ++ static final ResourceKey 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..00000000000000000000000000000000 + final ChatRenderer renderer = event.renderer(); + + final Set viewers = event.viewers(); -+ final ResourceKey chatTypeKey = renderer instanceof ChatRenderer.Default ? ChatType.CHAT : ChatType.RAW; ++ final ResourceKey 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 0000000000000000000000000000000000000000..00000000000000000000000000000000 + } + // 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/network/chat/ChatType.java -+++ b/src/main/java/net/minecraft/network/chat/ChatType.java -@@ -0,0 +0,0 @@ public record ChatType(ChatTypeDecoration chat, ChatTypeDecoration narration) { - public static final ResourceKey TEAM_MSG_COMMAND_INCOMING = create("team_msg_command_incoming"); - public static final ResourceKey TEAM_MSG_COMMAND_OUTGOING = create("team_msg_command_outgoing"); - public static final ResourceKey EMOTE_COMMAND = create("emote_command"); -+ public static final ResourceKey RAW = create("raw"); // Paper - - private static ResourceKey create(String id) { - return ResourceKey.create(Registries.CHAT_TYPE, new ResourceLocation(id)); -@@ -0,0 +0,0 @@ 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 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/network/chat/Component.java @@ -2172,22 +2154,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/resources/RegistryDataLoader.java -+++ b/src/main/java/net/minecraft/resources/RegistryDataLoader.java -@@ -0,0 +0,0 @@ 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) 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java @@ -5069,6 +5035,26 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 +++ 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..0000000000000000000000000000000000000000 +--- /dev/null ++++ b/src/main/resources/data/paper/chat_type/raw.json +@@ -0,0 +0,0 @@ ++{ ++ "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..0000000000000000000000000000000000000000 diff --git a/patches/server/Build-system-changes.patch b/patches/server/Build-system-changes.patch index 10da19a991..624edf0ef3 100644 --- a/patches/server/Build-system-changes.patch +++ b/patches/server/Build-system-changes.patch @@ -3,6 +3,10 @@ From: Zach Brown <1254957+zachbr@users.noreply.github.com> Date: Mon, 29 Feb 2016 20:40:33 -0600 Subject: [PATCH] Build system changes +== AT == +public net.minecraft.server.packs.VanillaPackResourcesBuilder safeGetPath(Ljava/net/URI;)Ljava/nio/file/Path; + +Co-authored-by: Jake Potrebic diff --git a/build.gradle.kts b/build.gradle.kts index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 @@ -78,6 +82,69 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 tasks.test { exclude("org/bukkit/craftbukkit/inventory/ItemStack*Test.class") } +@@ -0,0 +0,0 @@ tasks.registerRunTask("runReobf") { + classpath(runtimeClasspathWithoutVanillaServer) + } + ++val runtimeClasspathForRunDev = sourceSets.main.flatMap { src -> ++ src.runtimeClasspath.elements.map { elements -> ++ elements.filterNot { file -> file.asFile.endsWith("minecraft.jar") } ++ } ++} + tasks.registerRunTask("runDev") { + description = "Spin up a non-relocated Mojang-mapped test server" +- classpath(sourceSets.main.map { it.runtimeClasspath }) ++ classpath(tasks.filterProjectDir.flatMap { it.outputJar }) ++ classpath(runtimeClasspathForRunDev) ++ jvmArgs("-DPaper.isRunDev=true") + } +diff --git a/src/main/java/net/minecraft/resources/ResourceLocation.java b/src/main/java/net/minecraft/resources/ResourceLocation.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/resources/ResourceLocation.java ++++ b/src/main/java/net/minecraft/resources/ResourceLocation.java +@@ -0,0 +0,0 @@ public class ResourceLocation implements Comparable { + public static final char NAMESPACE_SEPARATOR = ':'; + public static final String DEFAULT_NAMESPACE = "minecraft"; + public static final String REALMS_NAMESPACE = "realms"; ++ public static final String PAPER_NAMESPACE = "paper"; // Paper + private final String namespace; + private final String path; + +diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/server/Main.java ++++ b/src/main/java/net/minecraft/server/Main.java +@@ -0,0 +0,0 @@ public class Main { + */ // CraftBukkit end + + try { ++ // Paper start ++ if (Boolean.getBoolean("Paper.isRunDev")) { ++ net.minecraft.server.packs.VanillaPackResourcesBuilder.developmentConfig = builder -> { ++ try { ++ builder.pushAssetPath(net.minecraft.server.packs.PackType.SERVER_DATA, net.minecraft.server.packs.VanillaPackResourcesBuilder.safeGetPath(java.util.Objects.requireNonNull(Main.class.getResource("/data/.paperassetsroot"), "Missing required .paperassetsroot file").toURI()).getParent()); ++ } catch (java.net.URISyntaxException | IOException ex) { ++ throw new RuntimeException(ex); ++ } ++ }; ++ } ++ // Paper end + + Path path = (Path) optionset.valueOf("pidFile"); // CraftBukkit + +diff --git a/src/main/java/net/minecraft/server/packs/repository/ServerPacksSource.java b/src/main/java/net/minecraft/server/packs/repository/ServerPacksSource.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/server/packs/repository/ServerPacksSource.java ++++ b/src/main/java/net/minecraft/server/packs/repository/ServerPacksSource.java +@@ -0,0 +0,0 @@ public class ServerPacksSource extends BuiltInPackSource { + } + + private static VanillaPackResources createVanillaPackSource() { +- return (new VanillaPackResourcesBuilder()).setMetadata(BUILT_IN_METADATA).exposeNamespace("minecraft").applyDevelopmentConfig().pushJarResources().build(); ++ return (new VanillaPackResourcesBuilder()).setMetadata(BUILT_IN_METADATA).exposeNamespace("minecraft", ResourceLocation.PAPER_NAMESPACE).applyDevelopmentConfig().pushJarResources().build(); // Paper + } + + @Override diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java @@ -104,3 +171,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 Properties properties = new Properties(); if (stream != null) { +diff --git a/src/main/resources/data/.paperassetsroot b/src/main/resources/data/.paperassetsroot +new file mode 100644 +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 diff --git a/patches/server/Option-to-use-vanilla-per-world-scoreboard-coloring-.patch b/patches/server/Option-to-use-vanilla-per-world-scoreboard-coloring-.patch index 8dd886d1a0..574dbdd3f9 100644 --- a/patches/server/Option-to-use-vanilla-per-world-scoreboard-coloring-.patch +++ b/patches/server/Option-to-use-vanilla-per-world-scoreboard-coloring-.patch @@ -23,7 +23,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 import net.minecraft.Optionull; import net.minecraft.Util; import net.minecraft.core.registries.Registries; -@@ -0,0 +0,0 @@ import net.minecraft.resources.ResourceKey; +@@ -0,0 +0,0 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; import org.bukkit.command.ConsoleCommandSender;