package hdvtdev.blockAndSeek; import hdvtdev.blockAndSeek.managers.ConfigManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import net.kyori.adventure.title.Title; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import java.util.Collections; import java.util.Map; public class Localization { private static volatile Map> localization = Collections.unmodifiableMap(ConfigManager.getLocalization()); private static final MiniMessage miniMessage = MiniMessage.miniMessage(); private static final PlainTextComponentSerializer plainText = PlainTextComponentSerializer.plainText(); private static final Component prefix = miniMessage.deserialize("[BlockAndSeek] "); private static final Component empty = Component.empty(); public static void update() { localization = Collections.unmodifiableMap(ConfigManager.getLocalization()); } public static ItemStack translateItem(@NotNull Player player, @NotNull ItemStack itemStack, @NotNull String... replacements) { ItemStack translatedItem = itemStack.clone(); ItemMeta itemMeta = translatedItem.getItemMeta(); String key = plainText.serialize(itemMeta.displayName()); itemMeta.displayName(getComponent(player.locale().toLanguageTag(), key, replacements)); translatedItem.setItemMeta(itemMeta); return translatedItem; } public static void sendMessage(@NotNull Iterable players, boolean addPrefix, @NotNull String key, @NotNull String... replacements) { for (Player player : players) { sendMessage(player, addPrefix, key, replacements); } } public static void sendMessage(@NotNull Player player, boolean addPrefix, @NotNull String key, @NotNull String... replacements) { Component component = getComponent(player.locale().toLanguageTag(), key, replacements); player.sendMessage(addPrefix ? prefix.append(component) : component); } public static void sendActionBar(@NotNull Iterable players, boolean addPrefix, @NotNull String key, @NotNull String... replacements) { for (Player player : players) { sendActionBar(player, addPrefix, key, replacements); } } @Deprecated public static String get(String a) { return ""; } @Deprecated public static Component getComponent(String a) { return empty; } @Deprecated public static Component getComponentWithPrefix(String... a) { return empty; } public static void sendActionBar(@NotNull Player player, boolean addPrefix, @NotNull String key, @NotNull String... replacements) { Component component = getComponent(player.locale().toLanguageTag(), key, replacements); player.sendActionBar(addPrefix ? prefix.append(component) : component); } public static void sendTitle(@NotNull Iterable players, boolean addPrefix, @NotNull String key, @NotNull String... replacements) { for (Player player : players) { sendTitle(player, addPrefix, key, replacements); } } public static void sendTitle(@NotNull Player player, boolean addPrefix, @NotNull String key, @NotNull String... replacements) { Component component = getComponent(player.locale().toLanguageTag(), key, replacements); player.showTitle(Title.title(addPrefix ? prefix.append(component) : component, empty)); } public static @NotNull Component getComponent(@NotNull Player p, @NotNull String key, @NotNull String... replacements) { return getComponent(p.locale().toLanguageTag(), key, replacements); } public static @NotNull Component getComponent(@NotNull String lang, @NotNull String key, @NotNull String... replacements) { return miniMessage.deserialize(get(lang, key, replacements)); } public static @NotNull String get(@NotNull String lang, @NotNull String key, @NotNull String... replacements) { String s = localization.getOrDefault(lang, localization.get("en-US")).get(key); if (s != null) { for (int i = 0; i < replacements.length; i += 2) { s = s.replace(replacements[i], replacements[i + 1]); } } else return "Unknown localization: " + key; return s; } }