diff --git a/nicko-core/dependency-reduced-pom.xml b/nicko-core/dependency-reduced-pom.xml index d5378cc..817f08a 100644 --- a/nicko-core/dependency-reduced-pom.xml +++ b/nicko-core/dependency-reduced-pom.xml @@ -34,16 +34,21 @@ net.wesjd:anvilgui de.studiocode.invui:* + com.github.jsixface:* net.wesjd.anvilgui - net.artelnatif.anvilgui + net.artelnatif.libs.anvilgui de.studiocode.invui - net.artelnatif.invui + net.artelnatif.libs.invui + + + com.github.jsixface + net.artelnatif.libs.yaml false diff --git a/nicko-core/pom.xml b/nicko-core/pom.xml index 53ac089..5863a5c 100644 --- a/nicko-core/pom.xml +++ b/nicko-core/pom.xml @@ -105,7 +105,12 @@ mariadb-java-client 3.1.0 - + + + com.github.jsixface + yamlconfig + 1.1.1 + @@ -130,16 +135,21 @@ net.wesjd:anvilgui de.studiocode.invui:* + com.github.jsixface:* net.wesjd.anvilgui - net.artelnatif.anvilgui + net.artelnatif.libs.anvilgui de.studiocode.invui - net.artelnatif.invui + net.artelnatif.libs.invui + + + com.github.jsixface + net.artelnatif.libs.yaml diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/NickoBukkit.java b/nicko-core/src/main/java/net/artelnatif/nicko/NickoBukkit.java index 8da0185..d2abf9f 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/NickoBukkit.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/NickoBukkit.java @@ -107,9 +107,7 @@ public class NickoBukkit extends JavaPlugin { localeFileManager = new LocaleFileManager(); if (config.isCustomLocale()) { if (localeFileManager.dumpFromLocale(Locale.ENGLISH)) { - if (localeFileManager.loadValues()) { - getLogger().info("Successfully loaded custom language file."); - } + getLogger().info("Successfully loaded custom language file."); } else { getLogger().warning("Failed to load custom language file!"); } diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/anvil/AnvilManager.java b/nicko-core/src/main/java/net/artelnatif/nicko/anvil/AnvilManager.java index 2e1897f..fd1b5ce 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/anvil/AnvilManager.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/anvil/AnvilManager.java @@ -60,9 +60,9 @@ public class AnvilManager { appearanceManager.setName(response); final ActionResult actionResult = appearanceManager.updatePlayer(false); if (!actionResult.isError()) { - player.sendMessage(I18N.translate(player, I18NDict.Event.DISGUISE_SUCCESS)); + player.sendMessage(I18N.translate(player, I18NDict.Event.Disguise.SUCCESS)); } else { - player.sendMessage(I18N.translate(player, I18NDict.Event.DISGUISE_FAIL, I18N.translateWithoutPrefix(player, actionResult.getErrorMessage()))); + player.sendMessage(I18N.translate(player, I18NDict.Event.Disguise.FAIL, I18N.translateWithoutPrefix(player, actionResult.getErrorMessage()))); } return AnvilGUI.Response.close(); } @@ -81,9 +81,9 @@ public class AnvilManager { appearanceManager.setSkin(response); final ActionResult actionResult = appearanceManager.updatePlayer(true); if (!actionResult.isError()) { - player.sendMessage(I18N.translate(player, I18NDict.Event.DISGUISE_SUCCESS)); + player.sendMessage(I18N.translate(player, I18NDict.Event.Disguise.SUCCESS)); } else { - player.sendMessage(I18N.translate(player, I18NDict.Event.DISGUISE_FAIL, I18N.translateWithoutPrefix(player, actionResult.getErrorMessage()))); + player.sendMessage(I18N.translate(player, I18NDict.Event.Disguise.FAIL, I18N.translateWithoutPrefix(player, actionResult.getErrorMessage()))); } return AnvilGUI.Response.close(); } diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/event/PlayerJoinListener.java b/nicko-core/src/main/java/net/artelnatif/nicko/event/PlayerJoinListener.java index b431e10..d11c7f7 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/event/PlayerJoinListener.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/event/PlayerJoinListener.java @@ -24,9 +24,9 @@ public class PlayerJoinListener implements Listener { if (appearanceManager.hasData()) { final ActionResult actionResult = appearanceManager.updatePlayer(appearanceManager.needsASkinChange()); if (!actionResult.isError()) { - player.sendMessage(I18N.translate(player, I18NDict.Event.PREVIOUS_SKIN_APPLIED)); + player.sendMessage(I18N.translate(player, I18NDict.Event.PreviousSkin.SUCCESS)); } else { - player.sendMessage(I18N.translate(player, I18NDict.Event.PREVIOUS_SKIN_APPLY_FAIL, I18N.translate(player, actionResult.getErrorMessage()))); + player.sendMessage(I18N.translate(player, I18NDict.Event.PreviousSkin.FAIL, I18N.translate(player, actionResult.getErrorMessage()))); } } }, 20L); diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/gui/AdminPanelGUI.java b/nicko-core/src/main/java/net/artelnatif/nicko/gui/AdminPanelGUI.java index d7586ab..9526943 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/gui/AdminPanelGUI.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/gui/AdminPanelGUI.java @@ -5,7 +5,6 @@ import de.studiocode.invui.gui.builder.GUIBuilder; import de.studiocode.invui.gui.builder.guitype.GUIType; import de.studiocode.invui.gui.structure.Structure; import de.studiocode.invui.window.impl.single.SimpleWindow; -import net.artelnatif.nicko.gui.items.admin.ReloadLanguageFileItem; import net.artelnatif.nicko.gui.items.common.BackItem; import org.bukkit.entity.Player; @@ -15,12 +14,11 @@ public class AdminPanelGUI { public AdminPanelGUI(Player player) { final Structure structure = new Structure("# # # # # # # # #", - "# % % P U L % % #", + "# % % P U # % % #", "B # # # # # # # #"); structure.addIngredient('B', new BackItem(new MainGUI(player).getGUI())); this.gui = new GUIBuilder<>(GUIType.NORMAL) .setStructure(structure) - .addIngredient('L', new ReloadLanguageFileItem()) .build(); this.player = player; } diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/admin/ReloadLanguageFileItem.java b/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/admin/ReloadLanguageFileItem.java deleted file mode 100644 index 5df1f9c..0000000 --- a/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/admin/ReloadLanguageFileItem.java +++ /dev/null @@ -1,38 +0,0 @@ -package net.artelnatif.nicko.gui.items.admin; - -import de.studiocode.invui.item.ItemProvider; -import de.studiocode.invui.item.builder.ItemBuilder; -import de.studiocode.invui.item.impl.BaseItem; -import net.artelnatif.nicko.NickoBukkit; -import net.artelnatif.nicko.i18n.I18N; -import net.artelnatif.nicko.i18n.I18NDict; -import org.bukkit.Material; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemFlag; -import org.jetbrains.annotations.NotNull; - -public class ReloadLanguageFileItem extends BaseItem { - @Override - public ItemProvider getItemProvider() { - return new ItemBuilder(Material.BOOK) - .addEnchantment(Enchantment.DAMAGE_ALL, 1, false) - .addItemFlags(ItemFlag.HIDE_ENCHANTS) - .setDisplayName("§fReload Language File"); - } - - @Override - public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { - if (clickType.isLeftClick() || clickType.isRightClick()) { - event.getView().close(); - final boolean success = NickoBukkit.getInstance().getLocaleFileManager().loadValues(); - if (success) { - player.sendMessage(I18N.translate(player, I18NDict.Plugin.CUSTOM_LANGUAGE_RELOAD_SUCCESS)); - } else { - player.sendMessage(I18N.translate(player, I18NDict.Plugin.CUSTOM_LANGUAGE_RELOAD_FAIL)); - } - } - } -} \ No newline at end of file diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/main/ResetItem.java b/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/main/ResetItem.java index 5ed6bbb..9f6f651 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/main/ResetItem.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/main/ResetItem.java @@ -27,15 +27,15 @@ public class ResetItem extends BaseItem { final AppearanceManager appearanceManager = AppearanceManager.get(player); if (!appearanceManager.hasData()) { - player.sendMessage(I18N.translate(player, I18NDict.Event.UNDISGUISE_NOTACTIVE)); + player.sendMessage(I18N.translate(player, I18NDict.Event.Undisguise.NONE)); event.getView().close(); return; } if (!appearanceManager.reset().isError()) { - player.sendMessage(I18N.translate(player, I18NDict.Event.UNDISGUISE_SUCCESS)); + player.sendMessage(I18N.translate(player, I18NDict.Event.Undisguise.SUCCESS)); } else { - player.sendMessage(I18N.translate(player, I18NDict.Event.UNDISGUISE_FAIL)); + player.sendMessage(I18N.translate(player, I18NDict.Event.Undisguise.FAIL)); } } } diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/settings/LanguageCyclingItem.java b/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/settings/LanguageCyclingItem.java index 29cc6be..c7de942 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/settings/LanguageCyclingItem.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/settings/LanguageCyclingItem.java @@ -21,15 +21,21 @@ public class LanguageCyclingItem { getItemProviderForLocale(Locale.CUSTOM), }; + private final ItemProvider[] providersNoCustom = new ItemProvider[]{ + getItemProviderForLocale(Locale.ENGLISH), + getItemProviderForLocale(Locale.FRENCH) + }; + public BaseItem get(Player player) { - Optional profile = NickoBukkit.getInstance().getDataStore().getData(player.getUniqueId()); + final NickoBukkit instance = NickoBukkit.getInstance(); + Optional profile = instance.getDataStore().getData(player.getUniqueId()); if (profile.isPresent()) { final NickoProfile nickoProfile = profile.get(); int localeOrdinal = nickoProfile.getLocale().ordinal(); return CycleItem.withStateChangeHandler((observer, integer) -> { nickoProfile.setLocale(Locale.values()[integer]); observer.playSound(player, Sound.UI_BUTTON_CLICK, 1f, 0.707107f); // 0.707107 ~= C - }, localeOrdinal, providers); + }, localeOrdinal, instance.getNickoConfig().isCustomLocale() ? providers : providersNoCustom); } return new SimpleItem(ItemProvider.EMPTY); diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/i18n/I18N.java b/nicko-core/src/main/java/net/artelnatif/nicko/i18n/I18N.java index 69a2aed..3597f2f 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/i18n/I18N.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/i18n/I18N.java @@ -1,12 +1,13 @@ package net.artelnatif.nicko.i18n; +import com.github.jsixface.YamlConfig; import net.artelnatif.nicko.NickoBukkit; import net.artelnatif.nicko.disguise.NickoProfile; import org.bukkit.entity.Player; import org.yaml.snakeyaml.Yaml; +import java.io.InputStream; import java.text.MessageFormat; -import java.util.HashMap; import java.util.Optional; public class I18N { @@ -51,10 +52,11 @@ public class I18N { final Locale locale = getLocale(player); String translation; if (locale == Locale.CUSTOM) { - translation = instance.getLocaleFileManager().getFromFile(key.key()); + translation = instance.getLocaleFileManager().get(key.key()); } else { - final HashMap values = yaml.load(instance.getResource(locale.getCode() + ".yml")); - translation = values.getOrDefault(key.key(), key.key()); + final InputStream resource = instance.getResource(locale.getCode() + ".yml"); + final YamlConfig yamlConfig = YamlConfig.load(resource); + translation = yamlConfig.getString(key.key()); } return translation; diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/i18n/I18NDict.java b/nicko-core/src/main/java/net/artelnatif/nicko/i18n/I18NDict.java index deebc55..2c545eb 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/i18n/I18NDict.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/i18n/I18NDict.java @@ -2,13 +2,21 @@ package net.artelnatif.nicko.i18n; public record I18NDict(String key) { public static class Event { - public static final I18NDict UNDISGUISE_SUCCESS = new I18NDict("event.undisguise.success"); - public static final I18NDict UNDISGUISE_FAIL = new I18NDict("event.undisguise.fail"); - public static final I18NDict UNDISGUISE_NOTACTIVE = new I18NDict("event.undisguise.notactive"); - public static final I18NDict DISGUISE_SUCCESS = new I18NDict("event.disguise.success"); - public static final I18NDict DISGUISE_FAIL = new I18NDict("event.disguise.fail"); - public static final I18NDict PREVIOUS_SKIN_APPLIED = new I18NDict("event.previous_skin_applied.success"); - public static final I18NDict PREVIOUS_SKIN_APPLY_FAIL = new I18NDict("event.previous_skin_applied.fail"); + public static class Disguise { + public static final I18NDict SUCCESS = new I18NDict("event.disguise.success"); + public static final I18NDict FAIL = new I18NDict("event.disguise.fail"); + } + + public static class Undisguise { + public static final I18NDict SUCCESS = new I18NDict("event.undisguise.success"); + public static final I18NDict FAIL = new I18NDict("event.undisguise.fail"); + public static final I18NDict NONE = new I18NDict("event.undisguise.none"); + } + + public static class PreviousSkin { + public static final I18NDict SUCCESS = new I18NDict("event.previous_skin_applied.success"); + public static final I18NDict FAIL = new I18NDict("event.previous_skin_applied.fail"); + } } public static class Plugin { diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/i18n/LocaleFileManager.java b/nicko-core/src/main/java/net/artelnatif/nicko/i18n/LocaleFileManager.java index dc2e396..b80de9d 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/i18n/LocaleFileManager.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/i18n/LocaleFileManager.java @@ -1,5 +1,6 @@ package net.artelnatif.nicko.i18n; +import com.github.jsixface.YamlConfig; import net.artelnatif.nicko.NickoBukkit; import org.yaml.snakeyaml.Yaml; @@ -11,23 +12,16 @@ public class LocaleFileManager { private final File folder = new File(NickoBukkit.getInstance().getDataFolder() + "/lang/"); private final File file = new File(folder, "lang.yml"); - private HashMap data = new HashMap<>(); - - public boolean loadValues() { - if (!file.exists()) return true; + public String get(String key) { + if (!file.exists()) return key; try (BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(file))) { - data = yaml.load(inputStream); - return true; + final YamlConfig yamlConfig = YamlConfig.load(inputStream); + return yamlConfig.getString(key); } catch (IOException e) { - return false; + return key; } } - public String getFromFile(String key) { - if (!file.exists() || data.isEmpty()) return key; - return data.get(key); - } - public boolean dumpFromLocale(Locale locale) { if (locale == Locale.CUSTOM) return true; if (file.exists()) return true; diff --git a/nicko-core/src/main/resources/en.yml b/nicko-core/src/main/resources/en.yml index 22b55dd..9034f67 100644 --- a/nicko-core/src/main/resources/en.yml +++ b/nicko-core/src/main/resources/en.yml @@ -17,5 +17,5 @@ event: success: "§aYour previous active disguise has been applied back." undisguise: fail: "§cUnable to remove your disguise. It will be set back to default on your next login. Sorry!" - notactive: "§cYou do not have an active disguise." + none: "§cYou do not have an active disguise." success: "§aDisguise removed." \ No newline at end of file diff --git a/nicko-core/src/main/resources/fr.yml b/nicko-core/src/main/resources/fr.yml index e200af4..3efa83b 100644 --- a/nicko-core/src/main/resources/fr.yml +++ b/nicko-core/src/main/resources/fr.yml @@ -17,5 +17,5 @@ event: success: "§aVotre précédent déguisement a été réappliqué." undisguise: fail: "§cImpossible de retier votre déguisement. Il sera remis par défaut à votre prochaine reconnexion. Désolé !" - notactive: "§cVous n'avez pas de déguisement." + none: "§cVous n'avez pas de déguisement." success: "§aDéguisement retiré." \ No newline at end of file