diff --git a/patches/api/0054-Language-API.patch b/patches/api/0054-Language-API.patch new file mode 100644 index 000000000..1fbe2ebee --- /dev/null +++ b/patches/api/0054-Language-API.patch @@ -0,0 +1,72 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: MelnCat +Date: Sat, 1 Oct 2022 17:08:23 -0700 +Subject: [PATCH] Language API + + +diff --git a/src/main/java/org/purpurmc/purpur/language/Language.java b/src/main/java/org/purpurmc/purpur/language/Language.java +new file mode 100644 +index 0000000000000000000000000000000000000000..38483d908ed830e97883733bee2370f87060f4c7 +--- /dev/null ++++ b/src/main/java/org/purpurmc/purpur/language/Language.java +@@ -0,0 +1,60 @@ ++package org.purpurmc.purpur.language; ++ ++import net.kyori.adventure.translation.Translatable; ++import org.jetbrains.annotations.NotNull; ++ ++/** ++ * Represents a language that can translate translation keys ++ */ ++public abstract class Language { ++ private static Language language; ++ ++ /** ++ * Returns the default language of the server ++ */ ++ @NotNull ++ public static Language getLanguage() { ++ return language; ++ } ++ ++ public static void setLanguage(@NotNull Language language) { ++ if (Language.language != null) { ++ throw new UnsupportedOperationException("Cannot redefine singleton Language"); ++ } ++ Language.language = language; ++ } ++ ++ /** ++ * Checks if a certain translation key is translatable with this language ++ * @param key The translation key ++ * @return Whether this language can translate the key ++ */ ++ abstract public boolean has(@NotNull String key); ++ ++ /** ++ * Checks if a certain translation key is translatable with this language ++ * @param key The translation key ++ * @return Whether this language can translate the key ++ */ ++ public boolean has(@NotNull Translatable key) { ++ return has(key.translationKey()); ++ } ++ ++ /** ++ * Translates a translation key to this language ++ * @param key The translation key ++ * @return The translated key, or the translation key if it couldn't be translated ++ */ ++ @NotNull ++ abstract public String getOrDefault(@NotNull String key); ++ ++ /** ++ * Translates a translation key to this language ++ * @param key The translation key ++ * @return The translated key, or the translation key if it couldn't be translated ++ */ ++ @NotNull ++ public String getOrDefault(@NotNull Translatable key) { ++ return getOrDefault(key.translationKey()); ++ } ++} diff --git a/patches/server/0308-Language-API.patch b/patches/server/0308-Language-API.patch new file mode 100644 index 000000000..b121d1996 --- /dev/null +++ b/patches/server/0308-Language-API.patch @@ -0,0 +1,39 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: MelnCat +Date: Sat, 1 Oct 2022 17:08:43 -0700 +Subject: [PATCH] Language API + + +diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java +index e9c20441e37db68d500c230a4371610f98c69428..f9508a26b2e764e752da3d2c9f43a9d7de19dd27 100644 +--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java ++++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java +@@ -238,6 +238,7 @@ import org.bukkit.scoreboard.Criteria; + import org.bukkit.structure.StructureManager; + import org.bukkit.util.StringUtil; + import org.bukkit.util.permissions.DefaultPermissions; ++import org.jetbrains.annotations.NotNull; + import org.yaml.snakeyaml.Yaml; + import org.yaml.snakeyaml.constructor.SafeConstructor; + import org.yaml.snakeyaml.error.MarkedYAMLException; +@@ -307,6 +308,20 @@ public final class CraftServer implements Server { + this.structureManager = new CraftStructureManager(console.getStructureManager()); + + Bukkit.setServer(this); ++ // Purpur start ++ org.purpurmc.purpur.language.Language.setLanguage(new org.purpurmc.purpur.language.Language() { ++ private net.minecraft.locale.Language language = net.minecraft.locale.Language.getInstance(); ++ @Override ++ public boolean has(@NotNull String key) { ++ return language.has(key); ++ } ++ ++ @Override ++ public @NotNull String getOrDefault(@NotNull String key) { ++ return language.getOrDefault(key); ++ } ++ }); ++ // Purpur end + + // Register all the Enchantments and PotionTypes now so we can stop new registration immediately after + Enchantments.SHARPNESS.getClass();