From bc4a5663db28ff9f35d640de08ad0942ff5380e9 Mon Sep 17 00:00:00 2001 From: WakelessSloth56 Date: Tue, 8 Nov 2022 17:30:11 +0800 Subject: [PATCH] feat(game.language): LanguageUtils --- .../command/argument/LanguageArgument.java | 11 +-- .../game/language/LanguageUtils.java | 84 ++++++++++++++++--- 2 files changed, 76 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/auioc/mcmod/arnicalib/game/command/argument/LanguageArgument.java b/src/main/java/org/auioc/mcmod/arnicalib/game/command/argument/LanguageArgument.java index 2fb1ed5c..650fb611 100644 --- a/src/main/java/org/auioc/mcmod/arnicalib/game/command/argument/LanguageArgument.java +++ b/src/main/java/org/auioc/mcmod/arnicalib/game/command/argument/LanguageArgument.java @@ -1,9 +1,9 @@ package org.auioc.mcmod.arnicalib.game.command.argument; import java.util.concurrent.CompletableFuture; -import java.util.stream.Stream; import org.auioc.mcmod.arnicalib.ArnicaLib; import org.auioc.mcmod.arnicalib.game.chat.TextUtils; +import org.auioc.mcmod.arnicalib.game.language.LanguageUtils; import com.mojang.brigadier.StringReader; import com.mojang.brigadier.arguments.ArgumentType; import com.mojang.brigadier.context.CommandContext; @@ -11,7 +11,6 @@ import com.mojang.brigadier.exceptions.DynamicCommandExceptionType; import com.mojang.brigadier.suggestion.Suggestions; import com.mojang.brigadier.suggestion.SuggestionsBuilder; -import net.minecraft.client.Minecraft; import net.minecraft.client.resources.language.LanguageInfo; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.SharedSuggestionProvider; @@ -36,16 +35,12 @@ public static LanguageInfo getLanguage(CommandContext ctx, S @Override public LanguageInfo parse(StringReader reader) throws CommandSyntaxException { String code = reader.readString(); - return getLanguages().filter((langInfo) -> langInfo.getCode().equals(code)).findAny().orElseThrow(() -> UNKNOWN_LANGUAGE.create(code)); + return LanguageUtils.getInfo(code).orElseThrow(() -> UNKNOWN_LANGUAGE.create(code)); } @Override public CompletableFuture listSuggestions(CommandContext context, SuggestionsBuilder builder) { - return SharedSuggestionProvider.suggest(getLanguages().map(LanguageInfo::getCode), builder); - } - - private static Stream getLanguages() { - return Minecraft.getInstance().getLanguageManager().getLanguages().stream(); + return SharedSuggestionProvider.suggest(LanguageUtils.getInfoCodes(), builder); } } diff --git a/src/main/java/org/auioc/mcmod/arnicalib/game/language/LanguageUtils.java b/src/main/java/org/auioc/mcmod/arnicalib/game/language/LanguageUtils.java index 75acc2de..252b1cfa 100644 --- a/src/main/java/org/auioc/mcmod/arnicalib/game/language/LanguageUtils.java +++ b/src/main/java/org/auioc/mcmod/arnicalib/game/language/LanguageUtils.java @@ -1,6 +1,9 @@ package org.auioc.mcmod.arnicalib.game.language; +import java.util.IllegalFormatException; import java.util.List; +import java.util.Optional; +import java.util.SortedSet; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.language.ClientLanguage; import net.minecraft.client.resources.language.LanguageInfo; @@ -10,22 +13,81 @@ @OnlyIn(Dist.CLIENT) public class LanguageUtils { - public static final LanguageInfo DEFAULT_LANGUAGE = new LanguageInfo("en_us", "US", "English", false); + private static final Minecraft MC = Minecraft.getInstance(); - public static ClientLanguage getLanguage(LanguageInfo langInfo) { - return ClientLanguage.loadFrom( - Minecraft.getInstance().getResourceManager(), - List.of(langInfo) - ); + public static final LanguageInfo DEFAULT_LANGUAGE_INFO = new LanguageInfo("en_us", "US", "English", false); + + public static final String[] VANILLA_LANGUAGES = new String[] { + "af_za", "ar_sa", "ast_es", "az_az", "ba_ru", "bar", "be_by", "bg_bg", "br_fr", "brb", "bs_ba", "ca_es", + "cs_cz", "cy_gb", "da_dk", "de_at", "de_ch", "de_de", "el_gr", "en_au", "en_ca", "en_gb", "en_nz", "en_pt", + "en_ud", "en_us", "enp", "enws", "eo_uy", "es_ar", "es_cl", "es_ec", "es_es", "es_mx", "es_uy", "es_ve", "esan", + "et_ee", "eu_es", "fa_ir", "fi_fi", "fil_ph", "fo_fo", "fr_ca", "fr_fr", "fra_de", "fur_it", "fy_nl", "ga_ie", + "gd_gb", "gl_es", "haw_us", "he_il", "hi_in", "hr_hr", "hu_hu", "hy_am", "id_id", "ig_ng", "io_en", "is_is", + "isv", "it_it", "ja_jp", "jbo_en", "ka_ge", "kk_kz", "kn_in", "ko_kr", "ksh", "kw_gb", "la_la", "lb_lu", + "li_li", "lmo", "lol_us", "lt_lt", "lv_lv", "lzh", "mk_mk", "mn_mn", "ms_my", "mt_mt", "nds_de", "nl_be", + "nl_nl", "nn_no", "no_no", "oc_fr", "ovd", "pl_pl", "pt_br", "pt_pt", "qya_aa", "ro_ro", "rpr", "ru_ru", + "ry_ua", "se_no", "sk_sk", "sl_si", "so_so", "sq_al", "sr_sp", "sv_se", "sxu", "szl", "ta_in", "th_th", "tl_ph", + "tlh_aa", "tok", "tr_tr", "tt_ru", "uk_ua", "val_es", "vec_it", "vi_vn", "yi_de", "yo_ng", "zh_cn", "zh_hk", + "zh_tw", "zlm_arab" + }; + + + public static SortedSet getInfo() { + return MC.getLanguageManager().getLanguages(); + } + + public static Optional getInfo(String code) { + return Optional.ofNullable(MC.getLanguageManager().getLanguage(code)); + } + + public static LanguageInfo getCurrentInfo() { + return MC.getLanguageManager().getSelected(); + } + + public static String[] getInfoCodes() { + return getInfo().stream().map(LanguageInfo::getCode).toArray(String[]::new); + } + + + public static ClientLanguage get(LanguageInfo langInfo) { + return ClientLanguage.loadFrom(MC.getResourceManager(), List.of(langInfo)); } - public static ClientLanguage getLanguage(String langCode) { - var langInfo = Minecraft.getInstance().getLanguageManager().getLanguage(langCode); - if (langInfo == null) { - langInfo = DEFAULT_LANGUAGE; + public static ClientLanguage get(String langCode) { + return getLanguage(getInfo(langCode).orElse(DEFAULT_LANGUAGE_INFO)); + } + + + public static String getString(ClientLanguage language, String key, Object... args) { + String s = language.getOrDefault(key); + try { + return String.format(s, args); + } catch (IllegalFormatException illegalformatexception) { + return "Format error: " + s; } + } + + public static String getString(ClientLanguage language, String key) { + return language.getOrDefault(key); + } - return getLanguage(langInfo); + + /* ============================================================================================================== */ + // #region Deprecated + + @Deprecated(since = "5.6.5", forRemoval = true) + public static final LanguageInfo DEFAULT_LANGUAGE = DEFAULT_LANGUAGE_INFO; + + @Deprecated(since = "5.6.5", forRemoval = true) + public static ClientLanguage getLanguage(LanguageInfo info) { + return get(info); } + @Deprecated(since = "5.6.5", forRemoval = true) + public static ClientLanguage getLanguage(String code) { + return get(code); + } + + // #endregion Deprecated + }