aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0479-Add-methods-to-get-translation-keys.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0479-Add-methods-to-get-translation-keys.patch')
-rw-r--r--patches/server/0479-Add-methods-to-get-translation-keys.patch174
1 files changed, 174 insertions, 0 deletions
diff --git a/patches/server/0479-Add-methods-to-get-translation-keys.patch b/patches/server/0479-Add-methods-to-get-translation-keys.patch
new file mode 100644
index 0000000000..5a5b0a4cd6
--- /dev/null
+++ b/patches/server/0479-Add-methods-to-get-translation-keys.patch
@@ -0,0 +1,174 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jake Potrebic <[email protected]>
+Date: Tue, 11 Aug 2020 19:16:09 +0200
+Subject: [PATCH] Add methods to get translation keys
+
+Co-authored-by: MeFisto94 <[email protected]>
+
+diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
+index ea3358905dcd39a1a855d98570457c65dcd7513d..396fb96abed1e77893d8ee8a15cff18cad804475 100644
+--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
++++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
+@@ -668,5 +668,15 @@ public class CraftBlock implements Block {
+ public org.bukkit.SoundGroup getBlockSoundGroup() {
+ return org.bukkit.craftbukkit.CraftSoundGroup.getSoundGroup(this.getNMS().getSoundType());
+ }
++
++ @Override
++ public String getTranslationKey() {
++ return this.translationKey();
++ }
++
++ @Override
++ public String translationKey() {
++ return org.bukkit.Bukkit.getUnsafe().getTranslationKey(this);
++ }
+ // Paper end
+ }
+diff --git a/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java b/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java
+index a859a675b4bc543e139358223cc92ad5eee3ddb5..31a22f26070059e5379730c1940ff1c5fb109be1 100644
+--- a/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java
++++ b/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java
+@@ -194,6 +194,11 @@ public class CraftEnchantment extends Enchantment {
+ public net.kyori.adventure.text.Component displayName(int level) {
+ return io.papermc.paper.adventure.PaperAdventure.asAdventure(getHandle().getFullname(level));
+ }
++
++ @Override
++ public String translationKey() {
++ return this.target.getDescriptionId();
++ }
+ // Paper end
+
+ public net.minecraft.world.item.enchantment.Enchantment getHandle() {
+diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
+index 6fefc65c6f9364d71e4e410972dfd79d97fdae3e..c65cc24fbd8b6cb9828fbc978c21c3f7ef9171a3 100644
+--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
++++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
+@@ -478,6 +478,30 @@ public final class CraftMagicNumbers implements UnsafeValues {
+ Preconditions.checkArgument(dataVersion <= getDataVersion(), "Newer version! Server downgrades are not supported!");
+ return compound;
+ }
++
++ @Override
++ public String getTranslationKey(Material mat) {
++ if (mat.isBlock()) {
++ return getBlock(mat).getDescriptionId();
++ }
++ return getItem(mat).getDescriptionId();
++ }
++
++ @Override
++ public String getTranslationKey(org.bukkit.block.Block block) {
++ return ((org.bukkit.craftbukkit.block.CraftBlock)block).getNMS().getBlock().getDescriptionId();
++ }
++
++ @Override
++ public String getTranslationKey(org.bukkit.entity.EntityType type) {
++ return net.minecraft.world.entity.EntityType.byString(type.getName()).map(net.minecraft.world.entity.EntityType::getDescriptionId).orElse(null);
++ }
++
++ @Override
++ public String getTranslationKey(org.bukkit.inventory.ItemStack itemStack) {
++ net.minecraft.world.item.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(itemStack);
++ return nmsItemStack.getItem().getDescriptionId(nmsItemStack);
++ }
+ // Paper end
+
+ /**
+diff --git a/src/test/java/io/papermc/paper/world/TranslationKeyTest.java b/src/test/java/io/papermc/paper/world/TranslationKeyTest.java
+index fab3063fffa959ac7f0eb5937f2fae94d11b6591..9292a0119499d14c9ed170999ac3b8dfdd1f839a 100644
+--- a/src/test/java/io/papermc/paper/world/TranslationKeyTest.java
++++ b/src/test/java/io/papermc/paper/world/TranslationKeyTest.java
+@@ -1,12 +1,29 @@
+ package io.papermc.paper.world;
+
+ import com.destroystokyo.paper.ClientOption;
++import net.minecraft.core.Registry;
++import net.minecraft.core.RegistryAccess;
++import net.minecraft.network.chat.contents.TranslatableContents;
++import net.minecraft.resources.ResourceKey;
+ import net.minecraft.world.entity.player.ChatVisiblity;
++import net.minecraft.world.item.CreativeModeTab;
++import net.minecraft.world.level.GameType;
++import net.minecraft.world.level.biome.Biome;
+ import org.bukkit.Difficulty;
++import org.bukkit.FireworkEffect;
++import org.bukkit.GameMode;
++import org.bukkit.GameRule;
++import org.bukkit.attribute.Attribute;
++import org.bukkit.craftbukkit.inventory.CraftCreativeCategory;
++import org.bukkit.inventory.CreativeCategory;
++import org.bukkit.support.AbstractTestingBase;
+ import org.junit.Assert;
+ import org.junit.Test;
+
+-public class TranslationKeyTest {
++import java.util.Map;
++import java.util.Objects;
++
++public class TranslationKeyTest extends AbstractTestingBase {
+
+ @Test
+ public void testChatVisibilityKeys() {
+@@ -15,4 +32,60 @@ public class TranslationKeyTest {
+ Assert.assertEquals(chatVisibility + "'s translation key doesn't match", ChatVisiblity.valueOf(chatVisibility.name()).getKey(), chatVisibility.translationKey());
+ }
+ }
++
++ @Test
++ public void testDifficultyKeys() {
++ for (Difficulty bukkitDifficulty : Difficulty.values()) {
++ Assert.assertEquals(bukkitDifficulty + "'s translation key doesn't match", ((TranslatableContents) net.minecraft.world.Difficulty.byId(bukkitDifficulty.ordinal()).getDisplayName().getContents()).getKey(), bukkitDifficulty.translationKey());
++ }
++ }
++
++ @Test
++ public void testGameruleKeys() {
++ for (GameRule<?> rule : GameRule.values()) {
++ Assert.assertEquals(rule.getName() + "'s translation doesn't match", org.bukkit.craftbukkit.CraftWorld.getGameRulesNMS().get(rule.getName()).getDescriptionId(), rule.translationKey());
++ }
++ }
++
++ @Test
++ public void testAttributeKeys() {
++ for (Attribute attribute : Attribute.values()) {
++ Assert.assertEquals("translation key mismatch for " + attribute, org.bukkit.craftbukkit.attribute.CraftAttributeMap.toMinecraft(attribute).getDescriptionId(), attribute.translationKey());
++ }
++ }
++
++ @Test
++ public void testFireworkEffectType() {
++ for (FireworkEffect.Type type : FireworkEffect.Type.values()) {
++ Assert.assertEquals("translation key mismatch for " + type, net.minecraft.world.item.FireworkRocketItem.Shape.byId(org.bukkit.craftbukkit.inventory.CraftMetaFirework.getNBT(type)).getName(), org.bukkit.FireworkEffect.Type.NAMES.key(type));
++ }
++ }
++
++ @Test
++ public void testCreativeCategory() {
++ for (CreativeModeTab tab : CreativeModeTab.TABS) {
++ if (tab == CreativeModeTab.TAB_SEARCH || tab == CreativeModeTab.TAB_HOTBAR || tab == CreativeModeTab.TAB_INVENTORY) { // not implemented in the api
++ continue;
++ }
++ CreativeCategory category = Objects.requireNonNull(CraftCreativeCategory.fromNMS(tab));
++ Assert.assertEquals("translation key mismatch for " + category, ((TranslatableContents) tab.getDisplayName().getContents()).getKey(), category.translationKey());
++ }
++ }
++
++ @Test
++ public void testGameMode() {
++ for (GameType nms : GameType.values()) {
++ GameMode bukkit = GameMode.getByValue(nms.getId());
++ Assert.assertNotNull(bukkit);
++ Assert.assertEquals("translation key mismatch for " + bukkit, ((TranslatableContents) nms.getLongDisplayName().getContents()).getKey(), bukkit.translationKey());
++ }
++ }
++
++ @Test
++ public void testBiome() {
++ for (Map.Entry<ResourceKey<Biome>, Biome> nms : RegistryAccess.builtinCopy().registry(Registry.BIOME_REGISTRY).get().entrySet()) {
++ org.bukkit.block.Biome bukkit = org.bukkit.block.Biome.valueOf(nms.getKey().location().getPath().toUpperCase());
++ Assert.assertEquals("translation key mismatch for " + bukkit, nms.getKey().location().toLanguageKey("biome"), bukkit.translationKey());
++ }
++ }
+ }