From 2fdafa225ef90cf67dbdaa813a87393bfa0d6833 Mon Sep 17 00:00:00 2001 From: aroooo Date: Tue, 1 Nov 2022 21:28:28 +0100 Subject: [PATCH] feat(i18n): localize internals and more --- .../net/artelnatif/nicko/NickoBukkit.java | 8 +++++ .../nicko/disguise/AppearanceManager.java | 5 +-- .../nicko/event/PlayerJoinListener.java | 6 +++- .../java/net/artelnatif/nicko/i18n/I18N.java | 8 +++-- .../net/artelnatif/nicko/i18n/I18NDict.java | 35 +++++++++++++++++++ .../net/artelnatif/nicko/impl/Internals.java | 3 +- .../src/main/resources/locale_en.properties | 8 ++++- .../src/main/resources/locale_fr.properties | 8 ++++- .../net/artelnatif/nicko/impl/v1_18_R1.java | 14 +++++--- .../net/artelnatif/nicko/impl/v1_18_R2.java | 14 +++++--- .../net/artelnatif/nicko/impl/v1_19_R1.java | 14 +++++--- 11 files changed, 99 insertions(+), 24 deletions(-) create mode 100644 nicko-core/src/main/java/net/artelnatif/nicko/i18n/I18NDict.java 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 688878e..3190d78 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/NickoBukkit.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/NickoBukkit.java @@ -1,5 +1,8 @@ package net.artelnatif.nicko; +import de.studiocode.invui.gui.structure.Structure; +import de.studiocode.invui.item.builder.ItemBuilder; +import de.studiocode.invui.item.impl.SimpleItem; import net.artelnatif.nicko.bungee.NickoBungee; import net.artelnatif.nicko.command.NickoCommand; import net.artelnatif.nicko.command.NickoTabCompleter; @@ -14,6 +17,7 @@ import net.artelnatif.nicko.mojang.MojangAPI; import net.artelnatif.nicko.pluginchannel.UpdateMessageHandler; import net.artelnatif.nicko.storage.PlayerDataStore; import net.artelnatif.nicko.utils.ServerUtils; +import org.bukkit.Material; import org.bukkit.command.PluginCommand; import org.bukkit.plugin.java.JavaPlugin; @@ -57,6 +61,10 @@ public class NickoBukkit extends JavaPlugin { getServer().getPluginManager().registerEvents(new PlayerJoinListener(), this); getServer().getPluginManager().registerEvents(new PlayerQuitListener(), this); + getLogger().info("Setting GUI defaults..."); + Structure.addGlobalIngredient('#', new SimpleItem(new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE))); + Structure.addGlobalIngredient('%', new SimpleItem(new ItemBuilder(Material.ORANGE_STAINED_GLASS_PANE))); + getLogger().info("Loading persistence..."); dataStore = new PlayerDataStore(this); diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java b/nicko-core/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java index 654a906..5a6d197 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java @@ -1,5 +1,6 @@ package net.artelnatif.nicko.disguise; +import io.vavr.control.Either; import net.artelnatif.nicko.NickoBukkit; import net.artelnatif.nicko.storage.PlayerDataStore; import org.bukkit.Bukkit; @@ -65,7 +66,7 @@ public class AppearanceManager { updatePlayer(true); } - public void updatePlayer(boolean skinChange) { - NickoBukkit.getInstance().getInternals().updateProfile(player, profile, skinChange); + public Either updatePlayer(boolean skinChange) { + return NickoBukkit.getInstance().getInternals().updateProfile(player, profile, skinChange); } } 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 71ff57d..cda48be 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 @@ -2,6 +2,8 @@ package net.artelnatif.nicko.event; import net.artelnatif.nicko.NickoBukkit; import net.artelnatif.nicko.disguise.AppearanceManager; +import net.artelnatif.nicko.i18n.I18N; +import net.artelnatif.nicko.i18n.I18NDict; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -17,7 +19,9 @@ public class PlayerJoinListener implements Listener { if (appearanceManager.hasData()) { final boolean skinChange = !player.getName().equals(appearanceManager.getSkin()); - appearanceManager.updatePlayer(skinChange); + appearanceManager.updatePlayer(skinChange).peek(unused -> player.sendMessage(I18N.translate(player, I18NDict.Event.PREVIOUS_SKIN_APPLIED.getKey()))).peekLeft(s -> { + player.sendMessage(I18N.translate(player, s)); + }); } }, 20L); } 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 29557ca..6cf617c 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 @@ -13,7 +13,9 @@ public class I18N { private static Locale getLocale(Player player) { try { - return LocaleUtils.toLocale(player.getLocale().substring(0, 1)); + System.out.println("player.getLocale() = " + player.getLocale()); + System.out.println("player.getLocale().substring(0, 2) = " + player.getLocale().substring(0, 2)); + return LocaleUtils.toLocale(player.getLocale().substring(0, 2)); } catch (IllegalArgumentException exception) { NickoBukkit.getInstance().getLogger().severe("Invalid locale provided, defaulting to " + Locale.getDefault().getDisplayName() + "."); return Locale.getDefault(); @@ -27,9 +29,9 @@ public class I18N { public static String translate(Player player, String key, Object... arguments) { try { formatter.applyPattern(getBundle(player).getString(key)); - return formatter.format(arguments); + return NickoBukkit.getInstance().getNickoConfig().getPrefix() + formatter.format(arguments); } catch (Exception e) { - return key; + return NickoBukkit.getInstance().getNickoConfig().getPrefix() + key; } } } 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 new file mode 100644 index 0000000..216f91d --- /dev/null +++ b/nicko-core/src/main/java/net/artelnatif/nicko/i18n/I18NDict.java @@ -0,0 +1,35 @@ +package net.artelnatif.nicko.i18n; + +public class I18NDict { + public enum Event { + PREVIOUS_SKIN_APPLIED("previous_skin_applied.ok"), + PREVIOUS_SKIN_APPLY_FAIL("previous_skin_applied.fail"); + + private final String messageKey; + + Event(String messageKey) { + this.messageKey = "event." + messageKey; + } + + public String getKey() { + return messageKey; + } + } + + public enum Error { + SKIN_FAIL_MOJANG("couldnt_get_skin_from_mojang"), + SKIN_FAIL_CACHE("couldnt_get_skin_from_cache"), + NAME_FAIL_MOJANG("couldnt_get_name_from_mojang"), + UNEXPECTED_ERROR("generic"); + + private final String messageKey; + + Error(String messageKey) { + this.messageKey = "error." + messageKey; + } + + public String getKey() { + return messageKey; + } + } +} diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/impl/Internals.java b/nicko-core/src/main/java/net/artelnatif/nicko/impl/Internals.java index 7a319af..226fdf9 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/impl/Internals.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/impl/Internals.java @@ -1,10 +1,11 @@ package net.artelnatif.nicko.impl; +import io.vavr.control.Either; import net.artelnatif.nicko.disguise.NickoProfile; import org.bukkit.entity.Player; public interface Internals { void updateSelf(Player player); void updateOthers(Player player); - void updateProfile(Player player, NickoProfile profile, boolean skinChange); + Either updateProfile(Player player, NickoProfile profile, boolean skinChange); } diff --git a/nicko-core/src/main/resources/locale_en.properties b/nicko-core/src/main/resources/locale_en.properties index 2efe6d1..90442a7 100644 --- a/nicko-core/src/main/resources/locale_en.properties +++ b/nicko-core/src/main/resources/locale_en.properties @@ -1 +1,7 @@ -player.offline="§c{0} §fis offline, please try again." \ No newline at end of file +event.previous_skin_applied.ok=§2Applied your previous disguise back. +event.previous_skin_applied.fail=§cFailed to apply your §2previous §cdisguise back. +player.offline=§c{0} §fis offline, please try again. +error.generic=§cAn unknown error occured. Please contact the developer. +error.couldnt_get_name_from_mojang=§cFailed to get username from Mojang. Does the user exists? +error.couldnt_get_skin_from_mojang=§cFailed to get skin from Mojang. +error.couldnt_get_skin_from_cache=§cFailed to get skin from cache. \ No newline at end of file diff --git a/nicko-core/src/main/resources/locale_fr.properties b/nicko-core/src/main/resources/locale_fr.properties index ef29bc5..344076a 100644 --- a/nicko-core/src/main/resources/locale_fr.properties +++ b/nicko-core/src/main/resources/locale_fr.properties @@ -1 +1,7 @@ -player.offline="§c{0} §fest hors-ligne, veuillez réessayer." \ No newline at end of file +event.previous_skin_applied.ok=§2Déguisement précédent appliqué. +event.previous_skin_applied.fail=§cImpossible d'appliquer votre déguisement précédent. +player.offline=§c{0} §fest hors-ligne, veuillez réessayer. +error.generic=§cUne erreur inconnue est survenue. Veuillez contacter le développeur. +error.couldnt_get_name_from_mojang=§cImpossible de récupérer le nom d'utilisateur depuis Mojang. Cet utilisateur existe-il? +error.couldnt_get_skin_from_mojang=§cImpossible de récupérer le skin depuis Mojang. +error.couldnt_get_skin_from_cache=§cImpossible de récupérer le skin depuis le cache. \ No newline at end of file diff --git a/v1_18_R1/src/main/java/net/artelnatif/nicko/impl/v1_18_R1.java b/v1_18_R1/src/main/java/net/artelnatif/nicko/impl/v1_18_R1.java index 19e7a7f..8f14ff2 100644 --- a/v1_18_R1/src/main/java/net/artelnatif/nicko/impl/v1_18_R1.java +++ b/v1_18_R1/src/main/java/net/artelnatif/nicko/impl/v1_18_R1.java @@ -3,8 +3,10 @@ package net.artelnatif.nicko.impl; import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; import com.mojang.authlib.properties.PropertyMap; +import io.vavr.control.Either; import net.artelnatif.nicko.NickoBukkit; import net.artelnatif.nicko.disguise.NickoProfile; +import net.artelnatif.nicko.i18n.I18NDict; import net.artelnatif.nicko.mojang.MojangSkin; import net.minecraft.network.chat.IChatBaseComponent; import net.minecraft.network.protocol.game.*; @@ -82,7 +84,7 @@ public class v1_18_R1 implements Internals { } @Override - public void updateProfile(Player player, NickoProfile profile, boolean skinChange) { + public Either updateProfile(Player player, NickoProfile profile, boolean skinChange) { final CraftPlayer craftPlayer = (CraftPlayer) player; final EntityPlayer entityPlayer = craftPlayer.getHandle(); Optional skin; @@ -102,16 +104,17 @@ public class v1_18_R1 implements Internals { final PropertyMap properties = gameProfile.getProperties(); properties.put("textures", new Property("textures", skin.get().value(), skin.get().signature())); updateSelf(player); + return Either.right(null); } else { - player.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cFailed to get skin from Mojang."); + return Either.left(I18NDict.Error.SKIN_FAIL_MOJANG.getKey()); } } else { - player.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cFailed to get username from Mojang. Does the user exists?"); + return Either.left(I18NDict.Error.NAME_FAIL_MOJANG.getKey()); } } catch (IOException e) { - player.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cAn error occurred."); + return Either.left(I18NDict.Error.UNEXPECTED_ERROR.getKey()); } catch (ExecutionException e) { - player.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cFailed to get skin from cache."); + return Either.left(I18NDict.Error.SKIN_FAIL_CACHE.getKey()); } } @@ -127,5 +130,6 @@ public class v1_18_R1 implements Internals { onlineEntityPlayer.b.a(add); }); updateOthers(player); + return Either.right(null); } } diff --git a/v1_18_R2/src/main/java/net/artelnatif/nicko/impl/v1_18_R2.java b/v1_18_R2/src/main/java/net/artelnatif/nicko/impl/v1_18_R2.java index 6775f40..ba3bf55 100644 --- a/v1_18_R2/src/main/java/net/artelnatif/nicko/impl/v1_18_R2.java +++ b/v1_18_R2/src/main/java/net/artelnatif/nicko/impl/v1_18_R2.java @@ -3,8 +3,10 @@ package net.artelnatif.nicko.impl; import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; import com.mojang.authlib.properties.PropertyMap; +import io.vavr.control.Either; import net.artelnatif.nicko.NickoBukkit; import net.artelnatif.nicko.disguise.NickoProfile; +import net.artelnatif.nicko.i18n.I18NDict; import net.artelnatif.nicko.mojang.MojangSkin; import net.minecraft.core.Holder; import net.minecraft.network.chat.IChatBaseComponent; @@ -82,7 +84,7 @@ public class v1_18_R2 implements Internals { } @Override - public void updateProfile(Player player, NickoProfile profile, boolean skinChange) { + public Either updateProfile(Player player, NickoProfile profile, boolean skinChange) { final CraftPlayer craftPlayer = (CraftPlayer) player; final EntityPlayer entityPlayer = craftPlayer.getHandle(); Optional skin; @@ -102,16 +104,17 @@ public class v1_18_R2 implements Internals { final PropertyMap properties = gameProfile.getProperties(); properties.put("textures", new Property("textures", skin.get().value(), skin.get().signature())); updateSelf(player); + return Either.right(null); } else { - player.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cFailed to get skin from Mojang."); + return Either.left(I18NDict.Error.SKIN_FAIL_MOJANG.getKey()); } } else { - player.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cFailed to get username from Mojang. Does the user exists?"); + return Either.left(I18NDict.Error.NAME_FAIL_MOJANG.getKey()); } } catch (IOException e) { - player.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cAn error occurred."); + return Either.left(I18NDict.Error.UNEXPECTED_ERROR.getKey()); } catch (ExecutionException e) { - player.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cFailed to get skin from cache."); + return Either.left(I18NDict.Error.SKIN_FAIL_CACHE.getKey()); } } @@ -127,5 +130,6 @@ public class v1_18_R2 implements Internals { onlineEntityPlayer.b.a(add); }); updateOthers(player); + return null; } } diff --git a/v1_19_R1/src/main/java/net/artelnatif/nicko/impl/v1_19_R1.java b/v1_19_R1/src/main/java/net/artelnatif/nicko/impl/v1_19_R1.java index b3b76fd..526bba2 100644 --- a/v1_19_R1/src/main/java/net/artelnatif/nicko/impl/v1_19_R1.java +++ b/v1_19_R1/src/main/java/net/artelnatif/nicko/impl/v1_19_R1.java @@ -3,8 +3,10 @@ package net.artelnatif.nicko.impl; import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; import com.mojang.authlib.properties.PropertyMap; +import io.vavr.control.Either; import net.artelnatif.nicko.NickoBukkit; import net.artelnatif.nicko.disguise.NickoProfile; +import net.artelnatif.nicko.i18n.I18NDict; import net.artelnatif.nicko.mojang.MojangSkin; import net.minecraft.network.chat.IChatBaseComponent; import net.minecraft.network.protocol.game.*; @@ -83,7 +85,7 @@ public class v1_19_R1 implements Internals { } @Override - public void updateProfile(Player player, NickoProfile profile, boolean skinChange) { + public Either updateProfile(Player player, NickoProfile profile, boolean skinChange) { final CraftPlayer craftPlayer = (CraftPlayer) player; final EntityPlayer entityPlayer = craftPlayer.getHandle(); Optional skin; @@ -103,16 +105,17 @@ public class v1_19_R1 implements Internals { final PropertyMap properties = gameProfile.getProperties(); properties.put("textures", new Property("textures", skin.get().value(), skin.get().signature())); updateSelf(player); + return Either.right(null); } else { - player.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cFailed to get skin from Mojang."); + return Either.left(I18NDict.Error.SKIN_FAIL_MOJANG.getKey()); } } else { - player.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cFailed to get username from Mojang. Does the user exists?"); + return Either.left(I18NDict.Error.NAME_FAIL_MOJANG.getKey()); } } catch (IOException e) { - player.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cAn error occurred."); + return Either.left(I18NDict.Error.UNEXPECTED_ERROR.getKey()); } catch (ExecutionException e) { - player.sendMessage(NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§cFailed to get skin from cache."); + return Either.left(I18NDict.Error.SKIN_FAIL_CACHE.getKey()); } } @@ -130,5 +133,6 @@ public class v1_19_R1 implements Internals { onlineEntityPlayer.b.a(add); }); updateOthers(player); + return Either.right(null); } }