aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/api/0211-Add-methods-to-get-translation-keys.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/api/0211-Add-methods-to-get-translation-keys.patch')
-rw-r--r--patches/api/0211-Add-methods-to-get-translation-keys.patch517
1 files changed, 517 insertions, 0 deletions
diff --git a/patches/api/0211-Add-methods-to-get-translation-keys.patch b/patches/api/0211-Add-methods-to-get-translation-keys.patch
new file mode 100644
index 0000000000..5af19e4030
--- /dev/null
+++ b/patches/api/0211-Add-methods-to-get-translation-keys.patch
@@ -0,0 +1,517 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jake Potrebic <[email protected]>
+Date: Tue, 11 Aug 2020 19:17:46 +0200
+Subject: [PATCH] Add methods to get translation keys
+
+Co-authored-by: MeFisto94 <[email protected]>
+
+diff --git a/src/main/java/org/bukkit/Difficulty.java b/src/main/java/org/bukkit/Difficulty.java
+index f35801783538d3377b04131b8bf6effd7eb8e1a5..427ce8cfd6f63e5c7ec7b264b15ab4111b947729 100644
+--- a/src/main/java/org/bukkit/Difficulty.java
++++ b/src/main/java/org/bukkit/Difficulty.java
+@@ -7,7 +7,7 @@ import org.jetbrains.annotations.Nullable;
+ /**
+ * Represents the various difficulty levels that are available.
+ */
+-public enum Difficulty {
++public enum Difficulty implements net.kyori.adventure.translation.Translatable { // Paper - Adventure translations
+ /**
+ * Players regain health over time, hostile mobs don't spawn, the hunger
+ * bar does not deplete.
+@@ -51,6 +51,12 @@ public enum Difficulty {
+ return value;
+ }
+
++ // Paper start
++ @Override
++ public @org.jetbrains.annotations.NotNull String translationKey() {
++ return "options.difficulty." + this.name().toLowerCase(java.util.Locale.ENGLISH);
++ }
++ // Paper end
+ /**
+ * Gets the Difficulty represented by the specified value
+ *
+diff --git a/src/main/java/org/bukkit/FireworkEffect.java b/src/main/java/org/bukkit/FireworkEffect.java
+index bf7db5b3e7c2ac15016a48e520fba674726718ee..637fa73d4366c2d88e2716e5c8d3465706d788a7 100644
+--- a/src/main/java/org/bukkit/FireworkEffect.java
++++ b/src/main/java/org/bukkit/FireworkEffect.java
+@@ -18,28 +18,44 @@ public final class FireworkEffect implements ConfigurationSerializable {
+ /**
+ * The type or shape of the effect.
+ */
+- public enum Type {
++ public enum Type implements net.kyori.adventure.translation.Translatable { // Paper - Adventure translations
+ /**
+ * A small ball effect.
+ */
+- BALL,
++ BALL("small_ball"), // Paper - add name
+ /**
+ * A large ball effect.
+ */
+- BALL_LARGE,
++ BALL_LARGE("large_ball"), // Paper - add name
+ /**
+ * A star-shaped effect.
+ */
+- STAR,
++ STAR("star"), // Paper - add name
+ /**
+ * A burst effect.
+ */
+- BURST,
++ BURST("burst"), // Paper - add name
+ /**
+ * A creeper-face effect.
+ */
+- CREEPER,
++ CREEPER("creeper"), // Paper - add name
+ ;
++ // Paper start
++ /**
++ * The name map.
++ */
++ public static final net.kyori.adventure.util.Index<String, org.bukkit.FireworkEffect.Type> NAMES = net.kyori.adventure.util.Index.create(Type.class, type -> type.name);
++ private final String name;
++
++ Type(final String name) {
++ this.name = name;
++ }
++
++ @Override
++ public @NotNull String translationKey() {
++ return "item.minecraft.firework_star.shape." + this.name;
++ }
++ // Paper end
+ }
+
+ /**
+diff --git a/src/main/java/org/bukkit/GameMode.java b/src/main/java/org/bukkit/GameMode.java
+index 81e45984a88fc84acd0f76d825abf4ddaed0ac3b..fdc42a79c5af30fdade41ee99245e6641f353571 100644
+--- a/src/main/java/org/bukkit/GameMode.java
++++ b/src/main/java/org/bukkit/GameMode.java
+@@ -9,7 +9,7 @@ import org.jetbrains.annotations.Nullable;
+ * Represents the various type of game modes that {@link HumanEntity}s may
+ * have
+ */
+-public enum GameMode {
++public enum GameMode implements net.kyori.adventure.translation.Translatable { // Paper - implement Translatable
+ /**
+ * Creative mode may fly, build instantly, become invulnerable and create
+ * free items.
+@@ -35,9 +35,18 @@ public enum GameMode {
+
+ private final int value;
+ private static final Map<Integer, GameMode> BY_ID = Maps.newHashMap();
++ // Paper start - translation keys
++ private final String translationKey;
++
++ @Override
++ public @org.jetbrains.annotations.NotNull String translationKey() {
++ return this.translationKey;
++ }
++ // Paper end
+
+ private GameMode(final int value) {
+ this.value = value;
++ this.translationKey = "gameMode." + this.name().toLowerCase(java.util.Locale.ENGLISH); // Paper
+ }
+
+ /**
+diff --git a/src/main/java/org/bukkit/GameRule.java b/src/main/java/org/bukkit/GameRule.java
+index cca5267019052f77149f9913babd8b17abafe94f..be827e7fef0acb17bd41aeff9dc3dc4da3718e5e 100644
+--- a/src/main/java/org/bukkit/GameRule.java
++++ b/src/main/java/org/bukkit/GameRule.java
+@@ -15,7 +15,7 @@ import org.jetbrains.annotations.Nullable;
+ *
+ * @param <T> type of rule (Boolean or Integer)
+ */
+-public final class GameRule<T> {
++public final class GameRule<T> implements net.kyori.adventure.translation.Translatable { // Paper - Adventure translations
+
+ private static Map<String, GameRule<?>> gameRules = new HashMap<>();
+ // Boolean rules
+@@ -350,4 +350,11 @@ public final class GameRule<T> {
+ public static GameRule<?>[] values() {
+ return gameRules.values().toArray(new GameRule<?>[gameRules.size()]);
+ }
++
++ // Paper start
++ @Override
++ public @NotNull String translationKey() {
++ return "gamerule." + this.name;
++ }
++ // Paper end
+ }
+diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java
+index c24fe19600fa8440c130eaea247d5874da3873ec..af1dca2385215e8fd19353aa6e9c024d4ad814e1 100644
+--- a/src/main/java/org/bukkit/Material.java
++++ b/src/main/java/org/bukkit/Material.java
+@@ -122,7 +122,7 @@ import org.jetbrains.annotations.Nullable;
+ * An enum of all material IDs accepted by the official server and client
+ */
+ @SuppressWarnings({"DeprecatedIsStillUsed", "deprecation"}) // Paper
+-public enum Material implements Keyed, Translatable {
++public enum Material implements Keyed, Translatable, net.kyori.adventure.translation.Translatable { // Paper
+ //<editor-fold desc="Materials" defaultstate="collapsed">
+ AIR(9648, 0),
+ STONE(22948),
+@@ -4699,6 +4699,15 @@ public enum Material implements Keyed, Translatable {
+ }
+ return false;
+ }
++
++ @Override
++ public @NotNull String translationKey() {
++ if (this.isItem()) {
++ return Bukkit.getUnsafe().getItemTranslationKey(this);
++ } else {
++ return Bukkit.getUnsafe().getBlockTranslationKey(this);
++ }
++ }
+ // Paper end
+
+ /**
+@@ -11402,9 +11411,11 @@ public enum Material implements Keyed, Translatable {
+ * material
+ * @see #getBlockTranslationKey()
+ * @see #getItemTranslationKey()
++ * @deprecated use {@link #translationKey()}
+ */
+ @Override
+ @NotNull
++ @Deprecated(forRemoval = true) // Paper
+ public String getTranslationKey() {
+ if (this.isItem()) {
+ return Bukkit.getUnsafe().getItemTranslationKey(this);
+diff --git a/src/main/java/org/bukkit/MusicInstrument.java b/src/main/java/org/bukkit/MusicInstrument.java
+index a7573ce8c6dff9862c97ce74650284b4a42e7989..ee5368372e136541eafe1d7ffb395de670fe4843 100644
+--- a/src/main/java/org/bukkit/MusicInstrument.java
++++ b/src/main/java/org/bukkit/MusicInstrument.java
+@@ -7,7 +7,7 @@ import java.util.Collections;
+ import org.jetbrains.annotations.NotNull;
+ import org.jetbrains.annotations.Nullable;
+
+-public abstract class MusicInstrument implements Keyed {
++public abstract class MusicInstrument implements Keyed, net.kyori.adventure.translation.Translatable { // Paper - translation keys
+
+ public static final MusicInstrument PONDER = getInstrument("ponder_goat_horn");
+ public static final MusicInstrument SING = getInstrument("sing_goat_horn");
+@@ -52,4 +52,11 @@ public abstract class MusicInstrument implements Keyed {
+
+ return instrument;
+ }
++
++ // Paper start - translation key
++ @Override
++ public @NotNull String translationKey() {
++ return "instrument.minecraft." + this.getKey().value();
++ }
++ // Paper end - translation key
+ }
+diff --git a/src/main/java/org/bukkit/Translatable.java b/src/main/java/org/bukkit/Translatable.java
+index e3faa2c675c85a9cbdbbb1debec0ff81c58a1bbd..fd1629c2d2028a88fb3d56b0aeb833d17235080a 100644
+--- a/src/main/java/org/bukkit/Translatable.java
++++ b/src/main/java/org/bukkit/Translatable.java
+@@ -5,14 +5,18 @@ import org.jetbrains.annotations.NotNull;
+ /**
+ * Represents an object with a text representation that can be translated by the
+ * Minecraft client.
++ * @deprecated use {@link net.kyori.adventure.translation.Translatable}
+ */
++@Deprecated(forRemoval = true) // Paper
+ public interface Translatable {
+
+ /**
+ * Get the translation key, suitable for use in a translation component.
+ *
+ * @return the translation key
++ * @deprecated look for a {@code translationKey()} method instead
+ */
+ @NotNull
++ @Deprecated(forRemoval = true) // Paper
+ String getTranslationKey();
+ }
+diff --git a/src/main/java/org/bukkit/attribute/Attribute.java b/src/main/java/org/bukkit/attribute/Attribute.java
+index 36501052de5ad0b80aa1dcbe97d44dd3204f749b..37f93b7e9f722e76631c3e7d3e770526ee0c3926 100644
+--- a/src/main/java/org/bukkit/attribute/Attribute.java
++++ b/src/main/java/org/bukkit/attribute/Attribute.java
+@@ -7,7 +7,7 @@ import org.jetbrains.annotations.NotNull;
+ /**
+ * Types of attributes which may be present on an {@link Attributable}.
+ */
+-public enum Attribute implements Keyed {
++public enum Attribute implements Keyed, net.kyori.adventure.translation.Translatable { // Paper - Adventure translations
+
+ /**
+ * Maximum health of an Entity.
+@@ -77,4 +77,10 @@ public enum Attribute implements Keyed {
+ public NamespacedKey getKey() {
+ return key;
+ }
++ // Paper start
++ @Override
++ public @NotNull String translationKey() {
++ return "attribute.name." + this.key.getKey();
++ }
++ // Paper end
+ }
+diff --git a/src/main/java/org/bukkit/block/Biome.java b/src/main/java/org/bukkit/block/Biome.java
+index d3087d60378822cdd7cea25fd63d3f496e3cd2fb..5d8fa5b39a5d50cca48ba63af3a84b80f279b649 100644
+--- a/src/main/java/org/bukkit/block/Biome.java
++++ b/src/main/java/org/bukkit/block/Biome.java
+@@ -8,7 +8,7 @@ import org.jetbrains.annotations.NotNull;
+ /**
+ * Holds all accepted Biomes in the default server
+ */
+-public enum Biome implements Keyed {
++public enum Biome implements Keyed, net.kyori.adventure.translation.Translatable { // Paper
+ OCEAN,
+ PLAINS,
+ DESERT,
+@@ -89,4 +89,11 @@ public enum Biome implements Keyed {
+ public NamespacedKey getKey() {
+ return key;
+ }
++
++ // Paper start
++ @Override
++ public @NotNull String translationKey() {
++ return "biome.minecraft." + this.key.getKey();
++ }
++ // Paper end
+ }
+diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
+index bf29d9b733afc7c62725d259f4920c4f211cc6d0..1d3812db989a55b6f31bb30dffe70323eb592a15 100644
+--- a/src/main/java/org/bukkit/block/Block.java
++++ b/src/main/java/org/bukkit/block/Block.java
+@@ -32,7 +32,7 @@ import org.jetbrains.annotations.Nullable;
+ * (i.e. lighting and power) may not be able to be safely accessed during world
+ * generation when used in cases like BlockPhysicsEvent!!!!
+ */
+-public interface Block extends Metadatable, Translatable {
++public interface Block extends Metadatable, Translatable, net.kyori.adventure.translation.Translatable { // Paper - translatable
+
+ /**
+ * Gets the metadata for this block
+@@ -682,5 +682,12 @@ public interface Block extends Metadatable, Translatable {
+ * @return the sound group for this block
+ */
+ @NotNull org.bukkit.SoundGroup getBlockSoundGroup();
++
++ /**
++ * @deprecated use {@link #translationKey()}
++ */
++ @NotNull
++ @Deprecated(forRemoval = true)
++ String getTranslationKey();
+ // Paper end
+ }
+diff --git a/src/main/java/org/bukkit/enchantments/Enchantment.java b/src/main/java/org/bukkit/enchantments/Enchantment.java
+index 6a915b5b41daa5ea64913a2d5c611a6167168395..4a88198be6634b47fc51e55acc5f6415e4aff1ab 100644
+--- a/src/main/java/org/bukkit/enchantments/Enchantment.java
++++ b/src/main/java/org/bukkit/enchantments/Enchantment.java
+@@ -13,7 +13,7 @@ import org.jetbrains.annotations.Nullable;
+ /**
+ * The various type of enchantments that may be added to armour or weapons
+ */
+-public abstract class Enchantment implements Keyed {
++public abstract class Enchantment implements Keyed, net.kyori.adventure.translation.Translatable { // Paper - Adventure translations
+ /**
+ * Provides protection against environmental damage
+ */
+diff --git a/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java b/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java
+index c4f86ba1037f3f0e5d697a0962d71d6f8c7c1fbe..ac0371285370594d4de1554871b19bbcd2311730 100644
+--- a/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java
++++ b/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java
+@@ -26,5 +26,10 @@ public abstract class EnchantmentWrapper extends Enchantment {
+ public net.kyori.adventure.text.Component displayName(int level) {
+ return getEnchantment().displayName(level);
+ }
++
++ @Override
++ public @NotNull String translationKey() {
++ return getEnchantment().translationKey();
++ }
+ // Paper end
+ }
+diff --git a/src/main/java/org/bukkit/entity/EntityType.java b/src/main/java/org/bukkit/entity/EntityType.java
+index a4578c520aa1078a741aac4b12fe89bf82b3c465..550d66e0d41878717c6a92caade4a8413674f012 100644
+--- a/src/main/java/org/bukkit/entity/EntityType.java
++++ b/src/main/java/org/bukkit/entity/EntityType.java
+@@ -24,7 +24,7 @@ import org.jetbrains.annotations.Contract;
+ import org.jetbrains.annotations.NotNull;
+ import org.jetbrains.annotations.Nullable;
+
+-public enum EntityType implements Keyed, Translatable {
++public enum EntityType implements Keyed, Translatable, net.kyori.adventure.translation.Translatable { // Paper - translatable
+
+ // These strings MUST match the strings in nms.EntityTypes and are case sensitive.
+ /**
+@@ -443,10 +443,22 @@ public enum EntityType implements Keyed, Translatable {
+
+ @Override
+ @NotNull
++ @Deprecated(forRemoval = true) // Paper
+ public String getTranslationKey() {
+ return Bukkit.getUnsafe().getTranslationKey(this);
+ }
+
++ // Paper start
++ /**
++ * @throws IllegalArgumentException if the entity does not have a translation key (is probably a custom entity)
++ */
++ @Override
++ public @NotNull String translationKey() {
++ Preconditions.checkArgument(this != UNKNOWN, "UNKNOWN entities do not have translation keys");
++ return org.bukkit.Bukkit.getUnsafe().getTranslationKey(this);
++ }
++ // Paper end
++
+ /**
+ * Gets if this EntityType is enabled by feature in a world.
+ *
+diff --git a/src/main/java/org/bukkit/entity/Villager.java b/src/main/java/org/bukkit/entity/Villager.java
+index d841d94d46462e0ceb7c6b04cc8fc36792bd9201..8c8176121cafed0ed09239b6a7b392dc846438e2 100644
+--- a/src/main/java/org/bukkit/entity/Villager.java
++++ b/src/main/java/org/bukkit/entity/Villager.java
+@@ -160,7 +160,7 @@ public interface Villager extends AbstractVillager {
+ * Represents the various different Villager professions there may be.
+ * Villagers have different trading options depending on their profession,
+ */
+- public enum Profession implements Keyed {
++ public enum Profession implements Keyed, net.kyori.adventure.translation.Translatable { // Paper
+ NONE,
+ /**
+ * Armorer profession. Wears a black apron. Armorers primarily trade for
+@@ -243,6 +243,13 @@ public interface Villager extends AbstractVillager {
+ public NamespacedKey getKey() {
+ return key;
+ }
++
++ // Paper start
++ @Override
++ public @NotNull String translationKey() {
++ return "entity.minecraft.villager." + this.key.getKey();
++ }
++ // Paper end
+ }
+
+ // Paper start - Add villager reputation API
+diff --git a/src/main/java/org/bukkit/inventory/CreativeCategory.java b/src/main/java/org/bukkit/inventory/CreativeCategory.java
+index 5bd252c0ae3b09fe141d131360c67bb9bfbf5422..78587d9fabe6371a23a7963917b054dbe7603694 100644
+--- a/src/main/java/org/bukkit/inventory/CreativeCategory.java
++++ b/src/main/java/org/bukkit/inventory/CreativeCategory.java
+@@ -3,51 +3,64 @@ package org.bukkit.inventory;
+ /**
+ * Represents a category in the creative inventory.
+ */
+-public enum CreativeCategory {
++public enum CreativeCategory implements net.kyori.adventure.translation.Translatable { // Paper
+
+ /**
+ * An assortment of building blocks including dirt, bricks, planks, ores
+ * slabs, etc.
+ */
+- BUILDING_BLOCKS,
++ BUILDING_BLOCKS("buildingBlocks"), // Paper
+ /**
+ * Blocks and items typically used for decorative purposes including
+ * candles, saplings, flora, fauna, fences, walls, carpets, etc.
+ */
+- DECORATIONS,
++ DECORATIONS("decorations"), // Paper
+ /**
+ * Blocks used and associated with redstone contraptions including buttons,
+ * levers, pressure plates, redstone components, pistons, etc.
+ */
+- REDSTONE,
++ REDSTONE("redstone"), // Paper
+ /**
+ * Items pertaining to transportation including minecarts, rails, boats,
+ * elytra, etc.
+ */
+- TRANSPORTATION,
++ TRANSPORTATION("transportation"), // Paper
+ /**
+ * Miscellaneous items and blocks that do not fit into other categories
+ * including gems, dyes, spawn eggs, discs, banner patterns, etc.
+ */
+- MISC,
++ MISC("misc"), // Paper
+ /**
+ * Food items consumable by the player including meats, berries, edible
+ * drops from creatures, etc.
+ */
+- FOOD,
++ FOOD("food"), // Paper
+ /**
+ * Equipment items meant for general utility including pickaxes, axes, hoes,
+ * flint and steel, and useful enchantment books for said tools.
+ */
+- TOOLS,
++ TOOLS("tools"), // Paper
+ /**
+ * Equipment items meant for combat including armor, swords, bows, tipped
+ * arrows, and useful enchantment books for said equipment.
+ */
+- COMBAT,
++ COMBAT("combat"), // Paper
+ /**
+ * All items related to brewing and potions including all types of potions,
+ * their variants, and ingredients to brew them.
+ */
+- BREWING;
++ BREWING("brewing"); // Paper
++ // Paper start
++ private final String translationKey;
++
++ CreativeCategory(String translationKey) {
++ this.translationKey = "itemGroup." + translationKey;
++ }
++
++ @Override
++ public @org.jetbrains.annotations.NotNull String translationKey() {
++ return this.translationKey;
++ }
++ // Paper end
++
+ }
+diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
+index 1f31ff5b85217a1c631f05f43c5a65839a36b26e..1532b3e1b655a9b58588c11b80824ed4cec8c66a 100644
+--- a/src/main/java/org/bukkit/inventory/ItemStack.java
++++ b/src/main/java/org/bukkit/inventory/ItemStack.java
+@@ -25,7 +25,7 @@ import org.jetbrains.annotations.Nullable;
+ * use this class to encapsulate Materials for which {@link Material#isItem()}
+ * returns false.</b>
+ */
+-public class ItemStack implements Cloneable, ConfigurationSerializable, Translatable, net.kyori.adventure.text.event.HoverEventSource<net.kyori.adventure.text.event.HoverEvent.ShowItem> { // Paper
++public class ItemStack implements Cloneable, ConfigurationSerializable, Translatable, net.kyori.adventure.text.event.HoverEventSource<net.kyori.adventure.text.event.HoverEvent.ShowItem>, net.kyori.adventure.translation.Translatable { // Paper
+ private Material type = Material.AIR;
+ private int amount = 0;
+ private MaterialData data = null;
+@@ -617,6 +617,7 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
+
+ @Override
+ @NotNull
++ @Deprecated(forRemoval = true) // Paper
+ public String getTranslationKey() {
+ return Bukkit.getUnsafe().getTranslationKey(this);
+ }
+@@ -876,5 +877,16 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
+ ItemMeta itemMeta = getItemMeta();
+ return itemMeta != null && itemMeta.hasItemFlag(flag);
+ }
++
++ /**
++ * {@inheritDoc}
++ * <p>
++ * This is not the same as getting the translation key
++ * for the material of this itemstack.
++ */
++ @Override
++ public @NotNull String translationKey() {
++ return Bukkit.getUnsafe().getTranslationKey(this);
++ }
+ // Paper end
+ }