From 9becdff0bc851b07379ba5379424ba2e6aefaa1e Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Thu, 27 Mar 2025 04:25:53 +0800 Subject: [PATCH] refactor lang system --- .../default/configuration/blocks.yml | 11 ---- .../resources/default/configuration/ores.yml | 2 - .../default/configuration/palm_tree.yml | 7 --- .../default/configuration/plants.yml | 14 ++++- .../bukkit/block/BukkitBlockManager.java | 23 ------- .../bukkit/block/BukkitCustomBlock.java | 21 ------- .../plugin/network/BukkitNetworkManager.java | 16 ++--- .../craftengine/core/block/BlockSettings.java | 15 +++++ .../craftengine/core/block/CustomBlock.java | 23 ++----- .../core/plugin/locale/ClientLangManager.java | 33 ++++++++++ .../plugin/locale/ClientLangMangerImpl.java | 62 +++++++------------ .../plugin/locale/TranslationManager.java | 6 -- .../plugin/locale/TranslationManagerImpl.java | 42 ++----------- .../core/plugin/minimessage/I18NTag.java | 2 +- 14 files changed, 100 insertions(+), 177 deletions(-) diff --git a/bukkit/loader/src/main/resources/resources/default/configuration/blocks.yml b/bukkit/loader/src/main/resources/resources/default/configuration/blocks.yml index 83a7c0c52..4d4511447 100644 --- a/bukkit/loader/src/main/resources/resources/default/configuration/blocks.yml +++ b/bukkit/loader/src/main/resources/resources/default/configuration/blocks.yml @@ -12,7 +12,6 @@ items#misc: behavior: type: block_item block: - name: "i18n:item.chinese_lantern" loot: template: "default:loot_table/basic" arguments: @@ -54,7 +53,6 @@ items#misc: behavior: type: block_item block: - name: "i18n:item.netherite_anvil" loot: template: "default:loot_table/basic" arguments: @@ -208,15 +206,6 @@ recipes#misc: result: id: default:chinese_lantern count: 1 - default:paper_from_reed: - type: shaped - pattern: - - "AAA" - ingredients: - A: "default:reed" - result: - id: minecraft:paper - count: 3 default:netherite_anvil: type: shaped pattern: diff --git a/bukkit/loader/src/main/resources/resources/default/configuration/ores.yml b/bukkit/loader/src/main/resources/resources/default/configuration/ores.yml index d843616f0..6d81990b6 100644 --- a/bukkit/loader/src/main/resources/resources/default/configuration/ores.yml +++ b/bukkit/loader/src/main/resources/resources/default/configuration/ores.yml @@ -42,7 +42,6 @@ items: blocks: default:topaz_ore: - name: "i18n:item.topaz_ore" loot: template: "default:loot_table/ore" arguments: @@ -64,7 +63,6 @@ blocks: arguments: path: "minecraft:block/custom/topaz_ore" default:deepslate_topaz_ore: - name: "i18n:item.deepslate_topaz_ore" loot: template: "default:loot_table/ore" arguments: diff --git a/bukkit/loader/src/main/resources/resources/default/configuration/palm_tree.yml b/bukkit/loader/src/main/resources/resources/default/configuration/palm_tree.yml index 084f69921..d5ce8c5c4 100644 --- a/bukkit/loader/src/main/resources/resources/default/configuration/palm_tree.yml +++ b/bukkit/loader/src/main/resources/resources/default/configuration/palm_tree.yml @@ -18,7 +18,6 @@ items: behavior: type: block_item block: - name: "i18n:item.palm_log" behavior: type: strippable_block stripped: default:stripped_palm_log @@ -65,7 +64,6 @@ items: behavior: type: block_item block: - name: "i18n:item.stripped_palm_log" loot: template: "default:loot_table/basic" arguments: @@ -109,7 +107,6 @@ items: behavior: type: block_item block: - name: "i18n:item.palm_wood" behavior: type: strippable_block stripped: default:stripped_palm_wood @@ -156,7 +153,6 @@ items: behavior: type: block_item block: - name: "i18n:item.stripped_palm_wood" loot: template: "default:loot_table/basic" arguments: @@ -199,7 +195,6 @@ items: behavior: type: block_item block: - name: "i18n:item.palm_planks" settings: template: "default:settings/planks" overrides: @@ -230,7 +225,6 @@ items: behavior: type: block_item block: - name: "i18n:item.palm_sapling" settings: template: "default:settings/sapling" overrides: @@ -293,7 +287,6 @@ items: behavior: type: block_item block: - name: "i18n:item.palm_leaves" behavior: type: leaves_block loot: diff --git a/bukkit/loader/src/main/resources/resources/default/configuration/plants.yml b/bukkit/loader/src/main/resources/resources/default/configuration/plants.yml index b14bc4aa3..8f4d7e973 100644 --- a/bukkit/loader/src/main/resources/resources/default/configuration/plants.yml +++ b/bukkit/loader/src/main/resources/resources/default/configuration/plants.yml @@ -25,7 +25,6 @@ items: block: default:reed blocks: default:fairy_flower: - name: "i18n:item.fairy_flower" settings: template: - default:hardness/none @@ -65,7 +64,6 @@ blocks: "0": "minecraft:block/custom/fairy_flower_4" default:reed: settings: - name: "i18n:item.reed" template: - default:hardness/none - default:sound/grass @@ -83,4 +81,14 @@ blocks: id: 1 state: sugar_cane:1 model: - path: "minecraft:block/custom/reed" \ No newline at end of file + path: "minecraft:block/custom/reed" +recipes: + default:paper_from_reed: + type: shaped + pattern: + - "AAA" + ingredients: + A: "default:reed" + result: + id: minecraft:paper + count: 3 \ No newline at end of file diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java index cc52404bc..5086fdaa2 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java @@ -453,17 +453,6 @@ public class BukkitBlockManager extends AbstractBlockManager { Map behaviorSection = MiscUtils.castToMap(section.getOrDefault("behavior", Map.of()), false); BukkitCustomBlock block = new BukkitCustomBlock(id, holder, properties, appearances, variants, settings, behaviorSection, lootTable); - // read block name - String blockName = (String) section.getOrDefault("name", null); - if (blockName != null && blockName.startsWith("i18n:")) { - plugin.translationManager().i18nData().forEach((locale, i18nData) -> { - plugin.debug(() -> "locale: " + toMinecraftLocale(locale) + ": " + i18nData.translate(blockName.substring(5))); - block.addBlockName(toMinecraftLocale(locale), i18nData.translate(blockName.substring(5))); - } - ); - } else { - block.addBlockName(blockName); - } // bind appearance bindAppearance(block); @@ -478,18 +467,6 @@ public class BukkitBlockManager extends AbstractBlockManager { } } - public static String toMinecraftLocale(Locale locale) { - String language = locale.getLanguage().toLowerCase(); - String country = locale.getCountry().toLowerCase(); - if ("en".equals(language) && country.isEmpty()) { - return "en_us"; - } - if (country.isEmpty()) { - return language; - } - return language + "_" + country; - } - private void bindAppearance(CustomBlock block) { for (ImmutableBlockState state : block.variantProvider().states()) { ImmutableBlockState previous = this.stateId2ImmutableBlockStates[state.customBlockState().registryId() - BlockStateUtils.vanillaStateSize()]; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitCustomBlock.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitCustomBlock.java index 7437b832a..1b89860b0 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitCustomBlock.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitCustomBlock.java @@ -8,7 +8,6 @@ import net.momirealms.craftengine.core.block.*; import net.momirealms.craftengine.core.block.properties.Property; import net.momirealms.craftengine.core.loot.LootTable; import net.momirealms.craftengine.core.plugin.CraftEngine; -import net.momirealms.craftengine.core.plugin.locale.I18NData; import net.momirealms.craftengine.core.registry.Holder; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.Tristate; @@ -138,24 +137,4 @@ public class BukkitCustomBlock extends CustomBlock { CraftEngine.instance().logger().warn("Failed to init block settings", e); } } - - public void addBlockName(String lang, String blockName) { - I18NData i18nData = new I18NData(); - for (ImmutableBlockState state : this.variantProvider().states()) { - try { - Object blockState = state.customBlockState().handle(); - Object block = Reflections.method$BlockStateBase$getBlock.invoke(blockState); - String translationKey = (String) Reflections.method$BlockBehaviour$getDescriptionId.invoke(block); - i18nData.addTranslation(translationKey, blockName); - } catch (Exception e) { - CraftEngine.instance().logger().warn("Failed to get the " + state.owner().value().id() + " translationKey"); - } - } - this.addBlockName(lang, i18nData); - } - - public void addBlockName(String blockName) { - if (blockName == null) return; - addBlockName("en_us", blockName); - } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java index d57cfdf3d..10a25804a 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java @@ -162,7 +162,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes @Override public Collection onlineUsers() { - return onlineUsers.values(); + return new ArrayList<>(this.onlineUsers.values()); } @Override @@ -173,22 +173,22 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes public void init() { if (init) return; try { - plugin.bootstrap().getServer().getMessenger().registerIncomingPluginChannel(plugin.bootstrap(), MOD_CHANNEL, this); - plugin.bootstrap().getServer().getMessenger().registerOutgoingPluginChannel(plugin.bootstrap(), MOD_CHANNEL); + this.plugin.bootstrap().getServer().getMessenger().registerIncomingPluginChannel(this.plugin.bootstrap(), MOD_CHANNEL, this); + this.plugin.bootstrap().getServer().getMessenger().registerOutgoingPluginChannel(this.plugin.bootstrap(), MOD_CHANNEL); Object server = Reflections.method$MinecraftServer$getServer.invoke(null); Object serverConnection = Reflections.field$MinecraftServer$connection.get(server); @SuppressWarnings("unchecked") List channels = (List) Reflections.field$ServerConnectionListener$channels.get(serverConnection); ListMonitor monitor = new ListMonitor<>(channels, (future) -> { - if (!active) return; + if (!this.active) return; Channel channel = future.channel(); injectServerChannel(channel); - injectedChannels.add(channel); + this.injectedChannels.add(channel); }, (object) -> {}); Reflections.field$ServerConnectionListener$channels.set(serverConnection, monitor); - init = true; + this.init = true; } catch (ReflectiveOperationException e) { - plugin.logger().warn("Failed to init server connection", e); + this.plugin.logger().warn("Failed to init server connection", e); } } @@ -516,7 +516,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes } } - public class PluginChannelDecoder extends MessageToMessageDecoder { + public static class PluginChannelDecoder extends MessageToMessageDecoder { private final NetWorkUser player; public PluginChannelDecoder(NetWorkUser player) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/BlockSettings.java b/core/src/main/java/net/momirealms/craftengine/core/block/BlockSettings.java index c065dbd95..a75d84b1b 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/block/BlockSettings.java +++ b/core/src/main/java/net/momirealms/craftengine/core/block/BlockSettings.java @@ -29,6 +29,7 @@ public class BlockSettings { Key itemId; Set tags = Set.of(); Set correctTools = Set.of(); + String name; private BlockSettings() {} @@ -79,6 +80,7 @@ public class BlockSettings { newSettings.correctTools = settings.correctTools; newSettings.fluidState = settings.fluidState; newSettings.blockLight = settings.blockLight; + newSettings.name = settings.name; return newSettings; } @@ -122,6 +124,10 @@ public class BlockSettings { return canOcclude; } + public String name() { + return name; + } + public MapColor mapColor() { return mapColor; } @@ -177,6 +183,11 @@ public class BlockSettings { return this; } + public BlockSettings name(String name) { + this.name = name; + return this; + } + public BlockSettings fireSpreadChance(int fireSpreadChance) { this.fireSpreadChance = fireSpreadChance; return this; @@ -370,6 +381,10 @@ public class BlockSettings { List tools = MiscUtils.getAsStringList(value); return settings -> settings.correctTools(tools.stream().map(Key::of).collect(Collectors.toSet())); })); + registerFactory("name", (value -> { + String name = value.toString(); + return settings -> settings.name(name); + })); } private static void registerFactory(String id, Modifier.Factory factory) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/CustomBlock.java b/core/src/main/java/net/momirealms/craftengine/core/block/CustomBlock.java index 89c09e11c..54727da4d 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/block/CustomBlock.java +++ b/core/src/main/java/net/momirealms/craftengine/core/block/CustomBlock.java @@ -6,7 +6,6 @@ import net.momirealms.craftengine.core.block.properties.Property; import net.momirealms.craftengine.core.item.context.BlockPlaceContext; import net.momirealms.craftengine.core.loot.LootTable; import net.momirealms.craftengine.core.plugin.CraftEngine; -import net.momirealms.craftengine.core.plugin.locale.I18NData; import net.momirealms.craftengine.core.registry.Holder; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.shared.block.BlockBehavior; @@ -15,7 +14,10 @@ import net.momirealms.sparrow.nbt.Tag; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; import java.util.function.BiFunction; public abstract class CustomBlock { @@ -28,8 +30,6 @@ public abstract class CustomBlock { protected final ImmutableBlockState defaultState; @Nullable protected final LootTable lootTable; - private Map blockName = new HashMap<>(); - public CustomBlock( @NotNull Key id, @@ -159,19 +159,4 @@ public abstract class CustomBlock { } return state; } - - public Map blockName() { - return blockName; - } - - public void addBlockName(String lang, I18NData i18NData) { - if (this.blockName == null) { - this.blockName = new HashMap<>(); - } - this.blockName.put(lang, i18NData); - } - - public void setBlockName(Map blockName) { - this.blockName = blockName; - } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/ClientLangManager.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/ClientLangManager.java index e109988f3..6412f0a35 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/ClientLangManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/ClientLangManager.java @@ -4,9 +4,40 @@ import net.momirealms.craftengine.core.pack.LoadingSequence; import net.momirealms.craftengine.core.plugin.Reloadable; import net.momirealms.craftengine.core.plugin.config.ConfigSectionParser; +import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; public interface ClientLangManager extends Reloadable, ConfigSectionParser { + Set ALL_LANG = Set.of( + "af_za", "ar_sa", "ast_es", "az_az", "ba_ru", "bar", "be_by", "be_latn", + "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", "hn_no", + "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", "ky_kg", "la_la", "lb_lu", "li_li", "lmo", "lo_la", "lol_us", "lt_lt", + "lv_lv", "lzh", "mk_mk", "mn_mn", "ms_my", "mt_mt", "nah", "nds_de", + "nl_be", "nl_nl", "nn_no", "no_no", "oc_fr", "ovd", "pl_pl", "pls", + "pt_br", "pt_pt", "qya_aa", "ro_ro", "rpr", "ru_ru", "ry_ua", "sah_sah", + "se_no", "sk_sk", "sl_si", "so_so", "sq_al", "sr_cs", "sr_sp", "sv_se", + "sxu", "szl", "ta_in", "th_th", "tl_ph", "tlh_aa", "tok", "tr_tr", + "tt_ru", "tzo_mx", "uk_ua", "val_es", "vec_it", "vi_vn", "vp_vl", "yi_de", + "yo_ng", "zh_cn", "zh_hk", "zh_tw", "zlm_arab" + ); + + Map> LOCALE_2_COUNTRIES = ALL_LANG.stream() + .map(lang -> lang.split("_")) + .filter(split -> split.length >= 2) + .collect(Collectors.groupingBy( + split -> split[0], + Collectors.mapping(split -> split[1], Collectors.toUnmodifiableList()) + )); + String CONFIG_SECTION_NAME = "lang"; Map langData(); @@ -20,4 +51,6 @@ public interface ClientLangManager extends Reloadable, ConfigSectionParser { default String sectionId() { return CONFIG_SECTION_NAME; } + + void addTranslation(String langId, Map translations); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/ClientLangMangerImpl.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/ClientLangMangerImpl.java index b6bd0310f..79ff5ec2b 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/ClientLangMangerImpl.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/ClientLangMangerImpl.java @@ -11,25 +11,6 @@ import java.util.stream.Collectors; public class ClientLangMangerImpl implements ClientLangManager { private final Plugin plugin; private final Map i18nData = new HashMap<>(); - private final Set allLang = Set.of( - "af_za", "ar_sa", "ast_es", "az_az", "ba_ru", "bar", "be_by", "be_latn", - "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", "hn_no", - "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", "lo_la", "lol_us", "lt_lt", - "lv_lv", "lzh", "mk_mk", "mn_mn", "ms_my", "mt_mt", "nah", "nds_de", - "nl_be", "nl_nl", "nn_no", "no_no", "oc_fr", "ovd", "pl_pl", "pls", - "pt_br", "pt_pt", "qya_aa", "ro_ro", "rpr", "ru_ru", "ry_ua", "sah_sah", - "se_no", "sk_sk", "sl_si", "so_so", "sq_al", "sr_cs", "sr_sp", "sv_se", - "sxu", "szl", "ta_in", "th_th", "tl_ph", "tlh_aa", "tok", "tr_tr", - "tt_ru", "tzo_mx", "uk_ua", "val_es", "vec_it", "vi_vn", "vp_vl", "yi_de", - "yo_ng", "zh_cn", "zh_hk", "zh_tw", "zlm_arab", "ky_kg" - ); public ClientLangMangerImpl(Plugin plugin) { this.plugin = plugin; @@ -50,29 +31,32 @@ public class ClientLangMangerImpl implements ClientLangManager { entry -> String.valueOf(entry.getValue()) )); - if ("all".equals(langId)) { - allLang.forEach(lang -> { - I18NData data = new I18NData(); - data.translations.putAll(sectionData); - i18nData.put(lang, data); - }); - return; - } - - if (allLang.contains(langId)) { - i18nData.computeIfAbsent(langId, k -> new I18NData()) - .addTranslations(sectionData); - } + addTranslation(langId, sectionData); } @Override public Map langData() { - this.plugin.blockManager().blocks().forEach((key, block) -> { - Map blockName = block.blockName(); - if (blockName != null) { - I18NData.merge(i18nData, blockName); - } - }); - return Collections.unmodifiableMap(i18nData); + return Collections.unmodifiableMap(this.i18nData); + } + + @Override + public void addTranslation(String langId, Map translations) { + if ("all".equals(langId)) { + ALL_LANG.forEach(lang -> this.i18nData.computeIfAbsent(lang, k -> new I18NData()) + .addTranslations(translations)); + return; + } + + if (ALL_LANG.contains(langId)) { + this.i18nData.computeIfAbsent(langId, k -> new I18NData()) + .addTranslations(translations); + return; + } + + List langCountries = LOCALE_2_COUNTRIES.getOrDefault(langId, Collections.emptyList()); + for (String lang : langCountries) { + this.i18nData.computeIfAbsent(langId + "_" + lang, k -> new I18NData()) + .addTranslations(translations); + } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/TranslationManager.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/TranslationManager.java index 637fb75e9..53a983f65 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/TranslationManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/TranslationManager.java @@ -8,7 +8,6 @@ import net.momirealms.craftengine.core.plugin.config.ConfigSectionParser; import org.jetbrains.annotations.Nullable; import java.util.Locale; -import java.util.Map; public interface TranslationManager extends Reloadable, ConfigSectionParser { String CONFIG_SECTION_NAME = "i18n"; @@ -27,8 +26,6 @@ public interface TranslationManager extends Reloadable, ConfigSectionParser { String miniMessageTranslation(String key, @Nullable Locale locale); - String translateI18NTag(String i18nId); - default Component render(Component component) { return render(component, null); } @@ -39,8 +36,6 @@ public interface TranslationManager extends Reloadable, ConfigSectionParser { return locale == null || locale.isEmpty() ? null : Translator.parseLocale(locale); } - Map i18nData(); - @Override default int loadingSequence() { return LoadingSequence.TRANSLATION; @@ -50,5 +45,4 @@ public interface TranslationManager extends Reloadable, ConfigSectionParser { default String sectionId() { return CONFIG_SECTION_NAME; } - } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/TranslationManagerImpl.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/TranslationManagerImpl.java index 43f99aa67..b27b1b526 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/TranslationManagerImpl.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/TranslationManagerImpl.java @@ -33,7 +33,6 @@ public class TranslationManagerImpl implements TranslationManager { private final Plugin plugin; private final Set installed = ConcurrentHashMap.newKeySet(); private final Path translationsDirectory; - private final Map i18nData = new HashMap<>(); private final ClientLangManager clientLangManager; private final String langVersion; private final String[] supportedLanguages; @@ -66,7 +65,6 @@ public class TranslationManagerImpl implements TranslationManager { @Override public void reload() { // clear old data - this.i18nData.clear(); this.clientLangManager.reload(); // remove any previous registry @@ -90,9 +88,6 @@ public class TranslationManagerImpl implements TranslationManager { private void setSelectedLocale() { if (this.forcedLocale != null) { this.selectedLocale = forcedLocale; - if (!this.installed.contains(forcedLocale)) { - this.plugin.logger().warn("The forced locale is set to " + forcedLocale + ", but it is not available."); - } return; } @@ -213,31 +208,6 @@ public class TranslationManagerImpl implements TranslationManager { return Pair.of(locale, bundle); } - @Override - public String translateI18NTag(String i18nId) { - I18NData data = this.i18nData.get(this.selectedLocale); - String translation = getI18NOrNull(data, i18nId); - if (translation != null) return translation; - Locale lang = Locale.of(selectedLocale.getLanguage()); - if (!this.selectedLocale.equals(lang)) { - data = this.i18nData.get(lang); - translation = getI18NOrNull(data, i18nId); - if (translation != null) return translation; - } - I18NData fallback = this.i18nData.get(DEFAULT_LOCALE); - if (fallback != null) { - translation = fallback.translate(i18nId); - return translation == null ? i18nId : translation; - } - return i18nId; - } - - @Nullable - private String getI18NOrNull(I18NData data, String i18nId) { - if (data == null) return null; - return data.translate(i18nId); - } - @Override public void parseSection(Pack pack, Path path, net.momirealms.craftengine.core.util.Key id, Map section) { Locale locale = TranslationManager.parseLocale(id.value()); @@ -245,11 +215,14 @@ public class TranslationManagerImpl implements TranslationManager { throw new IllegalStateException("Unknown locale '" + id.value() + "' - unable to register."); } - I18NData data = this.i18nData.computeIfAbsent(locale, k -> new I18NData()); + Map bundle = new HashMap<>(); for (Map.Entry entry : section.entrySet()) { String key = entry.getKey(); - data.addTranslation(key, entry.getValue().toString()); + bundle.put(key, entry.getValue().toString()); } + + this.registry.registerAll(locale, bundle); + this.installed.add(locale); } @Override @@ -277,9 +250,4 @@ public class TranslationManagerImpl implements TranslationManager { return newFileContents; } } - - @Override - public Map i18nData() { - return Collections.unmodifiableMap(this.i18nData); - } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/minimessage/I18NTag.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/minimessage/I18NTag.java index d40f6a8ad..2af7a01e9 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/minimessage/I18NTag.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/minimessage/I18NTag.java @@ -23,7 +23,7 @@ public class I18NTag implements TagResolver { return null; } String i18nKey = arguments.popOr("No argument i18n key provided").toString(); - String translation = TranslationManager.instance().translateI18NTag(i18nKey); + String translation = TranslationManager.instance().miniMessageTranslation(i18nKey); return Tag.inserting(AdventureHelper.miniMessage().deserialize(translation, this.context.tagResolvers())); }