From 2ef53764778e50157987e13f8397dfa1198cffcd Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Fri, 20 Mar 2026 20:50:53 +0100 Subject: [PATCH 01/20] translate city.actions package --- .../city/actions/CityChangeAction.java | 43 ++++++----- .../city/actions/CityChestAction.java | 5 +- .../city/actions/CityClaimAction.java | 21 ++++-- .../city/actions/CityCreateAction.java | 31 ++++---- .../city/actions/CityDeleteAction.java | 12 ++-- .../features/city/actions/CityKickAction.java | 23 +++++- .../city/actions/CityLeaveAction.java | 19 ++++- .../city/actions/CityTransferAction.java | 27 +++++-- .../city/actions/CityUnclaimAction.java | 10 +-- .../resources/translations/lang.properties | 72 ++++++++++++++++++- 10 files changed, 206 insertions(+), 57 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/city/actions/CityChangeAction.java b/src/main/java/fr/openmc/core/features/city/actions/CityChangeAction.java index 8576473ab..c79019290 100644 --- a/src/main/java/fr/openmc/core/features/city/actions/CityChangeAction.java +++ b/src/main/java/fr/openmc/core/features/city/actions/CityChangeAction.java @@ -16,6 +16,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.NamespacedKey; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeModifier; @@ -35,24 +36,26 @@ public static void beginChangeCity(Player player, CityType typeChange) { if (!CityTypeConditions.canCityChangeType(city, player, typeChange)) return; if (typeChange.equals(CityType.WAR) && !FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.TYPE_WAR)) { - MessagesManager.sendMessage(player, Component.text("Vous n'avez pas débloqué cette feature ! Veuillez améliorer votre ville au niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.TYPE_WAR) + "!"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("messages.city.havent_unlocked_feature", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.TYPE_WAR))), + Prefix.CITY, MessageType.ERROR, false); return; } - String cityTypeActuel; - String cityTypeAfter; - cityTypeActuel = city.getType() == CityType.WAR ? "§cen guerre§7" : "§aen paix§7"; - cityTypeAfter = city.getType() == CityType.WAR ? "§aen paix§7" : "§cen guerre§7"; + Component inPeace = TranslationManager.translation("feature.city.type.in_peace").color(NamedTextColor.GREEN); + Component inWar = TranslationManager.translation("feature.city.type.in_war").color(NamedTextColor.RED); + Component cityTypeActuel = city.getType() == CityType.WAR ? inWar : inPeace; + Component cityTypeAfter = city.getType() == CityType.WAR ? inPeace : inWar; List confirmLore = new ArrayList<>(); - confirmLore.add(Component.text("§cEs-tu sûr de vouloir changer le type de ta §dville §7?")); - confirmLore.add(Component.text("§7Vous allez passez d'une §dville " + cityTypeActuel + " à une §dville " + cityTypeAfter)); + confirmLore.add(TranslationManager.translation("feature.city.type.confirm_change")); + confirmLore.add(TranslationManager.translation("feature.city.type.change_type_to_type", cityTypeActuel, cityTypeAfter)); if (typeChange == CityType.WAR) { confirmLore.add(Component.empty()); - confirmLore.add(Component.text("§c⚠ Vous pourrez être exposé à des guerres contre d'autres villes à tout moment !")); + confirmLore.add(TranslationManager.translation("feature.city.type.warning_war")); } confirmLore.add(Component.empty()); - confirmLore.add(Component.text("§c⚠ Ta mascotte §4§lperdera 1 niveau !")); + confirmLore.add(TranslationManager.translation("feature.city.type.mascot_losing_level")); ConfirmMenu menu = new ConfirmMenu( player, @@ -63,7 +66,7 @@ public static void beginChangeCity(Player player, CityType typeChange) { player::closeInventory, confirmLore, List.of( - Component.text("§7Ne pas changer le §dtype de ville") + TranslationManager.translation("feature.city.type.not_change_type") ) ); menu.open(); @@ -82,17 +85,21 @@ public static void finishChange(Player sender) { Mascot mascot = city.getMascot(); if (mascot == null) { - MessagesManager.sendMessage(sender, Component.text("Vous n'avez pas de mascotte pour changer le type de votre ville (contactez le staff)"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.type.mascot_not_exist_change_type"), + Prefix.CITY, MessageType.ERROR, false); return; } if (!mascot.isAlive()) { - MessagesManager.sendMessage(sender, Component.text("Votre mascotte doit être en vie pour changer le type de ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.type.mascot_must_by_alive_change_type"), + Prefix.CITY, MessageType.ERROR, false); return; } if (!DynamicCooldownManager.isReady(city.getUniqueId(), "city:type")) { - MessagesManager.sendMessage(sender, Component.text("Vous devez attendre " + DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(city.getUniqueId(), "city:type")) + " avant de changer de type de ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.type.must_wait_before_change_type", + Component.text(DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(city.getUniqueId(), "city:type")))), + Prefix.CITY, MessageType.ERROR, false); return; } @@ -128,9 +135,13 @@ public static void finishChange(Player sender) { throw new RuntimeException(e); } - String cityTypeActuel = city.getType() == CityType.WAR ? "§aen paix§7" : "§cen guerre§7"; - String cityTypeAfter = city.getType() == CityType.WAR ? "§cen guerre§7" : "§aen paix§7"; + Component inPeace = TranslationManager.translation("feature.city.type.in_peace").color(NamedTextColor.GREEN); + Component inWar = TranslationManager.translation("feature.city.type.in_war").color(NamedTextColor.RED); + Component cityTypeActuel = city.getType() == CityType.WAR ? inWar : inPeace; + Component cityTypeAfter = city.getType() == CityType.WAR ? inPeace : inWar; - MessagesManager.sendMessage(sender, Component.text("Vous avez changé le type de votre ville de " + cityTypeActuel + " à " + cityTypeAfter), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.type.change_type_success", + cityTypeActuel, cityTypeAfter), + Prefix.CITY, MessageType.SUCCESS, false); } } \ No newline at end of file diff --git a/src/main/java/fr/openmc/core/features/city/actions/CityChestAction.java b/src/main/java/fr/openmc/core/features/city/actions/CityChestAction.java index 5a9067a7a..5e2f8a076 100644 --- a/src/main/java/fr/openmc/core/features/city/actions/CityChestAction.java +++ b/src/main/java/fr/openmc/core/features/city/actions/CityChestAction.java @@ -6,7 +6,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; -import net.kyori.adventure.text.Component; +import fr.openmc.core.utils.messages.TranslationManager; import org.bukkit.entity.Player; import static fr.openmc.core.features.city.conditions.CityChestConditions.UPGRADE_PER_AYWENITE; @@ -24,7 +24,8 @@ public static void upgradeChest(Player player, City city) { if (ItemUtils.takeAywenite(player, aywenite)) { city.saveChestContent(city.getChestPages() + 1, null); - MessagesManager.sendMessage(player, Component.text("Le coffre a été amélioré"), Prefix.CITY, MessageType.SUCCESS, true); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.chest.upgraded"), + Prefix.CITY, MessageType.SUCCESS, true); } } } \ No newline at end of file diff --git a/src/main/java/fr/openmc/core/features/city/actions/CityClaimAction.java b/src/main/java/fr/openmc/core/features/city/actions/CityClaimAction.java index 91ad3e19e..456b1408e 100644 --- a/src/main/java/fr/openmc/core/features/city/actions/CityClaimAction.java +++ b/src/main/java/fr/openmc/core/features/city/actions/CityClaimAction.java @@ -10,6 +10,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import org.bukkit.Chunk; import org.bukkit.entity.Player; @@ -37,7 +38,8 @@ public static void startClaim(Player sender, int chunkX, int chunkZ) { City city = CityManager.getPlayerCity(sender.getUniqueId()); org.bukkit.World bWorld = sender.getWorld(); if (!bWorld.getName().equals("world")) { - MessagesManager.sendMessage(sender, Component.text("Tu ne peux pas étendre ta ville ici"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.claim.cant_claim_here"), + Prefix.CITY, MessageType.ERROR, false); return; } @@ -46,20 +48,24 @@ public static void startClaim(Player sender, int chunkX, int chunkZ) { ChunkPos chunkVec2 = new ChunkPos(chunkX, chunkZ); if (!isAdjacentToOwnCity(chunkVec2, city.getChunks())) { - MessagesManager.sendMessage(sender, Component.text("Ce chunk n'est pas adjacent à ta ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.claim.isnt_adjacent"), + Prefix.CITY, MessageType.ERROR, false); return; } Chunk chunk = sender.getWorld().getChunkAt(chunkX, chunkZ); if (WorldGuardHook.doesChunkContainWGRegion(chunk)) { - MessagesManager.sendMessage(sender, Component.text("Ce chunk est dans une région protégée"), Prefix.CITY, MessageType.ERROR, true); + MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.claim.is_in_region"), + Prefix.CITY, MessageType.ERROR, true); return; } if (CityManager.isChunkClaimed(chunkX, chunkZ)) { City chunkCity = CityManager.getCityFromChunk(chunkX, chunkZ); + if (chunkCity == null) return; String cityName = chunkCity.getName(); - MessagesManager.sendMessage(sender, Component.text("Ce chunk est déjà claim par " + cityName + "."), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.claim.already_claim", + Component.text(cityName)), Prefix.CITY, MessageType.ERROR, false); return; } @@ -68,7 +74,9 @@ public static void startClaim(Player sender, int chunkX, int chunkZ) { if (city.getFreeClaims() <= 0) { if (city.getBalance() < price) { - MessagesManager.sendMessage(sender, Component.text("Ta ville n'a pas assez d'argent (" + price + EconomyManager.getEconomyIcon() + " nécessaires)"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(sender, TranslationManager.translation("messages.city.city_not_enough_money", + Component.text(price + EconomyManager.getEconomyIcon())), + Prefix.CITY, MessageType.ERROR, false); return; } @@ -80,7 +88,8 @@ public static void startClaim(Player sender, int chunkX, int chunkZ) { city.addChunk(chunkX, chunkZ); - MessagesManager.sendMessage(sender, Component.text("Ta ville a été étendue"), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.claim.claim_success"), + Prefix.CITY, MessageType.SUCCESS, false); } private static boolean isAdjacentToOwnCity(@NotNull ChunkPos newClaim, Set cityClaims) { diff --git a/src/main/java/fr/openmc/core/features/city/actions/CityCreateAction.java b/src/main/java/fr/openmc/core/features/city/actions/CityCreateAction.java index e973afb04..0264c370a 100644 --- a/src/main/java/fr/openmc/core/features/city/actions/CityCreateAction.java +++ b/src/main/java/fr/openmc/core/features/city/actions/CityCreateAction.java @@ -17,7 +17,10 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Material; @@ -26,7 +29,6 @@ import org.bukkit.inventory.meta.ItemMeta; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.UUID; @@ -51,8 +53,8 @@ public static void beginCreateCity(Player player, String cityName) { getMascotStick(), "mascot:stick", 300, - Component.text("Vous avez reçu un bâton pour poser votre mascotte"), - Component.text("§cCréation annulée"), + TranslationManager.translation("feature.city.mascot.mascot_wand.claim_mascot_wand"), + TranslationManager.translation("feature.city.mascot.mascot_wand.create_cancelled"), location -> { if (!isValidLocation(player, location)) return false; @@ -76,12 +78,8 @@ private static ItemStack getMascotStick() { ItemMeta meta = stick.getItemMeta(); if (meta != null) { - meta.displayName(Component.text("§lMascotte")); - meta.lore(List.of( - Component.text("§cVotre mascotte sera posée à l'emplacement du coffre"), - Component.text("§cCe bâton n'est pas retirable"), - Component.text("§cDéconnexion = annulation") - )); + meta.displayName(TranslationManager.translation("feature.city.mascot.mascot").decorate(TextDecoration.BOLD)); + meta.lore(TranslationManager.translationLore("feature.city.mascot.mascot_wand.lore")); stick.setItemMeta(meta); } return stick; @@ -90,11 +88,13 @@ private static ItemStack getMascotStick() { private static boolean isValidLocation(Player player, Location location) { if (location == null || location.getWorld() == null) return false; if (!"world".equals(location.getWorld().getName())) { - MessagesManager.sendMessage(player, Component.text("§cVous pouvez poser votre mascotte uniquement dans le monde principal"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mascot.mascot_wand.can_only_place_mascot"), + Prefix.CITY, MessageType.ERROR, false); return false; } if (location.clone().add(0, 1, 0).getBlock().getType().isSolid()) { - MessagesManager.sendMessage(player, Component.text("§cAucun bloc ne doit être au-dessus de la mascotte"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mascot.mascot_wand.hasnot_block_above"), + Prefix.CITY, MessageType.ERROR, false); return false; } return true; @@ -104,12 +104,13 @@ public static boolean finalizeCreation(Player player, Location mascotLocation) { Chunk chunk = mascotLocation.getChunk(); if (WorldGuardHook.doesChunkContainWGRegion(chunk)) { - MessagesManager.sendMessage(player, Component.text("Ce chunk est dans une région protégée"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.claim.is_in_region"), Prefix.CITY, MessageType.ERROR, false); return false; } if (CityManager.isChunkClaimedInRadius(chunk, 1)) { - MessagesManager.sendMessage(player, Component.text("Une des parcelles autour de ce chunk est claim"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.claim.already_claim_in_adjacent"), + Prefix.CITY, MessageType.ERROR, false); return false; } @@ -129,8 +130,8 @@ public static boolean finalizeCreation(Player player, Location mascotLocation) { MascotsManager.createMascot(city, cityUUID, pendingCityName, player.getWorld(), mascotLocation); // Feedback - MessagesManager.sendMessage(player, Component.text("§aVotre ville a été créée : " + pendingCityName), Prefix.CITY, MessageType.SUCCESS, true); - MessagesManager.sendMessage(player, Component.text("§7+ §6" + FREE_CLAIMS + " chunks gratuits"), Prefix.CITY, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.create.success", Component.text(pendingCityName)).color(NamedTextColor.GREEN), Prefix.CITY, MessageType.SUCCESS, true); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.create.free_claim", Component.text(FREE_CLAIMS)), Prefix.CITY, MessageType.INFO, false); DynamicCooldownManager.use(playerUUID, "city:big", 60000); DynamicCooldownManager.use(cityUUID, "city:immunity", IMMUNITY_COOLDOWN); diff --git a/src/main/java/fr/openmc/core/features/city/actions/CityDeleteAction.java b/src/main/java/fr/openmc/core/features/city/actions/CityDeleteAction.java index 532d6f2f0..f28ce8da7 100644 --- a/src/main/java/fr/openmc/core/features/city/actions/CityDeleteAction.java +++ b/src/main/java/fr/openmc/core/features/city/actions/CityDeleteAction.java @@ -10,6 +10,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -40,18 +41,21 @@ public static void startDeleteCity(Player player) { } CityManager.deleteCity(city); - MessagesManager.sendMessage(player, Component.text("Votre ville a été supprimée"), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.delete.success"), Prefix.CITY, MessageType.SUCCESS, false); DynamicCooldownManager.use(uuid, "city:big", 60000); // 1 minute player.closeInventory(); }, player::closeInventory, List.of( - Component.text("§7Voulez vous vraiment dissoudre la ville " + city.getName() + " ?"), - Component.text("§cCette action est §4§lIRREVERSIBLE") + TranslationManager.translation( + "feature.city.delete.confirm.lore", + Component.text(city.getName()).color(NamedTextColor.GRAY) + ), + TranslationManager.translation("feature.city.delete.confirm.warning") ), List.of( - Component.text("§7Ne pas supprimer la ville") + TranslationManager.translation("feature.city.delete.confirm.deny") ) ); menu.open(); diff --git a/src/main/java/fr/openmc/core/features/city/actions/CityKickAction.java b/src/main/java/fr/openmc/core/features/city/actions/CityKickAction.java index c3954618c..315a317ee 100644 --- a/src/main/java/fr/openmc/core/features/city/actions/CityKickAction.java +++ b/src/main/java/fr/openmc/core/features/city/actions/CityKickAction.java @@ -6,6 +6,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; @@ -19,11 +20,29 @@ public static void startKick(Player sender, OfflinePlayer playerKick) { if (city == null) return; + String playerName = String.valueOf(playerKick.getName()); city.removePlayer(playerKick.getUniqueId()); - MessagesManager.sendMessage(sender, Component.text("Tu as exclu " + playerKick.getName() + " de la ville " + city.getName()), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(sender, + TranslationManager.translation( + "feature.city.kick.success", + Component.text(playerName), + Component.text(city.getName()) + ), + Prefix.CITY, + MessageType.SUCCESS, + false + ); if (playerKick.isOnline()) { - MessagesManager.sendMessage((Player) playerKick, Component.text("Tu as été exclu de la ville " + city.getName()), Prefix.CITY, MessageType.INFO, true); + MessagesManager.sendMessage((Player) playerKick, + TranslationManager.translation( + "feature.city.kick.info", + Component.text(city.getName()) + ), + Prefix.CITY, + MessageType.INFO, + true + ); } } } diff --git a/src/main/java/fr/openmc/core/features/city/actions/CityLeaveAction.java b/src/main/java/fr/openmc/core/features/city/actions/CityLeaveAction.java index 832209df9..ee012d0ee 100644 --- a/src/main/java/fr/openmc/core/features/city/actions/CityLeaveAction.java +++ b/src/main/java/fr/openmc/core/features/city/actions/CityLeaveAction.java @@ -6,6 +6,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -22,12 +23,26 @@ public static void startLeave(Player player) { city.removePlayer(player.getUniqueId()); - MessagesManager.sendMessage(player, Component.text("Tu as quitté " + city.getName()), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, + TranslationManager.translation("feature.city.leave.success", Component.text(city.getName())), + Prefix.CITY, + MessageType.SUCCESS, + false + ); city.getOnlineMembers().forEach(memberUUID -> { if (memberUUID.equals(player.getUniqueId())) return; Player onlineMember = Bukkit.getPlayer(memberUUID); - MessagesManager.sendMessage(onlineMember, Component.text(player.getName() + " a quitté la ville " + city.getName()), Prefix.CITY, MessageType.INFO, true); + MessagesManager.sendMessage(onlineMember, + TranslationManager.translation( + "feature.city.leave.info", + Component.text(player.getName()), + Component.text(city.getName()) + ), + Prefix.CITY, + MessageType.INFO, + true + ); }); } } diff --git a/src/main/java/fr/openmc/core/features/city/actions/CityTransferAction.java b/src/main/java/fr/openmc/core/features/city/actions/CityTransferAction.java index f846769c8..4785ec254 100644 --- a/src/main/java/fr/openmc/core/features/city/actions/CityTransferAction.java +++ b/src/main/java/fr/openmc/core/features/city/actions/CityTransferAction.java @@ -8,7 +8,9 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; @@ -17,6 +19,7 @@ public class CityTransferAction { public static void transfer(Player player, City city, OfflinePlayer playerToTransfer) { OfflinePlayer owner = CacheOfflinePlayer.getOfflinePlayer(city.getPlayerWithPermission(CityPermission.OWNER)); + String playerName = playerToTransfer.getName(); if (owner.isOnline()) { if (!CityManageConditions.canCityTransfer(city, owner.getPlayer())) return; @@ -25,16 +28,32 @@ public static void transfer(Player player, City city, OfflinePlayer playerToTran ConfirmMenu menu = new ConfirmMenu(player, () -> { city.changeOwner(playerToTransfer.getUniqueId()); - MessagesManager.sendMessage(player, Component.text("Le nouveau propriétaire est " + playerToTransfer.getName()), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, + TranslationManager.translation("feature.city.transfer.success", Component.text(playerName)), + Prefix.CITY, + MessageType.SUCCESS, + false + ); if (playerToTransfer.isOnline()) { - MessagesManager.sendMessage(playerToTransfer.getPlayer(), Component.text("Vous êtes devenu le propriétaire de la ville"), Prefix.CITY, MessageType.INFO, true); + MessagesManager.sendMessage(playerToTransfer.getPlayer(), + TranslationManager.translation("feature.city.transfer.info"), + Prefix.CITY, + MessageType.INFO, + true + ); } player.closeInventory(); }, player::closeInventory, - List.of(Component.text("§7Voulez-vous vraiment donner la ville à " + playerToTransfer.getName() + " ?")), - List.of(Component.text("§7Vous n'allez pas donner la ville à " + playerToTransfer.getName()))); + List.of(TranslationManager.translation( + "feature.city.transfer.confirm.accept", + Component.text(playerName).color(NamedTextColor.GRAY) + )), + List.of(TranslationManager.translation( + "feature.city.transfer.confirm.deny", + Component.text(playerName).color(NamedTextColor.GRAY) + ))); menu.open(); } } diff --git a/src/main/java/fr/openmc/core/features/city/actions/CityUnclaimAction.java b/src/main/java/fr/openmc/core/features/city/actions/CityUnclaimAction.java index 645c34a33..e31433483 100644 --- a/src/main/java/fr/openmc/core/features/city/actions/CityUnclaimAction.java +++ b/src/main/java/fr/openmc/core/features/city/actions/CityUnclaimAction.java @@ -8,7 +8,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; -import net.kyori.adventure.text.Component; +import fr.openmc.core.utils.messages.TranslationManager; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -29,17 +29,17 @@ public static void startUnclaim(Player sender, int chunkX, int chunkZ) { City city = CityManager.getPlayerCity(sender.getUniqueId()); World bWorld = sender.getWorld(); if (!bWorld.getName().equals("world")) { - MessagesManager.sendMessage(sender, Component.text("Tu ne peux pas étendre ta ville ici"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.claim.cant_claim_here"), Prefix.CITY, MessageType.ERROR, false); return; } if (!city.hasChunk(chunkX, chunkZ)) { - MessagesManager.sendMessage(sender, Component.text("Vous devez posséder ce claim pour le unclaim"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.unclaim.must_own_claim"), Prefix.CITY, MessageType.ERROR, false); return; } if (city.getMascot().getChunk().getX() == chunkX && city.getMascot().getChunk().getZ() == chunkZ) { - MessagesManager.sendMessage(sender, Component.text("Vous ne pouvez pas unclaim le claim de la mascotte"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.unclaim.cant_unclaim_mascot_claim"), Prefix.CITY, MessageType.ERROR, false); return; } @@ -58,6 +58,6 @@ public static void startUnclaim(Player sender, int chunkX, int chunkZ) { city.removeChunk(chunkX, chunkZ); - MessagesManager.sendMessage(sender, Component.text("Vous venez de rétrécir votre ville en supprimant ce claim"), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.unclaim.success"), Prefix.CITY, MessageType.SUCCESS, false); } } diff --git a/src/main/resources/translations/lang.properties b/src/main/resources/translations/lang.properties index 999796746..72eb51e40 100644 --- a/src/main/resources/translations/lang.properties +++ b/src/main/resources/translations/lang.properties @@ -149,6 +149,63 @@ messages.city.target_in_other_city=Ce joueur n'est pas dans ta ville. messages.city.target_no_city=Ce joueur n'est pas dans une ville. messages.city.player_no_permission_access=Tu n'as pas la permission d'accéder aux permissions de cette ville. messages.city.not_found=Cette ville n'existe pas. + +messages.city.havent_unlocked_feature=Vous n'avez pas débloqué cette feature ! Veuillez améliorer votre ville au niveau %1$s! +messages.city.city_not_enough_money=Ta ville n'a pas assez d'argent (%1$s nécessaires) + +# - Types +feature.city.type.in_peace=en paix +feature.city.type.in_war=en guerre +feature.city.type.confirm_change=Es-tu sûr de vouloir changer le type de ta ville +feature.city.type.change_type_to_type=Vous allez passez d'une ville %1$s à une ville %2$s +feature.city.type.warning_war=⚠ Vous pourrez être exposé à des guerres contre d'autres villes à tout moment ! +feature.city.type.mascot_losing_level=⚠ Ta mascotte perdera 1 niveau ! +feature.city.type.not_change_type=Ne pas changer le type de ville +feature.city.type.mascot_not_exist_change_type=Vous n'avez pas de mascotte pour changer le type de votre ville (contactez le staff) +feature.city.type.mascot_must_by_alive_change_type=Votre mascotte doit être en vie pour changer le type de ville +feature.city.type.must_wait_before_change_type=Vous devez attendre %1$s avant de changer de type de ville +feature.city.type.change_type_success=Vous avez changé le type de votre ville de %1$s à %2$s + +# - Chest +feature.city.chest.upgraded=Le coffre a été amélioré + +# - Claim +feature.city.claim.cant_claim_here=Tu ne peux pas étendre ta ville ici +feature.city.claim.isnt_adjacent=Ce chunk n'est pas adjacent à ta ville +feature.city.claim.is_in_region=Ce chunk est dans une région protégée +feature.city.claim.already_claim=Ce chunk est déjà claim par %1$s. +feature.city.claim.claim_success=Ta ville a été étendue +feature.city.claim.already_claim_in_adjacent=Une des parcelles autour de ce chunk est claim + +# - Create +feature.city.create.success=Votre ville a été créée : % +feature.city.create.free_claim="+ %1$s chunks gratuits + +# - Delete +feature.city.delete.confirm.lore=Voulez vous vraiment dissoudre la ville %1$s ? +feature.city.delete.confirm.warning=Cette action est IRREVERSIBLE +feature.city.delete.confirm.deny=Ne pas supprimer la ville +feature.city.delete.success=Votre ville a été supprimée + +# - Kick +feature.city.kick.success=Tu as exclu %1$s de la ville %2$s +feature.city.kick.info=Tu as été exclu de la ville %1$s + +# - Leave +feature.city.leave.success=Tu as quitté %1$s +feature.city.leave.info=%1$s a quitté la ville %2$s + +# - Transfer +feature.city.transfer.confirm.accept=Voulez-vous vraiment donner la ville à %1$s ? +feature.city.transfer.confirm.deny=Vous n'allez pas donner la ville à %1$s +feature.city.transfer.success=Le nouveau propriétaire est %1$s +feature.city.transfer.info=Vous êtes devenu le propriétaire de la ville + +# - Unclaim +feature.city.unclaim.must_own_claim=Vous devez posséder ce claim pour le unclaim +feature.city.unclaim.cant_unclaim_mascot_claim=Vous ne pouvez pas unclaim le claim de la mascotte +feature.city.unclaim.success=Vous venez de rétrécir votre ville en supprimant ce claim + # - Permissions feature.city.player_cannot_claim=Tu n'as pas la permission d'agrandir ta ville. feature.city.player_cannot_kick=Tu n'as pas la permission d'exclure ce membre. @@ -164,4 +221,17 @@ feature.city.grade.cannot_exist=Ce grade n'existe pas. feature.city.grade.cannot_assign=Tu n'as pas la permission d'assigner des grades. feature.city.grade.cannot_modify_sup_role=Tu ne peux pas modifier un grade supérieur ou égal au tien. feature.city.grade.max_reach=Le nombre maximum de grades a été atteint, tu ne peux pas en ajouter d'autres. -feature.city.grade.already_exist=Ce grade existe déjà. \ No newline at end of file +feature.city.grade.already_exist=Ce grade existe déjà. + +# - Mascots +## Mascot Wand +feature.city.mascot.mascot_wand.claim_mascot_wand=Vous avez reçu un bâton pour poser votre mascotte +feature.city.mascot.mascot_wand.create_cancelled=Création annulée + +feature.city.mascot.mascot_wand.lore=Votre mascotte sera posée à l'emplacement du coffre\ +
Ce bâton n'est pas retirable + +feature.city.mascot.mascot_wand.can_only_place_mascot=Vous pouvez poser votre mascotte uniquement dans le monde principal +feature.city.mascot.mascot_wand.hasnot_block_above=Aucun bloc ne doit être au-dessus de la mascotte + +feature.city.mascot.mascot=Mascotte \ No newline at end of file From a2422ae5f0a41f64c71468b66945d478b5eb6cc3 Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Fri, 20 Mar 2026 21:08:08 +0100 Subject: [PATCH 02/20] translate city.commands package + restructure lang.properties --- .../city/commands/AdminCityCommands.java | 49 ++++++++------- .../features/city/commands/CityCommands.java | 13 ++-- .../city/commands/CityInviteCommands.java | 39 +++++++++--- .../city/commands/CityPermsCommands.java | 32 ++++++++-- .../city/commands/CityTopCommands.java | 4 +- .../resources/translations/lang.properties | 62 +++++++++++++++++-- 6 files changed, 150 insertions(+), 49 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/city/commands/AdminCityCommands.java b/src/main/java/fr/openmc/core/features/city/commands/AdminCityCommands.java index b422dbb22..f49029b7a 100644 --- a/src/main/java/fr/openmc/core/features/city/commands/AdminCityCommands.java +++ b/src/main/java/fr/openmc/core/features/city/commands/AdminCityCommands.java @@ -9,7 +9,6 @@ import fr.openmc.core.features.city.commands.autocomplete.CityNameAutoComplete; import fr.openmc.core.features.city.menu.list.CityListDetailsMenu; import fr.openmc.core.features.economy.EconomyManager; -import fr.openmc.core.features.economy.TransactionsManager; import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; @@ -45,7 +44,7 @@ void deleteCity( } CityManager.deleteCity(city); - MessagesManager.sendMessage(player, Component.text("La ville a été supprimée"), Prefix.STAFF, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.admin.commands.delete.success"), Prefix.STAFF, MessageType.SUCCESS, false); } private static final int PER_PAGE = 10; @@ -68,8 +67,7 @@ void list(Player player) { List sub = all.subList(start, end); MessagesManager.sendMessage( player, - Component.text("—— Villes (page " + page + " / " + maxPage + ") ——") - .color(NamedTextColor.GOLD), + TranslationManager.translation("feature.city.admin.commands.list.header", Component.text(page), Component.text(maxPage)), Prefix.STAFF, MessageType.SUCCESS, false @@ -83,10 +81,10 @@ void list(Player player) { .append(Component.text(cityUUID.toString()).color(NamedTextColor.GRAY)) .append(Component.text(" • ")) .append(Component.text(name).color(NamedTextColor.WHITE)) - .append(Component.text(" [copier]") + .append(TranslationManager.translation("feature.city.admin.commands.list.copy_label") .color(NamedTextColor.GREEN) .hoverEvent(net.kyori.adventure.text.event.HoverEvent.showText( - Component.text("Clique pour copier l’UUID")) + TranslationManager.translation("feature.city.admin.commands.list.copy_uuid_hover")) ) .clickEvent(ClickEvent.copyToClipboard(cityUUID.toString())) ); @@ -96,12 +94,12 @@ void list(Player player) { Component nav = Component.empty() .append(page > 1 - ? Component.text("« Prev").color(NamedTextColor.YELLOW) + ? TranslationManager.translation("feature.city.admin.commands.list.nav.prev").color(NamedTextColor.YELLOW) .clickEvent(ClickEvent.runCommand("/admcity list " + (page - 1))) : Component.text(" ")) .append(Component.text(" ")) .append(page < maxPage - ? Component.text("Next »").color(NamedTextColor.YELLOW) + ? TranslationManager.translation("feature.city.admin.commands.list.nav.next").color(NamedTextColor.YELLOW) .clickEvent(ClickEvent.runCommand("/admcity list " + (page + 1))) : Component.text(" ")); @@ -117,7 +115,7 @@ void info( City city = CityManager.getCityByName(name); if (city == null) { - MessagesManager.sendMessage(player, Component.text("Cette ville n'existe pas"), Prefix.STAFF, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.admin.commands.info.not_found"), Prefix.STAFF, MessageType.ERROR, false); return; } @@ -133,7 +131,7 @@ void rename( ) { City newNameCity = CityManager.getCityByName(newName); if (newNameCity != null) { - MessagesManager.sendMessage(player, Component.text("Une ville a déjà le nom que vous voulez mettre"), Prefix.STAFF, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.admin.commands.rename.name_already_used"), Prefix.STAFF, MessageType.ERROR, false); return; } @@ -144,7 +142,7 @@ void rename( } city.rename(newName); - MessagesManager.sendMessage(player, Component.text("La ville a été renommée"), Prefix.STAFF, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.admin.commands.rename.success"), Prefix.STAFF, MessageType.SUCCESS, false); } @Subcommand("setOwner") @@ -177,7 +175,7 @@ void setBalance( } city.setBalance(newBalance); - MessagesManager.sendMessage(player, Component.text("Le solde de la ville a été modifié"), Prefix.STAFF, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.admin.commands.balance.set_success"), Prefix.STAFF, MessageType.SUCCESS, false); } @Subcommand("getBalance") @@ -192,7 +190,10 @@ void getBalance( return; } - MessagesManager.sendMessage(player, Component.text("Le solde de la ville est de "+ city.getBalance()+ EconomyManager.getEconomyIcon()), Prefix.STAFF, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.admin.commands.balance.get_success", + Component.text(city.getBalance() + EconomyManager.getEconomyIcon()) + ), Prefix.STAFF, MessageType.INFO, false); } @Subcommand("addPlayer") @@ -209,12 +210,12 @@ void add( } if (CityManager.getPlayerCity(newMember.getUniqueId()) != null) { - MessagesManager.sendMessage(player, Component.text("Ce joueur est déjà dans une ville"), Prefix.STAFF, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.admin.commands.add_player.already_in_city"), Prefix.STAFF, MessageType.ERROR, false); return; } city.addPlayer(newMember.getUniqueId()); - MessagesManager.sendMessage(player, Component.text("Le joueur a été ajouté"), Prefix.STAFF, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.admin.commands.add_player.success"), Prefix.STAFF, MessageType.SUCCESS, false); } @Subcommand("remove") @@ -225,17 +226,17 @@ void remove( ) { City city = CityManager.getPlayerCity(member.getUniqueId()); if (city == null) { - MessagesManager.sendMessage(player, Component.text("Ce joueur n'est pas dans une ville"), Prefix.STAFF, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.admin.commands.remove_player.not_in_city"), Prefix.STAFF, MessageType.ERROR, false); return; } if (city.hasPermission(member.getUniqueId(), CityPermission.OWNER)) { - MessagesManager.sendMessage(player, Component.text("Ce joueur est le propriétaire de la ville"), Prefix.STAFF, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.admin.commands.remove_player.is_owner"), Prefix.STAFF, MessageType.ERROR, false); return; } city.removePlayer(member.getUniqueId()); - MessagesManager.sendMessage(player, Component.text("Le joueur a été retiré"), Prefix.STAFF, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.admin.commands.remove_player.success"), Prefix.STAFF, MessageType.SUCCESS, false); } @Subcommand("getcity") @@ -246,11 +247,15 @@ void getPlayer( ) { City city = CityManager.getPlayerCity(member.getUniqueId()); if (city == null) { - MessagesManager.sendMessage(player, Component.text("Le joueur n'est pas dans une ville"), Prefix.STAFF, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.admin.commands.getcity.not_in_city"), Prefix.STAFF, MessageType.ERROR, false); return; } - MessagesManager.sendMessage(player, Component.text("Le joueur est dans la ville " + city.getName() + " (" + city.getUniqueId() + ")"), Prefix.STAFF, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.admin.commands.getcity.success", + Component.text(city.getName()), + Component.text(city.getUniqueId().toString()) + ), Prefix.STAFF, MessageType.INFO, false); } @Subcommand("claim bypass") @@ -261,10 +266,10 @@ public void bypass(Player player) { if (canBypass) { ProtectionsManager.canBypassPlayer.remove(uuid); - MessagesManager.sendMessage(player, Component.text("Vous avez désactivé le bypass des claims"), Prefix.STAFF, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.admin.commands.claim_bypass.disabled"), Prefix.STAFF, MessageType.SUCCESS, false); } else { ProtectionsManager.canBypassPlayer.add(uuid); - MessagesManager.sendMessage(player, Component.text("Vous avez activé le bypass des claims"), Prefix.STAFF, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.admin.commands.claim_bypass.enabled"), Prefix.STAFF, MessageType.SUCCESS, false); } } diff --git a/src/main/java/fr/openmc/core/features/city/commands/CityCommands.java b/src/main/java/fr/openmc/core/features/city/commands/CityCommands.java index 8ef4676b5..cc63aa4d3 100644 --- a/src/main/java/fr/openmc/core/features/city/commands/CityCommands.java +++ b/src/main/java/fr/openmc/core/features/city/commands/CityCommands.java @@ -41,7 +41,7 @@ public static void mainCommand(Player player) { menu.open(); } } else { - MessagesManager.sendMessage(player, Component.text("Vous ne pouvez pas ouvrir le menu des villes sans avoir posé la mascotte"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.commands.menu.must_place_mascot"), Prefix.CITY, MessageType.ERROR, false); } } @@ -76,7 +76,7 @@ void create( return; } - DialogInput.send(player, Component.text("Entrez le nom de la ville"), MAX_LENGTH_CITY, input -> { + DialogInput.send(player, TranslationManager.translation("feature.city.commands.create.enter_city_name"), MAX_LENGTH_CITY, input -> { if (input == null) return; CityCreateAction.beginCreateCity(player, input); } @@ -102,12 +102,15 @@ void rename( if (!CityManageConditions.canCityRename(playerCity, player)) return; if (!InputUtils.isInputCityName(name)) { - MessagesManager.sendMessage(player, Component.text("Le nom de ville est invalide, il doit comporter uniquement des caractères alphanumeriques et maximum " + MAX_LENGTH_CITY + " caractères."), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.commands.rename.invalid_name", + Component.text(MAX_LENGTH_CITY) + ), Prefix.CITY, MessageType.ERROR, false); return; } playerCity.rename(name); - MessagesManager.sendMessage(player, Component.text("La ville a été renommée en " + name), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.commands.rename.success", Component.text(name)), Prefix.CITY, MessageType.SUCCESS, false); } @Subcommand("transfer") @@ -150,7 +153,7 @@ void leave(Player player) { @CommandPermission("omc.commands.city.list") public void list(Player player) { if (CityManager.getCities().isEmpty()) { - MessagesManager.sendMessage(player, Component.text("Aucune ville n'existe"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.commands.list.empty"), Prefix.CITY, MessageType.ERROR, false); return; } diff --git a/src/main/java/fr/openmc/core/features/city/commands/CityInviteCommands.java b/src/main/java/fr/openmc/core/features/city/commands/CityInviteCommands.java index 6853bfbc8..f180e8018 100644 --- a/src/main/java/fr/openmc/core/features/city/commands/CityInviteCommands.java +++ b/src/main/java/fr/openmc/core/features/city/commands/CityInviteCommands.java @@ -7,6 +7,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.event.HoverEvent; @@ -44,11 +45,28 @@ public static void invite( } else { playerInvitations.add(sender); } - MessagesManager.sendMessage(sender, Component.text("Tu as invité " + target.getName() + " dans ta ville"), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(sender, + TranslationManager.translation("feature.city.invite.commands.invite.success", Component.text(target.getName())), + Prefix.CITY, + MessageType.SUCCESS, + false + ); MessagesManager.sendMessage(target, - Component.text("Tu as été invité(e) par " + sender.getName() + " dans la ville " + city.getName() + "\n") - .append(Component.text("§8Faite §a/city accept §8pour accepter\n").clickEvent(ClickEvent.runCommand("/city accept " + sender.getName())).hoverEvent(HoverEvent.showText(Component.text("Accepter l'invitation")))) - .append(Component.text("§8Faite §c/city deny §8pour refuser\n").clickEvent(ClickEvent.runCommand("/city deny " + sender.getName())).hoverEvent(HoverEvent.showText(Component.text("Refuser l'invitation")))), + TranslationManager.translation( + "feature.city.invite.commands.invite.received", + Component.text(sender.getName()), + Component.text(city.getName()) + ) + .append(Component.newline()) + .append(TranslationManager.translation("feature.city.invite.commands.invite.accept") + .clickEvent(ClickEvent.runCommand("/city accept " + sender.getName())) + .hoverEvent(HoverEvent.showText(TranslationManager.translation("feature.city.invite.commands.invite.accept_hover"))) + ) + .append(Component.newline()) + .append(TranslationManager.translation("feature.city.invite.commands.invite.deny") + .clickEvent(ClickEvent.runCommand("/city deny " + sender.getName())) + .hoverEvent(HoverEvent.showText(TranslationManager.translation("feature.city.invite.commands.invite.deny_hover"))) + ), Prefix.CITY, MessageType.INFO, false); } @@ -62,12 +80,15 @@ public static void acceptInvitation( List playerInvitations = invitations.get(player); if (playerInvitations == null) { - MessagesManager.sendMessage(player, Component.text("Tu n'as aucune invitation en attente"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.invite.commands.accept.none_pending"), Prefix.CITY, MessageType.ERROR, false); return; } if (!playerInvitations.contains(inviter)) { - MessagesManager.sendMessage(player, Component.text(inviter.getName() + " ne vous a pas invité"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.invite.commands.accept.not_invited", + Component.text(inviter.getName()) + ), Prefix.CITY, MessageType.ERROR, false); return; } @@ -79,9 +100,9 @@ public static void acceptInvitation( invitations.remove(player); - MessagesManager.sendMessage(player, Component.text("Tu as rejoint " + newCity.getName()), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.invite.commands.accept.joined", Component.text(newCity.getName())), Prefix.CITY, MessageType.SUCCESS, false); if (inviter.isOnline()) { - MessagesManager.sendMessage(inviter, Component.text(player.getName() + " a accepté ton invitation !"), Prefix.CITY, MessageType.SUCCESS, true); + MessagesManager.sendMessage(inviter, TranslationManager.translation("feature.city.invite.commands.accept.inviter_notified", Component.text(player.getName())), Prefix.CITY, MessageType.SUCCESS, true); } } @@ -97,7 +118,7 @@ public static void denyInvitation( invitations.remove(player); if (inviter.isOnline()) { - MessagesManager.sendMessage(inviter, Component.text(player.getName() + " a refusé ton invitation"), Prefix.CITY, MessageType.WARNING, true); + MessagesManager.sendMessage(inviter, TranslationManager.translation("feature.city.invite.commands.deny.inviter_notified", Component.text(player.getName())), Prefix.CITY, MessageType.WARNING, true); } } } diff --git a/src/main/java/fr/openmc/core/features/city/commands/CityPermsCommands.java b/src/main/java/fr/openmc/core/features/city/commands/CityPermsCommands.java index bc312d24a..aa574f75c 100644 --- a/src/main/java/fr/openmc/core/features/city/commands/CityPermsCommands.java +++ b/src/main/java/fr/openmc/core/features/city/commands/CityPermsCommands.java @@ -40,10 +40,18 @@ public static void swap(Player sender, @SuggestWith(CityMembersAutoComplete.clas if (city.hasPermission(player.getUniqueId(), permission)) { city.removePermission(player.getUniqueId(), permission); - MessagesManager.sendMessage(sender, Component.text(player.getName()+" a perdu la permission \""+permission.toString()+"\""), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(sender, TranslationManager.translation( + "feature.city.perms.commands.switch.removed", + Component.text(String.valueOf(player.getName())), + Component.text(permission.toString()) + ), Prefix.CITY, MessageType.SUCCESS, false); } else { city.addPermission(player.getUniqueId(), permission); - MessagesManager.sendMessage(sender, Component.text(player.getName() + " a reçu la permission \"" + permission.toString() + "\""), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(sender, TranslationManager.translation( + "feature.city.perms.commands.switch.added", + Component.text(String.valueOf(player.getName())), + Component.text(permission.toString()) + ), Prefix.CITY, MessageType.SUCCESS, false); } } @@ -71,12 +79,18 @@ void add( } if (city.hasPermission(player.getUniqueId(), permission)) { - MessagesManager.sendMessage(sender, Component.text(player.getName() + " a déjà cette permission"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(sender, TranslationManager.translation( + "feature.city.perms.commands.add.already_has", + Component.text(String.valueOf(player.getName())) + ), Prefix.CITY, MessageType.ERROR, false); return; } city.addPermission(player.getUniqueId(), permission); - MessagesManager.sendMessage(sender, Component.text("Les permissions de "+ player.getName() + " ont été modifiées"), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(sender, TranslationManager.translation( + "feature.city.perms.commands.modified", + Component.text(String.valueOf(player.getName())) + ), Prefix.CITY, MessageType.SUCCESS, false); } @Subcommand("remove") @@ -103,12 +117,18 @@ void remove( } if (!city.hasPermission(player.getUniqueId(), permission)) { - MessagesManager.sendMessage(sender, Component.text(player.getName() + " n'a pas cette permission"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(sender, TranslationManager.translation( + "feature.city.perms.commands.remove.does_not_have", + Component.text(String.valueOf(player.getName())) + ), Prefix.CITY, MessageType.ERROR, false); return; } city.removePermission(player.getUniqueId(), permission); - MessagesManager.sendMessage(sender, Component.text("Les permissions de "+ player.getName() + " ont été modifiées"), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(sender, TranslationManager.translation( + "feature.city.perms.commands.modified", + Component.text(String.valueOf(player.getName())) + ), Prefix.CITY, MessageType.SUCCESS, false); } diff --git a/src/main/java/fr/openmc/core/features/city/commands/CityTopCommands.java b/src/main/java/fr/openmc/core/features/city/commands/CityTopCommands.java index c2fd0ef7c..3aba3e036 100644 --- a/src/main/java/fr/openmc/core/features/city/commands/CityTopCommands.java +++ b/src/main/java/fr/openmc/core/features/city/commands/CityTopCommands.java @@ -6,7 +6,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; -import net.kyori.adventure.text.Component; +import fr.openmc.core.utils.messages.TranslationManager; import org.bukkit.entity.Player; import revxrsal.commands.annotation.Command; import revxrsal.commands.annotation.Description; @@ -22,7 +22,7 @@ public class CityTopCommands { void notationTest(Player sender) { List cities = new ArrayList<>(CityManager.getCities()); if (cities.isEmpty()) { - MessagesManager.sendMessage(sender, Component.text("Aucune ville n'est créée pour le moment"), Prefix.CITY, MessageType.ERROR, true); + MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.commands.top.empty"), Prefix.CITY, MessageType.ERROR, true); return; } new CityTopMenu(sender).open(); diff --git a/src/main/resources/translations/lang.properties b/src/main/resources/translations/lang.properties index 72eb51e40..1e49643ac 100644 --- a/src/main/resources/translations/lang.properties +++ b/src/main/resources/translations/lang.properties @@ -142,18 +142,69 @@ feature.adminshop.player_sell_item=Vous avez vendu %1$s %2$s pour %3$s # ** CITY ** -# - Global +# * COMMANDS +# - Global / Shared messages.city.player_no_in_city=Tu n'es pas dans une ville. messages.city.player_already_in_city=Tu es déjà dans une ville. messages.city.target_in_other_city=Ce joueur n'est pas dans ta ville. messages.city.target_no_city=Ce joueur n'est pas dans une ville. messages.city.player_no_permission_access=Tu n'as pas la permission d'accéder aux permissions de cette ville. messages.city.not_found=Cette ville n'existe pas. - messages.city.havent_unlocked_feature=Vous n'avez pas débloqué cette feature ! Veuillez améliorer votre ville au niveau %1$s! messages.city.city_not_enough_money=Ta ville n'a pas assez d'argent (%1$s nécessaires) -# - Types +# - Player Commands +feature.city.commands.menu.must_place_mascot=Vous ne pouvez pas ouvrir le menu des villes sans avoir posé la mascotte +feature.city.commands.create.enter_city_name=Entrez le nom de la ville +feature.city.commands.rename.invalid_name=Le nom de ville est invalide, il doit comporter uniquement des caractères alphanumeriques et maximum %1$s caractères. +feature.city.commands.rename.success=La ville a été renommée en %1$s +feature.city.commands.list.empty=Aucune ville n'existe +feature.city.commands.top.empty=Aucune ville n'est créée pour le moment + +# - Admin Commands +feature.city.admin.commands.delete.success=La ville a été supprimée +feature.city.admin.commands.list.header=—— Villes (page %1$s / %2$s) —— +feature.city.admin.commands.list.copy_label= [copier] +feature.city.admin.commands.list.copy_uuid_hover=Clique pour copier l'UUID +feature.city.admin.commands.list.nav.prev=« Précédent +feature.city.admin.commands.list.nav.next=Suivant » +feature.city.admin.commands.info.not_found=Cette ville n'existe pas +feature.city.admin.commands.rename.name_already_used=Une ville a déjà le nom que vous voulez mettre +feature.city.admin.commands.rename.success=La ville a été renommée +feature.city.admin.commands.balance.set_success=Le solde de la ville a été modifié +feature.city.admin.commands.balance.get_success=Le solde de la ville est de %1$s +feature.city.admin.commands.add_player.already_in_city=Ce joueur est déjà dans une ville +feature.city.admin.commands.add_player.success=Le joueur a été ajouté +feature.city.admin.commands.remove_player.not_in_city=Ce joueur n'est pas dans une ville +feature.city.admin.commands.remove_player.is_owner=Ce joueur est le propriétaire de la ville +feature.city.admin.commands.remove_player.success=Le joueur a été retiré +feature.city.admin.commands.getcity.not_in_city=Le joueur n'est pas dans une ville +feature.city.admin.commands.getcity.success=Le joueur est dans la ville %1$s (%2$s) +feature.city.admin.commands.claim_bypass.disabled=Vous avez désactivé le bypass des claims +feature.city.admin.commands.claim_bypass.enabled=Vous avez activé le bypass des claims + +# - Invite Commands +feature.city.invite.commands.invite.success=Tu as invité %1$s dans ta ville +feature.city.invite.commands.invite.received=Tu as été invité(e) par %1$s dans la ville %2$s +feature.city.invite.commands.invite.accept=Faites /city accept pour accepter +feature.city.invite.commands.invite.deny=Faites /city deny pour refuser +feature.city.invite.commands.invite.accept_hover=Accepter l'invitation +feature.city.invite.commands.invite.deny_hover=Refuser l'invitation +feature.city.invite.commands.accept.none_pending=Tu n'as aucune invitation en attente +feature.city.invite.commands.accept.not_invited=%1$s ne vous a pas invité +feature.city.invite.commands.accept.joined=Tu as rejoint %1$s +feature.city.invite.commands.accept.inviter_notified=%1$s a accepté ton invitation ! +feature.city.invite.commands.deny.inviter_notified=%1$s a refusé ton invitation + +# - Permissions Commands +feature.city.perms.commands.switch.removed=%1$s a perdu la permission "%2$s" +feature.city.perms.commands.switch.added=%1$s a reçu la permission "%2$s" +feature.city.perms.commands.add.already_has=%1$s a déjà cette permission +feature.city.perms.commands.remove.does_not_have=%1$s n'a pas cette permission +feature.city.perms.commands.modified=Les permissions de %1$s ont été modifiées + +# * ACTIONS +# - Type Change feature.city.type.in_peace=en paix feature.city.type.in_war=en guerre feature.city.type.confirm_change=Es-tu sûr de vouloir changer le type de ta ville @@ -178,7 +229,7 @@ feature.city.claim.claim_success=Ta ville a été étendue feature.city.claim.already_claim_in_adjacent=Une des parcelles autour de ce chunk est claim # - Create -feature.city.create.success=Votre ville a été créée : % +feature.city.create.success=Votre ville a été créée : %1$s feature.city.create.free_claim="+ %1$s chunks gratuits # - Delete @@ -206,7 +257,8 @@ feature.city.unclaim.must_own_claim=Vous devez posséder ce claim pour le unclai feature.city.unclaim.cant_unclaim_mascot_claim=Vous ne pouvez pas unclaim le claim de la mascotte feature.city.unclaim.success=Vous venez de rétrécir votre ville en supprimant ce claim -# - Permissions +# * CONDITIONS +# - Permissions / Access feature.city.player_cannot_claim=Tu n'as pas la permission d'agrandir ta ville. feature.city.player_cannot_kick=Tu n'as pas la permission d'exclure ce membre. feature.city.player_cannot_kick_himself=Tu ne peux pas t'exclure toi-même. From bdf7fb1cf749890343f245da2cd064be0d1d508b Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Fri, 20 Mar 2026 21:21:04 +0100 Subject: [PATCH 03/20] translate city.conditions package --- .../city/actions/CityCreateAction.java | 5 ++- .../city/conditions/CityChestConditions.java | 28 +++++++++---- .../city/conditions/CityClaimCondition.java | 10 +++-- .../city/conditions/CityCreateConditions.java | 15 ++++--- .../city/conditions/CityInviteConditions.java | 21 ++++++---- .../city/conditions/CityLeaveCondition.java | 3 +- .../city/conditions/CityManageConditions.java | 19 +++++---- .../city/conditions/CityTypeConditions.java | 14 +++++-- .../city/conditions/CityUnclaimCondition.java | 3 +- .../resources/translations/lang.properties | 42 +++++++++++++++++++ 10 files changed, 117 insertions(+), 43 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/city/actions/CityCreateAction.java b/src/main/java/fr/openmc/core/features/city/actions/CityCreateAction.java index 0264c370a..af5f32384 100644 --- a/src/main/java/fr/openmc/core/features/city/actions/CityCreateAction.java +++ b/src/main/java/fr/openmc/core/features/city/actions/CityCreateAction.java @@ -131,7 +131,10 @@ public static boolean finalizeCreation(Player player, Location mascotLocation) { // Feedback MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.create.success", Component.text(pendingCityName)).color(NamedTextColor.GREEN), Prefix.CITY, MessageType.SUCCESS, true); - MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.create.free_claim", Component.text(FREE_CLAIMS)), Prefix.CITY, MessageType.INFO, false); + MessagesManager.sendMessage(player, + TranslationManager.translation("feature.city.create.free_claim", + Component.text(FREE_CLAIMS).color(NamedTextColor.GOLD)), + Prefix.CITY, MessageType.INFO, false); DynamicCooldownManager.use(playerUUID, "city:big", 60000); DynamicCooldownManager.use(cityUUID, "city:immunity", IMMUNITY_COOLDOWN); diff --git a/src/main/java/fr/openmc/core/features/city/conditions/CityChestConditions.java b/src/main/java/fr/openmc/core/features/city/conditions/CityChestConditions.java index a6fb5cdc9..e50fe2449 100644 --- a/src/main/java/fr/openmc/core/features/city/conditions/CityChestConditions.java +++ b/src/main/java/fr/openmc/core/features/city/conditions/CityChestConditions.java @@ -40,17 +40,23 @@ public static boolean canCityChestOpen(City city, Player player) { } if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.CHEST)) { - MessagesManager.sendMessage(player, Component.text("Vous n'avez pas débloqué cette feature ! Veuillez améliorer votre ville au niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.CHEST) + "!"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "messages.city.havent_unlocked_feature", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.CHEST)) + ), Prefix.CITY, MessageType.ERROR, false); return false; } if (!city.hasPermission(player.getUniqueId(), CityPermission.CHEST)) { - MessagesManager.sendMessage(player, Component.text("Vous n'avez pas les permissions de voir le coffre"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.conditions.chest.open.no_permission"), Prefix.CITY, MessageType.ERROR, false); return false; } if (city.getChestWatcher() != null) { - MessagesManager.sendMessage(player, Component.text("Le coffre est déjà ouvert par par §c" + Bukkit.getPlayer(city.getChestWatcher()).getName()), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.conditions.chest.open.already_opened_by", + Component.text(Bukkit.getPlayer(city.getChestWatcher()).getName()) + ), Prefix.CITY, MessageType.ERROR, false); return false; } return true; @@ -65,29 +71,35 @@ public static boolean canCityChestOpen(City city, Player player) { */ public static boolean canCityChestUpgrade(City city, Player player) { if (city == null) { - MessagesManager.sendMessage(player, Component.text("Vous n'êtes pas dans une ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("messages.city.player_no_in_city"), Prefix.CITY, MessageType.ERROR, false); return false; } if (!city.hasPermission(player.getUniqueId(), CityPermission.CHEST_UPGRADE)) { - MessagesManager.sendMessage(player, Component.text("Vous n'avez pas les permissions d'améliorer le coffre de la ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.conditions.chest.upgrade.no_permission"), Prefix.CITY, MessageType.ERROR, false); return false; } if (city.getChestPages() >= ChestPageLimitRewards.getChestPageLimit(city.getLevel())) { - MessagesManager.sendMessage(player, Component.text("Le coffre de la ville est déjà au niveau maximum (" + ChestPageLimitRewards.getChestPageLimit(city.getLevel()) + " page(s) maximale(s)), Pour améliorer cette limite, passez a un niveau de ville supérieur"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.conditions.chest.upgrade.max_level", + Component.text(ChestPageLimitRewards.getChestPageLimit(city.getLevel())) + ), Prefix.CITY, MessageType.ERROR, false); return false; } int price = city.getChestPages() * UPGRADE_PER_MONEY; // fonction linéaire f(x)=ax ; a=UPGRADE_PER_MONEY if (city.getBalance() < price) { - MessagesManager.sendMessage(player, Component.text("La ville n'as pas assez d'argent (" + price + EconomyManager.getEconomyIcon() + " nécessaires)"), Prefix.CITY, MessageType.ERROR, true); + MessagesManager.sendMessage(player, TranslationManager.translation( + "messages.city.city_not_enough_money", + Component.text(price + EconomyManager.getEconomyIcon()) + ), Prefix.CITY, MessageType.ERROR, true); return false; } int aywenite = city.getChestPages() * UPGRADE_PER_AYWENITE; // fonction linéaire f(x)=ax ; a=UPGRADE_PER_MONEY if (!ItemUtils.hasEnoughItems(player, Objects.requireNonNull(CustomItemRegistry.getByName("omc_items:aywenite")).getBest(), aywenite)) { - MessagesManager.sendMessage(player, Component.text("Vous n'avez pas assez d'§dAywenite §f(" + aywenite + " nécessaires)"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.conditions.resource.not_enough_aywenite", Component.text(aywenite)), Prefix.CITY, MessageType.ERROR, false); return false; } diff --git a/src/main/java/fr/openmc/core/features/city/conditions/CityClaimCondition.java b/src/main/java/fr/openmc/core/features/city/conditions/CityClaimCondition.java index 9f904c820..b9f7b873a 100644 --- a/src/main/java/fr/openmc/core/features/city/conditions/CityClaimCondition.java +++ b/src/main/java/fr/openmc/core/features/city/conditions/CityClaimCondition.java @@ -11,7 +11,6 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -37,7 +36,7 @@ public static boolean canCityClaim(City city, Player player) { } if (!(city.hasPermission(player.getUniqueId(), CityPermission.CLAIM))) { - MessagesManager.sendMessage(player, Component.text("Tu n'as pas la permission de claim"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.conditions.claim.no_permission"), Prefix.CITY, MessageType.ERROR, false); return false; } @@ -47,7 +46,7 @@ public static boolean canCityClaim(City city, Player player) { if (!ItemUtils.hasEnoughItems(player, CustomItemRegistry.getByName("omc_items:aywenite").getBest(), amount)) { MessagesManager.sendMessage( player, - Component.text("Vous n'avez pas assez d'§dAywenite §f(" + amount + " nécessaires)"), + TranslationManager.translation("feature.city.conditions.resource.not_enough_aywenite", Component.text(amount)), Prefix.OPENMC, MessageType.ERROR, false @@ -58,7 +57,10 @@ public static boolean canCityClaim(City city, Player player) { double money = CityClaimAction.calculatePrice(city.getChunks().size()); if (city.getBalance() < money) { - MessagesManager.sendMessage(player, Component.text("§cTu n'as pas assez d'argent dans ta banque pour claim (" + money).append(Component.text(EconomyManager.getEconomyIcon() + " §cnécessaires)")).decoration(TextDecoration.ITALIC, false), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.conditions.claim.not_enough_city_money", + Component.text(money + EconomyManager.getEconomyIcon()) + ), Prefix.CITY, MessageType.ERROR, false); return false; } diff --git a/src/main/java/fr/openmc/core/features/city/conditions/CityCreateConditions.java b/src/main/java/fr/openmc/core/features/city/conditions/CityCreateConditions.java index f13c4ee24..5074933c1 100644 --- a/src/main/java/fr/openmc/core/features/city/conditions/CityCreateConditions.java +++ b/src/main/java/fr/openmc/core/features/city/conditions/CityCreateConditions.java @@ -11,7 +11,6 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.entity.Player; import java.util.Objects; @@ -33,7 +32,10 @@ public class CityCreateConditions { */ public static boolean canCityCreate(Player player, String cityName) { if (!DynamicCooldownManager.isReady(player.getUniqueId(), "city:big")) { - MessagesManager.sendMessage(player, Component.text("§cTu dois attendre avant de pouvoir créer ta ville ("+ DynamicCooldownManager.getRemaining(player.getUniqueId(), "city:big")/1000 + " secondes)"), Prefix.CITY, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.conditions.create.must_wait", + Component.text(DynamicCooldownManager.getRemaining(player.getUniqueId(), "city:big") / 1000) + ), Prefix.CITY, MessageType.INFO, false); return false; } @@ -43,17 +45,20 @@ public static boolean canCityCreate(Player player, String cityName) { } if (EconomyManager.getBalance(player.getUniqueId()) < MONEY_CREATE) { - MessagesManager.sendMessage(player, Component.text("§cTu n'as pas assez d'argent pour créer ta ville (" + MONEY_CREATE).append(Component.text(EconomyManager.getEconomyIcon() + " §cnécessaires)")).decoration(TextDecoration.ITALIC, false), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.conditions.create.not_enough_player_money", + Component.text(MONEY_CREATE + EconomyManager.getEconomyIcon()) + ), Prefix.CITY, MessageType.ERROR, false); return false; } if (!ItemUtils.hasEnoughItems(player, Objects.requireNonNull(CustomItemRegistry.getByName("omc_items:aywenite")).getBest(), AYWENITE_CREATE)) { - MessagesManager.sendMessage(player, Component.text("§cTu n'as pas assez d'§dAywenite §cpour créer ta ville (" + AYWENITE_CREATE +" nécessaires)"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.conditions.resource.not_enough_aywenite", Component.text(AYWENITE_CREATE)), Prefix.CITY, MessageType.ERROR, false); return false; } if (cityName != null && !InputUtils.isInputCityName(cityName)) { - MessagesManager.sendMessage(player, Component.text("Le nom de ville est invalide, il doit contenir uniquement des caractères alphanumerique et doit faire moins de 24 caractères"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.commands.rename.invalid_name", Component.text(InputUtils.MAX_LENGTH_CITY)), Prefix.CITY, MessageType.ERROR, false); return false; } diff --git a/src/main/java/fr/openmc/core/features/city/conditions/CityInviteConditions.java b/src/main/java/fr/openmc/core/features/city/conditions/CityInviteConditions.java index f81edd030..769662c8c 100644 --- a/src/main/java/fr/openmc/core/features/city/conditions/CityInviteConditions.java +++ b/src/main/java/fr/openmc/core/features/city/conditions/CityInviteConditions.java @@ -36,22 +36,25 @@ public static boolean canCityInvitePlayer(City city, Player player, Player targe } if (!(city.hasPermission(player.getUniqueId(), CityPermission.INVITE))) { - MessagesManager.sendMessage(player, Component.text("Tu n'as pas la permission d'inviter des joueurs dans la ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.conditions.invite.no_permission"), Prefix.CITY, MessageType.ERROR, false); return false; } if (CityManager.getPlayerCity(target.getUniqueId()) != null) { - MessagesManager.sendMessage(player, Component.text("Cette personne est déjà dans une ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.conditions.invite.target_already_in_city"), Prefix.CITY, MessageType.ERROR, false); return false; } if (!PlayerSettingsManager.canReceiveCityInvite(player.getUniqueId(), target.getUniqueId())) { - MessagesManager.sendMessage(player, Component.text("§cCette personne ne peut pas recevoir d'invitation"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.conditions.invite.target_cant_receive"), Prefix.CITY, MessageType.ERROR, false); return false; } if (city.getMembers().size() >= MemberLimitRewards.getMemberLimit(city.getLevel())) { - MessagesManager.sendMessage(player, Component.text("§cVous avez atteint la limite de membre qui est de §3" + MemberLimitRewards.getMemberLimit(city.getLevel()) + "§f, Améliorez votre ville au niveau supérieur !"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.conditions.invite.member_limit_reached", + Component.text(MemberLimitRewards.getMemberLimit(city.getLevel())) + ), Prefix.CITY, MessageType.ERROR, false); return false; } @@ -68,12 +71,12 @@ public static boolean canCityInviteDeny(Player player, Player inviter) { List playerInvitations = CityInviteCommands.invitations.get(player); if (playerInvitations == null) { - MessagesManager.sendMessage(player, Component.text("Tu n'as aucune invitation en attente"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.invite.commands.accept.none_pending"), Prefix.CITY, MessageType.ERROR, false); return false; } if (!playerInvitations.contains(inviter)) { - MessagesManager.sendMessage(player, Component.text(inviter.getName() + " ne vous a pas invité"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.invite.commands.accept.not_invited", Component.text(inviter.getName())), Prefix.CITY, MessageType.ERROR, false); return false; } @@ -90,12 +93,12 @@ public static boolean canCityInviteDeny(Player player, Player inviter) { */ public static boolean canCityInviteAccept(City newCity, Player inviter, Player invitedPlayer) { if (!CityInviteCommands.invitations.containsKey(invitedPlayer)) { - MessagesManager.sendMessage(invitedPlayer, Component.text("Tu n'as aucune invitation en attente"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(invitedPlayer, TranslationManager.translation("feature.city.invite.commands.accept.none_pending"), Prefix.CITY, MessageType.ERROR, false); return false; } if (newCity == null) { - MessagesManager.sendMessage(invitedPlayer, Component.text("L'invitation a expiré"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(invitedPlayer, TranslationManager.translation("feature.city.conditions.invite.expired"), Prefix.CITY, MessageType.ERROR, false); List playerInvitations = CityInviteCommands.invitations.get(invitedPlayer); playerInvitations.remove(inviter); @@ -106,7 +109,7 @@ public static boolean canCityInviteAccept(City newCity, Player inviter, Player i } if (newCity.getMembers().size() >= MemberLimitRewards.getMemberLimit(newCity.getLevel())) { - MessagesManager.sendMessage(invitedPlayer, Component.text("La ville a atteint sa limite de membre"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(invitedPlayer, TranslationManager.translation("feature.city.conditions.invite.city_member_limit_reached"), Prefix.CITY, MessageType.ERROR, false); List playerInvitations = CityInviteCommands.invitations.get(invitedPlayer); playerInvitations.remove(inviter); diff --git a/src/main/java/fr/openmc/core/features/city/conditions/CityLeaveCondition.java b/src/main/java/fr/openmc/core/features/city/conditions/CityLeaveCondition.java index cb154d7af..4a995dc38 100644 --- a/src/main/java/fr/openmc/core/features/city/conditions/CityLeaveCondition.java +++ b/src/main/java/fr/openmc/core/features/city/conditions/CityLeaveCondition.java @@ -6,7 +6,6 @@ import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; -import net.kyori.adventure.text.Component; import org.bukkit.entity.Player; /** @@ -29,7 +28,7 @@ public static boolean canCityLeave(City city, Player player) { } if (city.hasPermission(player.getUniqueId(), CityPermission.OWNER)) { - MessagesManager.sendMessage(player, Component.text("Tu ne peux pas quitter la ville car tu en es le propriétaire, supprime la ville ou transfère la propriété"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.conditions.leave.owner_cant_leave"), Prefix.CITY, MessageType.ERROR, false); return false; } return true; diff --git a/src/main/java/fr/openmc/core/features/city/conditions/CityManageConditions.java b/src/main/java/fr/openmc/core/features/city/conditions/CityManageConditions.java index dccb8958a..e3f5e283f 100644 --- a/src/main/java/fr/openmc/core/features/city/conditions/CityManageConditions.java +++ b/src/main/java/fr/openmc/core/features/city/conditions/CityManageConditions.java @@ -32,7 +32,7 @@ public static boolean canCityRename(City city, Player player) { } if (!(city.hasPermission(player.getUniqueId(), CityPermission.RENAME))) { - MessagesManager.sendMessage(player, Component.text("Tu n'as pas la permission de renommer ta ville."), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.conditions.manage.rename.no_permission"), Prefix.CITY, MessageType.ERROR, false); return false; } @@ -54,12 +54,12 @@ public static boolean canCityTransfer(City city, Player player, UUID target) { } if (target.equals(player.getUniqueId())) { - MessagesManager.sendMessage(player, Component.text("Tu ne peux pas te transférer la ville à toi-même"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.conditions.manage.transfer.self"), Prefix.CITY, MessageType.ERROR, false); return false; } if (city.getPlayerWithPermission(CityPermission.OWNER).equals(target)) { - MessagesManager.sendMessage(player, Component.text("Ce joueur est déjà le propriétaire de la ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.conditions.manage.transfer.already_owner"), Prefix.CITY, MessageType.ERROR, false); return false; } @@ -80,12 +80,12 @@ public static boolean canCityTransfer(City city, Player player) { } if (!(city.hasPermission(player.getUniqueId(), CityPermission.OWNER))) { - MessagesManager.sendMessage(player, Component.text("Tu n'es pas le propriétaire de la ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.player_isnt_owner"), Prefix.CITY, MessageType.ERROR, false); return false; } if (!city.getMembers().contains(player.getUniqueId())) { - MessagesManager.sendMessage(player, Component.text("Ce joueur n'est pas dans votre ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("messages.city.target_in_other_city"), Prefix.CITY, MessageType.ERROR, false); return false; } @@ -106,17 +106,20 @@ public static boolean canCityDelete(City city, Player player) { } if (!DynamicCooldownManager.isReady(player.getUniqueId(), "city:big")) { - MessagesManager.sendMessage(player, Component.text("§cTu dois attendre avant de pouvoir supprimer ta ville ("+ DynamicCooldownManager.getRemaining(player.getUniqueId(), "city:big")/1000 + " secondes)"), Prefix.CITY, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.conditions.manage.delete.must_wait", + Component.text(DynamicCooldownManager.getRemaining(player.getUniqueId(), "city:big") / 1000) + ), Prefix.CITY, MessageType.INFO, false); return false; } if (city.isInWar()) { - MessagesManager.sendMessage(player, Component.text("§cVous ne pouvez pas supprimer votre ville pendant une guerre"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.conditions.manage.delete.cant_in_war"), Prefix.CITY, MessageType.ERROR, false); return false; } if (!city.getPlayerWithPermission(CityPermission.OWNER).equals(player.getUniqueId())) { - MessagesManager.sendMessage(player, Component.text("Tu n'es pas le propriétaire de la ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.player_isnt_owner"), Prefix.CITY, MessageType.ERROR, false); return false; } return true; diff --git a/src/main/java/fr/openmc/core/features/city/conditions/CityTypeConditions.java b/src/main/java/fr/openmc/core/features/city/conditions/CityTypeConditions.java index 7180d1165..a3d149a12 100644 --- a/src/main/java/fr/openmc/core/features/city/conditions/CityTypeConditions.java +++ b/src/main/java/fr/openmc/core/features/city/conditions/CityTypeConditions.java @@ -34,22 +34,28 @@ public static boolean canCityChangeType(City city, Player player, CityType toTyp } if (!(city.hasPermission(player.getUniqueId(), CityPermission.TYPE))) { - MessagesManager.sendMessage(player, Component.text("Tu n'as pas la permission de changer le statut de ta ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.conditions.type.no_permission"), Prefix.CITY, MessageType.ERROR, false); return false; } if (city.getType().equals(toType)) { - MessagesManager.sendMessage(player, Component.text("Tu es déjà en " + toType.getName()), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.conditions.type.already_in_type", Component.text(toType.getName())), Prefix.CITY, MessageType.ERROR, false); return false; } if (!DynamicCooldownManager.isReady(city.getUniqueId(), "city:type")) { - MessagesManager.sendMessage(player, Component.text("Vous devez attendre " + DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(city.getUniqueId(), "city:type")) + " pour changer de type de ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.conditions.type.must_wait", + Component.text(DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(city.getUniqueId(), "city:type"))) + ), Prefix.CITY, MessageType.ERROR, false); return false; } if (city.getBalance() < REQUIRED_MONEY_TYPE) { - MessagesManager.sendMessage(player, Component.text("Vous devez avoir au moins " + REQUIRED_MONEY_TYPE + EconomyManager.getEconomyIcon() + " dans votre banque pour changer le type de votre ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.conditions.type.not_enough_city_money", + Component.text(REQUIRED_MONEY_TYPE + EconomyManager.getEconomyIcon()) + ), Prefix.CITY, MessageType.ERROR, false); return false; } diff --git a/src/main/java/fr/openmc/core/features/city/conditions/CityUnclaimCondition.java b/src/main/java/fr/openmc/core/features/city/conditions/CityUnclaimCondition.java index a61087a7f..c326df525 100644 --- a/src/main/java/fr/openmc/core/features/city/conditions/CityUnclaimCondition.java +++ b/src/main/java/fr/openmc/core/features/city/conditions/CityUnclaimCondition.java @@ -6,7 +6,6 @@ import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; -import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -32,7 +31,7 @@ public static boolean canCityUnclaim(City city, Player player) { } if (!(city.hasPermission(player.getUniqueId(), CityPermission.CLAIM))) { - MessagesManager.sendMessage(player, Component.text("Tu n'as pas la permission de unclaim"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.conditions.unclaim.no_permission"), Prefix.CITY, MessageType.ERROR, false); return false; } diff --git a/src/main/resources/translations/lang.properties b/src/main/resources/translations/lang.properties index 1e49643ac..dc30682c2 100644 --- a/src/main/resources/translations/lang.properties +++ b/src/main/resources/translations/lang.properties @@ -267,6 +267,48 @@ feature.city.player_isnt_owner=Tu n'es pas le propriétaire de la villeSeul le propriétaire de la ville peut faire cela. +# - Manage +feature.city.conditions.manage.rename.no_permission=Tu n'as pas la permission de renommer ta ville. +feature.city.conditions.manage.transfer.self=Tu ne peux pas te transférer la ville à toi-même +feature.city.conditions.manage.transfer.already_owner=Ce joueur est déjà le propriétaire de la ville +feature.city.conditions.manage.delete.must_wait=Tu dois attendre avant de pouvoir supprimer ta ville (%1$s secondes) +feature.city.conditions.manage.delete.cant_in_war=Vous ne pouvez pas supprimer votre ville pendant une guerre + +# - Claim / Unclaim +feature.city.conditions.claim.no_permission=Tu n'as pas la permission de claim +feature.city.conditions.unclaim.no_permission=Tu n'as pas la permission de unclaim +feature.city.conditions.claim.not_enough_city_money=Tu n'as pas assez d'argent dans ta banque pour claim (%1$s nécessaires) + +# - Create +feature.city.conditions.create.must_wait=Tu dois attendre avant de pouvoir créer ta ville (%1$s secondes) +feature.city.conditions.create.not_enough_player_money=Tu n'as pas assez d'argent pour créer ta ville (%1$s nécessaires) + +# - Resources +feature.city.conditions.resource.not_enough_aywenite=Vous n'avez pas assez d'Aywenite (%1$s nécessaires) + +# - Chest +feature.city.conditions.chest.open.no_permission=Vous n'avez pas les permissions de voir le coffre +feature.city.conditions.chest.open.already_opened_by=Le coffre est déjà ouvert par %1$s +feature.city.conditions.chest.upgrade.no_permission=Vous n'avez pas les permissions d'améliorer le coffre de la ville +feature.city.conditions.chest.upgrade.max_level=Le coffre de la ville est déjà au niveau maximum (%1$s page(s) maximale(s)). Pour améliorer cette limite, passez à un niveau de ville supérieur + +# - Invite +feature.city.conditions.invite.no_permission=Tu n'as pas la permission d'inviter des joueurs dans la ville +feature.city.conditions.invite.target_already_in_city=Cette personne est déjà dans une ville +feature.city.conditions.invite.target_cant_receive=Cette personne ne peut pas recevoir d'invitation +feature.city.conditions.invite.member_limit_reached=Vous avez atteint la limite de membre qui est de %1$s. Améliorez votre ville au niveau supérieur ! +feature.city.conditions.invite.expired=L'invitation a expiré +feature.city.conditions.invite.city_member_limit_reached=La ville a atteint sa limite de membre + +# - Type +feature.city.conditions.type.no_permission=Tu n'as pas la permission de changer le statut de ta ville +feature.city.conditions.type.already_in_type=Tu es déjà en %1$s +feature.city.conditions.type.must_wait=Vous devez attendre %1$s pour changer de type de ville +feature.city.conditions.type.not_enough_city_money=Vous devez avoir au moins %1$s dans votre banque pour changer le type de votre ville + +# - Leave +feature.city.conditions.leave.owner_cant_leave=Tu ne peux pas quitter la ville car tu en es le propriétaire, supprime la ville ou transfère la propriété + # * SUB FEATURES # - City Grades feature.city.grade.cannot_exist=Ce grade n'existe pas. From b27a342a1892b1e5482acb5afd5da5ac560367ec Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Fri, 20 Mar 2026 21:37:49 +0100 Subject: [PATCH 04/20] fix color --- .../openmc/core/features/city/commands/AdminCityCommands.java | 2 +- src/main/resources/translations/lang.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/city/commands/AdminCityCommands.java b/src/main/java/fr/openmc/core/features/city/commands/AdminCityCommands.java index f49029b7a..3b3d1b3bd 100644 --- a/src/main/java/fr/openmc/core/features/city/commands/AdminCityCommands.java +++ b/src/main/java/fr/openmc/core/features/city/commands/AdminCityCommands.java @@ -67,7 +67,7 @@ void list(Player player) { List sub = all.subList(start, end); MessagesManager.sendMessage( player, - TranslationManager.translation("feature.city.admin.commands.list.header", Component.text(page), Component.text(maxPage)), + TranslationManager.translation("feature.city.admin.commands.list.header", Component.text(page), Component.text(maxPage)).color(NamedTextColor.GOLD), Prefix.STAFF, MessageType.SUCCESS, false diff --git a/src/main/resources/translations/lang.properties b/src/main/resources/translations/lang.properties index dc30682c2..b4b175488 100644 --- a/src/main/resources/translations/lang.properties +++ b/src/main/resources/translations/lang.properties @@ -163,7 +163,7 @@ feature.city.commands.top.empty=Aucune ville n'est créée pour le moment # - Admin Commands feature.city.admin.commands.delete.success=La ville a été supprimée -feature.city.admin.commands.list.header=—— Villes (page %1$s / %2$s) —— +feature.city.admin.commands.list.header=—— Villes (page %1$s / %2$s) —— feature.city.admin.commands.list.copy_label= [copier] feature.city.admin.commands.list.copy_uuid_hover=Clique pour copier l'UUID feature.city.admin.commands.list.nav.prev=« Précédent From 6ca7e2f4d4951844adb0f2896e60fd82f5eb1abb Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Sat, 21 Mar 2026 16:16:47 +0100 Subject: [PATCH 05/20] translate other (exclude menus, and sub package) --- .../fr/openmc/core/features/city/City.java | 16 +++++- .../core/features/city/CityChatManager.java | 14 +++-- .../core/features/city/CityPermission.java | 57 ++++++++++--------- .../openmc/core/features/city/CityType.java | 17 ++---- .../features/city/ProtectionsManager.java | 4 +- .../city/conditions/CityChestConditions.java | 4 +- .../city/conditions/CityPermsConditions.java | 6 +- .../city/conditions/CityTypeConditions.java | 4 +- .../protections/ExplodeProtection.java | 11 +++- .../features/city/menu/CityChestMenu.java | 2 +- .../city/menu/list/CityListDetailsMenu.java | 2 +- .../city/menu/main/buttons/ChestButton.java | 2 +- .../city/menu/main/buttons/TypeButton.java | 7 ++- .../playerlist/CityPlayerGestionMenu.java | 2 +- .../menu/playerlist/CityPlayerListMenu.java | 2 +- .../core/features/city/models/DBCityRank.java | 11 ++-- .../bank/conditions/CityBankConditions.java | 4 +- .../sub/bank/menu/CityBankDepositMenu.java | 2 +- .../city/sub/bank/menu/CityBankMenu.java | 8 +-- .../sub/bank/menu/CityBankWithdrawMenu.java | 2 +- .../city/sub/mascots/menu/MascotMenu.java | 2 +- .../sub/notation/menu/NotationDialog.java | 2 +- .../city/sub/rank/CityRankCommands.java | 6 +- .../city/sub/rank/CityRankCondition.java | 2 +- .../sub/war/menu/main/WarCityDetailsMenu.java | 2 +- .../features/city/view/CityViewManager.java | 6 +- .../resources/translations/lang.properties | 53 ++++++++++++++++- 27 files changed, 161 insertions(+), 89 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/city/City.java b/src/main/java/fr/openmc/core/features/city/City.java index 26c4df7c0..a5cf5c27a 100644 --- a/src/main/java/fr/openmc/core/features/city/City.java +++ b/src/main/java/fr/openmc/core/features/city/City.java @@ -28,6 +28,7 @@ import lombok.Getter; import lombok.Setter; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.OfflinePlayer; @@ -794,13 +795,17 @@ public void changeRank(Player sender, UUID playerUUID, DBCityRank newRank) { DBCityRank currentRank = getRankOfMember(playerUUID); OfflinePlayer player = CacheOfflinePlayer.getOfflinePlayer(playerUUID); - + if (currentRank != null) { currentRank.removeMember(playerUUID); for (CityPermission permission : currentRank.getPermissionsSet()) { removePermission(playerUUID, permission); } - MessagesManager.sendMessage(sender, Component.text("§cVous avez retiré le grade §e" + currentRank.getName() + "§c de §6" + player.getName()), Prefix.CITY, MessageType.SUCCESS, true); + MessagesManager.sendMessage(sender, + TranslationManager.translation("feature.city.grade.remove_grade", + Component.text(currentRank.getName()).color(NamedTextColor.YELLOW), + Component.text(player.getName())).color(NamedTextColor.GOLD), + Prefix.CITY, MessageType.SUCCESS, true); } if (currentRank != newRank) { @@ -808,7 +813,12 @@ public void changeRank(Player sender, UUID playerUUID, DBCityRank newRank) { for (CityPermission permission : newRank.getPermissionsSet()) { addPermission(playerUUID, permission); } - MessagesManager.sendMessage(sender, Component.text("§aVous avez assigné le grade §e" + newRank.getName() + "§a à §6" + player.getName()), Prefix.CITY, MessageType.SUCCESS, true); + MessagesManager.sendMessage(sender, + TranslationManager.translation("feature.city.grade.assign_grade", + Component.text(newRank.getName()).color(NamedTextColor.YELLOW), + Component.text(player.getName()).color(NamedTextColor.GOLD) + ), + Prefix.CITY, MessageType.SUCCESS, true); } Bukkit.getScheduler().runTaskAsynchronously(OMCPlugin.getInstance(), () -> { diff --git a/src/main/java/fr/openmc/core/features/city/CityChatManager.java b/src/main/java/fr/openmc/core/features/city/CityChatManager.java index 0ed0b1ebd..39d033f96 100644 --- a/src/main/java/fr/openmc/core/features/city/CityChatManager.java +++ b/src/main/java/fr/openmc/core/features/city/CityChatManager.java @@ -3,6 +3,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; @@ -26,7 +27,8 @@ public class CityChatManager { */ public static void addCityChatMember(Player player) { cityChatMembers.add(player); - MessagesManager.sendMessage(player, Component.text("Vous avez rejoint le chat de ville"), Prefix.CITY, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.chat.entered"), + Prefix.CITY, MessageType.INFO, false); } /** @@ -35,7 +37,8 @@ public static void addCityChatMember(Player player) { */ public static void removeCityChatMember(Player player) { cityChatMembers.remove(player); - MessagesManager.sendMessage(player, Component.text("Vous avez quitté le chat de ville"), Prefix.CITY, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.chat.leaved"), + Prefix.CITY, MessageType.INFO, false); } /** @@ -55,11 +58,14 @@ public static boolean isCityChatMember(Player player) { public static void sendCityChatMessage(Player sender, Component message) { City city = CityManager.getPlayerCity(sender.getUniqueId()); if (city == null) { - MessagesManager.sendMessage(sender, Component.text("Tu n'habites dans aucune ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(sender, TranslationManager.translation("messages.city.player_no_in_city"), + Prefix.CITY, MessageType.ERROR, false); return; } - Component msg_component = Component.text("#ville ").color(NamedTextColor.GOLD).append(sender.displayName().color(NamedTextColor.WHITE)).append( + Component msg_component = TranslationManager.translation("feature.city.chat.prefix").color(NamedTextColor.GOLD) + .appendSpace() + .append(sender.displayName().color(NamedTextColor.WHITE)).append( Component.text(" » ").color(NamedTextColor.GRAY).append( message.color(NamedTextColor.WHITE) ) diff --git a/src/main/java/fr/openmc/core/features/city/CityPermission.java b/src/main/java/fr/openmc/core/features/city/CityPermission.java index 309701b22..65c04ac11 100644 --- a/src/main/java/fr/openmc/core/features/city/CityPermission.java +++ b/src/main/java/fr/openmc/core/features/city/CityPermission.java @@ -1,41 +1,42 @@ package fr.openmc.core.features.city; +import fr.openmc.core.utils.messages.TranslationManager; import lombok.Getter; +import net.kyori.adventure.text.Component; import org.bukkit.Material; +@Getter public enum CityPermission { - OWNER("Propriétaire", Material.NETHERITE_BLOCK), //Impossible à donner sauf avec un transfert - INVITE("Inviter", Material.OAK_DOOR), - KICK("Expulser", Material.IRON_DOOR), - PLACE("Placer des blocs", Material.OAK_LOG), - BREAK("Casser des blocs", Material.STONE_PICKAXE), - OPEN_CHEST("Ouvrir les coffres", Material.CHEST), - INTERACT("Interagir avec les blocs (sauf coffres)", Material.LEVER), - CLAIM("Claim", Material.GRASS_BLOCK), - SEE_CHUNKS("Voir les claims", Material.MAP), - RENAME("Renommer", Material.NAME_TAG), - MONEY_GIVE("Déposer de l'argent", Material.EMERALD), - MONEY_BALANCE("Voir l'argent", Material.GOLD_INGOT), - MONEY_TAKE("Retirer de l'argent", Material.DIAMOND), - PERMS("Permissions", Material.DIAMOND_BLOCK), // Cette permission est donnée seulement par l'owner - CHEST("Accès au coffre de ville", Material.ENDER_CHEST), - CHEST_UPGRADE("Améliorer le coffre de ville", Material.OAK_CHEST_BOAT), - TYPE("Changer le type de ville", Material.BIRCH_SIGN), - MASCOT_MOVE("Déplacer la mascotte", Material.LEAD), - MASCOT_SKIN("Changer le skin de la mascotte", Material.ZOMBIE_SPAWN_EGG), - MASCOT_UPGRADE("Améliorer la mascotte", Material.BONE), - MASCOT_HEAL("Soigner la mascotte", Material.POTION), - LAUNCH_WAR("Lancer des guerres", Material.IRON_SWORD), - MANAGE_RANKS("Gérer les grades", Material.PAPER), - ASSIGN_RANKS("Assigner des grades", Material.BOOK) + OWNER(TranslationManager.translation("feature.city.permission.owner"), Material.NETHERITE_BLOCK), //Impossible à donner sauf avec un transfert + INVITE(TranslationManager.translation("feature.city.permission.invite"), Material.OAK_DOOR), + KICK(TranslationManager.translation("feature.city.permission.kick"), Material.IRON_DOOR), + PLACE(TranslationManager.translation("feature.city.permission.place"), Material.OAK_LOG), + BREAK(TranslationManager.translation("feature.city.permission.break"), Material.STONE_PICKAXE), + OPEN_CHEST(TranslationManager.translation("feature.city.permission.open_chest"), Material.CHEST), + INTERACT(TranslationManager.translation("feature.city.permission.interact"), Material.LEVER), + CLAIM(TranslationManager.translation("feature.city.permission.claim"), Material.GRASS_BLOCK), + SEE_CHUNKS(TranslationManager.translation("feature.city.permission.see_claim"), Material.MAP), + RENAME(TranslationManager.translation("feature.city.permission.rename"), Material.NAME_TAG), + MONEY_DEPOSIT(TranslationManager.translation("feature.city.permission.money_deposit"), Material.EMERALD), + MONEY_BALANCE(TranslationManager.translation("feature.city.permission.money_see"), Material.GOLD_INGOT), + MONEY_WITHDRAW(TranslationManager.translation("feature.city.permission.money_withdraw"), Material.DIAMOND), + MANAGE_PERMS(TranslationManager.translation("feature.city.permission.manage_perm"), Material.DIAMOND_BLOCK), // Cette permission est donnée seulement par l'owner + ACCESS_CITY_CHEST(TranslationManager.translation("feature.city.permission.access_city_chest"), Material.ENDER_CHEST), + UPGRADE_CHEST(TranslationManager.translation("feature.city.permission.upgrade_chest"), Material.OAK_CHEST_BOAT), + CHANGE_TYPE(TranslationManager.translation("feature.city.permission.change_type"), Material.BIRCH_SIGN), + MASCOT_MOVE(TranslationManager.translation("feature.city.permission.move_mascot"), Material.LEAD), + MASCOT_CHANGE_SKIN(TranslationManager.translation("feature.city.permission.change_mascot_skin"), Material.ZOMBIE_SPAWN_EGG), + MASCOT_UPGRADE(TranslationManager.translation("feature.city.permission.upgrade_mascot"), Material.BONE), + MASCOT_HEAL(TranslationManager.translation("feature.city.permission.heal_mascot"), Material.POTION), + LAUNCH_WAR(TranslationManager.translation("feature.city.permission.launch_war"), Material.IRON_SWORD), + MANAGE_RANKS(TranslationManager.translation("feature.city.permission.manage_grade"), Material.PAPER), + ASSIGN_RANKS(TranslationManager.translation("feature.city.permission.assign_grade"), Material.BOOK) ; - @Getter - private final String displayName; - @Getter + private final Component displayName; private final Material icon; - CityPermission(String displayName, Material icon) { + CityPermission(Component displayName, Material icon) { this.displayName = displayName; this.icon = icon; } diff --git a/src/main/java/fr/openmc/core/features/city/CityType.java b/src/main/java/fr/openmc/core/features/city/CityType.java index 66c38e4ad..989e77744 100644 --- a/src/main/java/fr/openmc/core/features/city/CityType.java +++ b/src/main/java/fr/openmc/core/features/city/CityType.java @@ -1,23 +1,18 @@ package fr.openmc.core.features.city; +import fr.openmc.core.utils.messages.TranslationManager; import lombok.Getter; +import net.kyori.adventure.text.Component; @Getter public enum CityType { - WAR("Guerre", "§c"), - PEACE("Paix", "§a"), - + WAR(TranslationManager.translation("feature.city.war.war")), + PEACE(TranslationManager.translation("feature.city.war.peace")), ; - private String displayName; - private String color; + private final Component displayName; - CityType(String displayName, String color) { + CityType(Component displayName) { this.displayName = displayName; - this.color = color; - } - - public String getName() { - return color + displayName + "§7"; } } diff --git a/src/main/java/fr/openmc/core/features/city/ProtectionsManager.java b/src/main/java/fr/openmc/core/features/city/ProtectionsManager.java index c5d174f63..db1ccdf3b 100644 --- a/src/main/java/fr/openmc/core/features/city/ProtectionsManager.java +++ b/src/main/java/fr/openmc/core/features/city/ProtectionsManager.java @@ -6,7 +6,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; -import net.kyori.adventure.text.Component; +import fr.openmc.core.utils.messages.TranslationManager; import org.bukkit.Location; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; @@ -123,7 +123,7 @@ public static void cancelMessage(Player player) { lastErrorMessageTime.put(player.getUniqueId(), now); MessagesManager.sendMessage( player, - Component.text("Vous n'avez pas l'autorisation de faire ceci !"), + TranslationManager.translation("feature.city.cant_do_this"), Prefix.CITY, MessageType.ERROR, 0.6F, diff --git a/src/main/java/fr/openmc/core/features/city/conditions/CityChestConditions.java b/src/main/java/fr/openmc/core/features/city/conditions/CityChestConditions.java index e50fe2449..4806416fa 100644 --- a/src/main/java/fr/openmc/core/features/city/conditions/CityChestConditions.java +++ b/src/main/java/fr/openmc/core/features/city/conditions/CityChestConditions.java @@ -47,7 +47,7 @@ public static boolean canCityChestOpen(City city, Player player) { return false; } - if (!city.hasPermission(player.getUniqueId(), CityPermission.CHEST)) { + if (!city.hasPermission(player.getUniqueId(), CityPermission.ACCESS_CITY_CHEST)) { MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.conditions.chest.open.no_permission"), Prefix.CITY, MessageType.ERROR, false); return false; } @@ -75,7 +75,7 @@ public static boolean canCityChestUpgrade(City city, Player player) { return false; } - if (!city.hasPermission(player.getUniqueId(), CityPermission.CHEST_UPGRADE)) { + if (!city.hasPermission(player.getUniqueId(), CityPermission.UPGRADE_CHEST)) { MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.conditions.chest.upgrade.no_permission"), Prefix.CITY, MessageType.ERROR, false); return false; } diff --git a/src/main/java/fr/openmc/core/features/city/conditions/CityPermsConditions.java b/src/main/java/fr/openmc/core/features/city/conditions/CityPermsConditions.java index fdace79c9..4d445650e 100644 --- a/src/main/java/fr/openmc/core/features/city/conditions/CityPermsConditions.java +++ b/src/main/java/fr/openmc/core/features/city/conditions/CityPermsConditions.java @@ -53,13 +53,13 @@ public static boolean canModifyPerms(Player sender, CityPermission permission) { return false; } - if (!(city.hasPermission(sender.getUniqueId(), CityPermission.PERMS))) { + if (!(city.hasPermission(sender.getUniqueId(), CityPermission.MANAGE_PERMS))) { MessagesManager.sendMessage(sender, TranslationManager.translation("messages.city.player_no_permission_access"), Prefix.CITY, MessageType.ERROR, false); return false; } - if (!city.hasPermission(sender.getUniqueId(), permission) && permission == CityPermission.PERMS) { - MessagesManager.sendMessage(sender, TranslationManager.translation("feature_city.only_owner_can_do_this"), Prefix.CITY, MessageType.ERROR, false); + if (!city.hasPermission(sender.getUniqueId(), permission) && permission == CityPermission.MANAGE_PERMS) { + MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.only_owner_can_do_this"), Prefix.CITY, MessageType.ERROR, false); return false; } diff --git a/src/main/java/fr/openmc/core/features/city/conditions/CityTypeConditions.java b/src/main/java/fr/openmc/core/features/city/conditions/CityTypeConditions.java index a3d149a12..da08bb3e2 100644 --- a/src/main/java/fr/openmc/core/features/city/conditions/CityTypeConditions.java +++ b/src/main/java/fr/openmc/core/features/city/conditions/CityTypeConditions.java @@ -33,13 +33,13 @@ public static boolean canCityChangeType(City city, Player player, CityType toTyp return false; } - if (!(city.hasPermission(player.getUniqueId(), CityPermission.TYPE))) { + if (!(city.hasPermission(player.getUniqueId(), CityPermission.CHANGE_TYPE))) { MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.conditions.type.no_permission"), Prefix.CITY, MessageType.ERROR, false); return false; } if (city.getType().equals(toType)) { - MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.conditions.type.already_in_type", Component.text(toType.getName())), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.conditions.type.already_in_type", toType.getDisplayName()), Prefix.CITY, MessageType.ERROR, false); return false; } diff --git a/src/main/java/fr/openmc/core/features/city/listeners/protections/ExplodeProtection.java b/src/main/java/fr/openmc/core/features/city/listeners/protections/ExplodeProtection.java index b39fb9d5c..372f6e294 100644 --- a/src/main/java/fr/openmc/core/features/city/listeners/protections/ExplodeProtection.java +++ b/src/main/java/fr/openmc/core/features/city/listeners/protections/ExplodeProtection.java @@ -8,7 +8,9 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; @@ -121,8 +123,13 @@ private void notifyCityMembers(City city, City attackerCity, Player attacker) { if (member.isOnline()) { MessagesManager.sendMessage( (Player) member, - Component.text("Vous vous êtes pris une TNT dans votre ville par la ville §4" + attackerCity.getName() + " §fet posée par §4" + attacker.getName() + "§f ! §8(§c" + currentTnt + "§8/§c" + MAX_TNT_PER_DAY + " tnt journalières§8)"), - Prefix.CITY, + TranslationManager.translation("feature.city.listeners.tnt_explode", + Component.text(attackerCity.getName()).color(NamedTextColor.DARK_RED), + Component.text(attacker.getName()).color(NamedTextColor.DARK_RED), + Component.text(currentTnt).color(NamedTextColor.RED), + Component.text(MAX_TNT_PER_DAY).color(NamedTextColor.RED) + ), + Prefix.CITY, MessageType.WARNING, false ); diff --git a/src/main/java/fr/openmc/core/features/city/menu/CityChestMenu.java b/src/main/java/fr/openmc/core/features/city/menu/CityChestMenu.java index e13e97cd4..e5c2c9197 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/CityChestMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/CityChestMenu.java @@ -153,7 +153,7 @@ public Map getButtons() { loreUpgrade.add(Component.text("§e§lCLIQUEZ ICI POUR AMELIORER LE COFFRE")); } - if (city.hasPermission(getOwner().getUniqueId(), CityPermission.CHEST_UPGRADE) && city.getChestPages() < ChestPageLimitRewards.getChestPageLimit(city.getLevel())) { + if (city.hasPermission(getOwner().getUniqueId(), CityPermission.UPGRADE_CHEST) && city.getChestPages() < ChestPageLimitRewards.getChestPageLimit(city.getLevel())) { map.put(47, new ItemBuilder(this, Material.ENDER_CHEST, itemMeta -> { itemMeta.displayName(Component.text("§aAméliorer le coffre")); itemMeta.lore(loreUpgrade); diff --git a/src/main/java/fr/openmc/core/features/city/menu/list/CityListDetailsMenu.java b/src/main/java/fr/openmc/core/features/city/menu/list/CityListDetailsMenu.java index e85de1d3a..d189346ca 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/list/CityListDetailsMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/list/CityListDetailsMenu.java @@ -153,7 +153,7 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { }).setOnClick(inventoryClickEvent -> new CityPlayerListMenu(getOwner(), city).open())); map.put(26, new ItemBuilder(this, new ItemStack(city.getType().equals(CityType.WAR) ? Material.RED_BANNER : Material.GREEN_BANNER), - itemMeta -> itemMeta.displayName(Component.text("§eType : " + city.getType().getName())))); + itemMeta -> itemMeta.displayName(Component.text("§eType : " + city.getType().getDisplayName())))); map.put(18, new ItemBuilder(this, CustomStack.getInstance("_iainternal:icon_back_orange").getItemStack(), itemMeta -> itemMeta.displayName(Component.text("§eRetour")), true)); return map; diff --git a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ChestButton.java b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ChestButton.java index 749954c5d..a0dc77a65 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ChestButton.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ChestButton.java @@ -39,7 +39,7 @@ public static void init(Menu menu, Map contents, City city } private static List getDynamicLore(City city, Player player) { - boolean hasPermissionChest = city.hasPermission(player.getUniqueId(), CityPermission.CHEST); + boolean hasPermissionChest = city.hasPermission(player.getUniqueId(), CityPermission.ACCESS_CITY_CHEST); List lore; if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.CHEST)) { lore = List.of( diff --git a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/TypeButton.java b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/TypeButton.java index eaffc048a..9ae693b8b 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/TypeButton.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/TypeButton.java @@ -11,6 +11,7 @@ import fr.openmc.core.features.city.menu.CityTypeMenu; import fr.openmc.core.utils.DateUtils; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; @@ -43,17 +44,17 @@ private static Supplier getItemSupplier(Menu menu, City city, Playe meta.lore(getDynamicLore(city, player)); meta.setItemModel(NamespacedKey.minecraft("air")); }).setOnClick(inventoryClickEvent -> { - if (!(city.hasPermission(player.getUniqueId(), CityPermission.TYPE))) return; + if (!(city.hasPermission(player.getUniqueId(), CityPermission.CHANGE_TYPE))) return; new CityTypeMenu(player).open(); }); } private static List getDynamicLore(City city, Player player) { - boolean hasPermissionChangeType = city.hasPermission(player.getUniqueId(), CityPermission.TYPE); + boolean hasPermissionChangeType = city.hasPermission(player.getUniqueId(), CityPermission.CHANGE_TYPE); List lore = new ArrayList<>(); - lore.add(Component.text("§7Votre ville est en §5" + city.getType().getDisplayName().toLowerCase(Locale.ROOT))); + lore.add(Component.text("§7Votre ville est en §5" + PlainTextComponentSerializer.plainText().serialize(city.getType().getDisplayName()).toLowerCase(Locale.ROOT))); if (city.getType().equals(CityType.WAR) && city.hasPermission(player.getUniqueId(), CityPermission.LAUNCH_WAR)) { lore.add(Component.empty()); diff --git a/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerGestionMenu.java b/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerGestionMenu.java index 189825fc2..c03c36f07 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerGestionMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerGestionMenu.java @@ -62,7 +62,7 @@ public void onInventoryClick(InventoryClickEvent click) { assert city != null; boolean hasPermissionKick = city.hasPermission(player.getUniqueId(), CityPermission.KICK); - boolean hasPermissionPerms = city.hasPermission(player.getUniqueId(), CityPermission.PERMS); + boolean hasPermissionPerms = city.hasPermission(player.getUniqueId(), CityPermission.MANAGE_PERMS); List loreKick; diff --git a/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerListMenu.java b/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerListMenu.java index 604850f7c..c741379c9 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerListMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerListMenu.java @@ -71,7 +71,7 @@ public List getItems() { assert city != null; boolean hasPermissionKick = city.hasPermission(player.getUniqueId(), CityPermission.KICK); - boolean hasPermissionPerms = city.hasPermission(player.getUniqueId(), CityPermission.PERMS); + boolean hasPermissionPerms = city.hasPermission(player.getUniqueId(), CityPermission.MANAGE_PERMS); boolean hasPermissionOwner = city.hasPermission(player.getUniqueId(), CityPermission.OWNER); for (UUID uuid : city.getMembers()) { diff --git a/src/main/java/fr/openmc/core/features/city/models/DBCityRank.java b/src/main/java/fr/openmc/core/features/city/models/DBCityRank.java index a77ecca71..f7c6c8056 100644 --- a/src/main/java/fr/openmc/core/features/city/models/DBCityRank.java +++ b/src/main/java/fr/openmc/core/features/city/models/DBCityRank.java @@ -6,8 +6,8 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import lombok.Getter; -import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -85,15 +85,18 @@ public DBCityRank(UUID rankUUID, UUID cityUUID, String name, int priority, Mater */ public DBCityRank validate(Player player) throws IllegalArgumentException { if (name == null || name.isEmpty()) { - MessagesManager.sendMessage(player, Component.text("Le nom du grade ne peut pas être vide"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.grade.name_cannot_be_null"), + Prefix.CITY, MessageType.ERROR, false); throw new IllegalArgumentException("Rank name cannot be null or empty"); } if (priority < 0) { - MessagesManager.sendMessage(player, Component.text("La priorité doit être contenue entre 0 et 17"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.grade.priority_must_be_0_17"), + Prefix.CITY, MessageType.ERROR, false); throw new IllegalArgumentException("Rank priority cannot be negative"); } if (icon == null) { - MessagesManager.sendMessage(player, Component.text("L'icône du grade ne peut pas être nulle (prévenir le staff)"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.grade.icon_cannot_be_null"), + Prefix.CITY, MessageType.ERROR, false); throw new IllegalArgumentException("Rank icon cannot be null"); } return this; diff --git a/src/main/java/fr/openmc/core/features/city/sub/bank/conditions/CityBankConditions.java b/src/main/java/fr/openmc/core/features/city/sub/bank/conditions/CityBankConditions.java index 31e32ec85..49314e6e5 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/bank/conditions/CityBankConditions.java +++ b/src/main/java/fr/openmc/core/features/city/sub/bank/conditions/CityBankConditions.java @@ -54,7 +54,7 @@ public static boolean canCityDeposit(City city, Player player) { if (!canOpenCityBank(city, player)) return false; - if (!(city.hasPermission(player.getUniqueId(), CityPermission.MONEY_GIVE))) { + if (!(city.hasPermission(player.getUniqueId(), CityPermission.MONEY_DEPOSIT))) { MessagesManager.sendMessage(player, Component.text("Tu n'as pas la permission de donner de l'argent à ta ville"), Prefix.CITY, MessageType.ERROR, false); return false; } @@ -94,7 +94,7 @@ public static boolean canCityWithdraw(City city, Player player) { return false; } - if (!(city.hasPermission(player.getUniqueId(), CityPermission.MONEY_TAKE))) { + if (!(city.hasPermission(player.getUniqueId(), CityPermission.MONEY_WITHDRAW))) { MessagesManager.sendMessage(player, Component.text("Tu n'as pas la permission de prendre de l'argent de ta ville"), Prefix.CITY, MessageType.ERROR, false); return false; } diff --git a/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankDepositMenu.java b/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankDepositMenu.java index f16adbe52..c6f5ff928 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankDepositMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankDepositMenu.java @@ -59,7 +59,7 @@ public void onInventoryClick(InventoryClickEvent click) { City city = CityManager.getPlayerCity(player.getUniqueId()); assert city != null; - boolean hasPermissionMoneyGive = city.hasPermission(player.getUniqueId(), CityPermission.MONEY_GIVE); + boolean hasPermissionMoneyGive = city.hasPermission(player.getUniqueId(), CityPermission.MONEY_DEPOSIT); double moneyPlayer = EconomyManager.getBalance(player.getUniqueId()); double halfMoneyPlayer = moneyPlayer / 2; diff --git a/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankMenu.java b/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankMenu.java index 47773246c..8322a9ab5 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankMenu.java @@ -63,7 +63,7 @@ public void onInventoryClick(InventoryClickEvent click) { List loreBankDeposit; - if (city.hasPermission(player.getUniqueId(), CityPermission.MONEY_GIVE)) { + if (city.hasPermission(player.getUniqueId(), CityPermission.MONEY_DEPOSIT)) { loreBankDeposit = List.of( Component.text("§7Votre argent sera placé dans la §6banque de la ville"), Component.text("§e§lCLIQUEZ ICI POUR DEPOSER") @@ -78,7 +78,7 @@ public void onInventoryClick(InventoryClickEvent click) { itemMeta.itemName(Component.text("§7Déposer de l'§6Argent")); itemMeta.lore(loreBankDeposit); }).setOnClick(inventoryClickEvent -> { - if (!(city.hasPermission(player.getUniqueId(), CityPermission.MONEY_GIVE))) { + if (!(city.hasPermission(player.getUniqueId(), CityPermission.MONEY_DEPOSIT))) { MessagesManager.sendMessage(player, Component.text("Tu n'as pas la permission de donner de l'argent à ta ville"), Prefix.CITY, MessageType.ERROR, false); return; } @@ -104,7 +104,7 @@ public void onInventoryClick(InventoryClickEvent click) { List loreBankTake; - if (city.hasPermission(player.getUniqueId(), CityPermission.MONEY_TAKE)) { + if (city.hasPermission(player.getUniqueId(), CityPermission.MONEY_WITHDRAW)) { loreBankTake = List.of( Component.text("§7L'argent sera pris dans la §6Banque de la ville"), Component.text("§e§lCLIQUEZ ICI POUR INDIQUER LE MONTANT") @@ -119,7 +119,7 @@ public void onInventoryClick(InventoryClickEvent click) { itemMeta.itemName(Component.text("§7Retirer de l'§6argent")); itemMeta.lore(loreBankTake); }).setOnClick(inventoryClickEvent -> { - if (!(city.hasPermission(player.getUniqueId(), CityPermission.MONEY_TAKE))) { + if (!(city.hasPermission(player.getUniqueId(), CityPermission.MONEY_WITHDRAW))) { MessagesManager.sendMessage(player, Component.text("Tu n'as pas la permission de prendre de l'argent à ta ville"), Prefix.CITY, MessageType.ERROR, false); return; } diff --git a/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankWithdrawMenu.java b/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankWithdrawMenu.java index 9f187a75b..170956ba3 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankWithdrawMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankWithdrawMenu.java @@ -59,7 +59,7 @@ public void onInventoryClick(InventoryClickEvent click) { City city = CityManager.getPlayerCity(player.getUniqueId()); assert city != null; - boolean hasPermissionMoneyTake = city.hasPermission(player.getUniqueId(), CityPermission.MONEY_TAKE); + boolean hasPermissionMoneyTake = city.hasPermission(player.getUniqueId(), CityPermission.MONEY_WITHDRAW); double moneyBankCity = city.getBalance(); double halfMoneyBankCity = moneyBankCity / 2; diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotMenu.java index b7363d6cc..610628ca5 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotMenu.java @@ -100,7 +100,7 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { }) .hide(DataComponentTypes.ENCHANTMENTS, DataComponentTypes.ATTRIBUTE_MODIFIERS) .setOnClick(inventoryClickEvent -> { - if (!city.hasPermission(player.getUniqueId(), CityPermission.MASCOT_SKIN)) { + if (!city.hasPermission(player.getUniqueId(), CityPermission.MASCOT_CHANGE_SKIN)) { MessagesManager.sendMessage(player, TranslationManager.translation("messages.global.cannot_do_this"), Prefix.CITY, MessageType.ERROR, false); player.closeInventory(); return; diff --git a/src/main/java/fr/openmc/core/features/city/sub/notation/menu/NotationDialog.java b/src/main/java/fr/openmc/core/features/city/sub/notation/menu/NotationDialog.java index c36447249..3efeb1c50 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/notation/menu/NotationDialog.java +++ b/src/main/java/fr/openmc/core/features/city/sub/notation/menu/NotationDialog.java @@ -95,7 +95,7 @@ public static DialogBody lineCityNotation(City city, String weekStr) { Component hoverCityName = Component.text("§7Niveau de la mascotte : §c" + city.getMascot().getLevel()) .append(Component.newline()) - .append(Component.text("§7Statut : " + city.getType().getName())) + .append(Component.text("§7Statut : " + city.getType().getDisplayName())) .append(Component.newline()) .append(Component.text("§7Membres : §2" + city.getMembers().size())) .append(Component.newline()) diff --git a/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCommands.java b/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCommands.java index 3917c842c..80791e7d3 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCommands.java +++ b/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCommands.java @@ -78,7 +78,7 @@ public static void swapPermission(Player player, DBCityRank rank, CityPermission MessagesManager.sendMessage(player, TranslationManager.translation("messages.city.player_no_in_city"), Prefix.CITY, MessageType.ERROR, false); return; } - if (!city.hasPermission(player.getUniqueId(), CityPermission.PERMS)) { + if (!city.hasPermission(player.getUniqueId(), CityPermission.MANAGE_PERMS)) { MessagesManager.sendMessage(player, TranslationManager.translation("messages.city.player_no_permission_access"), Prefix.CITY, MessageType.ERROR, false); return; } @@ -105,7 +105,7 @@ public static void addAllPermissions(Player player, DBCityRank rank) { MessagesManager.sendMessage(player, TranslationManager.translation("messages.city.player_no_in_city"), Prefix.CITY, MessageType.ERROR, false); return; } - if (!city.hasPermission(player.getUniqueId(), CityPermission.PERMS)) { + if (!city.hasPermission(player.getUniqueId(), CityPermission.MANAGE_PERMS)) { MessagesManager.sendMessage(player, TranslationManager.translation("messages.city.player_no_permission_access"), Prefix.CITY, MessageType.ERROR, false); return; } @@ -132,7 +132,7 @@ public static void removeAllPermissions(Player player, DBCityRank rank) { MessagesManager.sendMessage(player, TranslationManager.translation("messages.city.player_no_in_city"), Prefix.CITY, MessageType.ERROR, false); return; } - if (!city.hasPermission(player.getUniqueId(), CityPermission.PERMS)) { + if (!city.hasPermission(player.getUniqueId(), CityPermission.MANAGE_PERMS)) { MessagesManager.sendMessage(player, TranslationManager.translation("messages.city.player_no_permission_access"), Prefix.CITY, MessageType.ERROR, false); return; } diff --git a/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCondition.java b/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCondition.java index 7eb5b8123..385ba21e2 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCondition.java +++ b/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCondition.java @@ -98,7 +98,7 @@ public static boolean canDeleteRank(City city, Player player, String rankName) { return false; } - if (!city.hasPermission(player.getUniqueId(), CityPermission.PERMS)) { + if (!city.hasPermission(player.getUniqueId(), CityPermission.MANAGE_PERMS)) { MessagesManager.sendMessage(player, TranslationManager.translation("messages.city.player_no_permission_access"), Prefix.CITY, MessageType.ERROR, false); return false; } diff --git a/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/WarCityDetailsMenu.java b/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/WarCityDetailsMenu.java index 8e0a3aed8..eedeea4dd 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/WarCityDetailsMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/WarCityDetailsMenu.java @@ -113,7 +113,7 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { }).setOnClick(inventoryClickEvent -> new WarPlayerListMenu(player, city).open())); map.put(26, new ItemBuilder(this, new ItemStack(city.getType().equals(CityType.WAR) ? Material.RED_BANNER : Material.GREEN_BANNER), - itemMeta -> itemMeta.displayName(Component.text("§7Type : " + city.getType().getName())))); + itemMeta -> itemMeta.displayName(Component.text("§7Type : " + city.getType().getDisplayName())))); map.put(18, new ItemBuilder(this, Material.ARROW, itemMeta -> { itemMeta.itemName(Component.text("§aRetour")); diff --git a/src/main/java/fr/openmc/core/features/city/view/CityViewManager.java b/src/main/java/fr/openmc/core/features/city/view/CityViewManager.java index 05a1e7cbd..e165a4763 100644 --- a/src/main/java/fr/openmc/core/features/city/view/CityViewManager.java +++ b/src/main/java/fr/openmc/core/features/city/view/CityViewManager.java @@ -9,10 +9,10 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import io.papermc.paper.threadedregions.scheduler.ScheduledTask; import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.*; import org.bukkit.entity.Player; @@ -48,7 +48,7 @@ public static void startView(@NotNull Player player) { if (claimsToShow.isEmpty()) { MessagesManager.sendMessage( player, - Component.text("Aucune ville n'a été trouvée dans les environs.", NamedTextColor.RED), + TranslationManager.translation("feature.city.view.commands.no_city").color(NamedTextColor.RED), Prefix.CITY, MessageType.ERROR, false @@ -63,7 +63,7 @@ public static void startView(@NotNull Player player) { MessagesManager.sendMessage( player, - Component.text("Visualisation des claims des villes en cours pendant 30 secondes"), + TranslationManager.translation("feature.city.view.commands.visiualizing"), Prefix.CITY ); } diff --git a/src/main/resources/translations/lang.properties b/src/main/resources/translations/lang.properties index b4b175488..824e6703c 100644 --- a/src/main/resources/translations/lang.properties +++ b/src/main/resources/translations/lang.properties @@ -203,6 +203,10 @@ feature.city.perms.commands.add.already_has=%1$s a déjà cette permission feature.city.perms.commands.remove.does_not_have=%1$s n'a pas cette permission feature.city.perms.commands.modified=Les permissions de %1$s ont été modifiées +# - City View Command +feature.city.view.commands.no_city=Aucune ville n'a été trouvée dans les environs. +feature.city.view.commands.visiualizing=Visualisation des claims des villes en cours pendant 30 secondes + # * ACTIONS # - Type Change feature.city.type.in_peace=en paix @@ -265,7 +269,9 @@ feature.city.player_cannot_kick_himself=Tu ne peux pas t'exclure toi-même. feature.city.player_isnt_owner=Tu n'es pas le propriétaire de la ville feature.city.player_is_owner=Le propriétaire a tous les pouvoirs. -feature_city.only_owner_can_do_this=Seul le propriétaire de la ville peut faire cela. +feature.city.only_owner_can_do_this=Seul le propriétaire de la ville peut faire cela. +feature.city.cant_do_this=Vous n'avez pas l'autorisation de faire ceci ! + # - Manage feature.city.conditions.manage.rename.no_permission=Tu n'as pas la permission de renommer ta ville. @@ -309,13 +315,52 @@ feature.city.conditions.type.not_enough_city_money=Vous devez avoir au moins %1$ # - Leave feature.city.conditions.leave.owner_cant_leave=Tu ne peux pas quitter la ville car tu en es le propriétaire, supprime la ville ou transfère la propriété +# * LISTENERS +feature.city.listeners.tnt_explode=Vous vous êtes pris une TNT dans votre ville par la ville %1$s et posée par %2$s ! (%3$s/%4$s tnt journalières) + # * SUB FEATURES +# - City Chat +feature.city.chat.entered=Vous avez rejoint le chat de ville +feature.city.chat.leaved=Vous avez quitté le chat de ville +feature.city.chat.prefix=#ville + +# - City Permission +feature.city.permission.owner=Propriétaire +feature.city.permission.invite=Inviter +feature.city.permission.kick=Expulser +feature.city.permission.place=Placer des blocs +feature.city.permission.break=Casser des blocs +feature.city.permission.open_chest=Ouvrir les coffres +feature.city.permission.interact=Interagir avec les blocs (sauf coffres) +feature.city.permission.claim=Claim +feature.city.permission.see_claim=Voir les claims +feature.city.permission.rename=Renommer +feature.city.permission.money_deposit=Déposer de l'argent dans la banque de la ville +feature.city.permission.money_see=Voir l'argent de la ville +feature.city.permission.money_withdraw=Retirer de l'argent de la banque de la ville +feature.city.permission.manage_perm=Gérer les permissions des membres +feature.city.permission.access_city_chest=Accéder au coffre de la ville +feature.city.permission.upgrade_chest=Améliorer le coffre de ville +feature.city.permission.change_type=Changer le type de ville +feature.city.permission.move_mascot=Déplacer la mascotte +feature.city.permission.change_mascot_skin=Changer le skin de la mascotte +feature.city.permission.upgrade_mascot=Améliorer la mascotte +feature.city.permission.heal_mascot=Soigner la mascotte +feature.city.permission.launch_war=Lancer des guerres +feature.city.permission.manage_grade=Gérer les grades +feature.city.permission.assign_grade=Assigner des grades + # - City Grades feature.city.grade.cannot_exist=Ce grade n'existe pas. +feature.city.grade.name_cannot_be_null=Le nom du grade ne peut pas être vide +feature.city.grade.priority_must_be_0_17=La priorité doit être contenue entre 0 et 17 +feature.city.grade.icon_cannot_be_null=L'icône du grade ne peut pas être nulle (prévenir le staff) feature.city.grade.cannot_assign=Tu n'as pas la permission d'assigner des grades. feature.city.grade.cannot_modify_sup_role=Tu ne peux pas modifier un grade supérieur ou égal au tien. feature.city.grade.max_reach=Le nombre maximum de grades a été atteint, tu ne peux pas en ajouter d'autres. feature.city.grade.already_exist=Ce grade existe déjà. +feature.city.grade.remove_grade=Vous avez retiré le grade %1$s de %2$s +feature.city.grade.assign_grade=Vous avez assigné le grade %1$s à %2$s # - Mascots ## Mascot Wand @@ -328,4 +373,8 @@ feature.city.mascot.mascot_wand.lore=Votre mascotte sera posée à l'emplac feature.city.mascot.mascot_wand.can_only_place_mascot=Vous pouvez poser votre mascotte uniquement dans le monde principal feature.city.mascot.mascot_wand.hasnot_block_above=Aucun bloc ne doit être au-dessus de la mascotte -feature.city.mascot.mascot=Mascotte \ No newline at end of file +feature.city.mascot.mascot=Mascotte + +# - War +feature.city.war.peace=Paix +feature.city.war.war=Guerre \ No newline at end of file From efe8bf42f73d2730f2dd9c3b34762a55ee01620d Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Wed, 25 Mar 2026 14:49:14 +0100 Subject: [PATCH 06/20] translation for package feature.city.menu --- .../fr/openmc/core/features/city/City.java | 5 +- .../core/features/city/CityChatManager.java | 8 +- .../features/city/actions/CityKickAction.java | 4 +- .../city/commands/CityInviteCommands.java | 9 +- .../city/commands/CityPermsCommands.java | 15 +- .../features/city/menu/CityChestMenu.java | 37 +- .../features/city/menu/CityChunkMenu.java | 110 +++--- .../features/city/menu/CityModifyMenu.java | 49 +-- .../features/city/menu/CityPermsMenu.java | 56 +-- .../core/features/city/menu/CityTopMenu.java | 87 +++-- .../features/city/menu/CityTransferMenu.java | 15 +- .../core/features/city/menu/CityTypeMenu.java | 33 +- .../features/city/menu/InvitationsMenu.java | 29 +- .../core/features/city/menu/NoCityMenu.java | 46 ++- .../city/menu/list/CityListDetailsMenu.java | 78 +++-- .../features/city/menu/list/CityListMenu.java | 78 +++-- .../city/menu/list/CityPlayerListMenu.java | 15 +- .../features/city/menu/main/CityMenu.java | 3 +- .../city/menu/main/buttons/BankButton.java | 18 +- .../city/menu/main/buttons/ChestButton.java | 33 +- .../city/menu/main/buttons/LeaveButton.java | 20 +- .../city/menu/main/buttons/ManageButton.java | 35 +- .../city/menu/main/buttons/MapButton.java | 18 +- .../city/menu/main/buttons/MascotsButton.java | 36 +- .../city/menu/main/buttons/MayorButton.java | 101 +++--- .../city/menu/main/buttons/MembersButton.java | 14 +- .../menu/main/buttons/MilestoneButton.java | 13 +- .../menu/main/buttons/NotationsButton.java | 24 +- .../city/menu/main/buttons/RankButton.java | 21 +- .../city/menu/main/buttons/TypeButton.java | 27 +- .../playerlist/CityPlayerGestionMenu.java | 45 +-- .../menu/playerlist/CityPlayerListMenu.java | 66 ++-- .../city/sub/war/menu/main/MainWarMenu.java | 4 +- .../dream/displays/DreamScoreboard.java | 2 +- .../leaderboards/LeaderboardManager.java | 5 +- .../core/utils/cache/PlayerNameCache.java | 6 + .../resources/translations/lang.properties | 327 +++++++++++++++++- 37 files changed, 923 insertions(+), 569 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/city/City.java b/src/main/java/fr/openmc/core/features/city/City.java index a5cf5c27a..6407ac7ab 100644 --- a/src/main/java/fr/openmc/core/features/city/City.java +++ b/src/main/java/fr/openmc/core/features/city/City.java @@ -21,6 +21,7 @@ import fr.openmc.core.utils.ChunkPos; import fr.openmc.core.utils.DateUtils; import fr.openmc.core.utils.cache.CacheOfflinePlayer; +import fr.openmc.core.utils.cache.PlayerNameCache; import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; @@ -804,7 +805,7 @@ public void changeRank(Player sender, UUID playerUUID, DBCityRank newRank) { MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.grade.remove_grade", Component.text(currentRank.getName()).color(NamedTextColor.YELLOW), - Component.text(player.getName())).color(NamedTextColor.GOLD), + PlayerNameCache.name(playerUUID).color(NamedTextColor.GOLD)), Prefix.CITY, MessageType.SUCCESS, true); } @@ -816,7 +817,7 @@ public void changeRank(Player sender, UUID playerUUID, DBCityRank newRank) { MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.grade.assign_grade", Component.text(newRank.getName()).color(NamedTextColor.YELLOW), - Component.text(player.getName()).color(NamedTextColor.GOLD) + PlayerNameCache.name(playerUUID).color(NamedTextColor.GOLD) ), Prefix.CITY, MessageType.SUCCESS, true); } diff --git a/src/main/java/fr/openmc/core/features/city/CityChatManager.java b/src/main/java/fr/openmc/core/features/city/CityChatManager.java index 39d033f96..d2a1fdf04 100644 --- a/src/main/java/fr/openmc/core/features/city/CityChatManager.java +++ b/src/main/java/fr/openmc/core/features/city/CityChatManager.java @@ -1,12 +1,12 @@ package fr.openmc.core.features.city; +import fr.openmc.core.utils.cache.CacheOfflinePlayer; import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; -import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; @@ -72,9 +72,9 @@ public static void sendCityChatMessage(Player sender, Component message) { ); for (UUID uuid : city.getMembers()) { - OfflinePlayer player = Bukkit.getOfflinePlayer(uuid); - if (player.isOnline()) { - ((Player) player).sendMessage(msg_component); + OfflinePlayer offlinePlayer = CacheOfflinePlayer.getOfflinePlayer(uuid); + if (offlinePlayer.isOnline() && offlinePlayer instanceof Player player) { + player.sendMessage(msg_component); } } } diff --git a/src/main/java/fr/openmc/core/features/city/actions/CityKickAction.java b/src/main/java/fr/openmc/core/features/city/actions/CityKickAction.java index 315a317ee..4b9fa6218 100644 --- a/src/main/java/fr/openmc/core/features/city/actions/CityKickAction.java +++ b/src/main/java/fr/openmc/core/features/city/actions/CityKickAction.java @@ -3,6 +3,7 @@ import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityManager; import fr.openmc.core.features.city.conditions.CityKickCondition; +import fr.openmc.core.utils.cache.PlayerNameCache; import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; @@ -20,12 +21,11 @@ public static void startKick(Player sender, OfflinePlayer playerKick) { if (city == null) return; - String playerName = String.valueOf(playerKick.getName()); city.removePlayer(playerKick.getUniqueId()); MessagesManager.sendMessage(sender, TranslationManager.translation( "feature.city.kick.success", - Component.text(playerName), + PlayerNameCache.name(playerKick.getUniqueId()), Component.text(city.getName()) ), Prefix.CITY, diff --git a/src/main/java/fr/openmc/core/features/city/commands/CityInviteCommands.java b/src/main/java/fr/openmc/core/features/city/commands/CityInviteCommands.java index f180e8018..cf04f47e2 100644 --- a/src/main/java/fr/openmc/core/features/city/commands/CityInviteCommands.java +++ b/src/main/java/fr/openmc/core/features/city/commands/CityInviteCommands.java @@ -46,7 +46,8 @@ public static void invite( playerInvitations.add(sender); } MessagesManager.sendMessage(sender, - TranslationManager.translation("feature.city.invite.commands.invite.success", Component.text(target.getName())), + TranslationManager.translation("feature.city.invite.commands.invite.success", + target.displayName()), Prefix.CITY, MessageType.SUCCESS, false @@ -54,7 +55,7 @@ public static void invite( MessagesManager.sendMessage(target, TranslationManager.translation( "feature.city.invite.commands.invite.received", - Component.text(sender.getName()), + sender.displayName(), Component.text(city.getName()) ) .append(Component.newline()) @@ -87,7 +88,7 @@ public static void acceptInvitation( if (!playerInvitations.contains(inviter)) { MessagesManager.sendMessage(player, TranslationManager.translation( "feature.city.invite.commands.accept.not_invited", - Component.text(inviter.getName()) + inviter.displayName() ), Prefix.CITY, MessageType.ERROR, false); return; } @@ -102,7 +103,7 @@ public static void acceptInvitation( MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.invite.commands.accept.joined", Component.text(newCity.getName())), Prefix.CITY, MessageType.SUCCESS, false); if (inviter.isOnline()) { - MessagesManager.sendMessage(inviter, TranslationManager.translation("feature.city.invite.commands.accept.inviter_notified", Component.text(player.getName())), Prefix.CITY, MessageType.SUCCESS, true); + MessagesManager.sendMessage(inviter, TranslationManager.translation("feature.city.invite.commands.accept.inviter_notified", player.displayName()), Prefix.CITY, MessageType.SUCCESS, true); } } diff --git a/src/main/java/fr/openmc/core/features/city/commands/CityPermsCommands.java b/src/main/java/fr/openmc/core/features/city/commands/CityPermsCommands.java index aa574f75c..ffe087a93 100644 --- a/src/main/java/fr/openmc/core/features/city/commands/CityPermsCommands.java +++ b/src/main/java/fr/openmc/core/features/city/commands/CityPermsCommands.java @@ -7,6 +7,7 @@ import fr.openmc.core.features.city.commands.autocomplete.CityPermissionsAutoComplete; import fr.openmc.core.features.city.conditions.CityPermsConditions; import fr.openmc.core.features.city.menu.CityPermsMenu; +import fr.openmc.core.utils.cache.PlayerNameCache; import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; @@ -42,15 +43,15 @@ public static void swap(Player sender, @SuggestWith(CityMembersAutoComplete.clas city.removePermission(player.getUniqueId(), permission); MessagesManager.sendMessage(sender, TranslationManager.translation( "feature.city.perms.commands.switch.removed", - Component.text(String.valueOf(player.getName())), + PlayerNameCache.name(player.getUniqueId()), Component.text(permission.toString()) ), Prefix.CITY, MessageType.SUCCESS, false); } else { city.addPermission(player.getUniqueId(), permission); MessagesManager.sendMessage(sender, TranslationManager.translation( "feature.city.perms.commands.switch.added", - Component.text(String.valueOf(player.getName())), - Component.text(permission.toString()) + PlayerNameCache.name(player.getUniqueId()), + permission.getDisplayName() ), Prefix.CITY, MessageType.SUCCESS, false); } } @@ -81,7 +82,7 @@ void add( if (city.hasPermission(player.getUniqueId(), permission)) { MessagesManager.sendMessage(sender, TranslationManager.translation( "feature.city.perms.commands.add.already_has", - Component.text(String.valueOf(player.getName())) + PlayerNameCache.name(player.getUniqueId()) ), Prefix.CITY, MessageType.ERROR, false); return; } @@ -89,7 +90,7 @@ void add( city.addPermission(player.getUniqueId(), permission); MessagesManager.sendMessage(sender, TranslationManager.translation( "feature.city.perms.commands.modified", - Component.text(String.valueOf(player.getName())) + PlayerNameCache.name(player.getUniqueId()) ), Prefix.CITY, MessageType.SUCCESS, false); } @@ -119,7 +120,7 @@ void remove( if (!city.hasPermission(player.getUniqueId(), permission)) { MessagesManager.sendMessage(sender, TranslationManager.translation( "feature.city.perms.commands.remove.does_not_have", - Component.text(String.valueOf(player.getName())) + PlayerNameCache.name(player.getUniqueId()) ), Prefix.CITY, MessageType.ERROR, false); return; } @@ -127,7 +128,7 @@ void remove( city.removePermission(player.getUniqueId(), permission); MessagesManager.sendMessage(sender, TranslationManager.translation( "feature.city.perms.commands.modified", - Component.text(String.valueOf(player.getName())) + PlayerNameCache.name(player.getUniqueId()) ), Prefix.CITY, MessageType.SUCCESS, false); } diff --git a/src/main/java/fr/openmc/core/features/city/menu/CityChestMenu.java b/src/main/java/fr/openmc/core/features/city/menu/CityChestMenu.java index e5c2c9197..847c00fff 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/CityChestMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/CityChestMenu.java @@ -13,9 +13,10 @@ import fr.openmc.core.features.city.sub.milestone.rewards.ChestPageLimitRewards; import fr.openmc.core.features.economy.EconomyManager; import fr.openmc.core.registry.items.CustomItemRegistry; +import fr.openmc.core.utils.messages.TranslationManager; import lombok.Getter; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.TextDecoration; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; @@ -106,7 +107,7 @@ public Map getButtons() { exit(city, getInventory()))); map.put(49, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_cancel").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§7Fermer")); + itemMeta.displayName(TranslationManager.translation("messages.menus.close")); }).setOnClick(inventoryClickEvent -> { exit(city, getInventory()); player.closeInventory(); @@ -114,7 +115,7 @@ public Map getButtons() { if (hasPreviousPage()) { map.put(48, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_back_orange").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§cPage précédente")); + itemMeta.displayName(TranslationManager.translation("messages.menus.previous_page")); }).setOnClick(inventoryClickEvent -> { if (hasPreviousPage()) { Inventory inv = inventoryClickEvent.getInventory(); @@ -128,7 +129,7 @@ public Map getButtons() { } if (hasNextPage()) { map.put(50, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_next_orange").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§aPage suivante")); + itemMeta.displayName(TranslationManager.translation("messages.menus.next_page")); }).setOnClick(inventoryClickEvent -> { if (hasNextPage()) { Inventory inv = inventoryClickEvent.getInventory(); @@ -141,21 +142,29 @@ public Map getButtons() { })); } - List loreUpgrade = new ArrayList<>(List.of( - Component.text("§7Votre ville doit avoir : "), - Component.text("§8- §6" + city.getChestPages() * UPGRADE_PER_MONEY).append(Component.text(EconomyManager.getEconomyIcon())).decoration(TextDecoration.ITALIC, false), - Component.text("§8- §d" + city.getChestPages() * UPGRADE_PER_AYWENITE + " d'Aywenite"), - Component.empty() - )); + List loreUpgrade; + Component moneyValue = Component.text(city.getChestPages() * UPGRADE_PER_MONEY).color(NamedTextColor.GOLD); + Component moneyIcon = Component.text(EconomyManager.getEconomyIcon()).color(NamedTextColor.GOLD); + Component ayweniteValue = Component.text(city.getChestPages() * UPGRADE_PER_AYWENITE).color(NamedTextColor.LIGHT_PURPLE); if (city.getChestPages() >= ChestPageLimitRewards.getChestPageLimit(city.getLevel())) { - loreUpgrade.add(Component.text("§cLimite atteinte")); + loreUpgrade = TranslationManager.translationLore( + "feature.city.menus.chest.upgrade.lore.max", + moneyValue, + moneyIcon, + ayweniteValue + ); } else { - loreUpgrade.add(Component.text("§e§lCLIQUEZ ICI POUR AMELIORER LE COFFRE")); + loreUpgrade = TranslationManager.translationLore( + "feature.city.menus.chest.upgrade.lore.click", + moneyValue, + moneyIcon, + ayweniteValue + ); } if (city.hasPermission(getOwner().getUniqueId(), CityPermission.UPGRADE_CHEST) && city.getChestPages() < ChestPageLimitRewards.getChestPageLimit(city.getLevel())) { map.put(47, new ItemBuilder(this, Material.ENDER_CHEST, itemMeta -> { - itemMeta.displayName(Component.text("§aAméliorer le coffre")); + itemMeta.displayName(TranslationManager.translation("feature.city.menus.chest.upgrade.title")); itemMeta.lore(loreUpgrade); }).setOnClick(inventoryClickEvent -> { if (!canCityChestUpgrade(city, player)) return; @@ -170,7 +179,7 @@ public Map getButtons() { @Override public @NotNull Component getName() { - return Component.text("Menu du coffre de " + this.city.getName() + " - Page " + this.page); + return TranslationManager.translation("feature.city.menus.chest.name", Component.text(this.city.getName()), Component.text(this.page)); } @Override diff --git a/src/main/java/fr/openmc/core/features/city/menu/CityChunkMenu.java b/src/main/java/fr/openmc/core/features/city/menu/CityChunkMenu.java index b28ba8f04..4baeea171 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/CityChunkMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/CityChunkMenu.java @@ -21,7 +21,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.TextDecoration; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Material; @@ -144,7 +144,7 @@ private void loadChunkData() { @Override public @NotNull Component getName() { - return Component.text("Menu des villes - La carte"); + return TranslationManager.translation("feature.city.menus.chunks.name"); } @Override @@ -171,8 +171,8 @@ public void onInventoryClick(InventoryClickEvent click) { if (chunkInfoMap == null || chunkInfoMap.isEmpty()) { inventory.put(22, new ItemBuilder(this, Material.CLOCK, itemMeta -> { - itemMeta.displayName(Component.text("§eChargement...")); - itemMeta.lore(List.of(Component.text("§7Chargement des données de chunks en cours"))); + itemMeta.displayName(TranslationManager.translation("feature.city.menus.chunks.loading.title")); + itemMeta.lore(TranslationManager.translationLore("feature.city.menus.chunks.loading.lore")); })); return inventory; } @@ -205,21 +205,24 @@ public List getTakableSlot() { private void addNavigationButtons(Map inventory) { if (playerCity != null) { inventory.put(45, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.displayName(Component.text("§aRetour")); - itemMeta.lore(List.of(Component.text("§7Retourner au menu précédent"))); + itemMeta.displayName(TranslationManager.translation("messages.menus.back")); + itemMeta.lore(List.of(TranslationManager.translation("messages.menus.back_lore"))); }, true)); if (hasFreeClaimAvailable) { inventory.put(49, new ItemBuilder(this, Material.GOLD_BLOCK, itemMeta -> { - itemMeta.displayName(Component.text("§6Claim gratuit")); - itemMeta.lore(List.of(Component.text("§7Vous avez §6" + freeClaims + " claim gratuit !"))); + itemMeta.displayName(TranslationManager.translation("feature.city.menus.chunks.free_claim.title")); + itemMeta.lore(TranslationManager.translationLore( + "feature.city.menus.chunks.free_claim.lore", + Component.text(freeClaims).color(NamedTextColor.GOLD) + )); })); } } inventory.put(53, new ItemBuilder(this, Material.MAP, itemMeta -> { - itemMeta.displayName(Component.text("§6Rafraîchir la carte")); - itemMeta.lore(List.of(Component.text("§7Mettre à jour §6les claims affichés§7"))); + itemMeta.displayName(TranslationManager.translation("feature.city.menus.chunks.refresh.title")); + itemMeta.lore(TranslationManager.translationLore("feature.city.menus.chunks.refresh.lore")); }).setOnClick(event -> { String refreshCacheKey = player.getWorld().getName() + ":" + startX + "," + startZ; CHUNK_CACHE.remove(refreshCacheKey); @@ -257,77 +260,78 @@ private ItemBuilder createChunkItem(int chunkX, int chunkZ, ChunkInfo info) { private ItemBuilder createProtectedChunkItem(Material material, int chunkX, int chunkZ) { return new ItemBuilder(this, material, itemMeta -> { - itemMeta.displayName(Component.text("§cClaim dans une région protégée")); - itemMeta.lore(List.of( - Component.text("§cCette zone est protégée par une région WorldGuard"), - Component.text("§7Position : §f" + chunkX + ", " + chunkZ) + itemMeta.displayName(TranslationManager.translation("feature.city.menus.chunks.protected.title")); + itemMeta.lore(TranslationManager.translationLore( + "feature.city.menus.chunks.protected.lore", + Component.text(chunkX + ", " + chunkZ).color(NamedTextColor.WHITE) )); }); } private ItemBuilder createPlayerCityChunkItem(Material material, City city, int chunkX, int chunkZ) { List lore; + Component cityName = Component.text(city.getName()).color(NamedTextColor.LIGHT_PURPLE); + Component position = Component.text(chunkX + ", " + chunkZ).color(NamedTextColor.WHITE); if (city.getChunks().size() > CityCreateAction.FREE_CLAIMS+1) { - lore = List.of( - Component.text("§7Ville : §d" + city.getName()), - Component.text("§7Position : §f" + chunkX + ", " + chunkZ), - Component.empty(), - Component.text("§cVous rapporte :"), - Component.text("§8- §6" + CityUnclaimAction.calculatePrice(playerCity.getChunks().size())).append(Component.text(EconomyManager.getEconomyIcon())).decoration(TextDecoration.ITALIC, false), - Component.text("§8- §d" + CityUnclaimAction.calculateAywenite(playerCity.getChunks().size()) + " d'Aywenite"), - Component.empty(), - Component.text("§e§lCLIQUEZ POUR UNCLAIM") + Component moneyValue = Component.text(CityUnclaimAction.calculatePrice(playerCity.getChunks().size())).color(NamedTextColor.GOLD); + Component moneyIcon = Component.text(EconomyManager.getEconomyIcon()).color(NamedTextColor.GOLD); + Component ayweniteValue = Component.text(CityUnclaimAction.calculateAywenite(playerCity.getChunks().size())).color(NamedTextColor.LIGHT_PURPLE); + lore = TranslationManager.translationLore( + "feature.city.menus.chunks.player_claim.lore.reward", + cityName, + position, + moneyValue, + moneyIcon, + ayweniteValue ); } else { - lore = List.of( - Component.text("§7Ville : §d" + city.getName()), - Component.text("§7Position : §f" + chunkX + ", " + chunkZ), - Component.empty(), - Component.text("§e§lCLIQUEZ POUR UNCLAIM") + lore = TranslationManager.translationLore( + "feature.city.menus.chunks.player_claim.lore.basic", + cityName, + position ); } return new ItemBuilder(this, material, itemMeta -> { - itemMeta.displayName(Component.text("§9Claim de votre ville")); + itemMeta.displayName(TranslationManager.translation("feature.city.menus.chunks.player_claim.title")); itemMeta.lore(lore); }).setOnClick(event -> handleChunkUnclaimClick(player, chunkX, chunkZ, hasPermissionClaim)); } private ItemBuilder createOtherCityChunkItem(Material material, City city, int chunkX, int chunkZ) { return new ItemBuilder(this, material, itemMeta -> { - itemMeta.displayName(Component.text("§cClaim d'une ville adverse")); - itemMeta.lore(List.of( - Component.text("§7Ville : §d" + city.getName()), - Component.text("§7Position : §f" + chunkX + ", " + chunkZ) + itemMeta.displayName(TranslationManager.translation("feature.city.menus.chunks.other_claim.title")); + itemMeta.lore(TranslationManager.translationLore( + "feature.city.menus.chunks.other_claim.lore", + Component.text(city.getName()).color(NamedTextColor.LIGHT_PURPLE), + Component.text(chunkX + ", " + chunkZ).color(NamedTextColor.WHITE) )); }); } private ItemBuilder createUnclaimedChunkItem(Material material, int chunkX, int chunkZ) { List lore; + Component position = Component.text(chunkX + ", " + chunkZ).color(NamedTextColor.WHITE); if (hasFreeClaimAvailable) { - lore = List.of( - Component.text("§7Position : §f" + chunkX + ", " + chunkZ), - Component.empty(), - Component.text("§cCoûte :"), - Component.text("§8- §6Claim gratuit"), - Component.empty(), - Component.text("§e§lCLIQUEZ POUR CLAIM") + lore = TranslationManager.translationLore( + "feature.city.menus.chunks.unclaimed.lore.free", + position ); } else { - lore = List.of( - Component.text("§7Position : §f" + chunkX + ", " + chunkZ), - Component.empty(), - Component.text("§cCoûte :"), - Component.text("§8- §6" + price).append(Component.text(EconomyManager.getEconomyIcon())).decoration(TextDecoration.ITALIC, false), - Component.text("§8- §d" + aywenite + " d'Aywenite"), - Component.empty(), - Component.text("§e§lCLIQUEZ POUR CLAIM") + Component moneyValue = Component.text(price).color(NamedTextColor.GOLD); + Component moneyIcon = Component.text(EconomyManager.getEconomyIcon()).color(NamedTextColor.GOLD); + Component ayweniteValue = Component.text(aywenite).color(NamedTextColor.LIGHT_PURPLE); + lore = TranslationManager.translationLore( + "feature.city.menus.chunks.unclaimed.lore.cost", + position, + moneyValue, + moneyIcon, + ayweniteValue ); } return new ItemBuilder(this, material, itemMeta -> { - itemMeta.displayName(Component.text("§cClaim libre")); + itemMeta.displayName(TranslationManager.translation("feature.city.menus.chunks.unclaimed.title")); itemMeta.lore(lore); }).setOnClick(event -> handleChunkClaimClick(player, chunkX, chunkZ, hasPermissionClaim)); } @@ -363,8 +367,8 @@ private void handleChunkClaimClick(Player player, int chunkX, int chunkZ, boolea new CityChunkMenu(player).open(); }, 2); }, - List.of(Component.text("§7Voulez vous vraiment claim ce chunk ?")), - List.of(Component.text("§7Annuler la procédure de claim"))); + List.of(TranslationManager.translation("feature.city.menus.chunks.confirm_claim.accept")), + List.of(TranslationManager.translation("feature.city.menus.chunks.confirm_claim.deny"))); menu.open(); } @@ -399,8 +403,8 @@ private void handleChunkUnclaimClick(Player player, int chunkX, int chunkZ, bool new CityChunkMenu(player).open(); }, 2); }, - List.of(Component.text("§7Voulez vous vraiment unclaim ce chunk ?")), - List.of(Component.text("§7Annuler la procédure de unclaim"))); + List.of(TranslationManager.translation("feature.city.menus.chunks.confirm_unclaim.accept")), + List.of(TranslationManager.translation("feature.city.menus.chunks.confirm_unclaim.deny"))); menu.open(); } } diff --git a/src/main/java/fr/openmc/core/features/city/menu/CityModifyMenu.java b/src/main/java/fr/openmc/core/features/city/menu/CityModifyMenu.java index 6f80a3f92..93ed0fd0f 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/CityModifyMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/CityModifyMenu.java @@ -19,6 +19,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; @@ -40,7 +41,7 @@ public CityModifyMenu(Player owner) { @Override public @NotNull Component getName() { - return Component.text("Menu des villes - Modifier"); + return TranslationManager.translation("feature.city.menus.modify.name"); } @Override @@ -73,12 +74,9 @@ public void onInventoryClick(InventoryClickEvent click) { List loreRename; if (hasPermissionRenameCity) { - loreRename = List.of( - Component.text("§7Vous pouvez renommer votre §dville§7."), - Component.empty(), - Component.text("§7Nom actuel : §d" + city.getName()), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR LE MODIFIER") + loreRename = TranslationManager.translationLore( + "feature.city.menus.modify.rename.lore", + Component.text(city.getName()).color(NamedTextColor.LIGHT_PURPLE) ); } else { loreRename = List.of( @@ -87,22 +85,22 @@ public void onInventoryClick(InventoryClickEvent click) { } inventory.put(11, new ItemBuilder(this, Material.OAK_SIGN, itemMeta -> { - itemMeta.itemName(Component.text("§7Renommer votre §dville")); + itemMeta.itemName(TranslationManager.translation("feature.city.menus.modify.rename.title")); itemMeta.lore(loreRename); }).setOnClick(inventoryClickEvent -> { City cityCheck = CityManager.getPlayerCity(player.getUniqueId()); if (!CityManageConditions.canCityRename(cityCheck, player)) return; - DialogInput.send(player, Component.text("Entrez le nom de la ville"), MAX_LENGTH_CITY, input -> { + DialogInput.send(player, TranslationManager.translation("feature.city.commands.create.enter_city_name"), MAX_LENGTH_CITY, input -> { if (input == null) return; if (InputUtils.isInputCityName(input)) { City playerCity = CityManager.getPlayerCity(player.getUniqueId()); playerCity.rename(input); - MessagesManager.sendMessage(player, Component.text("La ville a été renommée en " + input), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.commands.rename.success", Component.text(input)), Prefix.CITY, MessageType.SUCCESS, false); } else { - MessagesManager.sendMessage(player, Component.text("Veuillez mettre une entrée correcte"), Prefix.CITY, MessageType.ERROR, true); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.menus.modify.rename.invalid"), Prefix.CITY, MessageType.ERROR, true); } }); @@ -112,11 +110,7 @@ public void onInventoryClick(InventoryClickEvent click) { List loreTransfer; if (hasPermissionOwner) { - loreTransfer = List.of( - Component.text("§dLa Ville §7sera transférer à §dla personne §7que vous sélectionnerez"), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR CHOISIR") - ); + loreTransfer = TranslationManager.translationLore("feature.city.menus.modify.transfer.lore"); } else { loreTransfer = List.of( TranslationManager.translation("messages.global.cannot_do_this") @@ -124,7 +118,7 @@ public void onInventoryClick(InventoryClickEvent click) { } inventory.put(13, new ItemBuilder(this, Material.TOTEM_OF_UNDYING, itemMeta -> { - itemMeta.itemName(Component.text("§7Transférer la §dville")); + itemMeta.itemName(TranslationManager.translation("feature.city.menus.modify.transfer.title")); itemMeta.lore(loreTransfer); }).setOnClick(inventoryClickEvent -> { City cityCheck = CityManager.getPlayerCity(player.getUniqueId()); @@ -132,7 +126,7 @@ public void onInventoryClick(InventoryClickEvent click) { if (!CityManageConditions.canCityTransfer(cityCheck, player)) return; if (city.getMembers().size() - 1 == 0) { - MessagesManager.sendMessage(player, Component.text("Il y a pas de membre a qui vous pouvez transférer la ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.menus.modify.transfer.no_member"), Prefix.CITY, MessageType.ERROR, false); return; } @@ -145,17 +139,12 @@ public void onInventoryClick(InventoryClickEvent click) { List loreDelete; if (hasPermissionOwner) { if (!DynamicCooldownManager.isReady(player.getUniqueId(), "city:big")) { - loreDelete = List.of( - Component.text("§7Vous allez définitivement §csupprimer la ville!"), - Component.empty(), - Component.text("§7Vous devez attendre §c" + DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(player.getUniqueId(), "city:big")) + " §7avant de pouvoir delete votre ville") + loreDelete = TranslationManager.translationLore( + "feature.city.menus.modify.delete.lore.wait", + Component.text(DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(player.getUniqueId(), "city:big"))).color(NamedTextColor.RED) ); } else { - loreDelete = List.of( - Component.text("§7Vous allez définitivement §csupprimer la ville!"), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR CONFIRMER") - ); + loreDelete = TranslationManager.translationLore("feature.city.menus.modify.delete.lore.click"); } } else { loreDelete = List.of( @@ -163,7 +152,7 @@ public void onInventoryClick(InventoryClickEvent click) { ); } return new ItemBuilder(this, Material.TNT, itemMeta -> { - itemMeta.itemName(Component.text("§7Supprimer la ville")); + itemMeta.itemName(TranslationManager.translation("feature.city.menus.modify.delete.title")); itemMeta.lore(loreDelete); }).setOnClick(inventoryClickEvent -> { CityDeleteAction.startDeleteCity(player); @@ -178,8 +167,8 @@ public void onInventoryClick(InventoryClickEvent click) { } inventory.put(18, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.displayName(Component.text("§aRetour")); - itemMeta.lore(List.of(Component.text("§7Retourner au menu précédent"))); + itemMeta.displayName(TranslationManager.translation("messages.menus.back")); + itemMeta.lore(List.of(TranslationManager.translation("messages.menus.back_lore"))); }, true)); return inventory; diff --git a/src/main/java/fr/openmc/core/features/city/menu/CityPermsMenu.java b/src/main/java/fr/openmc/core/features/city/menu/CityPermsMenu.java index 08d148049..ace244864 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/CityPermsMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/CityPermsMenu.java @@ -16,6 +16,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -61,27 +62,29 @@ public List getItems() { boolean hasPerm = memberPerms != null && memberPerms.contains(permission); ItemBuilder itemBuilder = new ItemBuilder(this, permission.getIcon(), itemMeta -> { itemMeta.setEnchantmentGlintOverride(hasPerm); - String name; + String nameKey; if (edit) { - if (hasPerm) { - name = "§cRetirer " + permission.getDisplayName(); - } else { - name = "§aAjouter " + permission.getDisplayName(); - } + nameKey = hasPerm + ? "feature.city.menus.perms.permission.remove" + : "feature.city.menus.perms.permission.add"; } else { - if (hasPerm) { - name = "§c" + permission.getDisplayName(); - } else { - name = "§a" + permission.getDisplayName(); - } + nameKey = "feature.city.menus.perms.permission"; } - itemMeta.displayName(Component.text(name).decoration(TextDecoration.ITALIC, false)); + NamedTextColor permColor = hasPerm ? NamedTextColor.RED : NamedTextColor.GREEN; + itemMeta.displayName(TranslationManager.translation( + nameKey, + permission.getDisplayName().color(permColor) + ).decoration(TextDecoration.ITALIC, false)); - List lore = List.of( - Component.text("§e§lCLIQUEZ POUR " + (hasPerm ? "RETIRER" : "AJOUTER") + " CETTE PERMISSION") - ); - itemMeta.lore(edit ? lore : List.of()); + if (edit) { + String loreKey = hasPerm + ? "feature.city.menus.perms.permission.lore.remove" + : "feature.city.menus.perms.permission.lore.add"; + itemMeta.lore(TranslationManager.translationLore(loreKey)); + } else { + itemMeta.lore(List.of()); + } }).setOnClick(inventoryClickEvent -> { if (!edit) MessagesManager.sendMessage(getOwner(), TranslationManager.translation("messages.city.player_no_permission_access"), Prefix.CITY, MessageType.ERROR, true); @@ -102,27 +105,24 @@ public Map getButtons() { Map map = new HashMap<>(); map.put(45, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.displayName(Component.text("§aRetour")); - itemMeta.lore(List.of(Component.text("§7Retourner au menu précédent"))); + itemMeta.displayName(TranslationManager.translation("messages.menus.back")); + itemMeta.lore(List.of(TranslationManager.translation("messages.menus.back_lore"))); }, true)); map.put(48, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_back_orange").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§aPage précédente")); - itemMeta.lore(List.of(Component.text("§7Cliquez pour aller à la page précédente"))); + itemMeta.displayName(TranslationManager.translation("messages.menus.previous_page")); + itemMeta.lore(TranslationManager.translationLore("messages.menus.previous_page_lore")); }).setPreviousPageButton()); map.put(50, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_next_orange").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§aPage suivante")); - itemMeta.lore(List.of(Component.text("§7Cliquez pour aller à la page suivante"))); + itemMeta.displayName(TranslationManager.translation("messages.menus.next_page")); + itemMeta.lore(TranslationManager.translationLore("messages.menus.next_page_lore")); }).setNextPageButton()); if (edit) { map.put(53, new ItemBuilder(this, Material.GOLD_BLOCK, itemMeta -> { - itemMeta.displayName(Component.text("Gérer toutes les permissions du membre")); - itemMeta.lore(List.of( - Component.text("§cClique-gauche pour tout retirer"), - Component.text("§aClique-droit pour tout ajouter") - )); + itemMeta.displayName(TranslationManager.translation("feature.city.menus.perms.bulk.title")); + itemMeta.lore(TranslationManager.translationLore("feature.city.menus.perms.bulk.lore")); }).setOnClick(inventoryClickEvent -> { if (inventoryClickEvent.isLeftClick()) CityPermsCommands.removeAll(getOwner(), CacheOfflinePlayer.getOfflinePlayer(memberUUID)); else if (inventoryClickEvent.isRightClick()) CityPermsCommands.addAll(getOwner(), CacheOfflinePlayer.getOfflinePlayer(memberUUID)); @@ -136,7 +136,7 @@ public Map getButtons() { @Override public @NotNull Component getName() { - return Component.text("Permissions de " + CacheOfflinePlayer.getOfflinePlayer(memberUUID).getName()); + return TranslationManager.translation("feature.city.menus.perms.name", Component.text(CacheOfflinePlayer.getOfflinePlayer(memberUUID).getName())); } @Override diff --git a/src/main/java/fr/openmc/core/features/city/menu/CityTopMenu.java b/src/main/java/fr/openmc/core/features/city/menu/CityTopMenu.java index 926bd8fbe..0bff183a0 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/CityTopMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/CityTopMenu.java @@ -13,6 +13,7 @@ import fr.openmc.core.features.leaderboards.LeaderboardManager; import fr.openmc.core.utils.SkullUtils; import fr.openmc.core.utils.cache.PlayerNameCache; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; @@ -31,9 +32,9 @@ public class CityTopMenu extends PaginatedMenu { // Constants for the menu - private static final Component SORT_HEADER = Component.text("§7Cliquez pour trier par"); - private static final String SELECTED_PREFIX = "§6➢ "; - private static final String UNSELECTED_PREFIX = "§b "; + private static final Component SORT_HEADER = TranslationManager.translation("feature.city.menus.top.sort.header"); + private static final Component SELECTED_PREFIX = TranslationManager.translation("feature.city.menus.top.sort.selected_prefix"); + private static final Component UNSELECTED_PREFIX = TranslationManager.translation("feature.city.menus.top.sort.unselected_prefix"); private final List cities; private SortType sortType; @@ -82,36 +83,59 @@ public List getItems() { UUID ownerUUID = city.getPlayerWithPermission(CityPermission.OWNER); if (ownerUUID != null) { - String ownerName = PlayerNameCache.getName(ownerUUID); - List cityLore = new ArrayList<>(); - cityLore.add(Component.text("§7Propriétaire : " + ownerName)); + Component ownerComponent = PlayerNameCache.name(ownerUUID).color(NamedTextColor.GRAY); + Component levelComponent = Component.text(city.getLevel()).color(NamedTextColor.DARK_AQUA); + Component membersCurrent = Component.text(city.getMembers().size()).color(NamedTextColor.GREEN); + Component membersLimit = Component.text(MemberLimitRewards.getMemberLimit(city.getLevel())).color(NamedTextColor.GREEN); + Component areaComponent = Component.text(city.getChunks().size()).color(NamedTextColor.GOLD); + Component wealthComponent = Component.text(EconomyManager.getFormattedSimplifiedNumber(city.getBalance())).color(NamedTextColor.GOLD); + Component wealthIcon = Component.text(EconomyManager.getEconomyIcon()).color(NamedTextColor.GOLD); + Component powerComponent = Component.text(city.getPowerPoints()).color(NamedTextColor.RED); + if (MayorManager.phaseMayor == 2 && FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.MAYOR)) { - String mayorCity = city.getMayor() == null ? "§7Aucun" : city.getMayor().getName(); + String mayorCity = city.getMayor() == null + ? TranslationManager.translationString("messages.menus.none") + : city.getMayor().getName(); NamedTextColor mayorColor = (city.getMayor() == null || city.getMayor().getMayorColor() == null) ? NamedTextColor.WHITE : city.getMayor().getMayorColor(); - cityLore.add(Component.text("§7Maire : ") - .append(Component.text(mayorCity) - .color(mayorColor) - .decoration(TextDecoration.ITALIC, false))); + Component mayorComponent = Component.text(mayorCity).color(mayorColor).decoration(TextDecoration.ITALIC, false); + cityLore.addAll(TranslationManager.translationLore( + "feature.city.menus.top.item.lore.with_mayor", + ownerComponent, + mayorComponent, + levelComponent, + membersCurrent, + membersLimit, + areaComponent, + wealthComponent, + wealthIcon, + powerComponent + )); + } else { + cityLore.addAll(TranslationManager.translationLore( + "feature.city.menus.top.item.lore", + ownerComponent, + levelComponent, + membersCurrent, + membersLimit, + areaComponent, + wealthComponent, + wealthIcon, + powerComponent + )); } - cityLore.add(Component.text("§7Niveau: §3" + city.getLevel())); - cityLore.add(Component.text("§7Membres : §a" + city.getMembers().size() + "/" + MemberLimitRewards.getMemberLimit(city.getLevel()) + " membres")); - cityLore.add(Component.text("§7Superficie : §6" + city.getChunks().size() + " chunks")); - cityLore.add(Component.text("§7Richesses : §6" - + EconomyManager.getFormattedSimplifiedNumber(city.getBalance()) - + EconomyManager.getEconomyIcon())); - cityLore.add(Component.text("§7Points de puissances : §c" + city.getPowerPoints())); int currentRank = rank.getAndIncrement(); items.add(new ItemBuilder(this, SkullUtils.getPlayerSkull(ownerUUID), itemMeta -> { - itemMeta.displayName(Component.text("n°" + currentRank + " " + city.getName()) - .color(LeaderboardManager.getRankColor(currentRank)) - .decoration(TextDecoration.ITALIC, false) - ); + itemMeta.displayName(TranslationManager.translation( + "feature.city.menus.top.item.title", + Component.text(currentRank).color(LeaderboardManager.getRankColor(currentRank)), + Component.text(city.getName()) + ).color(LeaderboardManager.getRankColor(currentRank)).decoration(TextDecoration.ITALIC, false)); itemMeta.lore(cityLore); })); } @@ -140,7 +164,7 @@ public Map getButtons() { Map map = new HashMap<>(); map.put(49, new ItemBuilder(this, Material.HOPPER, itemMeta -> { - itemMeta.displayName(Component.text("Trier")); + itemMeta.displayName(TranslationManager.translation("feature.city.menus.top.sort.title")); itemMeta.lore(generateSortLoreText()); }).setOnClick(inventoryClickEvent -> { changeSortType(inventoryClickEvent.isLeftClick()); @@ -152,7 +176,7 @@ public Map getButtons() { @Override public @NotNull Component getName() { - return Component.text("Menu des classement des villes"); + return TranslationManager.translation("feature.city.menus.top.name"); } @Override @@ -177,11 +201,11 @@ public void onClose(InventoryCloseEvent event) { private List generateSortLoreText() { return List.of( SORT_HEADER, - formatSortOption(SortType.GLOBAL, "Global"), - formatSortOption(SortType.POWER, "Puissances"), - formatSortOption(SortType.MONEY, "Richesses"), - formatSortOption(SortType.CLAIM, "Superficie"), - formatSortOption(SortType.POPULATION, "Population") + formatSortOption(SortType.GLOBAL, TranslationManager.translation("feature.city.menus.top.sort.global")), + formatSortOption(SortType.POWER, TranslationManager.translation("feature.city.menus.top.sort.power")), + formatSortOption(SortType.MONEY, TranslationManager.translation("feature.city.menus.top.sort.money")), + formatSortOption(SortType.CLAIM, TranslationManager.translation("feature.city.menus.top.sort.claim")), + formatSortOption(SortType.POPULATION, TranslationManager.translation("feature.city.menus.top.sort.population")) ); } @@ -192,8 +216,9 @@ private List generateSortLoreText() { * @param label The label for the sorting option. * @return A formatted string representing the sorting option. */ - private Component formatSortOption(SortType type, String label) { - return Component.text((sortType == type ? SELECTED_PREFIX : UNSELECTED_PREFIX) + label); + private Component formatSortOption(SortType type, Component label) { + Component prefix = sortType == type ? SELECTED_PREFIX : UNSELECTED_PREFIX; + return prefix.append(label); } /** diff --git a/src/main/java/fr/openmc/core/features/city/menu/CityTransferMenu.java b/src/main/java/fr/openmc/core/features/city/menu/CityTransferMenu.java index 5ccd89c21..ac95557f5 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/CityTransferMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/CityTransferMenu.java @@ -16,6 +16,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Material; import org.bukkit.OfflinePlayer; @@ -65,9 +66,9 @@ public List getItems() { items.add(new ItemBuilder(this, SkullUtils.getPlayerSkull(uuid), itemMeta -> { itemMeta.displayName(Component.text(title + playerOffline.getName()).decoration(TextDecoration.ITALIC, false)); - itemMeta.lore(List.of( - Component.text("§7Voulez-vous transférer la ville à §d" + title + playerOffline.getName() + "§7 ?"), - Component.text("§e§lCLIQUEZ ICI POUR CONFIRMER") + itemMeta.lore(TranslationManager.translationLore( + "feature.city.menus.transfer.item.lore", + Component.text(title + playerOffline.getName()).color(NamedTextColor.LIGHT_PURPLE) )); }).setOnClick(inventoryClickEvent -> { if (!hasPermissionOwner) { @@ -91,13 +92,13 @@ public List getTakableSlot() { public Map getButtons() { Map map = new HashMap<>(); map.put(49, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_cancel").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§7Fermer")); + itemMeta.displayName(TranslationManager.translation("messages.menus.close")); }).setCloseButton()); map.put(48, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_back_orange").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§cPage précédente")); + itemMeta.displayName(TranslationManager.translation("messages.menus.previous_page")); }).setPreviousPageButton()); map.put(50, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_next_orange").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§aPage suivante")); + itemMeta.displayName(TranslationManager.translation("messages.menus.next_page")); }).setNextPageButton()); return map; } @@ -114,7 +115,7 @@ public int getSizeOfItems() { @Override public @NotNull Component getName() { - return Component.text("Menu des villes - Transférer"); + return TranslationManager.translation("feature.city.menus.transfer.name"); } @Override diff --git a/src/main/java/fr/openmc/core/features/city/menu/CityTypeMenu.java b/src/main/java/fr/openmc/core/features/city/menu/CityTypeMenu.java index badbfedc8..b0c5bd301 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/CityTypeMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/CityTypeMenu.java @@ -9,14 +9,15 @@ import fr.openmc.core.features.city.actions.CityChangeAction; import fr.openmc.core.features.city.conditions.CityTypeConditions; import fr.openmc.core.features.city.sub.milestone.rewards.FeaturesRewards; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -29,7 +30,7 @@ public CityTypeMenu(Player owner) { @Override public @NotNull Component getName() { - return Component.text("Menu des villes - Type"); + return TranslationManager.translation("feature.city.menus.type.name"); } @Override @@ -53,15 +54,11 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { Player player = getOwner(); City city = CityManager.getPlayerCity(player.getUniqueId()); - List peaceInfo = new ArrayList<>(); - boolean enchantPeace = city.getType() == CityType.PEACE; - peaceInfo.add(Component.text("§7Votre sécurité est §aassurée §7!")); - peaceInfo.add(Component.empty()); - peaceInfo.add(Component.text("§6§lTIPS: Parfait pour build, et échanger en toute tranquilité !")); + List peaceInfo = TranslationManager.translationLore("feature.city.menus.type.peace.lore"); map.put(11, new ItemBuilder(this, Material.POPPY, itemMeta -> { - itemMeta.displayName(Component.text("§aVille en paix")); + itemMeta.displayName(TranslationManager.translation("feature.city.menus.type.peace.title")); itemMeta.lore(peaceInfo); itemMeta.setEnchantmentGlintOverride(enchantPeace); }).setOnClick(inventoryClickEvent -> { @@ -70,21 +67,19 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { CityChangeAction.beginChangeCity(player, CityType.PEACE); })); - List warInfo = new ArrayList<>(); - warInfo.add(Component.text("§7Un monde de §cguerre §7et de §cconcurrence.")); - warInfo.add(Component.empty()); - warInfo.add(Component.text("§c§l ⚠ ATTENTION")); - warInfo.add(Component.text("§8- §cLes villes étant dans le même status que vous, pourront vous §cdéclarer la guerre !")); - warInfo.add(Component.text("§6§lTIPS: Idéal pour les tryhardeurs et les compétitifs")); - + List warInfo; if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.TYPE_WAR)) { - warInfo.add(Component.empty()); - warInfo.add(Component.text("§cVous devez être niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.TYPE_WAR) + " pour débloquer ceci")); + warInfo = TranslationManager.translationLore( + "feature.city.menus.type.war.lore.locked", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.TYPE_WAR)).color(NamedTextColor.RED) + ); + } else { + warInfo = TranslationManager.translationLore("feature.city.menus.type.war.lore"); } boolean enchantWar = city.getType() == CityType.WAR; map.put(15, new ItemBuilder(this, Material.TNT, itemMeta -> { - itemMeta.displayName(Component.text("§cVille en guerre")); + itemMeta.displayName(TranslationManager.translation("feature.city.menus.type.war.title")); itemMeta.lore(warInfo); itemMeta.setEnchantmentGlintOverride(enchantWar); }).setOnClick(inventoryClickEvent -> { @@ -94,7 +89,7 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { })); map.put(18, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.itemName(Component.text("§aRetour")); + itemMeta.itemName(TranslationManager.translation("messages.menus.back")); }, true)); return map; diff --git a/src/main/java/fr/openmc/core/features/city/menu/InvitationsMenu.java b/src/main/java/fr/openmc/core/features/city/menu/InvitationsMenu.java index 8c2457b12..0e597ca4b 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/InvitationsMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/InvitationsMenu.java @@ -9,7 +9,9 @@ import fr.openmc.core.features.city.CityManager; import fr.openmc.core.features.city.commands.CityInviteCommands; import fr.openmc.core.registry.items.CustomItemRegistry; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; @@ -28,7 +30,7 @@ public InvitationsMenu(Player owner) { @Override public @NotNull Component getName() { - return Component.text("Menu des villes - Invitations"); + return TranslationManager.translation("feature.city.menus.invitations.name"); } @Override @@ -57,8 +59,7 @@ public List getItems() { Player player = getOwner(); List invitations = CityInviteCommands.invitations.get(player); - List invitationLore = List.of( - Component.text("§e§lCLIQUEZ ICI POUR REJOINDRE LA VILLE")); + List invitationLore = TranslationManager.translationLore("feature.city.menus.invitations.item.lore"); for (Player inviter : invitations) { City inviterCity = CityManager.getPlayerCity(inviter.getUniqueId()); @@ -71,8 +72,12 @@ public List getItems() { return getItems(); } - Component invitationName = Component.text("§7" + inviter.getName() + " vous a invité(e) dans " + inviterCity.getName()); - + Component invitationName = TranslationManager.translation( + "feature.city.menus.invitations.item.name", + Component.text(inviter.getName()).color(NamedTextColor.GRAY), + Component.text(inviterCity.getName()).color(NamedTextColor.GRAY) + ); + items.add(new ItemBuilder(this, Material.PAPER, itemMeta -> { itemMeta.itemName(invitationName); itemMeta.lore(invitationLore); @@ -86,8 +91,8 @@ public List getItems() { CityInviteCommands.denyInvitation(player, inviter); player.closeInventory(); }, - List.of(Component.text("§7Accepter")), - List.of(Component.text("§7Refuser" + inviter.getName()))).open(); + List.of(TranslationManager.translation("messages.global.accept")), + List.of(TranslationManager.translation("feature.city.menus.invitations.confirm.deny", Component.text(inviter.getName()).color(NamedTextColor.GRAY)))).open(); })); } @@ -113,12 +118,12 @@ public int getSizeOfItems() { public Map getButtons() { Map map = new HashMap<>(); map.put(45, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.displayName(Component.text("§aRetour")); - itemMeta.lore(List.of(Component.text("§7Retourner au menu précédent"))); + itemMeta.displayName(TranslationManager.translation("messages.menus.back")); + itemMeta.lore(List.of(TranslationManager.translation("messages.menus.back_lore"))); }, true)); map.put(49, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_cancel").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§7Fermer")); + itemMeta.displayName(TranslationManager.translation("messages.menus.close")); }).setOnClick(inventoryClickEvent -> getOwner().closeInventory() )); @@ -126,10 +131,10 @@ public Map getButtons() { map.put(48, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_back_orange")).getBest(), - itemMeta -> itemMeta.displayName(Component.text("§cPage précédente"))).setPreviousPageButton()); + itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.previous_page"))).setPreviousPageButton()); map.put(50, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_next_orange")).getBest(), - itemMeta -> itemMeta.displayName(Component.text("§aPage suivante"))).setNextPageButton()); + itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.next_page"))).setNextPageButton()); return map; } diff --git a/src/main/java/fr/openmc/core/features/city/menu/NoCityMenu.java b/src/main/java/fr/openmc/core/features/city/menu/NoCityMenu.java index 230c3814c..a9a5cf3fc 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/NoCityMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/NoCityMenu.java @@ -15,8 +15,9 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.TextDecoration; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; @@ -39,7 +40,7 @@ public NoCityMenu(Player owner) { @Override public @NotNull Component getName() { - return Component.text("Menu des villes - Aucune"); + return TranslationManager.translation("feature.city.menus.no_city.name"); } @Override @@ -66,19 +67,22 @@ public void onInventoryClick(InventoryClickEvent click) { Component nameNotif; List loreNotif = new ArrayList<>(); if (!CityInviteCommands.invitations.containsKey(player)) { - nameNotif = Component.text("§7Vous n'avez aucune §6invitation"); - loreNotif.add(Component.text("§7Un habitant d'une ville doit vous §6inviter")); - loreNotif.add(Component.text("§6via /city invite")); + nameNotif = TranslationManager.translation("feature.city.menus.no_city.invitations.none.title"); + loreNotif.addAll(TranslationManager.translationLore("feature.city.menus.no_city.invitations.none.lore")); inventory.put(15, new ItemBuilder(this, Material.CHISELED_BOOKSHELF, itemMeta -> { itemMeta.itemName(nameNotif); itemMeta.lore(loreNotif); - }).setOnClick(inventoryClickEvent -> MessagesManager.sendMessage(player, Component.text("Tu n'as aucune invitation en attente"), Prefix.CITY, MessageType.ERROR, false))); + }).setOnClick(inventoryClickEvent -> MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.invite.commands.accept.none_pending"), Prefix.CITY, MessageType.ERROR, false))); } else { List invitations = CityInviteCommands.invitations.get(player); - nameNotif = Component.text("§7Vous avez §6" + invitations.size() + " invitation" + (invitations.size() > 1 ? "s" : "")); + nameNotif = TranslationManager.translation( + "feature.city.menus.no_city.invitations.count.title", + Component.text(invitations.size()), + Component.text(invitations.size() > 1 ? "s" : "") + ); - loreNotif.add(Component.text("§e§lCLIQUEZ ICI POUR VOIR VOS INVITATIONS")); + loreNotif.addAll(TranslationManager.translationLore("feature.city.menus.no_city.invitations.count.lore")); inventory.put(15, new ItemBuilder(this, Material.BOOKSHELF, itemMeta -> { itemMeta.itemName(nameNotif); @@ -91,32 +95,26 @@ public void onInventoryClick(InventoryClickEvent click) { Supplier createItemSupplier = () -> { List loreCreate; if (!DynamicCooldownManager.isReady(player.getUniqueId(), "city:big")) { - loreCreate = List.of( - Component.text("§7Vous pouvez aussi créer §dvotre Ville"), - Component.text("§7Faites §d/city create §7ou bien cliquez ici !"), - Component.empty(), - Component.text("§7Vous devez attendre §c" + DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(player.getUniqueId(), "city:big")) + " §7avant de pouvoir créer une ville") + loreCreate = TranslationManager.translationLore( + "feature.city.menus.no_city.create.lore.cooldown", + Component.text(DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(player.getUniqueId(), "city:big"))).color(NamedTextColor.RED) ); } else { - loreCreate = List.of( - Component.text("§7Vous pouvez aussi créer §dvotre Ville"), - Component.text("§7Faites §d/city create §7ou bien cliquez ici !"), - Component.empty(), - Component.text("§cCoûte :"), - Component.text("§8- §6" + CityCreateConditions.MONEY_CREATE + EconomyManager.getEconomyIcon()).decoration(TextDecoration.ITALIC, false), - Component.text("§8- §d" + CityCreateConditions.AYWENITE_CREATE + " d'Aywenite"), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR CREER VOTRE VILLE") + loreCreate = TranslationManager.translationLore( + "feature.city.menus.no_city.create.lore.ready", + Component.text(CityCreateConditions.MONEY_CREATE).color(NamedTextColor.GOLD), + Component.text(EconomyManager.getEconomyIcon()).color(NamedTextColor.GOLD), + Component.text(CityCreateConditions.AYWENITE_CREATE).color(NamedTextColor.LIGHT_PURPLE) ); } return new ItemBuilder(this, Material.SCAFFOLDING, itemMeta -> { - itemMeta.itemName(Component.text("§7Créer §dvotre ville")); + itemMeta.itemName(TranslationManager.translation("feature.city.menus.no_city.create.title")); itemMeta.lore(loreCreate); }).setOnClick(inventoryClickEvent -> { if (!DynamicCooldownManager.isReady(player.getUniqueId(), "city:big")) return; - DialogInput.send(player, Component.text("Entrez le nom de la ville"), MAX_LENGTH_CITY, input -> { + DialogInput.send(player, TranslationManager.translation("feature.city.commands.create.enter_city_name"), MAX_LENGTH_CITY, input -> { if (input == null) return; CityCreateAction.beginCreateCity(player, input); } diff --git a/src/main/java/fr/openmc/core/features/city/menu/list/CityListDetailsMenu.java b/src/main/java/fr/openmc/core/features/city/menu/list/CityListDetailsMenu.java index d189346ca..f7c86fc12 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/list/CityListDetailsMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/list/CityListDetailsMenu.java @@ -17,8 +17,10 @@ import fr.openmc.core.features.city.sub.milestone.rewards.MemberLimitRewards; import fr.openmc.core.features.economy.EconomyManager; import fr.openmc.core.utils.SkullUtils; -import fr.openmc.core.utils.cache.CacheOfflinePlayer; +import fr.openmc.core.utils.cache.PlayerNameCache; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Material; import org.bukkit.entity.LivingEntity; @@ -28,10 +30,7 @@ import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public class CityListDetailsMenu extends Menu { @@ -50,7 +49,7 @@ public CityListDetailsMenu(Player owner, City city) { @Override public @NotNull Component getName() { - return Component.text("Menu de détails de la ville " + city.getName()); + return TranslationManager.translation("feature.city.menus.list.details.name", Component.text(city.getName())); } @Override @@ -74,7 +73,7 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { map.put(0, new ItemBuilder(this, Material.DIAMOND, itemMeta -> - itemMeta.displayName(Component.text("§7Niveau : §3" + this.city.getLevel()))).hide(ItemUtils.getDataComponentType()) + itemMeta.displayName(TranslationManager.translation("feature.city.menus.list.details.level", Component.text(this.city.getLevel()).color(NamedTextColor.DARK_AQUA)))).hide(ItemUtils.getDataComponentType()) ); List loreOwner = new ArrayList<>(); @@ -87,20 +86,25 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { Perks perk3 = PerkManager.getPerkById(mayor.getIdPerk3()); loreOwner.add(Component.empty()); - loreOwner.add(Component.text(perk1 == null ? "§cErreur" : perk1.getName())); + loreOwner.add(perk1 == null ? TranslationManager.translation("feature.city.menus.common.error") : Component.text(perk1.getName())); loreOwner.addAll(perk1 == null ? List.of() : perk1.getLore()); if (electionType == ElectionType.OWNER_CHOOSE) { loreOwner.add(Component.empty()); - loreOwner.add(Component.text(perk2 == null ? "§cErreur" : perk2.getName())); + loreOwner.add(perk2 == null ? TranslationManager.translation("feature.city.menus.common.error") : Component.text(perk2.getName())); loreOwner.addAll(perk2 == null ? List.of() : perk2.getLore()); loreOwner.add(Component.empty()); - loreOwner.add(Component.text(perk3 == null ? "§cErreur" : perk3.getName())); + loreOwner.add(perk3 == null ? TranslationManager.translation("feature.city.menus.common.error") : Component.text(perk3.getName())); loreOwner.addAll(perk3 == null ? List.of() : perk3.getLore()); } - map.put(12, new ItemBuilder(this, SkullUtils.getPlayerSkull(this.city.getPlayerWithPermission(CityPermission.OWNER)), + UUID ownerUUID = this.city.getPlayerWithPermission(CityPermission.OWNER); + + map.put(12, new ItemBuilder(this, SkullUtils.getPlayerSkull(ownerUUID), itemMeta -> { - itemMeta.displayName(Component.text("§7Propriétaire : " + CacheOfflinePlayer.getOfflinePlayer(this.city.getPlayerWithPermission(CityPermission.OWNER)).getName())); + itemMeta.displayName(TranslationManager.translation( + "feature.city.menus.list.details.owner", + PlayerNameCache.name(ownerUUID).color(NamedTextColor.GRAY) + )); itemMeta.lore(loreOwner); }).hide(ItemUtils.getDataComponentType()) ); @@ -108,17 +112,19 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { if (electionType == ElectionType.ELECTION) { List loreMayor = new ArrayList<>(); loreMayor.add(Component.empty()); - loreMayor.add(Component.text(perk2 == null ? "§cErreur" : perk2.getName())); + loreMayor.add(perk2 == null ? TranslationManager.translation("feature.city.menus.common.error") : Component.text(perk2.getName())); loreMayor.addAll(perk2 == null ? List.of() : perk2.getLore()); loreMayor.add(Component.empty()); - loreMayor.add(Component.text(perk3 == null ? "§cErreur" : perk3.getName())); + loreMayor.add(perk3 == null ? TranslationManager.translation("feature.city.menus.common.error") : Component.text(perk3.getName())); loreMayor.addAll(perk3 == null ? List.of() : perk3.getLore()); map.put(14, new ItemBuilder(this, SkullUtils.getPlayerSkull(this.city.getPlayerWithPermission(CityPermission.OWNER)), itemMeta -> { itemMeta.displayName( - Component.text("§7Maire : ") - .append(Component.text(mayor.getName()).color(this.city.getMayor().getMayorColor()).decoration(TextDecoration.ITALIC, false)) + TranslationManager.translation( + "feature.city.menus.list.details.mayor", + Component.text(mayor.getName()).color(this.city.getMayor().getMayorColor()).decoration(TextDecoration.ITALIC, false) + ) ); itemMeta.lore(loreMayor); } @@ -127,35 +133,45 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { } } else { map.put(13, new ItemBuilder(this, SkullUtils.getPlayerSkull(this.city.getPlayerWithPermission(CityPermission.OWNER)), - itemMeta -> itemMeta.displayName(Component.text("§7Propriétaire : " + CacheOfflinePlayer.getOfflinePlayer(this.city.getPlayerWithPermission(CityPermission.OWNER)).getName()))) + itemMeta -> itemMeta.displayName(TranslationManager.translation( + "feature.city.menus.list.details.owner", + PlayerNameCache.name(this.city.getPlayerWithPermission(CityPermission.OWNER)).color(NamedTextColor.GRAY) + ))) ); } LivingEntity entity = (LivingEntity) city.getMascot().getEntity(); map.put(8, new ItemBuilder(this, new ItemStack(entity != null ? city.getMascot().getMascotEgg() : Material.BARRIER), - itemMeta -> itemMeta.displayName(Component.text(entity != null ? "§dNiveau de la Mascotte : " + city.getMascot().getLevel() : "§cAucune mascotte trouvée (bug)")))); - + itemMeta -> itemMeta.displayName(entity != null + ? TranslationManager.translation("feature.city.menus.list.details.mascot.level", Component.text(city.getMascot().getLevel()).color(NamedTextColor.LIGHT_PURPLE)) + : TranslationManager.translation("feature.city.menus.list.details.mascot.missing")))); + map.put(9, new ItemBuilder(this, new ItemStack(Material.PAPER), - itemMeta -> itemMeta.displayName(Component.text("§bTaille : " + city.getChunks().size() + " chunks")))); - + itemMeta -> itemMeta.displayName(TranslationManager.translation("feature.city.menus.list.details.size", Component.text(city.getChunks().size()).color(NamedTextColor.AQUA))))); + map.put(22, new ItemBuilder(this, new ItemStack(Material.DIAMOND), - itemMeta -> itemMeta.displayName(Component.text("§6Richesses : " + EconomyManager.getFormattedSimplifiedNumber(city.getBalance()) + " " + EconomyManager.getEconomyIcon())))); - + itemMeta -> itemMeta.displayName(TranslationManager.translation( + "feature.city.menus.list.details.wealth", + Component.text(EconomyManager.getFormattedSimplifiedNumber(city.getBalance())).color(NamedTextColor.GOLD), + Component.text(EconomyManager.getEconomyIcon()).color(NamedTextColor.GOLD) + )))); + map.put(4, new ItemBuilder(this, new ItemStack(Material.PLAYER_HEAD), itemMeta -> { - itemMeta.displayName(Component.text("§bPopulation : " + city.getMembers().size() + "/" + MemberLimitRewards.getMemberLimit(city.getLevel()) + (city.getMembers().size() > 1 ? " joueurs" : " joueur"))); - itemMeta.lore(List.of( - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR VOIR LES MEMBRES") - ) - ); + itemMeta.displayName(TranslationManager.translation( + "feature.city.menus.list.details.population", + Component.text(city.getMembers().size()).color(NamedTextColor.AQUA), + Component.text(MemberLimitRewards.getMemberLimit(city.getLevel())).color(NamedTextColor.AQUA), + Component.text(city.getMembers().size() > 1 ? "s" : "") + )); + itemMeta.lore(TranslationManager.translationLore("feature.city.menus.list.details.population.lore")); }).setOnClick(inventoryClickEvent -> new CityPlayerListMenu(getOwner(), city).open())); map.put(26, new ItemBuilder(this, new ItemStack(city.getType().equals(CityType.WAR) ? Material.RED_BANNER : Material.GREEN_BANNER), - itemMeta -> itemMeta.displayName(Component.text("§eType : " + city.getType().getDisplayName())))); + itemMeta -> itemMeta.displayName(TranslationManager.translation("feature.city.menus.list.details.type", city.getType().getDisplayName())))); map.put(18, new ItemBuilder(this, CustomStack.getInstance("_iainternal:icon_back_orange").getItemStack(), - itemMeta -> itemMeta.displayName(Component.text("§eRetour")), true)); + itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.back")), true)); return map; } diff --git a/src/main/java/fr/openmc/core/features/city/menu/list/CityListMenu.java b/src/main/java/fr/openmc/core/features/city/menu/list/CityListMenu.java index 874953f73..f84b72400 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/list/CityListMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/list/CityListMenu.java @@ -16,6 +16,7 @@ import fr.openmc.core.features.economy.EconomyManager; import fr.openmc.core.utils.SkullUtils; import fr.openmc.core.utils.cache.PlayerNameCache; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; @@ -32,9 +33,9 @@ public class CityListMenu extends PaginatedMenu { // Constants for the menu - private static final Component SORT_HEADER = Component.text("§7Cliquez pour trier par"); - private static final String SELECTED_PREFIX = "§6➢ "; - private static final String UNSELECTED_PREFIX = "§b "; + private static final Component SORT_HEADER = TranslationManager.translation("feature.city.menus.list.sort.header"); + private static final Component SELECTED_PREFIX = TranslationManager.translation("feature.city.menus.list.sort.selected_prefix"); + private static final Component UNSELECTED_PREFIX = TranslationManager.translation("feature.city.menus.list.sort.unselected_prefix"); private final List cities; private SortType sortType; @@ -78,24 +79,54 @@ public List getItems() { if (ownerUUID == null) continue; - String ownerName = PlayerNameCache.getName(ownerUUID); - List cityLore = new ArrayList<>(); - cityLore.add(Component.text("§7Propriétaire : " + ownerName)); + Component ownerComponent = PlayerNameCache.name(ownerUUID).color(NamedTextColor.GRAY); + Component levelComponent = Component.text(city.getLevel()).color(NamedTextColor.DARK_AQUA); + Component membersCurrent = Component.text(city.getMembers().size()).color(NamedTextColor.GREEN); + Component membersLimit = Component.text(MemberLimitRewards.getMemberLimit(city.getLevel())).color(NamedTextColor.GREEN); + Component membersSuffix = Component.text(city.getMembers().size() > 1 ? "s" : ""); + Component typeComponent = city.getType().getDisplayName(); + Component wealthComponent = Component.text(EconomyManager.getFormattedSimplifiedNumber(city.getBalance())).color(NamedTextColor.GOLD); + Component wealthIcon = Component.text(EconomyManager.getEconomyIcon()).color(NamedTextColor.GOLD); if (MayorManager.phaseMayor == 2 && FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.MAYOR)) { - String mayorCity = city.getMayor() == null ? "§7Aucun" : city.getMayor().getName(); + String mayorCity = city.getMayor() == null + ? TranslationManager.translationString("messages.menus.none") + : city.getMayor().getName(); NamedTextColor mayorColor = (city.getMayor() == null || city.getMayor().getMayorColor() == null) ? NamedTextColor.WHITE : city.getMayor().getMayorColor(); - cityLore.add(Component.text("§7Maire : ").append(Component.text(mayorCity).color(mayorColor).decoration(TextDecoration.ITALIC, false))); + Component mayorComponent = Component.text(mayorCity).color(mayorColor).decoration(TextDecoration.ITALIC, false); + cityLore.addAll(TranslationManager.translationLore( + "feature.city.menus.list.item.lore.with_mayor", + ownerComponent, + mayorComponent, + levelComponent, + membersCurrent, + membersLimit, + membersSuffix, + typeComponent, + wealthComponent, + wealthIcon + )); + } else { + cityLore.addAll(TranslationManager.translationLore( + "feature.city.menus.list.item.lore", + ownerComponent, + levelComponent, + membersCurrent, + membersLimit, + membersSuffix, + typeComponent, + wealthComponent, + wealthIcon + )); } - cityLore.add(Component.text("§7Niveau : §3" + city.getLevel())); - cityLore.add(Component.text("§7Membres : §a" + city.getMembers().size() + "/" + MemberLimitRewards.getMemberLimit(city.getLevel()) + (city.getMembers().size() > 1 ? " joueurs" : " joueur"))); - cityLore.add(Component.text("§eType : " + city.getType().getDisplayName())); - cityLore.add(Component.text("§6Richesses : " + EconomyManager.getFormattedSimplifiedNumber(city.getBalance()) + EconomyManager.getEconomyIcon())); items.add(new ItemBuilder(this, SkullUtils.getPlayerSkull(ownerUUID), itemMeta -> { - itemMeta.displayName(Component.text("§a" + city.getName())); + itemMeta.displayName(TranslationManager.translation( + "feature.city.menus.list.item.title", + Component.text(city.getName()).color(NamedTextColor.GREEN) + )); itemMeta.lore(cityLore); }).setOnClick(inventoryClickEvent -> new CityListDetailsMenu(getOwner(), city).open() @@ -123,22 +154,22 @@ public int getSizeOfItems() { public Map getButtons() { Map map = new HashMap<>(); map.put(49, new ItemBuilder(this, Material.HOPPER, itemMeta -> { - itemMeta.displayName(Component.text("Trier")); + itemMeta.displayName(TranslationManager.translation("feature.city.menus.list.sort.title")); itemMeta.lore(generateSortLoreText()); }).setOnClick(inventoryClickEvent -> { changeSortType(); new CityListMenu(getOwner(), sortType).open(); })); map.put(48, new ItemBuilder(this, CustomStack.getInstance("_iainternal:icon_back_orange") - .getItemStack(), itemMeta -> itemMeta.displayName(Component.text("§cPage précédente"))).setPreviousPageButton()); + .getItemStack(), itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.previous_page"))).setPreviousPageButton()); map.put(50, new ItemBuilder(this, CustomStack.getInstance("_iainternal:icon_next_orange") - .getItemStack(), itemMeta -> itemMeta.displayName(Component.text("§aPage suivante"))).setNextPageButton()); + .getItemStack(), itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.next_page"))).setNextPageButton()); return map; } @Override public @NotNull Component getName() { - return Component.text("Menu de liste des villes"); + return TranslationManager.translation("feature.city.menus.list.name"); } @Override @@ -164,10 +195,10 @@ public void onClose(InventoryCloseEvent event) { private List generateSortLoreText() { return List.of( SORT_HEADER, - formatSortOption(SortType.NAME, "Nom"), - formatSortOption(SortType.WEALTH, "Richesses"), - formatSortOption(SortType.POPULATION, "Population"), - formatSortOption(SortType.PEACE_WAR, "Paix/Guerre") + formatSortOption(SortType.NAME, TranslationManager.translation("feature.city.menus.list.sort.name")), + formatSortOption(SortType.WEALTH, TranslationManager.translation("feature.city.menus.list.sort.wealth")), + formatSortOption(SortType.POPULATION, TranslationManager.translation("feature.city.menus.list.sort.population")), + formatSortOption(SortType.PEACE_WAR, TranslationManager.translation("feature.city.menus.list.sort.peace_war")) ); } @@ -178,8 +209,9 @@ private List generateSortLoreText() { * @param label The label for the sorting option. * @return A formatted string representing the sorting option. */ - private Component formatSortOption(SortType type, String label) { - return Component.text((sortType == type ? SELECTED_PREFIX : UNSELECTED_PREFIX) + label); + private Component formatSortOption(SortType type, Component label) { + Component prefix = sortType == type ? SELECTED_PREFIX : UNSELECTED_PREFIX; + return prefix.append(label); } /** diff --git a/src/main/java/fr/openmc/core/features/city/menu/list/CityPlayerListMenu.java b/src/main/java/fr/openmc/core/features/city/menu/list/CityPlayerListMenu.java index ec059dc23..d977ac9a2 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/list/CityPlayerListMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/list/CityPlayerListMenu.java @@ -8,6 +8,7 @@ import fr.openmc.core.registry.items.CustomItemRegistry; import fr.openmc.core.utils.SkullUtils; import fr.openmc.core.utils.cache.CacheOfflinePlayer; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Material; @@ -76,20 +77,18 @@ public List getTakableSlot() { public Map getButtons() { Map map = new HashMap<>(); map.put(45, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.itemName(Component.text("§aRetour")); - itemMeta.lore(List.of( - Component.text("§e§lCLIQUEZ ICI POUR RETOURNER") - )); + itemMeta.itemName(TranslationManager.translation("messages.menus.back")); + itemMeta.lore(TranslationManager.translationLore("feature.city.menus.list.members.back_lore")); }, true)); - map.put(49, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_cancel")).getBest(), itemMeta -> itemMeta.displayName(Component.text("§7Fermer"))).setCloseButton()); - map.put(48, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_back_orange")).getBest(), itemMeta -> itemMeta.displayName(Component.text("§cPage précédente"))).setPreviousPageButton()); - map.put(50, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_next_orange")).getBest(), itemMeta -> itemMeta.displayName(Component.text("§aPage suivante"))).setNextPageButton()); + map.put(49, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_cancel")).getBest(), itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.close"))).setCloseButton()); + map.put(48, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_back_orange")).getBest(), itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.previous_page"))).setPreviousPageButton()); + map.put(50, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_next_orange")).getBest(), itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.next_page"))).setNextPageButton()); return map; } @Override public @NotNull Component getName() { - return Component.text("Menu du détail des membres de " + city.getName()); + return TranslationManager.translation("feature.city.menus.list.members.name", Component.text(city.getName())); } @Override diff --git a/src/main/java/fr/openmc/core/features/city/menu/main/CityMenu.java b/src/main/java/fr/openmc/core/features/city/menu/main/CityMenu.java index d47fc2d63..1f7c2066d 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/CityMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/CityMenu.java @@ -6,6 +6,7 @@ import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityManager; import fr.openmc.core.features.city.menu.main.buttons.*; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; @@ -37,7 +38,7 @@ public CityMenu(Player owner) { @Override public @NotNull Component getName() { - return Component.text("Menu des Villes"); + return TranslationManager.translation("feature.city.menus.main.name"); } @Override diff --git a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/BankButton.java b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/BankButton.java index 57a993018..27c1f3459 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/BankButton.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/BankButton.java @@ -13,6 +13,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; @@ -27,7 +28,7 @@ public static void init(Menu menu, Map contents, City city contents, slots, new ItemBuilder(menu, Material.PAPER, itemMeta -> { - itemMeta.itemName(Component.text("§6La banque")); + itemMeta.itemName(TranslationManager.translation("feature.city.menus.main.bank.title")); itemMeta.lore(getDynamicLore(city)); itemMeta.setItemModel(NamespacedKey.minecraft("air")); }).setOnClick(inventoryClickEvent -> { @@ -47,18 +48,11 @@ public static void init(Menu menu, Map contents, City city private static List getDynamicLore(City city) { List lore; if (FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.CITY_BANK)) { - lore = List.of( - Component.text("§7Stocker votre argent et celle de votre ville"), - Component.text("§7Contribuer au développement de votre ville"), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR ACCEDER AUX COMPTES") - ); + lore = TranslationManager.translationLore("feature.city.menus.main.bank.lore.unlocked"); } else { - lore = List.of( - Component.text("§7Stocker votre argent et celle de votre ville"), - Component.text("§7Contribuer au développement de votre ville"), - Component.empty(), - Component.text("§cVous devez être Niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.CITY_BANK) + " pour débloquer ceci") + lore = TranslationManager.translationLore( + "feature.city.menus.main.bank.lore.locked", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.CITY_BANK)).color(NamedTextColor.RED) ); } return lore; diff --git a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ChestButton.java b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ChestButton.java index a0dc77a65..9aff4d3ff 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ChestButton.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ChestButton.java @@ -9,8 +9,10 @@ import fr.openmc.core.features.city.conditions.CityChestConditions; import fr.openmc.core.features.city.menu.CityChestMenu; import fr.openmc.core.features.city.sub.milestone.rewards.FeaturesRewards; +import fr.openmc.core.utils.cache.PlayerNameCache; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; @@ -25,7 +27,7 @@ public static void init(Menu menu, Map contents, City city contents, slots, new ItemBuilder(menu, Material.PAPER, itemMeta -> { - itemMeta.itemName(Component.text("§aLe coffre de la ville")); + itemMeta.itemName(TranslationManager.translation("feature.city.menus.main.chest.title")); itemMeta.lore(getDynamicLore(city, player)); itemMeta.setItemModel(NamespacedKey.minecraft("air")); }).setOnClick(inventoryClickEvent -> { @@ -42,33 +44,22 @@ private static List getDynamicLore(City city, Player player) { boolean hasPermissionChest = city.hasPermission(player.getUniqueId(), CityPermission.ACCESS_CITY_CHEST); List lore; if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.CHEST)) { - lore = List.of( - Component.text("§7Acceder au coffre de votre ville pour"), - Component.text("§7stocker des items en commun"), - Component.empty(), - Component.text("§cVous devez être niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.CHEST) + " pour débloquer ceci") + lore = TranslationManager.translationLore( + "feature.city.menus.main.chest.lore.locked", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.CHEST)).color(NamedTextColor.RED) ); } else { if (hasPermissionChest) { if (city.getChestWatcher() != null) { - lore = List.of( - Component.text("§7Acceder au coffre de votre ville pour"), - Component.text("§7stocker des items en commun"), - Component.empty(), - Component.text("§7Ce coffre est déjà ouvert par §c" + Bukkit.getPlayer(city.getChestWatcher()).getName()) + lore = TranslationManager.translationLore( + "feature.city.menus.main.chest.lore.opened", + Component.text(PlayerNameCache.getName(city.getChestWatcher())).color(NamedTextColor.RED) ); } else { - lore = List.of( - Component.text("§7Acceder au coffre de votre ville pour"), - Component.text("§7stocker des items en commun"), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR ACCEDER AU COFFRE") - ); + lore = TranslationManager.translationLore("feature.city.menus.main.chest.lore.click"); } } else { - lore = List.of( - Component.text("§7Vous n'avez pas le §cdroit de visionner le coffre !") - ); + lore = TranslationManager.translationLore("feature.city.menus.main.chest.lore.no_permission"); } } return lore; diff --git a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/LeaveButton.java b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/LeaveButton.java index 2165e06f1..628557ee8 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/LeaveButton.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/LeaveButton.java @@ -9,7 +9,9 @@ import fr.openmc.core.features.city.CityPermission; import fr.openmc.core.features.city.actions.CityLeaveAction; import fr.openmc.core.features.city.conditions.CityLeaveCondition; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; @@ -28,7 +30,7 @@ public static void init(Menu menu, Map contents, City city contents, slots, new ItemBuilder(menu, Material.PAPER, itemMeta -> { - itemMeta.itemName(Component.text("§cPartir de la ville")); + itemMeta.itemName(TranslationManager.translation("feature.city.menus.main.leave.title")); itemMeta.lore(getDynamicLore(city)); itemMeta.setItemModel(NamespacedKey.minecraft("air")); }).setOnClick(inventoryClickEvent -> { @@ -43,8 +45,8 @@ public static void init(Menu menu, Map contents, City city player.closeInventory(); }, player::closeInventory, - List.of(Component.text("§7Voulez vous vraiment partir de " + city.getName() + " ?")), - List.of(Component.text("§7Rester dans la ville " + city.getName())) + List.of(TranslationManager.translation("feature.city.menus.main.leave.confirm.accept", Component.text(city.getName()).color(NamedTextColor.GRAY))), + List.of(TranslationManager.translation("feature.city.menus.main.leave.confirm.deny", Component.text(city.getName()).color(NamedTextColor.GRAY))) ).open(); }) ); @@ -53,14 +55,14 @@ public static void init(Menu menu, Map contents, City city private static List getDynamicLore(City city) { List lore; if (!hasPermissionOwner) { - lore = List.of( - Component.text("§7Vous allez §cquitter §7" + city.getName()), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR PARTIR") + lore = TranslationManager.translationLore( + "feature.city.menus.main.leave.lore.leave", + Component.text(city.getName()).color(NamedTextColor.GRAY) ); } else { - lore = List.of( - Component.text("§7Vous ne pouvez pas §cquitter §7" + city.getName() + " car vous êtes §cpropriétaire") + lore = TranslationManager.translationLore( + "feature.city.menus.main.leave.lore.owner_cant", + Component.text(city.getName()).color(NamedTextColor.GRAY) ); } return lore; diff --git a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ManageButton.java b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ManageButton.java index 9d82a59d8..3c4e46ea1 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ManageButton.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ManageButton.java @@ -7,7 +7,7 @@ import fr.openmc.core.features.city.CityPermission; import fr.openmc.core.features.city.menu.CityModifyMenu; import fr.openmc.core.features.city.sub.milestone.rewards.MemberLimitRewards; -import fr.openmc.core.utils.cache.CacheOfflinePlayer; +import fr.openmc.core.utils.cache.PlayerNameCache; import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; @@ -21,6 +21,7 @@ import java.util.List; import java.util.Map; +import java.util.UUID; public class ManageButton { public static void init(Menu menu, Map contents, City city, int slot) { @@ -28,7 +29,10 @@ public static void init(Menu menu, Map contents, City city boolean hasPermissionOwner = city.hasPermission(player.getUniqueId(), CityPermission.OWNER); contents.put(slot, new ItemBuilder(menu, Material.PAPER, itemMeta -> { - itemMeta.itemName(Component.text("§d" + city.getName())); + itemMeta.itemName(TranslationManager.translation( + "feature.city.menus.main.manage.title", + Component.text(city.getName()).color(NamedTextColor.LIGHT_PURPLE) + )); itemMeta.lore(getDynamicLore(city, player)); itemMeta.setItemModel(NamespacedKey.minecraft("air")); }).setOnClick(inventoryClickEvent -> { @@ -48,23 +52,28 @@ private static List getDynamicLore(City city, Player player) { boolean hasPermissionRenameCity = city.hasPermission(player.getUniqueId(), CityPermission.RENAME); boolean hasPermissionOwner = city.hasPermission(player.getUniqueId(), CityPermission.OWNER); - String mayorName = (city.getMayor() != null && city.getMayor().getName() != null) ? city.getMayor().getName() : "§7Aucun"; + String mayorName = (city.getMayor() != null && city.getMayor().getName() != null) + ? city.getMayor().getName() + : TranslationManager.translationString("messages.menus.none"); NamedTextColor mayorColor = (city.getMayor() != null && city.getMayor().getName() != null) ? city.getMayor().getMayorColor() : NamedTextColor.DARK_GRAY; + UUID ownerUUID = city.getPlayerWithPermission(CityPermission.OWNER); List lore; if (hasPermissionRenameCity || hasPermissionOwner) { - lore = List.of( - Component.text("§7Propriétaire de la ville : " + CacheOfflinePlayer.getOfflinePlayer(city.getPlayerWithPermission(CityPermission.OWNER)).getName()), - Component.text("§7Maire de la ville §7: ").append(Component.text(mayorName).color(mayorColor).decoration(TextDecoration.ITALIC, false)), - Component.text("§7Membre(s) : §d" + city.getMembers().size() + "§7/§d" + MemberLimitRewards.getMemberLimit(city.getLevel())), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR MODIFIER LA VILLE") + lore = TranslationManager.translationLore( + "feature.city.menus.main.manage.lore.edit", + PlayerNameCache.name(ownerUUID).color(NamedTextColor.GRAY), + Component.text(mayorName).color(mayorColor).decoration(TextDecoration.ITALIC, false), + Component.text(city.getMembers().size()).color(NamedTextColor.LIGHT_PURPLE), + Component.text(MemberLimitRewards.getMemberLimit(city.getLevel())).color(NamedTextColor.LIGHT_PURPLE) ); } else { - lore = List.of( - Component.text("§7Propriétaire de la ville : " + CacheOfflinePlayer.getOfflinePlayer(city.getPlayerWithPermission(CityPermission.OWNER)).getName()), - Component.text("§dMaire de la ville §7: ").append(Component.text(mayorName).color(mayorColor).decoration(TextDecoration.ITALIC, false)), - Component.text("§7Membre(s) : §d" + city.getMembers().size() + "§7/§d" + MemberLimitRewards.getMemberLimit(city.getLevel())) + lore = TranslationManager.translationLore( + "feature.city.menus.main.manage.lore.view", + PlayerNameCache.name(ownerUUID).color(NamedTextColor.GRAY), + Component.text(mayorName).color(mayorColor).decoration(TextDecoration.ITALIC, false), + Component.text(city.getMembers().size()).color(NamedTextColor.LIGHT_PURPLE), + Component.text(MemberLimitRewards.getMemberLimit(city.getLevel())).color(NamedTextColor.LIGHT_PURPLE) ); } return lore; diff --git a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MapButton.java b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MapButton.java index 31f031759..564be9f30 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MapButton.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MapButton.java @@ -9,7 +9,9 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; @@ -28,12 +30,12 @@ public static void init(Menu menu, Map contents, City city contents, slots, new ItemBuilder(menu, Material.PAPER, itemMeta -> { - itemMeta.itemName(Component.text("§aTaille de votre ville")); + itemMeta.itemName(TranslationManager.translation("feature.city.menus.main.map.title")); itemMeta.lore(getDynamicLore(city)); itemMeta.setItemModel(NamespacedKey.minecraft("air")); }).setOnClick(inventoryClickEvent -> { if (!hasPermissionChunkSee) { - MessagesManager.sendMessage(player, Component.text("Vous n'avez pas les permissions de voir les claims"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.menus.main.map.no_permission"), Prefix.CITY, MessageType.ERROR, false); return; } @@ -45,14 +47,14 @@ public static void init(Menu menu, Map contents, City city private static List getDynamicLore(City city) { List lore; if (hasPermissionChunkSee) { - lore = List.of( - Component.text("§7Votre ville a une superficie de §a" + city.getChunks().size()), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR ACCEDER A LA CARTE") + lore = TranslationManager.translationLore( + "feature.city.menus.main.map.lore.access", + Component.text(city.getChunks().size()).color(NamedTextColor.GREEN) ); } else { - lore = List.of( - Component.text("§7Votre ville a une superficie de §a" + city.getChunks().size()) + lore = TranslationManager.translationLore( + "feature.city.menus.main.map.lore.view", + Component.text(city.getChunks().size()).color(NamedTextColor.GREEN) ); } return lore; diff --git a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MascotsButton.java b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MascotsButton.java index 17e914db1..7fd19852b 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MascotsButton.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MascotsButton.java @@ -10,7 +10,9 @@ import fr.openmc.core.features.city.sub.mascots.menu.MascotsDeadMenu; import fr.openmc.core.features.city.sub.mascots.models.Mascot; import fr.openmc.core.utils.DateUtils; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.attribute.Attribute; @@ -46,7 +48,7 @@ public static void init(Menu menu, Map contents, City city private static Supplier getItemSupplier(Menu menu, City city, Mascot mascot, LivingEntity mob, Player player) { return () -> new ItemBuilder(menu, Material.PAPER, itemMeta -> { - itemMeta.itemName(Component.text("§cVotre Mascotte")); + itemMeta.itemName(TranslationManager.translation("feature.city.menus.main.mascots.title")); itemMeta.lore(getDynamicLore(city, mascot, mob)); itemMeta.setItemModel(NamespacedKey.minecraft("air")); }).setOnClick(inventoryClickEvent -> { @@ -75,32 +77,26 @@ private static List getDynamicLore(City city, Mascot mascot, LivingEn } if (!mascot.isAlive()) { - lore = List.of( - Component.text("§7Vie : §c" + Math.floor(mob.getHealth()) + "§4/§c" + maxHealth), - Component.text("§7Statut : §cMorte"), - Component.text("§7Réapparition dans : " + DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(city.getUniqueId(), "city:immunity"))), - Component.text("§7Niveau : §c" + mascot.getLevel()), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR INTERAGIR AVEC") + lore = TranslationManager.translationLore( + "feature.city.menus.main.mascots.lore.dead", + Component.text(Math.floor(mob.getHealth())).color(NamedTextColor.RED), + Component.text(maxHealth).color(NamedTextColor.RED), + Component.text(DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(city.getUniqueId(), "city:immunity"))), + Component.text(mascot.getLevel()).color(NamedTextColor.RED) ); } else { - lore = List.of( - Component.text("§7Vie : §c" + Math.floor(mob.getHealth()) + "§4/§c" + maxHealth), - Component.text("§7Statut : §aEn Vie"), - Component.text("§7Niveau : §c" + mascot.getLevel()), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR INTERAGIR AVEC") + lore = TranslationManager.translationLore( + "feature.city.menus.main.mascots.lore.alive", + Component.text(Math.floor(mob.getHealth())).color(NamedTextColor.RED), + Component.text(maxHealth).color(NamedTextColor.RED), + Component.text(mascot.getLevel()).color(NamedTextColor.RED) ); } } else { - lore = List.of( - Component.text("§cMascotte non trouvée") - ); + lore = TranslationManager.translationLore("feature.city.menus.main.mascots.lore.not_found"); } } else { - lore = List.of( - Component.text("§cMascotte inexistante (contactez le staff)") - ); + lore = TranslationManager.translationLore("feature.city.menus.main.mascots.lore.missing"); } return lore; diff --git a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MayorButton.java b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MayorButton.java index f2564aa97..dcbf04830 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MayorButton.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MayorButton.java @@ -11,6 +11,7 @@ import fr.openmc.core.features.city.sub.mayor.managers.MayorManager; import fr.openmc.core.features.city.sub.milestone.rewards.FeaturesRewards; import fr.openmc.core.utils.DateUtils; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; @@ -36,7 +37,7 @@ public static void init(Menu menu, City city, int[] slots) { private static Supplier getItemSupplier(Menu menu, City city, Player player) { return () -> new ItemBuilder(menu, Material.PAPER, itemMeta -> { - itemMeta.displayName(Component.text("§9Les élections")); + itemMeta.displayName(TranslationManager.translation("feature.city.menus.main.mayor.title")); itemMeta.lore(getDynamicLore(city, player)); itemMeta.setItemModel(NamespacedKey.minecraft("air")); }).setOnClick(inventoryClickEvent -> MayorCommandAction.launchInteractionMenu(player)); @@ -44,95 +45,73 @@ private static Supplier getItemSupplier(Menu menu, City city, Playe private static List getDynamicLore(City city, Player player) { boolean hasPermissionOwner = city.hasPermission(player.getUniqueId(), CityPermission.OWNER); - String mayorName = (city.getMayor() != null && city.getMayor().getName() != null) ? city.getMayor().getName() : "§7Aucun"; + String mayorName = (city.getMayor() != null && city.getMayor().getName() != null) + ? city.getMayor().getName() + : TranslationManager.translationString("messages.menus.none"); NamedTextColor mayorColor = (city.getMayor() != null && city.getMayor().getName() != null) ? city.getMayor().getMayorColor() : NamedTextColor.DARK_GRAY; + Component mayorComponent = Component.text(mayorName).color(mayorColor).decoration(TextDecoration.ITALIC, false); List lore; if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.MAYOR)) { lore = switch (MayorManager.phaseMayor) { - case 2 -> List.of( - Component.text("§7En ce moment, les maires sont tous appliqués dans les villes !"), - Component.text("§7Sauf la votre !"), - Component.empty(), - Component.text("§cVous devez être niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.MAYOR) + " pour débloquer ceci") + case 2 -> TranslationManager.translationLore( + "feature.city.menus.main.mayor.locked.phase2", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.MAYOR)).color(NamedTextColor.RED) ); - case 1 -> List.of( - Component.text("§7Les élections sont actuellement §9ouverte"), - Component.text("§cFermeture dans " + DateUtils.getTimeUntilNextDay(PHASE_2_DAY)), - Component.text("§7Mais vous ne pouvez pas y accéder !"), - Component.empty(), - Component.text("§cVous devez être niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.MAYOR) + " pour débloquer ceci") + case 1 -> TranslationManager.translationLore( + "feature.city.menus.main.mayor.locked.phase1", + Component.text(DateUtils.getTimeUntilNextDay(PHASE_2_DAY)).color(NamedTextColor.RED), + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.MAYOR)).color(NamedTextColor.RED) ); - default -> List.of( - Component.text("§cErreur"), - Component.text("§cVous devez être niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.MAYOR) + " pour débloquer ceci") + default -> TranslationManager.translationLore( + "feature.city.menus.main.mayor.locked.error", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.MAYOR)).color(NamedTextColor.RED) ); }; } else { if (city.getElectionType() == ElectionType.ELECTION) { lore = switch (MayorManager.phaseMayor) { - case 2 -> List.of( - Component.text("§7Votre ville a un §9maire !"), - Component.text("§7Maire : ").append(Component.text(mayorName)).color(mayorColor).decoration(TextDecoration.ITALIC, false), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR ACCEDER AUX INFORMATIONS") + case 2 -> TranslationManager.translationLore( + "feature.city.menus.main.mayor.election.phase2", + mayorComponent ); - case 1 -> List.of( - Component.text("§7Les élections sont actuellement §9ouverte"), - Component.empty(), - Component.text("§cFermeture dans " + DateUtils.getTimeUntilNextDay(PHASE_2_DAY)), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR ACCEDER AUX ELECTIONS") - ); - default -> List.of( - Component.text("§cErreur") + case 1 -> TranslationManager.translationLore( + "feature.city.menus.main.mayor.election.phase1", + Component.text(DateUtils.getTimeUntilNextDay(PHASE_2_DAY)).color(NamedTextColor.RED) ); + default -> TranslationManager.translationLore("feature.city.menus.main.mayor.election.error"); }; } else { switch (MayorManager.phaseMayor) { - case 2 -> lore = List.of( - Component.text("§7Votre ville a un §9maire !"), - Component.text("§7Maire §7: ").append(Component.text(mayorName)).color(mayorColor).decoration(TextDecoration.ITALIC, false), - Component.text("§cOuverture des élections dans " + DateUtils.getTimeUntilNextDay(PHASE_1_DAY)), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR ACCEDER AUX INFORMATIONS") + case 2 -> lore = TranslationManager.translationLore( + "feature.city.menus.main.mayor.owner.phase2", + mayorComponent, + Component.text(DateUtils.getTimeUntilNextDay(PHASE_1_DAY)).color(NamedTextColor.RED) ); case 1 -> { if (hasPermissionOwner) { if (city.hasMayor()) { - lore = List.of( - Component.text("§7Les élections sont §9désactivées"), - Component.text("§cIl vous faut au moins §9" + MayorManager.MEMBER_REQUEST_ELECTION + " §cmembres"), - Component.empty(), - Component.text("§7Vous avez déjà choisis vos §3réformes §7!"), - Component.text("§7Cependant vous pouvez changer votre couleur !"), - Component.empty(), - Component.text("§cFermeture dans " + DateUtils.getTimeUntilNextDay(PHASE_2_DAY)) + lore = TranslationManager.translationLore( + "feature.city.menus.main.mayor.owner.phase1.has_mayor", + Component.text(MayorManager.MEMBER_REQUEST_ELECTION).color(NamedTextColor.BLUE), + Component.text(DateUtils.getTimeUntilNextDay(PHASE_2_DAY)).color(NamedTextColor.RED) ); } else { - lore = List.of( - Component.text("§7Les élections sont §9désactivées"), - Component.text("§cIl vous faut au moins §9" + MayorManager.MEMBER_REQUEST_ELECTION + " §cmembres"), - Component.empty(), - Component.text("§7Seul le propriétaire peut choisir §3les réformes §7qu'il veut."), - Component.empty(), - Component.text("§cFermeture dans " + DateUtils.getTimeUntilNextDay(PHASE_2_DAY)), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR CHOISIR VOS REFORMES") + lore = TranslationManager.translationLore( + "feature.city.menus.main.mayor.owner.phase1.no_mayor", + Component.text(MayorManager.MEMBER_REQUEST_ELECTION).color(NamedTextColor.BLUE), + Component.text(DateUtils.getTimeUntilNextDay(PHASE_2_DAY)).color(NamedTextColor.RED) ); } } else { - lore = List.of( - Component.text("§7Les élections sont §9désactivées"), - Component.text("§cIl vous faut au moins §9" + MayorManager.MEMBER_REQUEST_ELECTION + " §cmembres"), - Component.empty(), - Component.text("§7Seul le propriétaire peut choisir §3les réformes §7qu'il veut."), - Component.empty(), - Component.text("§cFermeture dans " + DateUtils.getTimeUntilNextDay(PHASE_2_DAY)) + lore = TranslationManager.translationLore( + "feature.city.menus.main.mayor.owner.phase1.viewer", + Component.text(MayorManager.MEMBER_REQUEST_ELECTION).color(NamedTextColor.BLUE), + Component.text(DateUtils.getTimeUntilNextDay(PHASE_2_DAY)).color(NamedTextColor.RED) ); } } - default -> lore = List.of(Component.text("§cErreur")); + default -> lore = TranslationManager.translationLore("feature.city.menus.main.mayor.owner.error"); } } } diff --git a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MembersButton.java b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MembersButton.java index b2b18a88a..1149a9a0b 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MembersButton.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MembersButton.java @@ -5,12 +5,13 @@ import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.menu.playerlist.CityPlayerListMenu; import fr.openmc.core.features.city.sub.milestone.rewards.MemberLimitRewards; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; -import java.util.List; import java.util.Map; public class MembersButton { @@ -18,12 +19,11 @@ public static void init(Menu menu, Map contents, City city Player player = menu.getOwner(); contents.put(slot, new ItemBuilder(menu, Material.PAPER, itemMeta -> { - itemMeta.displayName(Component.text("§dListe des Membres")); - itemMeta.lore(List.of( - Component.text("§7Il y a actuellement §d" + city.getMembers().size() + "§7 membre(s) dans votre ville"), - Component.text("§7Vous avez une limite de membre de §d" + MemberLimitRewards.getMemberLimit(city.getLevel()) + "§7 membre(s)"), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR VOIR LA LISTE DES JOUEURS") + itemMeta.displayName(TranslationManager.translation("feature.city.menus.main.members.title")); + itemMeta.lore(TranslationManager.translationLore( + "feature.city.menus.main.members.lore", + Component.text(city.getMembers().size()).color(NamedTextColor.LIGHT_PURPLE), + Component.text(MemberLimitRewards.getMemberLimit(city.getLevel())).color(NamedTextColor.LIGHT_PURPLE) )); itemMeta.setItemModel(NamespacedKey.minecraft("air")); }).setOnClick(inventoryClickEvent -> diff --git a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MilestoneButton.java b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MilestoneButton.java index bd9603b03..cb8c35c44 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MilestoneButton.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MilestoneButton.java @@ -11,6 +11,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; @@ -26,7 +27,7 @@ public static void init(Menu menu, Map contents, City city contents, slots, new ItemBuilder(menu, Material.PAPER, itemMeta -> { - itemMeta.itemName(Component.text("§3Milestone de votre ville")); + itemMeta.itemName(TranslationManager.translation("feature.city.menus.main.milestone.title")); itemMeta.lore(getDynamicLore(city)); itemMeta.setItemModel(NamespacedKey.minecraft("air")); }).setOnClick(inventoryClickEvent -> { @@ -42,13 +43,9 @@ public static void init(Menu menu, Map contents, City city } private static List getDynamicLore(City city) { - return List.of( - Component.text("§8§oAccéder à la route de progression de la ville !"), - Component.text("§8§oImportant pour débloquer les différentes features des villes !"), - Component.empty(), - Component.text("§7Level : §3" + city.getLevel()), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR ACCEDER AU MILESTONE") + return TranslationManager.translationLore( + "feature.city.menus.main.milestone.lore", + Component.text(city.getLevel()).color(NamedTextColor.DARK_AQUA) ); } } diff --git a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/NotationsButton.java b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/NotationsButton.java index 6b21fa273..387366f2c 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/NotationsButton.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/NotationsButton.java @@ -10,7 +10,9 @@ import fr.openmc.core.features.city.sub.notation.models.CityNotation; import fr.openmc.core.features.economy.EconomyManager; import fr.openmc.core.utils.DateUtils; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; @@ -27,7 +29,7 @@ public static void init(Menu menu, Map contents, City city contents, slots, new ItemBuilder(menu, Material.PAPER, itemMeta -> { - itemMeta.itemName(Component.text("§3La Notation de votre ville")); + itemMeta.itemName(TranslationManager.translation("feature.city.menus.main.notation.title")); itemMeta.lore(getDynamicLore(city, notation)); itemMeta.setItemModel(NamespacedKey.minecraft("air")); }).setOnClick(inventoryClickEvent -> { @@ -41,20 +43,20 @@ public static void init(Menu menu, Map contents, City city private static List getDynamicLore(City city, CityNotation notation) { List lore; if (notation != null) { - lore = List.of( - Component.text("§7Notation de la ville : §9" + Math.floor(notation.getTotalNote()) + "§7/§9" + NotationNote.getMaxTotalNote()), - Component.text("§7Argent remporté : §6" + EconomyManager.getFormattedSimplifiedNumber(notation.getMoney()) + EconomyManager.getEconomyIcon()), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR VOIR LA NOTATION") + lore = TranslationManager.translationLore( + "feature.city.menus.main.notation.lore", + Component.text(Math.floor(notation.getTotalNote())).color(NamedTextColor.BLUE), + Component.text(NotationNote.getMaxTotalNote()).color(NamedTextColor.BLUE), + Component.text(EconomyManager.getFormattedSimplifiedNumber(notation.getMoney())).color(NamedTextColor.GOLD), + Component.text(EconomyManager.getEconomyIcon()).color(NamedTextColor.GOLD) ); } else { if (FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.NOTATION)) { - lore = List.of( - Component.text("§cVous n'avez pas de notation") - ); + lore = TranslationManager.translationLore("feature.city.menus.main.notation.lore.none"); } else { - lore = List.of( - Component.text("§cVous devez être niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.NOTATION) + " pour débloquer ceci") + lore = TranslationManager.translationLore( + "feature.city.menus.main.notation.lore.locked", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.NOTATION)).color(NamedTextColor.RED) ); } } diff --git a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/RankButton.java b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/RankButton.java index 976b8f390..2daee7f6b 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/RankButton.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/RankButton.java @@ -9,7 +9,9 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; @@ -25,12 +27,12 @@ public static void init(Menu menu, Map contents, City city contents, slots, new ItemBuilder(menu, Material.PAPER, itemMeta -> { - itemMeta.displayName(Component.text("§6Grades de la Ville")); + itemMeta.displayName(TranslationManager.translation("feature.city.menus.main.ranks.title")); itemMeta.lore(getDynamicLore(city, player)); itemMeta.setItemModel(NamespacedKey.minecraft("air")); }).setOnClick(inventoryClickEvent -> { if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.RANK)) { - MessagesManager.sendMessage(player, Component.text("Vous n'avez pas débloqué cette feature ! Veuillez améliorer votre ville au niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.RANK) + " !"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("messages.city.havent_unlocked_feature", Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.RANK))), Prefix.CITY, MessageType.ERROR, false); return; } @@ -42,17 +44,14 @@ public static void init(Menu menu, Map contents, City city private static List getDynamicLore(City city, Player player) { List lore; if (FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.RANK)) { - lore = List.of( - Component.text("§7Gérer les grades de votre ville"), - Component.text("§7Votre Grade : §d" + city.getRankName(player.getUniqueId())), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR ACCEDER AUX GRADES") + lore = TranslationManager.translationLore( + "feature.city.menus.main.ranks.lore.unlocked", + Component.text(city.getRankName(player.getUniqueId())).color(NamedTextColor.LIGHT_PURPLE) ); } else { - lore = List.of( - Component.text("§7Gérer les grades de votre ville"), - Component.empty(), - Component.text("§cVous devez etre Niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.RANK) + " pour débloquer ceci") + lore = TranslationManager.translationLore( + "feature.city.menus.main.ranks.lore.locked", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.RANK)).color(NamedTextColor.RED) ); } return lore; diff --git a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/TypeButton.java b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/TypeButton.java index 9ae693b8b..7ad3ab27a 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/TypeButton.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/TypeButton.java @@ -10,6 +10,7 @@ import fr.openmc.core.features.city.CityType; import fr.openmc.core.features.city.menu.CityTypeMenu; import fr.openmc.core.utils.DateUtils; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.bukkit.Material; @@ -40,7 +41,7 @@ public static void init(Menu menu, Map contents, City city private static Supplier getItemSupplier(Menu menu, City city, Player player) { return () -> new ItemBuilder(menu, Material.PAPER, meta -> { - meta.itemName(Component.text("§5Le statut de votre ville")); + meta.itemName(TranslationManager.translation("feature.city.menus.main.type.title")); meta.lore(getDynamicLore(city, player)); meta.setItemModel(NamespacedKey.minecraft("air")); }).setOnClick(inventoryClickEvent -> { @@ -52,24 +53,28 @@ private static Supplier getItemSupplier(Menu menu, City city, Playe private static List getDynamicLore(City city, Player player) { boolean hasPermissionChangeType = city.hasPermission(player.getUniqueId(), CityPermission.CHANGE_TYPE); + boolean showWarCommand = city.getType().equals(CityType.WAR) && city.hasPermission(player.getUniqueId(), CityPermission.LAUNCH_WAR); + boolean hasCooldown = !DynamicCooldownManager.isReady(city.getUniqueId(), "city:type"); List lore = new ArrayList<>(); - lore.add(Component.text("§7Votre ville est en §5" + PlainTextComponentSerializer.plainText().serialize(city.getType().getDisplayName()).toLowerCase(Locale.ROOT))); + lore.add(TranslationManager.translation( + "feature.city.menus.main.type.lore.status", + Component.text(PlainTextComponentSerializer.plainText().serialize(city.getType().getDisplayName()).toLowerCase(Locale.ROOT)) + )); - if (city.getType().equals(CityType.WAR) && city.hasPermission(player.getUniqueId(), CityPermission.LAUNCH_WAR)) { - lore.add(Component.empty()); - lore.add(Component.text("§7Vous pouvez lancer une guerre avec §c/war")); + if (showWarCommand) { + lore.add(TranslationManager.translation("feature.city.menus.main.type.lore.war_command")); } - if (!DynamicCooldownManager.isReady(city.getUniqueId(), "city:type")) { - lore.add(Component.empty()); - lore.add(Component.text("§cCooldown §7: " + - DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(city.getUniqueId(), "city:type")))); + if (hasCooldown) { + lore.add(TranslationManager.translation( + "feature.city.menus.main.type.lore.cooldown", + Component.text(DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(city.getUniqueId(), "city:type"))) + )); } if (hasPermissionChangeType) { - lore.add(Component.empty()); - lore.add(Component.text("§e§lCLIQUEZ ICI POUR LE CHANGER")); + lore.add(TranslationManager.translation("feature.city.menus.main.type.lore.click")); } return lore; diff --git a/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerGestionMenu.java b/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerGestionMenu.java index c03c36f07..bfa180465 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerGestionMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerGestionMenu.java @@ -11,8 +11,10 @@ import fr.openmc.core.features.city.conditions.CityKickCondition; import fr.openmc.core.features.city.menu.CityPermsMenu; import fr.openmc.core.utils.SkullUtils; +import fr.openmc.core.utils.cache.PlayerNameCache; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; @@ -35,7 +37,7 @@ public CityPlayerGestionMenu(Player owner, OfflinePlayer player) { @Override public @NotNull Component getName() { - return Component.text("Menu des villes - Modifier un joueur"); + return TranslationManager.translation("feature.city.menus.members.manage.name"); } @Override @@ -68,18 +70,13 @@ public void onInventoryClick(InventoryClickEvent click) { if (hasPermissionKick) { if (player.getUniqueId().equals(playerTarget.getUniqueId())) { - loreKick = List.of( - Component.text("§cVous pouvez pas vous expulser") - ); + loreKick = TranslationManager.translationLore("feature.city.menus.members.manage.kick.self"); } else if (city.hasPermission(playerTarget.getUniqueId(), CityPermission.OWNER)) { - loreKick = List.of( - Component.text("§cVous pouvez pas expulser le propriétaire") - ); + loreKick = TranslationManager.translationLore("feature.city.menus.members.manage.kick.owner"); } else { - loreKick = List.of( - Component.text("§7Vous pouvez expulser" + playerTarget.getName() + "§7de votre §dville§7."), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR L'EXPLUSER") + loreKick = TranslationManager.translationLore( + "feature.city.menus.members.manage.kick.info", + PlayerNameCache.name(playerTarget.getUniqueId()).color(NamedTextColor.GRAY) ); } } else { @@ -89,7 +86,7 @@ public void onInventoryClick(InventoryClickEvent click) { } inventory.put(11, new ItemBuilder(this, Material.OAK_DOOR, itemMeta -> { - itemMeta.itemName(Component.text("§cExpulser " + playerTarget.getName())); + itemMeta.itemName(TranslationManager.translation("feature.city.menus.members.manage.kick.title", Component.text(playerTarget.getName()).color(NamedTextColor.RED))); itemMeta.lore(loreKick); }).setOnClick(inventoryClickEvent -> { if (!CityKickCondition.canCityKickPlayer(city, player, playerTarget)) @@ -102,28 +99,23 @@ public void onInventoryClick(InventoryClickEvent click) { CityKickAction.startKick(player, playerTarget); }, player::closeInventory, - List.of(Component.text("§7Voulez vous vraiment expulser " + playerTarget.getName() + " ?")), - List.of(Component.text("§7Ne pas expulser " + playerTarget.getName()))); + List.of(TranslationManager.translation("feature.city.menus.members.kick.confirm", Component.text(playerTarget.getName()))), + List.of(TranslationManager.translation("feature.city.menus.members.kick.deny", Component.text(playerTarget.getName())))); menu.open(); })); - List lorePlayerTarget = List.of( - Component.text("§7Vous êtes en train de modifier son statut dans la §dville") - ); + List lorePlayerTarget = TranslationManager.translationLore("feature.city.menus.members.manage.target.lore"); inventory.put(13, new ItemBuilder(this, SkullUtils.getPlayerSkull(playerTarget.getUniqueId()), itemMeta -> { - itemMeta.displayName(Component.text("§eJoueur " + playerTarget.getName())); + itemMeta.displayName(TranslationManager.translation("feature.city.menus.members.manage.target.title", Component.text(playerTarget.getName()).color(NamedTextColor.YELLOW))); itemMeta.lore(lorePlayerTarget); })); List lorePermission; if (hasPermissionPerms) { - lorePermission = List.of( - Component.text("§7Vous allez modifier §ases permissisons"), - Component.text("§e§lCLIQUEZ ICI POUR MODIFIER") - ); + lorePermission = TranslationManager.translationLore("feature.city.menus.members.manage.perms.lore"); } else { lorePermission = List.of( TranslationManager.translation("messages.global.cannot_do_this") @@ -131,18 +123,15 @@ public void onInventoryClick(InventoryClickEvent click) { } inventory.put(15, new ItemBuilder(this, Material.BOOK, itemMeta -> { - itemMeta.itemName(Component.text("§cModifier les permissions")); + itemMeta.itemName(TranslationManager.translation("feature.city.menus.members.manage.perms.title")); itemMeta.lore(lorePermission); }).setOnClick(inventoryClickEvent -> new CityPermsMenu(player, playerTarget.getUniqueId(), true).open() )); inventory.put(18, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.itemName(Component.text("§aRetour")); - itemMeta.lore(List.of( - Component.text("§7Vous allez retourner au menu précédent"), - Component.text("§e§lCLIQUEZ ICI POUR CONFIRMER") - )); + itemMeta.itemName(TranslationManager.translation("messages.menus.back")); + itemMeta.lore(TranslationManager.translationLore("feature.city.menus.members.manage.back_lore")); }, true)); return inventory; diff --git a/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerListMenu.java b/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerListMenu.java index c741379c9..3d6b99a4e 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerListMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerListMenu.java @@ -20,7 +20,9 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -81,44 +83,25 @@ public List getItems() { List lorePlayer; if (city.hasPermission(playerOffline.getUniqueId(), CityPermission.OWNER)) { - lorePlayer = List.of( - Component.text("§7Le propriétaire de la ville.") - ); + lorePlayer = TranslationManager.translationLore("feature.city.menus.members.owner.lore"); } else if (hasPermissionPerms && hasPermissionKick) { if (city.hasPermission(playerOffline.getUniqueId(), CityPermission.OWNER)) { - lorePlayer = List.of( - Component.text("§7Vous ne pouvez pas éditer le propriétaire") - ); + lorePlayer = TranslationManager.translationLore("feature.city.menus.members.cant_edit_owner.lore"); } else { - lorePlayer = List.of( - Component.text("§7Vous pouvez gérer ce joueur comme l'§cexpulser §7ou bien modifier §ases permissions"), - Component.text("§e§lCLIQUEZ ICI POUR GERER CE JOUEUR") - ); + lorePlayer = TranslationManager.translationLore("feature.city.menus.members.manage.lore"); } } else if (hasPermissionPerms) { - lorePlayer = List.of( - Component.text("§7Vous pouvez modifier les permissions de ce joueur"), - Component.text("§e§lCLIQUEZ ICI POUR MODIFIER SES PERMISSIONS") - ); + lorePlayer = TranslationManager.translationLore("feature.city.menus.members.perms.lore"); } else if (hasPermissionKick) { if (player.getUniqueId().equals(playerOffline.getUniqueId())) { - lorePlayer = List.of( - Component.text("§7Vous ne pouvez pas vous §aexclure §7vous même") - ); + lorePlayer = TranslationManager.translationLore("feature.city.menus.members.cant_self_kick.lore"); } else if (city.hasPermission(playerOffline.getUniqueId(), CityPermission.OWNER)) { - lorePlayer = List.of( - Component.text("§7Vous ne pouvez pas §aexclure §7le propriétaire") - ); + lorePlayer = TranslationManager.translationLore("feature.city.menus.members.cant_kick_owner.lore"); } else { - lorePlayer = List.of( - Component.text("§7Vous pouvez exclure ce joueur"), - Component.text("§e§lCLIQUEZ ICI POUR L'EXCLURE") - ); + lorePlayer = TranslationManager.translationLore("feature.city.menus.members.kick.lore"); } } else { - lorePlayer = List.of( - Component.text("§7Un membre comme vous") - ); + lorePlayer = TranslationManager.translationLore("feature.city.menus.members.member.lore"); } List finalLorePlayer = lorePlayer; @@ -149,8 +132,8 @@ public List getItems() { CityKickAction.startKick(player, playerOffline); }, player::closeInventory, - List.of(Component.text("§7Voulez vous vraiment expulser " + playerOffline.getName() + " ?")), - List.of(Component.text("§7Ne pas expulser " + playerOffline.getName()))); + List.of(TranslationManager.translation("feature.city.menus.members.kick.confirm", Component.text(playerOffline.getName()).color(NamedTextColor.GRAY))), + List.of(TranslationManager.translation("feature.city.menus.members.kick.deny", Component.text(playerOffline.getName()).color(NamedTextColor.GRAY)))); menu.open(); } })); @@ -172,12 +155,12 @@ public Map getButtons() { Map map = new HashMap<>(); map.put(45, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.displayName(Component.text("§aRetour")); - itemMeta.lore(List.of(Component.text("§7Retourner au menu précédent"))); + itemMeta.displayName(TranslationManager.translation("messages.menus.back")); + itemMeta.lore(List.of(TranslationManager.translation("messages.menus.back_lore"))); }, true)); map.put(49, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_cancel").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§7Fermer")); + itemMeta.displayName(TranslationManager.translation("messages.menus.close")); }).setOnClick(inventoryClickEvent -> getOwner().closeInventory() )); @@ -185,29 +168,30 @@ public Map getButtons() { map.put(48, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_back_orange")).getBest(), - itemMeta -> itemMeta.displayName(Component.text("§cPage précédente"))).setPreviousPageButton()); + itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.previous_page"))).setPreviousPageButton()); map.put(50, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_next_orange")).getBest(), - itemMeta -> itemMeta.displayName(Component.text("§aPage suivante"))).setNextPageButton()); + itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.next_page"))).setNextPageButton()); map.put(53, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_search")).getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§7Inviter des §dpersonnes")); + itemMeta.displayName(TranslationManager.translation("feature.city.menus.members.invite.title")); itemMeta.lore( - List.of( - Component.text("§7Vous pouvez inviter des personnes à votre ville pour la remplir"), - Component.text("§7Vous êtes à " + playerCity.getMembers().size() + "/" + MemberLimitRewards.getMemberLimit(playerCity.getLevel())) + TranslationManager.translationLore( + "feature.city.menus.members.invite.lore", + Component.text(playerCity.getMembers().size()).color(NamedTextColor.GRAY), + Component.text(MemberLimitRewards.getMemberLimit(playerCity.getLevel())).color(NamedTextColor.GRAY) ) ); }).setOnClick(inventoryClickEvent -> { - DialogInput.send(player, Component.text("Entrez le nom du joueur"), MAX_LENGTH_PLAYERNAME, input -> { + DialogInput.send(player, TranslationManager.translation("feature.city.menus.members.invite.prompt"), MAX_LENGTH_PLAYERNAME, input -> { if (input == null) return; if (InputUtils.isInputPlayer(input)) { Player playerToInvite = Bukkit.getPlayer(input); CityInviteCommands.invite(player, playerToInvite); } else { - MessagesManager.sendMessage(player, Component.text("Veuillez mettre une entrée correcte"), Prefix.CITY, MessageType.ERROR, true); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.menus.members.invite.invalid"), Prefix.CITY, MessageType.ERROR, true); } }); })); @@ -216,7 +200,7 @@ public Map getButtons() { @Override public @NotNull Component getName() { - return Component.text("Menu des villes - Membres"); + return TranslationManager.translation("feature.city.menus.members.name"); } @Override diff --git a/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/MainWarMenu.java b/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/MainWarMenu.java index b8bda57ef..178f77e28 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/MainWarMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/MainWarMenu.java @@ -21,6 +21,7 @@ import fr.openmc.core.utils.SkullUtils; import fr.openmc.core.utils.cache.PlayerNameCache; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -80,7 +81,6 @@ public List getItems() { long onlineCount = city.getOnlineMembers().size(); UUID ownerUUID = city.getPlayerWithPermission(CityPermission.OWNER); - String ownerName = PlayerNameCache.getName(ownerUUID); Mascot mascot = city.getMascot(); @@ -89,7 +89,7 @@ public List getItems() { List loreCity = new ArrayList<>(List.of( Component.empty(), - Component.text("§7Propriétaire : §d" + ownerName), + Component.text("§7Propriétaire : §d" + PlainTextComponentSerializer.plainText().serialize(PlayerNameCache.name(player.getUniqueId()))), Component.text("§7Population (en ligne) : §a" + onlineCount), Component.text("§7Mascotte : §4niv. " + city.getMascot().getLevel()), Component.text("§7Location : §c" + mascotLocation.getX() + " " + mascotLocation.getY() + " " + mascotLocation.getZ()) diff --git a/src/main/java/fr/openmc/core/features/dream/displays/DreamScoreboard.java b/src/main/java/fr/openmc/core/features/dream/displays/DreamScoreboard.java index 53108870e..9b0c2b71a 100644 --- a/src/main/java/fr/openmc/core/features/dream/displays/DreamScoreboard.java +++ b/src/main/java/fr/openmc/core/features/dream/displays/DreamScoreboard.java @@ -64,7 +64,7 @@ public void update(Player player, SternalBoard board) { lines.add(text(" • ", NamedTextColor.DARK_GRAY) .append(text(textToSmall("froid:"), NamedTextColor.GRAY)) .appendSpace() - .append(text(String.valueOf(dreamPlayer.getCold())).color(TextColor.color(0x44EBDA))) + .append(text(dreamPlayer.getCold()).color(TextColor.color(0x44EBDA))) ); lines.add(empty()); diff --git a/src/main/java/fr/openmc/core/features/leaderboards/LeaderboardManager.java b/src/main/java/fr/openmc/core/features/leaderboards/LeaderboardManager.java index fa688a272..1cef3d4aa 100644 --- a/src/main/java/fr/openmc/core/features/leaderboards/LeaderboardManager.java +++ b/src/main/java/fr/openmc/core/features/leaderboards/LeaderboardManager.java @@ -11,6 +11,7 @@ import fr.openmc.core.features.events.halloween.models.HalloweenData; import fr.openmc.core.features.leaderboards.commands.LeaderboardCommands; import fr.openmc.core.utils.DateUtils; +import fr.openmc.core.utils.cache.PlayerNameCache; import fr.openmc.core.utils.entities.TextDisplay; import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import lombok.Getter; @@ -494,7 +495,7 @@ public static void updatePlayerMoneyMap() { .sorted((entry1, entry2) -> Double.compare(entry2.getValue(), entry1.getValue())) .limit(10) .toList()) { - String playerName = Bukkit.getOfflinePlayer(entry.getKey()).getName(); + String playerName = PlayerNameCache.getName(entry.getKey()); String formattedBalance = EconomyManager.getFormattedSimplifiedNumber(entry.getValue()); playerMoneyMap.put(rank++, new AbstractMap.SimpleEntry<>(playerName, formattedBalance)); } @@ -541,7 +542,7 @@ public static void updatePumpkinCountMap() { .sorted((entry1, entry2) -> Double.compare(entry2.getValue().getPumpkinCount(), entry1.getValue().getPumpkinCount())) .limit(10) .toList()) { - String playerName = Bukkit.getOfflinePlayer(entry.getKey()).getName(); + String playerName = PlayerNameCache.getName(entry.getKey()); String formattedPumpkinCount = EconomyManager.getFormattedSimplifiedNumber(entry.getValue().getPumpkinCount()); pumpkinCountMap.put(rank++, new AbstractMap.SimpleEntry<>(playerName, formattedPumpkinCount)); } diff --git a/src/main/java/fr/openmc/core/utils/cache/PlayerNameCache.java b/src/main/java/fr/openmc/core/utils/cache/PlayerNameCache.java index c40ebe2c0..4d36ca128 100644 --- a/src/main/java/fr/openmc/core/utils/cache/PlayerNameCache.java +++ b/src/main/java/fr/openmc/core/utils/cache/PlayerNameCache.java @@ -2,6 +2,7 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import net.kyori.adventure.text.Component; import org.bukkit.OfflinePlayer; import java.util.UUID; @@ -9,10 +10,15 @@ public class PlayerNameCache { private static final Object2ObjectMap nameCache = new Object2ObjectOpenHashMap<>(); + public static Component name(UUID uuid) { + return Component.text(getName(uuid)); + } + public static String getName(UUID uuid) { return nameCache.computeIfAbsent(uuid, id -> { OfflinePlayer player = CacheOfflinePlayer.getOfflinePlayer((UUID) id); return player.getName() != null ? player.getName() : "Inconnu"; }); } + } diff --git a/src/main/resources/translations/lang.properties b/src/main/resources/translations/lang.properties index 824e6703c..e34edccbc 100644 --- a/src/main/resources/translations/lang.properties +++ b/src/main/resources/translations/lang.properties @@ -42,6 +42,13 @@ messages.global.player_not_found=Le joueur n'a pas été trouvé. messages.global.player_missing_money=Tu n'as pas assez d'argent. messages.global.cancel=Annuler messages.global.accept=Accepter +messages.menus.back=Retour +messages.menus.back_lore=Retourner au menu précédent +messages.menus.previous_page=Page précédente +messages.menus.previous_page_lore=Cliquez pour aller à la page précédente +messages.menus.next_page=Page suivante +messages.menus.next_page_lore=Cliquez pour aller à la page suivante +messages.menus.close=Fermer # ** COMMANDS ** command.api.cooldown.debug.must_wait=%2$s (%1$ss) @@ -73,8 +80,10 @@ command.utils.cooldowns.list_cooldowns=Liste des cooldowns actifs : command.utils.cooldowns.list=- %1$s : %2$s command.utils.restart.cannot_open_city_chest=Le coffre est inaccessible durant un redémarrage programmé -command.utils.restart.redem=🔄 Redémarrage du serveur 🔄
-command.utils.restart.server_restarting=Le serveur est en train de redémarrer.
+command.utils.restart.redem=🔄 Redémarrage du serveur 🔄 \ +
+command.utils.restart.server_restarting=Le serveur est en train de redémarrer. \ +
command.utils.restart.thanks=Merci de votre patience ! command.utils.restart.restarting_in=Redémarrage du serveur dans %1$s seconde%2$s command.utils.restart.restart=Redémarrage @@ -214,7 +223,7 @@ feature.city.type.in_war=en guerre feature.city.type.confirm_change=Es-tu sûr de vouloir changer le type de ta ville feature.city.type.change_type_to_type=Vous allez passez d'une ville %1$s à une ville %2$s feature.city.type.warning_war=⚠ Vous pourrez être exposé à des guerres contre d'autres villes à tout moment ! -feature.city.type.mascot_losing_level=⚠ Ta mascotte perdera 1 niveau ! +feature.city.type.mascot_losing_level=⚠ Ta mascotte perdra 1 niveau ! feature.city.type.not_change_type=Ne pas changer le type de ville feature.city.type.mascot_not_exist_change_type=Vous n'avez pas de mascotte pour changer le type de votre ville (contactez le staff) feature.city.type.mascot_must_by_alive_change_type=Votre mascotte doit être en vie pour changer le type de ville @@ -318,6 +327,318 @@ feature.city.conditions.leave.owner_cant_leave=Tu ne peux pas quitter la ville c # * LISTENERS feature.city.listeners.tnt_explode=Vous vous êtes pris une TNT dans votre ville par la ville %1$s et posée par %2$s ! (%3$s/%4$s tnt journalières) +# * MENUS +feature.city.menus.main.name=Menu des Villes +feature.city.menus.main.bank.title=La banque +feature.city.menus.main.bank.lore.unlocked=Stocker votre argent et celle de votre ville \ +
Contribuer au développement de votre ville \ +
CLIQUEZ ICI POUR ACCEDER AUX COMPTES +feature.city.menus.main.bank.lore.locked=Stocker votre argent et celle de votre ville \ +
Contribuer au développement de votre ville \ +
Vous devez être niveau %1$s pour débloquer ceci +feature.city.menus.main.map.title=Taille de votre ville +feature.city.menus.main.map.no_permission=Vous n'avez pas les permissions de voir les claims +feature.city.menus.main.map.lore.access=Votre ville a une superficie de %1$s \ +
CLIQUEZ ICI POUR ACCEDER A LA CARTE +feature.city.menus.main.map.lore.view=Votre ville a une superficie de %1$s +feature.city.menus.main.leave.title=Partir de la ville +feature.city.menus.main.leave.confirm.accept=Voulez vous vraiment partir de %1$s ? +feature.city.menus.main.leave.confirm.deny=Rester dans la ville %1$s +feature.city.menus.main.leave.lore.leave=Vous allez quitter %1$s \ +
CLIQUEZ ICI POUR PARTIR +feature.city.menus.main.leave.lore.owner_cant=Vous ne pouvez pas quitter %1$s car vous êtes propriétaire +feature.city.menus.main.chest.title=Le coffre de la ville +feature.city.menus.main.chest.lore.locked=Acceder au coffre de votre ville pour \ +
stocker des items en commun \ +
Vous devez être niveau %1$s pour débloquer ceci +feature.city.menus.main.chest.lore.opened=Acceder au coffre de votre ville pour \ +
stocker des items en commun \ +
Ce coffre est déjà ouvert par %1$s +feature.city.menus.main.chest.lore.click=Acceder au coffre de votre ville pour \ +
stocker des items en commun \ +
CLIQUEZ ICI POUR ACCEDER AU COFFRE +feature.city.menus.main.chest.lore.no_permission=Vous n'avez pas le droit de visionner le coffre ! +feature.city.menus.main.milestone.title=Milestone de votre ville +feature.city.menus.main.milestone.lore=Acceder à la route de progression de la ville ! \ +
Important pour débloquer les différentes features des villes ! \ +
Level : %1$s \ +
CLIQUEZ ICI POUR ACCEDER AU MILESTONE +feature.city.menus.main.notation.title=La Notation de votre ville +feature.city.menus.main.notation.lore=Notation de la ville : %1$s/%2$s \ +
Argent remporté : %3$s %4$s \ +
CLIQUEZ ICI POUR VOIR LA NOTATION +feature.city.menus.main.notation.lore.none=Vous n'avez pas de notation +feature.city.menus.main.notation.lore.locked=Vous devez être niveau %1$s pour débloquer ceci +feature.city.menus.main.ranks.title=Grades de la Ville +feature.city.menus.main.ranks.lore.unlocked=Gérer les grades de votre ville \ +
Votre Grade : %1$s \ +
CLIQUEZ ICI POUR ACCEDER AUX GRADES +feature.city.menus.main.ranks.lore.locked=Gérer les grades de votre ville \ +
Vous devez etre Niveau %1$s pour débloquer ceci +feature.city.menus.main.type.title=Le statut de votre ville +feature.city.menus.main.type.lore.status=Votre ville est en %1$s +feature.city.menus.main.type.lore.war_command=Vous pouvez lancer une guerre avec /war +feature.city.menus.main.type.lore.cooldown=Cooldown : %1$s +feature.city.menus.main.type.lore.click=CLIQUEZ ICI POUR LE CHANGER +feature.city.menus.main.mayor.title=Les élections +feature.city.menus.main.mayor.locked.phase2=En ce moment, les maires sont tous appliqués dans les villes ! \ +
Sauf la votre ! \ +
Vous devez être niveau %1$s pour débloquer ceci +feature.city.menus.main.mayor.locked.phase1=Les élections sont actuellement ouverte \ +
Fermeture dans %1$s \ +
Mais vous ne pouvez pas y accéder ! \ +
Vous devez être niveau %2$s pour débloquer ceci +feature.city.menus.main.mayor.locked.error=Erreur \ +
Vous devez être niveau %1$s pour débloquer ceci +feature.city.menus.main.mayor.election.phase2=Votre ville a un maire ! \ +
Maire : %1$s \ +
CLIQUEZ ICI POUR ACCEDER AUX INFORMATIONS +feature.city.menus.main.mayor.election.phase1=Les élections sont actuellement ouverte \ +
Fermeture dans %1$s \ +
CLIQUEZ ICI POUR ACCEDER AUX ELECTIONS +feature.city.menus.main.mayor.election.error=Erreur +feature.city.menus.main.mayor.owner.phase2=Votre ville a un maire ! \ +
Maire : %1$s \ +
Ouverture des élections dans %2$s \ +
CLIQUEZ ICI POUR ACCEDER AUX INFORMATIONS +feature.city.menus.main.mayor.owner.phase1.has_mayor=Les élections sont désactivées \ +
Il vous faut au moins %1$s membres \ +
Vous avez déjà choisis vos réformes ! \ +
Cependant vous pouvez changer votre couleur ! \ +
Fermeture dans %2$s +feature.city.menus.main.mayor.owner.phase1.no_mayor=Les élections sont désactivées \ +
Il vous faut au moins %1$s membres \ +
Seul le propriétaire peut choisir les réformes qu'il veut. \ +
Fermeture dans %2$s \ +
CLIQUEZ ICI POUR CHOISIR VOS REFORMES +feature.city.menus.main.mayor.owner.phase1.viewer=Les élections sont désactivées \ +
Il vous faut au moins %1$s membres \ +
Seul le propriétaire peut choisir les réformes qu'il veut. \ +
Fermeture dans %2$s +feature.city.menus.main.mayor.owner.error=Erreur +feature.city.menus.main.mascots.title=Votre Mascotte +feature.city.menus.main.mascots.lore.dead=Vie : %1$s/%2$s \ +
Statut : Morte \ +
Réapparition dans : %3$s \ +
Niveau : %4$s \ +
CLIQUEZ ICI POUR INTERAGIR AVEC +feature.city.menus.main.mascots.lore.alive=Vie : %1$s/%2$s \ +
Statut : En Vie \ +
Niveau : %3$s \ +
CLIQUEZ ICI POUR INTERAGIR AVEC +feature.city.menus.main.mascots.lore.not_found=Mascotte non trouvée +feature.city.menus.main.mascots.lore.missing=Mascotte inexistante (contactez le staff) +feature.city.menus.main.manage.title=%1$s +feature.city.menus.main.manage.lore.edit=Propriétaire de la ville : %1$s \ +
Maire de la ville : %2$s \ +
Membre(s) : %3$s/%4$s \ +
CLIQUEZ ICI POUR MODIFIER LA VILLE +feature.city.menus.main.manage.lore.view=Propriétaire de la ville : %1$s \ +
Maire de la ville : %2$s \ +
Membre(s) : %3$s/%4$s +feature.city.menus.main.members.title=Liste des Membres +feature.city.menus.main.members.lore=Il y a actuellement %1$s membre(s) dans votre ville \ +
Vous avez une limite de membre de %2$s membre(s) \ +
CLIQUEZ ICI POUR VOIR LA LISTE DES JOUEURS +feature.city.menus.no_city.name=Menu des villes - Aucune +feature.city.menus.no_city.invitations.none.title=Vous n'avez aucune invitation +feature.city.menus.no_city.invitations.none.lore=Un habitant d'une ville doit vous inviter \ +
via /city invite +feature.city.menus.no_city.invitations.count.title=Vous avez %1$s invitation%2$s +feature.city.menus.no_city.invitations.count.lore=CLIQUEZ ICI POUR VOIR VOS INVITATIONS +feature.city.menus.no_city.create.title=Créer votre ville +feature.city.menus.no_city.create.lore.cooldown=Vous pouvez aussi créer votre Ville \ +
Faites /city create [nom] ou bien cliquez ici ! \ +
Vous devez attendre %1$s avant de pouvoir créer une ville +feature.city.menus.no_city.create.lore.ready=Vous pouvez aussi créer votre Ville \ +
Faites /city create [nom] ou bien cliquez ici ! \ +
Coûte : \ +
- %1$s %2$s \ +
- %3$s d'Aywenite \ +
CLIQUEZ ICI POUR CREER VOTRE VILLE +feature.city.menus.invitations.name=Menu des villes - Invitations +feature.city.menus.invitations.item.name=%1$s vous a invité(e) dans %2$s +feature.city.menus.invitations.item.lore=CLIQUEZ ICI POUR REJOINDRE LA VILLE +feature.city.menus.invitations.confirm.deny=Refuser %1$s +feature.city.menus.type.name=Menu des villes - Type +feature.city.menus.type.peace.title=Ville en paix +feature.city.menus.type.peace.lore=Votre sécurité est assurée ! \ +
TIPS: Parfait pour build, et échanger en toute tranquilité ! +feature.city.menus.type.war.title=Ville en guerre +feature.city.menus.type.war.lore=Un monde de guerre et de concurrence. \ +
⚠ ATTENTION \ +
- Les villes étant dans le même status que vous, pourront vous déclarer la guerre ! \ +
TIPS: Idéal pour les tryhardeurs et les compétitifs +feature.city.menus.type.war.lore.locked=Un monde de guerre et de concurrence. \ +
⚠ ATTENTION \ +
- Les villes étant dans le même status que vous, pourront vous déclarer la guerre ! \ +
TIPS: Idéal pour les tryhardeurs et les compétitifs \ +
Vous devez être niveau %1$s pour débloquer ceci +feature.city.menus.transfer.name=Menu des villes - Transférer +feature.city.menus.transfer.item.lore=Voulez-vous transférer la ville à %1$s ? \ +
CLIQUEZ ICI POUR CONFIRMER +feature.city.menus.modify.name=Menu des villes - Modifier +feature.city.menus.modify.rename.title=Renommer votre ville +feature.city.menus.modify.rename.lore=Vous pouvez renommer votre ville. \ +
Nom actuel : %1$s \ +
CLIQUEZ ICI POUR LE MODIFIER +feature.city.menus.modify.rename.invalid=Veuillez mettre une entrée correcte +feature.city.menus.modify.transfer.title=Transférer la ville +feature.city.menus.modify.transfer.lore=La Ville sera transférer à la personne que vous sélectionnerez \ +
CLIQUEZ ICI POUR CHOISIR +feature.city.menus.modify.transfer.no_member=Il y a pas de membre a qui vous pouvez transférer la ville +feature.city.menus.modify.delete.title=Supprimer la ville +feature.city.menus.modify.delete.lore.wait=Vous allez définitivement supprimer la ville! \ +
Vous devez attendre %1$s avant de pouvoir delete votre ville +feature.city.menus.modify.delete.lore.click=Vous allez définitivement supprimer la ville! \ +
CLIQUEZ ICI POUR CONFIRMER +feature.city.menus.perms.name=Permissions de %1$s +feature.city.menus.perms.permission.remove=Retirer %1$s +feature.city.menus.perms.permission.add=Ajouter %1$s +feature.city.menus.perms.permission=%1$s +feature.city.menus.perms.permission.lore.remove=CLIQUEZ POUR RETIRER CETTE PERMISSION +feature.city.menus.perms.permission.lore.add=CLIQUEZ POUR AJOUTER CETTE PERMISSION +feature.city.menus.perms.bulk.title=Gérer toutes les permissions du membre +feature.city.menus.perms.bulk.lore=Clique-gauche pour tout retirer \ +
Clique-droit pour tout ajouter +feature.city.menus.chest.name=Menu du coffre de %1$s - Page %2$s +feature.city.menus.chest.upgrade.title=Améliorer le coffre +feature.city.menus.chest.upgrade.lore.click=Votre ville doit avoir : \ +
- %1$s %2$s \ +
- %3$s d'Aywenite \ +
CLIQUEZ ICI POUR AMELIORER LE COFFRE +feature.city.menus.chest.upgrade.lore.max=Votre ville doit avoir : \ +
- %1$s %2$s \ +
- %3$s d'Aywenite \ +
Limite atteinte +feature.city.menus.chunks.name=Menu des villes - La carte +feature.city.menus.chunks.loading.title=Chargement... +feature.city.menus.chunks.loading.lore=Chargement des données de chunks en cours +feature.city.menus.chunks.free_claim.title=Claim gratuit +feature.city.menus.chunks.free_claim.lore=Vous avez %1$s claim gratuit ! +feature.city.menus.chunks.refresh.title=Rafraîchir la carte +feature.city.menus.chunks.refresh.lore=Mettre à jour les claims affichés +feature.city.menus.chunks.protected.title=Claim dans une région protégée +feature.city.menus.chunks.protected.lore=Cette zone est protégée par une région WorldGuard \ +
Position : %1$s +feature.city.menus.chunks.player_claim.title=Claim de votre ville +feature.city.menus.chunks.player_claim.lore.reward=Ville : %1$s \ +
Position : %2$s \ +
Vous rapporte : \ +
- %3$s %4$s \ +
- %5$s d'Aywenite \ +
CLIQUEZ POUR UNCLAIM +feature.city.menus.chunks.player_claim.lore.basic=Ville : %1$s \ +
Position : %2$s \ +
CLIQUEZ POUR UNCLAIM +feature.city.menus.chunks.other_claim.title=Claim d'une ville adverse +feature.city.menus.chunks.other_claim.lore=Ville : %1$s \ +
Position : %2$s +feature.city.menus.chunks.unclaimed.title=Claim libre +feature.city.menus.chunks.unclaimed.lore.free=Position : %1$s \ +
Coûte : \ +
- Claim gratuit \ +
CLIQUEZ POUR CLAIM +feature.city.menus.chunks.unclaimed.lore.cost=Position : %1$s \ +
Coûte : \ +
- %2$s %3$s \ +
- %4$s d'Aywenite \ +
CLIQUEZ POUR CLAIM +feature.city.menus.chunks.confirm_claim.accept=Voulez vous vraiment claim ce chunk ? +feature.city.menus.chunks.confirm_claim.deny=Annuler la procédure de claim +feature.city.menus.chunks.confirm_unclaim.accept=Voulez vous vraiment unclaim ce chunk ? +feature.city.menus.chunks.confirm_unclaim.deny=Annuler la procédure de unclaim +feature.city.menus.top.name=Menu des classement des villes +feature.city.menus.top.sort.title=Trier +feature.city.menus.top.sort.header=Cliquez pour trier par +feature.city.menus.top.sort.selected_prefix= +feature.city.menus.top.sort.unselected_prefix= +feature.city.menus.top.sort.global=Global +feature.city.menus.top.sort.power=Puissances +feature.city.menus.top.sort.money=Richesses +feature.city.menus.top.sort.claim=Superficie +feature.city.menus.top.sort.population=Population +feature.city.menus.top.item.title=n°%1$s %2$s +feature.city.menus.top.item.lore=Propriétaire : %1$s \ +
Niveau : %2$s \ +
Membres : %3$s/%4$s \ +
Superficie : %5$s chunks \ +
Richesses : %6$s %7$s \ +
Points de puissances : %8$s +feature.city.menus.top.item.lore.with_mayor=Propriétaire : %1$s \ +
Maire : %2$s \ +
Niveau : %3$s \ +
Membres : %4$s/%5$s \ +
Superficie : %6$s chunks \ +
Richesses : %7$s %8$s \ +
Points de puissances : %9$s +feature.city.menus.list.name=Menu de liste des villes +feature.city.menus.list.sort.title=Trier +feature.city.menus.list.sort.header=Cliquez pour trier par +feature.city.menus.list.sort.selected_prefix= +feature.city.menus.list.sort.unselected_prefix= +feature.city.menus.list.sort.name=Nom +feature.city.menus.list.sort.wealth=Richesses +feature.city.menus.list.sort.population=Population +feature.city.menus.list.sort.peace_war=Paix/Guerre +feature.city.menus.list.item.title=%1$s +feature.city.menus.list.item.lore=Propriétaire : %1$s \ +
Niveau : %2$s \ +
Membres : %3$s/%4$s membre%5$s \ +
Type : %6$s \ +
Richesses : %7$s %8$s +feature.city.menus.list.item.lore.with_mayor=Propriétaire : %1$s \ +
Maire : %2$s \ +
Niveau : %3$s \ +
Membres : %4$s/%5$s membre%6$s \ +
Type : %7$s \ +
Richesses : %8$s %9$s +feature.city.menus.list.details.name=Menu de détails de la ville %1$s +feature.city.menus.list.details.level=Niveau : %1$s +feature.city.menus.list.details.owner=Propriétaire : %1$s +feature.city.menus.list.details.mayor=Maire : %1$s +feature.city.menus.list.details.mascot.level=Niveau de la Mascotte : %1$s +feature.city.menus.list.details.mascot.missing=Aucune mascotte trouvée (bug) +feature.city.menus.list.details.size=Taille : %1$s chunks +feature.city.menus.list.details.wealth=Richesses : %1$s %2$s +feature.city.menus.list.details.population=Population : %1$s/%2$s joueur%3$s +feature.city.menus.list.details.population.lore=CLIQUEZ ICI POUR VOIR LES MEMBRES +feature.city.menus.list.details.type=Type : %1$s +feature.city.menus.list.members.name=Menu du détail des membres de %1$s +feature.city.menus.list.members.back_lore=CLIQUEZ ICI POUR RETOURNER +feature.city.menus.members.name=Menu des villes - Membres +feature.city.menus.members.owner.lore=Le propriétaire de la ville. +feature.city.menus.members.cant_edit_owner.lore=Vous ne pouvez pas éditer le propriétaire +feature.city.menus.members.manage.lore=Vous pouvez gérer ce joueur comme l'expulser ou bien modifier ses permissions \ +
CLIQUEZ ICI POUR GERER CE JOUEUR +feature.city.menus.members.perms.lore=Vous pouvez modifier les permissions de ce joueur \ +
CLIQUEZ ICI POUR MODIFIER SES PERMISSIONS +feature.city.menus.members.cant_self_kick.lore=Vous ne pouvez pas vous exclure vous même +feature.city.menus.members.cant_kick_owner.lore=Vous ne pouvez pas exclure le propriétaire +feature.city.menus.members.kick.lore=Vous pouvez exclure ce joueur \ +
CLIQUEZ ICI POUR L'EXCLURE +feature.city.menus.members.member.lore=Un membre comme vous +feature.city.menus.members.kick.confirm=Voulez vous vraiment expulser %1$s ? +feature.city.menus.members.kick.deny=Ne pas expulser %1$s +feature.city.menus.members.invite.title=Inviter des personnes +feature.city.menus.members.invite.lore=Vous pouvez inviter des personnes à votre ville pour la remplir \ +
Vous êtes à %1$s/%2$s +feature.city.menus.members.invite.prompt=Entrez le nom du joueur +feature.city.menus.members.invite.invalid=Veuillez mettre une entrée correcte +feature.city.menus.members.manage.name=Menu des villes - Modifier un joueur +feature.city.menus.members.manage.kick.self=Vous pouvez pas vous expulser +feature.city.menus.members.manage.kick.owner=Vous pouvez pas expulser le propriétaire +feature.city.menus.members.manage.kick.info=Vous pouvez expulser %1$s de votre ville. \ +
CLIQUEZ ICI POUR EXPULSER +feature.city.menus.members.manage.kick.title=Expulser %1$s +feature.city.menus.members.manage.target.lore=Vous êtes en train de modifier son statut dans la ville +feature.city.menus.members.manage.target.title=Joueur %1$s +feature.city.menus.members.manage.perms.lore=Vous allez modifier ses permissions \ +
CLIQUEZ ICI POUR MODIFIER +feature.city.menus.members.manage.perms.title=Modifier les permissions +feature.city.menus.members.manage.back_lore=Vous allez retourner au menu précédent \ +
CLIQUEZ ICI POUR CONFIRMER + # * SUB FEATURES # - City Chat feature.city.chat.entered=Vous avez rejoint le chat de ville From d9b3ae1bf444ea8c176746d56e031f939505d937 Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Wed, 25 Mar 2026 17:30:27 +0100 Subject: [PATCH 07/20] translation for package feature.sub.bank and .mascots --- .../openmc/api/chronometer/Chronometer.java | 11 +- .../city/actions/CityChangeAction.java | 4 +- .../city/sub/bank/CityBankManager.java | 21 ++- .../bank/conditions/CityBankConditions.java | 23 ++- .../sub/bank/menu/CityBankDepositMenu.java | 56 +++----- .../city/sub/bank/menu/CityBankMenu.java | 56 ++++---- .../sub/bank/menu/CityBankWithdrawMenu.java | 56 +++----- .../city/sub/mascots/MascotsManager.java | 41 ++++-- .../commands/AdminMascotsCommands.java | 6 +- .../listeners/MascotImmuneListener.java | 5 +- .../listeners/MascotsDamageListener.java | 25 ++-- .../listeners/MascotsDeathListener.java | 5 +- .../listeners/MascotsInteractionListener.java | 5 +- .../listeners/MascotsRenameListener.java | 3 +- .../city/sub/mascots/menu/MascotMenu.java | 95 +++++++------ .../sub/mascots/menu/MascotsDeadMenu.java | 30 ++-- .../sub/mascots/menu/MascotsSkinMenu.java | 23 ++- .../city/sub/mascots/models/MascotType.java | 14 +- .../utils/MascotRegenerationUtils.java | 9 +- .../city/sub/mascots/utils/MascotUtils.java | 17 +-- .../resources/translations/lang.properties | 133 ++++++++++++++++++ 21 files changed, 391 insertions(+), 247 deletions(-) diff --git a/src/main/java/fr/openmc/api/chronometer/Chronometer.java b/src/main/java/fr/openmc/api/chronometer/Chronometer.java index 3599134e2..af2152a8e 100644 --- a/src/main/java/fr/openmc/api/chronometer/Chronometer.java +++ b/src/main/java/fr/openmc/api/chronometer/Chronometer.java @@ -8,6 +8,7 @@ import lombok.Getter; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.bukkit.Bukkit; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; @@ -17,7 +18,6 @@ import org.jetbrains.annotations.NotNull; import java.util.HashMap; -import java.util.Map; import java.util.Objects; import java.util.UUID; @@ -93,11 +93,10 @@ public void run() { int remainingTime = chronometer.get(entityUUID).get(group); if (message != null && entity instanceof Player player) { - Component timerMessage = message.replaceText(builder -> - builder.matchLiteral("%sec%") - .replacement(Component.text(remainingTime)) - ); - sendMessage(player, messageType, timerMessage); + String timerMessage = PlainTextComponentSerializer.plainText().serialize(message) + .replace("%sec%", String.valueOf(remainingTime)); + + sendMessage(player, messageType, Component.text(timerMessage)); } if (timerEnd(entityUUID, group)) { diff --git a/src/main/java/fr/openmc/core/features/city/actions/CityChangeAction.java b/src/main/java/fr/openmc/core/features/city/actions/CityChangeAction.java index c79019290..4618a0dfc 100644 --- a/src/main/java/fr/openmc/core/features/city/actions/CityChangeAction.java +++ b/src/main/java/fr/openmc/core/features/city/actions/CityChangeAction.java @@ -126,11 +126,11 @@ public static void finishChange(Player sender) { mob.setHealth(maxHealth); } - mob.customName(Component.text(MascotsManager.PLACEHOLDER_MASCOT_NAME.formatted( + mob.customName(MascotsManager.getAliveMascotName( city.getName(), mob.getHealth(), maxHealth - ))); + )); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/src/main/java/fr/openmc/core/features/city/sub/bank/CityBankManager.java b/src/main/java/fr/openmc/core/features/city/sub/bank/CityBankManager.java index 940d5fbaa..5f1496376 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/bank/CityBankManager.java +++ b/src/main/java/fr/openmc/core/features/city/sub/bank/CityBankManager.java @@ -16,6 +16,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.entity.Player; import java.math.BigDecimal; @@ -42,7 +43,7 @@ public static void depositCityBank(City city, Player player, String input) { if (!CityBankConditions.canCityDeposit(city, player)) return; if (!InputUtils.isInputMoney(input)) { - MessagesManager.sendMessage(player, Component.text("Veuillez mettre une entrée correcte"), + MessagesManager.sendMessage(player, TranslationManager.translation("messages.global.invalid_input"), Prefix.CITY, MessageType.ERROR, true); return; } @@ -51,7 +52,7 @@ public static void depositCityBank(City city, Player player, String input) { if (city == null || city.getLevel() < 2) { MessagesManager.sendMessage(player, - Component.text("Pour utiliser la banque de ville, votre ville doit être niveau 2 minimum !"), + TranslationManager.translation("feature.city.bank.errors.min_level"), Prefix.CITY, MessageType.ERROR, false); return; } @@ -66,7 +67,10 @@ public static void depositCityBank(City city, Player player, String input) { city.updateBalance(amount); MessagesManager.sendMessage(player, - Component.text("Tu as déposé " + EconomyManager.getFormattedNumber(amount) + " dans la banque de ta ville."), + TranslationManager.translation( + "feature.city.bank.deposit.success", + Component.text(EconomyManager.getFormattedNumber(amount)) + ), Prefix.CITY, MessageType.SUCCESS, false); } @@ -80,7 +84,7 @@ public static void withdrawCityBank(City city, Player player, String input) { if (!CityBankConditions.canCityWithdraw(city, player)) return; if (!InputUtils.isInputMoney(input)) { - MessagesManager.sendMessage(player, Component.text("Veuillez mettre une entrée correcte"), + MessagesManager.sendMessage(player, TranslationManager.translation("messages.global.invalid_input"), Prefix.CITY, MessageType.ERROR, true); return; } @@ -89,7 +93,7 @@ public static void withdrawCityBank(City city, Player player, String input) { if (city.getBalance() < amount) { MessagesManager.sendMessage(player, - Component.text("La banque de ta ville n'a pas assez d'argent."), + TranslationManager.translation("feature.city.bank.errors.not_enough_city_money"), Prefix.CITY, MessageType.ERROR, false); return; } @@ -98,8 +102,11 @@ public static void withdrawCityBank(City city, Player player, String input) { EconomyManager.addBalance(player.getUniqueId(), amount, "Retrait banque de ville"); MessagesManager.sendMessage(player, - Component.text("§d" + EconomyManager.getFormattedSimplifiedNumber(amount) + "§r" - + EconomyManager.getEconomyIcon() + " ont été transférés à ton compte."), + TranslationManager.translation( + "feature.city.bank.withdraw.success", + Component.text(EconomyManager.getFormattedSimplifiedNumber(amount)).color(NamedTextColor.LIGHT_PURPLE), + Component.text(EconomyManager.getEconomyIcon()).color(NamedTextColor.LIGHT_PURPLE) + ), Prefix.CITY, MessageType.SUCCESS, false); } diff --git a/src/main/java/fr/openmc/core/features/city/sub/bank/conditions/CityBankConditions.java b/src/main/java/fr/openmc/core/features/city/sub/bank/conditions/CityBankConditions.java index 49314e6e5..f2706b039 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/bank/conditions/CityBankConditions.java +++ b/src/main/java/fr/openmc/core/features/city/sub/bank/conditions/CityBankConditions.java @@ -32,7 +32,12 @@ public static boolean canOpenCityBank(City city, Player player) { } if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.CITY_BANK)) { - MessagesManager.sendMessage(player, Component.text("Vous n'avez pas débloqué cette feature ! Veuillez améliorer votre ville au niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.CITY_BANK) + " !"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, + TranslationManager.translation( + "feature.city.bank.errors.feature_locked", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.CITY_BANK)) + ), + Prefix.CITY, MessageType.ERROR, false); return false; } @@ -55,7 +60,9 @@ public static boolean canCityDeposit(City city, Player player) { if (!canOpenCityBank(city, player)) return false; if (!(city.hasPermission(player.getUniqueId(), CityPermission.MONEY_DEPOSIT))) { - MessagesManager.sendMessage(player, Component.text("Tu n'as pas la permission de donner de l'argent à ta ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, + TranslationManager.translation("feature.city.bank.errors.no_permission_deposit"), + Prefix.CITY, MessageType.ERROR, false); return false; } @@ -75,7 +82,9 @@ public static boolean canCityBalance(City city, Player player) { } if (!(city.hasPermission(player.getUniqueId(), CityPermission.MONEY_BALANCE))) { - MessagesManager.sendMessage(player, Component.text("Tu n'as pas la permission de consulter l'argent de la ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, + TranslationManager.translation("feature.city.bank.errors.no_permission_balance"), + Prefix.CITY, MessageType.ERROR, false); return false; } return true; @@ -95,12 +104,16 @@ public static boolean canCityWithdraw(City city, Player player) { } if (!(city.hasPermission(player.getUniqueId(), CityPermission.MONEY_WITHDRAW))) { - MessagesManager.sendMessage(player, Component.text("Tu n'as pas la permission de prendre de l'argent de ta ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, + TranslationManager.translation("feature.city.bank.errors.no_permission_withdraw"), + Prefix.CITY, MessageType.ERROR, false); return false; } if (city.getType().equals(CityType.WAR)) { - MessagesManager.sendMessage(player, Component.text("Votre ville est en situation de guerre, vous ne pouvez faire cela"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, + TranslationManager.translation("feature.city.bank.errors.war_blocked"), + Prefix.CITY, MessageType.ERROR, false); return false; } diff --git a/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankDepositMenu.java b/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankDepositMenu.java index c6f5ff928..2907f3ff0 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankDepositMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankDepositMenu.java @@ -11,7 +11,7 @@ import fr.openmc.core.features.economy.EconomyManager; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.TextDecoration; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; @@ -33,7 +33,7 @@ public CityBankDepositMenu(Player owner) { @Override public @NotNull Component getName() { - return Component.text("Menu de la banque de ville - Remplir"); + return TranslationManager.translation("feature.city.bank.menu.deposit.name"); } @Override @@ -67,21 +67,17 @@ public void onInventoryClick(InventoryClickEvent click) { List loreBankDepositAll; if (hasPermissionMoneyGive) { - loreBankDepositAll = List.of( - Component.text("§7Tout votre argent sera placé dans la §6banque de la ville"), - Component.empty(), - Component.text("§7Montant qui sera deposé : §d" + EconomyManager.getFormattedSimplifiedNumber(moneyPlayer) + " ").append(Component.text(EconomyManager.getEconomyIcon()).decoration(TextDecoration.ITALIC, false)), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR DEPOSER") + loreBankDepositAll = TranslationManager.translationLore( + "feature.city.bank.menu.deposit.all.lore", + Component.text(EconomyManager.getFormattedSimplifiedNumber(moneyPlayer)).color(NamedTextColor.LIGHT_PURPLE), + Component.text(EconomyManager.getEconomyIcon()).color(NamedTextColor.LIGHT_PURPLE) ); } else { - loreBankDepositAll = List.of( - TranslationManager.translation("messages.global.cannot_do_this") - ); + loreBankDepositAll = TranslationManager.translationLore("messages.global.cannot_do_this"); } inventory.put(11, new ItemBuilder(this, new ItemStack(Material.HOPPER, 64), itemMeta -> { - itemMeta.itemName(Component.text("§7Déposer tout votre §6argent")); + itemMeta.itemName(TranslationManager.translation("feature.city.bank.menu.deposit.all.title")); itemMeta.lore(loreBankDepositAll); }).setOnClick(inventoryClickEvent -> { city.depositCityBank(player, String.valueOf(moneyPlayer)); @@ -92,21 +88,17 @@ public void onInventoryClick(InventoryClickEvent click) { List loreBankDepositHalf; if (hasPermissionMoneyGive) { - loreBankDepositHalf = List.of( - Component.text("§7La moitié de votre argent sera placé dans la §6banque de la ville"), - Component.empty(), - Component.text("§7Montant qui sera deposé : §d" + EconomyManager.getFormattedSimplifiedNumber(halfMoneyPlayer) + " ").append(Component.text(EconomyManager.getEconomyIcon()).decoration(TextDecoration.ITALIC, false)), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR DEPOSER") + loreBankDepositHalf = TranslationManager.translationLore( + "feature.city.bank.menu.deposit.half.lore", + Component.text(EconomyManager.getFormattedSimplifiedNumber(halfMoneyPlayer)).color(NamedTextColor.LIGHT_PURPLE), + Component.text(EconomyManager.getEconomyIcon()).color(NamedTextColor.LIGHT_PURPLE) ); } else { - loreBankDepositHalf = List.of( - TranslationManager.translation("messages.global.cannot_do_this") - ); + loreBankDepositHalf = TranslationManager.translationLore("messages.global.cannot_do_this"); } inventory.put(13, new ItemBuilder(this, new ItemStack(Material.HOPPER, 32), itemMeta -> { - itemMeta.itemName(Component.text("§7Déposer la moitié de votre §6argent")); + itemMeta.itemName(TranslationManager.translation("feature.city.bank.menu.deposit.half.title")); itemMeta.lore(loreBankDepositHalf); }).setOnClick(inventoryClickEvent -> { city.depositCityBank(player, String.valueOf(halfMoneyPlayer)); @@ -117,23 +109,18 @@ public void onInventoryClick(InventoryClickEvent click) { List loreBankDepositInput; if (hasPermissionMoneyGive) { - loreBankDepositInput = List.of( - Component.text("§7Votre argent sera placé dans la §6banque de la ville"), - Component.text("§e§lCLIQUEZ ICI POUR INDIQUER LE MONTANT") - ); + loreBankDepositInput = TranslationManager.translationLore("feature.city.bank.menu.deposit.input.lore"); } else { - loreBankDepositInput = List.of( - TranslationManager.translation("messages.global.cannot_do_this") - ); + loreBankDepositInput = TranslationManager.translationLore("messages.global.cannot_do_this"); } inventory.put(15, new ItemBuilder(this, Material.OAK_SIGN, itemMeta -> { - itemMeta.itemName(Component.text("§7Déposer un §6montant précis")); + itemMeta.itemName(TranslationManager.translation("feature.city.bank.menu.deposit.input.title")); itemMeta.lore(loreBankDepositInput); }).setOnClick(inventoryClickEvent -> { if (!CityBankConditions.canCityDeposit(city, player)) return; - DialogInput.send(player, Component.text("Entrez le montant que vous voulez déposer"), MAX_LENGTH, input -> { + DialogInput.send(player, TranslationManager.translation("feature.city.bank.menu.deposit.input.prompt"), MAX_LENGTH, input -> { if (input == null) return; city.depositCityBank(player, input); } @@ -142,11 +129,8 @@ public void onInventoryClick(InventoryClickEvent click) { })); inventory.put(18, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.itemName(Component.text("§aRetour")); - itemMeta.lore(List.of( - Component.text("§7Vous allez retourner au menu précédent"), - Component.text("§e§lCLIQUEZ ICI POUR CONFIRMER") - )); + itemMeta.itemName(TranslationManager.translation("messages.menus.back")); + itemMeta.lore(TranslationManager.translationLore("feature.city.bank.menu.back_lore")); }, true)); return inventory; diff --git a/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankMenu.java b/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankMenu.java index 8322a9ab5..2fa85c12f 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankMenu.java @@ -14,8 +14,9 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.TextDecoration; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; @@ -35,7 +36,7 @@ public CityBankMenu(Player owner) { @Override public @NotNull Component getName() { - return Component.text("Menu des villes - Banque"); + return TranslationManager.translation("feature.city.bank.menu.name"); } @Override @@ -64,22 +65,19 @@ public void onInventoryClick(InventoryClickEvent click) { List loreBankDeposit; if (city.hasPermission(player.getUniqueId(), CityPermission.MONEY_DEPOSIT)) { - loreBankDeposit = List.of( - Component.text("§7Votre argent sera placé dans la §6banque de la ville"), - Component.text("§e§lCLIQUEZ ICI POUR DEPOSER") - ); + loreBankDeposit = TranslationManager.translationLore("feature.city.bank.menu.deposit.lore"); } else { - loreBankDeposit = List.of( - Component.text("§cVous n'avez pas le droit de faire ceci") - ); + loreBankDeposit = TranslationManager.translationLore("messages.global.cannot_do_this"); } inventory.put(11, new ItemBuilder(this, Material.HOPPER, itemMeta -> { - itemMeta.itemName(Component.text("§7Déposer de l'§6Argent")); + itemMeta.itemName(TranslationManager.translation("feature.city.bank.menu.deposit.title")); itemMeta.lore(loreBankDeposit); }).setOnClick(inventoryClickEvent -> { if (!(city.hasPermission(player.getUniqueId(), CityPermission.MONEY_DEPOSIT))) { - MessagesManager.sendMessage(player, Component.text("Tu n'as pas la permission de donner de l'argent à ta ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, + TranslationManager.translation("feature.city.bank.errors.no_permission_deposit"), + Prefix.CITY, MessageType.ERROR, false); return; } @@ -90,12 +88,14 @@ public void onInventoryClick(InventoryClickEvent click) { if (city.hasPermission(player.getUniqueId(), CityPermission.MONEY_BALANCE)) { Supplier interestItemSupplier = () -> new ItemBuilder(this, Material.GOLD_BLOCK, itemMeta -> { - itemMeta.itemName(Component.text("§6L'argent de votre ville")); - itemMeta.lore(List.of( - Component.text("§7La ville a actuellement §d" + EconomyManager.getFormattedSimplifiedNumber(city.getBalance()) + " ").append(Component.text(EconomyManager.getEconomyIcon()).decoration(TextDecoration.ITALIC, false)), - Component.text("§7Votre prochain intérêt est de §b" + city.calculateCityInterest() * 100 + "% §7dans §b" + DateUtils.convertSecondToTime(BankManager.getSecondsUntilInterest())) - ) - ); + itemMeta.itemName(TranslationManager.translation("feature.city.bank.menu.balance.title")); + itemMeta.lore(TranslationManager.translationLore( + "feature.city.bank.menu.balance.lore", + Component.text(EconomyManager.getFormattedSimplifiedNumber(city.getBalance())).color(NamedTextColor.LIGHT_PURPLE), + Component.text(EconomyManager.getEconomyIcon()).color(NamedTextColor.LIGHT_PURPLE), + Component.text(city.calculateCityInterest() * 100).color(NamedTextColor.AQUA), + Component.text(DateUtils.convertSecondToTime(BankManager.getSecondsUntilInterest())).color(NamedTextColor.AQUA) + )); }); MenuUtils.runDynamicItem(player, this, 13, interestItemSupplier) @@ -105,22 +105,19 @@ public void onInventoryClick(InventoryClickEvent click) { List loreBankTake; if (city.hasPermission(player.getUniqueId(), CityPermission.MONEY_WITHDRAW)) { - loreBankTake = List.of( - Component.text("§7L'argent sera pris dans la §6Banque de la ville"), - Component.text("§e§lCLIQUEZ ICI POUR INDIQUER LE MONTANT") - ); + loreBankTake = TranslationManager.translationLore("feature.city.bank.menu.withdraw.lore"); } else { - loreBankTake = List.of( - Component.text("§cVous n'avez pas le droit de faire ceci") - ); + loreBankTake = TranslationManager.translationLore("messages.global.cannot_do_this"); } inventory.put(15, new ItemBuilder(this, Material.DISPENSER, itemMeta -> { - itemMeta.itemName(Component.text("§7Retirer de l'§6argent")); + itemMeta.itemName(TranslationManager.translation("feature.city.bank.menu.withdraw.title")); itemMeta.lore(loreBankTake); }).setOnClick(inventoryClickEvent -> { if (!(city.hasPermission(player.getUniqueId(), CityPermission.MONEY_WITHDRAW))) { - MessagesManager.sendMessage(player, Component.text("Tu n'as pas la permission de prendre de l'argent à ta ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, + TranslationManager.translation("feature.city.bank.errors.no_permission_withdraw"), + Prefix.CITY, MessageType.ERROR, false); return; } @@ -129,11 +126,8 @@ public void onInventoryClick(InventoryClickEvent click) { })); inventory.put(18, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.itemName(Component.text("§aRetour")); - itemMeta.lore(List.of( - Component.text("§7Vous allez retourner au menu précédent"), - Component.text("§e§lCLIQUEZ ICI POUR CONFIRMER") - )); + itemMeta.itemName(TranslationManager.translation("messages.menus.back")); + itemMeta.lore(TranslationManager.translationLore("feature.city.bank.menu.back_lore")); }, true)); diff --git a/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankWithdrawMenu.java b/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankWithdrawMenu.java index 170956ba3..8580cba0a 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankWithdrawMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/bank/menu/CityBankWithdrawMenu.java @@ -11,7 +11,7 @@ import fr.openmc.core.features.economy.EconomyManager; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.TextDecoration; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; @@ -33,7 +33,7 @@ public CityBankWithdrawMenu(Player owner) { @Override public @NotNull Component getName() { - return Component.text("Menu de la banque de ville - Retirer"); + return TranslationManager.translation("feature.city.bank.menu.withdraw.name"); } @Override @@ -67,21 +67,17 @@ public void onInventoryClick(InventoryClickEvent click) { List loreBankWithdrawAll; if (hasPermissionMoneyTake) { - loreBankWithdrawAll = List.of( - Component.text("§7Tout l'argent placé dans la §6banque de la ville §7vous sera donné"), - Component.empty(), - Component.text("§7Montant qui vous sera donné : §d" + EconomyManager.getFormattedSimplifiedNumber(moneyBankCity) + " ").append(Component.text(EconomyManager.getEconomyIcon()).decoration(TextDecoration.ITALIC, false)), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR PRENDRE") + loreBankWithdrawAll = TranslationManager.translationLore( + "feature.city.bank.menu.withdraw.all.lore", + Component.text(EconomyManager.getFormattedSimplifiedNumber(moneyBankCity)).color(NamedTextColor.LIGHT_PURPLE), + Component.text(EconomyManager.getEconomyIcon()).color(NamedTextColor.LIGHT_PURPLE) ); } else { - loreBankWithdrawAll = List.of( - TranslationManager.translation("messages.global.cannot_do_this") - ); + loreBankWithdrawAll = TranslationManager.translationLore("messages.global.cannot_do_this"); } inventory.put(11, new ItemBuilder(this, new ItemStack(Material.DISPENSER, 64), itemMeta -> { - itemMeta.itemName(Component.text("§7Prendre l'§6argent de votre ville")); + itemMeta.itemName(TranslationManager.translation("feature.city.bank.menu.withdraw.all.title")); itemMeta.lore(loreBankWithdrawAll); }).setOnClick(inventoryClickEvent -> { city.withdrawCityBank(player, String.valueOf(moneyBankCity)); @@ -91,21 +87,17 @@ public void onInventoryClick(InventoryClickEvent click) { List loreBankWithdrawHalf; if (hasPermissionMoneyTake) { - loreBankWithdrawHalf = List.of( - Component.text("§7La moitié de l'argent sera pris de la §6banque de votre ville §7pour vous le donner"), - Component.empty(), - Component.text("§7Montant qui vous sera donné : §d" + EconomyManager.getFormattedSimplifiedNumber(halfMoneyBankCity) + " ").append(Component.text(EconomyManager.getEconomyIcon()).decoration(TextDecoration.ITALIC, false)), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR DEPOSER") + loreBankWithdrawHalf = TranslationManager.translationLore( + "feature.city.bank.menu.withdraw.half.lore", + Component.text(EconomyManager.getFormattedSimplifiedNumber(halfMoneyBankCity)).color(NamedTextColor.LIGHT_PURPLE), + Component.text(EconomyManager.getEconomyIcon()).color(NamedTextColor.LIGHT_PURPLE) ); } else { - loreBankWithdrawHalf = List.of( - TranslationManager.translation("messages.global.cannot_do_this") - ); + loreBankWithdrawHalf = TranslationManager.translationLore("messages.global.cannot_do_this"); } inventory.put(13, new ItemBuilder(this, new ItemStack(Material.DISPENSER, 32), itemMeta -> { - itemMeta.itemName(Component.text("§7Prendre la moitié de l'§6argent de la ville")); + itemMeta.itemName(TranslationManager.translation("feature.city.bank.menu.withdraw.half.title")); itemMeta.lore(loreBankWithdrawHalf); }).setOnClick(inventoryClickEvent -> { city.withdrawCityBank(player, String.valueOf(halfMoneyBankCity)); @@ -116,23 +108,18 @@ public void onInventoryClick(InventoryClickEvent click) { List loreBankWithdrawInput; if (hasPermissionMoneyTake) { - loreBankWithdrawInput = List.of( - Component.text("§7L'argent demandé sera pris dans la §6banque de la ville §7pour vous le donner"), - Component.text("§e§lCLIQUEZ ICI POUR INDIQUER LE MONTANT") - ); + loreBankWithdrawInput = TranslationManager.translationLore("feature.city.bank.menu.withdraw.input.lore"); } else { - loreBankWithdrawInput = List.of( - TranslationManager.translation("messages.global.cannot_do_this") - ); + loreBankWithdrawInput = TranslationManager.translationLore("messages.global.cannot_do_this"); } inventory.put(15, new ItemBuilder(this, Material.OAK_SIGN, itemMeta -> { - itemMeta.itemName(Component.text("§7Prendre un §6montant précis")); + itemMeta.itemName(TranslationManager.translation("feature.city.bank.menu.withdraw.input.title")); itemMeta.lore(loreBankWithdrawInput); }).setOnClick(inventoryClickEvent -> { if (!CityBankConditions.canCityWithdraw(city, player)) return; - DialogInput.send(player, Component.text("Entrez le montant que vous voulez retirer"), MAX_LENGTH, input -> { + DialogInput.send(player, TranslationManager.translation("feature.city.bank.menu.withdraw.input.prompt"), MAX_LENGTH, input -> { if (input == null) return; city.withdrawCityBank(player, input); } @@ -141,11 +128,8 @@ public void onInventoryClick(InventoryClickEvent click) { })); inventory.put(18, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.itemName(Component.text("§aRetour")); - itemMeta.lore(List.of( - Component.text("§7Vous allez retourner au menu précédent"), - Component.text("§e§lCLIQUEZ ICI POUR CONFIRMER") - )); + itemMeta.itemName(TranslationManager.translation("messages.menus.back")); + itemMeta.lore(TranslationManager.translationLore("feature.city.bank.menu.back_lore")); }, true)); return inventory; diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/MascotsManager.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/MascotsManager.java index 4f20f0405..96541680f 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/MascotsManager.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/MascotsManager.java @@ -19,7 +19,10 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.*; import org.bukkit.attribute.Attribute; import org.bukkit.configuration.file.YamlConfiguration; @@ -35,17 +38,12 @@ import java.io.File; import java.io.IOException; import java.sql.SQLException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; +import java.util.*; public class MascotsManager { public static final List movingMascots = new ArrayList<>(); public static final HashMap mascotsByCityUUID = new HashMap<>(); public static final HashMap mascotsByEntityUUID = new HashMap<>(); - public static final String PLACEHOLDER_MASCOT_NAME = "§l%s §c%.0f/%.0f❤"; - public static final String DEAD_MASCOT_NAME = "☠ §cMascotte Morte"; public static NamespacedKey mascotsKey; private static Dao mascotsDao; @@ -189,11 +187,11 @@ public static void upgradeMascots(UUID cityUUID) { mob.setHealth(maxHealth); } - mob.customName(Component.text(PLACEHOLDER_MASCOT_NAME.formatted( + mob.customName(getAliveMascotName( city.getName(), mob.getHealth(), maxHealth - ))); + )); } public static void changeMascotsSkin(Mascot mascots, EntityType skin, Player player, int aywenite) { @@ -208,7 +206,9 @@ public static void changeMascotsSkin(Mascot mascots, EntityType skin, Player pla // to avoid the suffocation of the mascot when it changes skin to a spider for exemple if (mascotsLoc.clone().add(0, 1, 0).getBlock().getType().isSolid() && entityMascot.getHeight() <= 1.0) { - MessagesManager.sendMessage(player, Component.text("Libérez de l'espace au dessus de la mascotte pour changer son skin"), Prefix.CITY, MessageType.INFO, false); + MessagesManager.sendMessage(player, + TranslationManager.translation("feature.city.mascots.skin.error.space_above"), + Prefix.CITY, MessageType.INFO, false); return; } @@ -218,7 +218,9 @@ public static void changeMascotsSkin(Mascot mascots, EntityType skin, Player pla Material blockType = checkLoc.getBlock().getType(); if (blockType != Material.AIR) { - MessagesManager.sendMessage(player, Component.text("Libérez de l'espace tout autour de la mascotte pour changer son skin"), Prefix.CITY, MessageType.INFO, false); + MessagesManager.sendMessage(player, + TranslationManager.translation("feature.city.mascots.skin.error.space_around"), + Prefix.CITY, MessageType.INFO, false); return; } } @@ -267,11 +269,11 @@ private static void setMascotsData(LivingEntity mob, String cityName, double max mob.setPersistent(true); mob.setRemoveWhenFarAway(false); - mob.customName(Component.text(PLACEHOLDER_MASCOT_NAME.formatted( + mob.customName(getAliveMascotName( cityName, baseHealth, maxHealth - ))); + )); mob.setCustomNameVisible(true); mob.addPotionEffect(new PotionEffect(PotionEffectType.FIRE_RESISTANCE, Integer.MAX_VALUE, 0, true, true)); @@ -292,4 +294,19 @@ private static void setMascotsData(LivingEntity mob, String cityName, double max equipment.setItemInOffHandDropChance(0f); } + public static Component getAliveMascotName(String cityName, double health, double maxHealth) { + String formattedHealth = String.format(Locale.US, "%.0f", health); + String formattedMaxHealth = String.format(Locale.US, "%.0f", maxHealth); + return TranslationManager.translation( + "feature.city.mascots.name.alive", + Component.text(cityName).decorate(TextDecoration.BOLD), + Component.text(formattedHealth).color(NamedTextColor.RED), + Component.text("/" + formattedMaxHealth + "❤").color(NamedTextColor.RED) + ); + } + + public static Component getDeadMascotName() { + return TranslationManager.translation("feature.city.mascots.name.dead"); + } + } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/commands/AdminMascotsCommands.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/commands/AdminMascotsCommands.java index b08ddd69b..d97cb2bf3 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/commands/AdminMascotsCommands.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/commands/AdminMascotsCommands.java @@ -7,7 +7,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; -import net.kyori.adventure.text.Component; +import fr.openmc.core.utils.messages.TranslationManager; import org.bukkit.entity.Player; import revxrsal.commands.annotation.Command; import revxrsal.commands.annotation.Named; @@ -28,11 +28,11 @@ public void forceRemoveMascots( City city = CityManager.getCityByName(cityName); if (city == null) { - MessagesManager.sendMessage(sender, Component.text("§cVille inexistante"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(sender, TranslationManager.translation("messages.city.not_found"), Prefix.CITY, MessageType.ERROR, false); return; } MascotsManager.removeMascotsFromCity(city); - MessagesManager.sendMessage(sender, Component.text("§cVille inexistante"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.mascots.admin.remove.success"), Prefix.CITY, MessageType.SUCCESS, false); } } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotImmuneListener.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotImmuneListener.java index e5852c601..764dbd9e0 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotImmuneListener.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotImmuneListener.java @@ -6,7 +6,6 @@ import fr.openmc.core.features.city.CityManager; import fr.openmc.core.features.city.sub.mascots.MascotsManager; import fr.openmc.core.features.city.sub.mascots.models.Mascot; -import net.kyori.adventure.text.Component; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeInstance; import org.bukkit.entity.Entity; @@ -55,10 +54,10 @@ void onEndMascotImmune(CooldownEndEvent event) { AttributeInstance maxHealthInst = mascotMob.getAttribute(Attribute.MAX_HEALTH); if (maxHealthInst == null) return; - entityMascot.customName(Component.text(MascotsManager.PLACEHOLDER_MASCOT_NAME.formatted( + entityMascot.customName(MascotsManager.getAliveMascotName( cityImmune.getName(), mascotMob.getHealth(), maxHealthInst.getValue() - ))); + )); } } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsDamageListener.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsDamageListener.java index 5d9dc2265..956d70fe2 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsDamageListener.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsDamageListener.java @@ -103,7 +103,7 @@ void onMascotTakeDamage(EntityDamageByEntityEvent e) { } if (cityEnemy == null) { - MessagesManager.sendMessage(player, Component.text("§cErreur : La ville ennemie n'a pas été reconnue"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mascots.damage.error.enemy_city_unknown"), Prefix.CITY, MessageType.ERROR, false); e.setCancelled(true); return; } @@ -113,43 +113,48 @@ void onMascotTakeDamage(EntityDamageByEntityEvent e) { CityType cityEnemyType = cityEnemy.getType(); if (cityType == null) { - MessagesManager.sendMessage(player, Component.text("§cErreur : Le type de votre ville n'a pas été reconnue"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mascots.damage.error.city_type_unknown"), Prefix.CITY, MessageType.ERROR, false); e.setCancelled(true); return; } if (cityEnemyType == null) { - MessagesManager.sendMessage(player, Component.text("§cErreur : Le type de la ville ennemie n'a pas été reconnue"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mascots.damage.error.enemy_city_type_unknown"), Prefix.CITY, MessageType.ERROR, false); e.setCancelled(true); return; } if (pdcCityUUID.equals(cityUUID)) { - MessagesManager.sendMessage(player, Component.text("§cVous ne pouvez pas attaquer votre mascotte"), Prefix.CITY, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mascots.damage.error.self_mascot"), Prefix.CITY, MessageType.INFO, false); e.setCancelled(true); return; } if (cityEnemyType.equals(CityType.PEACE)) { - MessagesManager.sendMessage(player, Component.text("§cCette ville est en situation de §apaix"), Prefix.CITY, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mascots.damage.error.enemy_city_peace"), Prefix.CITY, MessageType.INFO, false); e.setCancelled(true); return; } if (cityType.equals(CityType.PEACE)) { - MessagesManager.sendMessage(player, Component.text("§cVotre ville est en situation de §apaix"), Prefix.CITY, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mascots.damage.error.city_peace"), Prefix.CITY, MessageType.INFO, false); e.setCancelled(true); return; } if (cityEnemy.isImmune()) { - MessagesManager.sendMessage(player, Component.text("§cCette mascotte est immunisée pour le moment"), Prefix.CITY, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mascots.damage.error.immune"), Prefix.CITY, MessageType.INFO, false); e.setCancelled(true); return; } if (!city.isInWar() || !cityEnemy.isInWar() || !city.getWar().equals(cityEnemy.getWar())) { - MessagesManager.sendMessage(player, Component.text("§cVous n'êtes pas en guerre contre " + cityEnemy.getName()), Prefix.CITY, MessageType.INFO, false); + MessagesManager.sendMessage(player, + TranslationManager.translation( + "feature.city.mascots.damage.error.not_in_war", + Component.text(cityEnemy.getName()) + ), + Prefix.CITY, MessageType.INFO, false); e.setCancelled(true); return; } @@ -157,14 +162,14 @@ void onMascotTakeDamage(EntityDamageByEntityEvent e) { War citiesWar = city.getWar(); if (citiesWar.getPhase() != War.WarPhase.COMBAT) { - MessagesManager.sendMessage(player, Component.text("§cVous ne pouvez attaquer la mascotte que pendant la phase de combat"), Prefix.CITY, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mascots.damage.error.not_in_combat"), Prefix.CITY, MessageType.INFO, false); e.setCancelled(true); return; } if (!citiesWar.getAttackers().contains(player.getUniqueId()) && !citiesWar.getDefenders().contains(player.getUniqueId())) { - MessagesManager.sendMessage(player, Component.text("§cVous ne pouvez pas attaquer la mascotte car vous n'avez pas été sélectionné pour la guerre"), Prefix.CITY, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mascots.damage.error.not_selected_for_war"), Prefix.CITY, MessageType.INFO, false); e.setCancelled(true); return; } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsDeathListener.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsDeathListener.java index de64900bc..7c4224c01 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsDeathListener.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsDeathListener.java @@ -7,7 +7,6 @@ import fr.openmc.core.features.city.sub.mascots.utils.MascotUtils; import fr.openmc.core.features.city.sub.war.War; import fr.openmc.core.features.city.sub.war.WarManager; -import net.kyori.adventure.text.Component; import org.bukkit.Color; import org.bukkit.FireworkEffect; import org.bukkit.Location; @@ -25,8 +24,6 @@ import java.util.List; import java.util.UUID; -import static fr.openmc.core.features.city.sub.mascots.MascotsManager.DEAD_MASCOT_NAME; - public class MascotsDeathListener implements Listener { @EventHandler void onMascotDied(EntityDeathEvent e) { @@ -47,7 +44,7 @@ void onMascotDied(EntityDeathEvent e) { if (mascot == null) return; mascot.setAlive(false); - entity.customName(Component.text(DEAD_MASCOT_NAME)); + entity.customName(MascotsManager.getDeadMascotName()); e.setCancelled(true); diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsInteractionListener.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsInteractionListener.java index 12ad4f66a..555a2db13 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsInteractionListener.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsInteractionListener.java @@ -12,7 +12,6 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import lombok.SneakyThrows; -import net.kyori.adventure.text.Component; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -53,7 +52,7 @@ void onInteractWithMascots(PlayerInteractEntityEvent e) { if (mascotsUUID.equals(cityUUID)) { Mascot mascot = city.getMascot(); if (mascot == null) { - MessagesManager.sendMessage(player, Component.text("§cAucune mascotte trouvée - Veuillez contacter le staff"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mascots.interaction.error.not_found"), Prefix.CITY, MessageType.ERROR, false); return; } if (!mascot.isAlive()) { @@ -62,7 +61,7 @@ void onInteractWithMascots(PlayerInteractEntityEvent e) { new MascotMenu(player, mascot).open(); } } else { - MessagesManager.sendMessage(player, Component.text("§cCette mascotte ne vous appartient pas"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mascots.interaction.error.not_owner"), Prefix.CITY, MessageType.ERROR, false); } } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsRenameListener.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsRenameListener.java index b1f5fe94e..d6105d169 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsRenameListener.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsRenameListener.java @@ -8,6 +8,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.entity.Entity; @@ -55,6 +56,6 @@ public void onRenameWithNameTag(PlayerInteractEntityEvent e) { } } - MessagesManager.sendMessage(player, Component.text("§cVous ne pouvez pas renommer cette mascotte"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mascots.rename.error"), Prefix.CITY, MessageType.ERROR, false); } } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotMenu.java index 610628ca5..eff3ec79f 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotMenu.java @@ -23,6 +23,8 @@ import io.papermc.paper.datacomponent.DataComponentTypes; import net.kyori.adventure.key.Key; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Chunk; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; @@ -57,7 +59,10 @@ public MascotMenu(Player owner, Mascot mascot) { @Override public @NotNull Component getName() { - return Component.text("Menu de §cmascotte (niv. " + city.getMascot().getLevel() + ")"); + return TranslationManager.translation( + "feature.city.mascots.menu.main.name", + Component.text(city.getMascot().getLevel()) + ).color(NamedTextColor.GRAY); } @Override @@ -82,19 +87,15 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { Mascot mascot = city.getMascot(); if (mascot == null) { - MessagesManager.sendMessage(player, Component.text("§cUne erreur est survenue, veuillez contacter le Staff"), Prefix.OPENMC, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("api.menulib.an_error_occurred"), Prefix.OPENMC, MessageType.ERROR, false); player.closeInventory(); return map; } - List loreSkinMascot = List.of( - Component.text("§7Vous pouvez changer l'apparence de votre §cmascotte"), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR CHANGER DE SKIN") - ); + List loreSkinMascot = TranslationManager.translationLore("feature.city.mascots.menu.main.skin.lore"); map.put(11, new ItemBuilder(this, this.mascot.getMascotEgg(), itemMeta -> { - itemMeta.displayName(Component.text("§7Le skin de la §cmascotte")); + itemMeta.displayName(TranslationManager.translation("feature.city.mascots.menu.main.skin.title")); itemMeta.lore(loreSkinMascot); itemMeta.addEnchant(Enchantment.EFFICIENCY, 1, true); }) @@ -112,21 +113,16 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { List lorePosMascot; if (!DynamicCooldownManager.isReady(this.mascot.getMascotUUID(), "mascots:move")) { - lorePosMascot = List.of( - Component.text("§7Vous ne pouvez pas changer la position de votre §cmascotte"), - Component.empty(), - Component.text("§cCooldown §7: " + DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(this.mascot.getMascotUUID(), "mascots:move"))) + lorePosMascot = TranslationManager.translationLore( + "feature.city.mascots.menu.main.move.lore.cooldown", + Component.text(DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(this.mascot.getMascotUUID(), "mascots:move"))).color(NamedTextColor.GRAY) ); } else { - lorePosMascot = List.of( - Component.text("§7Vous pouvez changer la position de votre §cmascotte"), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR LA CHANGER DE POSITION") - ); + lorePosMascot = TranslationManager.translationLore("feature.city.mascots.menu.main.move.lore.ready"); } return new ItemBuilder(this, Material.CHEST, itemMeta -> { - itemMeta.displayName(Component.text("§7Déplacer votre §cmascotte")); + itemMeta.displayName(TranslationManager.translation("feature.city.mascots.menu.main.move.title")); itemMeta.lore(lorePosMascot); itemMeta.addEnchant(Enchantment.EFFICIENCY, 1, true); }) @@ -141,7 +137,7 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { } if (!ItemUtils.hasAvailableSlot(getOwner())) { - MessagesManager.sendMessage(getOwner(), Component.text("Libérez de la place dans votre inventaire"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(getOwner(), TranslationManager.translation("feature.city.mascots.menu.main.move.error.inventory_space"), Prefix.CITY, MessageType.ERROR, false); return; } @@ -161,10 +157,8 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { ItemMeta meta = mascotsMoveItem.getItemMeta(); if (meta != null) { - List info = new ArrayList<>(); - info.add(Component.text("§cVotre mascotte sera posé a l'emplacement du coffre")); - info.add(Component.text("§cCe coffre n'est pas retirable")); - meta.displayName(Component.text("§7Déplacer votre §lmascotte")); + List info = TranslationManager.translationLore("feature.city.mascots.menu.main.move.item.lore"); + meta.displayName(TranslationManager.translation("feature.city.mascots.menu.main.move.item.title")); meta.lore(info); } mascotsMoveItem.setItemMeta(meta); @@ -174,8 +168,8 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { mascotsMoveItem, "mascots:moveInteraction", 120, - Component.text("Temps restant : %sec%s"), - Component.text("§cDéplacement de la mascotte annulée"), + TranslationManager.translation("feature.city.mascots.menu.main.move.interaction.remaining"), + TranslationManager.translation("feature.city.mascots.menu.main.move.interaction.cancelled"), mascotMove -> { if (mascotMove == null) return true; if (!movingMascots.contains(cityUUID)) return false; @@ -190,7 +184,9 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { int chunkZ = chunk.getZ(); if (!city.hasChunk(chunkX, chunkZ)) { - MessagesManager.sendMessage(player, Component.text("§cImpossible de déplacer la mascotte ici car ce chunk ne vous appartient pas ou est adjacent à une autre ville"), Prefix.CITY, MessageType.INFO, false); + MessagesManager.sendMessage(player, + TranslationManager.translation("feature.city.mascots.menu.main.move.error.invalid_chunk"), + Prefix.CITY, MessageType.INFO, false); return false; } @@ -221,15 +217,21 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { int currentMascotLevel = mascot.getLevel(); if (mascotsLevels.equals(MascotsLevels.level10)) { - requiredAmount.add(Component.text("§7Niveau max atteint")); + requiredAmount.add(TranslationManager.translation("feature.city.mascots.menu.main.upgrade.max_level")); } else if (currentMascotLevel >= maxMascotLevel) { - requiredAmount.add(Component.text("§cVous devez être niveau " + (maxMascotLevel + 1) + " pour améliorer la mascotte")); + requiredAmount.add(TranslationManager.translation( + "feature.city.mascots.menu.main.upgrade.level_required", + Component.text(maxMascotLevel + 1).decoration(TextDecoration.ITALIC, false) + )); } else { - requiredAmount.add(Component.text("§7Nécessite §d" + mascotsLevels.getUpgradeCost() + " d'Aywenites")); + requiredAmount.add(TranslationManager.translation( + "feature.city.mascots.menu.main.upgrade.cost", + Component.text(mascotsLevels.getUpgradeCost()).color(NamedTextColor.LIGHT_PURPLE).decoration(TextDecoration.ITALIC, false) + )); } ItemBuilder itemBuilder = new ItemBuilder(this, Material.PAPER, itemMeta -> { - itemMeta.displayName(Component.text("§7Améliorer votre §cMascotte")); + itemMeta.displayName(TranslationManager.translation("feature.city.mascots.menu.main.upgrade.title")); itemMeta.lore(requiredAmount); itemMeta.addEnchant(Enchantment.EFFICIENCY, 1, true); }).hide(DataComponentTypes.ENCHANTMENTS, DataComponentTypes.ATTRIBUTE_MODIFIERS); @@ -250,11 +252,16 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { int aywenite = mascotsLevels.getUpgradeCost(); if (ItemUtils.takeAywenite(player, aywenite)) { upgradeMascots(cityUUID); - MessagesManager.sendMessage(player, Component.text("Vous avez amélioré votre mascotte au §cniveau " + mascot.getLevel()), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, + TranslationManager.translation( + "feature.city.mascots.menu.main.upgrade.success", + Component.text(mascot.getLevel()).color(NamedTextColor.RED) + ), + Prefix.CITY, MessageType.ERROR, false); player.closeInventory(); return; } - MessagesManager.sendMessage(player, Component.text("Vous n'avez pas assez d'§dAywenite"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mascots.menu.main.upgrade.not_enough_aywenite"), Prefix.CITY, MessageType.ERROR, false); } else { MessagesManager.sendMessage(player, TranslationManager.translation("messages.global.cannot_do_this"), Prefix.CITY, MessageType.ERROR, false); @@ -263,23 +270,20 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { })); map.put(18, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.displayName(Component.text("§aRetour")); - itemMeta.lore(List.of(Component.text("§7Retourner au menu précédent"))); + itemMeta.displayName(TranslationManager.translation("messages.menus.back")); + itemMeta.lore(TranslationManager.translationLore("messages.menus.back_lore")); }, true)); if (city.isImmune()) { Supplier immunityItemSupplier = () -> { - List lore = List.of( - Component.text("§7Vous avez une §bimmunité §7sur votre §cmascotte"), - Component.text("§cTemps restant §7: " + DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(city.getUniqueId(), "city:immunity"))), - Component.text("§7Pour réduire le temps de 1 heure, vous devez posséder de :"), - Component.text("§8- §d" + AYWENITE_REDUCE + " d'Aywenite"), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR REDUIRE LE TEMPS D'IMMUNITÉ") + List lore = TranslationManager.translationLore( + "feature.city.mascots.menu.main.immunity.lore", + Component.text(DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(city.getUniqueId(), "city:immunity"))).color(NamedTextColor.GRAY), + Component.text(AYWENITE_REDUCE).color(NamedTextColor.LIGHT_PURPLE).decoration(TextDecoration.ITALIC, false) ); return new ItemBuilder(this, Material.DIAMOND, itemMeta -> { - itemMeta.displayName(Component.text("§7Votre §cmascotte §7est §bimmunisée§7!")); + itemMeta.displayName(TranslationManager.translation("feature.city.mascots.menu.main.immunity.title")); itemMeta.lore(lore); }).setOnClick(inventoryClickEvent -> { if (city == null) { @@ -291,7 +295,12 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { if (!ItemUtils.takeAywenite(player, AYWENITE_REDUCE)) return; DynamicCooldownManager.reduceCooldown(player, city.getUniqueId(), "city:immunity", COOLDOWN_REDUCE); - MessagesManager.sendMessage(player, Component.text("Vous venez de dépenser §d" + AYWENITE_REDUCE + " d'Aywenite §fpour §bréduire §fle cooldown d'une heure"), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, + TranslationManager.translation( + "feature.city.mascots.menu.main.immunity.reduce.success", + Component.text(AYWENITE_REDUCE).color(NamedTextColor.LIGHT_PURPLE) + ), + Prefix.CITY, MessageType.SUCCESS, false); }); }; diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotsDeadMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotsDeadMenu.java index 71bd85f27..42213ead7 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotsDeadMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotsDeadMenu.java @@ -15,6 +15,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; @@ -42,7 +43,7 @@ public MascotsDeadMenu(Player owner, UUID cityUUID) { @Override public @NotNull Component getName() { - return Component.text("Menu des mascottes [DEAD]"); + return TranslationManager.translation("feature.city.mascots.menu.dead.name"); } @Override @@ -67,15 +68,11 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { Supplier reduceItemSupplier = () -> { return new ItemBuilder(this, Material.DIAMOND, itemMeta -> { - itemMeta.displayName(Component.text("§7Votre §cmascotte §7est morte")); - itemMeta.lore(List.of( - Component.text("§7Votre §cmascotte est morte§7, vous pouvez faire réduire le temps de réanimation"), - Component.text("§7qui est actuellement de :"), - Component.text("§8 - §c" + DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(cityUUID, "city:immunity"))), - Component.text("§7Pour réduire le temps de 1 heure, vous devez posséder de :"), - Component.text("§8- §d" + AYWENITE_REDUCE + " d'Aywenite"), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR REDUIRE LE TEMPS DE REANIMATION") + itemMeta.displayName(TranslationManager.translation("feature.city.mascots.menu.dead.title")); + itemMeta.lore(TranslationManager.translationLore( + "feature.city.mascots.menu.dead.lore", + Component.text(DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(cityUUID, "city:immunity"))), + Component.text(AYWENITE_REDUCE).color(NamedTextColor.LIGHT_PURPLE) )); }).setOnClick(inventoryClickEvent -> { City city = CityManager.getCity(cityUUID); @@ -86,18 +83,23 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { } if (!ItemUtils.takeAywenite(player, AYWENITE_REDUCE)) return; - + DynamicCooldownManager.reduceCooldown(player, cityUUID, "city:immunity", COOLDOWN_REDUCE); - MessagesManager.sendMessage(player, Component.text("Vous venez de dépenser §d" + AYWENITE_REDUCE + " d'Aywenite §fpour §bréduire §fle cooldown d'une heure"), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, + TranslationManager.translation( + "feature.city.mascots.menu.dead.reduce.success", + Component.text(AYWENITE_REDUCE).color(NamedTextColor.LIGHT_PURPLE) + ), + Prefix.CITY, MessageType.SUCCESS, false); }); }; MenuUtils.runDynamicItem(player, this, 13, reduceItemSupplier) .runTaskTimer(OMCPlugin.getInstance(), 0L, 20L); map.put(18, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.displayName(Component.text("§aRetour")); - itemMeta.lore(List.of(Component.text("§7Retourner au Menu Précédent"))); + itemMeta.displayName(TranslationManager.translation("messages.menus.back")); + itemMeta.lore(TranslationManager.translationLore("messages.menus.back_lore")); }, true)); return map; diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotsSkinMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotsSkinMenu.java index 27c5fff77..05df081b9 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotsSkinMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotsSkinMenu.java @@ -13,7 +13,10 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.Player; @@ -44,7 +47,7 @@ public MascotsSkinMenu(Player owner, Material egg, Mascot mascots) { @Override public @NotNull Component getName() { - return Component.text("Menu des skins des mascottes"); + return TranslationManager.translation("feature.city.mascots.menu.skin.name"); } @Override @@ -75,8 +78,8 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { } map.put(18, new ItemBuilder(this, Material.ARROW, meta -> { - meta.displayName(Component.text("§aRetour")); - meta.lore(List.of(Component.text("§7Retourner au menu précédent"))); + meta.displayName(TranslationManager.translation("messages.menus.back")); + meta.lore(TranslationManager.translationLore("messages.menus.back_lore")); }, true)); return map; @@ -96,16 +99,22 @@ private ItemBuilder createMascotButton(City city, MascotType type) { List loreMascots = new ArrayList<>(); if (city.getLevel() < MascotsSkinUnlockRewards.getLevelRequiredSkin(type)) { - loreMascots.add(Component.text("§cVous devez être niveau " + MascotsSkinUnlockRewards.getLevelRequiredSkin(type) + " pour débloquer ce skin")); + loreMascots.add(TranslationManager.translation( + "feature.city.mascots.menu.skin.lore.level_required", + Component.text(MascotsSkinUnlockRewards.getLevelRequiredSkin(type)).color(NamedTextColor.RED).decoration(TextDecoration.ITALIC, false) + )); } else { - loreMascots.add(Component.text("§cVous devez avoir §d" + type.getPrice() + " Aywenite")); + loreMascots.add(TranslationManager.translation( + "feature.city.mascots.menu.skin.lore.price_required", + Component.text(type.getPrice()).color(NamedTextColor.LIGHT_PURPLE).decoration(TextDecoration.ITALIC, false) + )); } return new ItemBuilder(this, type.getMascotItem(egg.equals(type.getSpawnEgg())), meta -> meta.lore(loreMascots)) .setOnClick(event -> { if (city.getLevel() < MascotsSkinUnlockRewards.getLevelRequiredSkin(type)) { - MessagesManager.sendMessage(getOwner(), Component.text("Vous n'avez pas le niveau de ville requis pour mettre ce skin"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(getOwner(), TranslationManager.translation("feature.city.mascots.menu.skin.error.level_required"), Prefix.CITY, MessageType.ERROR, false); return; } if (!egg.equals(type.getSpawnEgg())) { @@ -116,7 +125,7 @@ private ItemBuilder createMascotButton(City city, MascotType type) { getOwner().playSound(getOwner().getLocation(), selectSound, 1, 1); getOwner().closeInventory(); } else { - MessagesManager.sendMessage(getOwner(), Component.text("Vous n'avez pas assez d'§dAywenite"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(getOwner(), TranslationManager.translation("feature.city.mascots.menu.skin.error.not_enough_aywenite"), Prefix.CITY, MessageType.ERROR, false); getOwner().closeInventory(); } } else { diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/models/MascotType.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/models/MascotType.java index a6c19e6ae..a0bb450b8 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/models/MascotType.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/models/MascotType.java @@ -2,6 +2,7 @@ import fr.openmc.core.utils.EntityUtils; import fr.openmc.core.utils.EnumUtils; +import fr.openmc.core.utils.messages.TranslationManager; import lombok.Getter; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; @@ -10,7 +11,6 @@ import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; -import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.function.Function; @@ -63,14 +63,10 @@ private ItemStack createMascotItem(boolean selected) { .decoration(TextDecoration.ITALIC, TextDecoration.State.FALSE) ); - Component lore = Component.text() - .append(Component.text("Nécéssite ").color(NamedTextColor.GRAY)) - .append(Component.text(price, NamedTextColor.LIGHT_PURPLE)) - .append(Component.text(" d'Aywenites")) - .decoration(TextDecoration.ITALIC, TextDecoration.State.FALSE) - .build(); - - meta.lore(Collections.singletonList(lore)); + meta.lore(TranslationManager.translationLore( + "feature.city.mascots.skin.requirement", + Component.text(price).color(NamedTextColor.LIGHT_PURPLE).decoration(TextDecoration.ITALIC, false) + )); if (selected) meta.setEnchantmentGlintOverride(true); diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/utils/MascotRegenerationUtils.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/utils/MascotRegenerationUtils.java index cc969cc2b..06043a599 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/utils/MascotRegenerationUtils.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/utils/MascotRegenerationUtils.java @@ -3,7 +3,6 @@ import fr.openmc.core.OMCPlugin; import fr.openmc.core.features.city.sub.mascots.MascotsManager; import fr.openmc.core.features.city.sub.mascots.models.Mascot; -import net.kyori.adventure.text.Component; import org.bukkit.attribute.Attribute; import org.bukkit.entity.LivingEntity; import org.bukkit.persistence.PersistentDataContainer; @@ -68,11 +67,11 @@ public void run() { double maxHealth = mascots.getAttribute(Attribute.MAX_HEALTH).getValue(); if (mascots.getHealth() >= maxHealth) { - mascots.customName(Component.text(MascotsManager.PLACEHOLDER_MASCOT_NAME.formatted( + mascots.customName(MascotsManager.getAliveMascotName( mascot.getCity().getName(), mascots.getHealth(), maxHealth - ))); + )); regenTasks.remove(mascot.getMascotUUID()); this.cancel(); return; @@ -80,11 +79,11 @@ public void run() { double newHealth = Math.min(mascots.getHealth() + 1, maxHealth); mascots.setHealth(newHealth); - mascots.customName(Component.text(MascotsManager.PLACEHOLDER_MASCOT_NAME.formatted( + mascots.customName(MascotsManager.getAliveMascotName( mascot.getCity().getName(), mascots.getHealth(), maxHealth - ))); + )); } }; diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/utils/MascotUtils.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/utils/MascotUtils.java index 0b7410679..3068b71d0 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/utils/MascotUtils.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/utils/MascotUtils.java @@ -4,7 +4,6 @@ import fr.openmc.core.features.city.sub.mascots.MascotsManager; import fr.openmc.core.features.city.sub.mascots.models.Mascot; import fr.openmc.core.features.city.sub.mascots.models.MascotType; -import net.kyori.adventure.text.Component; import org.bukkit.Chunk; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeInstance; @@ -18,8 +17,6 @@ import java.util.UUID; import java.util.stream.Collectors; -import static fr.openmc.core.features.city.sub.mascots.MascotsManager.DEAD_MASCOT_NAME; - public class MascotUtils { private static final Set POSSIBLE_MASCOT_TYPES = Arrays.stream(MascotType.values()) .map(MascotType::getEntityType) @@ -72,13 +69,13 @@ public static void updateDisplayName(LivingEntity entityMascot, Mascot mascot, d if (healthAfterDamage < 0) healthAfterDamage = 0; if (!mascot.isAlive()) { - entityMascot.customName(Component.text(DEAD_MASCOT_NAME)); - } else { - entityMascot.customName(Component.text(MascotsManager.PLACEHOLDER_MASCOT_NAME.formatted( - mascot.getCity().getName(), - healthAfterDamage, - maxHealth - ))); + entityMascot.customName(MascotsManager.getDeadMascotName()); + } else { + entityMascot.customName(MascotsManager.getAliveMascotName( + mascot.getCity().getName(), + healthAfterDamage, + maxHealth + )); entityMascot.setHealth(healthAfterDamage); } } diff --git a/src/main/resources/translations/lang.properties b/src/main/resources/translations/lang.properties index e34edccbc..dd35fb98e 100644 --- a/src/main/resources/translations/lang.properties +++ b/src/main/resources/translations/lang.properties @@ -38,6 +38,7 @@ api.menulib.menu.confirm.title=Menu de Confirmation messages.global.cannot_do_this=Vous n'avez pas le droit de faire ceci. messages.global.missing_arg=Vous devez spécifier un argument. messages.global.player_not_found=Le joueur n'a pas été trouvé. +messages.global.invalid_input=Veuillez mettre une entrée correcte messages.global.player_missing_money=Tu n'as pas assez d'argent. messages.global.cancel=Annuler @@ -640,6 +641,64 @@ feature.city.menus.members.manage.back_lore=Vous allez retourner au menu p
CLIQUEZ ICI POUR CONFIRMER # * SUB FEATURES +# - Bank +feature.city.bank.menu.name=Menu des villes - Banque +feature.city.bank.menu.deposit.title=Déposer de l'argent +feature.city.bank.menu.deposit.lore=Votre argent sera placé dans la banque de la ville \ +
CLIQUEZ ICI POUR DEPOSER + +feature.city.bank.menu.withdraw.title=Retirer de l'argent +feature.city.bank.menu.withdraw.lore=L'argent sera pris dans la banque de la ville \ +
CLIQUEZ ICI POUR INDIQUER LE MONTANT + +feature.city.bank.menu.balance.title=L'argent de votre ville +feature.city.bank.menu.balance.lore=La ville a actuellement %1$s %2$s \ +
Votre prochain intérêt est de %3$s% dans %4$s +feature.city.bank.menu.back_lore=Vous allez retourner au menu précédent \ +
CLIQUEZ ICI POUR CONFIRMER + +feature.city.bank.menu.deposit.name=Menu de la banque de ville - Remplir +feature.city.bank.menu.deposit.all.title=Déposer tout votre argent +feature.city.bank.menu.deposit.all.lore=Tout votre argent sera placé dans la banque de la ville \ +
Montant qui sera deposé : %1$s %2$s \ +
CLIQUEZ ICI POUR DEPOSER + +feature.city.bank.menu.deposit.half.title=Déposer la moitié de votre argent +feature.city.bank.menu.deposit.half.lore=La moitié de votre argent sera placé dans la banque de la ville \ +
Montant qui sera deposé : %1$s %2$s \ +
CLIQUEZ ICI POUR DEPOSER + +feature.city.bank.menu.deposit.input.title=Déposer un montant précis +feature.city.bank.menu.deposit.input.lore=Votre argent sera placé dans la banque de la ville \ +
CLIQUEZ ICI POUR INDIQUER LE MONTANT +feature.city.bank.menu.deposit.input.prompt=Entrez le montant que vous voulez déposer + +feature.city.bank.menu.withdraw.name=Menu de la banque de ville - Retirer +feature.city.bank.menu.withdraw.all.title=Prendre l'argent de votre ville +feature.city.bank.menu.withdraw.all.lore=Tout l'argent placé dans la banque de la ville vous sera donné \ +
Montant qui vous sera donné : %1$s %2$s \ +
CLIQUEZ ICI POUR PRENDRE + +feature.city.bank.menu.withdraw.half.title=Prendre la moitié de l'argent de la ville +feature.city.bank.menu.withdraw.half.lore=La moitié de l'argent sera pris de la banque de votre ville pour vous le donner \ +
Montant qui vous sera donné : %1$s %2$s \ +
CLIQUEZ ICI POUR PRENDRE + +feature.city.bank.menu.withdraw.input.title=Prendre un montant précis +feature.city.bank.menu.withdraw.input.lore=L'argent demandé sera pris dans la banque de la ville pour vous le donner \ +
CLIQUEZ ICI POUR INDIQUER LE MONTANT +feature.city.bank.menu.withdraw.input.prompt=Entrez le montant que vous voulez retirer + +feature.city.bank.errors.feature_locked=Vous n'avez pas débloqué cette feature ! Veuillez améliorer votre ville au niveau %1$s ! +feature.city.bank.errors.no_permission_deposit=Tu n'as pas la permission de donner de l'argent à ta ville +feature.city.bank.errors.no_permission_balance=Tu n'as pas la permission de consulter l'argent de la ville +feature.city.bank.errors.no_permission_withdraw=Tu n'as pas la permission de prendre de l'argent de ta ville +feature.city.bank.errors.war_blocked=Votre ville est en situation de guerre, vous ne pouvez faire cela +feature.city.bank.errors.min_level=Pour utiliser la banque de ville, votre ville doit être niveau 2 minimum ! +feature.city.bank.errors.not_enough_city_money=La banque de ta ville n'a pas assez d'argent. +feature.city.bank.deposit.success=Tu as déposé %1$s dans la banque de ta ville. +feature.city.bank.withdraw.success=%1$s %2$s ont été transférés à ton compte. + # - City Chat feature.city.chat.entered=Vous avez rejoint le chat de ville feature.city.chat.leaved=Vous avez quitté le chat de ville @@ -684,6 +743,80 @@ feature.city.grade.remove_grade=Vous avez retiré le grade %1$s feature.city.grade.assign_grade=Vous avez assigné le grade %1$s à %2$s # - Mascots +# Menus +feature.city.mascots.menu.main.name=Menu de mascotte (niv. %1$s) +feature.city.mascots.menu.main.skin.title=Le skin de la mascotte +feature.city.mascots.menu.main.skin.lore=Vous pouvez changer l'apparence de votre mascotte \ +
CLIQUEZ ICI POUR CHANGER DE SKIN + +feature.city.mascots.menu.main.move.title=Déplacer votre mascotte +feature.city.mascots.menu.main.move.lore.ready=Vous pouvez changer la position de votre mascotte \ +
CLIQUEZ ICI POUR LA CHANGER DE POSITION +feature.city.mascots.menu.main.move.lore.cooldown=Vous ne pouvez pas changer la position de votre mascotte \ +
Cooldown : %1$s +feature.city.mascots.menu.main.move.item.title=Déplacer votre mascotte +feature.city.mascots.menu.main.move.item.lore=Votre mascotte sera posée à l'emplacement du coffre \ +
Ce coffre n'est pas retirable +feature.city.mascots.menu.main.move.interaction.remaining=Temps restant : %%ssec%%s +feature.city.mascots.menu.main.move.interaction.cancelled=Déplacement de la mascotte annulée +feature.city.mascots.menu.main.move.error.inventory_space=Libérez de la place dans votre inventaire +feature.city.mascots.menu.main.move.error.invalid_chunk=Impossible de déplacer la mascotte ici car ce chunk ne vous appartient pas ou est adjacent à une autre ville + +feature.city.mascots.menu.main.upgrade.title=Améliorer votre Mascotte +feature.city.mascots.menu.main.upgrade.max_level=Niveau max atteint +feature.city.mascots.menu.main.upgrade.level_required=Vous devez être niveau %1$s pour améliorer la mascotte +feature.city.mascots.menu.main.upgrade.cost=Nécessite %1$s d'Aywenites +feature.city.mascots.menu.main.upgrade.success=Vous avez amélioré votre mascotte au niveau %1$s +feature.city.mascots.menu.main.upgrade.not_enough_aywenite=Vous n'avez pas assez d'Aywenite + +feature.city.mascots.menu.main.immunity.title=Votre mascotte est immunisée ! +feature.city.mascots.menu.main.immunity.lore=Vous avez une immunité sur votre mascotte \ +
Temps restant : %1$s \ +
Pour réduire le temps de 1 heure, vous devez posséder : \ +
- %2$s d'Aywenite \ +
CLIQUEZ ICI POUR REDUIRE LE TEMPS D'IMMUNITÉ +feature.city.mascots.menu.main.immunity.reduce.success=Vous venez de dépenser %1$s d'Aywenite pour réduire le cooldown d'une heure + +feature.city.mascots.menu.dead.name=Menu des mascottes [DEAD] +feature.city.mascots.menu.dead.title=Votre mascotte est morte +feature.city.mascots.menu.dead.lore=Votre mascotte est morte, vous pouvez faire réduire le temps de réanimation \ +
qui est actuellement de : %1$s \ +
Pour réduire le temps de 1 heure, vous devez posséder : \ +
- %2$s d'Aywenite \ +
CLIQUEZ ICI POUR REDUIRE LE TEMPS DE REANIMATION +feature.city.mascots.menu.dead.reduce.success=Vous venez de dépenser %1$s d'Aywenite pour réduire le cooldown d'une heure + +feature.city.mascots.menu.skin.name=Menu des skins des mascottes +feature.city.mascots.menu.skin.lore.level_required=Vous devez être niveau %1$s pour débloquer ce skin +feature.city.mascots.menu.skin.lore.price_required=Vous devez avoir %1$s Aywenite +feature.city.mascots.menu.skin.error.level_required=Vous n'avez pas le niveau de ville requis pour mettre ce skin +feature.city.mascots.menu.skin.error.not_enough_aywenite=Vous n'avez pas assez d'Aywenite + +feature.city.mascots.skin.requirement=Nécéssite %1$s d'Aywenites + +feature.city.mascots.skin.error.space_above=Libérez de l'espace au dessus de la mascotte pour changer son skin +feature.city.mascots.skin.error.space_around=Libérez de l'espace tout autour de la mascotte pour changer son skin + +feature.city.mascots.interaction.error.not_found=Aucune mascotte trouvée - Veuillez contacter le staff +feature.city.mascots.interaction.error.not_owner=Cette mascotte ne vous appartient pas +feature.city.mascots.rename.error=Vous ne pouvez pas renommer cette mascotte + +feature.city.mascots.name.alive=%1$s %2$s%3$s +feature.city.mascots.name.dead=☠ Mascotte Morte + +feature.city.mascots.admin.remove.success=Mascotte supprimée + +feature.city.mascots.damage.error.enemy_city_unknown=Erreur : La ville ennemie n'a pas été reconnue +feature.city.mascots.damage.error.city_type_unknown=Erreur : Le type de votre ville n'a pas été reconnue +feature.city.mascots.damage.error.enemy_city_type_unknown=Erreur : Le type de la ville ennemie n'a pas été reconnue +feature.city.mascots.damage.error.self_mascot=Vous ne pouvez pas attaquer votre mascotte +feature.city.mascots.damage.error.enemy_city_peace=Cette ville est en situation de paix +feature.city.mascots.damage.error.city_peace=Votre ville est en situation de paix +feature.city.mascots.damage.error.immune=Cette mascotte est immunisée pour le moment +feature.city.mascots.damage.error.not_in_war=Vous n'êtes pas en guerre contre %1$s +feature.city.mascots.damage.error.not_in_combat=Vous ne pouvez attaquer la mascotte que pendant la phase de combat +feature.city.mascots.damage.error.not_selected_for_war=Vous ne pouvez pas attaquer la mascotte car vous n'avez pas été sélectionné pour la guerre + ## Mascot Wand feature.city.mascot.mascot_wand.claim_mascot_wand=Vous avez reçu un bâton pour poser votre mascotte feature.city.mascot.mascot_wand.create_cancelled=Création annulée From 63f090b7a19e4505b5dee157ca5b33274f3c97da Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Wed, 25 Mar 2026 18:54:08 +0100 Subject: [PATCH 08/20] translation for package feature.sub.mayor.perks (enum) --- .../city/menu/list/CityListDetailsMenu.java | 25 ++-- .../sub/mayor/menu/MayorElectionMenu.java | 7 +- .../city/sub/mayor/menu/MayorLawMenu.java | 7 +- .../city/sub/mayor/menu/MayorMandateMenu.java | 40 +++--- .../city/sub/mayor/menu/MayorVoteMenu.java | 10 +- .../sub/mayor/menu/create/MayorColorMenu.java | 13 +- .../mayor/menu/create/MayorCreateMenu.java | 46 +++--- .../mayor/menu/create/MayorModifyMenu.java | 9 +- .../sub/mayor/menu/create/PerkChoiceMenu.java | 7 +- .../city/sub/mayor/menu/npc/MayorNpcMenu.java | 26 ++-- .../city/sub/mayor/menu/npc/OwnerNpcMenu.java | 52 ++++--- .../city/sub/mayor/perks/PerkCategory.java | 16 +-- .../features/city/sub/mayor/perks/Perks.java | 136 ++++++------------ .../city/sub/war/menu/main/MainWarMenu.java | 14 +- .../sub/war/menu/main/WarCityDetailsMenu.java | 22 +-- .../resources/translations/lang.properties | 62 +++++++- 16 files changed, 274 insertions(+), 218 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/city/menu/list/CityListDetailsMenu.java b/src/main/java/fr/openmc/core/features/city/menu/list/CityListDetailsMenu.java index f7c86fc12..f55c6740a 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/list/CityListDetailsMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/list/CityListDetailsMenu.java @@ -86,15 +86,18 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { Perks perk3 = PerkManager.getPerkById(mayor.getIdPerk3()); loreOwner.add(Component.empty()); - loreOwner.add(perk1 == null ? TranslationManager.translation("feature.city.menus.common.error") : Component.text(perk1.getName())); - loreOwner.addAll(perk1 == null ? List.of() : perk1.getLore()); + loreOwner.add(perk1 == null ? TranslationManager.translation("feature.city.menus.common.error") : + TranslationManager.translation(perk1.getNameKey())); + loreOwner.addAll(perk1 == null ? List.of() : TranslationManager.translationLore(perk1.getLoreKey())); if (electionType == ElectionType.OWNER_CHOOSE) { loreOwner.add(Component.empty()); - loreOwner.add(perk2 == null ? TranslationManager.translation("feature.city.menus.common.error") : Component.text(perk2.getName())); - loreOwner.addAll(perk2 == null ? List.of() : perk2.getLore()); + loreOwner.add(perk2 == null ? TranslationManager.translation("feature.city.menus.common.error") : + TranslationManager.translation(perk2.getNameKey())); + loreOwner.addAll(perk2 == null ? List.of() : TranslationManager.translationLore(perk2.getLoreKey())); loreOwner.add(Component.empty()); - loreOwner.add(perk3 == null ? TranslationManager.translation("feature.city.menus.common.error") : Component.text(perk3.getName())); - loreOwner.addAll(perk3 == null ? List.of() : perk3.getLore()); + loreOwner.add(perk3 == null ? TranslationManager.translation("feature.city.menus.common.error") : + TranslationManager.translation(perk3.getNameKey())); + loreOwner.addAll(perk3 == null ? List.of() : TranslationManager.translationLore(perk3.getLoreKey())); } UUID ownerUUID = this.city.getPlayerWithPermission(CityPermission.OWNER); @@ -112,11 +115,13 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { if (electionType == ElectionType.ELECTION) { List loreMayor = new ArrayList<>(); loreMayor.add(Component.empty()); - loreMayor.add(perk2 == null ? TranslationManager.translation("feature.city.menus.common.error") : Component.text(perk2.getName())); - loreMayor.addAll(perk2 == null ? List.of() : perk2.getLore()); + loreMayor.add(perk2 == null ? TranslationManager.translation("feature.city.menus.common.error") : + TranslationManager.translation(perk2.getNameKey())); + loreMayor.addAll(perk2 == null ? List.of() : TranslationManager.translationLore(perk2.getLoreKey())); loreMayor.add(Component.empty()); - loreMayor.add(perk3 == null ? TranslationManager.translation("feature.city.menus.common.error") : Component.text(perk3.getName())); - loreMayor.addAll(perk3 == null ? List.of() : perk3.getLore()); + loreMayor.add(perk3 == null ? TranslationManager.translation("feature.city.menus.common.error") : + TranslationManager.translation(perk3.getNameKey())); + loreMayor.addAll(perk3 == null ? List.of() : TranslationManager.translationLore(perk3.getLoreKey())); map.put(14, new ItemBuilder(this, SkullUtils.getPlayerSkull(this.city.getPlayerWithPermission(CityPermission.OWNER)), itemMeta -> { diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorElectionMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorElectionMenu.java index a6a2d96cb..27dfe2f9a 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorElectionMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorElectionMenu.java @@ -4,7 +4,6 @@ import fr.openmc.api.menulib.Menu; import fr.openmc.api.menulib.utils.InventorySize; import fr.openmc.api.menulib.utils.ItemBuilder; -import fr.openmc.api.menulib.utils.ItemUtils; import fr.openmc.api.menulib.utils.MenuUtils; import fr.openmc.core.OMCPlugin; import fr.openmc.core.features.city.City; @@ -21,6 +20,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Bukkit; @@ -137,12 +137,13 @@ public void onClose(InventoryCloseEvent event) { List lorePerkOwner; if (MayorManager.hasChoicePerkOwner(player)) { Perks perk1 = PerkManager.getPerkById(city.getMayor().getIdPerk1()); + if (perk1 == null) return Map.of(); lorePerkOwner = new ArrayList<>(List.of( Component.text("§7Vous avez déjà choisis §3votre réforme §7!"), Component.empty(), - Component.text(perk1.getName()) + TranslationManager.translation(perk1.getNameKey()) )); - lorePerkOwner.addAll(perk1.getLore()); + lorePerkOwner.addAll(TranslationManager.translationLore(perk1.getLoreKey())); } else { lorePerkOwner = List.of( Component.text("§7Vous êtes le propriétaire de la §dville §7!"), diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorLawMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorLawMenu.java index f3f98cd74..9445df8ce 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorLawMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorLawMenu.java @@ -25,6 +25,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -247,8 +248,8 @@ public void onClose(InventoryCloseEvent event) { if (PerkManager.getPerkEvent(mayor) != null) { Supplier perkEventItemSupplier = () -> { ItemStack iaPerkEvent = perkEvent.getItemStack(); - String namePerkEvent = perkEvent.getName(); - List lorePerkEvent = new ArrayList<>(perkEvent.getLore()); + Component namePerkEvent = TranslationManager.translation(perkEvent.getNameKey()); + List lorePerkEvent = new ArrayList<>(TranslationManager.translationLore(perkEvent.getLoreKey())); if (!DynamicCooldownManager.isReady(mayor.getMayorUUID(), "mayor:law-perk-event")) { lorePerkEvent.addAll( List.of( @@ -265,7 +266,7 @@ public void onClose(InventoryCloseEvent event) { ); } return new ItemBuilder(this, iaPerkEvent, itemMeta -> { - itemMeta.itemName(Component.text(namePerkEvent)); + itemMeta.itemName(namePerkEvent); itemMeta.lore(lorePerkEvent); }) .hide(perkEvent.getToHide()) diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorMandateMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorMandateMenu.java index aa7732b97..64fc7989f 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorMandateMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorMandateMenu.java @@ -4,15 +4,15 @@ import fr.openmc.api.menulib.Menu; import fr.openmc.api.menulib.utils.InventorySize; import fr.openmc.api.menulib.utils.ItemBuilder; -import fr.openmc.api.menulib.utils.ItemUtils; import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityManager; import fr.openmc.core.features.city.CityPermission; import fr.openmc.core.features.city.sub.mayor.managers.PerkManager; import fr.openmc.core.features.city.sub.mayor.models.Mayor; import fr.openmc.core.features.city.sub.mayor.perks.Perks; -import fr.openmc.core.utils.cache.CacheOfflinePlayer; import fr.openmc.core.utils.SkullUtils; +import fr.openmc.core.utils.cache.CacheOfflinePlayer; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Material; @@ -71,11 +71,13 @@ public void onClose(InventoryCloseEvent event) { Component.text("§8§oMaire de " + city.getName()) )); loreMayor.add(Component.empty()); - loreMayor.add(Component.text(perk2 == null ? "§cErreur de la réforme" : perk2.getName())); - loreMayor.addAll(perk2 == null ? List.of() : perk2.getLore()); + loreMayor.add(perk2 == null ? Component.text("§cErreur de la réforme") : + TranslationManager.translation(perk2.getNameKey())); + loreMayor.addAll(perk2 == null ? List.of() : TranslationManager.translationLore(perk2.getLoreKey())); loreMayor.add(Component.empty()); - loreMayor.add(Component.text(perk3 == null ? "§cErreur de la réforme" : perk3.getName())); - loreMayor.addAll(perk3 == null ? List.of() : perk3.getLore()); + loreMayor.add(perk3 == null ? Component.text("§cErreur de la réforme") : + TranslationManager.translation(perk3.getNameKey())); + loreMayor.addAll(perk3 == null ? List.of() : TranslationManager.translationLore(perk3.getLoreKey())); inventory.put(3, new ItemBuilder(this, SkullUtils.getPlayerSkull(mayor.getMayorUUID()), itemMeta -> { @@ -110,8 +112,9 @@ public void onClose(InventoryCloseEvent event) { Component.text("§8§oPropriétaire de " + city.getName()) )); loreOwner.add(Component.empty()); - loreOwner.add(Component.text(perk1 == null ? "§cErreur de la réforme" : perk1.getName())); - loreOwner.addAll(perk1 == null ? List.of() : perk1.getLore()); + loreOwner.add(perk1 == null ? Component.text("§cErreur de la réforme") : + TranslationManager.translation(perk1.getNameKey())); + loreOwner.addAll(perk1 == null ? List.of() : TranslationManager.translationLore(perk1.getLoreKey())); inventory.put(5, new ItemBuilder(this, SkullUtils.getPlayerSkull(city.getPlayerWithPermission(CityPermission.OWNER)), itemMeta -> { itemMeta.displayName(Component.text("§ePropriétaire " + CacheOfflinePlayer.getOfflinePlayer(city.getPlayerWithPermission((CityPermission.OWNER))).getName())); @@ -119,26 +122,29 @@ public void onClose(InventoryCloseEvent event) { })); ItemStack iaPerk1 = (perk1 != null) ? perk1.getItemStack() : ItemStack.of(Material.DEAD_BRAIN_CORAL_BLOCK); - String namePerk1 = (perk1 != null) ? perk1.getName() : "§8Réforme vide"; - List lorePerk1 = (perk1 != null) ? new ArrayList<>(perk1.getLore()) : null; + Component namePerk1 = (perk1 != null) ? TranslationManager.translation(perk1.getNameKey()) : + TranslationManager.translation("feature.city.mayor.perk.none.name"); + List lorePerk1 = (perk1 != null) ? new ArrayList<>(TranslationManager.translationLore(perk1.getLoreKey())) : null; inventory.put(29, new ItemBuilder(this, iaPerk1, itemMeta -> { - itemMeta.customName(Component.text(namePerk1)); + itemMeta.customName(namePerk1); itemMeta.lore(lorePerk1); }).hide((perk1 != null) ? perk1.getToHide() : null)); ItemStack iaPerk2 = (perk2 != null) ? perk2.getItemStack() : ItemStack.of(Material.DEAD_BRAIN_CORAL_BLOCK); - String namePerk2 = (perk2 != null) ? perk2.getName() : "§8Réforme vide"; - List lorePerk2 = (perk2 != null) ? new ArrayList<>(perk2.getLore()) : null; + Component namePerk2 = (perk2 != null) ? TranslationManager.translation(perk2.getNameKey()) : + TranslationManager.translation("feature.city.mayor.perk.none.name"); + List lorePerk2 = (perk2 != null) ? new ArrayList<>(TranslationManager.translationLore(perk2.getLoreKey())) : null; inventory.put(22, new ItemBuilder(this, iaPerk2, itemMeta -> { - itemMeta.customName(Component.text(namePerk2)); + itemMeta.customName(namePerk2); itemMeta.lore(lorePerk2); }).hide((perk2 != null) ? perk2.getToHide() : null)); ItemStack iaPerk3 = (perk3 != null) ? perk3.getItemStack() : ItemStack.of(Material.DEAD_BRAIN_CORAL_BLOCK); - String namePerk3 = (perk3 != null) ? perk3.getName() : "§8Réforme vide"; - List lorePerk3 = (perk3 != null) ? new ArrayList<>(perk3.getLore()) : null; + Component namePerk3 = (perk3 != null) ? TranslationManager.translation(perk3.getNameKey()) : + TranslationManager.translation("feature.city.mayor.perk.none.name"); + List lorePerk3 = (perk3 != null) ? new ArrayList<>(TranslationManager.translationLore(perk3.getLoreKey())) : null; inventory.put(33, new ItemBuilder(this, iaPerk3, itemMeta -> { - itemMeta.customName(Component.text(namePerk3)); + itemMeta.customName(namePerk3); itemMeta.lore(lorePerk3); }).hide((perk3 != null) ? perk3.getToHide() : null)); diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorVoteMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorVoteMenu.java index 0be4fe111..895c0f110 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorVoteMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorVoteMenu.java @@ -17,6 +17,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; @@ -75,15 +76,16 @@ public List getItems() { List loreMayor = new ArrayList<>(List.of( Component.text("§8Candidat pour le maire de " + city.getName()) )); + if (perk2 == null || perk3 == null) return List.of(); loreMayor.add(Component.empty()); loreMayor.add(Component.text("§7Votes : ").append(Component.text(vote).color(color).decoration(TextDecoration.ITALIC, false))); loreMayor.add(Component.text(" §8[" + getProgressBar(vote, totalVotes, color) + "§8] §7(" + getVotePercentage(vote, totalVotes) + "%)")); loreMayor.add(Component.empty()); - loreMayor.add(Component.text(perk2.getName())); - loreMayor.addAll(perk2.getLore()); + loreMayor.add(TranslationManager.translation(perk2.getNameKey())); + loreMayor.addAll(TranslationManager.translationLore(perk2.getLoreKey())); loreMayor.add(Component.empty()); - loreMayor.add(Component.text(perk3.getName())); - loreMayor.addAll(perk3.getLore()); + loreMayor.add(TranslationManager.translation(perk3.getNameKey())); + loreMayor.addAll(TranslationManager.translationLore(perk3.getLoreKey())); loreMayor.add(Component.empty()); loreMayor.add(Component.text("§e§lCLIQUEZ ICI POUR LE VOTER")); diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorColorMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorColorMenu.java index 4430e36eb..c31bad0f7 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorColorMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorColorMenu.java @@ -16,6 +16,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; @@ -107,15 +108,15 @@ public void onClose(InventoryCloseEvent event) { Component.text("Maire " + player.getName()).color(color).decoration(TextDecoration.ITALIC, false) )); if (perk1 != null) { - loreAccept.add(Component.text(perk1.getName())); - loreAccept.addAll(perk1.getLore()); + loreAccept.add(TranslationManager.translation(perk1.getNameKey())); + loreAccept.addAll(TranslationManager.translationLore(perk1.getLoreKey())); loreAccept.add(Component.empty()); } - loreAccept.add(Component.text(perk2.getName())); - loreAccept.addAll(perk2.getLore()); + loreAccept.add(TranslationManager.translation(perk2.getNameKey())); + loreAccept.addAll(TranslationManager.translationLore(perk2.getLoreKey())); loreAccept.add(Component.empty()); - loreAccept.add(Component.text(perk3.getName())); - loreAccept.addAll(perk3.getLore()); + loreAccept.add(TranslationManager.translation(perk3.getNameKey())); + loreAccept.addAll(TranslationManager.translationLore(perk3.getLoreKey())); loreAccept.add(Component.empty()); loreAccept.add(Component.text("§c§lAUCUN RETOUR EN ARRIERE POSSIBLE!")); diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorCreateMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorCreateMenu.java index e24a43276..fa3a9f0ca 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorCreateMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorCreateMenu.java @@ -13,13 +13,13 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.inventory.ItemStack; -import org.checkerframework.checker.units.qual.C; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -77,7 +77,8 @@ public void onClose(InventoryCloseEvent event) { canConfirmPerk = perk1 != null; ItemStack iaPerk1 = (perk1 != null) ? perk1.getItemStack() : ItemStack.of(Material.DEAD_BRAIN_CORAL_BLOCK); - String namePerk1 = (perk1 != null) ? perk1.getName() : "§8Réforme vide"; + Component namePerk1 = (perk1 != null) ? TranslationManager.translation(perk1.getNameKey()) : + TranslationManager.translation("feature.city.mayor.perk.none.name"); List lorePerk1; if (perk1 == null) { lorePerk1 = List.of( @@ -86,12 +87,12 @@ public void onClose(InventoryCloseEvent event) { Component.text("§e§lCLIQUEZ ICI POUR CHOISIR LA REFORME") ); } else { - lorePerk1 = new ArrayList<>(perk1.getLore()); + lorePerk1 = new ArrayList<>(TranslationManager.translationLore(perk1.getLoreKey())); lorePerk1.add(Component.empty()); lorePerk1.add(Component.text("§e§lCLIQUEZ ICI POUR CHANGER LA REFORME")); } inventory.put(22, new ItemBuilder(this, iaPerk1, itemMeta -> { - itemMeta.customName(Component.text(namePerk1)); + itemMeta.customName(namePerk1); itemMeta.lore(lorePerk1); }) .hide((perk1 != null) ? perk1.getToHide() : null) @@ -110,7 +111,8 @@ public void onClose(InventoryCloseEvent event) { canConfirmPerk = perk2 != null && perk3 != null; ItemStack iaPerk2 = (perk2 != null) ? perk2.getItemStack() : ItemStack.of(Material.DEAD_BRAIN_CORAL_BLOCK); - String namePerk2 = (perk2 != null) ? perk2.getName() : "§8Réforme vide"; + Component namePerk2 = (perk2 != null) ? TranslationManager.translation(perk2.getNameKey()) : + TranslationManager.translation("feature.city.mayor.perk.none.name"); List lorePerk2; if (perk2 == null) { lorePerk2 = List.of( @@ -119,12 +121,12 @@ public void onClose(InventoryCloseEvent event) { Component.text("§e§lCLIQUEZ ICI POUR CHOISIR LA REFORME") ); } else { - lorePerk2 = new ArrayList<>(perk2.getLore()); + lorePerk2 = new ArrayList<>(TranslationManager.translationLore(perk2.getLoreKey())); lorePerk2.add(Component.empty()); lorePerk2.add(Component.text("§e§lCLIQUEZ ICI POUR CHANGER LA REFORME")); } inventory.put(20, new ItemBuilder(this, iaPerk2, itemMeta -> { - itemMeta.customName(Component.text(namePerk2)); + itemMeta.customName(namePerk2); itemMeta.lore(lorePerk2); }) .hide((perk2 != null) ? perk2.getToHide() : null) @@ -133,7 +135,8 @@ public void onClose(InventoryCloseEvent event) { })); ItemStack iaPerk3 = (perk3 != null) ? perk3.getItemStack() : ItemStack.of(Material.DEAD_BRAIN_CORAL_BLOCK); - String namePerk3 = (perk3 != null) ? perk3.getName() : "§8Réforme vide"; + Component namePerk3 = (perk3 != null) ? TranslationManager.translation(perk3.getNameKey()) : + TranslationManager.translation("feature.city.mayor.perk.none.name"); List lorePerk3; if (perk3 == null) { lorePerk3 = List.of( @@ -142,12 +145,12 @@ public void onClose(InventoryCloseEvent event) { Component.text("§e§lCLIQUEZ ICI POUR CHOISIR LA REFORME") ); } else { - lorePerk3 = new ArrayList<>(perk3.getLore()); + lorePerk3 = new ArrayList<>(TranslationManager.translationLore(perk3.getLoreKey())); lorePerk3.add(Component.empty()); lorePerk3.add(Component.text("§e§lCLIQUEZ ICI POUR CHANGER LA REFORME")); } inventory.put(24, new ItemBuilder(this, iaPerk3, itemMeta -> { - itemMeta.customName(Component.text(namePerk3)); + itemMeta.customName(namePerk3); itemMeta.lore(lorePerk3); }) .hide((perk3 != null) ? perk3.getToHide() : null) @@ -169,7 +172,8 @@ public void onClose(InventoryCloseEvent event) { canConfirmPerk = perk1 != null && perk2 != null && perk3 != null; ItemStack iaPerk1 = (perk1 != null) ? perk1.getItemStack() : ItemStack.of(Material.DEAD_BRAIN_CORAL_BLOCK); - String namePerk1 = (perk1 != null) ? perk1.getName() : "§8Réforme vide"; + Component namePerk1 = (perk1 != null) ? TranslationManager.translation(perk1.getNameKey()) : + TranslationManager.translation("feature.city.mayor.perk.none.name"); List lorePerk1; if (perk1 == null) { lorePerk1 = List.of( @@ -178,12 +182,12 @@ public void onClose(InventoryCloseEvent event) { Component.text("§e§lCLIQUEZ ICI POUR CHOISIR LA REFORME") ); } else { - lorePerk1 = new ArrayList<>(perk1.getLore()); + lorePerk1 = new ArrayList<>(TranslationManager.translationLore(perk1.getLoreKey())); lorePerk1.add(Component.empty()); lorePerk1.add(Component.text("§e§lCLIQUEZ ICI POUR CHANGER LA REFORME")); } inventory.put(20, new ItemBuilder(this, iaPerk1, itemMeta -> { - itemMeta.itemName(Component.text(namePerk1)); + itemMeta.itemName(namePerk1); itemMeta.lore(lorePerk1); }) .hide((perk1 != null) ? perk1.getToHide() : null) @@ -192,7 +196,8 @@ public void onClose(InventoryCloseEvent event) { })); ItemStack iaPerk2 = (perk2 != null) ? perk2.getItemStack() : ItemStack.of(Material.DEAD_BRAIN_CORAL_BLOCK); - String namePerk2 = (perk2 != null) ? perk2.getName() : "§8Réforme vide"; + Component namePerk2 = (perk2 != null) ? TranslationManager.translation(perk2.getNameKey()) : + TranslationManager.translation("feature.city.mayor.perk.none.name"); List lorePerk2; if (perk2 == null) { lorePerk2 = List.of( @@ -201,12 +206,12 @@ public void onClose(InventoryCloseEvent event) { Component.text("§e§lCLIQUEZ ICI POUR CHOISIR LA REFORME") ); } else { - lorePerk2 = new ArrayList<>(perk2.getLore()); + lorePerk2 = new ArrayList<>(TranslationManager.translationLore(perk2.getLoreKey())); lorePerk2.add(Component.empty()); lorePerk2.add(Component.text("§e§lCLIQUEZ ICI POUR CHANGER LA REFORME")); } inventory.put(22, new ItemBuilder(this, iaPerk2, itemMeta -> { - itemMeta.itemName(Component.text(namePerk2)); + itemMeta.itemName(namePerk2); itemMeta.lore(lorePerk2); }) .hide((perk2 != null) ? perk2.getToHide() : null) @@ -215,7 +220,8 @@ public void onClose(InventoryCloseEvent event) { })); ItemStack iaPerk3 = (perk3 != null) ? perk3.getItemStack() : ItemStack.of(Material.DEAD_BRAIN_CORAL_BLOCK); - String namePerk3 = (perk3 != null) ? perk3.getName() : "§8Réforme vide"; + Component namePerk3 = (perk3 != null) ? TranslationManager.translation(perk3.getNameKey()) : + TranslationManager.translation("feature.city.mayor.perk.none.name"); List lorePerk3; if (perk3 == null) { lorePerk3 = List.of( @@ -224,12 +230,12 @@ public void onClose(InventoryCloseEvent event) { Component.text("§e§lCLIQUEZ ICI POUR CHOISIR LA REFORME") ); } else { - lorePerk3 = new ArrayList<>(perk3.getLore()); + lorePerk3 = new ArrayList<>(TranslationManager.translationLore(perk3.getLoreKey())); lorePerk3.add(Component.empty()); lorePerk3.add(Component.text("§e§lCLIQUEZ ICI POUR CHANGER LA REFORME")); } inventory.put(24, new ItemBuilder(this, iaPerk3, itemMeta -> { - itemMeta.itemName(Component.text(namePerk3)); + itemMeta.itemName(namePerk3); itemMeta.lore(lorePerk3); }) .hide((perk3 != null) ? perk3.getToHide() : null) @@ -277,7 +283,7 @@ public void onClose(InventoryCloseEvent event) { if (canConfirmPerk) { if (type == MenuType.OWNER_1) { MayorManager.put1Perk(CityManager.getPlayerCity(player.getUniqueId()), perk1); - MessagesManager.sendMessage(player, Component.text("Vous avez ajouté la Réforme : " + perk1.getName()), Prefix.MAYOR, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, Component.text("Vous avez ajouté la Réforme : ").append(TranslationManager.translation(perk1.getNameKey())), Prefix.MAYOR, MessageType.SUCCESS, false); player.closeInventory(); return; } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorModifyMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorModifyMenu.java index f7d408077..705b8bd81 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorModifyMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorModifyMenu.java @@ -9,6 +9,7 @@ import fr.openmc.core.features.city.sub.mayor.models.MayorCandidate; import fr.openmc.core.features.city.sub.mayor.perks.Perks; import fr.openmc.core.utils.ColorUtils; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -61,14 +62,14 @@ public void onClose(InventoryCloseEvent event) { assert perk2 != null; inventory.put(20, new ItemBuilder(this, perk2.getItemStack(), itemMeta -> { - itemMeta.customName(Component.text(perk2.getName())); - itemMeta.lore(perk2.getLore()); + itemMeta.customName(TranslationManager.translation(perk2.getNameKey())); + itemMeta.lore(TranslationManager.translationLore(perk2.getLoreKey())); })); assert perk3 != null; inventory.put(22, new ItemBuilder(this, perk3.getItemStack(), itemMeta -> { - itemMeta.customName(Component.text(perk3.getName())); - itemMeta.lore(perk3.getLore()); + itemMeta.customName(TranslationManager.translation(perk3.getNameKey())); + itemMeta.lore(TranslationManager.translationLore(perk3.getLoreKey())); })); List loreColor = List.of( diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/PerkChoiceMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/PerkChoiceMenu.java index 56c6707c4..4ac5d1da7 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/PerkChoiceMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/PerkChoiceMenu.java @@ -14,6 +14,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -70,9 +71,9 @@ public List getItems() { if (newPerk == perk1 || newPerk == perk2 || newPerk == perk3) continue; - List perkLore = new ArrayList<>(newPerk.getLore()); + List perkLore = new ArrayList<>(TranslationManager.translationLore(newPerk.getLoreKey())); - perkLore.add(Component.text(newPerk.getCategory().getName())); + perkLore.add(TranslationManager.translation(newPerk.getCategory().getNameKey())); switch (newPerk.getCategory()) { case AGRICULTURAL -> { @@ -104,7 +105,7 @@ public List getItems() { ItemStack perkItem = new ItemBuilder(this, newPerk.getItemStack(), itemMeta -> { - itemMeta.customName(Component.text(newPerk.getName())); + itemMeta.customName(TranslationManager.translation(newPerk.getNameKey())); itemMeta.lore(perkLore); }) .hide((newPerk != null) ? newPerk.getToHide() : null) diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/npc/MayorNpcMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/npc/MayorNpcMenu.java index 3b2d09412..8c2466d6d 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/npc/MayorNpcMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/npc/MayorNpcMenu.java @@ -5,7 +5,6 @@ import fr.openmc.api.menulib.Menu; import fr.openmc.api.menulib.utils.InventorySize; import fr.openmc.api.menulib.utils.ItemBuilder; -import fr.openmc.api.menulib.utils.ItemUtils; import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityManager; import fr.openmc.core.features.city.CityPermission; @@ -17,6 +16,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import org.bukkit.Chunk; import org.bukkit.Material; @@ -79,11 +79,13 @@ public void onClose(InventoryCloseEvent event) { Component.text("§8§oMaire de " + city.getName()) )); loreMayor.add(Component.empty()); - loreMayor.add(Component.text(perk2 == null ? "§cErreur de la réforme" : perk2.getName())); - loreMayor.addAll(perk2 == null ? List.of() : perk2.getLore()); + loreMayor.add(perk2 == null ? TranslationManager.translation("feature.city.menus.common.error") : + TranslationManager.translation(perk2.getNameKey())); + loreMayor.addAll(perk2 == null ? List.of() : TranslationManager.translationLore(perk2.getLoreKey())); loreMayor.add(Component.empty()); - loreMayor.add(Component.text(perk3 == null ? "§cErreur de la réforme" : perk3.getName())); - loreMayor.addAll(perk3 == null ? List.of() : perk3.getLore()); + loreMayor.add(perk3 == null ? TranslationManager.translation("feature.city.menus.common.error") : + TranslationManager.translation(perk3.getNameKey())); + loreMayor.addAll(perk3 == null ? List.of() : TranslationManager.translationLore(perk3.getLoreKey())); inventory.put(4, new ItemBuilder(this, SkullUtils.getPlayerSkull(city.getPlayerWithPermission(CityPermission.OWNER)), itemMeta -> { itemMeta.displayName(Component.text("§eMaire " + city.getMayor().getName())); @@ -91,18 +93,20 @@ public void onClose(InventoryCloseEvent event) { })); ItemStack iaPerk2 = (perk2 != null) ? perk2.getItemStack() : ItemStack.of(Material.DEAD_BRAIN_CORAL_BLOCK); - String namePerk2 = (perk2 != null) ? perk2.getName() : "§8Réforme vide"; - List lorePerk2 = (perk2 != null) ? new ArrayList<>(perk2.getLore()) : null; + Component namePerk2 = (perk2 != null) ? TranslationManager.translation(perk2.getNameKey()) : + TranslationManager.translation("feature.city.mayor.perk.none.name"); + List lorePerk2 = (perk2 != null) ? new ArrayList<>(TranslationManager.translationLore(perk2.getLoreKey())) : null; inventory.put(20, new ItemBuilder(this, iaPerk2, itemMeta -> { - itemMeta.customName(Component.text(namePerk2)); + itemMeta.customName(namePerk2); itemMeta.lore(lorePerk2); }).hide(perk2 == null ? null : perk2.getToHide())); ItemStack iaPerk3 = (perk3 != null) ? perk3.getItemStack() : ItemStack.of(Material.DEAD_BRAIN_CORAL_BLOCK); - String namePerk3 = (perk3 != null) ? perk3.getName() : "§8Réforme vide"; - List lorePerk3 = (perk3 != null) ? new ArrayList<>(perk3.getLore()) : null; + Component namePerk3 = (perk3 != null) ? TranslationManager.translation(perk3.getNameKey()) : + TranslationManager.translation("feature.city.mayor.perk.none.name"); + List lorePerk3 = (perk3 != null) ? new ArrayList<>(TranslationManager.translationLore(perk3.getLoreKey())) : null; inventory.put(24, new ItemBuilder(this, iaPerk3, itemMeta -> { - itemMeta.customName(Component.text(namePerk3)); + itemMeta.customName(namePerk3); itemMeta.lore(lorePerk3); }).hide(perk3 == null ? null : perk3.getToHide())); diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/npc/OwnerNpcMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/npc/OwnerNpcMenu.java index 868bbe1dc..51b759f6e 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/npc/OwnerNpcMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/npc/OwnerNpcMenu.java @@ -5,7 +5,6 @@ import fr.openmc.api.menulib.Menu; import fr.openmc.api.menulib.utils.InventorySize; import fr.openmc.api.menulib.utils.ItemBuilder; -import fr.openmc.api.menulib.utils.ItemUtils; import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityManager; import fr.openmc.core.features.city.CityPermission; @@ -14,11 +13,12 @@ import fr.openmc.core.features.city.sub.mayor.managers.PerkManager; import fr.openmc.core.features.city.sub.mayor.models.Mayor; import fr.openmc.core.features.city.sub.mayor.perks.Perks; -import fr.openmc.core.utils.cache.CacheOfflinePlayer; import fr.openmc.core.utils.SkullUtils; +import fr.openmc.core.utils.cache.CacheOfflinePlayer; import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import org.bukkit.Chunk; import org.bukkit.Material; @@ -83,8 +83,9 @@ public void onClose(InventoryCloseEvent event) { Component.text("§8§oPropriétaire de " + city.getName()) )); loreOwner.add(Component.empty()); - loreOwner.add(Component.text(perk1 == null ? "§cErreur de la réforme" : perk1.getName())); - loreOwner.addAll(perk1 == null ? List.of() : perk1.getLore()); + loreOwner.add(perk1 == null ? TranslationManager.translation("feature.city.menus.common.error") : + TranslationManager.translation(perk1.getNameKey())); + loreOwner.addAll(perk1 == null ? List.of() : TranslationManager.translationLore(perk1.getLoreKey())); inventory.put(4, new ItemBuilder(this, SkullUtils.getPlayerSkull(uuidOwner), itemMeta -> { itemMeta.displayName(Component.text("§ePropriétaire " + nameOwner)); @@ -92,10 +93,11 @@ public void onClose(InventoryCloseEvent event) { })); ItemStack iaPerk1 = (perk1 != null) ? perk1.getItemStack() : ItemStack.of(Material.DEAD_BRAIN_CORAL_BLOCK); - String namePerk1 = (perk1 != null) ? perk1.getName() : "§8Réforme vide"; - List lorePerk1 = (perk1 != null) ? new ArrayList<>(perk1.getLore()) : null; + Component namePerk1 = (perk1 != null) ? TranslationManager.translation(perk1.getNameKey()) : + TranslationManager.translation("feature.city.mayor.perk.none.name"); + List lorePerk1 = (perk1 != null) ? new ArrayList<>(TranslationManager.translationLore(perk1.getLoreKey())) : null; inventory.put(31, new ItemBuilder(this, iaPerk1, itemMeta -> { - itemMeta.itemName(Component.text(namePerk1)); + itemMeta.itemName(namePerk1); itemMeta.lore(lorePerk1); }).hide(perk1 == null ? null : perk1.getToHide())); } else { @@ -106,14 +108,17 @@ public void onClose(InventoryCloseEvent event) { Component.text("§8§oPropriétaire de " + city.getName()) )); loreOwner.add(Component.empty()); - loreOwner.add(Component.text(perk1 == null ? "§cErreur de la réforme" : perk1.getName())); - loreOwner.addAll(perk1 == null ? List.of() : perk1.getLore()); + loreOwner.add(perk1 == null ? TranslationManager.translation("feature.city.menus.common.error") : + TranslationManager.translation(perk1.getNameKey())); + loreOwner.addAll(perk1 == null ? List.of() : TranslationManager.translationLore(perk1.getLoreKey())); loreOwner.add(Component.empty()); - loreOwner.add(Component.text(perk2 == null ? "§cErreur de la réforme" : perk2.getName())); - loreOwner.addAll(perk2 == null ? List.of() : perk2.getLore()); + loreOwner.add(perk2 == null ? TranslationManager.translation("feature.city.menus.common.error") : + TranslationManager.translation(perk2.getNameKey())); + loreOwner.addAll(perk2 == null ? List.of() : TranslationManager.translationLore(perk2.getLoreKey())); loreOwner.add(Component.empty()); - loreOwner.add(Component.text(perk3 == null ? "§cErreur de la réforme" : perk3.getName())); - loreOwner.addAll(perk3 == null ? List.of() : perk3.getLore()); + loreOwner.add(perk3 == null ? TranslationManager.translation("feature.city.menus.common.error") : + TranslationManager.translation(perk3.getNameKey())); + loreOwner.addAll(perk3 == null ? List.of() : TranslationManager.translationLore(perk3.getLoreKey())); inventory.put(4, new ItemBuilder(this, SkullUtils.getPlayerSkull(uuidOwner), itemMeta -> { itemMeta.displayName(Component.text("§ePropriétaire " + nameOwner)); @@ -121,26 +126,29 @@ public void onClose(InventoryCloseEvent event) { })); ItemStack iaPerk1 = (perk1 != null) ? perk1.getItemStack() : ItemStack.of(Material.DEAD_BRAIN_CORAL_BLOCK); - String namePerk1 = (perk1 != null) ? perk1.getName() : "§8Réforme vide"; - List lorePerk1 = (perk1 != null) ? new ArrayList<>(perk1.getLore()) : null; + Component namePerk1 = (perk1 != null) ? TranslationManager.translation(perk1.getNameKey()) : + TranslationManager.translation("feature.city.mayor.perk.none.name"); + List lorePerk1 = (perk1 != null) ? new ArrayList<>(TranslationManager.translationLore(perk1.getLoreKey())) : null; inventory.put(20, new ItemBuilder(this, iaPerk1, itemMeta -> { - itemMeta.itemName(Component.text(namePerk1)); + itemMeta.itemName(namePerk1); itemMeta.lore(lorePerk1); }).hide(perk1 == null ? null : perk1.getToHide())); ItemStack iaPerk2 = (perk2 != null) ? perk2.getItemStack() : ItemStack.of(Material.DEAD_BRAIN_CORAL_BLOCK); - String namePerk2 = (perk2 != null) ? perk2.getName() : "§8Réforme vide"; - List lorePerk2 = (perk2 != null) ? new ArrayList<>(perk2.getLore()) : null; + Component namePerk2 = (perk2 != null) ? TranslationManager.translation(perk2.getNameKey()) : + TranslationManager.translation("feature.city.mayor.perk.none.name"); + List lorePerk2 = (perk2 != null) ? new ArrayList<>(TranslationManager.translationLore(perk2.getLoreKey())) : null; inventory.put(22, new ItemBuilder(this, iaPerk2, itemMeta -> { - itemMeta.itemName(Component.text(namePerk2)); + itemMeta.itemName(namePerk2); itemMeta.lore(lorePerk2); }).hide(perk2 == null ? null : perk2.getToHide())); ItemStack iaPerk3 = (perk3 != null) ? perk3.getItemStack() : ItemStack.of(Material.DEAD_BRAIN_CORAL_BLOCK); - String namePerk3 = (perk3 != null) ? perk3.getName() : "§8Réforme vide"; - List lorePerk3 = (perk3 != null) ? new ArrayList<>(perk3.getLore()) : null; + Component namePerk3 = (perk3 != null) ? TranslationManager.translation(perk3.getNameKey()) : + TranslationManager.translation("feature.city.mayor.perk.none.name"); + List lorePerk3 = (perk3 != null) ? new ArrayList<>(TranslationManager.translationLore(perk3.getLoreKey())) : null; inventory.put(24, new ItemBuilder(this, iaPerk3, itemMeta -> { - itemMeta.customName(Component.text(namePerk3)); + itemMeta.customName(namePerk3); itemMeta.lore(lorePerk3); }).hide(perk3 == null ? null : perk3.getToHide())); } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/PerkCategory.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/PerkCategory.java index 6e9a15fde..9e3f10037 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/PerkCategory.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/PerkCategory.java @@ -4,16 +4,16 @@ @Getter public enum PerkCategory { - MILITARY("§8§oRéformes militaires"), - STRATEGY("§8§oRéformes de stratégie"), - AGRICULTURAL("§8§oRéformes d'agriculture"), - ECONOMIC("§8§oRéformes économiques"), - DREAM("§8§oRéformes Oniriques"), + MILITARY("feature.city.mayor.perk.category.military"), + STRATEGY("feature.city.mayor.perk.category.strategy"), + AGRICULTURAL("feature.city.mayor.perk.category.agricultural"), + ECONOMIC("feature.city.mayor.perk.category.economic"), + DREAM("feature.city.mayor.perk.category.onirique"), ; - private final String name; + private final String nameKey; - PerkCategory(String name) { - this.name = name; + PerkCategory(String nameKey) { + this.nameKey = nameKey; } } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/Perks.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/Perks.java index 5b920b63a..da057e0e0 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/Perks.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/Perks.java @@ -5,11 +5,9 @@ import io.papermc.paper.datacomponent.DataComponentType; import io.papermc.paper.datacomponent.DataComponentTypes; import lombok.Getter; -import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; - -import java.util.List; +import org.jetbrains.annotations.NotNull; @SuppressWarnings("UnstableApiUsage") @Getter @@ -19,11 +17,8 @@ public enum Perks { PerkType.BASIC, PerkCategory.MILITARY, 0, - "§e§lFou de Rage", - List.of( - Component.text("§7Donne §3un effet de force I §7dans une ville adverse"), - Component.text("§7Et donne §3un effet de protection I§7 dans sa ville") - ), + "feature.city.mayor.perk.fou_de_rage.name", + "feature.city.mayor.perk.fou_de_rage.lore", ItemStack.of(Material.BLAZE_POWDER) ), IMPOT( @@ -31,11 +26,8 @@ public enum Perks { PerkType.EVENT, PerkCategory.ECONOMIC, 3 * 24 * 60 * 60 * 1000L, // 3 jours - "§e§lPrévélement d'Impot", - List.of( - Component.text("§7Possibilité de lancer un §3évènement §7pour prélever les impôts"), - Component.text("§7Limite de perte d'argent :§3 5k §8(Cooldown : 3j)") - ), + "feature.city.mayor.perk.impot.name", + "feature.city.mayor.perk.impot.lore", ItemStack.of(Material.GOLD_BLOCK) ), MINER( @@ -43,10 +35,8 @@ public enum Perks { PerkType.BASIC, PerkCategory.AGRICULTURAL, 0, - "§e§lMineur Dévoué", - List.of( - Component.text("§7Donne §3Haste I §7aux membres de la ville") - ), + "feature.city.mayor.perk.miner.name", + "feature.city.mayor.perk.miner.lore", ItemStack.of(Material.GOLDEN_PICKAXE), DataComponentTypes.ATTRIBUTE_MODIFIERS ), @@ -55,11 +45,8 @@ public enum Perks { PerkType.BASIC, PerkCategory.MILITARY, 0, - "§e§lFruit du Démon", - List.of( - Component.text("§7Augmente §3la portée §7de tous les membres de la ville"), - Component.text("§7de §31 §7bloc") - ), + "feature.city.mayor.perk.demon_fruit.name", + "feature.city.mayor.perk.demon_fruit.lore", ItemStack.of(Material.CHORUS_FRUIT) ), BUSINESS_MAN( @@ -67,11 +54,8 @@ public enum Perks { PerkType.BASIC, PerkCategory.ECONOMIC, 0, - "§e§lBuisness Man", - List.of( - Component.text("§7Ajout §32% à l'intérêt de la banque"), - Component.text("§7de la ville et des joueurs!") - ), + "feature.city.mayor.perk.business_man.name", + "feature.city.mayor.perk.business_man.lore", ItemStack.of(Material.DIAMOND) ), IRON_BLOOD( @@ -79,11 +63,8 @@ public enum Perks { PerkType.BASIC, PerkCategory.MILITARY, 0, - "§e§lFer dans le Sang", - List.of( - Component.text("§7Fait apparaître un §3golem de fer §7lorsque la mascotte"), - Component.text("§7se fait taper par l'ennemi §8(Cooldown : 3 min)") - ), + "feature.city.mayor.perk.iron_man.name", + "feature.city.mayor.perk.iron_man.lore", ItemStack.of(Material.IRON_BLOCK) ), CITY_HUNTER( @@ -91,11 +72,8 @@ public enum Perks { PerkType.BASIC, PerkCategory.STRATEGY, 0, - "§e§lChasseur Urbain", - List.of( - Component.text("§7Augmente de §320 % §7les dégâts infligés aux"), - Component.text("§3monstres §7et §3joueurs §7dans sa propre ville.") - ), + "feature.city.mayor.perk.city_hunter.name", + "feature.city.mayor.perk.city_hunter.lore", ItemStack.of(Material.BOW) ), AYWENITER( @@ -103,10 +81,8 @@ public enum Perks { PerkType.BASIC, PerkCategory.AGRICULTURAL, 0, - "§e§lAyweniteur", - List.of( - Component.text("§7Casser une pierre donne 1% de chance d'avoir 2 d'Aywenites") - ), + "feature.city.mayor.perk.ayweniter.name", + "feature.city.mayor.perk.ayweniter.lore", CustomItemRegistry.getByName("omc_items:aywenite").getBest() ), GPS_TRACKER( @@ -114,11 +90,8 @@ public enum Perks { PerkType.BASIC, PerkCategory.STRATEGY, 0, - "§e§lTraceur GPS", - List.of( - Component.text("§7Lorsqu'un §3ennemi §7rentre dans votre ville,"), - Component.text("§7un §3effet de glowing §7lui est donné.") - ), + "feature.city.mayor.perk.gps_tracker.name", + "feature.city.mayor.perk.gps_tracker.lore", ItemStack.of(Material.COMPASS) ), SYMBIOSIS( @@ -126,11 +99,8 @@ public enum Perks { PerkType.BASIC, PerkCategory.MILITARY, 0, - "§e§lSymbiose", - List.of( - Component.text("§7Réduit les dégâts subis de §315%"), - Component.text("§7lorsque vous êtes autour de votre §3mascotte") - ), + "feature.city.mayor.perk.symbiosis.name", + "feature.city.mayor.perk.symbiosis.lore", ItemStack.of(Material.SCULK_CATALYST) ), AGRICULTURAL_ESSOR( @@ -138,10 +108,8 @@ public enum Perks { PerkType.EVENT, PerkCategory.AGRICULTURAL, 24 * 60 * 60 * 1000L, // 1 jour - "§e§lEssor Agricole", - List.of( - Component.text("§7La récolte est doublée pendant§3 30 min §7dans la ville §8(Cooldown : 1j)") - ), + "feature.city.mayor.perk.agricultural_essor.name", + "feature.city.mayor.perk.agricultural_essor.lore", ItemStack.of(Material.NETHERITE_HOE), DataComponentTypes.ATTRIBUTE_MODIFIERS ), @@ -150,11 +118,8 @@ public enum Perks { PerkType.EVENT, PerkCategory.AGRICULTURAL, 24 * 60 * 60 * 1000L, // 1 jour - "§e§lRuée Minière", - List.of( - Component.text("§7Tous les minerais extraits pendant§3 5 §7minutes"), - Component.text("§7donnent le double de ressources §8(Cooldown : 1j)") - ), + "feature.city.mayor.perk.mineral_rush.name", + "feature.city.mayor.perk.mineral_rush.lore", ItemStack.of(Material.DIAMOND_PICKAXE), DataComponentTypes.ATTRIBUTE_MODIFIERS ), @@ -163,11 +128,8 @@ public enum Perks { PerkType.EVENT, PerkCategory.STRATEGY, 25 * 60 * 1000L, // 25 minutes - "§e§lDissuasion Militaire", - List.of( - Component.text("§7Fait apparaître §310 golems de fer §7partout"), - Component.text("§7dans votre ville qui disparaissent dans §310 min §8(Cooldown : 25 min)") - ), + "feature.city.mayor.perk.military_dissuasion.name", + "feature.city.mayor.perk.military_dissuasion.lore", ItemStack.of(Material.IRON_GOLEM_SPAWN_EGG) ), IDYLLIC_RAIN( @@ -175,10 +137,8 @@ public enum Perks { PerkType.EVENT, PerkCategory.ECONOMIC, 24 * 60 * 60 * 1000L, // 1 jour - "§e§lPluie idyllique", - List.of( - Component.text("§7Fait apparaître de l'§3Aywenite §7dans votre ville pendant§3 1 §7min §8(Cooldown : 1j)") - ), + "feature.city.mayor.perk.idyllic_rain.name", + "feature.city.mayor.perk.idyllic_rain.lore", ItemStack.of(Material.GHAST_TEAR) ), MASCOTS_FRIENDLY( @@ -186,11 +146,8 @@ public enum Perks { PerkType.BASIC, PerkCategory.MILITARY, 0, - "§e§lMascotte de Compagnie", - List.of( - Component.text("§7A partir du §clevel 4 §7de la mascotte, vous"), - Component.text("§7aurez des §3effets bonus §7si la mascotte est en vie !") - ), + "feature.city.mayor.perk.mascots_friendly.name", + "feature.city.mayor.perk.mascots_friendly.lore", ItemStack.of(Material.SADDLE) ), GREAT_SLEEPER( @@ -198,11 +155,8 @@ public enum Perks { PerkType.BASIC, PerkCategory.DREAM, 0, - "§e§lGrand Dormeur", - List.of( - Component.text("§7Augmente de §340% la probabilité"), - Component.text("§7de faire un §3rêve.") - ), + "feature.city.mayor.perk.great_sleeper.name", + "feature.city.mayor.perk.great_sleeper.lore", ItemStack.of(Material.WHITE_BED) ), GREAT_DREAM( @@ -210,11 +164,8 @@ public enum Perks { PerkType.BASIC, PerkCategory.DREAM, 0, - "§e§lGrand Rêveur", - List.of( - Component.text("§7Augmente de §360% le temps dans"), - Component.text("§7les §3rêves.") - ), + "feature.city.mayor.perk.great_dream.name", + "feature.city.mayor.perk.great_dream.lore", DreamItemRegistry.getByName("somnifere").getBest() ), CHAOS_DREAM( @@ -222,11 +173,8 @@ public enum Perks { PerkType.EVENT, PerkCategory.DREAM, 24 * 60 * 60 * 1000L, // 1 jour - "§e§lRêve Chaotique", - List.of( - Component.text("§7Envoie tout les membres connectés dans"), - Component.text("§3les rêves §8(Cooldown : 1j)") - ), + "feature.city.mayor.perk.chaos_dream.name", + "feature.city.mayor.perk.chaos_dream.lore", DreamItemRegistry.getByName("singularity").getBest() ) ; @@ -235,18 +183,18 @@ public enum Perks { private final PerkType type; private final PerkCategory category; private final long cooldown; - private final String name; - private final List lore; + private final String nameKey; + private final String loreKey; private final ItemStack itemStack; private final DataComponentType[] toHide; - Perks(int id, PerkType type, PerkCategory category, long cooldown, String name, List lore, ItemStack itemStack, DataComponentType... toHide) { + Perks(int id, PerkType type, PerkCategory category, long cooldown, @NotNull String nameKey, String loreKey, ItemStack itemStack, DataComponentType... toHide) { this.id = id; this.type = type; this.category = category; this.cooldown = cooldown; - this.name = name; - this.lore = lore; + this.nameKey = nameKey; + this.loreKey = loreKey; this.itemStack = itemStack; this.toHide = toHide; } diff --git a/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/MainWarMenu.java b/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/MainWarMenu.java index 178f77e28..da6b77c4f 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/MainWarMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/MainWarMenu.java @@ -20,7 +20,9 @@ import fr.openmc.core.registry.items.CustomItemRegistry; import fr.openmc.core.utils.SkullUtils; import fr.openmc.core.utils.cache.PlayerNameCache; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -102,9 +104,15 @@ public List getItems() { Perks perk3 = PerkManager.getPerkById(mayor.getIdPerk3()); loreCity.add(Component.text("§7Réformes : ")); - if (perk1 != null) loreCity.add(Component.text("§8 - " + perk1.getName())); - if (perk2 != null) loreCity.add(Component.text("§8 - " + perk2.getName())); - if (perk3 != null) loreCity.add(Component.text("§8 - " + perk3.getName())); + if (perk1 != null) loreCity.add(Component.text(" - ") + .color(NamedTextColor.DARK_GRAY) + .append(TranslationManager.translation(perk1.getNameKey()))); + if (perk2 != null) loreCity.add(Component.text("- ") + .color(NamedTextColor.DARK_GRAY) + .append(TranslationManager.translation(perk2.getNameKey()))); + if (perk3 != null) loreCity.add(Component.text(" - ") + .color(NamedTextColor.DARK_GRAY) + .append(TranslationManager.translation(perk3.getNameKey()))); } loreCity.add(Component.text("§7Richesses : §6" + EconomyManager.getFormattedSimplifiedNumber(city.getBalance()) + EconomyManager.getEconomyIcon())); diff --git a/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/WarCityDetailsMenu.java b/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/WarCityDetailsMenu.java index eedeea4dd..ae53d8e21 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/WarCityDetailsMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/WarCityDetailsMenu.java @@ -11,6 +11,7 @@ import fr.openmc.core.features.city.sub.mayor.models.Mayor; import fr.openmc.core.features.city.sub.mayor.perks.Perks; import fr.openmc.core.features.economy.EconomyManager; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -68,26 +69,29 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { Perks perk3 = PerkManager.getPerkById(mayor.getIdPerk3()); ItemStack iaPerk1 = (perk1 != null) ? perk1.getItemStack() : ItemStack.of(Material.DEAD_BRAIN_CORAL_BLOCK); - String namePerk1 = (perk1 != null) ? perk1.getName() : "§8Réforme Vide"; - List lorePerk1 = (perk1 != null) ? new ArrayList<>(perk1.getLore()) : null; + Component namePerk1 = (perk1 != null) ? TranslationManager.translation(perk1.getNameKey()) : + TranslationManager.translation("feature.city.mayor.perk.none.name"); + List lorePerk1 = (perk1 != null) ? new ArrayList<>(TranslationManager.translationLore(perk1.getLoreKey())) : null; map.put(11, new ItemBuilder(this, iaPerk1, itemMeta -> { - itemMeta.customName(Component.text(namePerk1)); + itemMeta.customName(namePerk1); itemMeta.lore(lorePerk1); }).hide((perk1 != null) ? perk1.getToHide() : null)); ItemStack iaPerk2 = (perk2 != null) ? perk2.getItemStack() : ItemStack.of(Material.DEAD_BRAIN_CORAL_BLOCK); - String namePerk2 = (perk2 != null) ? perk2.getName() : "§8Réforme Vide"; - List lorePerk2 = (perk2 != null) ? new ArrayList<>(perk2.getLore()) : null; + Component namePerk2 = (perk2 != null) ? TranslationManager.translation(perk2.getNameKey()) : + TranslationManager.translation("feature.city.mayor.perk.none.name"); + List lorePerk2 = (perk2 != null) ? new ArrayList<>(TranslationManager.translationLore(perk2.getLoreKey())) : null; map.put(13, new ItemBuilder(this, iaPerk2, itemMeta -> { - itemMeta.customName(Component.text(namePerk2)); + itemMeta.customName(namePerk2); itemMeta.lore(lorePerk2); }).hide((perk2 != null) ? perk2.getToHide() : null)); ItemStack iaPerk3 = (perk3 != null) ? perk3.getItemStack() : ItemStack.of(Material.DEAD_BRAIN_CORAL_BLOCK); - String namePerk3 = (perk3 != null) ? perk3.getName() : "§8Réforme Vide"; - List lorePerk3 = (perk3 != null) ? new ArrayList<>(perk3.getLore()) : null; + Component namePerk3 = (perk3 != null) ? TranslationManager.translation(perk3.getNameKey()) : + TranslationManager.translation("feature.city.mayor.perk.none.name"); + List lorePerk3 = (perk3 != null) ? new ArrayList<>(TranslationManager.translationLore(perk3.getLoreKey())) : null; map.put(15, new ItemBuilder(this, iaPerk3, itemMeta -> { - itemMeta.customName(Component.text(namePerk3)); + itemMeta.customName(namePerk3); itemMeta.lore(lorePerk3); }).hide((perk3 != null) ? perk3.getToHide() : null)); } diff --git a/src/main/resources/translations/lang.properties b/src/main/resources/translations/lang.properties index dd35fb98e..ef37045a4 100644 --- a/src/main/resources/translations/lang.properties +++ b/src/main/resources/translations/lang.properties @@ -831,4 +831,64 @@ feature.city.mascot.mascot=Mascotte # - War feature.city.war.peace=Paix -feature.city.war.war=Guerre \ No newline at end of file +feature.city.war.war=Guerre + +# - Mayor +feature.city.mayor.perk.category.military=Réformes militaires +feature.city.mayor.perk.category.strategy=Réformes de stratégie +feature.city.mayor.perk.category.agricultural=Réformes d'agriculture +feature.city.mayor.perk.category.economic=Réformes économiques +feature.city.mayor.perk.category.onirique=Réformes Oniriques +feature.city.mayor.perk.none.name=Réforme Vide +feature.city.mayor.perk.fou_de_rage.name=Fou de rage +feature.city.mayor.perk.fou_de_rage.lore=Dans votre ville : Résistance \ +
Hors de votre ville : Force +feature.city.mayor.perk.impot.name=Prévélement d'Impot +feature.city.mayor.perk.impot.lore=Des collecteurs prélèvent un impôt sur les joueurs \ +
Montant fixe par attaque +feature.city.mayor.perk.miner.name=Mineur Dévoué +feature.city.mayor.perk.miner.lore=Confère un bonus de minage \ +
Célérité permanente +feature.city.mayor.perk.demon_fruit.name=Fruit du Démon +feature.city.mayor.perk.demon_fruit.lore=Augmente la portée d'interaction \ +
Blocs et entités +feature.city.mayor.perk.business_man.name=Buisness Man +feature.city.mayor.perk.business_man.lore=Augmente les intérêts de la banque \ +
Bonus d'intérêt +feature.city.mayor.perk.iron_man.name=Fer dans le Sang +feature.city.mayor.perk.iron_man.lore=Un golem défend la mascotte en cas d'attaque +feature.city.mayor.perk.city_hunter.name=Chasseur Urbain +feature.city.mayor.perk.city_hunter.lore=Augmente vos dégâts contre joueurs et monstres \ +
Bonus hors des villes adverses +feature.city.mayor.perk.ayweniter.name=Ayweniteur +feature.city.mayor.perk.ayweniter.lore=Chance de trouver de l'Aywenite en minant la pierre +feature.city.mayor.perk.gps_tracker.name=Traceur GPS +feature.city.mayor.perk.gps_tracker.lore=Les intrus sont mis en surbrillance dans votre ville \ +
Alerte à l'entrée +feature.city.mayor.perk.symbiosis.name=Symbiose +feature.city.mayor.perk.symbiosis.lore=Réduit les dégâts près de votre mascotte \ +
Rayon de 10 blocs +feature.city.mayor.perk.agricultural_essor.name=Essor Agricole +feature.city.mayor.perk.agricultural_essor.lore=Double les récoltes pendant l'évènement \ +
Durée limitée +feature.city.mayor.perk.mineral_rush.name=Ruée Minière/bold> +feature.city.mayor.perk.mineral_rush.lore=Double les minerais pendant l'évènement \ +
Bonus sur les minerais rares +feature.city.mayor.perk.military_dissuasion.name=Dissuasion Militaire +feature.city.mayor.perk.military_dissuasion.lore=Fait apparaître des golems dans votre ville \ +
Effet temporaire +feature.city.mayor.perk.idyllic_rain.name=Pluie idyllique +feature.city.mayor.perk.idyllic_rain.lore=Fait pleuvoir de l'Aywenite dans votre ville \ +
Réservé aux membres +feature.city.mayor.perk.mascots_friendly.name=Mascotte de Compagnie +feature.city.mayor.perk.mascots_friendly.lore=Octroie les bonus de niveau de mascotte aux membres +feature.city.mayor.perk.great_sleeper.name=Grand Dormeur +feature.city.mayor.perk.great_sleeper.lore=Augmente les chances d'entrer en rêve \ +
Bonus important +feature.city.mayor.perk.great_dream.name=Grand Rêveur +feature.city.mayor.perk.great_dream.lore=Augmente la durée passée en rêve \ +
Bonus de temps +feature.city.mayor.perk.chaos_dream.name=Rêve Chaotique +feature.city.mayor.perk.chaos_dream.lore=Téléporte les membres dans le rêve \ +
Évènement de ville + From 95a8652fd7f5fcee8ce2fd3364e4e1a9f0d035b8 Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Wed, 25 Mar 2026 20:59:08 +0100 Subject: [PATCH 09/20] translation for package feature.sub.mayor --- .../java/fr/openmc/api/input/ChatInput.java | 2 +- .../sub/mayor/actions/MayorCommandAction.java | 6 +- .../sub/mayor/actions/MayorSetWarpAction.java | 23 +- .../mayor/commands/AdminMayorCommands.java | 10 +- .../sub/mayor/commands/MayorCommands.java | 6 +- .../sub/mayor/listeners/UrneListener.java | 34 ++- .../city/sub/mayor/managers/MayorManager.java | 20 +- .../city/sub/mayor/managers/NPCManager.java | 65 +++-- .../sub/mayor/menu/MayorElectionMenu.java | 81 ++---- .../city/sub/mayor/menu/MayorLawMenu.java | 125 +++++---- .../city/sub/mayor/menu/MayorMandateMenu.java | 61 ++--- .../city/sub/mayor/menu/MayorVoteMenu.java | 69 +++-- .../city/sub/mayor/menu/MoreInfoMenu.java | 25 +- .../sub/mayor/menu/create/MayorColorMenu.java | 68 +++-- .../mayor/menu/create/MayorCreateMenu.java | 95 +++---- .../mayor/menu/create/MayorModifyMenu.java | 21 +- .../sub/mayor/menu/create/PerkChoiceMenu.java | 42 ++- .../city/sub/mayor/menu/npc/MayorNpcMenu.java | 29 ++- .../city/sub/mayor/menu/npc/OwnerNpcMenu.java | 38 +-- .../sub/mayor/perks/basic/AyweniterPerk.java | 4 +- .../sub/mayor/perks/basic/GPSTrackerPerk.java | 7 +- .../sub/mayor/perks/basic/IronBloodPerk.java | 4 +- .../perks/event/AgriculturalEssorPerk.java | 9 +- .../mayor/perks/event/ImpotCollection.java | 24 +- .../mayor/perks/event/MilitaryDissuasion.java | 6 +- .../mayor/perks/event/MineralRushPerk.java | 9 +- .../utils/messages/TranslationManager.java | 5 +- .../resources/translations/lang.properties | 245 ++++++++++++++++++ 28 files changed, 733 insertions(+), 400 deletions(-) diff --git a/src/main/java/fr/openmc/api/input/ChatInput.java b/src/main/java/fr/openmc/api/input/ChatInput.java index 93ede752c..18c856e11 100644 --- a/src/main/java/fr/openmc/api/input/ChatInput.java +++ b/src/main/java/fr/openmc/api/input/ChatInput.java @@ -20,7 +20,7 @@ public class ChatInput implements Listener { private static final Map> playerInputs = new HashMap<>(); - public static void sendInput(Player player, String startMessage, Consumer callback) { + public static void sendInput(Player player, Component startMessage, Consumer callback) { playerInputs.put(player.getUniqueId(), callback); player.closeInventory(); player.sendMessage(startMessage); diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/actions/MayorCommandAction.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/actions/MayorCommandAction.java index 48eb4bd84..787217378 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/actions/MayorCommandAction.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/actions/MayorCommandAction.java @@ -17,6 +17,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -31,7 +32,10 @@ public static void launchInteractionMenu(Player player) { } if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.MAYOR)) { - MessagesManager.sendMessage(player, Component.text("Vous n'avez pas débloqué cette feature ! Veuillez améliorer votre ville au niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.MAYOR) + " !"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.mayor.error.feature_locked", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.MAYOR)).color(NamedTextColor.GOLD) + ), Prefix.CITY, MessageType.ERROR, false); return; } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/actions/MayorSetWarpAction.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/actions/MayorSetWarpAction.java index f9d0e5d4d..51f95546f 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/actions/MayorSetWarpAction.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/actions/MayorSetWarpAction.java @@ -11,7 +11,9 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Chunk; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -30,7 +32,7 @@ public static void setWarp(Player player) { Mayor mayor = city.getMayor(); if ((mayor == null || !player.getUniqueId().equals(city.getMayor().getMayorUUID())) && !city.getPlayerWithPermission(CityPermission.OWNER).equals(player.getUniqueId())) { - MessagesManager.sendMessage(player, Component.text("Vous n'êtes pas le maire de la ville"), Prefix.MAYOR, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.warp.error.not_mayor"), Prefix.MAYOR, MessageType.ERROR, false); return; } @@ -44,20 +46,25 @@ public static void setWarp(Player player) { getWarpWand(), "mayor:wait-set-warp", 300, - Component.text("§7Vous avez 300s pour sélectionner votre point de spawn"), - Component.text("§7Vous n'avez pas eu le temps de poser votre warp"), + TranslationManager.translation("feature.city.mayor.warp.interaction.remaining", Component.text("300s").color(NamedTextColor.GRAY)), + TranslationManager.translation("feature.city.mayor.warp.interaction.timeout"), locationClick -> { if (locationClick == null) return true; Chunk chunk = locationClick.getChunk(); if (!city.hasChunk(chunk.getX(), chunk.getZ())) { - MessagesManager.sendMessage(player, Component.text("§cImpossible de mettre le warp ici car ce n'est pas dans votre ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.warp.error.outside_city"), Prefix.CITY, MessageType.ERROR, false); return false; } DynamicCooldownManager.use(city.getUniqueId(), "mayor:law-move-warp", COOLDOWN_TIME_WARP); law.setWarp(locationClick); - MessagesManager.sendMessage(player, Component.text("Vous venez de mettre le §9warp de votre ville §fen : \n §8- §fx=§6" + locationClick.x() + "\n §8- §fy=§6" + locationClick.y() + "\n §8- §fz=§6" + locationClick.z()), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.mayor.warp.success", + Component.text(locationClick.x()).color(NamedTextColor.GOLD), + Component.text(locationClick.y()).color(NamedTextColor.GOLD), + Component.text(locationClick.z()).color(NamedTextColor.GOLD) + ), Prefix.CITY, MessageType.SUCCESS, false); return true; }, null @@ -66,12 +73,12 @@ public static void setWarp(Player player) { public static ItemStack getWarpWand() { List loreItemInterraction = List.of( - Component.text("§7Cliquez sur l'endroit où vous voulez mettre le §9warp") + TranslationManager.translation("feature.city.mayor.warp.wand.lore") ); ItemStack item = CustomItemRegistry.getByName("omc_items:warp_stick").getBest(); ItemMeta itemMeta = item.getItemMeta(); - - itemMeta.displayName(Component.text("§7Séléction du §9warp")); + + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.warp.wand.name")); itemMeta.lore(loreItemInterraction); item.setItemMeta(itemMeta); return item; diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/commands/AdminMayorCommands.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/commands/AdminMayorCommands.java index 5b190b3b1..fb9cf27eb 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/commands/AdminMayorCommands.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/commands/AdminMayorCommands.java @@ -43,12 +43,12 @@ public void changeElection( if (city == null) { MessagesManager.sendMessage(sender, TranslationManager.translation("messages.city.not_found"), Prefix.STAFF, MessageType.ERROR, false); - MessagesManager.sendMessage(sender, Component.text("/adminmayor changeelection cityUUID electionType"), Prefix.STAFF, MessageType.INFO, false); + MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.mayor.admin.changeelection.usage"), Prefix.STAFF, MessageType.INFO, false); return; } if (!Objects.equals(electionType, "owner_choose") && !Objects.equals(electionType, "election")) { - MessagesManager.sendMessage(sender, Component.text("/adminmayor changeelection cityUUID electionType"), Prefix.STAFF, MessageType.INFO, false); + MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.mayor.admin.changeelection.usage"), Prefix.STAFF, MessageType.INFO, false); return; } @@ -56,7 +56,11 @@ public void changeElection( city.getMayor().setElectionType(E); - MessagesManager.sendMessage(sender, Component.text("Vous venez de mettre : " + electionType + " dans la ville " + city.getName()), Prefix.STAFF, MessageType.INFO, false); + MessagesManager.sendMessage(sender, TranslationManager.translation( + "feature.city.mayor.admin.changeelection.success", + Component.text(electionType), + Component.text(city.getName()) + ), Prefix.STAFF, MessageType.INFO, false); } } \ No newline at end of file diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/commands/MayorCommands.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/commands/MayorCommands.java index 9aee67364..5f4e3aeba 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/commands/MayorCommands.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/commands/MayorCommands.java @@ -10,7 +10,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; -import net.kyori.adventure.text.Component; +import fr.openmc.core.utils.messages.TranslationManager; import org.bukkit.Location; import org.bukkit.entity.Player; import revxrsal.commands.annotation.Command; @@ -37,10 +37,10 @@ void warp(Player player) { if (warp == null) { if (MayorManager.phaseMayor == 2) { - MessagesManager.sendMessage(player, Component.text("Le warp de lavVille n'est pas encore défini ! Demandez au §6maire §factuel d'en mettre un ! §8§o*via /city setwarp ou avec le menu des lois*"), Prefix.CITY, MessageType.INFO, true); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.command.warp.not_set.phase2"), Prefix.CITY, MessageType.INFO, true); return; } - MessagesManager.sendMessage(player, Component.text("Le warp de la ville n'est pas encore défini ! Vous devez attendre que un maire soit élu pour mettre un warp"), Prefix.CITY, MessageType.INFO, true); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.command.warp.not_set.no_mayor"), Prefix.CITY, MessageType.INFO, true); return; } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/listeners/UrneListener.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/listeners/UrneListener.java index f646da5dc..ba6089476 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/listeners/UrneListener.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/listeners/UrneListener.java @@ -17,7 +17,9 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Chunk; import org.bukkit.GameMode; import org.bukkit.Location; @@ -41,7 +43,7 @@ public void onUrneInteractEvent(FurnitureInteractEvent event) { City city = CityManager.getCityFromChunk(chunk.getX(), chunk.getZ()); if (playerCity == null) { - MessagesManager.sendMessage(player, Component.text("§8§o*Mystérieux objet... Cela doit surement servir pour des éléctions...*"), Prefix.MAYOR, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.urne.interact.mysterious"), Prefix.MAYOR, MessageType.INFO, false); return; } @@ -50,27 +52,30 @@ public void onUrneInteractEvent(FurnitureInteractEvent event) { event.getFurniture().remove(false); } - MessagesManager.sendMessage(player, Component.text("§8§oCet objet n'est pas dans une ville"), Prefix.MAYOR, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.error.not_in_city"), Prefix.MAYOR, MessageType.ERROR, false); return; } if (!playerCity.equals(city)) { - MessagesManager.sendMessage(player, Component.text("§8§o*Mhh... Ce n'est pas votre urne*"), Prefix.MAYOR, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.urne.interact.not_your_urne"), Prefix.MAYOR, MessageType.INFO, false); return; } if (playerCity.getElectionType() == ElectionType.OWNER_CHOOSE) { - MessagesManager.sendMessage(player, Component.text("§8§o*vous devez avoir au moins §6" + MayorManager.MEMBER_REQUEST_ELECTION + " §8membres afin de pouvoir faire une éléction*"), Prefix.MAYOR, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.mayor.urne.interact.need_members", + Component.text(MayorManager.MEMBER_REQUEST_ELECTION).color(NamedTextColor.GOLD) + ), Prefix.MAYOR, MessageType.INFO, false); return; } if (MayorManager.phaseMayor != 1) { - MessagesManager.sendMessage(player, Component.text("§8§o*Les éléctions ont déjà eu lieu !*"), Prefix.MAYOR, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.urne.interact.election_already"), Prefix.MAYOR, MessageType.INFO, false); return; } if (MayorManager.cityElections.get(playerCity.getUniqueId()) == null) { - MessagesManager.sendMessage(player, Component.text("§8§o*personne ne s'est présenté ! Présenter vous ! /city*"), Prefix.MAYOR, MessageType.INFO, true); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.urne.interact.no_candidate"), Prefix.MAYOR, MessageType.INFO, true); return; } @@ -86,14 +91,14 @@ public void onUrnePrePlaceEvent(FurniturePrePlaceEvent event) { if (!player.getWorld().getName().equals("world")) { event.setCancelled(true); - MessagesManager.sendMessage(player, Component.text("Vous devez être dans l'overworld pour poser ceci !"), Prefix.MAYOR, MessageType.WARNING, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.urne.place.must_be_overworld"), Prefix.MAYOR, MessageType.WARNING, false); return; } City playerCity = CityManager.getPlayerCity(player.getUniqueId()); if (playerCity == null) { event.setCancelled(true); - MessagesManager.sendMessage(player, Component.text("Vous devez avoir une ville pour poser ceci !"), Prefix.MAYOR, MessageType.WARNING, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.urne.place.need_city"), Prefix.MAYOR, MessageType.WARNING, false); return; } @@ -101,25 +106,28 @@ public void onUrnePrePlaceEvent(FurniturePrePlaceEvent event) { City chunkCity = CityManager.getCityFromChunk(placedInChunk.getX(), placedInChunk.getZ()); if (chunkCity == null) { event.setCancelled(true); - MessagesManager.sendMessage(player, Component.text("Vous devez poser ceci dans votre ville!"), Prefix.MAYOR, MessageType.WARNING, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.urne.place.must_be_in_city"), Prefix.MAYOR, MessageType.WARNING, false); return; } if (!FeaturesRewards.hasUnlockFeature(playerCity, FeaturesRewards.Feature.MAYOR)) { event.setCancelled(true); - MessagesManager.sendMessage(player, Component.text("Vous devez etre niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.MAYOR) + " de ville pour poser l'urne"), Prefix.MAYOR, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.mayor.urne.place.require_level", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.MAYOR)).color(NamedTextColor.GOLD) + ), Prefix.MAYOR, MessageType.ERROR, false); return; } if (!playerCity.getPlayerWithPermission(CityPermission.OWNER).equals(player.getUniqueId())) { event.setCancelled(true); - MessagesManager.sendMessage(player, Component.text("Vous n'êtes pas le propriétaire !"), Prefix.MAYOR, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.urne.place.not_owner"), Prefix.MAYOR, MessageType.ERROR, false); return; } if (NPCManager.hasNPCS(playerCity.getUniqueId())) { event.setCancelled(true); - MessagesManager.sendMessage(player, Component.text("Vous ne pouvez pas poser ceci car vous avez déjà des NPC"), Prefix.MAYOR, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.urne.place.already_has_npc"), Prefix.MAYOR, MessageType.ERROR, false); } } @@ -160,7 +168,7 @@ private void onUrneBreakEvent(FurnitureBreakEvent event) { } if (!playerCity.getPlayerWithPermission(CityPermission.OWNER).equals(player.getUniqueId())) { - MessagesManager.sendMessage(player, Component.text("Vous ne pouvez pas poser ceci car vous êtes pas le propriétaire"), Prefix.MAYOR, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.urne.break.not_owner"), Prefix.MAYOR, MessageType.ERROR, false); event.setCancelled(true); return; } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/managers/MayorManager.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/managers/MayorManager.java index 624abc4ee..72070309d 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/managers/MayorManager.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/managers/MayorManager.java @@ -25,8 +25,8 @@ import fr.openmc.core.features.city.sub.mayor.perks.event.*; import fr.openmc.core.features.city.sub.milestone.rewards.FeaturesRewards; import fr.openmc.core.utils.cache.CacheOfflinePlayer; +import fr.openmc.core.utils.messages.TranslationManager; import lombok.Getter; -import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -302,15 +302,7 @@ public static void initPhase1() { NPCManager.updateAllNPCS(); - Bukkit.broadcast(Component.text(""" - §8§m §r - §7 - §3§lMAIRE !§r §7Les élections sont ouvertes !§7 - §8§oPrésentez vous, votez pour des maires, ... - §8§oRegardez si vous avez assez de membres ! - §7 - §8§m §r""" - )); + Bukkit.broadcast(TranslationManager.translation("feature.city.mayor.broadcast.phase1")); } public static void initPhase2() { @@ -326,13 +318,7 @@ public static void initPhase2() { NPCManager.updateAllNPCS(); - Bukkit.broadcast(Component.text(""" - §8§m §r - §7 - §3§lMAIRE !§r §7Vos réformes sont actives !§7 - §8§oFaites vos stratégies, farmez, et pleins d'autres choses ! - §7 - §8§m §r""")); + Bukkit.broadcast(TranslationManager.translation("feature.city.mayor.broadcast.phase2")); } public static void initCityPhase1(City city, Map copyCityMayor) { diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/managers/NPCManager.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/managers/NPCManager.java index d0863faf8..1999c1a79 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/managers/NPCManager.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/managers/NPCManager.java @@ -22,9 +22,11 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.event.HoverEvent; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Location; @@ -77,7 +79,8 @@ public static void createNPCS(UUID cityUUID, Location locationMayor, Location lo if (city.getMayor().getMayorUUID() != null && city.getElectionType() == ElectionType.ELECTION) { String mayorName = CacheOfflinePlayer.getOfflinePlayer(city.getMayor().getMayorUUID()).getName(); dataMayor.setSkin(mayorName); - dataMayor.setDisplayName("§6Maire " + mayorName); + String mayorDisplayName = "" + TranslationManager.translationString("feature.city.mayor.npc.display.mayor", Component.text(mayorName)) + ""; + dataMayor.setDisplayName(mayorDisplayName); dataMayor.addEquipment(NpcEquipmentSlot.HEAD, CustomItemRegistry.getByName("omc_items:suit_helmet").getBest()); dataMayor.addEquipment(NpcEquipmentSlot.CHEST, CustomItemRegistry.getByName("omc_items:suit_chestplate").getBest()); @@ -85,7 +88,8 @@ public static void createNPCS(UUID cityUUID, Location locationMayor, Location lo dataMayor.addEquipment(NpcEquipmentSlot.FEET, CustomItemRegistry.getByName("omc_items:suit_boots").getBest()); } else { dataMayor.setSkin("https://s.namemc.com/i/1971f3c39cb8e3ef.png"); - dataMayor.setDisplayName("§8Inconnu"); + String unknownDisplayName = "" + TranslationManager.translationString("feature.city.mayor.npc.display.unknown") + ""; + dataMayor.setDisplayName(unknownDisplayName); } Npc npcMayor = FancyNpcsPlugin.get().getNpcAdapter().apply(dataMayor); @@ -93,7 +97,8 @@ public static void createNPCS(UUID cityUUID, Location locationMayor, Location lo NpcData dataOwner = new NpcData("owner-" + cityUUID, creatorUUID, locationOwner); String ownerName = CacheOfflinePlayer.getOfflinePlayer(city.getPlayerWithPermission(CityPermission.OWNER)).getName(); dataOwner.setSkin(ownerName); - dataOwner.setDisplayName("Propriétaire " + ownerName + ""); + String ownerDisplayName = TranslationManager.translationString("feature.city.mayor.npc.display.owner", Component.text(ownerName)); + dataOwner.setDisplayName("" + ownerDisplayName + ""); Npc npcOwner = FancyNpcsPlugin.get().getNpcAdapter().apply(dataOwner); @@ -194,13 +199,16 @@ public void onInteractWithMayorNPC(NpcInteractEvent event) { UUID cityUUID = UUID.fromString(npc.getData().getName().replace("mayor-", "")); City city = CityManager.getCity(cityUUID); if (city == null) { - MessagesManager.sendMessage(player, Component.text("§8§oCet objet n'est pas dans une ville"), Prefix.MAYOR, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.error.not_in_city"), Prefix.MAYOR, MessageType.ERROR, false); removeNPCS(cityUUID); return; } if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.MAYOR)) { - MessagesManager.sendMessage(player, Component.text("Vous n'avez pas débloqué cette feature ! Veuillez améliorer votre ville au niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.MAYOR) + "!"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.mayor.npc.error.feature_locked", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.MAYOR)) + ), Prefix.CITY, MessageType.ERROR, false); return; } @@ -209,26 +217,26 @@ public void onInteractWithMayorNPC(NpcInteractEvent event) { int chunkZ = chunkTest.getZ(); if (!city.hasChunk(chunkX, chunkZ)) { - MessagesManager.sendMessage(player, Component.text("§8§oCet objet n'est pas dans une ville"), Prefix.MAYOR, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.error.not_in_city"), Prefix.MAYOR, MessageType.ERROR, false); removeNPCS(cityUUID); return; } if (MayorManager.phaseMayor == 1) { if (!event.getPlayer().getUniqueId().equals(city.getPlayerWithPermission(CityPermission.OWNER))) { - MessagesManager.sendMessage(player, Component.text("§8§o*mhh cette ville n'a pas encore élu un maire*"), Prefix.MAYOR, MessageType.INFO, true); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.npc.info.no_mayor_yet"), Prefix.MAYOR, MessageType.INFO, true); return; } - Component message = Component.text("§8§o*Bonjour ? Tu veux me bouger ? Clique ici !*") + Component message = TranslationManager.translation("feature.city.mayor.npc.move.prompt") .clickEvent(ClickEvent.callback(audience -> { List loreItemNPC = List.of( - Component.text("§7Cliquez sur l'endroit où vous voulez déplacer le §9NPC") + TranslationManager.translation("feature.city.mayor.npc.move.item.lore") ); ItemStack itemToGive = new ItemStack(Material.STICK); ItemMeta itemMeta = itemToGive.getItemMeta(); - itemMeta.displayName(Component.text("§7Emplacement du §9NPC")); + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.npc.move.item.name")); itemMeta.lore(loreItemNPC); itemToGive.setItemMeta(itemMeta); ItemInteraction.runLocationInteraction( @@ -236,8 +244,8 @@ public void onInteractWithMayorNPC(NpcInteractEvent event) { itemToGive, "mayor:mayor-npc-move", 300, - Component.text("§7Vous avez 300s pour sélectionner votre emplacement"), - Component.text("§7Vous n'avez pas eu le temps de déplacer votre NPC"), + TranslationManager.translation("feature.city.mayor.npc.move.interaction.remaining", Component.text("300s").color(NamedTextColor.GRAY)), + TranslationManager.translation("feature.city.mayor.npc.move.interaction.timeout"), locationClick -> { if (locationClick == null) return true; @@ -245,7 +253,7 @@ public void onInteractWithMayorNPC(NpcInteractEvent event) { City cityByChunk = CityManager.getCityFromChunk(chunk.getX(), chunk.getZ()); if (cityByChunk == null) { - MessagesManager.sendMessage(player, Component.text("§cImpossible de mettre le NPC en dehors de votre ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.npc.move.error.outside_city"), Prefix.CITY, MessageType.ERROR, false); return false; } @@ -256,7 +264,7 @@ public void onInteractWithMayorNPC(NpcInteractEvent event) { } if (!cityByChunk.getUniqueId().equals(playerCity.getUniqueId())) { - MessagesManager.sendMessage(player, Component.text("§cImpossible de mettre le NPC en dehors de votre ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.npc.move.error.outside_city"), Prefix.CITY, MessageType.ERROR, false); return false; } @@ -267,7 +275,7 @@ public void onInteractWithMayorNPC(NpcInteractEvent event) { null ); })) - .hoverEvent(HoverEvent.showText(Component.text("Déplacer ce NPC"))); + .hoverEvent(HoverEvent.showText(TranslationManager.translation("feature.city.mayor.npc.move.hover"))); MessagesManager.sendMessage(player, message, Prefix.MAYOR, MessageType.INFO, false); @@ -276,7 +284,7 @@ public void onInteractWithMayorNPC(NpcInteractEvent event) { } if (city.getElectionType() == ElectionType.OWNER_CHOOSE) { - MessagesManager.sendMessage(player, Component.text("§8§o*mhh cette ville n'a pas encore débloquée les éléctions*"), Prefix.MAYOR, MessageType.INFO, true); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.npc.info.no_election_unlocked"), Prefix.MAYOR, MessageType.INFO, true); return; } @@ -285,20 +293,23 @@ public void onInteractWithMayorNPC(NpcInteractEvent event) { UUID cityUUID = UUID.fromString(npc.getData().getName().replace("owner-", "")); City city = CityManager.getCity(cityUUID); if (city == null) { - MessagesManager.sendMessage(player, Component.text("§8§oCet objet n'est pas dans une ville"), Prefix.MAYOR, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.error.not_in_city"), Prefix.MAYOR, MessageType.ERROR, false); removeNPCS(cityUUID); return; } if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.MAYOR)) { - MessagesManager.sendMessage(player, Component.text("Vous n'avez pas débloqué cette feature ! Veuillez améliorer votre ville au niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.MAYOR) + "!"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.mayor.npc.error.feature_locked", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.MAYOR)).color(NamedTextColor.GOLD) + ), Prefix.CITY, MessageType.ERROR, false); return; } Chunk npcChuck = event.getNpc().getData().getLocation().getChunk(); if (!city.hasChunk(npcChuck.getX(), npcChuck.getZ())) { - MessagesManager.sendMessage(player, Component.text("§8§oCet objet n'est pas dans une ville"), Prefix.MAYOR, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.error.not_in_city"), Prefix.MAYOR, MessageType.ERROR, false); removeNPCS(cityUUID); return; } @@ -306,15 +317,15 @@ public void onInteractWithMayorNPC(NpcInteractEvent event) { if (MayorManager.phaseMayor == 1) { if (!event.getPlayer().getUniqueId().equals(city.getPlayerWithPermission(CityPermission.OWNER))) return; - Component message = Component.text("§8§o*Bonjour ? Tu veux me bouger ? Clique ici !*") + Component message = TranslationManager.translation("feature.city.mayor.npc.move.prompt") .clickEvent(ClickEvent.callback(audience -> { List loreItemNPC = List.of( - Component.text("§7Cliquez sur l'endroit où vous voulez déplacer le §9NPC") + TranslationManager.translation("feature.city.mayor.npc.move.item.lore") ); ItemStack itemToGive = new ItemStack(Material.STICK); ItemMeta itemMeta = itemToGive.getItemMeta(); - itemMeta.displayName(Component.text("§7Emplacement du §9NPC")); + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.npc.move.item.name")); itemMeta.lore(loreItemNPC); itemToGive.setItemMeta(itemMeta); ItemInteraction.runLocationInteraction( @@ -322,8 +333,8 @@ public void onInteractWithMayorNPC(NpcInteractEvent event) { itemToGive, "mayor:owner-npc-move", 300, - Component.text("§7Vous avez 300s pour sélectionner votre emplacement"), - Component.text("§7Vous n'avez pas eu le temps de déplacer votre NPC"), + TranslationManager.translation("feature.city.mayor.npc.move.interaction.remaining", Component.text("300s").color(NamedTextColor.GRAY)), + TranslationManager.translation("feature.city.mayor.npc.move.interaction.timeout"), locationClick -> { if (locationClick == null) return true; @@ -331,7 +342,7 @@ public void onInteractWithMayorNPC(NpcInteractEvent event) { City cityByChunk = CityManager.getCityFromChunk(chunk.getX(), chunk.getZ()); if (cityByChunk == null) { - MessagesManager.sendMessage(player, Component.text("§cImpossible de mettre le NPC en dehors de votre ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.npc.move.error.outside_city"), Prefix.CITY, MessageType.ERROR, false); return false; } @@ -342,7 +353,7 @@ public void onInteractWithMayorNPC(NpcInteractEvent event) { } if (!cityByChunk.getUniqueId().equals(playerCity.getUniqueId())) { - MessagesManager.sendMessage(player, Component.text("§cImpossible de mettre le NPC en dehors de votre ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.npc.move.error.outside_city"), Prefix.CITY, MessageType.ERROR, false); return false; } @@ -353,7 +364,7 @@ public void onInteractWithMayorNPC(NpcInteractEvent event) { null ); })) - .hoverEvent(HoverEvent.showText(Component.text("Déplacer ce NPC"))); + .hoverEvent(HoverEvent.showText(TranslationManager.translation("feature.city.mayor.npc.move.hover"))); MessagesManager.sendMessage(player, message, Prefix.MAYOR, MessageType.INFO, false); diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorElectionMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorElectionMenu.java index 27dfe2f9a..ff2e92c46 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorElectionMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorElectionMenu.java @@ -22,6 +22,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -30,7 +31,10 @@ import org.bukkit.event.inventory.InventoryCloseEvent; import org.jetbrains.annotations.NotNull; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.function.Supplier; import static fr.openmc.core.features.city.sub.mayor.managers.MayorManager.PHASE_2_DAY; @@ -43,7 +47,7 @@ public MayorElectionMenu(Player owner) { @Override public @NotNull Component getName() { - return Component.text("Menu des élections"); + return TranslationManager.translation("feature.city.mayor.menu.election.name"); } @Override @@ -78,35 +82,26 @@ public void onClose(InventoryCloseEvent event) { Supplier electionItemSupplier = () -> { List loreElection; if (MayorManager.hasVoted(player)) { - loreElection = List.of( - Component.text("§7Les élections sont §6ouvertes§7!"), - Component.text("§7Vous pouvez changer votre vote !"), - Component.empty(), - Component.text("§7Vote actuel : ").append( - Component.text(MayorManager.getPlayerVote(player).getName())) + loreElection = TranslationManager.translationLore( + "feature.city.mayor.menu.election.item.lore.voted", + Component.text(MayorManager.getPlayerVote(player).getName()) .decoration(TextDecoration.ITALIC, false) .color(MayorManager.getPlayerVote(player).getCandidateColor()), - Component.text("§cFermeture dans " + DateUtils.getTimeUntilNextDay(PHASE_2_DAY)), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR ACCEDER AU MENU") + Component.text(DateUtils.getTimeUntilNextDay(PHASE_2_DAY)).color(NamedTextColor.RED) ); } else { - loreElection = List.of( - Component.text("§7Les élections sont §6ouvertes§7!"), - Component.text("§7Choissiez le maire qui vous plaît !"), - Component.empty(), - Component.text("§cFermeture dans " + DateUtils.getTimeUntilNextDay(PHASE_2_DAY)), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR CHOISIR") + loreElection = TranslationManager.translationLore( + "feature.city.mayor.menu.election.item.lore.not_voted", + Component.text(DateUtils.getTimeUntilNextDay(PHASE_2_DAY)).color(NamedTextColor.RED) ); } return new ItemBuilder(this, Material.JUKEBOX, itemMeta -> { - itemMeta.itemName(Component.text("§6Les élections")); + itemMeta.itemName(TranslationManager.translation("feature.city.mayor.menu.election.item.name")); itemMeta.lore(loreElection); }).setOnClick(inventoryClickEvent -> { if (MayorManager.cityElections.get(city.getUniqueId()) == null) { - MessagesManager.sendMessage(player, Component.text("Il y a aucun volontaire pour être maire"), Prefix.MAYOR, MessageType.ERROR, true); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.menu.election.error.no_candidate"), Prefix.MAYOR, MessageType.ERROR, true); return; } new MayorVoteMenu(player).open(); @@ -118,19 +113,9 @@ public void onClose(InventoryCloseEvent event) { List loreCandidature; if (MayorManager.hasCandidated(player)) { - loreCandidature = List.of( - Component.text("§7Vous vous êtes déjà §3présenter §7!"), - Component.text("§7Modifiez votre couleur et regardez §3les réformes §7que vous avez choisit"), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR ACCEDER AU MENU") - ); + loreCandidature = TranslationManager.translationLore("feature.city.mayor.menu.election.candidature.lore.already"); } else { - loreCandidature = List.of( - Component.text("§7Vous pouvez vous §3inscire §7afin d'être maire !"), - Component.text("§7Sélectionnez §3vos réformes §7et votre couleur !"), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR VOUS INSCRIRE") - ); + loreCandidature = TranslationManager.translationLore("feature.city.mayor.menu.election.candidature.lore.new"); } if (hasPermissionOwner) { @@ -139,22 +124,17 @@ public void onClose(InventoryCloseEvent event) { Perks perk1 = PerkManager.getPerkById(city.getMayor().getIdPerk1()); if (perk1 == null) return Map.of(); lorePerkOwner = new ArrayList<>(List.of( - Component.text("§7Vous avez déjà choisis §3votre réforme §7!"), - Component.empty(), - TranslationManager.translation(perk1.getNameKey()) + TranslationManager.translation("feature.city.mayor.menu.election.owner_reform.lore.chosen") )); + lorePerkOwner.add(Component.empty()); + lorePerkOwner.add(TranslationManager.translation(perk1.getNameKey())); lorePerkOwner.addAll(TranslationManager.translationLore(perk1.getLoreKey())); } else { - lorePerkOwner = List.of( - Component.text("§7Vous êtes le propriétaire de la §dville §7!"), - Component.text("§7Vous pouvez choisir une §3réforme événementiel §7!"), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR CHOISIR LA REFORME") - ); + lorePerkOwner = TranslationManager.translationLore("feature.city.mayor.menu.election.owner_reform.lore.choice"); } inventory.put(22, new ItemBuilder(this, SkullUtils.getPlayerSkull(player.getUniqueId()), itemMeta -> { - itemMeta.displayName(Component.text("§7Choix d'une §3réforme")); + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.menu.election.owner_reform.name")); itemMeta.lore(lorePerkOwner); }).setOnClick(inventoryClickEvent -> { if (!MayorManager.hasChoicePerkOwner(player)) { @@ -164,7 +144,7 @@ public void onClose(InventoryCloseEvent event) { } inventory.put(33, new ItemBuilder(this, Material.PAPER, itemMeta -> { - itemMeta.itemName(Component.text("§7Votre §3candidature")); + itemMeta.itemName(TranslationManager.translation("feature.city.mayor.menu.election.candidature.name")); itemMeta.lore(loreCandidature); }).setOnClick(inventoryClickEvent -> { if (MayorManager.hasCandidated(player)) { @@ -175,22 +155,15 @@ public void onClose(InventoryCloseEvent event) { })); inventory.put(46, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.itemName(Component.text("§aRetour")); - itemMeta.lore(List.of( - Component.text("§7Vous allez retourner au menu précédent"), - Component.text("§e§lCLIQUEZ ICI POUR CONFIRMER") - )); + itemMeta.itemName(TranslationManager.translation("feature.city.mayor.menu.common.back.name").color(NamedTextColor.GREEN)); + itemMeta.lore(TranslationManager.translationLore("feature.city.mayor.menu.common.back.lore")); }, true)); - List loreInfo = Arrays.asList( - Component.text("§7Apprenez en plus sur les maires !"), - Component.text("§7Le déroulement..., les éléctions, ..."), - Component.text("§e§lCLIQUEZ ICI POUR EN VOIR PLUS!") - ); + List loreInfo = TranslationManager.translationLore("feature.city.mayor.menu.common.more_info.lore"); inventory.put(52, new ItemBuilder(this, Material.BOOK, itemMeta -> { - itemMeta.displayName(Component.text("§r§aPlus d'info !")); + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.menu.common.more_info.name")); itemMeta.lore(loreInfo); }).setOnClick(inventoryClickEvent -> new MoreInfoMenu(getOwner()).open())); diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorLawMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorLawMenu.java index 9445df8ce..cbb430bf3 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorLawMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorLawMenu.java @@ -27,6 +27,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -52,7 +53,7 @@ public MayorLawMenu(Player owner) { @Override public @NotNull Component getName() { - return Component.text("Menu des lois"); + return TranslationManager.translation("feature.city.mayor.menu.law.name"); } @Override @@ -86,37 +87,51 @@ public void onClose(InventoryCloseEvent event) { CityLaw law = city.getLaw(); Supplier pvpItemSupplier = () -> { - String nameLawPVP = law.isPvp() ? "§cDésactiver §7le PVP" : "§4Activer §7le PVP"; + Component nameLawPVP = law.isPvp() + ? TranslationManager.translation("feature.city.mayor.menu.law.pvp.name.disable") + : TranslationManager.translation("feature.city.mayor.menu.law.pvp.name.enable"); List loreLawPVP = new ArrayList<>(List.of( - Component.text("§7Cette §1loi " + (law.isPvp() ? "§4active" : "§cdésactive") + " §7le PVP dans toute la §dville"), - Component.text("§7entre les membres !") + law.isPvp() + ? TranslationManager.translation("feature.city.mayor.menu.law.pvp.lore.active") + : TranslationManager.translation("feature.city.mayor.menu.law.pvp.lore.inactive"), + TranslationManager.translation("feature.city.mayor.menu.law.pvp.lore.members") )); if (!DynamicCooldownManager.isReady(mayor.getMayorUUID(), "mayor:law-pvp")) { loreLawPVP.addAll( List.of( Component.empty(), - Component.text("§cCooldown §7: " + DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(mayor.getMayorUUID(), "mayor:law-pvp"))) + TranslationManager.translation( + "feature.city.mayor.menu.law.cooldown", + Component.text(DateUtils.convertMillisToTime( + DynamicCooldownManager.getRemaining(mayor.getMayorUUID(), "mayor:law-pvp"))) + .color(NamedTextColor.RED) + ) ) ); } else { loreLawPVP.addAll(List.of( Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR " + (law.isPvp() ? "ACTIVER" : "DESACTIVER") + " LE PVP") + TranslationManager.translation(law.isPvp() + ? "feature.city.mayor.menu.law.pvp.click.enable" + : "feature.city.mayor.menu.law.pvp.click.disable") ) ); } return new ItemBuilder(this, Material.IRON_SWORD, itemMeta -> { - itemMeta.itemName(Component.text(nameLawPVP)); + itemMeta.itemName(nameLawPVP); itemMeta.lore(loreLawPVP); }).setOnClick(inventoryClickEvent -> { if (DynamicCooldownManager.isReady(mayor.getMayorUUID(), "mayor:law-pvp")) { DynamicCooldownManager.use(mayor.getMayorUUID(), "mayor:law-pvp", COOLDOWN_TIME_PVP); law.setPvp(!law.isPvp()); - String messageLawPVP = !law.isPvp() ? "§7Vous avez §cdésactivé §7le PVP dans votre ville" : "§7Vous avez §4activé §7le PVP dans votre ville"; - MessagesManager.sendMessage(player, Component.text(messageLawPVP), Prefix.MAYOR, MessageType.SUCCESS, false); + boolean pvpEnabled = law.isPvp(); + Component messageLawPVP = pvpEnabled + ? TranslationManager.translation("feature.city.mayor.menu.law.pvp.message.enable") + : TranslationManager.translation("feature.city.mayor.menu.law.pvp.message.disable"); + MessagesManager.sendMessage(player, messageLawPVP, Prefix.MAYOR, MessageType.SUCCESS, false); Bukkit.getScheduler().runTaskLater(OMCPlugin.getInstance(), () -> { new MayorLawMenu(player).open(); @@ -138,18 +153,20 @@ public void onClose(InventoryCloseEvent event) { List loreLawWarp; if (warpLoc == null) { - loreLawWarp = new ArrayList<>(List.of( - Component.text("§7Cette §1loi §7n'est pas effective !"), - Component.text("§7Vous devez choisir un endroit où les membres pourront"), - Component.text("§7arriver") - )); + loreLawWarp = new ArrayList<>(TranslationManager.translationLore("feature.city.mayor.menu.law.warp.lore.unset")); } else { - loreLawWarp = new ArrayList<>(List.of( - Component.text("§7Les membres peuvent se téléporter à votre §9warp§7!"), - Component.text("§7Voici la position du §9warp §7: "), - Component.text("§8- §7x=§6" + warpLoc.getX()), - Component.text("§8- §7y=§6" + warpLoc.getY()), - Component.text("§8- §7z=§6" + warpLoc.getZ()) + loreLawWarp = new ArrayList<>(TranslationManager.translationLore("feature.city.mayor.menu.law.warp.lore.set")); + loreLawWarp.add(TranslationManager.translation( + "feature.city.mayor.menu.law.warp.lore.x", + Component.text(warpLoc.getX()).color(NamedTextColor.GOLD) + )); + loreLawWarp.add(TranslationManager.translation( + "feature.city.mayor.menu.law.warp.lore.y", + Component.text(warpLoc.getY()).color(NamedTextColor.GOLD) + )); + loreLawWarp.add(TranslationManager.translation( + "feature.city.mayor.menu.law.warp.lore.z", + Component.text(warpLoc.getZ()).color(NamedTextColor.GOLD) )); } @@ -157,21 +174,26 @@ public void onClose(InventoryCloseEvent event) { loreLawWarp.addAll( List.of( Component.empty(), - Component.text("§cCooldown §7: " + DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(city.getUniqueId(), "mayor:law-move-warp"))) + TranslationManager.translation( + "feature.city.mayor.menu.law.cooldown", + Component.text(DateUtils.convertMillisToTime( + DynamicCooldownManager.getRemaining(city.getUniqueId(), "mayor:law-move-warp"))) + .color(NamedTextColor.RED) + ) ) ); } else { loreLawWarp.addAll( List.of( Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR CHOISIR UN ENDROIT") + TranslationManager.translation("feature.city.mayor.menu.law.warp.click") ) ); } return new ItemBuilder(this, Material.ENDER_PEARL, itemMeta -> { - itemMeta.itemName(Component.text("§7Changer son §9warp")); + itemMeta.itemName(TranslationManager.translation("feature.city.mayor.menu.law.warp.name")); itemMeta.lore(loreLawWarp); }).setOnClick(inventoryClickEvent -> { MayorSetWarpAction.setWarp(player); @@ -187,34 +209,39 @@ public void onClose(InventoryCloseEvent event) { Supplier announceItemSupplier = () -> { List loreLawAnnounce = new ArrayList<>(List.of( - Component.text("§7Cette §1loi §7permet d'émettre un message dans toute la ville!") + TranslationManager.translation("feature.city.mayor.menu.law.announce.lore") )); if (!DynamicCooldownManager.isReady(mayor.getMayorUUID(), "mayor:law-announce")) { loreLawAnnounce.addAll( List.of( Component.empty(), - Component.text("§cCooldown §7: " + DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(mayor.getMayorUUID(), "mayor:law-announce"))) + TranslationManager.translation( + "feature.city.mayor.menu.law.cooldown", + Component.text(DateUtils.convertMillisToTime( + DynamicCooldownManager.getRemaining(mayor.getMayorUUID(), "mayor:law-announce"))) + .color(NamedTextColor.RED) + ) ) ); } else { loreLawAnnounce.addAll( List.of( Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR ECRIRE LE MESSAGE") + TranslationManager.translation("feature.city.mayor.menu.law.announce.click") ) ); } return new ItemBuilder(this, Material.BELL, itemMeta -> { - itemMeta.itemName(Component.text("§7Faire une annonce")); + itemMeta.itemName(TranslationManager.translation("feature.city.mayor.menu.law.announce.name")); itemMeta.lore(loreLawAnnounce); }).setOnClick(inventoryClickEvent -> { if (DynamicCooldownManager.isReady(mayor.getMayorUUID(), "mayor:law-announce")) { ChatInput.sendInput( player, - "§eVous pouvez entrer votre message que vous voulez diffuser dans toute la ville ! Tapez cancel pour annuler l'action", + TranslationManager.translation("feature.city.mayor.menu.law.announce.prompt"), input -> { if (input == null) return; @@ -226,12 +253,12 @@ public void onClose(InventoryCloseEvent event) { if (playerMember == null) continue; if (playerMember.isOnline()) { - MessagesManager.sendMessage(playerMember, Component.text("§8-- §6Annonce du Maire §8--"), Prefix.MAYOR, MessageType.INFO, false); + MessagesManager.sendMessage(playerMember, TranslationManager.translation("feature.city.mayor.menu.law.announce.header"), Prefix.MAYOR, MessageType.INFO, false); MessagesManager.sendMessage(playerMember, Component.text(input), Prefix.MAYOR, MessageType.INFO, false); } } - MessagesManager.sendMessage(player, Component.text("Vous avez bien envoyé le message a tous les membres de la villes"), Prefix.MAYOR, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.menu.law.announce.success"), Prefix.MAYOR, MessageType.SUCCESS, false); } ); @@ -254,14 +281,19 @@ public void onClose(InventoryCloseEvent event) { lorePerkEvent.addAll( List.of( Component.empty(), - Component.text("§cCooldown §7: " + DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(mayor.getMayorUUID(), "mayor:law-perk-event"))) + TranslationManager.translation( + "feature.city.mayor.menu.law.cooldown", + Component.text(DateUtils.convertMillisToTime( + DynamicCooldownManager.getRemaining(mayor.getMayorUUID(), "mayor:law-perk-event"))) + .color(NamedTextColor.RED) + ) ) ); } else { lorePerkEvent.addAll( List.of( Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR UTILISER LA REFORME") + TranslationManager.translation("feature.city.mayor.menu.law.perk_event.click") ) ); } @@ -272,7 +304,7 @@ public void onClose(InventoryCloseEvent event) { .hide(perkEvent.getToHide()) .setOnClick(inventoryClickEvent -> { if (!DynamicCooldownManager.isReady(mayor.getMayorUUID(), "mayor:law-perk-event")) { - MessagesManager.sendMessage(player, Component.text("Vous devez attendre avant de pouvoir utiliser cette §3réforme"), Prefix.MAYOR, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.menu.law.perk_event.wait"), Prefix.MAYOR, MessageType.ERROR, false); return; } @@ -288,7 +320,7 @@ public void onClose(InventoryCloseEvent event) { if (DreamUtils.isDreamWorld(member.getWorld())) continue; ImpotCollection.spawnZombies(member, city); - MessagesManager.sendMessage(member, Component.text("Le §6maire §fa déclenché le §ePrélévement d'Impot §f!"), Prefix.MAYOR, MessageType.INFO, false); + MessagesManager.sendMessage(member, TranslationManager.translation("feature.city.mayor.menu.law.perk_event.impot.trigger"), Prefix.MAYOR, MessageType.INFO, false); } DynamicCooldownManager.use(mayor.getMayorUUID(), "mayor:law-perk-event", PerkManager.getPerkEvent(mayor).getCooldown()); @@ -299,7 +331,7 @@ public void onClose(InventoryCloseEvent event) { if (member == null || !member.isOnline()) continue; - MessagesManager.sendMessage(member, Component.text("Le §6maire §fa déclenché l'§eEssor Agricole §f!"), Prefix.MAYOR, MessageType.INFO, false); + MessagesManager.sendMessage(member, TranslationManager.translation("feature.city.mayor.menu.law.perk_event.agricultural.trigger"), Prefix.MAYOR, MessageType.INFO, false); } DynamicCooldownManager.use(city.getUniqueId(), "city:agricultural_essor", 30 * 60 * 1000L); // 30 minutes @@ -311,7 +343,7 @@ public void onClose(InventoryCloseEvent event) { if (member == null || !member.isOnline()) continue; - MessagesManager.sendMessage(member, Component.text("Le §6maire §fa déclenché la §eRuée Minière §f!"), Prefix.MAYOR, MessageType.INFO, false); + MessagesManager.sendMessage(member, TranslationManager.translation("feature.city.mayor.menu.law.perk_event.mineral.trigger"), Prefix.MAYOR, MessageType.INFO, false); } DynamicCooldownManager.use(city.getUniqueId(), "city:mineral_rush", 5 * 60 * 1000L); // 5 minutes @@ -323,7 +355,7 @@ public void onClose(InventoryCloseEvent event) { if (member == null || !member.isOnline()) continue; - MessagesManager.sendMessage(member, Component.text("Le §6maire §fa déclenché la §eDissuasion Militaire §f!"), Prefix.MAYOR, MessageType.INFO, false); + MessagesManager.sendMessage(member, TranslationManager.translation("feature.city.mayor.menu.law.perk_event.military.trigger"), Prefix.MAYOR, MessageType.INFO, false); } MilitaryDissuasion.startEvent(city, 10); @@ -346,7 +378,7 @@ public void run() { if (member == null || !member.isOnline()) continue; - MessagesManager.sendMessage(member, Component.text("Le §6maire §fa déclenché la §ePluie idyllique §f!"), Prefix.MAYOR, MessageType.INFO, false); + MessagesManager.sendMessage(member, TranslationManager.translation("feature.city.mayor.menu.law.perk_event.idyllic.trigger"), Prefix.MAYOR, MessageType.INFO, false); } // spawn d'un total de 100 aywenite progressivement sur une minute @@ -360,7 +392,7 @@ public void run() { if (member == null || !member.isOnline()) continue; - MessagesManager.sendMessage(member, Component.text("Le §6maire §fa déclenché la §eRêve Chaotique §f!"), Prefix.MAYOR, MessageType.INFO, false); + MessagesManager.sendMessage(member, TranslationManager.translation("feature.city.mayor.menu.law.perk_event.dream.trigger"), Prefix.MAYOR, MessageType.INFO, false); DBDreamPlayer dbDreamPlayer = DreamManager.getCacheDreamPlayer(player); @@ -380,21 +412,14 @@ public void run() { } inventory.put(46, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.itemName(Component.text("§aRetour")); - itemMeta.lore(List.of( - Component.text("§7Vous allez retourner au menu précédent"), - Component.text("§e§lCLIQUEZ ICI POUR CONFIRMER") - )); + itemMeta.itemName(TranslationManager.translation("feature.city.mayor.menu.common.back.name").color(NamedTextColor.GREEN)); + itemMeta.lore(TranslationManager.translationLore("feature.city.mayor.menu.common.back.lore")); }, true)); - List loreInfo = Arrays.asList( - Component.text("§7Apprenez en plus sur les maires !"), - Component.text("§7Le déroulement..., les éléctions, ..."), - Component.text("§e§lCLIQUEZ ICI POUR EN VOIR PLUS!") - ); + List loreInfo = TranslationManager.translationLore("feature.city.mayor.menu.common.more_info.lore"); inventory.put(52, new ItemBuilder(this, Material.BOOK, itemMeta -> { - itemMeta.displayName(Component.text("§r§aPlus d'info !")); + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.menu.common.more_info.name")); itemMeta.lore(loreInfo); }).setOnClick(inventoryClickEvent -> new MoreInfoMenu(getOwner()).open())); diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorMandateMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorMandateMenu.java index 64fc7989f..ed8767d85 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorMandateMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorMandateMenu.java @@ -14,6 +14,7 @@ import fr.openmc.core.utils.cache.CacheOfflinePlayer; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -22,7 +23,10 @@ import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; public class MayorMandateMenu extends Menu { @@ -32,7 +36,7 @@ public MayorMandateMenu(Player owner) { @Override public @NotNull Component getName() { - return Component.text("Menu des Maires - Mandat"); + return TranslationManager.translation("feature.city.mayor.menu.mandate.name"); } @Override @@ -68,20 +72,23 @@ public void onClose(InventoryCloseEvent event) { Perks perk3 = PerkManager.getPerkById(mayor.getIdPerk3()); List loreMayor = new ArrayList<>(List.of( - Component.text("§8§oMaire de " + city.getName()) + TranslationManager.translation( + "feature.city.mayor.menu.mandate.mayor.lore.header", + Component.text(city.getName()).color(NamedTextColor.LIGHT_PURPLE).decoration(TextDecoration.ITALIC, false) + ) )); loreMayor.add(Component.empty()); - loreMayor.add(perk2 == null ? Component.text("§cErreur de la réforme") : + loreMayor.add(perk2 == null ? TranslationManager.translation("feature.city.menus.common.error") : TranslationManager.translation(perk2.getNameKey())); loreMayor.addAll(perk2 == null ? List.of() : TranslationManager.translationLore(perk2.getLoreKey())); loreMayor.add(Component.empty()); - loreMayor.add(perk3 == null ? Component.text("§cErreur de la réforme") : + loreMayor.add(perk3 == null ? TranslationManager.translation("feature.city.menus.common.error") : TranslationManager.translation(perk3.getNameKey())); loreMayor.addAll(perk3 == null ? List.of() : TranslationManager.translationLore(perk3.getLoreKey())); - inventory.put(3, new ItemBuilder(this, SkullUtils.getPlayerSkull(mayor.getMayorUUID()), itemMeta -> { - itemMeta.displayName(Component.text("Maire " + mayor.getName()).color(mayor.getMayorColor()).decoration(TextDecoration.ITALIC, false)); + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.menu.mandate.mayor.title", Component.text(mayor.getName())) + .color(mayor.getMayorColor()).decoration(TextDecoration.ITALIC, false)); itemMeta.lore(loreMayor); })); @@ -94,30 +101,33 @@ public void onClose(InventoryCloseEvent event) { // si le joueur est maire if (player.getUniqueId().equals(mayor.getMayorUUID())) { - List loreLaw = List.of( - Component.text("§7Vous êtes le ").append(Component.text("maire").color(mayor.getMayorColor()).decoration(TextDecoration.ITALIC, false).append(Component.text("§7!"))), - Component.empty(), - Component.text("§7Vous pouvez changer les §1lois §7et lancer des §6évènements §7!"), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR OUVRIR UN MENU") - + List loreLaw = TranslationManager.translationLore( + "feature.city.mayor.menu.mandate.law.lore", + TranslationManager.translation("feature.city.mayor.label.mayor") + .color(mayor.getMayorColor()).decoration(TextDecoration.ITALIC, false) ); inventory.put(4, new ItemBuilder(this, Material.STONE_BUTTON, itemMeta -> { - itemMeta.itemName(Component.text("§1Les Lois")); + itemMeta.itemName(TranslationManager.translation("feature.city.mayor.menu.mandate.law.name")); itemMeta.lore(loreLaw); }).setOnClick(event -> new MayorLawMenu(player).open())); } List loreOwner = new ArrayList<>(List.of( - Component.text("§8§oPropriétaire de " + city.getName()) + TranslationManager.translation( + "feature.city.mayor.menu.mandate.owner.lore.header", + Component.text(city.getName()).color(NamedTextColor.LIGHT_PURPLE) + ) )); loreOwner.add(Component.empty()); - loreOwner.add(perk1 == null ? Component.text("§cErreur de la réforme") : + loreOwner.add(perk1 == null ? TranslationManager.translation("feature.city.menus.common.error") : TranslationManager.translation(perk1.getNameKey())); loreOwner.addAll(perk1 == null ? List.of() : TranslationManager.translationLore(perk1.getLoreKey())); inventory.put(5, new ItemBuilder(this, SkullUtils.getPlayerSkull(city.getPlayerWithPermission(CityPermission.OWNER)), itemMeta -> { - itemMeta.displayName(Component.text("§ePropriétaire " + CacheOfflinePlayer.getOfflinePlayer(city.getPlayerWithPermission((CityPermission.OWNER))).getName())); + itemMeta.displayName(TranslationManager.translation( + "feature.city.mayor.menu.mandate.owner.title", + Component.text(CacheOfflinePlayer.getOfflinePlayer(city.getPlayerWithPermission((CityPermission.OWNER))).getName()) + ).color(NamedTextColor.YELLOW)); itemMeta.lore(loreOwner); })); @@ -149,21 +159,14 @@ public void onClose(InventoryCloseEvent event) { }).hide((perk3 != null) ? perk3.getToHide() : null)); inventory.put(46, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.itemName(Component.text("§aRetour")); - itemMeta.lore(List.of( - Component.text("§7Vous allez retourner au menu précédent"), - Component.text("§e§lCLIQUEZ ICI POUR CONFIRMER") - )); + itemMeta.itemName(TranslationManager.translation("feature.city.mayor.menu.common.back.name").color(NamedTextColor.GREEN)); + itemMeta.lore(TranslationManager.translationLore("feature.city.mayor.menu.common.back.lore")); }, true)); - List loreInfo = Arrays.asList( - Component.text("§7Apprenez en plus sur les maires !"), - Component.text("§7Le déroulement..., les éléctions, ..."), - Component.text("§e§lCLIQUEZ ICI POUR EN VOIR PLUS!") - ); + List loreInfo = TranslationManager.translationLore("feature.city.mayor.menu.common.more_info.lore"); inventory.put(52, new ItemBuilder(this, Material.BOOK, itemMeta -> { - itemMeta.displayName(Component.text("§r§aPlus d'info !")); + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.menu.common.more_info.name")); itemMeta.lore(loreInfo); }).setOnClick(inventoryClickEvent -> new MoreInfoMenu(getOwner()).open())); diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorVoteMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorVoteMenu.java index 895c0f110..d7986cb27 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorVoteMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorVoteMenu.java @@ -12,7 +12,6 @@ import fr.openmc.core.features.city.sub.mayor.models.MayorCandidate; import fr.openmc.core.features.city.sub.mayor.perks.Perks; import fr.openmc.core.registry.items.CustomItemRegistry; -import fr.openmc.core.utils.ColorUtils; import fr.openmc.core.utils.SkullUtils; import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; @@ -29,7 +28,10 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import static fr.openmc.api.menulib.utils.StaticSlots.combine; @@ -74,12 +76,22 @@ public List getItems() { int vote = candidate.getVote(); List loreMayor = new ArrayList<>(List.of( - Component.text("§8Candidat pour le maire de " + city.getName()) + TranslationManager.translation( + "feature.city.mayor.menu.vote.lore.header", + Component.text(city.getName()).color(NamedTextColor.LIGHT_PURPLE) + ) )); if (perk2 == null || perk3 == null) return List.of(); loreMayor.add(Component.empty()); - loreMayor.add(Component.text("§7Votes : ").append(Component.text(vote).color(color).decoration(TextDecoration.ITALIC, false))); - loreMayor.add(Component.text(" §8[" + getProgressBar(vote, totalVotes, color) + "§8] §7(" + getVotePercentage(vote, totalVotes) + "%)")); + loreMayor.add(TranslationManager.translation( + "feature.city.mayor.menu.vote.lore.votes", + Component.text(vote).color(color).decoration(TextDecoration.ITALIC, false) + )); + loreMayor.add(TranslationManager.translation( + "feature.city.mayor.menu.vote.lore.progress", + getProgressBarComponent(vote, totalVotes, color), + Component.text(getVotePercentage(vote, totalVotes)).color(NamedTextColor.GRAY) + )); loreMayor.add(Component.empty()); loreMayor.add(TranslationManager.translation(perk2.getNameKey())); loreMayor.addAll(TranslationManager.translationLore(perk2.getLoreKey())); @@ -87,20 +99,23 @@ public List getItems() { loreMayor.add(TranslationManager.translation(perk3.getNameKey())); loreMayor.addAll(TranslationManager.translationLore(perk3.getLoreKey())); loreMayor.add(Component.empty()); - loreMayor.add(Component.text("§e§lCLIQUEZ ICI POUR LE VOTER")); + loreMayor.add(TranslationManager.translation("feature.city.mayor.menu.vote.lore.click")); MayorCandidate playerVote = MayorManager.getPlayerVote(player); boolean ench = playerVote != null && candidate == playerVote; ItemStack mayorItem = new ItemBuilder(this, SkullUtils.getPlayerSkull(candidate.getCandidateUUID()), itemMeta -> { - itemMeta.displayName(Component.text("Maire " + candidate.getName()).color(color).decoration(TextDecoration.ITALIC, false)); + itemMeta.displayName(TranslationManager.translation( + "feature.city.mayor.menu.vote.mayor.title", + Component.text(candidate.getName()).color(color).decoration(TextDecoration.ITALIC, false) + ).color(color).decoration(TextDecoration.ITALIC, false)); itemMeta.lore(loreMayor); itemMeta.setEnchantmentGlintOverride(ench); }).setOnClick(inventoryClickEvent -> { if (MayorManager.hasVoted(player) && playerVote != null) { if (candidate.getCandidateUUID().equals(playerVote.getCandidateUUID())) { - MessagesManager.sendMessage(player, Component.text("§7Vous avez déjà voté pour ce §6maire"), Prefix.MAYOR, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.menu.vote.message.already_voted"), Prefix.MAYOR, MessageType.ERROR, false); return; } @@ -110,7 +125,13 @@ public List getItems() { } else { MayorManager.voteCandidate(city, player, candidate); } - MessagesManager.sendMessage(player, Component.text("§7Vous avez voté pour le ").append(Component.text("maire " + candidate.getName()).color(color)), Prefix.MAYOR, MessageType.SUCCESS, true); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.mayor.menu.vote.message.voted", + TranslationManager.translation( + "feature.city.mayor.menu.vote.mayor.title", + Component.text(candidate.getName()).color(color).decoration(TextDecoration.ITALIC, false) + ).color(color).decoration(TextDecoration.ITALIC, false) + ), Prefix.MAYOR, MessageType.SUCCESS, true); new MayorVoteMenu(player).open(); }); @@ -122,14 +143,18 @@ public List getItems() { return items; } - private String getProgressBar(int vote, int totalVotes, NamedTextColor color) { + private Component getProgressBarComponent(int vote, int totalVotes, NamedTextColor color) { int progressBars = 20; int barFill = (int) (((double) vote / totalVotes) * progressBars); - return ColorUtils.getColorCode(color) + - "|".repeat(Math.max(0, barFill)) + - "§7" + - "|".repeat(Math.max(0, progressBars - barFill)); + Component filled = Component.text("|".repeat(Math.max(0, barFill))) + .color(color) + .decoration(TextDecoration.ITALIC, false); + Component empty = Component.text("|".repeat(Math.max(0, progressBars - barFill))) + .color(NamedTextColor.GRAY) + .decoration(TextDecoration.ITALIC, false); + + return Component.empty().append(filled).append(empty); } private int getVotePercentage(int vote, int totalVotes) { @@ -141,23 +166,19 @@ private int getVotePercentage(int vote, int totalVotes) { public Map getButtons() { Map map = new HashMap<>(); map.put(49, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_cancel").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§cFermer")); + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.menu.vote.button.close")); }).setCloseButton()); map.put(48, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_back_orange").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§cPage précédente")); + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.menu.vote.button.prev")); }).setPreviousPageButton()); map.put(50, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_next_orange").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§aPage suivante")); + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.menu.vote.button.next")); }).setNextPageButton()); - List loreInfo = Arrays.asList( - Component.text("§7Apprenez en plus sur les maires !"), - Component.text("§7Le déroulement..., les éléctions, ..."), - Component.text("§e§lCLIQUEZ ICI POUR EN VOIR PLUS!") - ); + List loreInfo = TranslationManager.translationLore("feature.city.mayor.menu.common.more_info.lore"); map.put(54, new ItemBuilder(this, Material.BOOK, itemMeta -> { - itemMeta.displayName(Component.text("§r§aPlus d'info !")); + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.menu.common.more_info.name")); itemMeta.lore(loreInfo); }).setOnClick(inventoryClickEvent -> new MoreInfoMenu(getOwner()).open())); return map; @@ -165,7 +186,7 @@ public Map getButtons() { @Override public @NotNull Component getName() { - return Component.text("Menu des maires - Votes"); + return TranslationManager.translation("feature.city.mayor.menu.vote.name"); } @Override diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MoreInfoMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MoreInfoMenu.java index d7e4886d5..fe36f4bf2 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MoreInfoMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MoreInfoMenu.java @@ -5,14 +5,15 @@ import fr.openmc.api.menulib.utils.InventorySize; import fr.openmc.api.menulib.utils.ItemBuilder; import fr.openmc.core.features.city.sub.mayor.managers.MayorManager; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.jetbrains.annotations.NotNull; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -25,7 +26,7 @@ public MoreInfoMenu(Player owner) { @Override public @NotNull Component getName() { - return Component.text("Menu des maires - Plus d'info"); + return TranslationManager.translation("feature.city.mayor.menu.more_info.name"); } @Override @@ -52,35 +53,29 @@ public void onClose(InventoryCloseEvent event) { public @NotNull Map getContent() { Map inventory = new HashMap<>(); - List lore0 = Arrays.asList( - Component.text("§7Tous les §6mercredis§7, les §6élections §7commencent"), - Component.text("§7Si vous avez plus de §6" + MayorManager.MEMBER_REQUEST_ELECTION + " §7membres,"), - Component.text("§7vous pouvez élire un §6maire §7pour votre ville"), - Component.text("§7Sinon, le propriétaire choisira les §3réformes qu'il veut!") + List lore0 = TranslationManager.translationLore( + "feature.city.mayor.menu.more_info.elections.lore", + Component.text(MayorManager.MEMBER_REQUEST_ELECTION).color(NamedTextColor.GOLD) ); - List lore1 = Arrays.asList( - Component.text("§7Tous les §3jeudis§7, le maire est élu!"), - Component.text("§7Les §3réformes §7choisies par le maire sont appliquées"), - Component.text("§7Vous pouvez y jetez un coup d'oeil sur §3/city mayor") - ); + List lore1 = TranslationManager.translationLore("feature.city.mayor.menu.more_info.reforms.lore"); int phase = MayorManager.phaseMayor; inventory.put(11, new ItemBuilder(this, Material.ORANGE_STAINED_GLASS_PANE, itemMeta -> { - itemMeta.displayName(Component.text("§r§6Les élections - Mercredi")); + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.menu.more_info.elections.title")); itemMeta.lore(lore0); itemMeta.setEnchantmentGlintOverride(phase != 2); })); inventory.put(15, new ItemBuilder(this, Material.CYAN_STAINED_GLASS_PANE, itemMeta -> { - itemMeta.displayName(Component.text("§r§3Les réformes - Jeudi")); + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.menu.more_info.reforms.title")); itemMeta.lore(lore1); itemMeta.setEnchantmentGlintOverride(phase == 2); })); - inventory.put(46, new ItemBuilder(this, Material.ARROW, itemMeta -> itemMeta.displayName(Component.text("§r§aRetour")), true)); + inventory.put(46, new ItemBuilder(this, Material.ARROW, itemMeta -> itemMeta.displayName(TranslationManager.translation("feature.city.mayor.menu.common.back.name")), true)); return inventory; } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorColorMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorColorMenu.java index c31bad0f7..1537946dc 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorColorMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorColorMenu.java @@ -46,7 +46,7 @@ public MayorColorMenu(Player owner, Perks perk1, Perks perk2, Perks perk3, Strin @Override public @NotNull Component getName() { - return Component.text("Menu des maires - Couleur"); + return TranslationManager.translation("feature.city.mayor.menu.color.name"); } @Override @@ -92,21 +92,27 @@ public void onClose(InventoryCloseEvent event) { colorSlot.put(NamedTextColor.DARK_GRAY, 49); } colorSlot.forEach((color, slot) -> { - List loreColor = List.of( - Component.text("§7Votre nom sera affiché en " + ColorUtils.getNameFromColor(color)), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR CONFIRMER") + List loreColor = TranslationManager.translationLore( + "feature.city.mayor.menu.color.option.lore", + Component.text(ColorUtils.getNameFromColor(color)).color(color) ); inventory.put(slot, new ItemBuilder(this, ColorUtils.getMaterialFromColor(color), itemMeta -> { - itemMeta.displayName(Component.text("§7Mettez du " + ColorUtils.getNameFromColor(color))); + itemMeta.displayName(TranslationManager.translation( + "feature.city.mayor.menu.color.option.name", + Component.text(ColorUtils.getNameFromColor(color)).color(color) + )); itemMeta.lore(loreColor); }).setOnClick(inventoryClickEvent -> { if (type.equals("create")) { List loreAccept = new ArrayList<>(List.of( - Component.text("§7Vous allez vous présenter en tant que §6maire de " + city.getName()), - Component.empty(), - Component.text("Maire " + player.getName()).color(color).decoration(TextDecoration.ITALIC, false) + TranslationManager.translation( + "feature.city.mayor.menu.color.confirm.lore", + Component.text(city.getName()).color(NamedTextColor.LIGHT_PURPLE) + ) )); + loreAccept.add(Component.empty()); + loreAccept.add(TranslationManager.translation("feature.city.mayor.menu.vote.mayor.title", Component.text(player.getName())) + .color(color).decoration(TextDecoration.ITALIC, false)); if (perk1 != null) { loreAccept.add(TranslationManager.translation(perk1.getNameKey())); loreAccept.addAll(TranslationManager.translationLore(perk1.getLoreKey())); @@ -118,7 +124,7 @@ public void onClose(InventoryCloseEvent event) { loreAccept.add(TranslationManager.translation(perk3.getNameKey())); loreAccept.addAll(TranslationManager.translationLore(perk3.getLoreKey())); loreAccept.add(Component.empty()); - loreAccept.add(Component.text("§c§lAUCUN RETOUR EN ARRIERE POSSIBLE!")); + loreAccept.add(TranslationManager.translation("feature.city.mayor.menu.color.confirm.final")); ConfirmMenu menu = new ConfirmMenu(player, @@ -133,13 +139,16 @@ public void onClose(InventoryCloseEvent event) { assert playerMember != null; if (playerMember == player) continue; if (playerMember.isOnline()) { - MessagesManager.sendMessage(playerMember.getPlayer(), Component.text(player.getName()).color(color).append(Component.text(" §7s'est présenté en tant que §6maire§7!")), Prefix.MAYOR, MessageType.ERROR, false); + MessagesManager.sendMessage(playerMember.getPlayer(), TranslationManager.translation( + "feature.city.mayor.menu.color.candidate.announce", + Component.text(player.getName()).color(color).decoration(TextDecoration.ITALIC, false) + ), Prefix.MAYOR, MessageType.ERROR, false); } } } else { // donc si c MenuType.OWNER MayorManager.createMayor(player.getName(), player.getUniqueId(), city, perk1, perk2, perk3, color, city.getElectionType()); } - MessagesManager.sendMessage(player, Component.text("§7Vous vous êtes présenter avec §asuccès§7!"), Prefix.MAYOR, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.menu.color.candidate.success"), Prefix.MAYOR, MessageType.ERROR, false); player.closeInventory(); } catch (Exception e) { throw new RuntimeException(e); @@ -148,47 +157,66 @@ public void onClose(InventoryCloseEvent event) { player::closeInventory, loreAccept, List.of( - Component.text("§7Ne pas se présenter en tant que §6Maire de " + city.getName()) + TranslationManager.translation( + "feature.city.mayor.menu.color.confirm.cancel", + Component.text(city.getName()).color(NamedTextColor.LIGHT_PURPLE) + ) ) ); menu.open(); } else if (type.equals("change")) { if (city.getElectionType() == ElectionType.OWNER_CHOOSE) { if (city.getMayor() == null) { - MessagesManager.sendMessage(player, Component.text("Votre ville n'a pas de maire !"), Prefix.MAYOR, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.menu.color.error.no_mayor"), Prefix.MAYOR, MessageType.ERROR, false); return; } NamedTextColor thisColor = city.getMayor().getMayorColor(); + Component fromColor = TranslationManager.translation("feature.city.mayor.label.color") + .decoration(TextDecoration.ITALIC, false).color(thisColor); + Component toColor = TranslationManager.translation("feature.city.mayor.label.this_one") + .decoration(TextDecoration.ITALIC, false).color(color); ConfirmMenu menu = new ConfirmMenu(player, () -> { city.getMayor().setMayorColor(color); - MessagesManager.sendMessage(player, Component.text("§7Vous avez changer votre ").append(Component.text("couleur ").decoration(TextDecoration.ITALIC, false).color(thisColor)).append(Component.text("§7en ")).append(Component.text("celle ci").decoration(TextDecoration.ITALIC, false).color(color)), Prefix.MAYOR, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.mayor.menu.color.change.success", + fromColor, + toColor + ), Prefix.MAYOR, MessageType.SUCCESS, false); player.closeInventory(); }, player::closeInventory, List.of( - Component.text("§7Changer sa ").append(Component.text("couleur ").decoration(TextDecoration.ITALIC, false).color(thisColor)).append(Component.text("§7en ")).append(Component.text("celle ci").decoration(TextDecoration.ITALIC, false).color(color)) + TranslationManager.translation("feature.city.mayor.menu.color.change.confirm", fromColor, toColor) ), List.of( - Component.text("§7Ne pas changer sa ").append(Component.text("couleur ").decoration(TextDecoration.ITALIC, false).color(thisColor)).append(Component.text("§7en ")).append(Component.text("celle ci").decoration(TextDecoration.ITALIC, false).color(color)) + TranslationManager.translation("feature.city.mayor.menu.color.change.cancel", fromColor, toColor) ) ); menu.open(); } else { MayorCandidate mayorCandidate = MayorManager.getCandidate(player.getUniqueId()); NamedTextColor thisColor = mayorCandidate.getCandidateColor(); + Component fromColor = TranslationManager.translation("feature.city.mayor.label.color") + .decoration(TextDecoration.ITALIC, false).color(thisColor); + Component toColor = TranslationManager.translation("feature.city.mayor.label.this_one") + .decoration(TextDecoration.ITALIC, false).color(color); ConfirmMenu menu = new ConfirmMenu(player, () -> { mayorCandidate.setCandidateColor(color); - MessagesManager.sendMessage(player, Component.text("§7Vous avez changer votre ").append(Component.text("couleur ").decoration(TextDecoration.ITALIC, false).color(thisColor)).append(Component.text("§7en ")).append(Component.text("celle ci").decoration(TextDecoration.ITALIC, false).color(color)), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.mayor.menu.color.change.success", + fromColor, + toColor + ), Prefix.CITY, MessageType.SUCCESS, false); player.closeInventory(); }, player::closeInventory, List.of( - Component.text("§7Changer sa ").append(Component.text("couleur ").decoration(TextDecoration.ITALIC, false).color(thisColor)).append(Component.text("§7en ")).append(Component.text("celle ci").decoration(TextDecoration.ITALIC, false).color(color)) + TranslationManager.translation("feature.city.mayor.menu.color.change.confirm", fromColor, toColor) ), List.of( - Component.text("§7Ne pas changer sa ").append(Component.text("couleur ").decoration(TextDecoration.ITALIC, false).color(thisColor)).append(Component.text("§7en ")).append(Component.text("celle ci").decoration(TextDecoration.ITALIC, false).color(color)) + TranslationManager.translation("feature.city.mayor.menu.color.change.cancel", fromColor, toColor) ) ); menu.open(); diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorCreateMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorCreateMenu.java index fa3a9f0ca..164b2551b 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorCreateMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorCreateMenu.java @@ -15,6 +15,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; @@ -43,7 +44,7 @@ public MayorCreateMenu(Player owner, Perks perk1, Perks perk2, Perks perk3, Menu @Override public @NotNull Component getName() { - return Component.text("Menu des maires - Creation"); + return TranslationManager.translation("feature.city.mayor.menu.create.name"); } @Override @@ -81,15 +82,11 @@ public void onClose(InventoryCloseEvent event) { TranslationManager.translation("feature.city.mayor.perk.none.name"); List lorePerk1; if (perk1 == null) { - lorePerk1 = List.of( - Component.text("§7Choissiez §3votre réforme §7que vous voulez voir !"), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR CHOISIR LA REFORME") - ); + lorePerk1 = TranslationManager.translationLore("feature.city.mayor.menu.create.perk.choose.lore"); } else { lorePerk1 = new ArrayList<>(TranslationManager.translationLore(perk1.getLoreKey())); lorePerk1.add(Component.empty()); - lorePerk1.add(Component.text("§e§lCLIQUEZ ICI POUR CHANGER LA REFORME")); + lorePerk1.add(TranslationManager.translation("feature.city.mayor.menu.create.perk.change.lore")); } inventory.put(22, new ItemBuilder(this, iaPerk1, itemMeta -> { itemMeta.customName(namePerk1); @@ -101,11 +98,8 @@ public void onClose(InventoryCloseEvent event) { })); inventory.put(46, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.itemName(Component.text("§aRetour")); - itemMeta.lore(List.of( - Component.text("§7Vous allez retourner au menu des élections"), - Component.text("§e§lCLIQUEZ ICI POUR CONFIRMER") - )); + itemMeta.itemName(TranslationManager.translation("feature.city.mayor.menu.common.back.name").color(NamedTextColor.GREEN)); + itemMeta.lore(TranslationManager.translationLore("feature.city.mayor.menu.create.back.election")); }, true)); } else if (type == MenuType.CANDIDATE) { canConfirmPerk = perk2 != null && perk3 != null; @@ -115,15 +109,11 @@ public void onClose(InventoryCloseEvent event) { TranslationManager.translation("feature.city.mayor.perk.none.name"); List lorePerk2; if (perk2 == null) { - lorePerk2 = List.of( - Component.text("§7Choissiez §3votre réforme §7que vous voulez voir !"), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR CHOISIR LA REFORME") - ); + lorePerk2 = TranslationManager.translationLore("feature.city.mayor.menu.create.perk.choose.lore"); } else { lorePerk2 = new ArrayList<>(TranslationManager.translationLore(perk2.getLoreKey())); lorePerk2.add(Component.empty()); - lorePerk2.add(Component.text("§e§lCLIQUEZ ICI POUR CHANGER LA REFORME")); + lorePerk2.add(TranslationManager.translation("feature.city.mayor.menu.create.perk.change.lore")); } inventory.put(20, new ItemBuilder(this, iaPerk2, itemMeta -> { itemMeta.customName(namePerk2); @@ -139,15 +129,11 @@ public void onClose(InventoryCloseEvent event) { TranslationManager.translation("feature.city.mayor.perk.none.name"); List lorePerk3; if (perk3 == null) { - lorePerk3 = List.of( - Component.text("§7Choissiez §3votre réforme §7que vous voulez voir !"), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR CHOISIR LA REFORME") - ); + lorePerk3 = TranslationManager.translationLore("feature.city.mayor.menu.create.perk.choose.lore"); } else { lorePerk3 = new ArrayList<>(TranslationManager.translationLore(perk3.getLoreKey())); lorePerk3.add(Component.empty()); - lorePerk3.add(Component.text("§e§lCLIQUEZ ICI POUR CHANGER LA REFORME")); + lorePerk3.add(TranslationManager.translation("feature.city.mayor.menu.create.perk.change.lore")); } inventory.put(24, new ItemBuilder(this, iaPerk3, itemMeta -> { itemMeta.customName(namePerk3); @@ -159,11 +145,8 @@ public void onClose(InventoryCloseEvent event) { })); inventory.put(46, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.itemName(Component.text("§aRetour")); - itemMeta.lore(List.of( - Component.text("§7Vous allez retourner au menu des élections"), - Component.text("§e§lCLIQUEZ ICI POUR CONFIRMER") - )); + itemMeta.itemName(TranslationManager.translation("feature.city.mayor.menu.common.back.name").color(NamedTextColor.GREEN)); + itemMeta.lore(TranslationManager.translationLore("feature.city.mayor.menu.create.back.election")); }).setOnClick(inventoryClickEvent -> { MayorElectionMenu menu = new MayorElectionMenu(player); menu.open(); @@ -176,15 +159,11 @@ public void onClose(InventoryCloseEvent event) { TranslationManager.translation("feature.city.mayor.perk.none.name"); List lorePerk1; if (perk1 == null) { - lorePerk1 = List.of( - Component.text("§7Choissiez §3votre réforme §7que vous voulez voir !"), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR CHOISIR LA REFORME") - ); + lorePerk1 = TranslationManager.translationLore("feature.city.mayor.menu.create.perk.choose.lore"); } else { lorePerk1 = new ArrayList<>(TranslationManager.translationLore(perk1.getLoreKey())); lorePerk1.add(Component.empty()); - lorePerk1.add(Component.text("§e§lCLIQUEZ ICI POUR CHANGER LA REFORME")); + lorePerk1.add(TranslationManager.translation("feature.city.mayor.menu.create.perk.change.lore")); } inventory.put(20, new ItemBuilder(this, iaPerk1, itemMeta -> { itemMeta.itemName(namePerk1); @@ -200,15 +179,11 @@ public void onClose(InventoryCloseEvent event) { TranslationManager.translation("feature.city.mayor.perk.none.name"); List lorePerk2; if (perk2 == null) { - lorePerk2 = List.of( - Component.text("§7Choissiez §3votre réforme §7que vous voulez voir !"), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR CHOISIR LA REFORME") - ); + lorePerk2 = TranslationManager.translationLore("feature.city.mayor.menu.create.perk.choose.lore"); } else { lorePerk2 = new ArrayList<>(TranslationManager.translationLore(perk2.getLoreKey())); lorePerk2.add(Component.empty()); - lorePerk2.add(Component.text("§e§lCLIQUEZ ICI POUR CHANGER LA REFORME")); + lorePerk2.add(TranslationManager.translation("feature.city.mayor.menu.create.perk.change.lore")); } inventory.put(22, new ItemBuilder(this, iaPerk2, itemMeta -> { itemMeta.itemName(namePerk2); @@ -224,15 +199,11 @@ public void onClose(InventoryCloseEvent event) { TranslationManager.translation("feature.city.mayor.perk.none.name"); List lorePerk3; if (perk3 == null) { - lorePerk3 = List.of( - Component.text("§7Choissiez §3votre réforme §7que vous voulez voir !"), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR CHOISIR LA REFORME") - ); + lorePerk3 = TranslationManager.translationLore("feature.city.mayor.menu.create.perk.choose.lore"); } else { lorePerk3 = new ArrayList<>(TranslationManager.translationLore(perk3.getLoreKey())); lorePerk3.add(Component.empty()); - lorePerk3.add(Component.text("§e§lCLIQUEZ ICI POUR CHANGER LA REFORME")); + lorePerk3.add(TranslationManager.translation("feature.city.mayor.menu.create.perk.change.lore")); } inventory.put(24, new ItemBuilder(this, iaPerk3, itemMeta -> { itemMeta.itemName(namePerk3); @@ -244,11 +215,8 @@ public void onClose(InventoryCloseEvent event) { })); inventory.put(46, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.itemName(Component.text("§aRetour")); - itemMeta.lore(List.of( - Component.text("§7Vous allez retourner au menu de votre ville"), - Component.text("§e§lCLIQUEZ ICI POUR CONFIRMER") - )); + itemMeta.itemName(TranslationManager.translation("feature.city.mayor.menu.common.back.name").color(NamedTextColor.GREEN)); + itemMeta.lore(TranslationManager.translationLore("feature.city.mayor.menu.create.back.city")); }).setOnClick(inventoryClickEvent -> { CityMenu menu = new CityMenu(player); menu.open(); @@ -258,32 +226,29 @@ public void onClose(InventoryCloseEvent event) { } Material matConfirm; - String nameConfirm; + Component nameConfirm; List loreConfirm; if (canConfirmPerk) { matConfirm = CustomItemRegistry.getByName("omc_menus:accept_btn").getBest().getType(); - nameConfirm = "§aConfirmer"; - loreConfirm = List.of( - Component.text("§7Vous avez choisit toutes §ales réformes §7nécessaires"), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR CONTINUER LA CANDIDATURE") - ); + nameConfirm = TranslationManager.translation("feature.city.mayor.menu.create.confirm.name.ready").color(NamedTextColor.GREEN); + loreConfirm = TranslationManager.translationLore("feature.city.mayor.menu.create.confirm.lore.ready"); } else { matConfirm = CustomItemRegistry.getByName("omc_menus:refuse_btn").getBest().getType(); - nameConfirm = "§cConfirmer"; - loreConfirm = List.of( - Component.text("§7Vous n'avez pas choisit toutes §cles réformes §7nécessaires") - ); + nameConfirm = TranslationManager.translation("feature.city.mayor.menu.create.confirm.name.blocked").color(NamedTextColor.RED); + loreConfirm = TranslationManager.translationLore("feature.city.mayor.menu.create.confirm.lore.blocked"); } inventory.put(52, new ItemBuilder(this, matConfirm, itemMeta -> { - itemMeta.itemName(Component.text(nameConfirm)); + itemMeta.itemName(nameConfirm); itemMeta.lore(loreConfirm); }).setOnClick(inventoryClickEvent -> { if (canConfirmPerk) { if (type == MenuType.OWNER_1) { MayorManager.put1Perk(CityManager.getPlayerCity(player.getUniqueId()), perk1); - MessagesManager.sendMessage(player, Component.text("Vous avez ajouté la Réforme : ").append(TranslationManager.translation(perk1.getNameKey())), Prefix.MAYOR, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.mayor.menu.create.confirm.owner.success", + TranslationManager.translation(perk1.getNameKey()) + ), Prefix.MAYOR, MessageType.SUCCESS, false); player.closeInventory(); return; } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorModifyMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorModifyMenu.java index 705b8bd81..59d820269 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorModifyMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/MayorModifyMenu.java @@ -11,6 +11,7 @@ import fr.openmc.core.utils.ColorUtils; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; @@ -28,7 +29,7 @@ public MayorModifyMenu(Player owner) { @Override public @NotNull Component getName() { - return Component.text("Menu des maires - Modification"); + return TranslationManager.translation("feature.city.mayor.menu.modify.name"); } @Override @@ -72,24 +73,20 @@ public void onClose(InventoryCloseEvent event) { itemMeta.lore(TranslationManager.translationLore(perk3.getLoreKey())); })); - List loreColor = List.of( - Component.text("§7Vous pouvez rechangez la couleur de votre nom!"), - Component.empty(), - Component.text("§e§lCLIQUEZ ICI POUR CHANGER LA COULEUR") - ); + List loreColor = TranslationManager.translationLore("feature.city.mayor.menu.modify.color.lore"); inventory.put(24, new ItemBuilder(this, ColorUtils.getMaterialFromColor(mayorCandidate.getCandidateColor()), itemMeta -> { - itemMeta.itemName(Component.text("§7Changer votre ").append(Component.text("couleur").color(mayorCandidate.getCandidateColor()))); + itemMeta.itemName(TranslationManager.translation( + "feature.city.mayor.menu.modify.color.name", + TranslationManager.translation("feature.city.mayor.label.color").color(mayorCandidate.getCandidateColor()) + )); itemMeta.lore(loreColor); }).setOnClick(inventoryClickEvent -> { new MayorColorMenu(player, null, null, null, "change", null).open(); })); inventory.put(46, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.itemName(Component.text("§aRetour")); - itemMeta.lore(List.of( - Component.text("§7Vous allez retourner au menu de votre ville"), - Component.text("§e§lCLIQUEZ ICI POUR CONFIRMER") - )); + itemMeta.itemName(TranslationManager.translation("feature.city.mayor.menu.common.back.name").color(NamedTextColor.GREEN)); + itemMeta.lore(TranslationManager.translationLore("feature.city.mayor.menu.modify.back.lore")); }, true)); return inventory; diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/PerkChoiceMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/PerkChoiceMenu.java index 4ac5d1da7..c160af38a 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/PerkChoiceMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/create/PerkChoiceMenu.java @@ -16,6 +16,8 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; @@ -78,27 +80,47 @@ public List getItems() { switch (newPerk.getCategory()) { case AGRICULTURAL -> { if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.PERK_AGRICULTURAL)) { - perkLore.add(Component.text("§cVous devez être niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.PERK_AGRICULTURAL) + " pour débloquer ceci")); + perkLore.add(TranslationManager.translation( + "feature.city.mayor.menu.perk_choice.locked", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.PERK_AGRICULTURAL)) + .color(NamedTextColor.RED).decoration(TextDecoration.ITALIC, false) + )); } } case ECONOMIC -> { if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.PERK_ECONOMY)) { - perkLore.add(Component.text("§cVous devez être niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.PERK_ECONOMY) + " pour débloquer ceci")); + perkLore.add(TranslationManager.translation( + "feature.city.mayor.menu.perk_choice.locked", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.PERK_ECONOMY)) + .color(NamedTextColor.RED).decoration(TextDecoration.ITALIC, false) + )); } } case MILITARY -> { if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.PERK_MILITARY)) { - perkLore.add(Component.text("§cVous devez être niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.PERK_MILITARY) + " pour débloquer ceci")); + perkLore.add(TranslationManager.translation( + "feature.city.mayor.menu.perk_choice.locked", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.PERK_MILITARY)) + .color(NamedTextColor.RED).decoration(TextDecoration.ITALIC, false) + )); } } case STRATEGY -> { if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.PERK_STRATEGY)) { - perkLore.add(Component.text("§cVous devez être niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.PERK_STRATEGY) + " pour débloquer ceci")); + perkLore.add(TranslationManager.translation( + "feature.city.mayor.menu.perk_choice.locked", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.PERK_STRATEGY)) + .color(NamedTextColor.RED).decoration(TextDecoration.ITALIC, false) + )); } } case DREAM -> { if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.PERK_DREAM)) { - perkLore.add(Component.text("§cVous devez être niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.PERK_DREAM) + " pour débloquer ceci")); + perkLore.add(TranslationManager.translation( + "feature.city.mayor.menu.perk_choice.locked", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.PERK_DREAM)) + .color(NamedTextColor.RED).decoration(TextDecoration.ITALIC, false) + )); } } } @@ -145,7 +167,7 @@ public List getItems() { ("perk3".equals(perkNumber) && ((perk1 != null && perk1.getType() == PerkType.EVENT) || (perk2 != null && perk2.getType() == PerkType.EVENT))) ); if (isPerkEvent) { - MessagesManager.sendMessage(player, Component.text("Vous ne pouvez pas choisir 2 réformes de type évènement !"), Prefix.MAYOR, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.menu.perk_choice.error.event_duplicate"), Prefix.MAYOR, MessageType.ERROR, false); return; } @@ -168,23 +190,23 @@ public List getItems() { public Map getButtons() { Map map = new HashMap<>(); map.put(49, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_cancel").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§7Revenir en arrière")); + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.menu.perk_choice.button.back")); }).setOnClick(inventoryClickEvent -> { new MayorCreateMenu(getOwner(), perk1, perk2, perk3, type).open(); })); map.put(48, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_back_orange").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§cPage précédente")); + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.menu.perk_choice.button.prev")); }).setPreviousPageButton()); map.put(50, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_next_orange").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§aPage suivante")); + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.menu.perk_choice.button.next")); }).setNextPageButton()); return map; } @Override public @NotNull Component getName() { - return Component.text("Menu des maires - Reformes"); + return TranslationManager.translation("feature.city.mayor.menu.perk_choice.name"); } @Override diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/npc/MayorNpcMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/npc/MayorNpcMenu.java index 8c2466d6d..0963d8c59 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/npc/MayorNpcMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/npc/MayorNpcMenu.java @@ -18,6 +18,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Chunk; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -42,7 +43,7 @@ public MayorNpcMenu(Player owner, City city) { @Override public @NotNull Component getName() { - return Component.text("Menu des maires - Mandat du Maire"); + return TranslationManager.translation("feature.city.mayor.menu.mayor.name"); } @Override @@ -76,7 +77,10 @@ public void onClose(InventoryCloseEvent event) { Perks perk3 = PerkManager.getPerkById(mayor.getIdPerk3()); List loreMayor = new ArrayList<>(List.of( - Component.text("§8§oMaire de " + city.getName()) + TranslationManager.translation( + "feature.city.mayor.menu.mayor.lore.header", + Component.text(city.getName()).color(NamedTextColor.LIGHT_PURPLE) + ) )); loreMayor.add(Component.empty()); loreMayor.add(perk2 == null ? TranslationManager.translation("feature.city.menus.common.error") : @@ -88,7 +92,7 @@ public void onClose(InventoryCloseEvent event) { loreMayor.addAll(perk3 == null ? List.of() : TranslationManager.translationLore(perk3.getLoreKey())); inventory.put(4, new ItemBuilder(this, SkullUtils.getPlayerSkull(city.getPlayerWithPermission(CityPermission.OWNER)), itemMeta -> { - itemMeta.displayName(Component.text("§eMaire " + city.getMayor().getName())); + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.menu.mayor.title", Component.text(city.getMayor().getName())).color(NamedTextColor.YELLOW)); itemMeta.lore(loreMayor); })); @@ -112,19 +116,16 @@ public void onClose(InventoryCloseEvent event) { if (mayor.getMayorUUID().equals(player.getUniqueId())) { inventory.put(46, new ItemBuilder(this, Material.ENDER_PEARL, itemMeta -> { - itemMeta.itemName(Component.text("§aDéplacer ce NPC")); - itemMeta.lore(List.of( - Component.text("§7Vous allez pouvoir déplacer ce NPC"), - Component.text("§e§lCLIQUEZ ICI POUR CONTINUER") - )); + itemMeta.itemName(TranslationManager.translation("feature.city.mayor.menu.npc.move.name").color(NamedTextColor.GREEN)); + itemMeta.lore(TranslationManager.translationLore("feature.city.mayor.menu.npc.move.lore")); }).setOnClick(inventoryClickEvent -> { List loreItemNPC = List.of( - Component.text("§7Cliquez sur l'endroit où vous voulez déplacer le §9NPC") + TranslationManager.translation("feature.city.mayor.npc.move.item.lore") ); ItemStack itemToGive = new ItemStack(Material.STICK); ItemMeta itemMeta = itemToGive.getItemMeta(); - itemMeta.displayName(Component.text("§7Emplacement du §9NPC")); + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.npc.move.item.name")); itemMeta.lore(loreItemNPC); itemToGive.setItemMeta(itemMeta); ItemInteraction.runLocationInteraction( @@ -132,8 +133,8 @@ public void onClose(InventoryCloseEvent event) { itemToGive, "mayor:owner-npc-move", 300, - Component.text("§7Vous avez 300s pour sélectionner votre emplacement"), - Component.text("§7Vous n'avez pas eu le temps de déplacer votre NPC"), + TranslationManager.translation("feature.city.mayor.npc.move.interaction.remaining", Component.text("300s").color(NamedTextColor.GRAY)), + TranslationManager.translation("feature.city.mayor.npc.move.interaction.timeout"), locationClick -> { if (locationClick == null) return true; @@ -141,7 +142,7 @@ public void onClose(InventoryCloseEvent event) { City cityByChunk = CityManager.getCityFromChunk(chunk.getX(), chunk.getZ()); if (cityByChunk == null) { - MessagesManager.sendMessage(player, Component.text("§cImpossible de mettre le NPC en dehors de votre ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.npc.move.error.outside_city"), Prefix.CITY, MessageType.ERROR, false); return false; } @@ -152,7 +153,7 @@ public void onClose(InventoryCloseEvent event) { } if (!cityByChunk.getUniqueId().equals(playerCity.getUniqueId())) { - MessagesManager.sendMessage(player, Component.text("§cImpossible de mettre le NPC en dehors de votre ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.npc.move.error.outside_city"), Prefix.CITY, MessageType.ERROR, false); return false; } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/npc/OwnerNpcMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/npc/OwnerNpcMenu.java index 51b759f6e..ef2139acd 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/npc/OwnerNpcMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/npc/OwnerNpcMenu.java @@ -20,6 +20,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Chunk; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -44,7 +45,7 @@ public OwnerNpcMenu(Player owner, City city, ElectionType electionType) { @Override public @NotNull Component getName() { - return Component.text("Menu des maires - Mandat du propriétaire"); + return TranslationManager.translation("feature.city.mayor.menu.owner.name"); } @Override @@ -80,7 +81,10 @@ public void onClose(InventoryCloseEvent event) { Perks perk1 = PerkManager.getPerkById(mayor.getIdPerk1()); if (electionType == ElectionType.ELECTION) { List loreOwner = new ArrayList<>(List.of( - Component.text("§8§oPropriétaire de " + city.getName()) + TranslationManager.translation( + "feature.city.mayor.menu.owner.lore.header", + Component.text(city.getName()).color(NamedTextColor.LIGHT_PURPLE) + ) )); loreOwner.add(Component.empty()); loreOwner.add(perk1 == null ? TranslationManager.translation("feature.city.menus.common.error") : @@ -88,7 +92,7 @@ public void onClose(InventoryCloseEvent event) { loreOwner.addAll(perk1 == null ? List.of() : TranslationManager.translationLore(perk1.getLoreKey())); inventory.put(4, new ItemBuilder(this, SkullUtils.getPlayerSkull(uuidOwner), itemMeta -> { - itemMeta.displayName(Component.text("§ePropriétaire " + nameOwner)); + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.menu.owner.title", Component.text(nameOwner)).color(NamedTextColor.YELLOW)); itemMeta.lore(loreOwner); })); @@ -105,7 +109,10 @@ public void onClose(InventoryCloseEvent event) { Perks perk3 = PerkManager.getPerkById(mayor.getIdPerk3()); List loreOwner = new ArrayList<>(List.of( - Component.text("§8§oPropriétaire de " + city.getName()) + TranslationManager.translation( + "feature.city.mayor.menu.owner.lore.header", + Component.text(city.getName()).color(NamedTextColor.LIGHT_PURPLE) + ) )); loreOwner.add(Component.empty()); loreOwner.add(perk1 == null ? TranslationManager.translation("feature.city.menus.common.error") : @@ -121,7 +128,7 @@ public void onClose(InventoryCloseEvent event) { loreOwner.addAll(perk3 == null ? List.of() : TranslationManager.translationLore(perk3.getLoreKey())); inventory.put(4, new ItemBuilder(this, SkullUtils.getPlayerSkull(uuidOwner), itemMeta -> { - itemMeta.displayName(Component.text("§ePropriétaire " + nameOwner)); + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.menu.owner.title", Component.text(nameOwner)).color(NamedTextColor.YELLOW)); itemMeta.lore(loreOwner); })); @@ -155,19 +162,16 @@ public void onClose(InventoryCloseEvent event) { if (mayor.getMayorUUID().equals(player.getUniqueId())) { inventory.put(46, new ItemBuilder(this, Material.ENDER_PEARL, itemMeta -> { - itemMeta.itemName(Component.text("§aDéplacer ce NPC")); - itemMeta.lore(List.of( - Component.text("§7Vous allez pouvoir déplacer ce NPC"), - Component.text("§e§lCLIQUEZ ICI POUR CONTINUER") - )); + itemMeta.itemName(TranslationManager.translation("feature.city.mayor.menu.npc.move.name").color(NamedTextColor.GREEN)); + itemMeta.lore(TranslationManager.translationLore("feature.city.mayor.menu.npc.move.lore")); }).setOnClick(inventoryClickEvent -> { List loreItemNPC = List.of( - Component.text("§7Cliquez sur l'endroit où vous voulez déplacer le §9NPC") + TranslationManager.translation("feature.city.mayor.npc.move.item.lore") ); ItemStack itemToGive = new ItemStack(Material.STICK); ItemMeta itemMeta = itemToGive.getItemMeta(); - itemMeta.displayName(Component.text("§7Emplacement du §9NPC")); + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.npc.move.item.name")); itemMeta.lore(loreItemNPC); itemToGive.setItemMeta(itemMeta); ItemInteraction.runLocationInteraction( @@ -175,8 +179,8 @@ public void onClose(InventoryCloseEvent event) { itemToGive, "mayor:owner-npc-move", 300, - Component.text("§7Vous avez 300s pour sélectionner votre emplacement"), - Component.text("§7Vous n'avez pas eu le temps de déplacer votre NPC"), + TranslationManager.translation("feature.city.mayor.npc.move.interaction.remaining", Component.text("300s").color(NamedTextColor.GRAY)), + TranslationManager.translation("feature.city.mayor.npc.move.interaction.timeout"), locationClick -> { if (locationClick == null) return true; @@ -184,7 +188,7 @@ public void onClose(InventoryCloseEvent event) { City cityByChunk = CityManager.getCityFromChunk(chunk.getX(), chunk.getZ()); if (cityByChunk == null) { - MessagesManager.sendMessage(player, Component.text("§cImpossible de mettre le NPC en dehors de votre ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.npc.move.error.outside_city"), Prefix.CITY, MessageType.ERROR, false); return false; } @@ -195,7 +199,7 @@ public void onClose(InventoryCloseEvent event) { } if (!cityByChunk.getUniqueId().equals(playerCity.getUniqueId())) { - MessagesManager.sendMessage(player, Component.text("§cImpossible de mettre le NPC en dehors de votre ville"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.npc.move.error.outside_city"), Prefix.CITY, MessageType.ERROR, false); return false; } @@ -214,4 +218,4 @@ public void onClose(InventoryCloseEvent event) { public List getTakableSlot() { return List.of(); } -} \ No newline at end of file +} diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/basic/AyweniterPerk.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/basic/AyweniterPerk.java index 98ec6156d..82f59b8ae 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/basic/AyweniterPerk.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/basic/AyweniterPerk.java @@ -10,7 +10,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; -import net.kyori.adventure.text.Component; +import fr.openmc.core.utils.messages.TranslationManager; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Block; @@ -50,7 +50,7 @@ public void onBlockBreak(BlockBreakEvent event) { ayweniteItem.setAmount(2); player.getInventory().addItem(ayweniteItem); player.playSound(player.getEyeLocation(), Sound.BLOCK_AMETHYST_BLOCK_RESONATE, 10.0F, 0.6F); - MessagesManager.sendMessage(player, Component.text("§8§o*la bénédiction!*"), Prefix.MAYOR, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.perk.basic.ayweniter.blessing"), Prefix.MAYOR, MessageType.INFO, false); } } } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/basic/GPSTrackerPerk.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/basic/GPSTrackerPerk.java index 1d79266c6..2b04a5027 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/basic/GPSTrackerPerk.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/basic/GPSTrackerPerk.java @@ -9,7 +9,9 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Chunk; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -55,7 +57,10 @@ public void onMove(PlayerMoveEvent event) { applyGlowing(player); MessagesManager.sendMessage( player, - Component.text("§cVous venez d'entrer dans la ville §e" + newCity.getName() + "§c qui dispose du §e§lGPS Tracker§c ! Soyez sur vos gardes."), + TranslationManager.translation( + "feature.city.mayor.perk.basic.gps_tracker.entered", + Component.text(newCity.getName()).color(NamedTextColor.YELLOW) + ), Prefix.MAYOR, MessageType.INFO, false diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/basic/IronBloodPerk.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/basic/IronBloodPerk.java index 55258e206..d47ee1ec4 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/basic/IronBloodPerk.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/basic/IronBloodPerk.java @@ -8,7 +8,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; -import net.kyori.adventure.text.Component; +import fr.openmc.core.utils.messages.TranslationManager; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Entity; @@ -68,7 +68,7 @@ public static void spawnGolem(Player player, City city, Entity mobMascot) { }, 0L, 20L); scheduleGolemDespawn(golem, mobMascot.getUniqueId()); - MessagesManager.sendMessage(player, Component.text("§8§o*tremblement* Quelque chose semble arriver..."), Prefix.MAYOR, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.perk.basic.iron_blood.tremor"), Prefix.MAYOR, MessageType.INFO, false); } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/event/AgriculturalEssorPerk.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/event/AgriculturalEssorPerk.java index f2a0f0c48..7e8a9a1ee 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/event/AgriculturalEssorPerk.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/event/AgriculturalEssorPerk.java @@ -12,7 +12,9 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.block.Block; import org.bukkit.entity.Player; @@ -39,7 +41,10 @@ public void onPlayerJoin(PlayerJoinEvent event) { if (!PerkManager.hasPerk(city.getMayor(), Perks.AGRICULTURAL_ESSOR.getId())) return; if (!DynamicCooldownManager.isReady(city.getUniqueId(), "city:agricultural_essor")) { - MessagesManager.sendMessage(player, Component.text("La réforme d'événement l'§eEssor Agricole §fest lancée et il reste plus que §c" + DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(city.getUniqueId(), "city:agricultural_essor"))), Prefix.MAYOR, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.mayor.perk.event.agricultural.start", + Component.text(DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(city.getUniqueId(), "city:agricultural_essor"))).color(NamedTextColor.RED) + ), Prefix.MAYOR, MessageType.INFO, false); } } @@ -61,7 +66,7 @@ void onTimeEnd(Chronometer.ChronometerEndEvent e) { if (player == null || !player.isOnline()) continue; - MessagesManager.sendMessage(player, Component.text("La réforme d'événement l'§eEssor Agricole §fest terminée !"), Prefix.MAYOR, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.perk.event.agricultural.end"), Prefix.MAYOR, MessageType.INFO, false); } } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/event/ImpotCollection.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/event/ImpotCollection.java index d41a8e915..10fa4e36c 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/event/ImpotCollection.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/event/ImpotCollection.java @@ -8,7 +8,9 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; @@ -46,7 +48,10 @@ public static void spawnZombies(Player player, City city) { spawnLoc.setY(world.getHighestBlockYAt(spawnLoc)); Zombie zombie = (Zombie) world.spawnEntity(spawnLoc, EntityType.ZOMBIE); - zombie.customName(Component.text("Serviteur de " + city.getMayor().getName())); + zombie.customName(TranslationManager.translation( + "feature.city.mayor.perk.event.impot.zombie.name", + Component.text(city.getMayor().getName()) + ).color(NamedTextColor.GRAY)); zombie.setCustomNameVisible(true); zombie.setTarget(player); @@ -82,7 +87,7 @@ public void onEntityDamageByEntity(EntityDamageByEntityEvent event) { if (EconomyManager.getBalance(victim.getUniqueId()) < amount) { if (BankManager.getBankBalance(victim.getUniqueId()) < amount) { - MessagesManager.sendMessage(victim, Component.text("§8§o*grr vous avez de la chance !*"), Prefix.MAYOR, MessageType.INFO, false); + MessagesManager.sendMessage(victim, TranslationManager.translation("feature.city.mayor.perk.event.impot.victim.lucky"), Prefix.MAYOR, MessageType.INFO, false); return; } @@ -96,8 +101,17 @@ public void onEntityDamageByEntity(EntityDamageByEntityEvent event) { double newTotal = playerWithdrawnAmount.getOrDefault(victim.getUniqueId(), 0.0) + amount; playerWithdrawnAmount.put(victim.getUniqueId(), newTotal); - MessagesManager.sendMessage(victim, Component.text("Tu as perdu §6" + amount + EconomyManager.getEconomyIcon() + "§f à cause du maire " + mayorPlayer.getName()), Prefix.MAYOR, MessageType.WARNING, false); - MessagesManager.sendMessage(mayorPlayer, Component.text("Vous venez de prélever §6" + amount + EconomyManager.getEconomyIcon() + "§f à " + victim.getName()), Prefix.MAYOR, MessageType.INFO, false); + Component amountComponent = Component.text(amount + EconomyManager.getEconomyIcon()).color(NamedTextColor.GOLD); + MessagesManager.sendMessage(victim, TranslationManager.translation( + "feature.city.mayor.perk.event.impot.victim.lost", + amountComponent, + Component.text(mayorPlayer.getName()).color(NamedTextColor.WHITE) + ), Prefix.MAYOR, MessageType.WARNING, false); + MessagesManager.sendMessage(mayorPlayer, TranslationManager.translation( + "feature.city.mayor.perk.event.impot.mayor.collected", + amountComponent, + Component.text(victim.getName()).color(NamedTextColor.WHITE) + ), Prefix.MAYOR, MessageType.INFO, false); if (newTotal >= 5000) { for (Entity entity : victim.getWorld().getEntities()) { @@ -112,7 +126,7 @@ public void onEntityDamageByEntity(EntityDamageByEntityEvent event) { } } - MessagesManager.sendMessage(victim, Component.text("§8§o*les zombies ont eu tout ce qu'ils voulaient*"), Prefix.MAYOR, MessageType.INFO, false); + MessagesManager.sendMessage(victim, TranslationManager.translation("feature.city.mayor.perk.event.impot.zombies.done"), Prefix.MAYOR, MessageType.INFO, false); } } } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/event/MilitaryDissuasion.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/event/MilitaryDissuasion.java index e92add79a..f65f15927 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/event/MilitaryDissuasion.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/event/MilitaryDissuasion.java @@ -4,6 +4,7 @@ import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityManager; import fr.openmc.core.utils.ChunkPos; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import org.bukkit.*; import org.bukkit.entity.Entity; @@ -61,7 +62,10 @@ public static void startEvent(City city, int golemsToSpawn) { Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> { IronGolem golem = (IronGolem) world.spawnEntity(spawnLocation, EntityType.IRON_GOLEM); - golem.customName(Component.text("Défendeur de " + city.getName())); + golem.customName(TranslationManager.translation( + "feature.city.mayor.perk.event.military.golem.name", + Component.text(city.getName()) + )); golem.setLootTable(null); golem.setGlowing(true); golem.setHealth(35); diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/event/MineralRushPerk.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/event/MineralRushPerk.java index 3aaf2c15e..dea19f3b9 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/event/MineralRushPerk.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/event/MineralRushPerk.java @@ -14,7 +14,9 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.block.Block; import org.bukkit.entity.Player; @@ -41,7 +43,10 @@ public void onPlayerJoin(PlayerJoinEvent event) { if (!PerkManager.hasPerk(city.getMayor(), Perks.MINERAL_RUSH.getId())) return; if (!DynamicCooldownManager.isReady(city.getUniqueId(), "city:mineral_rush")) { - MessagesManager.sendMessage(player, Component.text("La réforme d'événement la §eRuée Minière §fest lancée et il reste plus que §c" + DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(city.getUniqueId(), "city:mineral_rush"))), Prefix.MAYOR, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.mayor.perk.event.mineral.start", + Component.text(DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(city.getUniqueId(), "city:mineral_rush"))).color(NamedTextColor.RED) + ), Prefix.MAYOR, MessageType.INFO, false); } } @@ -63,7 +68,7 @@ void onTimeEnd(Chronometer.ChronometerEndEvent e) { if (player == null || !player.isOnline()) continue; - MessagesManager.sendMessage(player, Component.text("La réforme d'évènement la §eRuée Minière §fest terminée !"), Prefix.MAYOR, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mayor.perk.event.mineral.end"), Prefix.MAYOR, MessageType.INFO, false); } } diff --git a/src/main/java/fr/openmc/core/utils/messages/TranslationManager.java b/src/main/java/fr/openmc/core/utils/messages/TranslationManager.java index 51f7e1c72..9061b6e11 100644 --- a/src/main/java/fr/openmc/core/utils/messages/TranslationManager.java +++ b/src/main/java/fr/openmc/core/utils/messages/TranslationManager.java @@ -10,7 +10,6 @@ import net.kyori.adventure.text.TranslatableComponent; import net.kyori.adventure.text.format.TextDecoration; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; -import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import net.kyori.adventure.util.UTF8ResourceBundleControl; import java.io.IOException; @@ -26,6 +25,8 @@ public class TranslationManager { .setPrettyPrinting() .create(); + private static final LegacyComponentSerializer LEGACY_COMPONENT_SERIALIZER = LegacyComponentSerializer.legacySection(); + public static void init(BootstrapContext context, Locale defaultLang, Locale... langsSuppoorted) { // * Generate resource pack Path resourcePackFolder; @@ -110,7 +111,7 @@ public static Component translation(String key, ComponentLike... args) { } public static String translationString(String key, ComponentLike... args) { - return PlainTextComponentSerializer.plainText().serialize(translation(key, args)); + return LEGACY_COMPONENT_SERIALIZER.serialize(translation(key, args)); } public static List translationLore(String key, ComponentLike... componentsArgs) { diff --git a/src/main/resources/translations/lang.properties b/src/main/resources/translations/lang.properties index ef37045a4..9478fd610 100644 --- a/src/main/resources/translations/lang.properties +++ b/src/main/resources/translations/lang.properties @@ -892,3 +892,248 @@ feature.city.mayor.perk.chaos_dream.name=Rêve ChaotiqueTéléporte les membres dans le rêve
\
Évènement de ville +feature.city.menus.common.error=Erreur de la réforme +feature.city.mayor.menu.common.back.name=Retour +feature.city.mayor.menu.common.back.lore=Vous allez retourner au menu précédent \ +
CLIQUEZ ICI POUR CONFIRMER +feature.city.mayor.menu.common.more_info.name=Plus d'info ! +feature.city.mayor.menu.common.more_info.lore=Apprenez en plus sur les maires ! \ +
Le déroulement..., les élections, ... \ +
CLIQUEZ ICI POUR EN VOIR PLUS! + +feature.city.mayor.label.mayor=maire +feature.city.mayor.label.color=couleur +feature.city.mayor.label.this_one=celle ci + +feature.city.mayor.error.not_in_city=Cet objet n'est pas dans une ville +feature.city.mayor.error.feature_locked=Vous n'avez pas débloqué cette feature ! Veuillez améliorer votre ville au niveau %1$s ! + +feature.city.mayor.urne.interact.mysterious=*Mystérieux objet... Cela doit surement servir pour des élections...* +feature.city.mayor.urne.interact.not_your_urne=*Mhh... Ce n'est pas votre urne* +feature.city.mayor.urne.interact.need_members=*vous devez avoir au moins %1$s membres afin de pouvoir faire une élection* +feature.city.mayor.urne.interact.election_already=*Les élections ont déjà eu lieu !* +feature.city.mayor.urne.interact.no_candidate=*personne ne s'est présenté ! Présentez-vous ! /city* +feature.city.mayor.urne.place.must_be_overworld=Vous devez être dans l'overworld pour poser ceci ! +feature.city.mayor.urne.place.need_city=Vous devez avoir une ville pour poser ceci ! +feature.city.mayor.urne.place.must_be_in_city=Vous devez poser ceci dans votre ville ! +feature.city.mayor.urne.place.require_level=Vous devez être niveau %1$s de ville pour poser l'urne +feature.city.mayor.urne.place.not_owner=Vous n'êtes pas le propriétaire ! +feature.city.mayor.urne.place.already_has_npc=Vous ne pouvez pas poser ceci car vous avez déjà des NPC +feature.city.mayor.urne.break.not_owner=Vous ne pouvez pas poser ceci car vous n'êtes pas le propriétaire + +feature.city.mayor.npc.display.mayor=Maire %1$s +feature.city.mayor.npc.display.unknown=Inconnu +feature.city.mayor.npc.display.owner=Propriétaire %1$s +feature.city.mayor.npc.error.feature_locked=Vous n'avez pas débloqué cette feature ! Veuillez améliorer votre ville au niveau %1$s ! +feature.city.mayor.npc.info.no_mayor_yet=*mhh cette ville n'a pas encore élu un maire* +feature.city.mayor.npc.info.no_election_unlocked=*mhh cette ville n'a pas encore débloquée les élections* +feature.city.mayor.npc.move.prompt=*Bonjour ? Tu veux me bouger ? Clique ici !* +feature.city.mayor.npc.move.hover=Déplacer ce NPC +feature.city.mayor.npc.move.item.lore=Cliquez sur l'endroit où vous voulez déplacer le NPC +feature.city.mayor.npc.move.item.name=Emplacement du NPC +feature.city.mayor.npc.move.interaction.remaining=Vous avez %1$s pour sélectionner votre emplacement +feature.city.mayor.npc.move.interaction.timeout=Vous n'avez pas eu le temps de déplacer votre NPC +feature.city.mayor.npc.move.error.outside_city=Impossible de mettre le NPC en dehors de votre ville + +feature.city.mayor.menu.more_info.name=Menu des maires - Plus d'info +feature.city.mayor.menu.more_info.elections.title=Les élections - Mercredi +feature.city.mayor.menu.more_info.reforms.title=Les réformes - Jeudi +feature.city.mayor.menu.more_info.elections.lore=Tous les mercredis, les élections commencent \ +
Si vous avez plus de %1$s membres, \ +
vous pouvez élire un maire pour votre ville \ +
Sinon, le propriétaire choisira les réformes qu'il veut! +feature.city.mayor.menu.more_info.reforms.lore=Tous les jeudis, le maire est élu! \ +
Les réformes choisies par le maire sont appliquées \ +
Vous pouvez y jeter un coup d'oeil sur /city mayor + +feature.city.mayor.menu.owner.name=Menu des maires - Mandat du propriétaire +feature.city.mayor.menu.owner.lore.header=Propriétaire de %1$s +feature.city.mayor.menu.owner.title=Propriétaire %1$s +feature.city.mayor.menu.mayor.name=Menu des maires - Mandat du Maire +feature.city.mayor.menu.mayor.lore.header=Maire de %1$s +feature.city.mayor.menu.mayor.title=Maire %1$s +feature.city.mayor.menu.npc.move.name=Déplacer ce NPC +feature.city.mayor.menu.npc.move.lore=Vous allez pouvoir déplacer ce NPC \ +
CLIQUEZ ICI POUR CONTINUER + +feature.city.mayor.menu.mandate.name=Menu des Maires - Mandat +feature.city.mayor.menu.mandate.mayor.lore.header=Maire de %1$s +feature.city.mayor.menu.mandate.owner.lore.header=Propriétaire de %1$s +feature.city.mayor.menu.mandate.mayor.title=Maire %1$s +feature.city.mayor.menu.mandate.owner.title=Propriétaire %1$s +feature.city.mayor.menu.mandate.law.lore=Vous êtes le %1$s! \ +

Vous pouvez changer les lois et lancer des évènements! \ +

CLIQUEZ ICI POUR OUVRIR UN MENU +feature.city.mayor.menu.mandate.law.name=Les Lois + +feature.city.mayor.command.warp.not_set.phase2=Le warp de la ville n'est pas encore défini ! Demandez au maire actuel d'en mettre un ! \ +
*via /city setwarp ou avec le menu des lois* +feature.city.mayor.command.warp.not_set.no_mayor=Le warp de la ville n'est pas encore défini ! Vous devez attendre qu'un maire soit élu pour mettre un warp + +feature.city.mayor.warp.error.not_mayor=Vous n'êtes pas le maire de la ville +feature.city.mayor.warp.interaction.remaining=Vous avez %1$s pour sélectionner votre point de spawn +feature.city.mayor.warp.interaction.timeout=Vous n'avez pas eu le temps de poser votre warp +feature.city.mayor.warp.error.outside_city=Impossible de mettre le warp ici car ce n'est pas dans votre ville +feature.city.mayor.warp.success=Vous venez de mettre le warp de votre ville en : \ +
- x=%1$s \ +
- y=%2$s \ +
- z=%3$s +feature.city.mayor.warp.wand.lore=Cliquez sur l'endroit où vous voulez mettre le warp +feature.city.mayor.warp.wand.name=Sélection du warp + +feature.city.mayor.broadcast.phase1= \ +
\ +
MAIRE ! Les élections sont ouvertes ! \ +
Présentez vous, votez pour des maires, ... \ +
Regardez si vous avez assez de membres ! \ +
\ +
+feature.city.mayor.broadcast.phase2= \ +
\ +
MAIRE ! Vos réformes sont actives ! \ +
Faites vos stratégies, farmez, et pleins d'autres choses ! \ +
\ +
+ +feature.city.mayor.menu.law.name=Menu des lois +feature.city.mayor.menu.law.pvp.name.disable=Désactiver le PVP +feature.city.mayor.menu.law.pvp.name.enable=Activer le PVP +feature.city.mayor.menu.law.pvp.lore.active=Cette loi active le PVP dans toute la ville +feature.city.mayor.menu.law.pvp.lore.inactive=Cette loi désactive le PVP dans toute la ville +feature.city.mayor.menu.law.pvp.lore.members=entre les membres ! +feature.city.mayor.menu.law.pvp.click.enable=CLIQUEZ ICI POUR ACTIVER LE PVP +feature.city.mayor.menu.law.pvp.click.disable=CLIQUEZ ICI POUR DESACTIVER LE PVP +feature.city.mayor.menu.law.pvp.message.enable=Vous avez activé le PVP dans votre ville +feature.city.mayor.menu.law.pvp.message.disable=Vous avez désactivé le PVP dans votre ville +feature.city.mayor.menu.law.warp.name=Changer son warp +feature.city.mayor.menu.law.warp.lore.unset=Cette loi n'est pas effective ! \ +
Vous devez choisir un endroit où les membres pourront \ +
arriver +feature.city.mayor.menu.law.warp.lore.set=Les membres peuvent se téléporter à votre warp! \ +
Voici la position du warp : +feature.city.mayor.menu.law.warp.lore.x=- x=%1$s +feature.city.mayor.menu.law.warp.lore.y=- y=%1$s +feature.city.mayor.menu.law.warp.lore.z=- z=%1$s +feature.city.mayor.menu.law.warp.click=CLIQUEZ ICI POUR CHOISIR UN ENDROIT +feature.city.mayor.menu.law.announce.name=Faire une annonce +feature.city.mayor.menu.law.announce.lore=Cette loi permet d'émettre un message dans toute la ville! +feature.city.mayor.menu.law.announce.click=CLIQUEZ ICI POUR ECRIRE LE MESSAGE +feature.city.mayor.menu.law.announce.prompt=Vous pouvez entrer votre message que vous voulez diffuser dans toute la ville ! Tapez cancel pour annuler l'action +feature.city.mayor.menu.law.announce.header=-- Annonce du Maire -- +feature.city.mayor.menu.law.announce.success=Vous avez bien envoyé le message à tous les membres de la ville +feature.city.mayor.menu.law.cooldown=Cooldown : %1$s +feature.city.mayor.menu.law.perk_event.click=CLIQUEZ ICI POUR UTILISER LA REFORME +feature.city.mayor.menu.law.perk_event.wait=Vous devez attendre avant de pouvoir utiliser cette réforme +feature.city.mayor.menu.law.perk_event.impot.trigger=Le maire a déclenché le Prélévement d'Impot ! +feature.city.mayor.menu.law.perk_event.agricultural.trigger=Le maire a déclenché l'Essor Agricole ! +feature.city.mayor.menu.law.perk_event.mineral.trigger=Le maire a déclenché la Ruée Minière ! +feature.city.mayor.menu.law.perk_event.military.trigger=Le maire a déclenché la Dissuasion Militaire ! +feature.city.mayor.menu.law.perk_event.idyllic.trigger=Le maire a déclenché la Pluie idyllique ! +feature.city.mayor.menu.law.perk_event.dream.trigger=Le maire a déclenché le Rêve Chaotique ! + +feature.city.mayor.menu.vote.name=Menu des maires - Votes +feature.city.mayor.menu.vote.lore.header=Candidat pour le maire de %1$s +feature.city.mayor.menu.vote.lore.votes=Votes : %1$s +feature.city.mayor.menu.vote.lore.progress=[%1$s] (%2$s%%) +feature.city.mayor.menu.vote.lore.click=CLIQUEZ ICI POUR LE VOTER +feature.city.mayor.menu.vote.mayor.title=Maire %1$s +feature.city.mayor.menu.vote.message.already_voted=Vous avez déjà voté pour ce maire +feature.city.mayor.menu.vote.message.voted=Vous avez voté pour le %1$s +feature.city.mayor.menu.vote.button.close=Fermer +feature.city.mayor.menu.vote.button.prev=Page précédente +feature.city.mayor.menu.vote.button.next=Page suivante + +feature.city.mayor.menu.election.name=Menu des élections +feature.city.mayor.menu.election.item.name=Les élections +feature.city.mayor.menu.election.item.lore.voted=Les élections sont ouvertes! \ +
Vous pouvez changer votre vote ! \ +
\ +
Vote actuel : %1$s \ +
Fermeture dans %2$s \ +
\ +
CLIQUEZ ICI POUR ACCEDER AU MENU +feature.city.mayor.menu.election.item.lore.not_voted=Les élections sont ouvertes! \ +
Choisissez le maire qui vous plaît ! \ +
\ +
Fermeture dans %1$s \ +
\ +
CLIQUEZ ICI POUR VOUS INSCRIRE +feature.city.mayor.menu.election.error.no_candidate=Il y a aucun volontaire pour être maire +feature.city.mayor.menu.election.candidature.lore.already=Vous vous êtes déjà présenté ! \ +
Modifiez votre couleur et regardez les réformes que vous avez choisies \ +
\ +
CLIQUEZ ICI POUR ACCEDER AU MENU +feature.city.mayor.menu.election.candidature.lore.new=Vous pouvez vous inscrire afin d'être maire ! \ +
Sélectionnez vos réformes et votre couleur ! \ +
\ +
CLIQUEZ ICI POUR VOUS INSCRIRE +feature.city.mayor.menu.election.candidature.name=Votre candidature +feature.city.mayor.menu.election.owner_reform.name=Choix d'une réforme +feature.city.mayor.menu.election.owner_reform.lore.chosen=Vous avez déjà choisi votre réforme ! +feature.city.mayor.menu.election.owner_reform.lore.choice=Vous êtes le propriétaire de la ville ! \ +
Vous pouvez choisir une réforme événementiel ! \ +
\ +
CLIQUEZ ICI POUR CHOISIR LA REFORME + +feature.city.mayor.menu.create.name=Menu des maires - Creation +feature.city.mayor.menu.create.perk.choose.lore=Choisissez votre réforme que vous voulez voir ! \ +
\ +
CLIQUEZ ICI POUR CHOISIR LA REFORME +feature.city.mayor.menu.create.perk.change.lore=CLIQUEZ ICI POUR CHANGER LA REFORME +feature.city.mayor.menu.create.back.election=Vous allez retourner au menu des élections \ +
CLIQUEZ ICI POUR CONFIRMER +feature.city.mayor.menu.create.back.city=Vous allez retourner au menu de votre ville \ +
CLIQUEZ ICI POUR CONFIRMER +feature.city.mayor.menu.create.confirm.name.ready=Confirmer +feature.city.mayor.menu.create.confirm.name.blocked=Confirmer +feature.city.mayor.menu.create.confirm.lore.ready=Vous avez choisi toutes les réformes nécessaires \ +
\ +
CLIQUEZ ICI POUR CONTINUER LA CANDIDATURE +feature.city.mayor.menu.create.confirm.lore.blocked=Vous n'avez pas choisi toutes les réformes nécessaires +feature.city.mayor.menu.create.confirm.owner.success=Vous avez ajouté la Réforme : %1$s + +feature.city.mayor.menu.modify.name=Menu des maires - Modification +feature.city.mayor.menu.modify.color.lore=Vous pouvez rechangez la couleur de votre nom! \ +
\ +
CLIQUEZ ICI POUR CHANGER LA COULEUR +feature.city.mayor.menu.modify.color.name=Changer votre %1$s +feature.city.mayor.menu.modify.back.lore=Vous allez retourner au menu de votre ville \ +
CLIQUEZ ICI POUR CONFIRMER + +feature.city.mayor.menu.color.name=Menu des maires - Couleur +feature.city.mayor.menu.color.option.lore=Votre nom sera affiché en %1$s \ +
CLIQUEZ ICI POUR CONFIRMER +feature.city.mayor.menu.color.option.name=Mettez du %1$s +feature.city.mayor.menu.color.confirm.lore=Vous allez vous présenter en tant que maire de %1$s +feature.city.mayor.menu.color.confirm.final=AUCUN RETOUR EN ARRIERE POSSIBLE! +feature.city.mayor.menu.color.confirm.cancel=Ne pas se présenter en tant que Maire de %1$s +feature.city.mayor.menu.color.candidate.announce=%1$s s'est présenté en tant que maire! +feature.city.mayor.menu.color.candidate.success=Vous vous êtes présenté avec succès! +feature.city.mayor.menu.color.error.no_mayor=Votre ville n'a pas de maire ! +feature.city.mayor.menu.color.change.success=Vous avez changé votre %1$s en %2$s +feature.city.mayor.menu.color.change.confirm=Changer sa %1$s en %2$s +feature.city.mayor.menu.color.change.cancel=Ne pas changer sa %1$s en %2$s + +feature.city.mayor.menu.perk_choice.name=Menu des maires - Reformes +feature.city.mayor.menu.perk_choice.locked=Vous devez être niveau %1$s pour débloquer ceci +feature.city.mayor.menu.perk_choice.error.event_duplicate=Vous ne pouvez pas choisir 2 réformes de type évènement ! +feature.city.mayor.menu.perk_choice.button.back=Revenir en arrière +feature.city.mayor.menu.perk_choice.button.prev=Page précédente +feature.city.mayor.menu.perk_choice.button.next=Page suivante + +feature.city.mayor.perk.basic.ayweniter.blessing=*la bénédiction!* +feature.city.mayor.perk.basic.iron_blood.tremor=*tremblement* Quelque chose semble arriver... +feature.city.mayor.perk.basic.gps_tracker.entered=Vous venez d'entrer dans la ville %1$s qui dispose du GPS Tracker ! Soyez sur vos gardes. +feature.city.mayor.perk.event.agricultural.start=La réforme d'événement l'Essor Agricole est lancée et il reste plus que %1$s +feature.city.mayor.perk.event.agricultural.end=La réforme d'événement l'Essor Agricole est terminée ! +feature.city.mayor.perk.event.mineral.start=La réforme d'événement la Ruée Minière est lancée et il reste plus que %1$s +feature.city.mayor.perk.event.mineral.end=La réforme d'évènement la Ruée Minière est terminée ! +feature.city.mayor.perk.event.impot.zombie.name=Serviteur de %1$s +feature.city.mayor.perk.event.impot.victim.lucky=*grr vous avez de la chance !* +feature.city.mayor.perk.event.impot.victim.lost=Tu as perdu %1$s à cause du maire %2$s +feature.city.mayor.perk.event.impot.mayor.collected=Vous venez de prélever %1$s à %2$s +feature.city.mayor.perk.event.impot.zombies.done=*les zombies ont eu tout ce qu'ils voulaient* +feature.city.mayor.perk.event.military.golem.name=Défendeur de %1$s + +feature.city.mayor.admin.changeelection.usage=/adminmayor changeelection cityUUID electionType +feature.city.mayor.admin.changeelection.success=Vous venez de mettre : %1$s dans la ville %2$s From 6a1a9ba8a9df47ce336232bfd930901a1474f261 Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Thu, 26 Mar 2026 18:16:44 +0100 Subject: [PATCH 10/20] partial translation for package feature.sub.milestones and fix fallback --- .../city/sub/milestone/CityLevels.java | 385 ++++++++++++------ .../milestone/rewards/TemplateRewards.java | 19 +- .../utils/messages/TranslationManager.java | 61 ++- .../resources/translations/lang.properties | 46 +++ .../translations/lang_en_GB.properties | 120 +++++- .../translations/lang_en_US.properties | 121 +++++- 6 files changed, 619 insertions(+), 133 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/city/sub/milestone/CityLevels.java b/src/main/java/fr/openmc/core/features/city/sub/milestone/CityLevels.java index 6527d1167..d4b0e1278 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/milestone/CityLevels.java +++ b/src/main/java/fr/openmc/core/features/city/sub/milestone/CityLevels.java @@ -14,6 +14,7 @@ import fr.openmc.core.features.city.sub.war.WarManager; import fr.openmc.core.features.economy.EconomyManager; import fr.openmc.core.registry.items.CustomItemRegistry; +import fr.openmc.core.utils.messages.TranslationManager; import lombok.Getter; import net.kyori.adventure.text.Component; import org.bukkit.Material; @@ -29,14 +30,15 @@ @Getter public enum CityLevels { LEVEL_1( - Component.text("Niveau 1"), - Component.text("Ère urbaine"), + "feature.city.levels.level_1.name", + "feature.city.levels.level_1.description", List.of( new CommandRequirement("/city create", 1) ), List.of( new TemplateRewards( - Component.text("§6" + FREE_CLAIMS + " claims §7gratuits") + "feature.city.levels.rewards.free_claims", + Component.text(FREE_CLAIMS) ), MascotsSkinUnlockRewards.LEVEL_1, MascotsLevelsRewards.LEVEL_1, @@ -45,8 +47,8 @@ public enum CityLevels { 0 ), LEVEL_2( - Component.text("Niveau 2"), - Component.text("Les fondations"), + "feature.city.levels.level_2.name", + "feature.city.levels.level_2.description", List.of( new CommandRequirement("/city map", 1), new CommandRequirement("/city claim view", 1), @@ -55,18 +57,23 @@ public enum CityLevels { city -> ItemStack.of(Material.OAK_FENCE), (city, level) -> { if (city.getLevel() != level.ordinal()) { - return Component.text("Avoir 5 claims"); + return TranslationManager.translation( + "feature.city.levels.requirements.claims", + Component.text(5) + ); } - return Component.text("Avoir 5 claims (%d/5)".formatted( - city.getChunks().size() - )); + return TranslationManager.translation( + "feature.city.levels.requirements.claims.progress", + Component.text(5), + Component.text(city.getChunks().size()) + ); } ), new TemplateRequirement( city -> city.getLaw().getWarp() != null, city -> CustomItemRegistry.getByName("omc_items:warp_stick").getBest(), - (city, ignore) -> Component.text("Poser un /city setwarp") + (city, ignore) -> TranslationManager.translation("feature.city.levels.requirements.setwarp") ), new ItemDepositRequirement(Material.GOLD_INGOT, 128) ), @@ -81,8 +88,8 @@ public enum CityLevels { 60 * 10 ), LEVEL_3( - Component.text("Niveau 3"), - Component.text("Ville peu développée"), + "feature.city.levels.level_3.name", + "feature.city.levels.level_3.description", List.of( new CommandRequirement("/city bank", 1), new CommandRequirement("/city chest", 1), @@ -91,12 +98,17 @@ public enum CityLevels { city -> ItemStack.of(Material.OAK_FENCE), (city, level) -> { if (city.getLevel() != level.ordinal()) { - return Component.text("Avoir 10 claims"); + return TranslationManager.translation( + "feature.city.levels.requirements.claims", + Component.text(10) + ); } - return Component.text("Avoir 10 claims (%d/10)".formatted( - city.getChunks().size() - )); + return TranslationManager.translation( + "feature.city.levels.requirements.claims.progress", + Component.text(10), + Component.text(city.getChunks().size()) + ); } ), new TemplateRequirement( @@ -104,12 +116,17 @@ public enum CityLevels { city -> ItemStack.of(Material.GOLD_BLOCK), (city, level) -> { if (city.getLevel() != level.ordinal()) { - return Component.text("Avoir 5k dans la banque"); + return TranslationManager.translation( + "feature.city.levels.requirements.bank", + Component.text("5k") + ); } - return Component.text("Avoir 5k dans la banque (%s/5k)".formatted( - EconomyManager.getFormattedSimplifiedNumber(city.getBalance()) - )); + return TranslationManager.translation( + "feature.city.levels.requirements.bank.progress", + Component.text("5k"), + Component.text(EconomyManager.getFormattedSimplifiedNumber(city.getBalance())) + ); } ), new TemplateRequirement( @@ -117,18 +134,26 @@ public enum CityLevels { city -> ItemStack.of(Material.PLAYER_HEAD), (city, level) -> { if (city.getLevel() != level.ordinal()) { - return Component.text("Avoir 2 membres"); + return TranslationManager.translation( + "feature.city.levels.requirements.members", + Component.text(2) + ); } - return Component.text("Avoir 2 membres (%d/2)".formatted( - city.getMembers().size() - )); + return TranslationManager.translation( + "feature.city.levels.requirements.members.progress", + Component.text(2), + Component.text(city.getMembers().size()) + ); } ), new TemplateRequirement( city -> city.getMascot().getLevel() >= 2, city -> ItemStack.of(city.getMascot().getMascotEgg()), - (city, ignore) -> Component.text("Avoir sa mascotte niveau 2") + (city, ignore) -> TranslationManager.translation( + "feature.city.levels.requirements.mascot_level", + Component.text(2) + ) ), new ItemDepositRequirement(Material.SPIDER_EYE, 8), new ItemDepositRequirement(Material.BONE, 16), @@ -147,25 +172,30 @@ public enum CityLevels { 60 * 30 ), LEVEL_4( - Component.text("Niveau 4"), - Component.text("Démocratie"), + "feature.city.levels.level_4.name", + "feature.city.levels.level_4.description", List.of( new TemplateRequirement( city -> !city.getAvailableNotation().isEmpty(), city -> ItemStack.of(Material.DIAMOND), - (city, level) -> Component.text("Recevoir une notation") + (city, level) -> TranslationManager.translation("feature.city.levels.requirements.notation.receive") ), new TemplateRequirement( city -> city.getRanks().size() >= 2, city -> ItemStack.of(Material.DANDELION), (city, level) -> { if (city.getLevel() != level.ordinal()) { - return Component.text("Avoir 2 grades (/city rank)"); + return TranslationManager.translation( + "feature.city.levels.requirements.ranks", + Component.text(2) + ); } - return Component.text("Avoir 2 grades (%d/2)".formatted( - city.getRanks().size() - )); + return TranslationManager.translation( + "feature.city.levels.requirements.ranks.progress", + Component.text(2), + Component.text(city.getRanks().size()) + ); } ), new TemplateRequirement( @@ -173,12 +203,17 @@ public enum CityLevels { city -> ItemStack.of(Material.GOLD_BLOCK), (city, level) -> { if (city.getLevel() != level.ordinal()) { - return Component.text("Avoir 15k dans la banque"); + return TranslationManager.translation( + "feature.city.levels.requirements.bank", + Component.text("15k") + ); } - return Component.text("Avoir 15k dans la banque (%s/15k)".formatted( - EconomyManager.getFormattedSimplifiedNumber(city.getBalance()) - )); + return TranslationManager.translation( + "feature.city.levels.requirements.bank.progress", + Component.text("15k"), + Component.text(EconomyManager.getFormattedSimplifiedNumber(city.getBalance())) + ); } ), new ItemDepositRequirement(CustomItemRegistry.getByName("omc_items:aywenite").getBest(), 128), @@ -192,7 +227,7 @@ public enum CityLevels { city -> CustomItemRegistry.getByName("omc_blocks:urne").getBest(), - (city, level, scope) -> Component.text("Craftez une urne"), + (city, level, scope) -> TranslationManager.translation("feature.city.levels.requirements.craft_urne"), "craft_urne", CraftItemEvent.class, (event, scope) -> { @@ -223,19 +258,22 @@ public enum CityLevels { 60 * 90 ), LEVEL_5( - Component.text("Niveau 5"), - Component.text("Développement économique"), + "feature.city.levels.level_5.name", + "feature.city.levels.level_5.description", List.of( new TemplateRequirement( city -> NPCManager.hasNPCS(city.getUniqueId()), city -> CustomItemRegistry.getByName("omc_blocks:urne").getBest(), - (city, level) -> Component.text("Poser l'urne") + (city, level) -> TranslationManager.translation("feature.city.levels.requirements.place_urne") ), new TemplateRequirement( city -> city.getAvailableNotation().stream().anyMatch(notation -> notation.getTotalNote() >= 10), city -> ItemStack.of(Material.DANDELION), - (city, level) -> Component.text("Avoir minimum 10 points sur une des notations") + (city, level) -> TranslationManager.translation( + "feature.city.levels.requirements.notation.points", + Component.text(10) + ) ), new CommandRequirement("/city mayor", 1), new ItemDepositRequirement(Material.GOLD_BLOCK, 32), @@ -245,12 +283,17 @@ public enum CityLevels { city -> ItemStack.of(Material.GOLD_BLOCK), (city, level) -> { if (city.getLevel() != level.ordinal()) { - return Component.text("Avoir 20k dans la banque"); + return TranslationManager.translation( + "feature.city.levels.requirements.bank", + Component.text("20k") + ); } - return Component.text("Avoir 20k dans la banque (%s/20k)".formatted( - EconomyManager.getFormattedSimplifiedNumber(city.getBalance()) - )); + return TranslationManager.translation( + "feature.city.levels.requirements.bank.progress", + Component.text("20k"), + Component.text(EconomyManager.getFormattedSimplifiedNumber(city.getBalance())) + ); } ), new TemplateRequirement( @@ -258,12 +301,17 @@ public enum CityLevels { city -> ItemStack.of(Material.OAK_FENCE), (city, level) -> { if (city.getLevel() != level.ordinal()) { - return Component.text("Avoir 23 claims"); + return TranslationManager.translation( + "feature.city.levels.requirements.claims", + Component.text(23) + ); } - return Component.text("Avoir 23 claims (%d/23)".formatted( - city.getChunks().size() - )); + return TranslationManager.translation( + "feature.city.levels.requirements.claims.progress", + Component.text(23), + Component.text(city.getChunks().size()) + ); } ), new ItemDepositRequirement(CustomItemRegistry.getByName("omc_foods:the_mixture").getBest(), 32) @@ -281,25 +329,33 @@ public enum CityLevels { 60 * 60 * 3 ), LEVEL_6( - Component.text("Niveau 6"), - Component.text("Capitale"), + "feature.city.levels.level_6.name", + "feature.city.levels.level_6.description", List.of( new TemplateRequirement( city -> city.getAvailableNotation().stream().anyMatch(notation -> notation.getTotalNote() >= 20), city -> ItemStack.of(Material.DANDELION), - (city, level) -> Component.text("Avoir minimum 20 points sur une des notations") + (city, level) -> TranslationManager.translation( + "feature.city.levels.requirements.notation.points", + Component.text(20) + ) ), new TemplateRequirement( city -> city.getBalance() >= 30000, city -> ItemStack.of(Material.GOLD_BLOCK), (city, level) -> { if (city.getLevel() != level.ordinal()) { - return Component.text("Avoir 30k dans la banque"); + return TranslationManager.translation( + "feature.city.levels.requirements.bank", + Component.text("30k") + ); } - return Component.text("Avoir 30k dans la banque (%s/30k)".formatted( - EconomyManager.getFormattedSimplifiedNumber(city.getBalance()) - )); + return TranslationManager.translation( + "feature.city.levels.requirements.bank.progress", + Component.text("30k"), + Component.text(EconomyManager.getFormattedSimplifiedNumber(city.getBalance())) + ); } ), new TemplateRequirement( @@ -307,18 +363,26 @@ public enum CityLevels { city -> ItemStack.of(Material.OAK_FENCE), (city, level) -> { if (city.getLevel() != level.ordinal()) { - return Component.text("Avoir 27 claims"); + return TranslationManager.translation( + "feature.city.levels.requirements.claims", + Component.text(27) + ); } - return Component.text("Avoir 27 claims (%d/27)".formatted( - city.getChunks().size() - )); + return TranslationManager.translation( + "feature.city.levels.requirements.claims.progress", + Component.text(27), + Component.text(city.getChunks().size()) + ); } ), new TemplateRequirement( city -> city.getMascot().getLevel() >= 5, city -> ItemStack.of(city.getMascot().getMascotEgg()), - (city, level) -> Component.text("Avoir la mascotte niveau 5") + (city, level) -> TranslationManager.translation( + "feature.city.levels.requirements.mascot_level", + Component.text(5) + ) ), new ItemDepositRequirement(Material.STONE_BRICKS, 400), new ItemDepositRequirement(Material.BLACK_CONCRETE, 184), @@ -338,25 +402,33 @@ public enum CityLevels { 60 * 60 * 5 ), LEVEL_7( - Component.text("Niveau 7"), - Component.text("Royaume ?"), + "feature.city.levels.level_7.name", + "feature.city.levels.level_7.description", List.of( new TemplateRequirement( city -> city.getAvailableNotation().stream().anyMatch(notation -> notation.getTotalNote() >= 30), city -> ItemStack.of(Material.DANDELION), - (city, level) -> Component.text("Avoir minimum 30 points sur une des notations") + (city, level) -> TranslationManager.translation( + "feature.city.levels.requirements.notation.points", + Component.text(30) + ) ), new TemplateRequirement( city -> city.getBalance() >= 40000, city -> ItemStack.of(Material.GOLD_BLOCK), (city, level) -> { if (city.getLevel() != level.ordinal()) { - return Component.text("Avoir 40k dans la banque"); + return TranslationManager.translation( + "feature.city.levels.requirements.bank", + Component.text("40k") + ); } - return Component.text("Avoir 40k dans la banque (%s/40k)".formatted( - EconomyManager.getFormattedSimplifiedNumber(city.getBalance()) - )); + return TranslationManager.translation( + "feature.city.levels.requirements.bank.progress", + Component.text("40k"), + Component.text(EconomyManager.getFormattedSimplifiedNumber(city.getBalance())) + ); } ), new TemplateRequirement( @@ -364,18 +436,26 @@ public enum CityLevels { city -> ItemStack.of(Material.OAK_FENCE), (city, level) -> { if (city.getLevel() != level.ordinal()) { - return Component.text("Avoir 30 claims"); + return TranslationManager.translation( + "feature.city.levels.requirements.claims", + Component.text(30) + ); } - return Component.text("Avoir 30 claims (%d/30)".formatted( - city.getChunks().size() - )); + return TranslationManager.translation( + "feature.city.levels.requirements.claims.progress", + Component.text(30), + Component.text(city.getChunks().size()) + ); } ), new TemplateRequirement( city -> city.getMascot().getLevel() >= 6, city -> ItemStack.of(city.getMascot().getMascotEgg()), - (city, level) -> Component.text("Avoir la mascotte niveau 6") + (city, level) -> TranslationManager.translation( + "feature.city.levels.requirements.mascot_level", + Component.text(6) + ) ), new ItemDepositRequirement(CustomItemRegistry.getByName("omc_items:aywenite").getBest(), 400), new ItemDepositRequirement(Material.DIAMOND_SWORD, 10), @@ -396,43 +476,56 @@ public enum CityLevels { 60 * 60 * 10 ), LEVEL_8( - Component.text("Niveau 8"), - Component.text("Empire ?"), + "feature.city.levels.level_8.name", + "feature.city.levels.level_8.description", List.of( new TemplateRequirement( city -> WarManager.warHistory.get(city.getUniqueId()) != null && WarManager.warHistory.get(city.getUniqueId()).getNumberWar() >= 2, city -> ItemStack.of(Material.IRON_SWORD), (city, level) -> { if (city.getLevel() != level.ordinal()) { - return Component.text("Avoir fait 2 guerres"); + return TranslationManager.translation( + "feature.city.levels.requirements.war.count", + Component.text(2) + ); } - return Component.text("Avoir fait 2 guerres (%s/2)".formatted( - WarManager.warHistory.get(city.getUniqueId()) != null ? WarManager.warHistory.get(city.getUniqueId()).getNumberWar() : 0 - )); + return TranslationManager.translation( + "feature.city.levels.requirements.war.count.progress", + Component.text(2), + Component.text(WarManager.warHistory.get(city.getUniqueId()) != null ? WarManager.warHistory.get(city.getUniqueId()).getNumberWar() : 0) + ); } ), new TemplateRequirement( city -> WarManager.warHistory.get(city.getUniqueId()) != null && WarManager.warHistory.get(city.getUniqueId()).getNumberWon() >= 1, city -> ItemStack.of(Material.DIAMOND_SWORD), - (city, level) -> Component.text("Gagner une guerre") + (city, level) -> TranslationManager.translation("feature.city.levels.requirements.war.win") ), new TemplateRequirement( city -> city.getAvailableNotation().stream().anyMatch(notation -> notation.getTotalNote() >= 40), city -> ItemStack.of(Material.DANDELION), - (city, level) -> Component.text("Avoir minimum 40 points sur une des notations") + (city, level) -> TranslationManager.translation( + "feature.city.levels.requirements.notation.points", + Component.text(40) + ) ), new TemplateRequirement( city -> city.getBalance() >= 60000, city -> ItemStack.of(Material.GOLD_BLOCK), (city, level) -> { if (city.getLevel() != level.ordinal()) { - return Component.text("Avoir 60k dans la banque"); + return TranslationManager.translation( + "feature.city.levels.requirements.bank", + Component.text("60k") + ); } - return Component.text("Avoir 60k dans la banque (%s/60k)".formatted( - EconomyManager.getFormattedSimplifiedNumber(city.getBalance()) - )); + return TranslationManager.translation( + "feature.city.levels.requirements.bank.progress", + Component.text("60k"), + Component.text(EconomyManager.getFormattedSimplifiedNumber(city.getBalance())) + ); } ), new TemplateRequirement( @@ -440,18 +533,26 @@ public enum CityLevels { city -> ItemStack.of(Material.OAK_FENCE), (city, level) -> { if (city.getLevel() != level.ordinal()) { - return Component.text("Avoir 50 claims"); + return TranslationManager.translation( + "feature.city.levels.requirements.claims", + Component.text(50) + ); } - return Component.text("Avoir 50 claims (%d/50)".formatted( - city.getChunks().size() - )); + return TranslationManager.translation( + "feature.city.levels.requirements.claims.progress", + Component.text(50), + Component.text(city.getChunks().size()) + ); } ), new TemplateRequirement( city -> city.getMascot().getLevel() >= 7, city -> ItemStack.of(city.getMascot().getMascotEgg()), - (city, level) -> Component.text("Avoir la mascotte niveau 7") + (city, level) -> TranslationManager.translation( + "feature.city.levels.requirements.mascot_level", + Component.text(7) + ) ), new ItemDepositRequirement(Material.NETHERITE_INGOT, 4), new ItemDepositRequirement(Material.OBSIDIAN, 128), @@ -470,44 +571,60 @@ public enum CityLevels { 60 * 60 * 16 ), LEVEL_9( - Component.text("Niveau 9"), - Component.text("Puissance militaire"), + "feature.city.levels.level_9.name", + "feature.city.levels.level_9.description", List.of( new TemplateRequirement( city -> WarManager.warHistory.get(city.getUniqueId()) != null && WarManager.warHistory.get(city.getUniqueId()).getNumberWon() >= 3, city -> ItemStack.of(Material.DIAMOND_SWORD), (city, level) -> { if (city.getLevel() != level.ordinal()) { - return Component.text("Gagner 3 guerres"); + return TranslationManager.translation( + "feature.city.levels.requirements.war.win.count", + Component.text(3) + ); } - return Component.text("Gagner 3 guerres (%s/3)".formatted( - WarManager.warHistory.get(city.getUniqueId()) != null ? WarManager.warHistory.get(city.getUniqueId()).getNumberWon() : 0 - )); + return TranslationManager.translation( + "feature.city.levels.requirements.war.win.count.progress", + Component.text(3), + Component.text(WarManager.warHistory.get(city.getUniqueId()) != null ? WarManager.warHistory.get(city.getUniqueId()).getNumberWon() : 0) + ); } ), new TemplateRequirement( city -> city.getAvailableNotation().stream().anyMatch(notation -> notation.getTotalNote() >= 50), city -> ItemStack.of(Material.DANDELION), - (city, level) -> Component.text("Avoir minimum 50 points sur une des notations") + (city, level) -> TranslationManager.translation( + "feature.city.levels.requirements.notation.points", + Component.text(50) + ) ), new TemplateRequirement( city -> city.getBalance() >= 80000, city -> ItemStack.of(Material.GOLD_BLOCK), (city, level) -> { if (city.getLevel() != level.ordinal()) { - return Component.text("Avoir 80k dans la banque"); + return TranslationManager.translation( + "feature.city.levels.requirements.bank", + Component.text("80k") + ); } - return Component.text("Avoir 80k dans la banque (%s/80k)".formatted( - EconomyManager.getFormattedSimplifiedNumber(city.getBalance()) - )); + return TranslationManager.translation( + "feature.city.levels.requirements.bank.progress", + Component.text("80k"), + Component.text(EconomyManager.getFormattedSimplifiedNumber(city.getBalance())) + ); } ), new TemplateRequirement( city -> city.getMascot().getLevel() >= 8, city -> ItemStack.of(city.getMascot().getMascotEgg()), - (city, level) -> Component.text("Avoir une mascotte niveau 8") + (city, level) -> TranslationManager.translation( + "feature.city.levels.requirements.mascot_level", + Component.text(8) + ) ), new ItemDepositRequirement(Material.DIAMOND, 300), new ItemDepositRequirement(Material.CYAN_CONCRETE, 200), @@ -526,30 +643,38 @@ public enum CityLevels { 60 * 60 * 24 ), LEVEL_10( - Component.text("Niveau 10"), - Component.text("Métropole"), + "feature.city.levels.level_10.name", + "feature.city.levels.level_10.description", List.of( new TemplateRequirement( city -> NotationManager.top10Cities.contains(city.getUniqueId()), city -> ItemStack.of(Material.HONEYCOMB), - (city, level) -> Component.text("Être dans le top 10 des notations sur une des notations") + (city, level) -> TranslationManager.translation("feature.city.levels.requirements.notation.top10") ), new TemplateRequirement( city -> city.getAvailableNotation().stream().anyMatch(notation -> notation.getTotalNote() >= 60), city -> ItemStack.of(Material.DANDELION), - (city, level) -> Component.text("Avoir minimum 60 points sur une des notations") + (city, level) -> TranslationManager.translation( + "feature.city.levels.requirements.notation.points", + Component.text(60) + ) ), new TemplateRequirement( city -> WarManager.warHistory.get(city.getUniqueId()) != null && WarManager.warHistory.get(city.getUniqueId()).getNumberWar() >= 10, city -> ItemStack.of(Material.NETHERITE_SWORD), (city, level) -> { if (city.getLevel() != level.ordinal()) { - return Component.text("Avoir fait 10 guerres"); + return TranslationManager.translation( + "feature.city.levels.requirements.war.count", + Component.text(10) + ); } - return Component.text("Avoir fait 10 guerres (%s/10)".formatted( - WarManager.warHistory.get(city.getUniqueId()) != null ? WarManager.warHistory.get(city.getUniqueId()).getNumberWar() : 0 - )); + return TranslationManager.translation( + "feature.city.levels.requirements.war.count.progress", + Component.text(10), + Component.text(WarManager.warHistory.get(city.getUniqueId()) != null ? WarManager.warHistory.get(city.getUniqueId()).getNumberWar() : 0) + ); } ), new TemplateRequirement( @@ -557,18 +682,26 @@ public enum CityLevels { city -> ItemStack.of(Material.GOLD_BLOCK), (city, level) -> { if (city.getLevel() != level.ordinal()) { - return Component.text("Avoir 200k dans la banque"); + return TranslationManager.translation( + "feature.city.levels.requirements.bank", + Component.text("200k") + ); } - return Component.text("Avoir 200k dans la banque (%s/200k)".formatted( - EconomyManager.getFormattedSimplifiedNumber(city.getBalance()) - )); + return TranslationManager.translation( + "feature.city.levels.requirements.bank.progress", + Component.text("200k"), + Component.text(EconomyManager.getFormattedSimplifiedNumber(city.getBalance())) + ); } ), new TemplateRequirement( city -> city.getMascot().getLevel() >= 9, city -> ItemStack.of(city.getMascot().getMascotEgg()), - (city, level) -> Component.text("Avoir une mascotte niveau 9") + (city, level) -> TranslationManager.translation( + "feature.city.levels.requirements.mascot_level", + Component.text(9) + ) ), new ItemDepositRequirement(CustomItemRegistry.getByName("omc_blocks:aywenite_block").getBest(), 64), new ItemDepositRequirement(CustomItemRegistry.getByName("omc_contest:contest_shell").getBest(), 128), @@ -588,8 +721,8 @@ public enum CityLevels { ), ; - private final Component name; - private final Component description; + private final String nameKey; + private final String descriptionKey; private final List requirements; private final List rewards; private final long upgradeTime; @@ -597,20 +730,28 @@ public enum CityLevels { /** * Constructeur de l'énumération des niveaux de ville. * - * @param name le nom du niveau sous forme de composant - * @param description la description du niveau sous forme de composant + * @param nameKey la clé du nom du niveau + * @param descriptionKey la clé de la description du niveau * @param requirements la liste des exigences à remplir * @param rewards la liste des récompenses obtenues une fois le niveau atteint * @param upgradeTime le temps requis pour la montée de niveau (en secondes) */ - CityLevels(Component name, Component description, List requirements, List rewards, long upgradeTime) { - this.name = name; - this.description = description; + CityLevels(String nameKey, String descriptionKey, List requirements, List rewards, long upgradeTime) { + this.nameKey = nameKey; + this.descriptionKey = descriptionKey; this.requirements = requirements; this.rewards = rewards; this.upgradeTime = upgradeTime; } + public Component getName() { + return TranslationManager.translation(nameKey); + } + + public Component getDescription() { + return TranslationManager.translation(descriptionKey); + } + /** * Vérifie si toutes les exigences de la ville sont satisfaites pour ce niveau. * diff --git a/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/TemplateRewards.java b/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/TemplateRewards.java index 0347027f0..b05d853df 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/TemplateRewards.java +++ b/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/TemplateRewards.java @@ -1,7 +1,11 @@ package fr.openmc.core.features.city.sub.milestone.rewards; import fr.openmc.core.features.city.sub.milestone.CityRewards; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.ComponentLike; + +import java.util.Arrays; /** * Cette classe implémente l'interface CityRewards et @@ -9,16 +13,19 @@ */ public class TemplateRewards implements CityRewards { - // Composant de message affiché pour la récompense. - private final Component message; + // Clé de traduction et arguments pour le message de récompense. + private final String messageKey; + private final ComponentLike[] args; /** * Constructeur qui initialise le message de la récompense. * - * @param message le composant message à afficher + * @param messageKey la clé de traduction + * @param args les arguments de traduction */ - public TemplateRewards(Component message) { - this.message = message; + public TemplateRewards(String messageKey, ComponentLike... args) { + this.messageKey = messageKey; + this.args = Arrays.copyOf(args, args.length); } /** @@ -28,6 +35,6 @@ public TemplateRewards(Component message) { */ @Override public Component getName() { - return message; + return TranslationManager.translation(messageKey, args); } } diff --git a/src/main/java/fr/openmc/core/utils/messages/TranslationManager.java b/src/main/java/fr/openmc/core/utils/messages/TranslationManager.java index 9061b6e11..5f2c01bf5 100644 --- a/src/main/java/fr/openmc/core/utils/messages/TranslationManager.java +++ b/src/main/java/fr/openmc/core/utils/messages/TranslationManager.java @@ -10,9 +10,11 @@ import net.kyori.adventure.text.TranslatableComponent; import net.kyori.adventure.text.format.TextDecoration; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; -import net.kyori.adventure.util.UTF8ResourceBundleControl; import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.*; @@ -26,6 +28,55 @@ public class TranslationManager { .create(); private static final LegacyComponentSerializer LEGACY_COMPONENT_SERIALIZER = LegacyComponentSerializer.legacySection(); + private static final ResourceBundle.Control UTF8_NO_FALLBACK_CONTROL = new ResourceBundle.Control() { + @Override + public Locale getFallbackLocale(String baseName, Locale locale) { + return null; // suppression du fallback (en_US, afin d'eviter d'avoir des clés fr écraser) + } + + @Override + public List getFormats(String baseName) { + return ResourceBundle.Control.FORMAT_PROPERTIES; + } + + @Override + public ResourceBundle newBundle( + String baseName, + Locale locale, + String format, + ClassLoader loader, + boolean reload + ) throws IOException { + if (!"java.properties".equals(format)) { + return null; + } + + String bundleName = toBundleName(baseName, locale); + String resourceName = toResourceName(bundleName, "properties"); + + InputStream stream = null; + if (reload) { + var url = loader.getResource(resourceName); + if (url != null) { + var connection = url.openConnection(); + if (connection != null) { + connection.setUseCaches(false); + stream = connection.getInputStream(); + } + } + } else { + stream = loader.getResourceAsStream(resourceName); + } + + if (stream == null) { + return null; + } + + try (InputStreamReader reader = new InputStreamReader(stream, StandardCharsets.UTF_8)) { + return new PropertyResourceBundle(reader); + } + } + }; public static void init(BootstrapContext context, Locale defaultLang, Locale... langsSuppoorted) { // * Generate resource pack @@ -43,7 +94,7 @@ public static void init(BootstrapContext context, Locale defaultLang, Locale... ResourceBundle defaultBundle = ResourceBundle.getBundle( "translations.lang", defaultLang, - UTF8ResourceBundleControl.utf8ResourceBundleControl() + UTF8_NO_FALLBACK_CONTROL ); fallbackTranslations = new HashMap<>(); @@ -60,7 +111,11 @@ public static void init(BootstrapContext context, Locale defaultLang, Locale... // * Load other supported langs for (Locale locale : langsSuppoorted) { - ResourceBundle bundle = ResourceBundle.getBundle("translations.lang", locale, UTF8ResourceBundleControl.utf8ResourceBundleControl()); + ResourceBundle bundle = ResourceBundle.getBundle( + "translations.lang", + locale, + UTF8_NO_FALLBACK_CONTROL + ); Map translations = new HashMap<>(fallbackTranslations); diff --git a/src/main/resources/translations/lang.properties b/src/main/resources/translations/lang.properties index 9478fd610..108c496d1 100644 --- a/src/main/resources/translations/lang.properties +++ b/src/main/resources/translations/lang.properties @@ -1137,3 +1137,49 @@ feature.city.mayor.perk.event.military.golem.name=Défendeur de %1$s feature.city.mayor.admin.changeelection.usage=/adminmayor changeelection cityUUID electionType feature.city.mayor.admin.changeelection.success=Vous venez de mettre : %1$s dans la ville %2$s + +# ** CITY LEVELS ** +feature.city.levels.level_1.name=Niveau 1 +feature.city.levels.level_1.description=Ère urbaine +feature.city.levels.level_2.name=Niveau 2 +feature.city.levels.level_2.description=Les fondations +feature.city.levels.level_3.name=Niveau 3 +feature.city.levels.level_3.description=Ville peu développée +feature.city.levels.level_4.name=Niveau 4 +feature.city.levels.level_4.description=Démocratie +feature.city.levels.level_5.name=Niveau 5 +feature.city.levels.level_5.description=Développement économique +feature.city.levels.level_6.name=Niveau 6 +feature.city.levels.level_6.description=Capitale +feature.city.levels.level_7.name=Niveau 7 +feature.city.levels.level_7.description=Royaume ? +feature.city.levels.level_8.name=Niveau 8 +feature.city.levels.level_8.description=Empire ? +feature.city.levels.level_9.name=Niveau 9 +feature.city.levels.level_9.description=Puissance militaire +feature.city.levels.level_10.name=Niveau 10 +feature.city.levels.level_10.description=Métropole + +feature.city.levels.rewards.free_claims=%1$s claims gratuits + +feature.city.levels.requirements.claims=Avoir %1$s claims +feature.city.levels.requirements.claims.progress=Avoir %1$s claims (%2$s/%1$s) +feature.city.levels.requirements.setwarp=Poser un /city setwarp +feature.city.levels.requirements.bank=Avoir %1$s dans la banque +feature.city.levels.requirements.bank.progress=Avoir %1$s dans la banque (%2$s/%1$s) +feature.city.levels.requirements.members=Avoir %1$s membres +feature.city.levels.requirements.members.progress=Avoir %1$s membres (%2$s/%1$s) +feature.city.levels.requirements.mascot_level=Avoir la mascotte niveau %1$s +feature.city.levels.requirements.notation.receive=Recevoir une notation +feature.city.levels.requirements.ranks=Avoir %1$s grades (/city rank) +feature.city.levels.requirements.ranks.progress=Avoir %1$s grades (%2$s/%1$s) +feature.city.levels.requirements.craft_urne=Craftez une urne +feature.city.levels.requirements.place_urne=Poser l'urne +feature.city.levels.requirements.notation.points=Avoir minimum %1$s points sur une des notations +feature.city.levels.requirements.war.count=Avoir fait %1$s guerres +feature.city.levels.requirements.war.count.progress=Avoir fait %1$s guerres (%2$s/%1$s) +feature.city.levels.requirements.war.win=Gagner une guerre +feature.city.levels.requirements.war.win.count=Gagner %1$s guerres +feature.city.levels.requirements.war.win.count.progress=Gagner %1$s guerres (%2$s/%1$s) +feature.city.levels.requirements.notation.top10=Être dans le top 10 des notations sur une des notations + diff --git a/src/main/resources/translations/lang_en_GB.properties b/src/main/resources/translations/lang_en_GB.properties index a9671de95..d068c5166 100644 --- a/src/main/resources/translations/lang_en_GB.properties +++ b/src/main/resources/translations/lang_en_GB.properties @@ -1,4 +1,122 @@ command.fun.playtime.success=You have %s of playtime. +feature.city.mayor.perk.category.military=Military Reforms +feature.city.mayor.perk.category.strategy=Strategic Reforms +feature.city.mayor.perk.category.agricultural=Agricultural Reforms +feature.city.mayor.perk.category.economic=Economic Reforms +feature.city.mayor.perk.category.onirique=Dream Reforms +feature.city.mayor.perk.none.name=Empty Reform -api.dialoginput.type_string=input english du texte \ No newline at end of file +feature.city.mayor.perk.fou_de_rage.name=Furious Rage +feature.city.mayor.perk.fou_de_rage.lore=In your city: Resistance \ +
Outside your city: Strength + +feature.city.mayor.perk.impot.name=Tax Collection +feature.city.mayor.perk.impot.lore=Collectors take a tax from players \ +
Fixed amount per attack + +feature.city.mayor.perk.miner.name=Dedicated Miner +feature.city.mayor.perk.miner.lore=Grants a mining bonus \ +
Permanent Haste + +feature.city.mayor.perk.demon_fruit.name=Demon Fruit +feature.city.mayor.perk.demon_fruit.lore=Increases interaction range \ +
Blocks and entities + +feature.city.mayor.perk.business_man.name=Businessman +feature.city.mayor.perk.business_man.lore=Increases bank interest \ +
Interest bonus + +feature.city.mayor.perk.iron_man.name=Iron in the Blood +feature.city.mayor.perk.iron_man.lore=A golem defends the mascot when attacked + +feature.city.mayor.perk.city_hunter.name=Urban Hunter +feature.city.mayor.perk.city_hunter.lore=Increases your damage against players and mobs \ +
Bonus outside enemy cities + +feature.city.mayor.perk.ayweniter.name=Aywenite Seeker +feature.city.mayor.perk.ayweniter.lore=Chance to find Aywenite when mining stone + +feature.city.mayor.perk.gps_tracker.name=GPS Tracker +feature.city.mayor.perk.gps_tracker.lore=Intruders are highlighted in your city \ +
Entry alert + +feature.city.mayor.perk.symbiosis.name=Symbiosis +feature.city.mayor.perk.symbiosis.lore=Reduces damage near your mascot \ +
10-block radius + +feature.city.mayor.perk.agricultural_essor.name=Agricultural Boom +feature.city.mayor.perk.agricultural_essor.lore=Doubles crops during the event \ +
Limited duration + +feature.city.mayor.perk.mineral_rush.name=Mineral Rush +feature.city.mayor.perk.mineral_rush.lore=Doubles ores during the event \ +
Bonus on rare ores + +feature.city.mayor.perk.military_dissuasion.name=Military Deterrence +feature.city.mayor.perk.military_dissuasion.lore=Spawns golems in your city \ +
Temporary effect + +feature.city.mayor.perk.idyllic_rain.name=Idyllic Rain +feature.city.mayor.perk.idyllic_rain.lore=Makes Aywenite rain in your city \ +
Members only + +feature.city.mayor.perk.mascots_friendly.name=Companion Mascot +feature.city.mayor.perk.mascots_friendly.lore=Grants mascot level bonuses to members + +feature.city.mayor.perk.great_sleeper.name=Great Sleeper +feature.city.mayor.perk.great_sleeper.lore=Increases chances of entering dreams \ +
High bonus + +feature.city.mayor.perk.great_dream.name=Great Dreamer +feature.city.mayor.perk.great_dream.lore=Increases time spent in dreams \ +
Time bonus + +feature.city.mayor.perk.chaos_dream.name=Chaotic Dream +feature.city.mayor.perk.chaos_dream.lore=Teleports members into the dream \ +
City event + +# ** CITY LEVELS ** +feature.city.levels.level_1.name=Level 1 +feature.city.levels.level_1.description=Urban era +feature.city.levels.level_2.name=Level 2 +feature.city.levels.level_2.description=Foundations +feature.city.levels.level_3.name=Level 3 +feature.city.levels.level_3.description=Small town +feature.city.levels.level_4.name=Level 4 +feature.city.levels.level_4.description=Democracy +feature.city.levels.level_5.name=Level 5 +feature.city.levels.level_5.description=Economic growth +feature.city.levels.level_6.name=Level 6 +feature.city.levels.level_6.description=Capital +feature.city.levels.level_7.name=Level 7 +feature.city.levels.level_7.description=Kingdom? +feature.city.levels.level_8.name=Level 8 +feature.city.levels.level_8.description=Empire? +feature.city.levels.level_9.name=Level 9 +feature.city.levels.level_9.description=Military power +feature.city.levels.level_10.name=Level 10 +feature.city.levels.level_10.description=Metropolis + +feature.city.levels.rewards.free_claims=%1$s free claims + +feature.city.levels.requirements.claims=Have %1$s claims +feature.city.levels.requirements.claims.progress=Have %1$s claims (%2$s/%1$s) +feature.city.levels.requirements.setwarp=Place a /city setwarp +feature.city.levels.requirements.bank=Have %1$s in the bank +feature.city.levels.requirements.bank.progress=Have %1$s in the bank (%2$s/%1$s) +feature.city.levels.requirements.members=Have %1$s members +feature.city.levels.requirements.members.progress=Have %1$s members (%2$s/%1$s) +feature.city.levels.requirements.mascot_level=Have the mascot at level %1$s +feature.city.levels.requirements.notation.receive=Receive a rating +feature.city.levels.requirements.ranks=Have %1$s ranks (/city rank) +feature.city.levels.requirements.ranks.progress=Have %1$s ranks (%2$s/%1$s) +feature.city.levels.requirements.craft_urne=Craft an urn +feature.city.levels.requirements.place_urne=Place the urn +feature.city.levels.requirements.notation.points=Have at least %1$s points in a rating +feature.city.levels.requirements.war.count=Have fought %1$s wars +feature.city.levels.requirements.war.count.progress=Have fought %1$s wars (%2$s/%1$s) +feature.city.levels.requirements.war.win=Win a war +feature.city.levels.requirements.war.win.count=Win %1$s wars +feature.city.levels.requirements.war.win.count.progress=Win %1$s wars (%2$s/%1$s) +feature.city.levels.requirements.notation.top10=Be in the top 10 ratings for any rating diff --git a/src/main/resources/translations/lang_en_US.properties b/src/main/resources/translations/lang_en_US.properties index 3d58bd856..d068c5166 100644 --- a/src/main/resources/translations/lang_en_US.properties +++ b/src/main/resources/translations/lang_en_US.properties @@ -1,3 +1,122 @@ command.fun.playtime.success=You have %s of playtime. +feature.city.mayor.perk.category.military=Military Reforms +feature.city.mayor.perk.category.strategy=Strategic Reforms +feature.city.mayor.perk.category.agricultural=Agricultural Reforms +feature.city.mayor.perk.category.economic=Economic Reforms +feature.city.mayor.perk.category.onirique=Dream Reforms -api.dialoginput.type_string=input english \ No newline at end of file +feature.city.mayor.perk.none.name=Empty Reform + +feature.city.mayor.perk.fou_de_rage.name=Furious Rage +feature.city.mayor.perk.fou_de_rage.lore=In your city: Resistance \ +
Outside your city: Strength + +feature.city.mayor.perk.impot.name=Tax Collection +feature.city.mayor.perk.impot.lore=Collectors take a tax from players \ +
Fixed amount per attack + +feature.city.mayor.perk.miner.name=Dedicated Miner +feature.city.mayor.perk.miner.lore=Grants a mining bonus \ +
Permanent Haste + +feature.city.mayor.perk.demon_fruit.name=Demon Fruit +feature.city.mayor.perk.demon_fruit.lore=Increases interaction range \ +
Blocks and entities + +feature.city.mayor.perk.business_man.name=Businessman +feature.city.mayor.perk.business_man.lore=Increases bank interest \ +
Interest bonus + +feature.city.mayor.perk.iron_man.name=Iron in the Blood +feature.city.mayor.perk.iron_man.lore=A golem defends the mascot when attacked + +feature.city.mayor.perk.city_hunter.name=Urban Hunter +feature.city.mayor.perk.city_hunter.lore=Increases your damage against players and mobs \ +
Bonus outside enemy cities + +feature.city.mayor.perk.ayweniter.name=Aywenite Seeker +feature.city.mayor.perk.ayweniter.lore=Chance to find Aywenite when mining stone + +feature.city.mayor.perk.gps_tracker.name=GPS Tracker +feature.city.mayor.perk.gps_tracker.lore=Intruders are highlighted in your city \ +
Entry alert + +feature.city.mayor.perk.symbiosis.name=Symbiosis +feature.city.mayor.perk.symbiosis.lore=Reduces damage near your mascot \ +
10-block radius + +feature.city.mayor.perk.agricultural_essor.name=Agricultural Boom +feature.city.mayor.perk.agricultural_essor.lore=Doubles crops during the event \ +
Limited duration + +feature.city.mayor.perk.mineral_rush.name=Mineral Rush +feature.city.mayor.perk.mineral_rush.lore=Doubles ores during the event \ +
Bonus on rare ores + +feature.city.mayor.perk.military_dissuasion.name=Military Deterrence +feature.city.mayor.perk.military_dissuasion.lore=Spawns golems in your city \ +
Temporary effect + +feature.city.mayor.perk.idyllic_rain.name=Idyllic Rain +feature.city.mayor.perk.idyllic_rain.lore=Makes Aywenite rain in your city \ +
Members only + +feature.city.mayor.perk.mascots_friendly.name=Companion Mascot +feature.city.mayor.perk.mascots_friendly.lore=Grants mascot level bonuses to members + +feature.city.mayor.perk.great_sleeper.name=Great Sleeper +feature.city.mayor.perk.great_sleeper.lore=Increases chances of entering dreams \ +
High bonus + +feature.city.mayor.perk.great_dream.name=Great Dreamer +feature.city.mayor.perk.great_dream.lore=Increases time spent in dreams \ +
Time bonus + +feature.city.mayor.perk.chaos_dream.name=Chaotic Dream +feature.city.mayor.perk.chaos_dream.lore=Teleports members into the dream \ +
City event + +# ** CITY LEVELS ** +feature.city.levels.level_1.name=Level 1 +feature.city.levels.level_1.description=Urban era +feature.city.levels.level_2.name=Level 2 +feature.city.levels.level_2.description=Foundations +feature.city.levels.level_3.name=Level 3 +feature.city.levels.level_3.description=Small town +feature.city.levels.level_4.name=Level 4 +feature.city.levels.level_4.description=Democracy +feature.city.levels.level_5.name=Level 5 +feature.city.levels.level_5.description=Economic growth +feature.city.levels.level_6.name=Level 6 +feature.city.levels.level_6.description=Capital +feature.city.levels.level_7.name=Level 7 +feature.city.levels.level_7.description=Kingdom? +feature.city.levels.level_8.name=Level 8 +feature.city.levels.level_8.description=Empire? +feature.city.levels.level_9.name=Level 9 +feature.city.levels.level_9.description=Military power +feature.city.levels.level_10.name=Level 10 +feature.city.levels.level_10.description=Metropolis + +feature.city.levels.rewards.free_claims=%1$s free claims + +feature.city.levels.requirements.claims=Have %1$s claims +feature.city.levels.requirements.claims.progress=Have %1$s claims (%2$s/%1$s) +feature.city.levels.requirements.setwarp=Place a /city setwarp +feature.city.levels.requirements.bank=Have %1$s in the bank +feature.city.levels.requirements.bank.progress=Have %1$s in the bank (%2$s/%1$s) +feature.city.levels.requirements.members=Have %1$s members +feature.city.levels.requirements.members.progress=Have %1$s members (%2$s/%1$s) +feature.city.levels.requirements.mascot_level=Have the mascot at level %1$s +feature.city.levels.requirements.notation.receive=Receive a rating +feature.city.levels.requirements.ranks=Have %1$s ranks (/city rank) +feature.city.levels.requirements.ranks.progress=Have %1$s ranks (%2$s/%1$s) +feature.city.levels.requirements.craft_urne=Craft an urn +feature.city.levels.requirements.place_urne=Place the urn +feature.city.levels.requirements.notation.points=Have at least %1$s points in a rating +feature.city.levels.requirements.war.count=Have fought %1$s wars +feature.city.levels.requirements.war.count.progress=Have fought %1$s wars (%2$s/%1$s) +feature.city.levels.requirements.war.win=Win a war +feature.city.levels.requirements.war.win.count=Win %1$s wars +feature.city.levels.requirements.war.win.count.progress=Win %1$s wars (%2$s/%1$s) +feature.city.levels.requirements.notation.top10=Be in the top 10 ratings for any rating From 37fd90e02797482b342d2f2318aacd267e8adea9 Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Fri, 27 Mar 2026 19:07:41 +0100 Subject: [PATCH 11/20] remove (english translation) --- .../translations/lang_en_GB.properties | 120 ------------------ .../translations/lang_en_US.properties | 120 ------------------ 2 files changed, 240 deletions(-) diff --git a/src/main/resources/translations/lang_en_GB.properties b/src/main/resources/translations/lang_en_GB.properties index d068c5166..9c99899e7 100644 --- a/src/main/resources/translations/lang_en_GB.properties +++ b/src/main/resources/translations/lang_en_GB.properties @@ -1,122 +1,2 @@ command.fun.playtime.success=You have %s of playtime. -feature.city.mayor.perk.category.military=Military Reforms -feature.city.mayor.perk.category.strategy=Strategic Reforms -feature.city.mayor.perk.category.agricultural=Agricultural Reforms -feature.city.mayor.perk.category.economic=Economic Reforms -feature.city.mayor.perk.category.onirique=Dream Reforms -feature.city.mayor.perk.none.name=Empty Reform - -feature.city.mayor.perk.fou_de_rage.name=Furious Rage -feature.city.mayor.perk.fou_de_rage.lore=In your city: Resistance \ -
Outside your city: Strength - -feature.city.mayor.perk.impot.name=Tax Collection -feature.city.mayor.perk.impot.lore=Collectors take a tax from players \ -
Fixed amount per attack - -feature.city.mayor.perk.miner.name=Dedicated Miner -feature.city.mayor.perk.miner.lore=Grants a mining bonus \ -
Permanent Haste - -feature.city.mayor.perk.demon_fruit.name=Demon Fruit -feature.city.mayor.perk.demon_fruit.lore=Increases interaction range \ -
Blocks and entities - -feature.city.mayor.perk.business_man.name=Businessman -feature.city.mayor.perk.business_man.lore=Increases bank interest \ -
Interest bonus - -feature.city.mayor.perk.iron_man.name=Iron in the Blood -feature.city.mayor.perk.iron_man.lore=A golem defends the mascot when attacked - -feature.city.mayor.perk.city_hunter.name=Urban Hunter -feature.city.mayor.perk.city_hunter.lore=Increases your damage against players and mobs \ -
Bonus outside enemy cities - -feature.city.mayor.perk.ayweniter.name=Aywenite Seeker -feature.city.mayor.perk.ayweniter.lore=Chance to find Aywenite when mining stone - -feature.city.mayor.perk.gps_tracker.name=GPS Tracker -feature.city.mayor.perk.gps_tracker.lore=Intruders are highlighted in your city \ -
Entry alert - -feature.city.mayor.perk.symbiosis.name=Symbiosis -feature.city.mayor.perk.symbiosis.lore=Reduces damage near your mascot \ -
10-block radius - -feature.city.mayor.perk.agricultural_essor.name=Agricultural Boom -feature.city.mayor.perk.agricultural_essor.lore=Doubles crops during the event \ -
Limited duration - -feature.city.mayor.perk.mineral_rush.name=Mineral Rush -feature.city.mayor.perk.mineral_rush.lore=Doubles ores during the event \ -
Bonus on rare ores - -feature.city.mayor.perk.military_dissuasion.name=Military Deterrence -feature.city.mayor.perk.military_dissuasion.lore=Spawns golems in your city \ -
Temporary effect - -feature.city.mayor.perk.idyllic_rain.name=Idyllic Rain -feature.city.mayor.perk.idyllic_rain.lore=Makes Aywenite rain in your city \ -
Members only - -feature.city.mayor.perk.mascots_friendly.name=Companion Mascot -feature.city.mayor.perk.mascots_friendly.lore=Grants mascot level bonuses to members - -feature.city.mayor.perk.great_sleeper.name=Great Sleeper -feature.city.mayor.perk.great_sleeper.lore=Increases chances of entering dreams \ -
High bonus - -feature.city.mayor.perk.great_dream.name=Great Dreamer -feature.city.mayor.perk.great_dream.lore=Increases time spent in dreams \ -
Time bonus - -feature.city.mayor.perk.chaos_dream.name=Chaotic Dream -feature.city.mayor.perk.chaos_dream.lore=Teleports members into the dream \ -
City event - -# ** CITY LEVELS ** -feature.city.levels.level_1.name=Level 1 -feature.city.levels.level_1.description=Urban era -feature.city.levels.level_2.name=Level 2 -feature.city.levels.level_2.description=Foundations -feature.city.levels.level_3.name=Level 3 -feature.city.levels.level_3.description=Small town -feature.city.levels.level_4.name=Level 4 -feature.city.levels.level_4.description=Democracy -feature.city.levels.level_5.name=Level 5 -feature.city.levels.level_5.description=Economic growth -feature.city.levels.level_6.name=Level 6 -feature.city.levels.level_6.description=Capital -feature.city.levels.level_7.name=Level 7 -feature.city.levels.level_7.description=Kingdom? -feature.city.levels.level_8.name=Level 8 -feature.city.levels.level_8.description=Empire? -feature.city.levels.level_9.name=Level 9 -feature.city.levels.level_9.description=Military power -feature.city.levels.level_10.name=Level 10 -feature.city.levels.level_10.description=Metropolis - -feature.city.levels.rewards.free_claims=%1$s free claims - -feature.city.levels.requirements.claims=Have %1$s claims -feature.city.levels.requirements.claims.progress=Have %1$s claims (%2$s/%1$s) -feature.city.levels.requirements.setwarp=Place a /city setwarp -feature.city.levels.requirements.bank=Have %1$s in the bank -feature.city.levels.requirements.bank.progress=Have %1$s in the bank (%2$s/%1$s) -feature.city.levels.requirements.members=Have %1$s members -feature.city.levels.requirements.members.progress=Have %1$s members (%2$s/%1$s) -feature.city.levels.requirements.mascot_level=Have the mascot at level %1$s -feature.city.levels.requirements.notation.receive=Receive a rating -feature.city.levels.requirements.ranks=Have %1$s ranks (/city rank) -feature.city.levels.requirements.ranks.progress=Have %1$s ranks (%2$s/%1$s) -feature.city.levels.requirements.craft_urne=Craft an urn -feature.city.levels.requirements.place_urne=Place the urn -feature.city.levels.requirements.notation.points=Have at least %1$s points in a rating -feature.city.levels.requirements.war.count=Have fought %1$s wars -feature.city.levels.requirements.war.count.progress=Have fought %1$s wars (%2$s/%1$s) -feature.city.levels.requirements.war.win=Win a war -feature.city.levels.requirements.war.win.count=Win %1$s wars -feature.city.levels.requirements.war.win.count.progress=Win %1$s wars (%2$s/%1$s) -feature.city.levels.requirements.notation.top10=Be in the top 10 ratings for any rating diff --git a/src/main/resources/translations/lang_en_US.properties b/src/main/resources/translations/lang_en_US.properties index d068c5166..9c99899e7 100644 --- a/src/main/resources/translations/lang_en_US.properties +++ b/src/main/resources/translations/lang_en_US.properties @@ -1,122 +1,2 @@ command.fun.playtime.success=You have %s of playtime. -feature.city.mayor.perk.category.military=Military Reforms -feature.city.mayor.perk.category.strategy=Strategic Reforms -feature.city.mayor.perk.category.agricultural=Agricultural Reforms -feature.city.mayor.perk.category.economic=Economic Reforms -feature.city.mayor.perk.category.onirique=Dream Reforms -feature.city.mayor.perk.none.name=Empty Reform - -feature.city.mayor.perk.fou_de_rage.name=Furious Rage -feature.city.mayor.perk.fou_de_rage.lore=In your city: Resistance \ -
Outside your city: Strength - -feature.city.mayor.perk.impot.name=Tax Collection -feature.city.mayor.perk.impot.lore=Collectors take a tax from players \ -
Fixed amount per attack - -feature.city.mayor.perk.miner.name=Dedicated Miner -feature.city.mayor.perk.miner.lore=Grants a mining bonus \ -
Permanent Haste - -feature.city.mayor.perk.demon_fruit.name=Demon Fruit -feature.city.mayor.perk.demon_fruit.lore=Increases interaction range \ -
Blocks and entities - -feature.city.mayor.perk.business_man.name=Businessman -feature.city.mayor.perk.business_man.lore=Increases bank interest \ -
Interest bonus - -feature.city.mayor.perk.iron_man.name=Iron in the Blood -feature.city.mayor.perk.iron_man.lore=A golem defends the mascot when attacked - -feature.city.mayor.perk.city_hunter.name=Urban Hunter -feature.city.mayor.perk.city_hunter.lore=Increases your damage against players and mobs \ -
Bonus outside enemy cities - -feature.city.mayor.perk.ayweniter.name=Aywenite Seeker -feature.city.mayor.perk.ayweniter.lore=Chance to find Aywenite when mining stone - -feature.city.mayor.perk.gps_tracker.name=GPS Tracker -feature.city.mayor.perk.gps_tracker.lore=Intruders are highlighted in your city \ -
Entry alert - -feature.city.mayor.perk.symbiosis.name=Symbiosis -feature.city.mayor.perk.symbiosis.lore=Reduces damage near your mascot \ -
10-block radius - -feature.city.mayor.perk.agricultural_essor.name=Agricultural Boom -feature.city.mayor.perk.agricultural_essor.lore=Doubles crops during the event \ -
Limited duration - -feature.city.mayor.perk.mineral_rush.name=Mineral Rush -feature.city.mayor.perk.mineral_rush.lore=Doubles ores during the event \ -
Bonus on rare ores - -feature.city.mayor.perk.military_dissuasion.name=Military Deterrence -feature.city.mayor.perk.military_dissuasion.lore=Spawns golems in your city \ -
Temporary effect - -feature.city.mayor.perk.idyllic_rain.name=Idyllic Rain -feature.city.mayor.perk.idyllic_rain.lore=Makes Aywenite rain in your city \ -
Members only - -feature.city.mayor.perk.mascots_friendly.name=Companion Mascot -feature.city.mayor.perk.mascots_friendly.lore=Grants mascot level bonuses to members - -feature.city.mayor.perk.great_sleeper.name=Great Sleeper -feature.city.mayor.perk.great_sleeper.lore=Increases chances of entering dreams \ -
High bonus - -feature.city.mayor.perk.great_dream.name=Great Dreamer -feature.city.mayor.perk.great_dream.lore=Increases time spent in dreams \ -
Time bonus - -feature.city.mayor.perk.chaos_dream.name=Chaotic Dream -feature.city.mayor.perk.chaos_dream.lore=Teleports members into the dream \ -
City event - -# ** CITY LEVELS ** -feature.city.levels.level_1.name=Level 1 -feature.city.levels.level_1.description=Urban era -feature.city.levels.level_2.name=Level 2 -feature.city.levels.level_2.description=Foundations -feature.city.levels.level_3.name=Level 3 -feature.city.levels.level_3.description=Small town -feature.city.levels.level_4.name=Level 4 -feature.city.levels.level_4.description=Democracy -feature.city.levels.level_5.name=Level 5 -feature.city.levels.level_5.description=Economic growth -feature.city.levels.level_6.name=Level 6 -feature.city.levels.level_6.description=Capital -feature.city.levels.level_7.name=Level 7 -feature.city.levels.level_7.description=Kingdom? -feature.city.levels.level_8.name=Level 8 -feature.city.levels.level_8.description=Empire? -feature.city.levels.level_9.name=Level 9 -feature.city.levels.level_9.description=Military power -feature.city.levels.level_10.name=Level 10 -feature.city.levels.level_10.description=Metropolis - -feature.city.levels.rewards.free_claims=%1$s free claims - -feature.city.levels.requirements.claims=Have %1$s claims -feature.city.levels.requirements.claims.progress=Have %1$s claims (%2$s/%1$s) -feature.city.levels.requirements.setwarp=Place a /city setwarp -feature.city.levels.requirements.bank=Have %1$s in the bank -feature.city.levels.requirements.bank.progress=Have %1$s in the bank (%2$s/%1$s) -feature.city.levels.requirements.members=Have %1$s members -feature.city.levels.requirements.members.progress=Have %1$s members (%2$s/%1$s) -feature.city.levels.requirements.mascot_level=Have the mascot at level %1$s -feature.city.levels.requirements.notation.receive=Receive a rating -feature.city.levels.requirements.ranks=Have %1$s ranks (/city rank) -feature.city.levels.requirements.ranks.progress=Have %1$s ranks (%2$s/%1$s) -feature.city.levels.requirements.craft_urne=Craft an urn -feature.city.levels.requirements.place_urne=Place the urn -feature.city.levels.requirements.notation.points=Have at least %1$s points in a rating -feature.city.levels.requirements.war.count=Have fought %1$s wars -feature.city.levels.requirements.war.count.progress=Have fought %1$s wars (%2$s/%1$s) -feature.city.levels.requirements.war.win=Win a war -feature.city.levels.requirements.war.win.count=Win %1$s wars -feature.city.levels.requirements.war.win.count.progress=Win %1$s wars (%2$s/%1$s) -feature.city.levels.requirements.notation.top10=Be in the top 10 ratings for any rating From 2eeedafc1c11b378a7521cf99985498650a3839f Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Fri, 27 Mar 2026 21:40:53 +0100 Subject: [PATCH 12/20] translation for sub.milestones package --- .../city/sub/milestone/CityLevels.java | 3 +- .../commands/AdminCityMilestoneCommands.java | 12 ++- .../listeners/CooldownEndListener.java | 12 ++- .../sub/milestone/menu/CityMilestoneMenu.java | 47 +++++++---- .../milestone/menu/LevelMilestoneMenu.java | 24 +++--- .../requirements/CommandRequirement.java | 23 +++--- .../requirements/ItemDepositRequirement.java | 37 +++++---- .../rewards/ChestPageLimitRewards.java | 7 +- .../milestone/rewards/FeaturesRewards.java | 80 +++++++++++-------- .../milestone/rewards/InterestRewards.java | 7 +- .../rewards/MascotsLevelsRewards.java | 7 +- .../rewards/MascotsSkinUnlockRewards.java | 34 ++++++-- .../milestone/rewards/MemberLimitRewards.java | 7 +- .../rewards/PlayerBankLimitRewards.java | 9 ++- .../milestone/rewards/RankLimitRewards.java | 7 +- .../resources/translations/lang.properties | 51 +++++++++++- 16 files changed, 262 insertions(+), 105 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/city/sub/milestone/CityLevels.java b/src/main/java/fr/openmc/core/features/city/sub/milestone/CityLevels.java index d4b0e1278..d3ff1bb90 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/milestone/CityLevels.java +++ b/src/main/java/fr/openmc/core/features/city/sub/milestone/CityLevels.java @@ -17,6 +17,7 @@ import fr.openmc.core.utils.messages.TranslationManager; import lombok.Getter; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.CraftItemEvent; @@ -38,7 +39,7 @@ public enum CityLevels { List.of( new TemplateRewards( "feature.city.levels.rewards.free_claims", - Component.text(FREE_CLAIMS) + Component.text(FREE_CLAIMS).color(NamedTextColor.GOLD) ), MascotsSkinUnlockRewards.LEVEL_1, MascotsLevelsRewards.LEVEL_1, diff --git a/src/main/java/fr/openmc/core/features/city/sub/milestone/commands/AdminCityMilestoneCommands.java b/src/main/java/fr/openmc/core/features/city/sub/milestone/commands/AdminCityMilestoneCommands.java index 457751af4..29da7515d 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/milestone/commands/AdminCityMilestoneCommands.java +++ b/src/main/java/fr/openmc/core/features/city/sub/milestone/commands/AdminCityMilestoneCommands.java @@ -7,6 +7,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import org.bukkit.entity.Player; import revxrsal.commands.annotation.*; @@ -23,11 +24,11 @@ void adminSkinUpgrade( City city = CityManager.getCityByName(cityName); if (city == null) { - MessagesManager.sendMessage(sender, Component.text("§cVille inexistante"), Prefix.STAFF, MessageType.ERROR, false); + MessagesManager.sendMessage(sender, TranslationManager.translation("messages.city.not_found"), Prefix.STAFF, MessageType.ERROR, false); return; } - MessagesManager.sendMessage(sender, Component.text("Upgrade du level skip"), Prefix.STAFF, MessageType.SUCCESS, false); + MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.levels.admin.skip_upgrade.success"), Prefix.STAFF, MessageType.SUCCESS, false); DynamicCooldownManager.clear(city.getUniqueId(), "city:upgrade-level", true); } @@ -42,12 +43,15 @@ void setLevel( City city = CityManager.getCityByName(name); if (city == null) { - MessagesManager.sendMessage(sender, Component.text("§cVille inexistante"), Prefix.STAFF, MessageType.ERROR, false); + MessagesManager.sendMessage(sender, TranslationManager.translation("messages.city.not_found"), Prefix.STAFF, MessageType.ERROR, false); return; } city.setLevel(level); - MessagesManager.sendMessage(sender, Component.text("Level " + level + " mis sur la ville"), Prefix.STAFF, MessageType.SUCCESS, false); + MessagesManager.sendMessage(sender, TranslationManager.translation( + "feature.city.levels.admin.set_level.success", + Component.text(level) + ), Prefix.STAFF, MessageType.SUCCESS, false); } } diff --git a/src/main/java/fr/openmc/core/features/city/sub/milestone/listeners/CooldownEndListener.java b/src/main/java/fr/openmc/core/features/city/sub/milestone/listeners/CooldownEndListener.java index 912502cfb..367c6f284 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/milestone/listeners/CooldownEndListener.java +++ b/src/main/java/fr/openmc/core/features/city/sub/milestone/listeners/CooldownEndListener.java @@ -12,7 +12,9 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -41,7 +43,15 @@ public void onUpgradeEnd(CooldownEndEvent event) { city.setLevel(oldLevel + 1); - MessagesManager.broadcastMessage(Component.text("La ville §d" + city.getName() + " §fest passée au §3Niveau " + city.getLevel() + " §f! Un maximum de GG !"), Prefix.CITY, MessageType.INFO); + MessagesManager.broadcastMessage( + TranslationManager.translation( + "feature.city.levels.upgrade.broadcast", + Component.text(city.getName()).color(NamedTextColor.LIGHT_PURPLE), + Component.text(city.getLevel()).color(NamedTextColor.DARK_AQUA) + ), + Prefix.CITY, + MessageType.INFO + ); CityStatisticsManager.removeStats(city.getUniqueId()); diff --git a/src/main/java/fr/openmc/core/features/city/sub/milestone/menu/CityMilestoneMenu.java b/src/main/java/fr/openmc/core/features/city/sub/milestone/menu/CityMilestoneMenu.java index fda18ba54..3650aaa9f 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/milestone/menu/CityMilestoneMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/milestone/menu/CityMilestoneMenu.java @@ -11,6 +11,7 @@ import fr.openmc.core.features.city.sub.milestone.CityRequirement; import fr.openmc.core.features.city.sub.milestone.CityRewards; import fr.openmc.core.utils.DateUtils; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; @@ -37,7 +38,7 @@ public CityMilestoneMenu(Player owner, City city) { @Override public @NotNull Component getName() { - return Component.text("Menu des Villes - Levels"); + return TranslationManager.translation("feature.city.levels.menu.title"); } @Override @@ -115,10 +116,12 @@ public void onInventoryClick(InventoryClickEvent click) { } } - inventory.put(45, new ItemBuilder(this, Material.ARROW, itemMeta -> itemMeta.itemName(Component.text("§aRetour")), true)); + inventory.put(45, new ItemBuilder(this, Material.ARROW, itemMeta -> itemMeta.itemName( + TranslationManager.translation("messages.menus.back") + ), true)); inventory.put(49, new ItemBuilder(this, Material.BARRIER, meta -> - meta.displayName(Component.text("§cFermer"))).setCloseButton()); + meta.displayName(TranslationManager.translation("messages.menus.close"))).setCloseButton()); return inventory; } @@ -159,17 +162,25 @@ public static ItemBuilder getGenerateItemLevel(Menu menu, CityLevels level, City List lore = new ArrayList<>(); lore.add(level.getDescription().color(NamedTextColor.DARK_GRAY).decorate(TextDecoration.ITALIC)); lore.add(Component.empty()); - lore.add(Component.text("§3§lRequis :")); + lore.add(TranslationManager.translation("feature.city.levels.menu.requirements.header")); for (CityRequirement requirement : level.getRequirements()) { - lore.add(Component.text((city.getLevel() < level.ordinal() ? "§l¤ " : requirement.isDone(city, level) ? "§l✔ " : "§l✖ ")) - .append(requirement.getName(city, level)) + Component prefix; + if (city.getLevel() < level.ordinal()) { + prefix = Component.text("¤ "); + } else if (requirement.isDone(city, level)) { + prefix = Component.text("✔ "); + } else { + prefix = Component.text("✖ "); + } + + lore.add(prefix.append(requirement.getName(city, level)) .color(city.getLevel() < level.ordinal() ? NamedTextColor.DARK_GRAY : requirement.isDone(city, level) ? NamedTextColor.GREEN : NamedTextColor.RED) .decoration(TextDecoration.ITALIC, false)); } lore.add(Component.empty()); - lore.add(Component.text("§6§lRécompenses :")); + lore.add(TranslationManager.translation("feature.city.levels.menu.rewards.header")); for (CityRewards reward : level.getRewards()) { lore.add(Component.text(" ").append(reward.getName()).decoration(TextDecoration.ITALIC, false)); @@ -177,24 +188,28 @@ public static ItemBuilder getGenerateItemLevel(Menu menu, CityLevels level, City lore.add(Component.empty()); if (completed) { - lore.add(Component.text("§a§lDÉBLOQUÉ")); + lore.add(TranslationManager.translation("feature.city.levels.menu.status.unlocked")); } else { lore.add(Component.empty()); if (DynamicCooldownManager.getRemaining(city.getUniqueId(), "city:upgrade-level") != 0 && city.getLevel() + 1 == level.ordinal() + 1) { - lore.add(Component.text("§fIl reste §3" + - DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(city.getUniqueId(), "city:upgrade-level")) + - " §fde déblocage")); + lore.addAll(TranslationManager.translationLore( + "feature.city.levels.menu.unlock.remaining", + Component.text(DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(city.getUniqueId(), "city:upgrade-level"))) + .color(NamedTextColor.DARK_AQUA) + )); } else { - lore.add(Component.text("§3" + - DateUtils.convertSecondToTime(level.getUpgradeTime()) + - " §fde déblocage")); + lore.addAll(TranslationManager.translationLore( + "feature.city.levels.menu.unlock.duration", + Component.text(DateUtils.convertSecondToTime(level.getUpgradeTime())) + .color(NamedTextColor.DARK_AQUA) + )); } } if (active && DynamicCooldownManager.isReady(city.getUniqueId(), "city:upgrade-level") && level.isCompleted(city)) { - lore.add(Component.text("§e§lCLIQUEZ ICI POUR LANCER l'AMÉLIORATION")); + lore.add(TranslationManager.translation("feature.city.levels.menu.click.start_upgrade")); } else if (active && DynamicCooldownManager.getRemaining(city.getUniqueId(), "city:upgrade-level") == 0) { - lore.add(Component.text("§e§lCLIQUEZ ICI POUR CONTRIBUER")); + lore.add(TranslationManager.translation("feature.city.levels.menu.click.contribute")); } itemBuilder.lore(lore); diff --git a/src/main/java/fr/openmc/core/features/city/sub/milestone/menu/LevelMilestoneMenu.java b/src/main/java/fr/openmc/core/features/city/sub/milestone/menu/LevelMilestoneMenu.java index a40c95acd..074b8ea0f 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/milestone/menu/LevelMilestoneMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/milestone/menu/LevelMilestoneMenu.java @@ -9,6 +9,7 @@ import fr.openmc.core.features.city.sub.milestone.CityRewards; import fr.openmc.core.features.city.sub.milestone.requirements.ItemDepositRequirement; import fr.openmc.core.registry.items.CustomItemRegistry; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; @@ -39,7 +40,7 @@ public LevelMilestoneMenu(Player owner, City city, CityLevels level) { @Override public @NotNull Component getName() { - return Component.text("Menu des Villes - Levels"); + return TranslationManager.translation("feature.city.levels.menu.title"); } @Override @@ -83,13 +84,16 @@ public List getItems() { List loreRequirement = new ArrayList<>(); if (requirement instanceof ItemDepositRequirement && !requirement.isDone(city, level)) { - loreRequirement.add(Component.text("§e§lCLIQUE POUR DÉPOSER UN")); - loreRequirement.add(Component.text("§e§lSHIFT-CLIQUE POUR TOUT DÉPOSER")); + loreRequirement.add(TranslationManager.translation("feature.city.levels.menu.deposit.click_one")); + loreRequirement.add(TranslationManager.translation("feature.city.levels.menu.deposit.click_all")); } items.add(new ItemBuilder(this, requirement.getIcon(city), meta -> { - meta.displayName(Component.text((requirement.isDone(city, level) ? "§l✔ " : "§l✖ ")) - .append(requirement.getName(city, level)).color(requirement.isDone(city, level) ? NamedTextColor.GREEN : NamedTextColor.RED).decoration(TextDecoration.ITALIC, false)); + Component prefix = Component.text(requirement.isDone(city, level) ? "✔ " : "✖ ") + .decorate(TextDecoration.BOLD); + meta.displayName(prefix.append(requirement.getName(city, level)) + .color(requirement.isDone(city, level) ? NamedTextColor.GREEN : NamedTextColor.RED) + .decoration(TextDecoration.ITALIC, false)); meta.lore(loreRequirement); meta.setEnchantmentGlintOverride(requirement.isDone(city, level)); }).setOnClick(inventoryClickEvent -> { @@ -118,21 +122,21 @@ public Map getButtons() { } buttons.put(31, new ItemBuilder(this, Material.GOLD_BLOCK, itemMeta -> { - itemMeta.itemName(Component.text("§6Récompenses")); + itemMeta.itemName(TranslationManager.translation("feature.city.levels.menu.rewards.item")); itemMeta.lore(loreRewards); })); buttons.put(45, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.itemName(Component.text("§aRetour")); + itemMeta.itemName(TranslationManager.translation("messages.menus.back")); }, true)); buttons.put(49, new ItemBuilder(this, Material.BARRIER, meta -> - meta.displayName(Component.text("§cFermer"))).setCloseButton()); + meta.displayName(TranslationManager.translation("messages.menus.close"))).setCloseButton()); buttons.put(48, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_back_orange").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§cPage précédente")); + itemMeta.displayName(TranslationManager.translation("messages.menus.previous_page")); }).setPreviousPageButton()); buttons.put(50, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_next_orange").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§aPage suivante")); + itemMeta.displayName(TranslationManager.translation("messages.menus.next_page")); }).setNextPageButton()); return buttons; diff --git a/src/main/java/fr/openmc/core/features/city/sub/milestone/requirements/CommandRequirement.java b/src/main/java/fr/openmc/core/features/city/sub/milestone/requirements/CommandRequirement.java index be0ba16b9..3de7838e6 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/milestone/requirements/CommandRequirement.java +++ b/src/main/java/fr/openmc/core/features/city/sub/milestone/requirements/CommandRequirement.java @@ -5,6 +5,7 @@ import fr.openmc.core.features.city.sub.milestone.CityLevels; import fr.openmc.core.features.city.sub.milestone.EventCityRequirement; import fr.openmc.core.features.city.sub.statistics.CityStatisticsManager; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -86,19 +87,21 @@ public ItemStack getIcon(City city) { @Override public Component getName(City city, CityLevels level) { if (city.getLevel() != level.ordinal()) { - return Component.text(String.format( - "Exécuter %d fois %s", - amountRequired, command - )); + return TranslationManager.translation( + "feature.city.levels.requirements.command", + Component.text(amountRequired), + Component.text(command) + ); } - return Component.text(String.format( - "Exécuter %d fois %s (%d/%d)", - amountRequired, command, - Objects.requireNonNull( + return TranslationManager.translation( + "feature.city.levels.requirements.command.progress", + Component.text(amountRequired), + Component.text(command), + Component.text(Objects.requireNonNull( CityStatisticsManager.getOrCreateStat(city.getUniqueId(), getScope()) - ).asInt(), amountRequired - )); + ).asInt()) + ); } /** diff --git a/src/main/java/fr/openmc/core/features/city/sub/milestone/requirements/ItemDepositRequirement.java b/src/main/java/fr/openmc/core/features/city/sub/milestone/requirements/ItemDepositRequirement.java index 4e1f8c545..14e1f20df 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/milestone/requirements/ItemDepositRequirement.java +++ b/src/main/java/fr/openmc/core/features/city/sub/milestone/requirements/ItemDepositRequirement.java @@ -9,6 +9,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; @@ -101,22 +102,21 @@ public ItemStack getIcon(City city) { @Override public Component getName(City city, CityLevels level) { if (city.getLevel() != level.ordinal()) { - return Component.text(String.format( - "Déposer %d %s", - amountRequired, - ItemUtils.getItemName(itemType) - )); + return TranslationManager.translation( + "feature.city.levels.requirements.deposit", + Component.text(amountRequired), + Component.text(ItemUtils.getItemName(itemType)) + ); } - return Component.text(String.format( - "Déposer %d %s (%d/%d)", - amountRequired, - ItemUtils.getItemName(itemType), - Objects.requireNonNull( + return TranslationManager.translation( + "feature.city.levels.requirements.deposit.progress", + Component.text(amountRequired), + Component.text(ItemUtils.getItemName(itemType)), + Component.text(Objects.requireNonNull( CityStatisticsManager.getOrCreateStat(city.getUniqueId(), getScope()) - ).asInt(), - amountRequired - )); + ).asInt()) + ); } /** @@ -126,7 +126,7 @@ public Component getName(City city, CityLevels level) { */ @Override public Component getDescription() { - return Component.text("§e§lCLIQUEZ ICI POUR DEPOSER"); + return TranslationManager.translation("feature.city.levels.requirements.deposit.description"); } /** @@ -152,10 +152,13 @@ public void runAction(Menu menu, City city, InventoryClickEvent e) { if (removed > 0) { MessagesManager.sendMessage(player, - Component.text("Vous avez déposé §3" + (toRemove == 1 ? "un" : toRemove) + " ") - .append(Component.text(ItemUtils.getItemName(itemType)) + TranslationManager.translation( + "feature.city.levels.requirements.deposit.success", + Component.text(removed), + Component.text(ItemUtils.getItemName(itemType)) .color(NamedTextColor.DARK_AQUA) - .decoration(TextDecoration.ITALIC, false)), + .decoration(TextDecoration.ITALIC, false) + ), Prefix.CITY, MessageType.SUCCESS, false); CityStatisticsManager.increment(city.getUniqueId(), getScope(), removed); menu.open(); diff --git a/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/ChestPageLimitRewards.java b/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/ChestPageLimitRewards.java index c89421719..0cd83f724 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/ChestPageLimitRewards.java +++ b/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/ChestPageLimitRewards.java @@ -1,8 +1,10 @@ package fr.openmc.core.features.city.sub.milestone.rewards; import fr.openmc.core.features.city.sub.milestone.CityRewards; +import fr.openmc.core.utils.messages.TranslationManager; import lombok.Getter; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; /** * Enumération représentant les récompenses de limite de pages de coffre pour une ville. @@ -73,6 +75,9 @@ public static int getChestPageLimit(int level) { */ @Override public Component getName() { - return Component.text("§a" + chestPageLimit + " pages de coffre §7maximum"); + return TranslationManager.translation( + "feature.city.levels.rewards.chest_page_limit", + Component.text(chestPageLimit).color(NamedTextColor.GREEN) + ).color(NamedTextColor.GRAY); } } diff --git a/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/FeaturesRewards.java b/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/FeaturesRewards.java index 11ecfeabf..53fceab84 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/FeaturesRewards.java +++ b/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/FeaturesRewards.java @@ -2,6 +2,7 @@ import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.sub.milestone.CityRewards; +import fr.openmc.core.utils.messages.TranslationManager; import lombok.Getter; import net.kyori.adventure.text.Component; @@ -88,19 +89,34 @@ public static int getFeatureUnlockLevel(Feature feature) { @Override public Component getName() { if (features == null || features.length == 0) { - return Component.text("Aucun"); + return TranslationManager.translation("feature.city.levels.rewards.none"); } if (features.length == 1) { - return Component.text("§7Débloque " + features[0].getName()); + return TranslationManager.translation( + "feature.city.levels.rewards.unlock", + features[0].getName() + ); } - StringBuilder sb = new StringBuilder("§7Débloque "); - for (int i = 0; i < features.length; i++) { - sb.append(features[i].getName()); - if (i < features.length - 2) sb.append("§7, "); - else if (i == features.length - 2) sb.append(" §7et "); + return TranslationManager.translation( + "feature.city.levels.rewards.unlock", + buildFeatureList() + ); + } + + private Component buildFeatureList() { + Component separator = TranslationManager.translation("feature.city.levels.rewards.list.separator") + .appendSpace(); + Component lastSeparator = Component.space() + .append(TranslationManager.translation("feature.city.levels.rewards.list.last_separator")) + .appendSpace(); + + Component list = features[0].getName(); + for (int i = 1; i < features.length; i++) { + Component currentSeparator = (i == features.length - 1) ? lastSeparator : separator; + list = list.append(currentSeparator).append(features[i].getName()); } - return Component.text(sb.toString()); + return list; } /** @@ -108,32 +124,28 @@ public Component getName() { */ @Getter public enum Feature { - CHEST("§a/city chest"), - CITY_BANK("§6/city bank"), - PLAYER_BANK("§b/bank"), - NOTATION("§3/city notation"), - RANK("§6/city ranks"), - MAYOR("§6/city mayor"), - PERK_AGRICULTURAL("§3les réformes d'agriculture"), - PERK_ECONOMY("§3les réformes d'économie"), - TYPE_WAR("§cle type de ville de guerre"), - WAR("§c/war"), - PERK_DREAM("§3les réformes oniriques"), - PERK_MILITARY("§3les réformes militaires"), - PERK_STRATEGY("§3les réformes de stratégies"); - - /** - * Nom de la fonctionnalité. - */ - private final String name; - - /** - * Constructeur de la fonctionnalité. - * - * @param name le nom associé à la fonctionnalité - */ - Feature(String name) { - this.name = name; + CHEST("feature.city.levels.rewards.feature.chest"), + CITY_BANK("feature.city.levels.rewards.feature.city_bank"), + PLAYER_BANK("feature.city.levels.rewards.feature.player_bank"), + NOTATION("feature.city.levels.rewards.feature.notation"), + RANK("feature.city.levels.rewards.feature.rank"), + MAYOR("feature.city.levels.rewards.feature.mayor"), + PERK_AGRICULTURAL("feature.city.levels.rewards.feature.perk_agricultural"), + PERK_ECONOMY("feature.city.levels.rewards.feature.perk_economy"), + TYPE_WAR("feature.city.levels.rewards.feature.type_war"), + WAR("feature.city.levels.rewards.feature.war"), + PERK_DREAM("feature.city.levels.rewards.feature.perk_dream"), + PERK_MILITARY("feature.city.levels.rewards.feature.perk_military"), + PERK_STRATEGY("feature.city.levels.rewards.feature.perk_strategy"); + + private final String nameKey; + + Feature(String nameKey) { + this.nameKey = nameKey; + } + + public Component getName() { + return TranslationManager.translation(nameKey); } } } diff --git a/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/InterestRewards.java b/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/InterestRewards.java index 98f8fb220..7153a2512 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/InterestRewards.java +++ b/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/InterestRewards.java @@ -1,8 +1,10 @@ package fr.openmc.core.features.city.sub.milestone.rewards; import fr.openmc.core.features.city.sub.milestone.CityRewards; +import fr.openmc.core.utils.messages.TranslationManager; import lombok.Getter; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; /** * Enumération représentant les récompenses d'intérêt pour une ville. @@ -64,6 +66,9 @@ public static double getTotalInterest(int level) { */ @Override public Component getName() { - return Component.text("§7+ §6" + interest * 100 + "% §6d'intérêt"); + return TranslationManager.translation( + "feature.city.levels.rewards.interest", + Component.text(interest * 100).color(NamedTextColor.GOLD) + ).color(NamedTextColor.GRAY); } } diff --git a/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/MascotsLevelsRewards.java b/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/MascotsLevelsRewards.java index 18b9b1e20..7320f7284 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/MascotsLevelsRewards.java +++ b/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/MascotsLevelsRewards.java @@ -1,8 +1,10 @@ package fr.openmc.core.features.city.sub.milestone.rewards; import fr.openmc.core.features.city.sub.milestone.CityRewards; +import fr.openmc.core.utils.messages.TranslationManager; import lombok.Getter; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; /** * Enumération représentant les récompenses de niveaux pour la Mascotte. @@ -54,6 +56,9 @@ public static int getMascotsLevelLimit(int level) { */ @Override public Component getName() { - return Component.text("§cNiveau " + mascotsLevelLimit + " §7maximum pour la mascotte"); + return TranslationManager.translation( + "feature.city.levels.rewards.mascot_level_max", + Component.text(mascotsLevelLimit).color(NamedTextColor.RED) + ).color(NamedTextColor.GRAY); } } diff --git a/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/MascotsSkinUnlockRewards.java b/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/MascotsSkinUnlockRewards.java index af3f91a9f..45f53b897 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/MascotsSkinUnlockRewards.java +++ b/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/MascotsSkinUnlockRewards.java @@ -2,8 +2,10 @@ import fr.openmc.core.features.city.sub.mascots.models.MascotType; import fr.openmc.core.features.city.sub.milestone.CityRewards; +import fr.openmc.core.utils.messages.TranslationManager; import lombok.Getter; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import java.util.Arrays; import java.util.List; @@ -69,13 +71,35 @@ public Component getName() { List names = Arrays.stream(unlocked) .map(MascotType::getDisplayName) .toList(); - String skins; + + Component separator = TranslationManager.translation("feature.city.levels.rewards.list.separator") + .appendSpace(); + Component lastSeparator = Component.space() + .append(TranslationManager.translation("feature.city.levels.rewards.list.last_separator")) + .appendSpace(); + + Component skinsList = Component.text(names.getFirst()); + for (int i = 1; i < names.size(); i++) { + Component currentSeparator = (i == names.size() - 1) ? lastSeparator : separator; + skinsList = skinsList.append(currentSeparator).append(Component.text(names.get(i))); + } + + Component skins; if (names.size() == 1) { - skins = "la mascotte " + names.getFirst(); + skins = TranslationManager.translation( + "feature.city.levels.rewards.mascot_skin.single", + skinsList + ); } else { - skins = "les mascottes " + String.join(", ", names.subList(0, names.size() - 1)) - + " et " + names.get(names.size() - 1); + skins = TranslationManager.translation( + "feature.city.levels.rewards.mascot_skin.multiple", + skinsList + ); } - return Component.text("§7Débloque §c" + skins); + + return TranslationManager.translation( + "feature.city.levels.rewards.unlock", + skins.color(NamedTextColor.RED) + ); } } \ No newline at end of file diff --git a/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/MemberLimitRewards.java b/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/MemberLimitRewards.java index 03dfa82a9..e298f335b 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/MemberLimitRewards.java +++ b/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/MemberLimitRewards.java @@ -1,8 +1,10 @@ package fr.openmc.core.features.city.sub.milestone.rewards; import fr.openmc.core.features.city.sub.milestone.CityRewards; +import fr.openmc.core.utils.messages.TranslationManager; import lombok.Getter; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; /** * Enumération représentant les récompenses de limite de membres pour une ville. @@ -71,6 +73,9 @@ public static int getMemberLimit(int level) { */ @Override public Component getName() { - return Component.text("§d" + memberLimit + " §7membres maximum"); + return TranslationManager.translation( + "feature.city.levels.rewards.member_limit", + Component.text(memberLimit).color(NamedTextColor.LIGHT_PURPLE) + ).color(NamedTextColor.GRAY); } } diff --git a/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/PlayerBankLimitRewards.java b/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/PlayerBankLimitRewards.java index 1daf9d606..acea89b2b 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/PlayerBankLimitRewards.java +++ b/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/PlayerBankLimitRewards.java @@ -1,8 +1,10 @@ package fr.openmc.core.features.city.sub.milestone.rewards; import fr.openmc.core.features.city.sub.milestone.CityRewards; +import fr.openmc.core.utils.messages.TranslationManager; import lombok.Getter; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; /** * Énumération représentant les récompenses de limite de solde @@ -73,6 +75,11 @@ public static int getBankBalanceLimit(int level) { */ @Override public Component getName() { - return Component.text("§7Limite à §6" + bankBalanceLimit + " d'argent §7dans la §bbanque personnelle"); + return TranslationManager.translation( + "feature.city.levels.rewards.player_bank_limit", + Component.text(bankBalanceLimit).color(NamedTextColor.GOLD), + TranslationManager.translation("feature.city.levels.rewards.player_bank_label") + .color(NamedTextColor.AQUA) + ).color(NamedTextColor.GRAY); } } diff --git a/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/RankLimitRewards.java b/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/RankLimitRewards.java index 508fbe155..db2c71a20 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/RankLimitRewards.java +++ b/src/main/java/fr/openmc/core/features/city/sub/milestone/rewards/RankLimitRewards.java @@ -1,8 +1,10 @@ package fr.openmc.core.features.city.sub.milestone.rewards; import fr.openmc.core.features.city.sub.milestone.CityRewards; +import fr.openmc.core.utils.messages.TranslationManager; import lombok.Getter; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; @Getter public enum RankLimitRewards implements CityRewards { @@ -46,6 +48,9 @@ public static int getRankLimit(int level) { @Override public Component getName() { - return Component.text("§a" + rankLimit + " §7grades maximum"); + return TranslationManager.translation( + "feature.city.levels.rewards.rank_limit", + Component.text(rankLimit).color(NamedTextColor.GREEN) + ).color(NamedTextColor.GRAY); } } diff --git a/src/main/resources/translations/lang.properties b/src/main/resources/translations/lang.properties index 108c496d1..16e726e35 100644 --- a/src/main/resources/translations/lang.properties +++ b/src/main/resources/translations/lang.properties @@ -1139,6 +1139,55 @@ feature.city.mayor.admin.changeelection.usage=/adminmayor changeelection cityUUI feature.city.mayor.admin.changeelection.success=Vous venez de mettre : %1$s dans la ville %2$s # ** CITY LEVELS ** +feature.city.levels.menu.title=Menu des Villes - Niveaux +feature.city.levels.menu.requirements.header=Requis : +feature.city.levels.menu.rewards.header=Récompenses : +feature.city.levels.menu.rewards.item=Récompenses +feature.city.levels.menu.status.unlocked=DÉBLOQUÉ +feature.city.levels.menu.unlock.remaining=Il reste %1$s de déblocage +feature.city.levels.menu.unlock.duration=%1$s de déblocage +feature.city.levels.menu.click.start_upgrade=CLIQUEZ ICI POUR LANCER L'AMÉLIORATION +feature.city.levels.menu.click.contribute=CLIQUEZ ICI POUR CONTRIBUER +feature.city.levels.menu.deposit.click_one=CLIQUE POUR DÉPOSER UN +feature.city.levels.menu.deposit.click_all=SHIFT-CLIQUE POUR TOUT DÉPOSER + +feature.city.levels.rewards.none=Aucun +feature.city.levels.rewards.unlock=Débloque %1$s +feature.city.levels.rewards.list.separator=, +feature.city.levels.rewards.list.last_separator=et +feature.city.levels.rewards.feature.chest=/city chest +feature.city.levels.rewards.feature.city_bank=/city bank +feature.city.levels.rewards.feature.player_bank=/bank +feature.city.levels.rewards.feature.notation=/city notation +feature.city.levels.rewards.feature.rank=/city ranks +feature.city.levels.rewards.feature.mayor=/city mayor +feature.city.levels.rewards.feature.perk_agricultural=les réformes d'agriculture +feature.city.levels.rewards.feature.perk_economy=les réformes d'économie +feature.city.levels.rewards.feature.type_war=le type de ville de guerre +feature.city.levels.rewards.feature.war=/war +feature.city.levels.rewards.feature.perk_dream=les réformes oniriques +feature.city.levels.rewards.feature.perk_military=les réformes militaires +feature.city.levels.rewards.feature.perk_strategy=les réformes de stratégies +feature.city.levels.rewards.mascot_level_max=Niveau %1$s maximum pour la mascotte +feature.city.levels.rewards.member_limit=%1$s membres maximum +feature.city.levels.rewards.rank_limit=%1$s grades maximum +feature.city.levels.rewards.chest_page_limit=%1$s pages de coffre maximum +feature.city.levels.rewards.player_bank_limit=Limite à %1$s d'argent dans la %2$s +feature.city.levels.rewards.player_bank_label=banque personnelle +feature.city.levels.rewards.interest=+ %1$s%% d'intérêt +feature.city.levels.rewards.mascot_skin.single=la mascotte %1$s +feature.city.levels.rewards.mascot_skin.multiple=les mascottes %1$s + +feature.city.levels.requirements.deposit=Déposer %1$s %2$s +feature.city.levels.requirements.deposit.progress=Déposer %1$s %2$s (%3$s/%1$s) +feature.city.levels.requirements.deposit.description=CLIQUEZ ICI POUR DÉPOSER +feature.city.levels.requirements.deposit.success=Vous avez déposé %1$s %2$s +feature.city.levels.requirements.command=Exécuter %1$s fois %2$s +feature.city.levels.requirements.command.progress=Exécuter %1$s fois %2$s (%3$s/%1$s) + +feature.city.levels.upgrade.broadcast=La ville %1$s est passée au Niveau %2$s ! Un maximum de GG ! +feature.city.levels.admin.skip_upgrade.success=Upgrade du niveau ignoré +feature.city.levels.admin.set_level.success=Niveau %1$s appliqué à la ville feature.city.levels.level_1.name=Niveau 1 feature.city.levels.level_1.description=Ère urbaine feature.city.levels.level_2.name=Niveau 2 @@ -1160,7 +1209,7 @@ feature.city.levels.level_9.description=Puissance militaire feature.city.levels.level_10.name=Niveau 10 feature.city.levels.level_10.description=Métropole -feature.city.levels.rewards.free_claims=%1$s claims gratuits +feature.city.levels.rewards.free_claims=%1$s claims gratuits feature.city.levels.requirements.claims=Avoir %1$s claims feature.city.levels.requirements.claims.progress=Avoir %1$s claims (%2$s/%1$s) From 88bf013d6724a54c121ddd46c4c3acbbaf4a528e Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Fri, 27 Mar 2026 21:59:50 +0100 Subject: [PATCH 13/20] translation for sub.notation package --- .../notation/commands/NotationCommands.java | 4 +- .../sub/notation/menu/NotationDialog.java | 133 ++++++++++++------ .../notation/menu/NotationEditionDialog.java | 41 ++++-- .../resources/translations/lang.properties | 55 ++++++++ 4 files changed, 178 insertions(+), 55 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/city/sub/notation/commands/NotationCommands.java b/src/main/java/fr/openmc/core/features/city/sub/notation/commands/NotationCommands.java index 80dd4a713..8a1085de2 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/notation/commands/NotationCommands.java +++ b/src/main/java/fr/openmc/core/features/city/sub/notation/commands/NotationCommands.java @@ -6,7 +6,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; -import net.kyori.adventure.text.Component; +import fr.openmc.core.utils.messages.TranslationManager; import org.bukkit.entity.Player; import revxrsal.commands.annotation.Command; import revxrsal.commands.annotation.Description; @@ -19,7 +19,7 @@ public class NotationCommands { void notationTest(Player sender) { String weekStr = DateUtils.getWeekFormat(); if (NotationManager.getSortedNotationForWeek(weekStr) == null) { - MessagesManager.sendMessage(sender, Component.text("Aucune notation n'a été mise pour cette semaine !"), Prefix.CITY, MessageType.INFO, false); + MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.notation.command.none"), Prefix.CITY, MessageType.INFO, false); return; } diff --git a/src/main/java/fr/openmc/core/features/city/sub/notation/menu/NotationDialog.java b/src/main/java/fr/openmc/core/features/city/sub/notation/menu/NotationDialog.java index 3efeb1c50..62f3f3831 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/notation/menu/NotationDialog.java +++ b/src/main/java/fr/openmc/core/features/city/sub/notation/menu/NotationDialog.java @@ -8,6 +8,7 @@ import fr.openmc.core.features.city.sub.notation.models.CityNotation; import fr.openmc.core.utils.PaddingUtils; import fr.openmc.core.utils.dialog.ButtonType; +import fr.openmc.core.utils.messages.TranslationManager; import io.papermc.paper.dialog.Dialog; import io.papermc.paper.registry.data.dialog.ActionButton; import io.papermc.paper.registry.data.dialog.DialogBase; @@ -51,7 +52,11 @@ public static void send(Player player, String weekStr) { } Dialog dialog = Dialog.create(builder -> builder.empty() - .base(DialogBase.builder(Component.text("Classement des Villes - Semaine " + weekNumber + " de " + yearNumber)) + .base(DialogBase.builder(TranslationManager.translation( + "feature.city.notation.dialog.title", + Component.text(weekNumber), + Component.text(yearNumber) + )) .body(body) .canCloseWithEscape(true) .build() @@ -69,14 +74,23 @@ public static void send(Player player, String weekStr) { } public static DialogBody lineCityNotationHeader(City city, String weekStr) { - Component header = Component.text(PaddingUtils.format("Ville", MAX_LENGTH_CITY)).append(Component.text(" | ")) - .append(Component.text(PaddingUtils.format("Activ.", 8)).hoverEvent(getHoverActivity())).append(Component.text(" | ")) - .append(Component.text(PaddingUtils.format("Econo.", LENGTH_CASE)).hoverEvent(getHoverEconomy())).append(Component.text(" | ")) - .append(Component.text(PaddingUtils.format("Milit.", LENGTH_CASE)).hoverEvent(getHoverMilitary())).append(Component.text(" | ")) - .append(Component.text(PaddingUtils.format("Arch.", LENGTH_CASE)).hoverEvent(getHoverArchitectural())).append(Component.text(" | ")) - .append(Component.text(PaddingUtils.format("Coh.", LENGTH_CASE)).hoverEvent(getHoverCoherence())).append(Component.text(" | ")) - .append(Component.text(PaddingUtils.format("Total", LENGTH_CASE)).hoverEvent(getHoverTotal(city == null ? null : city.getNotationOfWeek(weekStr)))).append(Component.text(" | ")) - .append(Component.text(PaddingUtils.format("Argent", LENGTH_CASE))); + String headerCity = TranslationManager.translationString("feature.city.notation.header.city"); + String headerActivity = TranslationManager.translationString("feature.city.notation.header.activity"); + String headerEconomy = TranslationManager.translationString("feature.city.notation.header.economy"); + String headerMilitary = TranslationManager.translationString("feature.city.notation.header.military"); + String headerArchitectural = TranslationManager.translationString("feature.city.notation.header.architectural"); + String headerCoherence = TranslationManager.translationString("feature.city.notation.header.coherence"); + String headerTotal = TranslationManager.translationString("feature.city.notation.header.total"); + String headerMoney = TranslationManager.translationString("feature.city.notation.header.money"); + + Component header = Component.text(PaddingUtils.format(headerCity, MAX_LENGTH_CITY)).append(Component.text(" | ")) + .append(Component.text(PaddingUtils.format(headerActivity, 8)).hoverEvent(getHoverActivity())).append(Component.text(" | ")) + .append(Component.text(PaddingUtils.format(headerEconomy, LENGTH_CASE)).hoverEvent(getHoverEconomy())).append(Component.text(" | ")) + .append(Component.text(PaddingUtils.format(headerMilitary, LENGTH_CASE)).hoverEvent(getHoverMilitary())).append(Component.text(" | ")) + .append(Component.text(PaddingUtils.format(headerArchitectural, LENGTH_CASE)).hoverEvent(getHoverArchitectural())).append(Component.text(" | ")) + .append(Component.text(PaddingUtils.format(headerCoherence, LENGTH_CASE)).hoverEvent(getHoverCoherence())).append(Component.text(" | ")) + .append(Component.text(PaddingUtils.format(headerTotal, LENGTH_CASE)).hoverEvent(getHoverTotal(city == null ? null : city.getNotationOfWeek(weekStr)))).append(Component.text(" | ")) + .append(Component.text(PaddingUtils.format(headerMoney, LENGTH_CASE))); header.font(Key.key(FONT)); @@ -93,13 +107,23 @@ public static DialogBody lineCityNotation(City city, String weekStr) { String centeredCityName = PaddingUtils.format(cityName, MAX_LENGTH_CITY); - Component hoverCityName = Component.text("§7Niveau de la mascotte : §c" + city.getMascot().getLevel()) - .append(Component.newline()) - .append(Component.text("§7Statut : " + city.getType().getDisplayName())) - .append(Component.newline()) - .append(Component.text("§7Membres : §2" + city.getMembers().size())) - .append(Component.newline()) - .append(Component.text("§eCliquez ici pour avoir plus d'info sur la ville")); + Component hoverCityName = TranslationManager.translation( + "feature.city.notation.hover.city.mascot_level", + Component.text(city.getMascot().getLevel()).color(NamedTextColor.RED) + ).color(NamedTextColor.GRAY) + .appendNewline() + .append(TranslationManager.translation( + "feature.city.notation.hover.city.status", + city.getType().getDisplayName() + ).color(NamedTextColor.GRAY)) + .appendNewline() + .append(TranslationManager.translation( + "feature.city.notation.hover.city.members", + Component.text(city.getMembers().size()).color(NamedTextColor.GREEN) + ).color(NamedTextColor.GRAY)) + .appendNewline() + .append(TranslationManager.translation("feature.city.notation.hover.city.more_info") + .color(NamedTextColor.YELLOW)); Component base = Component.empty(); @@ -135,10 +159,10 @@ public static DialogBody lineCityNotation(City city, String weekStr) { .append(Component.text(" | ")) .append(Component.text(PaddingUtils.format(total, LENGTH_CASE)).hoverEvent(getHoverTotal(city == null ? null : city.getNotationOfWeek(weekStr)))) .append(Component.text(" | ")) - .append(Component.text("§6 +" + PaddingUtils.format(money, LENGTH_CASE))); + .append(Component.text("+ " + PaddingUtils.format(money, LENGTH_CASE)).color(NamedTextColor.GOLD)); } else { - base = base.append(Component.text("Aucune notation")); + base = base.append(TranslationManager.translation("feature.city.notation.table.none")); } base.font(Key.key(FONT)); @@ -151,7 +175,7 @@ public static DialogBody lineCityNotation(City city, String weekStr) { public static Component getHoverTotal(CityNotation notation) { if (notation == null) { - return Component.text("Aucun total pour vous"); + return TranslationManager.translation("feature.city.notation.hover.total.none"); } @@ -159,50 +183,77 @@ public static Component getHoverTotal(CityNotation notation) { double noteEconomy = notation.getNoteEconomy() != null ? notation.getNoteEconomy() : 0; double noteMilitary = notation.getNoteMilitary() != null ? notation.getNoteMilitary() : 0; - return Component.text("§6§lDétails") + return TranslationManager.translation("feature.city.notation.hover.total.title") + .color(NamedTextColor.GOLD) + .decorate(TextDecoration.BOLD) .appendNewline() - .append(Component.text("§8Activité " + noteActivity)) + .append(TranslationManager.translation( + "feature.city.notation.hover.total.activity", + Component.text(noteActivity).color(NamedTextColor.DARK_AQUA) + ).color(NamedTextColor.DARK_GRAY)) .appendNewline() - .append(Component.text("§8Économie " + noteEconomy)) + .append(TranslationManager.translation( + "feature.city.notation.hover.total.economy", + Component.text(noteEconomy).color(NamedTextColor.DARK_AQUA) + ).color(NamedTextColor.DARK_GRAY)) .appendNewline() - .append(Component.text("§8Militaire " + noteMilitary)) + .append(TranslationManager.translation( + "feature.city.notation.hover.total.military", + Component.text(noteMilitary).color(NamedTextColor.DARK_AQUA) + ).color(NamedTextColor.DARK_GRAY)) .appendNewline() - .append(Component.text("§8Architecture " + notation.getNoteArchitectural())) + .append(TranslationManager.translation( + "feature.city.notation.hover.total.architecture", + Component.text(notation.getNoteArchitectural()).color(NamedTextColor.DARK_AQUA) + ).color(NamedTextColor.DARK_GRAY)) .appendNewline() - .append(Component.text("§8Cohérence " + notation.getNoteCoherence())) + .append(TranslationManager.translation( + "feature.city.notation.hover.total.coherence", + Component.text(notation.getNoteCoherence()).color(NamedTextColor.DARK_AQUA) + ).color(NamedTextColor.DARK_GRAY)) .appendNewline() .appendNewline() - .append(Component.text("§3§lJustification de la note")) + .append(TranslationManager.translation("feature.city.notation.hover.total.justification") + .color(NamedTextColor.DARK_AQUA) + .decorate(TextDecoration.BOLD)) .appendNewline() - .append(Component.text(notation.getDescription())).color(NamedTextColor.DARK_GRAY).decoration(TextDecoration.ITALIC, true); + .append(Component.text(notation.getDescription()) + .color(NamedTextColor.DARK_GRAY) + .decoration(TextDecoration.ITALIC, true)); } public static Component getHoverActivity() { - return Component.text("Note allant de 0 à " + NotationNote.NOTE_ACTIVITY.getMaxNote() + " points, qui comprend, le nombre de joueurs actifs dans la ville par le temps de jeu d'une ville") - .appendNewline() - .append(Component.text("Note sur §3" + NotationNote.NOTE_ACTIVITY.getMaxNote() + " §fpoints")); + return TranslationManager.translation( + "feature.city.notation.hover.activity", + Component.text(NotationNote.NOTE_ACTIVITY.getMaxNote()).color(NamedTextColor.DARK_AQUA) + ).color(NamedTextColor.GRAY); } public static Component getHoverEconomy() { - return Component.text("Note qui comprend, la richesse de la ville et le PIB par habitant de la ville.") - .appendNewline() - .append(Component.text("Note sur §3" + NotationNote.NOTE_PIB.getMaxNote() + " §fpoints")); + return TranslationManager.translation( + "feature.city.notation.hover.economy", + Component.text(NotationNote.NOTE_PIB.getMaxNote()).color(NamedTextColor.DARK_AQUA) + ).color(NamedTextColor.GRAY); } public static Component getHoverMilitary() { - return Component.text("Note qui se base en fonction de la quantité de points de puissance de votre ville, récupérables via des guerres") - .appendNewline() - .append(Component.text("Note sur §3" + NotationNote.NOTE_PIB.getMaxNote() + " §fpoints")); + return TranslationManager.translation( + "feature.city.notation.hover.military", + Component.text(NotationNote.NOTE_PIB.getMaxNote()).color(NamedTextColor.DARK_AQUA) + ).color(NamedTextColor.GRAY); } public static Component getHoverCoherence() { - return Component.text("Note de cohérence qui comprend, la cohérence des constructions entre elles, l'harmonie des couleurs, la transition entre 2 thèmes, ...") - .append(Component.text("Note sur §3" + NotationNote.NOTE_COHERENCE.getMaxNote() + " §fpoints")); + return TranslationManager.translation( + "feature.city.notation.hover.coherence", + Component.text(NotationNote.NOTE_COHERENCE.getMaxNote()).color(NamedTextColor.DARK_AQUA) + ).color(NamedTextColor.GRAY); } public static Component getHoverArchitectural() { - return Component.text("Note d'architecture qui comprend, la diversité des blocs utilisés, l'architecture des builds ainsi que la végétation.") - .appendNewline() - .append(Component.text("Note sur §3" + NotationNote.NOTE_ARCHITECTURAL.getMaxNote() + " §fpoints")); + return TranslationManager.translation( + "feature.city.notation.hover.architectural", + Component.text(NotationNote.NOTE_ARCHITECTURAL.getMaxNote()).color(NamedTextColor.DARK_AQUA) + ).color(NamedTextColor.GRAY); } } diff --git a/src/main/java/fr/openmc/core/features/city/sub/notation/menu/NotationEditionDialog.java b/src/main/java/fr/openmc/core/features/city/sub/notation/menu/NotationEditionDialog.java index bead44263..8256a00c9 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/notation/menu/NotationEditionDialog.java +++ b/src/main/java/fr/openmc/core/features/city/sub/notation/menu/NotationEditionDialog.java @@ -8,6 +8,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import io.papermc.paper.dialog.Dialog; import io.papermc.paper.registry.data.dialog.ActionButton; import io.papermc.paper.registry.data.dialog.DialogBase; @@ -40,7 +41,7 @@ public static void send(Player player, String weekStr, List cities, Intege Integer finalCityEditIndex1 = cityEditIndex; body.add(DialogBody.item( ItemStack.of(Material.ENDER_PEARL), - DialogBody.plainMessage(Component.text("Se téléporter a la ville en question.").clickEvent( + DialogBody.plainMessage(TranslationManager.translation("feature.city.notation.edit.teleport").clickEvent( ClickEvent.callback((audience -> { if (!(audience instanceof Player playerClicked)) { return; @@ -48,7 +49,10 @@ public static void send(Player player, String weekStr, List cities, Intege playerClicked.closeInventory(); - MessagesManager.sendMessage(player, Component.text("Vous avez été téléporté à la ville " + cityEdited.getName() + ". Cliquez sur le message pour continuer l'édition.") + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.notation.edit.teleport.success", + Component.text(cityEdited.getName()) + ) .clickEvent(ClickEvent.callback((audience1) -> { if (!(audience instanceof Player playerClicked1)) { return; @@ -79,9 +83,11 @@ public static void send(Player player, String weekStr, List cities, Intege inputs.add(DialogInput .numberRange("input_note_architectural", - Component.text("Note Architecturale").hoverEvent( - Component.text("Note sur " + NotationNote.NOTE_ARCHITECTURAL.getMaxNote() + " points") - .append(Component.text("qui prend en compte, les bâtiments, les infrastructures et l'esthétique de la ville")) + TranslationManager.translation("feature.city.notation.edit.input.architectural").hoverEvent( + TranslationManager.translation( + "feature.city.notation.edit.input.architectural.hover", + Component.text(NotationNote.NOTE_ARCHITECTURAL.getMaxNote()) + ) ), 0, NotationNote.NOTE_ARCHITECTURAL.getMaxNote() ) .initial(0f) @@ -91,9 +97,11 @@ public static void send(Player player, String weekStr, List cities, Intege inputs.add(DialogInput .numberRange("input_note_coherence", - Component.text("Note Cohérence").hoverEvent( - Component.text("Note sur " + NotationNote.NOTE_COHERENCE.getMaxNote() + " points") - .append(Component.text("qui prend en compte, la cohérence des builds et le changement progressif de thème.")) + TranslationManager.translation("feature.city.notation.edit.input.coherence").hoverEvent( + TranslationManager.translation( + "feature.city.notation.edit.input.coherence.hover", + Component.text(NotationNote.NOTE_COHERENCE.getMaxNote()) + ) ), 0, NotationNote.NOTE_COHERENCE.getMaxNote() ) .initial(0f) @@ -104,8 +112,8 @@ public static void send(Player player, String weekStr, List cities, Intege inputs.add(DialogInput .text("input_description", - Component.text("Justification de la note").hoverEvent( - Component.text("Une justification de la note est obligatoire") + TranslationManager.translation("feature.city.notation.edit.input.justification").hoverEvent( + TranslationManager.translation("feature.city.notation.edit.input.justification.hover") ) ) .multiline(TextDialogInput.MultilineOptions.create(7, 40)) @@ -115,7 +123,13 @@ public static void send(Player player, String weekStr, List cities, Intege int finalCityEditIndex = cityEditIndex; Dialog dialog = Dialog.create(builder -> builder.empty() - .base(DialogBase.builder(Component.text("Classement des notations semaine " + weekStr + " - Édition de la ville : " + cityEdited.getName() + " (" + (finalCityEditIndex + 1) + "/" + cities.size() + ")")) + .base(DialogBase.builder(TranslationManager.translation( + "feature.city.notation.edit.title", + Component.text(weekStr), + Component.text(cityEdited.getName()), + Component.text(finalCityEditIndex + 1), + Component.text(cities.size()) + )) .body(body) .inputs(inputs) .canCloseWithEscape(true) @@ -149,7 +163,10 @@ public static void send(Player player, String weekStr, List cities, Intege if (finalCityEditIndex + 1 < cities.size()) { NotationEditionDialog.send(player, weekStr, cities, finalCityEditIndex + 1); } else { - MessagesManager.sendMessage(player, Component.text("Les notations pour le " + weekStr + " ont été totalement faites"), Prefix.STAFF, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.notation.edit.completed", + Component.text(weekStr) + ), Prefix.STAFF, MessageType.SUCCESS, false); player.closeInventory(); } }, diff --git a/src/main/resources/translations/lang.properties b/src/main/resources/translations/lang.properties index 16e726e35..5c4a60636 100644 --- a/src/main/resources/translations/lang.properties +++ b/src/main/resources/translations/lang.properties @@ -370,6 +370,61 @@ feature.city.menus.main.notation.lore=Notation de la ville : %1$sCLIQUEZ ICI POUR VOIR LA NOTATION feature.city.menus.main.notation.lore.none=Vous n'avez pas de notation feature.city.menus.main.notation.lore.locked=Vous devez être niveau %1$s pour débloquer ceci +feature.city.notation.dialog.title=Classement des Villes - Semaine %1$s de %2$s +feature.city.notation.header.city=Ville +feature.city.notation.header.activity=Activ. +feature.city.notation.header.economy=Econo. +feature.city.notation.header.military=Milit. +feature.city.notation.header.architectural=Arch. +feature.city.notation.header.coherence=Coh. +feature.city.notation.header.total=Total +feature.city.notation.header.money=Argent +feature.city.notation.table.none=Aucune notation +feature.city.notation.hover.city.mascot_level=Niveau de la mascotte : %1$s +feature.city.notation.hover.city.status=Statut : %1$s +feature.city.notation.hover.city.members=Membres : %1$s +feature.city.notation.hover.city.more_info=Cliquez ici pour avoir plus d'info sur la ville +feature.city.notation.hover.total.none=Aucun total pour vous +feature.city.notation.hover.total.title=Détails +feature.city.notation.hover.total.activity=Activité %1$s +feature.city.notation.hover.total.economy=Économie %1$s +feature.city.notation.hover.total.military=Militaire %1$s +feature.city.notation.hover.total.architecture=Architecture %1$s +feature.city.notation.hover.total.coherence=Cohérence %1$s +feature.city.notation.hover.total.justification=Justification de la note +feature.city.notation.hover.activity=Note allant de 0 à %1$s points, qui comprend, le nombre de joueurs actifs dans la ville par le temps de jeu d'une ville. \ +
Note sur %1$s points +feature.city.notation.hover.economy=Note qui comprend, la richesse de la ville et le PIB par habitant de la ville. \ +
Note sur %1$s points +feature.city.notation.hover.military=Note qui se base en fonction de la quantité de points de puissance de votre ville, récupérables via des guerres \ +
Note sur %1$s points +feature.city.notation.hover.coherence=Note de cohérence qui comprend, la cohérence des constructions entre elles, l'harmonie des couleurs, la transition entre 2 thèmes, ... \ +
Note sur %1$s points +feature.city.notation.hover.architectural=Note d'architecture qui comprend, la diversité des blocs utilisés, l'architecture des builds ainsi que la végétation. \ +
Note sur %1$s points +feature.city.notation.join.title=NOTATION ! +feature.city.notation.join.message=Votre ville a été notée et elle est placée n°%1$s des meilleures villes ! +feature.city.notation.join.hover=Cliquez pour voir la notation de votre ville ! +feature.city.notation.command.none=Aucune notation n'a été mise pour cette semaine ! +feature.city.notation.admin.edit.example=Exemple : cette semaine on est le %1$s et la semaine prochaine, le %2$s +feature.city.notation.admin.edit.prompt=Entrer le format de la semaine (%1$s) +feature.city.notation.admin.edit.invalid=Saisie fausse ! %1$s +feature.city.notation.admin.edit.none=Aucune ville a éditer +feature.city.notation.admin.edit.error=Erreur lors de l'ouverture du menu +feature.city.notation.admin.publish.missing=Vous devez faire /admcity notation edit et éditer la semaine %1$s +feature.city.notation.admin.publish.success=La semaine %1$s a été publiée, les notes d'économies et d'activité ainsi que les gains ont été calculés et donnés +feature.city.notation.edit.teleport=Se téléporter à la ville en question. +feature.city.notation.edit.teleport.success=Vous avez été téléporté à la ville %1$s. Cliquez sur le message pour continuer l'édition. +feature.city.notation.edit.input.architectural=Note Architecturale +feature.city.notation.edit.input.architectural.hover=Note sur %1$s points \ +
qui prend en compte, les bâtiments, les infrastructures et l'esthétique de la ville +feature.city.notation.edit.input.coherence=Note Cohérence +feature.city.notation.edit.input.coherence.hover=Note sur %1$s points \ +
qui prend en compte, la cohérence des builds et le changement progressif de thème. +feature.city.notation.edit.input.justification=Justification de la note +feature.city.notation.edit.input.justification.hover=Une justification de la note est obligatoire +feature.city.notation.edit.title=Classement des notations semaine %1$s - Édition de la ville : %2$s (%3$s/%4$s) +feature.city.notation.edit.completed=Les notations pour le %1$s ont été totalement faites feature.city.menus.main.ranks.title=Grades de la Ville feature.city.menus.main.ranks.lore.unlocked=Gérer les grades de votre ville \
Votre Grade : %1$s \ From d717141df4a9611ccbc8bd458236310c088b8da5 Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Sat, 28 Mar 2026 10:15:33 +0100 Subject: [PATCH 14/20] translation for sub.ranks package --- .../city/sub/rank/CityRankAction.java | 31 ++-- .../city/sub/rank/CityRankCommands.java | 6 +- .../city/sub/rank/CityRankCondition.java | 16 +- .../sub/rank/menus/CityRankAssignMenu.java | 12 +- .../sub/rank/menus/CityRankDetailsMenu.java | 145 ++++++++++-------- .../city/sub/rank/menus/CityRankIconMenu.java | 21 +-- .../sub/rank/menus/CityRankMemberMenu.java | 21 ++- .../sub/rank/menus/CityRankPermsMenu.java | 34 ++-- .../city/sub/rank/menus/CityRanksMenu.java | 60 ++++---- .../resources/translations/lang.properties | 90 +++++++++++ 10 files changed, 301 insertions(+), 135 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankAction.java b/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankAction.java index a95fb845e..24ec9a9aa 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankAction.java +++ b/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankAction.java @@ -31,7 +31,7 @@ public static void beginCreateRank(Player player) { City city = CityManager.getPlayerCity(player.getUniqueId()); if (!CityRankCondition.canCreateRank(city, player)) return; - DialogInput.send(player, Component.text("Entrez le nom de votre grade"), MAX_LENGTH_RANK_NAME, input -> { + DialogInput.send(player, TranslationManager.translation("feature.city.rank.prompt.create"), MAX_LENGTH_RANK_NAME, input -> { if (input == null) return; CityRankAction.afterCreateRank(player, input); @@ -75,7 +75,7 @@ public static void renameRankFromMenu(Player player, DBCityRank oldRank, DBCityR return; } if (!CityRankCondition.canRenameRank(city, player, newRank.getName())) return; - DialogInput.send(player, Component.text("Entrez le nouveau nom de votre grade"), MAX_LENGTH_RANK_NAME, input -> { + DialogInput.send(player, TranslationManager.translation("feature.city.rank.prompt.rename"), MAX_LENGTH_RANK_NAME, input -> { if (input == null) return; if (!CityRankCondition.canRenameRank(city, player, newRank.getName())) return; @@ -96,7 +96,7 @@ public static void renameRank(Player player, String oldName) { return; } - DialogInput.send(player, Component.text("Entrez le nouveau nom de votre grade"), MAX_LENGTH_RANK_NAME, input -> { + DialogInput.send(player, TranslationManager.translation("feature.city.rank.prompt.rename"), MAX_LENGTH_RANK_NAME, input -> { if (input == null) return; if (!CityRankCondition.canRenameRank(city, player, oldName)) { @@ -110,7 +110,11 @@ public static void renameRank(Player player, String oldName) { } city.updateRank(rank, new DBCityRank(rank.getRankUUID(), city.getUniqueId(), rank.getPriority(), input, rank.getIcon(), rank.getPermissionsSet(), rank.getMembersSet())); - MessagesManager.sendMessage(player, Component.text("Le nom du grade a été mis à jour : " + oldName + " → " + input), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.rank.rename.success", + Component.text(oldName), + Component.text(input) + ), Prefix.CITY, MessageType.SUCCESS, false); }); } @@ -127,7 +131,7 @@ public static void deleteRank(Player player, String rankName) { return; } - if ( CityRankCondition.canDeleteRank(city, player, rankName)) { + if (CityRankCondition.canDeleteRank(city, player, rankName)) { return; } @@ -145,15 +149,21 @@ public static void deleteRank(Player player, String rankName) { city.deleteRank(rank); player.closeInventory(); - MessagesManager.sendMessage(player, Component.text("Grade " + rank.getName() + " supprimé avec succès !"), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.rank.delete.success", + Component.text(rank.getName()) + ), Prefix.CITY, MessageType.SUCCESS, false); } catch (IllegalArgumentException e) { - MessagesManager.sendMessage(player, Component.text("Impossible de supprimer le grade : " + e.getMessage()), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.rank.delete.error", + Component.text(e.getMessage()) + ), Prefix.CITY, MessageType.ERROR, false); } }, () -> { if (!CityRankCondition.canDeleteRank(city, player, rankName)) return; new CityRankDetailsMenu(player, city, rank).open(); - }, List.of(Component.text("§cCette action est irréversible")), List.of()).open(); + }, List.of(TranslationManager.translation("feature.city.rank.delete.confirm.lore")), List.of()).open(); } /** @@ -171,7 +181,10 @@ public static void assignRank(Player player, String rankName, OfflinePlayer memb } if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.RANK)) { - MessagesManager.sendMessage(player, Component.text("Vous n'avez pas débloqué cette feature ! Veuillez améliorer votre ville au niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.RANK) + " !"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "messages.city.havent_unlocked_feature", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.RANK)) + ), Prefix.CITY, MessageType.ERROR, false); return; } diff --git a/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCommands.java b/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCommands.java index 80791e7d3..745accd52 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCommands.java +++ b/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCommands.java @@ -14,6 +14,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import revxrsal.commands.annotation.*; @@ -33,7 +34,10 @@ public void rank(Player player) { } if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.RANK)) { - MessagesManager.sendMessage(player, Component.text("Vous n'avez pas débloqué cette feature ! Veuillez améliorer votre ville au niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.RANK) + " !"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "messages.city.havent_unlocked_feature", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.RANK)).color(NamedTextColor.GOLD) + ), Prefix.CITY, MessageType.ERROR, false); return; } diff --git a/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCondition.java b/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCondition.java index 385ba21e2..0205401d2 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCondition.java +++ b/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankCondition.java @@ -10,6 +10,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.entity.Player; /** @@ -32,7 +33,10 @@ public static boolean canCreateRank(City city, Player player) { } if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.RANK)) { - MessagesManager.sendMessage(player, Component.text("Vous n'avez pas débloqué cette Feature ! Veuillez Améliorer votre Ville au niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.RANK) + "!"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "messages.city.havent_unlocked_feature", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.RANK)).color(NamedTextColor.GOLD) + ), Prefix.CITY, MessageType.ERROR, false); return false; } @@ -61,7 +65,10 @@ public static boolean canRenameRank(City city, Player player, String oldRankName } if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.RANK)) { - MessagesManager.sendMessage(player, Component.text("Vous n'avez pas débloqué cette Feature ! Veuillez Améliorer votre Ville au niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.RANK) + "!"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "messages.city.havent_unlocked_feature", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.RANK)).color(NamedTextColor.GOLD) + ), Prefix.CITY, MessageType.ERROR, false); return false; } @@ -94,7 +101,10 @@ public static boolean canRenameRank(City city, Player player, String oldRankName */ public static boolean canDeleteRank(City city, Player player, String rankName) { if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.RANK)) { - MessagesManager.sendMessage(player, Component.text("Vous n'avez pas débloqué cette feature ! Veuillez améliorer votre ville au niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.RANK) + " !"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "messages.city.havent_unlocked_feature", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.RANK)).color(NamedTextColor.GOLD) + ), Prefix.CITY, MessageType.ERROR, false); return false; } diff --git a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankAssignMenu.java b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankAssignMenu.java index 1237c0b16..646962334 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankAssignMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankAssignMenu.java @@ -13,6 +13,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; @@ -34,7 +35,7 @@ public CityRankAssignMenu(Player owner, UUID playerUUID, City city) { @Override public @NotNull Component getName() { - return Component.text("Menu des Villes - Assigner un grade"); + return TranslationManager.translation("feature.city.rank.menu.assign.title"); } @Override @@ -64,7 +65,14 @@ public void onClose(InventoryCloseEvent event) { map.put(map.size(), new ItemBuilder(this, new ItemStack(rank.getIcon()), itemMeta -> { itemMeta.displayName(Component.text(rank.getName())); itemMeta.lore(List.of( - Component.text("§7Permissions : " + (rank.getPermissionsSet().isEmpty() ? "§cAucune" : "§a" + rank.getPermissionsSet().size() + " permission(s)")) + TranslationManager.translation( + "feature.city.rank.menu.assign.item.lore.count", + rank.getPermissionsSet().isEmpty() + ? TranslationManager.translation("feature.city.rank.menu.assign.item.lore.none") + .color(NamedTextColor.RED) + : Component.text(rank.getPermissionsSet().size()) + .color(NamedTextColor.GREEN) + ).color(NamedTextColor.GRAY) )); }).setOnClick(event -> { if (!city.hasPermission(getOwner().getUniqueId(), CityPermission.ASSIGN_RANKS)) { diff --git a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankDetailsMenu.java b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankDetailsMenu.java index 6bb857c75..25f373fb5 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankDetailsMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankDetailsMenu.java @@ -15,6 +15,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; @@ -51,8 +52,9 @@ public CityRankDetailsMenu(Player owner, City city, String rankName) { @Override public @NotNull Component getName() { - return city.isRankExists(oldRank) ? Component.text("Menu des détails du grade " + oldRank.getName()) : - Component.text("Menu de création du grade " + newRank.getName()); + return city.isRankExists(oldRank) + ? TranslationManager.translation("feature.city.rank.menu.details.title.edit", Component.text(oldRank.getName())) + : TranslationManager.translation("feature.city.rank.menu.details.title.create", Component.text(newRank.getName())); } @Override @@ -94,12 +96,10 @@ private Map createRank() { boolean canManageRanks = city.hasPermission(getOwner().getUniqueId(), CityPermission.MANAGE_RANKS); map.put(0, new ItemBuilder(this, Material.PAPER, itemMeta -> { - itemMeta.displayName(Component.text("§dInsérer la priorité du grade")); - itemMeta.lore(List.of( - Component.text("§7La priorité détermine l'ordre des grades"), - Component.text("§6§lUne priorité plus basse signifie un grade plus élevé"), - Component.text("§7Modifiable plus tard"), - Component.text("§7Priorité actuelle : §d" + this.newRank.getPriority()) + itemMeta.displayName(TranslationManager.translation("feature.city.rank.menu.details.priority.title.create")); + itemMeta.lore(TranslationManager.translationLore( + "feature.city.rank.menu.details.priority.lore.create", + Component.text(this.newRank.getPriority()).color(NamedTextColor.LIGHT_PURPLE) )); }).setOnClick(inventoryClickEvent -> { if (!canManageRanks) return; @@ -116,49 +116,50 @@ private Map createRank() { })); map.put(4, new ItemBuilder(this, Material.OAK_SIGN, itemMeta -> { - itemMeta.displayName(Component.text("§3Nom du grade")); - itemMeta.lore(List.of( - Component.text("§7Le nom du grade est donné lors de sa création"), - Component.text("§7Modifiable plus tard"), - Component.text("§7Nom actuel : §3" + (this.newRank.getName().isEmpty() ? "§oNon défini" : this.newRank.getName())) + itemMeta.displayName(TranslationManager.translation("feature.city.rank.menu.details.name.title")); + Component nameValue = this.newRank.getName().isEmpty() + ? TranslationManager.translation("feature.city.rank.menu.details.name.undefined") + .decoration(TextDecoration.ITALIC, true) + : Component.text(this.newRank.getName()).color(NamedTextColor.DARK_AQUA); + itemMeta.lore(TranslationManager.translationLore( + "feature.city.rank.menu.details.name.lore.create", + nameValue )); })); map.put(8, new ItemBuilder(this, this.newRank.getIcon(), itemMeta -> { - itemMeta.displayName(Component.text("§9Changer l'icône du grade")); - itemMeta.lore(List.of( - Component.text("§7Cliquez pour changer une icône"), - Component.text("§7Modifiable plus tard") - )); + itemMeta.displayName(TranslationManager.translation("feature.city.rank.menu.details.icon.title")); + itemMeta.lore(TranslationManager.translationLore("feature.city.rank.menu.details.icon.lore.create")); }).setOnClick(inventoryClickEvent -> new CityRankIconMenu(getOwner(), city, 0, oldRank, newRank, null).open()) .hide(getDataComponentType())); map.put(13, new ItemBuilder(this, Material.WRITABLE_BOOK, itemMeta -> { - itemMeta.displayName(Component.text("§bInsérer les permissions du grade")); - itemMeta.lore(List.of( - Component.text("§7Cliquez pour sélectionner les permissions"), - Component.text("§7Modifiables plus tard"), - Component.text("§7Permissions actuelles : §b" + (this.newRank.getPermissionsSet().isEmpty() ? "Aucune" : this.newRank.getPermissionsSet().size())) + itemMeta.displayName(TranslationManager.translation("feature.city.rank.menu.details.perms.title")); + Component permValue = this.newRank.getPermissionsSet().isEmpty() + ? TranslationManager.translation("feature.city.rank.menu.details.perms.none") + : Component.text(this.newRank.getPermissionsSet().size()); + itemMeta.lore(TranslationManager.translationLore( + "feature.city.rank.menu.details.perms.lore.create", + permValue.color(NamedTextColor.AQUA).decoration(TextDecoration.ITALIC, false) )); }).setOnClick(inventoryClickEvent -> new CityRankPermsMenu(getOwner(), oldRank, newRank, true, 0).open())); map.put(18, new ItemBuilder(this, CustomItemRegistry.getByName("omc_menus:refuse_btn").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§cAnnuler et supprimer")); - itemMeta.lore(List.of( - Component.text("§7Cliquez pour annuler la création du grade") - )); + itemMeta.displayName(TranslationManager.translation("feature.city.rank.menu.details.cancel_create.title")); + itemMeta.lore(TranslationManager.translationLore("feature.city.rank.menu.details.cancel_create.lore")); }).setOnClick(inventoryClickEvent -> getOwner().closeInventory())); if (canManageRanks) { map.put(26, new ItemBuilder(this, CustomItemRegistry.getByName("omc_menus:accept_btn").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§aCréer le grade")); - itemMeta.lore(List.of( - Component.text("§7Cliquez pour créer le grade avec les paramètres définis") - )); + itemMeta.displayName(TranslationManager.translation("feature.city.rank.menu.details.create.title")); + itemMeta.lore(TranslationManager.translationLore("feature.city.rank.menu.details.create.lore")); }).setOnClick(inventoryClickEvent -> { city.createRank(newRank.validate(getOwner())); getOwner().closeInventory(); - MessagesManager.sendMessage(getOwner(), Component.text("Grade " + this.newRank.getName() + " créé avec succès !"), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(getOwner(), TranslationManager.translation( + "feature.city.rank.create.success", + Component.text(this.newRank.getName()) + ), Prefix.CITY, MessageType.SUCCESS, false); })); } return map; @@ -176,15 +177,22 @@ private Map createRank() { boolean canManageRanks = city.hasPermission(player.getUniqueId(), CityPermission.MANAGE_RANKS) && CityRankCondition.canModifyRankPermissions(city, player, oldRank.getPriority()); - List lorePriority = new ArrayList<>(List.of(Component.text("§7Priorité actuelle : §d" + this.newRank.getPriority()))); + List lorePriority = new ArrayList<>(List.of( + TranslationManager.translation( + "feature.city.rank.menu.details.priority.lore.current", + Component.text(this.newRank.getPriority()).color(NamedTextColor.LIGHT_PURPLE) + ).color(NamedTextColor.GRAY).decoration(TextDecoration.ITALIC, false) + )); if (canManageRanks) { lorePriority.add(Component.empty()); - lorePriority.add(Component.text("§e§lCLIQUEZ GAUCHE POUR AJOUTER 1")); - lorePriority.add(Component.text("§e§lCLIQUEZ DROIT POUR RETIRER 1")); + lorePriority.add(TranslationManager.translation("feature.city.rank.menu.details.priority.lore.add") + .color(NamedTextColor.YELLOW).decorate(TextDecoration.BOLD)); + lorePriority.add(TranslationManager.translation("feature.city.rank.menu.details.priority.lore.remove") + .color(NamedTextColor.YELLOW).decorate(TextDecoration.BOLD)); } map.put(0, new ItemBuilder(this, Material.PAPER, itemMeta -> { - itemMeta.displayName(Component.text("§dPriorité")); + itemMeta.displayName(TranslationManager.translation("feature.city.rank.menu.details.priority.title.edit")); itemMeta.lore(lorePriority); }).setOnClick(inventoryClickEvent -> { if (!canManageRanks) return; @@ -198,16 +206,19 @@ private Map createRank() { List loreName = new ArrayList<>( List.of( - Component.text("§7Nom actuel : §3" + this.newRank.getName() - ) + TranslationManager.translation( + "feature.city.rank.menu.details.name.lore.current", + Component.text(this.newRank.getName()).decoration(TextDecoration.ITALIC, false).color(NamedTextColor.DARK_AQUA) + ).color(NamedTextColor.GRAY) )); if (canManageRanks) { loreName.add(Component.empty()); - loreName.add(Component.text("§e§lCLIQUEZ POUR MODIFIER LE NOM")); + loreName.add(TranslationManager.translation("feature.city.rank.menu.details.name.lore.edit") + .color(NamedTextColor.YELLOW).decorate(TextDecoration.BOLD)); } map.put(4, new ItemBuilder(this, Material.OAK_SIGN, itemMeta -> { - itemMeta.displayName(Component.text("§3Nom du grade")); + itemMeta.displayName(TranslationManager.translation("feature.city.rank.menu.details.name.title")); itemMeta.lore(loreName); }).setOnClick(inventoryClickEvent -> { if (!canManageRanks) return; @@ -217,16 +228,20 @@ private Map createRank() { List loreIcon = new ArrayList<>( List.of( - Component.text("§7Voici votre icone actuelle : §9").append(ItemUtils.getItemTranslation(newRank.getIcon()).color(NamedTextColor.BLUE).decoration(TextDecoration.ITALIC, false)) + TranslationManager.translation( + "feature.city.rank.menu.details.icon.lore.current", + ItemUtils.getItemTranslation(newRank.getIcon()).color(NamedTextColor.BLUE).decoration(TextDecoration.ITALIC, false) + ).color(NamedTextColor.GRAY) ) ); if (canManageRanks) { loreIcon.add(Component.empty()); - loreIcon.add(Component.text("§e§lCLIQUEZ POUR CHANGER l'ICONE")); + loreIcon.add(TranslationManager.translation("feature.city.rank.menu.details.icon.lore.edit") + .color(NamedTextColor.YELLOW).decorate(TextDecoration.BOLD)); } map.put(8, new ItemBuilder(this, this.newRank.getIcon(), itemMeta -> { - itemMeta.displayName(Component.text("§9Icône du grade")); + itemMeta.displayName(TranslationManager.translation("feature.city.rank.menu.details.icon.title")); itemMeta.lore(loreIcon); }).setOnClick(inventoryClickEvent -> { if (!canManageRanks) return; @@ -234,20 +249,29 @@ private Map createRank() { new CityRankIconMenu(getOwner(), city, 0, oldRank, newRank, null).open(); }).hide(getDataComponentType())); + Component permValue = this.newRank.getPermissionsSet().isEmpty() + ? TranslationManager.translation("feature.city.rank.menu.details.perms.none") + .decoration(TextDecoration.ITALIC, true) + : Component.text(this.newRank.getPermissionsSet().size()).color(NamedTextColor.AQUA); List lorePerm = new ArrayList<>( List.of( - Component.text("§7Permissions actuelles : §b" + (this.newRank.getPermissionsSet().isEmpty() ? "§oAucune" : this.newRank.getPermissionsSet().size())).decoration(TextDecoration.ITALIC, false) + TranslationManager.translation( + "feature.city.rank.menu.details.perms.lore.current", + permValue + ).color(NamedTextColor.GRAY).decoration(TextDecoration.ITALIC, false) ) ); lorePerm.add(Component.empty()); if (canManageRanks) { - lorePerm.add(Component.text("§e§lCLIQUEZ POUR GÉRER LES PERMISSIONS")); + lorePerm.add(TranslationManager.translation("feature.city.rank.menu.details.perms.lore.edit_manage") + .color(NamedTextColor.YELLOW).decorate(TextDecoration.BOLD)); } else { - lorePerm.add(Component.text("§e§lCLIQUEZ POUR VOIR LES PERMISSIONS")); + lorePerm.add(TranslationManager.translation("feature.city.rank.menu.details.perms.lore.edit_view") + .color(NamedTextColor.YELLOW).decorate(TextDecoration.BOLD)); } map.put(13, new ItemBuilder(this, Material.WRITABLE_BOOK, itemMeta -> { - itemMeta.displayName(Component.text("§bLes permissions du grade")); + itemMeta.displayName(TranslationManager.translation("feature.city.rank.menu.details.perms.title")); itemMeta.lore(lorePerm); }).setOnClick(inventoryClickEvent -> { if (!canManageRanks) new CityRankPermsMenu(getOwner(), oldRank, newRank, false, 0).open(); @@ -255,36 +279,31 @@ private Map createRank() { })); map.put(18, new ItemBuilder(this, CustomItemRegistry.getByName("omc_menus:refuse_btn").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§cAnnuler")); - itemMeta.lore(List.of( - Component.text("§7Cliquez pour annuler les modifications"), - Component.text("§4Aucune modification ne sera enregistrée") - )); + itemMeta.displayName(TranslationManager.translation("feature.city.rank.menu.details.cancel_edit.title")); + itemMeta.lore(TranslationManager.translationLore("feature.city.rank.menu.details.cancel_edit.lore")); }).setOnClick(inventoryClickEvent -> { new CityRanksMenu(getOwner(), city).open(); - MessagesManager.sendMessage(getOwner(), Component.text("Modifications annulées, aucune modification n'a été enregistrée."), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(getOwner(), TranslationManager.translation("feature.city.rank.update.cancelled"), Prefix.CITY, MessageType.SUCCESS, false); })); if (canManageRanks) { map.put(22, new ItemBuilder(this, CustomItemRegistry.getByName("omc_menus:minus_btn").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§cSupprimer le grade")); - itemMeta.lore(List.of( - Component.text("§7Cliquez pour supprimer ce grade"), - Component.text("§4Cette action est irréversible") - )); + itemMeta.displayName(TranslationManager.translation("feature.city.rank.menu.details.delete.title")); + itemMeta.lore(TranslationManager.translationLore("feature.city.rank.menu.details.delete.lore")); }).setOnClick(inventoryClickEvent -> CityRankAction.deleteRank(getOwner(), oldRank.getName()) )); map.put(26, new ItemBuilder(this, CustomItemRegistry.getByName("omc_menus:accept_btn").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§aEnregistrer les modifications")); - itemMeta.lore(List.of( - Component.text("§7Cliquez pour enregistrer les modifications du grade") - )); + itemMeta.displayName(TranslationManager.translation("feature.city.rank.menu.details.save.title")); + itemMeta.lore(TranslationManager.translationLore("feature.city.rank.menu.details.save.lore")); }).setOnClick(inventoryClickEvent -> { city.updateRank(this.oldRank, newRank.validate(getOwner())); new CityRanksMenu(getOwner(), city).open(); - MessagesManager.sendMessage(getOwner(), Component.text("Grade " + this.newRank.getName() + " modifié avec succès !"), Prefix.CITY, MessageType.SUCCESS, false); + MessagesManager.sendMessage(getOwner(), TranslationManager.translation( + "feature.city.rank.update.success", + Component.text(this.newRank.getName()) + ), Prefix.CITY, MessageType.SUCCESS, false); })); } return map; diff --git a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankIconMenu.java b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankIconMenu.java index 00ad50ca5..48728c55a 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankIconMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankIconMenu.java @@ -10,6 +10,7 @@ import fr.openmc.core.features.city.models.DBCityRank; import fr.openmc.core.registry.items.CustomItemRegistry; import fr.openmc.core.utils.ItemUtils; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Material; @@ -87,7 +88,7 @@ public List getItems() { items.add(new ItemBuilder(this, material, itemMeta -> { if (itemMeta == null) return; itemMeta.displayName(ItemUtils.getItemTranslation(material).decoration(TextDecoration.ITALIC, false)); - itemMeta.lore(List.of(Component.text("§7Cliquez pour sélectionner cette icône"))); + itemMeta.lore(List.of(TranslationManager.translation("feature.city.rank.menu.icon.item.lore"))); }).hide(getDataComponentType()) .setOnClick(inventoryClickEvent -> new CityRankDetailsMenu(getOwner(), city, oldRank, newRank.withIcon(material)).open())); } @@ -100,24 +101,24 @@ public List getItems() { public Map getButtons() { Map map = new HashMap<>(); map.put(45, new ItemBuilder(this, Material.BARRIER - , itemMeta -> itemMeta.displayName(Component.text("§cRetour")), true)); + , itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.back")), true)); if (hasPreviousPage()) map.put(48, new ItemBuilder(this, CustomStack.getInstance("_iainternal:icon_back_orange") - .getItemStack(), itemMeta -> itemMeta.displayName(Component.text("§cPage précédente"))).setOnClick(inventoryClickEvent -> { + .getItemStack(), itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.previous_page"))).setOnClick(inventoryClickEvent -> { new CityRankIconMenu(getOwner(), city, page - 1, oldRank, newRank, filter).open(); })); if (hasNextPage()) map.put(50, new ItemBuilder(this, CustomStack.getInstance("_iainternal:icon_next_orange") - .getItemStack(), itemMeta -> itemMeta.displayName(Component.text("§aPage suivante"))).setOnClick(inventoryClickEvent -> { + .getItemStack(), itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.next_page"))).setOnClick(inventoryClickEvent -> { new CityRankIconMenu(getOwner(), city, page + 1, oldRank, newRank, filter).open(); })); map.put(49, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_search").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§bRechercher une icône")); - itemMeta.lore(List.of(Component.text("§7Cliquez pour saisir un mot-clé"))); + itemMeta.displayName(TranslationManager.translation("feature.city.rank.menu.icon.search.title")); + itemMeta.lore(TranslationManager.translationLore("feature.city.rank.menu.icon.search.lore")); }).setOnClick(event -> { - DialogInput.send(getOwner(), Component.text("Entrez le nom d'un mot clé pour l'icône"), MAX_LENGTH, input -> { + DialogInput.send(getOwner(), TranslationManager.translation("feature.city.rank.menu.icon.search.prompt"), MAX_LENGTH, input -> { if (input == null) return; new CityRankIconMenu(getOwner(), city, 0, oldRank, newRank, input).open(); }); @@ -125,8 +126,8 @@ public Map getButtons() { if (filter != null && !filter.isEmpty()) { map.put(53, new ItemBuilder(this, Material.PAPER, itemMeta -> { - itemMeta.displayName(Component.text("§cEffacer le filtre")); - itemMeta.lore(List.of(Component.text("§e§lCLIQUEZ POUR EFFACER LE FILTRE"))); + itemMeta.displayName(TranslationManager.translation("feature.city.rank.menu.icon.clear.title")); + itemMeta.lore(TranslationManager.translationLore("feature.city.rank.menu.icon.clear.lore")); }).setOnClick(event -> { new CityRankIconMenu(getOwner(), city, 0, oldRank, newRank, null).open(); })); @@ -136,7 +137,7 @@ public Map getButtons() { @Override public @NotNull Component getName() { - return Component.text("Menu de choix d'une icône - Page " + (page + 1)); + return TranslationManager.translation("feature.city.rank.menu.icon.title", Component.text(page + 1)); } @Override diff --git a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankMemberMenu.java b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankMemberMenu.java index 0071e5224..1d841ee80 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankMemberMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankMemberMenu.java @@ -14,6 +14,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Material; import org.bukkit.OfflinePlayer; @@ -58,13 +59,21 @@ public List getItems() { String rankName = city.getRankName(uuid); List lore = new ArrayList<>(); - lore.add(Component.text("§7Grade : §e" + rankName).decoration(TextDecoration.ITALIC, false)); + lore.add(TranslationManager.translation( + "feature.city.rank.menu.members.item.rank", + Component.text(rankName).color(NamedTextColor.YELLOW) + ).color(NamedTextColor.GRAY).decoration(TextDecoration.ITALIC, false)); if (!city.hasPermission(player.getUniqueId(), CityPermission.OWNER)) { lore.add(Component.empty()); - lore.add(Component.text("§e§lCLIQUEZ ICI POUR ASSIGNER UN GRADE")); + lore.add(TranslationManager.translation("feature.city.rank.menu.members.item.click_assign") + .color(NamedTextColor.YELLOW).decorate(TextDecoration.BOLD)); } items.add(new ItemBuilder(this, SkullUtils.getPlayerSkull(uuid), itemMeta -> { - itemMeta.displayName(Component.text(player.getName() != null ? player.getName() : "§c§oJoueur inconnu").decoration(TextDecoration.ITALIC, false)); + Component displayName = player.getName() != null + ? Component.text(player.getName()) + : TranslationManager.translation("feature.city.rank.menu.members.item.name_unknown") + .color(NamedTextColor.RED).decoration(TextDecoration.ITALIC, true); + itemMeta.displayName(displayName.decoration(TextDecoration.ITALIC, false)); itemMeta.lore(lore); }).setOnClick(event -> { if (city.hasPermission(player.getUniqueId(), CityPermission.OWNER)) { @@ -94,9 +103,9 @@ public List getItems() { public Map getButtons() { Map map = new HashMap<>(); map.put(48, new ItemBuilder(this, CustomStack.getInstance("_iainternal:icon_back_orange") - .getItemStack(), itemMeta -> itemMeta.displayName(Component.text("§cPage précédente"))).setPreviousPageButton()); + .getItemStack(), itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.previous_page"))).setPreviousPageButton()); map.put(50, new ItemBuilder(this, CustomStack.getInstance("_iainternal:icon_next_orange") - .getItemStack(), itemMeta -> itemMeta.displayName(Component.text("§aPage suivante"))).setNextPageButton()); + .getItemStack(), itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.next_page"))).setNextPageButton()); return map; } @@ -112,7 +121,7 @@ public int getSizeOfItems() { @Override public @NotNull Component getName() { - return Component.text("Menu du choix des membres - Grades"); + return TranslationManager.translation("feature.city.rank.menu.members.title"); } @Override diff --git a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankPermsMenu.java b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankPermsMenu.java index 696475765..53d875368 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankPermsMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankPermsMenu.java @@ -16,6 +16,8 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; @@ -66,10 +68,15 @@ public List getItems() { boolean hasPerm = this.newRank.getPermissionsSet().contains(permission); ItemBuilder itemBuilder = new ItemBuilder(this, permission.getIcon(), itemMeta -> { itemMeta.setEnchantmentGlintOverride(hasPerm); - itemMeta.displayName(Component.text((hasPerm ? "§cRetirer " : "§aAjouter ") + permission.getDisplayName())); - + itemMeta.displayName(TranslationManager.translation( + hasPerm ? "feature.city.rank.menu.perms.item.remove" : "feature.city.rank.menu.perms.item.add", + permission.getDisplayName() + ).color(hasPerm ? NamedTextColor.RED : NamedTextColor.GREEN).decoration(TextDecoration.ITALIC, false)); + List lore = List.of( - Component.text("§e§lCLIQUEZ POUR " + (hasPerm ? "RETIRER" : "AJOUTER") + " CETTE PERMISSION") + TranslationManager.translation( + hasPerm ? "feature.city.rank.menu.perms.item.lore.remove" : "feature.city.rank.menu.perms.item.lore.add" + ).color(NamedTextColor.YELLOW).decorate(TextDecoration.BOLD) ); itemMeta.lore(lore); }).setOnClick(inventoryClickEvent -> { @@ -92,30 +99,27 @@ public Map getButtons() { Map map = new HashMap<>(); map.put(45, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_cancel").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§aRetour")); - itemMeta.lore(List.of(Component.text("§7Cliquez pour retourner au menu précédent"))); + itemMeta.displayName(TranslationManager.translation("messages.menus.back")); + itemMeta.lore(List.of(TranslationManager.translation("messages.menus.back_lore"))); }).setOnClick(inventoryClickEvent -> new CityRankDetailsMenu(getOwner(), city, oldRank, newRank).open())); if (hasPreviousPage()) { map.put(48, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_back_orange").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§aPage précédente")); - itemMeta.lore(List.of(Component.text("§7Cliquez pour aller à la page précédente"))); + itemMeta.displayName(TranslationManager.translation("messages.menus.previous_page")); + itemMeta.lore(List.of(TranslationManager.translation("messages.menus.previous_page_lore"))); }).setOnClick(inventoryClickEvent -> new CityRankPermsMenu(getOwner(), oldRank, newRank, canEdit, page - 1).open())); } if (hasNextPage()) { map.put(50, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_next_orange").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§aPage suivante")); - itemMeta.lore(List.of(Component.text("§7Cliquez pour aller à la page suivante"))); + itemMeta.displayName(TranslationManager.translation("messages.menus.next_page")); + itemMeta.lore(List.of(TranslationManager.translation("messages.menus.next_page_lore"))); }).setOnClick(inventoryClickEvent -> new CityRankPermsMenu(getOwner(), oldRank, newRank, canEdit, page + 1).open())); } if (canEdit) { map.put(53, new ItemBuilder(this, Material.GOLD_BLOCK, itemMeta -> { - itemMeta.displayName(Component.text("§6Gérer toutes les permissions du grade")); - itemMeta.lore(List.of( - Component.text("§cClique-gauche pour tout retirer"), - Component.text("§aClique-droit pour tout ajouter") - )); + itemMeta.displayName(TranslationManager.translation("feature.city.rank.menu.perms.manage_all.title")); + itemMeta.lore(TranslationManager.translationLore("feature.city.rank.menu.perms.manage_all.lore")); }).setOnClick(inventoryClickEvent -> { if (inventoryClickEvent.isLeftClick()) CityRankCommands.removeAllPermissions(getOwner(), newRank); else if (inventoryClickEvent.isRightClick()) CityRankCommands.addAllPermissions(getOwner(), newRank); @@ -129,7 +133,7 @@ public Map getButtons() { @Override public @NotNull Component getName() { - return Component.text("Permissions du grade " + this.newRank.getName()); + return TranslationManager.translation("feature.city.rank.menu.perms.title", Component.text(this.newRank.getName())); } @Override diff --git a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRanksMenu.java b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRanksMenu.java index 2698311ed..e8f532a51 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRanksMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRanksMenu.java @@ -10,7 +10,9 @@ import fr.openmc.core.features.city.sub.rank.CityRankAction; import fr.openmc.core.features.city.sub.rank.CityRankCondition; import fr.openmc.core.registry.items.CustomItemRegistry; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -18,7 +20,10 @@ import org.bukkit.event.inventory.InventoryCloseEvent; import org.jetbrains.annotations.NotNull; -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; import static fr.openmc.api.menulib.utils.ItemUtils.getDataComponentType; @@ -33,7 +38,7 @@ public CityRanksMenu(Player owner, City city) { @Override public @NotNull Component getName() { - return Component.text("Menu de la Ville - Grades"); + return TranslationManager.translation("feature.city.rank.menu.list.title"); } @Override @@ -67,12 +72,25 @@ public void onClose(InventoryCloseEvent event) { map.put(i, new ItemBuilder(this, icon, itemMeta -> { - itemMeta.displayName(Component.text("§eGrade " + rankName).decoration(TextDecoration.ITALIC, false)); + itemMeta.displayName(TranslationManager.translation( + "feature.city.rank.menu.list.rank.title", + Component.text(rankName).color(NamedTextColor.YELLOW) + ).color(NamedTextColor.YELLOW).decoration(TextDecoration.ITALIC, false)); itemMeta.lore(List.of( - Component.text("§7Priorité : §d" + priority).decoration(TextDecoration.ITALIC, false), - Component.text("§7Permissions : §b" + rank.getPermissionsSet().size()).decoration(TextDecoration.ITALIC, false), + TranslationManager.translation( + "feature.city.rank.menu.list.rank.lore.priority", + Component.text(priority).color(NamedTextColor.LIGHT_PURPLE) + ).color(NamedTextColor.GRAY).decoration(TextDecoration.ITALIC, false), + TranslationManager.translation( + "feature.city.rank.menu.list.rank.lore.permissions", + Component.text(rank.getPermissionsSet().size()).color(NamedTextColor.AQUA) + ).color(NamedTextColor.GRAY).decoration(TextDecoration.ITALIC, false), Component.empty(), - Component.text(canManageRanks && CityRankCondition.canModifyRankPermissions(city, getOwner(), priority) ? "§e§lCLIQUEZ POUR MODIFIER LE ROLE" : "§e§lCLIQUEZ POUR S'Y INFORMER") + TranslationManager.translation( + canManageRanks && CityRankCondition.canModifyRankPermissions(city, getOwner(), priority) + ? "feature.city.rank.menu.list.rank.lore.click_edit" + : "feature.city.rank.menu.list.rank.lore.click_info" + ).color(NamedTextColor.YELLOW).decorate(TextDecoration.BOLD) )); } ).setOnClick(inventoryClickEvent -> new CityRankDetailsMenu(player, city, rank).open()) @@ -84,25 +102,19 @@ public void onClose(InventoryCloseEvent event) { map.put(18, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.displayName(Component.text("§cRetour")); - itemMeta.lore(List.of(Component.text("§7Cliquez pour revenir en arrière"))); + itemMeta.displayName(TranslationManager.translation("messages.menus.back")); + itemMeta.lore(List.of(TranslationManager.translation("messages.menus.back_lore"))); }).setOnClick(inventoryClickEvent -> new CityMenu(getOwner()).open())); if (canAssignRanks) { - List loreAssignRanks = new ArrayList<>(); - if (city.getRanks().isEmpty()) { - loreAssignRanks.add(Component.text("§cAucun grade n'a été créé dans cette ville.")); - loreAssignRanks.add(Component.text("§7Créez un grade pour pouvoir l'assigner aux membres.")); - } else { - loreAssignRanks.add(Component.text("§fVous pouvez assigner des grades aux membres de la ville.")); - loreAssignRanks.add(Component.empty()); - loreAssignRanks.add(Component.text("§e§lCLIQUEZ POUR ASSIGNER UN GRADE")); - } - + List loreAssignRanks = city.getRanks().isEmpty() + ? TranslationManager.translationLore("feature.city.rank.menu.list.assign.lore.empty") + : TranslationManager.translationLore("feature.city.rank.menu.list.assign.lore.available"); + map.put(22, new ItemBuilder(this, Material.FEATHER, itemMeta -> { - itemMeta.displayName(Component.text("§aAssigner des grades")); + itemMeta.displayName(TranslationManager.translation("feature.city.rank.menu.list.assign.title")); itemMeta.lore(loreAssignRanks); }).setOnClick(inventoryClickEvent -> { if (city.getRanks().isEmpty()) return; @@ -113,15 +125,11 @@ public void onClose(InventoryCloseEvent event) { } if (canManageRanks) { - List loreCreateRank = List.of( - Component.text("§fVous pouvez faire un grade, §aun ensemble de permission !"), - Component.empty(), - Component.text("§e§lCLIQUEZ POUR CREER UN GRADE") - ); - + List loreCreateRank = TranslationManager.translationLore("feature.city.rank.menu.list.create.lore"); + map.put(26, new ItemBuilder(this, CustomItemRegistry.getByName("omc_menus:plus_btn").getBest(), itemMeta -> { - itemMeta.displayName(Component.text("§aAjouter un grade")); + itemMeta.displayName(TranslationManager.translation("feature.city.rank.menu.list.create.title")); itemMeta.lore(loreCreateRank); }).setOnClick(inventoryClickEvent -> CityRankAction.beginCreateRank(player)) ); diff --git a/src/main/resources/translations/lang.properties b/src/main/resources/translations/lang.properties index 5c4a60636..e218c7227 100644 --- a/src/main/resources/translations/lang.properties +++ b/src/main/resources/translations/lang.properties @@ -796,6 +796,96 @@ feature.city.grade.max_reach=Le nombre maximum de grades a été atteint, t feature.city.grade.already_exist=Ce grade existe déjà. feature.city.grade.remove_grade=Vous avez retiré le grade %1$s de %2$s feature.city.grade.assign_grade=Vous avez assigné le grade %1$s à %2$s +feature.city.rank.menu.list.title=Menu de la Ville - Grades +feature.city.rank.menu.list.rank.title=Grade %1$s +feature.city.rank.menu.list.rank.lore.priority=Priorité : %1$s +feature.city.rank.menu.list.rank.lore.permissions=Permissions : %1$s +feature.city.rank.menu.list.rank.lore.click_edit=CLIQUEZ POUR MODIFIER LE ROLE +feature.city.rank.menu.list.rank.lore.click_info=CLIQUEZ POUR S'Y INFORMER +feature.city.rank.menu.list.assign.title=Assigner des grades +feature.city.rank.menu.list.assign.lore.empty=Aucun grade n'a été créé dans cette ville. \ +
Créez un grade pour pouvoir l'assigner aux membres. +feature.city.rank.menu.list.assign.lore.available=Vous pouvez assigner des grades aux membres de la ville. \ +
\ +
CLIQUEZ POUR ASSIGNER UN GRADE +feature.city.rank.menu.list.create.title=Ajouter un grade +feature.city.rank.menu.list.create.lore=Vous pouvez faire un grade, un ensemble de permissions ! \ +
\ +
CLIQUEZ POUR CREER UN GRADE +feature.city.rank.menu.details.title.edit=Menu des détails du grade %1$s +feature.city.rank.menu.details.title.create=Menu de création du grade %1$s +feature.city.rank.menu.details.priority.title.create=Insérer la priorité du grade +feature.city.rank.menu.details.priority.lore.create=La priorité détermine l'ordre des grades \ +
Une priorité plus basse signifie un grade plus élevé \ +
Modifiable plus tard \ +
Priorité actuelle : %1$s +feature.city.rank.menu.details.name.title=Nom du grade +feature.city.rank.menu.details.name.undefined=Non défini +feature.city.rank.menu.details.name.lore.create=Le nom du grade est donné lors de sa création \ +
Modifiable plus tard \ +
Nom actuel : %1$s +feature.city.rank.menu.details.icon.title=Icône du grade +feature.city.rank.menu.details.icon.lore.create=Cliquez pour changer une icône \ +
Modifiable plus tard +feature.city.rank.menu.details.perms.title=Les permissions du grade +feature.city.rank.menu.details.perms.none=Aucune +feature.city.rank.menu.details.perms.lore.create=Cliquez pour sélectionner les permissions \ +
Modifiables plus tard \ +
Permissions actuelles : %1$s +feature.city.rank.menu.details.cancel_create.title=Annuler et supprimer +feature.city.rank.menu.details.cancel_create.lore=Cliquez pour annuler la création du grade +feature.city.rank.menu.details.create.title=Créer le grade +feature.city.rank.menu.details.create.lore=Cliquez pour créer le grade avec les paramètres définis +feature.city.rank.menu.details.priority.lore.current=Priorité actuelle : %1$s +feature.city.rank.menu.details.priority.lore.add=CLIQUEZ GAUCHE POUR AJOUTER 1 +feature.city.rank.menu.details.priority.lore.remove=CLIQUEZ DROIT POUR RETIRER 1 +feature.city.rank.menu.details.priority.title.edit=Priorité +feature.city.rank.menu.details.name.lore.current=Nom actuel : %1$s +feature.city.rank.menu.details.name.lore.edit=CLIQUEZ POUR MODIFIER LE NOM +feature.city.rank.menu.details.icon.lore.current=Voici votre icone actuelle : %1$s +feature.city.rank.menu.details.icon.lore.edit=CLIQUEZ POUR CHANGER L'ICONE +feature.city.rank.menu.details.perms.lore.current=Permissions actuelles : %1$s +feature.city.rank.menu.details.perms.lore.edit_manage=CLIQUEZ POUR GÉRER LES PERMISSIONS +feature.city.rank.menu.details.perms.lore.edit_view=CLIQUEZ POUR VOIR LES PERMISSIONS +feature.city.rank.menu.details.cancel_edit.title=Annuler +feature.city.rank.menu.details.cancel_edit.lore=Cliquez pour annuler les modifications \ +
Aucune modification ne sera enregistrée +feature.city.rank.menu.details.delete.title=Supprimer le grade +feature.city.rank.menu.details.delete.lore=Cliquez pour supprimer ce grade \ +
Cette action est irréversible +feature.city.rank.menu.details.save.title=Enregistrer les modifications +feature.city.rank.menu.details.save.lore=Cliquez pour enregistrer les modifications du grade +feature.city.rank.menu.perms.item.add=Ajouter %1$s +feature.city.rank.menu.perms.item.remove=Retirer %1$s +feature.city.rank.menu.perms.item.lore.add=CLIQUEZ POUR AJOUTER CETTE PERMISSION +feature.city.rank.menu.perms.item.lore.remove=CLIQUEZ POUR RETIRER CETTE PERMISSION +feature.city.rank.menu.perms.manage_all.title=Gérer toutes les permissions du grade +feature.city.rank.menu.perms.manage_all.lore=Clique-gauche pour tout retirer \ +
Clique-droit pour tout ajouter +feature.city.rank.menu.perms.title=Permissions du grade %1$s +feature.city.rank.menu.icon.item.lore=Cliquez pour sélectionner cette icône +feature.city.rank.menu.icon.search.title=Rechercher une icône +feature.city.rank.menu.icon.search.lore=Cliquez pour saisir un mot-clé +feature.city.rank.menu.icon.search.prompt=Entrez le nom d'un mot clé pour l'icône +feature.city.rank.menu.icon.clear.title=Effacer le filtre +feature.city.rank.menu.icon.clear.lore=CLIQUEZ POUR EFFACER LE FILTRE +feature.city.rank.menu.icon.title=Menu de choix d'une icône - Page %1$s +feature.city.rank.menu.members.item.rank=Grade : %1$s +feature.city.rank.menu.members.item.click_assign=CLIQUEZ ICI POUR ASSIGNER UN GRADE +feature.city.rank.menu.members.item.name_unknown=Joueur inconnu +feature.city.rank.menu.members.title=Menu du choix des membres - Grades +feature.city.rank.menu.assign.title=Menu des Villes - Assigner un grade +feature.city.rank.menu.assign.item.lore.count=Permissions : %1$s permission(s) +feature.city.rank.menu.assign.item.lore.none=Aucune +feature.city.rank.prompt.create=Entrez le nom de votre grade +feature.city.rank.prompt.rename=Entrez le nouveau nom de votre grade +feature.city.rank.rename.success=Le nom du grade a été mis à jour : %1$s → %2$s +feature.city.rank.create.success=Grade %1$s créé avec succès ! +feature.city.rank.update.cancelled=Modifications annulées, aucune modification n'a été enregistrée. +feature.city.rank.update.success=Grade %1$s modifié avec succès ! +feature.city.rank.delete.confirm.lore=Cette action est irréversible +feature.city.rank.delete.success=Grade %1$s supprimé avec succès ! +feature.city.rank.delete.error=Impossible de supprimer le grade : %1$s # - Mascots # Menus From e5721ef8b26de4dd2f251ac2ef672a29d3796904 Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Sat, 28 Mar 2026 11:49:23 +0100 Subject: [PATCH 15/20] make all args per default non italic --- .../utils/messages/TranslationManager.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/fr/openmc/core/utils/messages/TranslationManager.java b/src/main/java/fr/openmc/core/utils/messages/TranslationManager.java index 5f2c01bf5..75dd3231c 100644 --- a/src/main/java/fr/openmc/core/utils/messages/TranslationManager.java +++ b/src/main/java/fr/openmc/core/utils/messages/TranslationManager.java @@ -157,11 +157,12 @@ private static String getFallbackTranslation(String key) { public static Component translation(String key, ComponentLike... args) { String fallback = getFallbackTranslation(key); + ComponentLike[] normalizedArgs = normalizeComponent(args); return Component.translatable( key, fallback, - args + normalizedArgs ); } @@ -172,7 +173,8 @@ public static String translationString(String key, ComponentLike... args) { public static List translationLore(String key, ComponentLike... componentsArgs) { String fallback = fallbackTranslations.getOrDefault(key, key); - TranslatableComponent translatable = Component.translatable(key, componentsArgs).fallback(fallback); + ComponentLike[] normalizedArgs = normalizeComponent(componentsArgs); + TranslatableComponent translatable = Component.translatable(key, normalizedArgs).fallback(fallback); String legacy = LegacyComponentSerializer.legacySection().serialize(translatable); @@ -186,4 +188,20 @@ public static List translationLore(String key, ComponentLike... compo return lore; } + + private static ComponentLike[] normalizeComponent(ComponentLike... args) { + if (args == null || args.length == 0) return new ComponentLike[0]; + + ComponentLike[] normalized = new ComponentLike[args.length]; + for (int i = 0; i < args.length; i++) { + ComponentLike like = args[i]; + if (like == null) { + normalized[i] = Component.empty(); + continue; + } + Component component = like.asComponent(); + normalized[i] = component.decorationIfAbsent(TextDecoration.ITALIC, TextDecoration.State.FALSE); + } + return normalized; + } } From ce23ebbfe757dc267adb2debd1dc9ea2f594d0a7 Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Sat, 28 Mar 2026 12:51:53 +0100 Subject: [PATCH 16/20] fix https://github.com/ServerOpenMC/PluginV2/issues/1060 pour de bon --- .../city/sub/mascots/listeners/MascotsDamageListener.java | 6 +++--- .../core/features/city/sub/mascots/utils/MascotUtils.java | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsDamageListener.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsDamageListener.java index 956d70fe2..3b9079377 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsDamageListener.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsDamageListener.java @@ -21,6 +21,7 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; @@ -38,11 +39,10 @@ public class MascotsDamageListener implements Listener { EntityDamageEvent.DamageCause.LIGHTNING, EntityDamageEvent.DamageCause.BLOCK_EXPLOSION, EntityDamageEvent.DamageCause.ENTITY_EXPLOSION, - EntityDamageEvent.DamageCause.FIRE_TICK, - EntityDamageEvent.DamageCause.ENTITY_ATTACK // Fix le fait de pouvoir attaquer sa propre mascotte + EntityDamageEvent.DamageCause.FIRE_TICK ); - @EventHandler + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) void onMascotDamageCaused(EntityDamageEvent e) { if (!(e.getEntity() instanceof LivingEntity entity)) return; if (!MascotUtils.canBeAMascot(entity)) return; diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/utils/MascotUtils.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/utils/MascotUtils.java index 3068b71d0..e5fa022af 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/utils/MascotUtils.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/utils/MascotUtils.java @@ -61,6 +61,8 @@ public static boolean canBeAMascot(Entity entity) { } public static void updateDisplayName(LivingEntity entityMascot, Mascot mascot, double damage) { + double newHealth = Math.floor(entityMascot.getHealth()); + entityMascot.setHealth(newHealth); AttributeInstance maxHealthInst = entityMascot.getAttribute(Attribute.MAX_HEALTH); if (maxHealthInst == null) return; double maxHealth = maxHealthInst.getValue(); @@ -76,7 +78,6 @@ public static void updateDisplayName(LivingEntity entityMascot, Mascot mascot, d healthAfterDamage, maxHealth )); - entityMascot.setHealth(healthAfterDamage); } } From b82850aa0079bd231b22c4406a0316c4bccbaf62 Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Sat, 28 Mar 2026 14:17:52 +0100 Subject: [PATCH 17/20] add colorIfAbsent --- .../city/sub/mascots/MascotsManager.java | 34 +++++++++++++++++++ .../utils/messages/TranslationManager.java | 5 +-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/MascotsManager.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/MascotsManager.java index 96541680f..a1969c654 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/MascotsManager.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/MascotsManager.java @@ -61,6 +61,7 @@ public static void init() { mascotsKey = new NamespacedKey(OMCPlugin.getInstance(), "mascotsKey"); loadMascots(); + restoreMascotsAfterRestart(); OMCPlugin.registerEvents( new MascotsInteractionListener(), @@ -309,4 +310,37 @@ public static Component getDeadMascotName() { return TranslationManager.translation("feature.city.mascots.name.dead"); } + private static void restoreMascotsAfterRestart() { + for (Mascot mascot : mascotsByCityUUID.values()) { + City city = CityManager.getCity(mascot.getCityUUID()); + if (city == null) continue; + + if (mascot.isAlive()) continue; + if (DynamicCooldownManager.getRemaining(city.getUniqueId(), "city:immunity") > 0) continue; + + LivingEntity entity = (LivingEntity) mascot.getEntity(); + if (entity != null) { + entity.setGlowing(false); + var maxHealth = entity.getAttribute(Attribute.MAX_HEALTH); + if (maxHealth != null) { + entity.customName(getAliveMascotName( + city.getName(), + entity.getHealth(), + maxHealth.getValue() + )); + entity.setCustomNameVisible(true); + } + } + + mascot.setImmunity(false); + mascot.setAlive(true); + + try { + mascotsDao.createOrUpdate(mascot); + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + } + } diff --git a/src/main/java/fr/openmc/core/utils/messages/TranslationManager.java b/src/main/java/fr/openmc/core/utils/messages/TranslationManager.java index 75dd3231c..c3a69a101 100644 --- a/src/main/java/fr/openmc/core/utils/messages/TranslationManager.java +++ b/src/main/java/fr/openmc/core/utils/messages/TranslationManager.java @@ -8,6 +8,7 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.ComponentLike; import net.kyori.adventure.text.TranslatableComponent; +import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; @@ -163,7 +164,7 @@ public static Component translation(String key, ComponentLike... args) { key, fallback, normalizedArgs - ); + ).decorationIfAbsent(TextDecoration.ITALIC, TextDecoration.State.FALSE); } public static String translationString(String key, ComponentLike... args) { @@ -200,7 +201,7 @@ private static ComponentLike[] normalizeComponent(ComponentLike... args) { continue; } Component component = like.asComponent(); - normalized[i] = component.decorationIfAbsent(TextDecoration.ITALIC, TextDecoration.State.FALSE); + normalized[i] = component.decorationIfAbsent(TextDecoration.ITALIC, TextDecoration.State.FALSE).colorIfAbsent(NamedTextColor.WHITE); } return normalized; } From d737ffca26118bd39bc9ec8bc545ca8dc34ed5a8 Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Sat, 28 Mar 2026 14:52:39 +0100 Subject: [PATCH 18/20] set priority to HIGHEST --- .../city/sub/mascots/listeners/MascotsDamageListener.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsDamageListener.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsDamageListener.java index 3b9079377..35afef13e 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsDamageListener.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/listeners/MascotsDamageListener.java @@ -17,6 +17,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -42,7 +43,7 @@ public class MascotsDamageListener implements Listener { EntityDamageEvent.DamageCause.FIRE_TICK ); - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) void onMascotDamageCaused(EntityDamageEvent e) { if (!(e.getEntity() instanceof LivingEntity entity)) return; if (!MascotUtils.canBeAMascot(entity)) return; @@ -152,7 +153,7 @@ void onMascotTakeDamage(EntityDamageByEntityEvent e) { MessagesManager.sendMessage(player, TranslationManager.translation( "feature.city.mascots.damage.error.not_in_war", - Component.text(cityEnemy.getName()) + Component.text(cityEnemy.getName()).color(NamedTextColor.RED) ), Prefix.CITY, MessageType.INFO, false); e.setCancelled(true); From 5d6e3bdae155505793f9a52a3b155bccb6b5b173 Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Sat, 28 Mar 2026 16:51:52 +0100 Subject: [PATCH 19/20] make uniqueID not primary key for cooldowns ... Merci piquel chips --- .../openmc/api/cooldown/DynamicCooldownManager.java | 12 ++++++++++-- src/main/java/fr/openmc/core/OMCPlugin.java | 8 +------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/main/java/fr/openmc/api/cooldown/DynamicCooldownManager.java b/src/main/java/fr/openmc/api/cooldown/DynamicCooldownManager.java index 5497da7df..a7dc368e0 100644 --- a/src/main/java/fr/openmc/api/cooldown/DynamicCooldownManager.java +++ b/src/main/java/fr/openmc/api/cooldown/DynamicCooldownManager.java @@ -26,9 +26,11 @@ public class DynamicCooldownManager { */ @DatabaseTable(tableName = "cooldowns") public static class Cooldown { - @DatabaseField(id = true) + @DatabaseField(generatedId = true) + private int id; + @DatabaseField(uniqueCombo = true, canBeNull = false) private UUID uniqueId; - @DatabaseField(canBeNull = false) + @DatabaseField(uniqueCombo = true, canBeNull = false) private String group; @DatabaseField(canBeNull = false) private long duration; @@ -126,6 +128,12 @@ public static void saveCooldowns() { } catch (SQLException e) { throw new RuntimeException(e); } + } else { + try { + cooldownDao.delete(cooldown); + } catch (SQLException e) { + throw new RuntimeException(e); + } } }); }); diff --git a/src/main/java/fr/openmc/core/OMCPlugin.java b/src/main/java/fr/openmc/core/OMCPlugin.java index 49f76ed60..2dab2fdaf 100644 --- a/src/main/java/fr/openmc/core/OMCPlugin.java +++ b/src/main/java/fr/openmc/core/OMCPlugin.java @@ -46,12 +46,8 @@ import fr.openmc.core.utils.ShutUpOrmLite; import fr.openmc.core.utils.database.DatabaseManager; import fr.openmc.core.utils.errors.ErrorReporter; -import fr.openmc.core.utils.messages.TranslationManager; import io.papermc.paper.datapack.Datapack; import lombok.Getter; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.minimessage.MiniMessage; -import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.bukkit.Bukkit; import org.bukkit.Particle; import org.bukkit.configuration.file.FileConfiguration; @@ -62,7 +58,6 @@ import org.slf4j.Logger; import java.io.File; -import java.util.Locale; public class OMCPlugin extends JavaPlugin { @Getter @@ -143,8 +138,6 @@ public void onEnable() { HalloweenManager.init(); MotdUtils.init(); - DynamicCooldownManager.init(); - MascotsManager.init(); PlayerSettingsManager.loadAllPlayerSettings(); @@ -162,6 +155,7 @@ public void loadWithItemsAdder() { MilestonesManager.init(); QuestsManager.init(); CityManager.init(); + DynamicCooldownManager.init(); ContestManager.init(); DreamManager.init(); MultiBlockManager.init(); From f991eb35729cb6c74e5a806ff96fc6d993bbc2c3 Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Sat, 28 Mar 2026 18:49:06 +0100 Subject: [PATCH 20/20] translation for sub.war + fixes mascots + fixes color message --- .../city/actions/CityChangeAction.java | 4 +- .../core/features/city/menu/CityTopMenu.java | 6 +- .../city/menu/list/CityListDetailsMenu.java | 2 +- .../features/city/menu/list/CityListMenu.java | 6 +- .../city/menu/main/buttons/ManageButton.java | 8 +- .../city/menu/main/buttons/MayorButton.java | 6 +- .../city/menu/main/buttons/TypeButton.java | 3 + .../city/sub/mascots/MascotsManager.java | 34 ---- .../city/sub/mascots/menu/MascotMenu.java | 2 +- .../sub/mascots/menu/MascotsDeadMenu.java | 2 +- .../city/sub/mayor/menu/MayorMandateMenu.java | 2 +- .../city/sub/mayor/menu/npc/MayorNpcMenu.java | 2 +- .../features/city/sub/mayor/models/Mayor.java | 6 +- .../mayor/perks/event/ImpotCollection.java | 2 +- .../city/sub/rank/CityRankAction.java | 9 +- .../sub/rank/menus/CityRankDetailsMenu.java | 14 +- .../city/sub/rank/menus/CityRankIconMenu.java | 6 +- .../sub/rank/menus/CityRankPermsMenu.java | 5 +- .../core/features/city/sub/war/War.java | 46 +++-- .../features/city/sub/war/WarManager.java | 148 +++++++++------ .../city/sub/war/actions/WarActions.java | 72 ++++--- .../sub/war/commands/AdminWarCommand.java | 3 +- .../city/sub/war/commands/WarCommand.java | 33 ++-- .../sub/war/listeners/TntPlaceListener.java | 8 +- .../city/sub/war/menu/MoreInfoMenu.java | 49 ++--- .../city/sub/war/menu/main/MainWarMenu.java | 54 ++++-- .../sub/war/menu/main/WarCityDetailsMenu.java | 55 ++++-- .../sub/war/menu/main/WarPlayerListMenu.java | 22 +-- .../selection/WarChooseParticipantsMenu.java | 48 +++-- .../war/menu/selection/WarChooseSizeMenu.java | 30 +-- .../core/utils/messages/MessagesManager.java | 18 +- .../resources/translations/lang.properties | 179 +++++++++++++++++- 32 files changed, 586 insertions(+), 298 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/city/actions/CityChangeAction.java b/src/main/java/fr/openmc/core/features/city/actions/CityChangeAction.java index 4618a0dfc..4ffcc3743 100644 --- a/src/main/java/fr/openmc/core/features/city/actions/CityChangeAction.java +++ b/src/main/java/fr/openmc/core/features/city/actions/CityChangeAction.java @@ -137,8 +137,8 @@ public static void finishChange(Player sender) { Component inPeace = TranslationManager.translation("feature.city.type.in_peace").color(NamedTextColor.GREEN); Component inWar = TranslationManager.translation("feature.city.type.in_war").color(NamedTextColor.RED); - Component cityTypeActuel = city.getType() == CityType.WAR ? inWar : inPeace; - Component cityTypeAfter = city.getType() == CityType.WAR ? inPeace : inWar; + Component cityTypeActuel = city.getType() == CityType.WAR ? inPeace : inWar; + Component cityTypeAfter = city.getType() == CityType.WAR ? inWar : inPeace; MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.type.change_type_success", cityTypeActuel, cityTypeAfter), diff --git a/src/main/java/fr/openmc/core/features/city/menu/CityTopMenu.java b/src/main/java/fr/openmc/core/features/city/menu/CityTopMenu.java index 0bff183a0..85dcdde62 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/CityTopMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/CityTopMenu.java @@ -95,13 +95,13 @@ public List getItems() { Component powerComponent = Component.text(city.getPowerPoints()).color(NamedTextColor.RED); if (MayorManager.phaseMayor == 2 && FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.MAYOR)) { - String mayorCity = city.getMayor() == null - ? TranslationManager.translationString("messages.menus.none") + Component mayorName = city.getMayor() == null + ? TranslationManager.translation("messages.menus.none") : city.getMayor().getName(); NamedTextColor mayorColor = (city.getMayor() == null || city.getMayor().getMayorColor() == null) ? NamedTextColor.WHITE : city.getMayor().getMayorColor(); - Component mayorComponent = Component.text(mayorCity).color(mayorColor).decoration(TextDecoration.ITALIC, false); + Component mayorComponent = mayorName.color(mayorColor).decoration(TextDecoration.ITALIC, false); cityLore.addAll(TranslationManager.translationLore( "feature.city.menus.top.item.lore.with_mayor", ownerComponent, diff --git a/src/main/java/fr/openmc/core/features/city/menu/list/CityListDetailsMenu.java b/src/main/java/fr/openmc/core/features/city/menu/list/CityListDetailsMenu.java index f55c6740a..588ce2ff7 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/list/CityListDetailsMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/list/CityListDetailsMenu.java @@ -128,7 +128,7 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { itemMeta.displayName( TranslationManager.translation( "feature.city.menus.list.details.mayor", - Component.text(mayor.getName()).color(this.city.getMayor().getMayorColor()).decoration(TextDecoration.ITALIC, false) + mayor.getName().color(this.city.getMayor().getMayorColor()).decoration(TextDecoration.ITALIC, false) ) ); itemMeta.lore(loreMayor); diff --git a/src/main/java/fr/openmc/core/features/city/menu/list/CityListMenu.java b/src/main/java/fr/openmc/core/features/city/menu/list/CityListMenu.java index f84b72400..af2334962 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/list/CityListMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/list/CityListMenu.java @@ -90,11 +90,11 @@ public List getItems() { Component wealthComponent = Component.text(EconomyManager.getFormattedSimplifiedNumber(city.getBalance())).color(NamedTextColor.GOLD); Component wealthIcon = Component.text(EconomyManager.getEconomyIcon()).color(NamedTextColor.GOLD); if (MayorManager.phaseMayor == 2 && FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.MAYOR)) { - String mayorCity = city.getMayor() == null - ? TranslationManager.translationString("messages.menus.none") + Component mayorCity = city.getMayor() == null + ? TranslationManager.translation("messages.menus.none") : city.getMayor().getName(); NamedTextColor mayorColor = (city.getMayor() == null || city.getMayor().getMayorColor() == null) ? NamedTextColor.WHITE : city.getMayor().getMayorColor(); - Component mayorComponent = Component.text(mayorCity).color(mayorColor).decoration(TextDecoration.ITALIC, false); + Component mayorComponent = mayorCity.color(mayorColor).decoration(TextDecoration.ITALIC, false); cityLore.addAll(TranslationManager.translationLore( "feature.city.menus.list.item.lore.with_mayor", ownerComponent, diff --git a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ManageButton.java b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ManageButton.java index 3c4e46ea1..58f8c1100 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ManageButton.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ManageButton.java @@ -52,9 +52,9 @@ private static List getDynamicLore(City city, Player player) { boolean hasPermissionRenameCity = city.hasPermission(player.getUniqueId(), CityPermission.RENAME); boolean hasPermissionOwner = city.hasPermission(player.getUniqueId(), CityPermission.OWNER); - String mayorName = (city.getMayor() != null && city.getMayor().getName() != null) + Component mayorName = (city.getMayor() != null && city.getMayor().getName() != null) ? city.getMayor().getName() - : TranslationManager.translationString("messages.menus.none"); + : TranslationManager.translation("messages.menus.none"); NamedTextColor mayorColor = (city.getMayor() != null && city.getMayor().getName() != null) ? city.getMayor().getMayorColor() : NamedTextColor.DARK_GRAY; UUID ownerUUID = city.getPlayerWithPermission(CityPermission.OWNER); @@ -63,7 +63,7 @@ private static List getDynamicLore(City city, Player player) { lore = TranslationManager.translationLore( "feature.city.menus.main.manage.lore.edit", PlayerNameCache.name(ownerUUID).color(NamedTextColor.GRAY), - Component.text(mayorName).color(mayorColor).decoration(TextDecoration.ITALIC, false), + mayorName.color(mayorColor).decoration(TextDecoration.ITALIC, false), Component.text(city.getMembers().size()).color(NamedTextColor.LIGHT_PURPLE), Component.text(MemberLimitRewards.getMemberLimit(city.getLevel())).color(NamedTextColor.LIGHT_PURPLE) ); @@ -71,7 +71,7 @@ private static List getDynamicLore(City city, Player player) { lore = TranslationManager.translationLore( "feature.city.menus.main.manage.lore.view", PlayerNameCache.name(ownerUUID).color(NamedTextColor.GRAY), - Component.text(mayorName).color(mayorColor).decoration(TextDecoration.ITALIC, false), + mayorName.color(mayorColor).decoration(TextDecoration.ITALIC, false), Component.text(city.getMembers().size()).color(NamedTextColor.LIGHT_PURPLE), Component.text(MemberLimitRewards.getMemberLimit(city.getLevel())).color(NamedTextColor.LIGHT_PURPLE) ); diff --git a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MayorButton.java b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MayorButton.java index dcbf04830..2a7b7fc13 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MayorButton.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MayorButton.java @@ -45,11 +45,11 @@ private static Supplier getItemSupplier(Menu menu, City city, Playe private static List getDynamicLore(City city, Player player) { boolean hasPermissionOwner = city.hasPermission(player.getUniqueId(), CityPermission.OWNER); - String mayorName = (city.getMayor() != null && city.getMayor().getName() != null) + Component mayorName = (city.getMayor() != null && city.getMayor().getName() != null) ? city.getMayor().getName() - : TranslationManager.translationString("messages.menus.none"); + : TranslationManager.translation("messages.menus.none"); NamedTextColor mayorColor = (city.getMayor() != null && city.getMayor().getName() != null) ? city.getMayor().getMayorColor() : NamedTextColor.DARK_GRAY; - Component mayorComponent = Component.text(mayorName).color(mayorColor).decoration(TextDecoration.ITALIC, false); + Component mayorComponent = mayorName.color(mayorColor).decoration(TextDecoration.ITALIC, false); List lore; if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.MAYOR)) { diff --git a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/TypeButton.java b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/TypeButton.java index 7ad3ab27a..5b168098b 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/TypeButton.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/TypeButton.java @@ -12,6 +12,8 @@ import fr.openmc.core.utils.DateUtils; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextDecoration; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.bukkit.Material; import org.bukkit.NamespacedKey; @@ -70,6 +72,7 @@ private static List getDynamicLore(City city, Player player) { lore.add(TranslationManager.translation( "feature.city.menus.main.type.lore.cooldown", Component.text(DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(city.getUniqueId(), "city:type"))) + .decoration(TextDecoration.ITALIC, false).color(NamedTextColor.GRAY) )); } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/MascotsManager.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/MascotsManager.java index a1969c654..96541680f 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/MascotsManager.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/MascotsManager.java @@ -61,7 +61,6 @@ public static void init() { mascotsKey = new NamespacedKey(OMCPlugin.getInstance(), "mascotsKey"); loadMascots(); - restoreMascotsAfterRestart(); OMCPlugin.registerEvents( new MascotsInteractionListener(), @@ -310,37 +309,4 @@ public static Component getDeadMascotName() { return TranslationManager.translation("feature.city.mascots.name.dead"); } - private static void restoreMascotsAfterRestart() { - for (Mascot mascot : mascotsByCityUUID.values()) { - City city = CityManager.getCity(mascot.getCityUUID()); - if (city == null) continue; - - if (mascot.isAlive()) continue; - if (DynamicCooldownManager.getRemaining(city.getUniqueId(), "city:immunity") > 0) continue; - - LivingEntity entity = (LivingEntity) mascot.getEntity(); - if (entity != null) { - entity.setGlowing(false); - var maxHealth = entity.getAttribute(Attribute.MAX_HEALTH); - if (maxHealth != null) { - entity.customName(getAliveMascotName( - city.getName(), - entity.getHealth(), - maxHealth.getValue() - )); - entity.setCustomNameVisible(true); - } - } - - mascot.setImmunity(false); - mascot.setAlive(true); - - try { - mascotsDao.createOrUpdate(mascot); - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - } - } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotMenu.java index eff3ec79f..75beb1dfe 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotMenu.java @@ -221,7 +221,7 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { } else if (currentMascotLevel >= maxMascotLevel) { requiredAmount.add(TranslationManager.translation( "feature.city.mascots.menu.main.upgrade.level_required", - Component.text(maxMascotLevel + 1).decoration(TextDecoration.ITALIC, false) + Component.text(maxMascotLevel + 1).decoration(TextDecoration.ITALIC, false).color(NamedTextColor.RED) )); } else { requiredAmount.add(TranslationManager.translation( diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotsDeadMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotsDeadMenu.java index 42213ead7..62088bb77 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotsDeadMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotsDeadMenu.java @@ -71,7 +71,7 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { itemMeta.displayName(TranslationManager.translation("feature.city.mascots.menu.dead.title")); itemMeta.lore(TranslationManager.translationLore( "feature.city.mascots.menu.dead.lore", - Component.text(DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(cityUUID, "city:immunity"))), + Component.text(DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(cityUUID, "city:immunity"))).color(NamedTextColor.RED), Component.text(AYWENITE_REDUCE).color(NamedTextColor.LIGHT_PURPLE) )); }).setOnClick(inventoryClickEvent -> { diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorMandateMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorMandateMenu.java index ed8767d85..3bbc1bd56 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorMandateMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/MayorMandateMenu.java @@ -87,7 +87,7 @@ public void onClose(InventoryCloseEvent event) { loreMayor.addAll(perk3 == null ? List.of() : TranslationManager.translationLore(perk3.getLoreKey())); inventory.put(3, new ItemBuilder(this, SkullUtils.getPlayerSkull(mayor.getMayorUUID()), itemMeta -> { - itemMeta.displayName(TranslationManager.translation("feature.city.mayor.menu.mandate.mayor.title", Component.text(mayor.getName())) + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.menu.mandate.mayor.title", mayor.getName()) .color(mayor.getMayorColor()).decoration(TextDecoration.ITALIC, false)); itemMeta.lore(loreMayor); })); diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/npc/MayorNpcMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/npc/MayorNpcMenu.java index 0963d8c59..db2ff224f 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/npc/MayorNpcMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/menu/npc/MayorNpcMenu.java @@ -92,7 +92,7 @@ public void onClose(InventoryCloseEvent event) { loreMayor.addAll(perk3 == null ? List.of() : TranslationManager.translationLore(perk3.getLoreKey())); inventory.put(4, new ItemBuilder(this, SkullUtils.getPlayerSkull(city.getPlayerWithPermission(CityPermission.OWNER)), itemMeta -> { - itemMeta.displayName(TranslationManager.translation("feature.city.mayor.menu.mayor.title", Component.text(city.getMayor().getName())).color(NamedTextColor.YELLOW)); + itemMeta.displayName(TranslationManager.translation("feature.city.mayor.menu.mayor.title", city.getMayor().getName()).color(NamedTextColor.YELLOW)); itemMeta.lore(loreMayor); })); diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/models/Mayor.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/models/Mayor.java index ae809fd9f..353f80e0b 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/models/Mayor.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/models/Mayor.java @@ -6,6 +6,7 @@ import fr.openmc.core.utils.ColorUtils; import lombok.Getter; import lombok.Setter; +import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import java.util.UUID; @@ -20,7 +21,6 @@ public class Mayor { @Setter private UUID mayorUUID; @DatabaseField - @Getter @Setter private String name; @DatabaseField @@ -56,6 +56,10 @@ public Mayor(UUID cityUUID, String mayorName, UUID mayorUUID, NamedTextColor may setElectionType(electionType); } + public Component getName() { + return Component.text(this.name); + } + public NamedTextColor getMayorColor() { return ColorUtils.getNamedTextColor(mayorColor); } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/event/ImpotCollection.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/event/ImpotCollection.java index 10fa4e36c..7af4a711f 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/event/ImpotCollection.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/perks/event/ImpotCollection.java @@ -50,7 +50,7 @@ public static void spawnZombies(Player player, City city) { Zombie zombie = (Zombie) world.spawnEntity(spawnLoc, EntityType.ZOMBIE); zombie.customName(TranslationManager.translation( "feature.city.mayor.perk.event.impot.zombie.name", - Component.text(city.getMayor().getName()) + city.getMayor().getName() ).color(NamedTextColor.GRAY)); zombie.setCustomNameVisible(true); zombie.setTarget(player); diff --git a/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankAction.java b/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankAction.java index 24ec9a9aa..1fba4fcd5 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankAction.java +++ b/src/main/java/fr/openmc/core/features/city/sub/rank/CityRankAction.java @@ -14,6 +14,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; @@ -112,8 +113,8 @@ public static void renameRank(Player player, String oldName) { city.updateRank(rank, new DBCityRank(rank.getRankUUID(), city.getUniqueId(), rank.getPriority(), input, rank.getIcon(), rank.getPermissionsSet(), rank.getMembersSet())); MessagesManager.sendMessage(player, TranslationManager.translation( "feature.city.rank.rename.success", - Component.text(oldName), - Component.text(input) + Component.text(oldName).color(NamedTextColor.YELLOW), + Component.text(input).color(NamedTextColor.YELLOW) ), Prefix.CITY, MessageType.SUCCESS, false); }); } @@ -151,12 +152,12 @@ public static void deleteRank(Player player, String rankName) { player.closeInventory(); MessagesManager.sendMessage(player, TranslationManager.translation( "feature.city.rank.delete.success", - Component.text(rank.getName()) + Component.text(rank.getName()).color(NamedTextColor.YELLOW) ), Prefix.CITY, MessageType.SUCCESS, false); } catch (IllegalArgumentException e) { MessagesManager.sendMessage(player, TranslationManager.translation( "feature.city.rank.delete.error", - Component.text(e.getMessage()) + Component.text(e.getMessage()).color(NamedTextColor.RED) ), Prefix.CITY, MessageType.ERROR, false); } }, () -> { diff --git a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankDetailsMenu.java b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankDetailsMenu.java index 25f373fb5..6f04e448b 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankDetailsMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankDetailsMenu.java @@ -53,8 +53,14 @@ public CityRankDetailsMenu(Player owner, City city, String rankName) { @Override public @NotNull Component getName() { return city.isRankExists(oldRank) - ? TranslationManager.translation("feature.city.rank.menu.details.title.edit", Component.text(oldRank.getName())) - : TranslationManager.translation("feature.city.rank.menu.details.title.create", Component.text(newRank.getName())); + ? TranslationManager.translation( + "feature.city.rank.menu.details.title.edit", + Component.text(oldRank.getName()).color(NamedTextColor.YELLOW) + ) + : TranslationManager.translation( + "feature.city.rank.menu.details.title.create", + Component.text(newRank.getName()).color(NamedTextColor.YELLOW) + ); } @Override @@ -158,7 +164,7 @@ private Map createRank() { getOwner().closeInventory(); MessagesManager.sendMessage(getOwner(), TranslationManager.translation( "feature.city.rank.create.success", - Component.text(this.newRank.getName()) + Component.text(this.newRank.getName()).color(NamedTextColor.YELLOW) ), Prefix.CITY, MessageType.SUCCESS, false); })); } @@ -302,7 +308,7 @@ private Map createRank() { new CityRanksMenu(getOwner(), city).open(); MessagesManager.sendMessage(getOwner(), TranslationManager.translation( "feature.city.rank.update.success", - Component.text(this.newRank.getName()) + Component.text(this.newRank.getName()).color(NamedTextColor.YELLOW) ), Prefix.CITY, MessageType.SUCCESS, false); })); } diff --git a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankIconMenu.java b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankIconMenu.java index 48728c55a..3c0c406de 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankIconMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankIconMenu.java @@ -12,6 +12,7 @@ import fr.openmc.core.utils.ItemUtils; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Material; import org.bukkit.World; @@ -137,7 +138,10 @@ public Map getButtons() { @Override public @NotNull Component getName() { - return TranslationManager.translation("feature.city.rank.menu.icon.title", Component.text(page + 1)); + return TranslationManager.translation( + "feature.city.rank.menu.icon.title", + Component.text(page + 1).color(NamedTextColor.YELLOW) + ); } @Override diff --git a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankPermsMenu.java b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankPermsMenu.java index 53d875368..764eb7ab3 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankPermsMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/rank/menus/CityRankPermsMenu.java @@ -133,7 +133,10 @@ public Map getButtons() { @Override public @NotNull Component getName() { - return TranslationManager.translation("feature.city.rank.menu.perms.title", Component.text(this.newRank.getName())); + return TranslationManager.translation( + "feature.city.rank.menu.perms.title", + Component.text(this.newRank.getName()).color(NamedTextColor.YELLOW) + ); } @Override diff --git a/src/main/java/fr/openmc/core/features/city/sub/war/War.java b/src/main/java/fr/openmc/core/features/city/sub/war/War.java index 6723a5140..09e0d15ff 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/war/War.java +++ b/src/main/java/fr/openmc/core/features/city/sub/war/War.java @@ -3,9 +3,11 @@ import fr.openmc.core.OMCPlugin; import fr.openmc.core.features.city.City; import fr.openmc.core.utils.LocationUtils; +import fr.openmc.core.utils.messages.TranslationManager; import lombok.Getter; import lombok.Setter; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.LivingEntity; @@ -62,24 +64,20 @@ public void startPreparation() { this.startTime = System.currentTimeMillis(); this.phase = WarPhase.PREPARATION; - String message = String.format(""" - §8§m §r - §7 - §c§lGUERRE !§r §7La préparation de la guerre commence§7 - §8§oPréparez vous pour le combat contre %s - §8§oVous avez §c§l%d minutes §8pour vous équiper. - §8§oVous serez en §4%d §8VS §4%d - §8§oLorsque le combat commencera vous serez §4téléporter §8a votre §cmascotte. - §7 - §8§m §r""", - cityAttacker.getName(), TIME_PREPARATION, attackers.size(), defenders.size()); + Component message = TranslationManager.translation( + "feature.city.war.preparation.message", + Component.text(cityAttacker.getName()).color(NamedTextColor.RED), + Component.text(TIME_PREPARATION).color(NamedTextColor.GOLD), + Component.text(attackers.size()).color(NamedTextColor.DARK_RED), + Component.text(defenders.size()).color(NamedTextColor.DARK_RED) + ); for (UUID uuid : attackers) { Player player = Bukkit.getPlayer(uuid); if (player == null) continue; if (!player.isOnline()) continue; - player.sendMessage(Component.text(message)); + player.sendMessage(message); } for (UUID uuid : defenders) { @@ -87,7 +85,7 @@ public void startPreparation() { if (player == null) continue; if (!player.isOnline()) continue; - player.sendMessage(Component.text(message)); + player.sendMessage(message); } LivingEntity mascotAttacker = (LivingEntity) cityAttacker.getMascot().getEntity(); @@ -117,15 +115,11 @@ public int getPreparationTimeRemaining() { public void startCombat() { this.phase = WarPhase.COMBAT; - String message = """ - §8§m §r - §7 - §c§lGUERRE !§r §7Le comabat est imminent!§7 - §8§oBattez vous contre §c%s! - §8§oVous avez §c§l%d minutes §8§ode combat. - §8§oSi vous tuez la mascotte de la ville adverse, vous remportez la guerre. - §7 - §8§m §r"""; + Component message = TranslationManager.translation( + "feature.city.war.combat.message", + Component.text(cityDefender.getName()).color(NamedTextColor.RED), + Component.text(TIME_FIGHT).color(NamedTextColor.GOLD) + ); Location mascotLocDefender = cityDefender.getMascot().getEntity().getLocation(); Location mascotLocAttacker = cityAttacker.getMascot().getEntity().getLocation(); @@ -134,7 +128,7 @@ public void startCombat() { if (player == null) continue; if (player.isOnline()) { - player.sendMessage(Component.text(String.format(message, cityDefender.getName(), TIME_FIGHT))); + player.sendMessage(message); player.teleportAsync(LocationUtils.getSafeNearbySurface(mascotLocAttacker,3)); } } @@ -144,7 +138,11 @@ public void startCombat() { if (player == null) continue; if (player.isOnline()) { - player.sendMessage(Component.text(String.format(message, cityAttacker.getName(), TIME_FIGHT))); + player.sendMessage(TranslationManager.translation( + "feature.city.war.combat.message", + Component.text(cityAttacker.getName()).color(NamedTextColor.RED), + Component.text(TIME_FIGHT).color(NamedTextColor.GOLD) + )); player.teleportAsync(LocationUtils.getSafeNearbySurface(mascotLocDefender,3)); } } diff --git a/src/main/java/fr/openmc/core/features/city/sub/war/WarManager.java b/src/main/java/fr/openmc/core/features/city/sub/war/WarManager.java index 28c263170..15a9dce7c 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/war/WarManager.java +++ b/src/main/java/fr/openmc/core/features/city/sub/war/WarManager.java @@ -16,7 +16,11 @@ import fr.openmc.core.features.city.sub.war.models.WarHistory; import fr.openmc.core.features.economy.EconomyManager; import fr.openmc.core.utils.ChunkPos; +import fr.openmc.core.utils.messages.MessagesManager; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Bukkit; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -292,98 +296,116 @@ public static void broadcastWarResult(War war, City winner, City loser, WinReaso int killsLoser = war.getCityAttacker().equals(loser) ? war.getAttackersKill() : war.getDefendersKill(); if (reason == WinReason.DRAW) { - String message = String.format(""" - §8§m §r - §7 - §c§lGUERRE !§r §7C'est la fin des combats!§7 - §8§oIl y a eu égalité ! - §7 - §7Statistiques globales: - §7 - §cKills de %s : §f%d - §7 - §9Kills de %s : §f%d - §7 - §8§m §r""", - war.getCityAttacker().getName(), killsWinner, war.getCityDefender().getName(), killsLoser); + List message = TranslationManager.translationLore( + "feature.city.war.result.draw", + Component.text(war.getCityAttacker().getName()).color(NamedTextColor.RED), + Component.text(killsWinner).color(NamedTextColor.WHITE), + Component.text(war.getCityDefender().getName()).color(NamedTextColor.BLUE), + Component.text(killsLoser).color(NamedTextColor.WHITE) + ); for (UUID uuid : winner.getMembers()) { Player player = Bukkit.getPlayer(uuid); if (player == null) continue; - if (player.isOnline()) player.sendMessage(Component.text(message)); + if (player.isOnline()) MessagesManager.sendMessage(player, message); } for (UUID uuid : loser.getMembers()) { Player player = Bukkit.getPlayer(uuid); if (player == null) continue; - if (player.isOnline()) player.sendMessage(Component.text(message)); + if (player.isOnline()) MessagesManager.sendMessage(player, message); } return; } + Component winnerReason = TranslationManager.translation(switch (reason) { + case MASCOT_DEATH -> "feature.city.war.result.reason.win.mascot_death"; + case MASCOT_HP -> "feature.city.war.result.reason.win.mascot_hp"; + case KILLS -> "feature.city.war.result.reason.win.kills"; + case DRAW -> "feature.city.war.result.reason.win.draw"; + }); + + Component rewardPower = TranslationManager.translation( + "feature.city.war.result.reward.power", + Component.text(powerChange).color(NamedTextColor.GREEN) + ); + Component rewardMoney = bonusMoney > 0 + ? TranslationManager.translation( + "feature.city.war.result.reward.money_bonus", + Component.text(EconomyManager.getFormattedSimplifiedNumber(amountStolen) + EconomyManager.getEconomyIcon()) + .color(NamedTextColor.GOLD), + Component.text(EconomyManager.getFormattedSimplifiedNumber(bonusMoney) + EconomyManager.getEconomyIcon()) + .color(NamedTextColor.GOLD) + ) + : TranslationManager.translation( + "feature.city.war.result.reward.money", + Component.text(EconomyManager.getFormattedSimplifiedNumber(amountStolen) + EconomyManager.getEconomyIcon()) + .color(NamedTextColor.GOLD) + ); + Component rewardClaims = TranslationManager.translation( + "feature.city.war.result.reward.claims", + Component.text(claimNumber).color(NamedTextColor.GREEN) + ); - String message = """ - §8§m §r - §7 - §c§lGUERRE !§r §7C'est la fin des combats!§7 - §8§oVous avez %s contre %s! - §8§o%s - §7 - §7Statistiques globales: - §7 - §cKills de %s : §f%d - §7 - §9Kills de %s : §f%d - §7 - %s: - §7 %s - §7 %s - §7 %s - §7 - §8§m §r"""; - - - String winnerMessage = String.format( - message, - "gagné", - loser.getName(), - switch (reason) { - case MASCOT_DEATH -> "Vous avez tué la mascotte adverse!"; - case MASCOT_HP -> "Votre mascotte a eu le plus de points de vie!"; - case KILLS -> "Votre ville a tué le plus d'adversaires!"; - case DRAW -> "C'est une égalité!"; - }, winner.getName(), killsWinner, loser.getName(), killsLoser, - "§6§lRécompenses", - "+ " + powerChange + " points de puissance", - "+ " + EconomyManager.getFormattedSimplifiedNumber(amountStolen) + EconomyManager.getEconomyIcon() + " volés à l'adversaire" + ((bonusMoney > 0) ? " + " + EconomyManager.getFormattedSimplifiedNumber(bonusMoney) + EconomyManager.getEconomyIcon() + " bonus" : ""), - "+ " + claimNumber + " territoire(s) conquis" + List winnerMessage = TranslationManager.translationLore( + "feature.city.war.result.winner", + Component.text(loser.getName()).color(NamedTextColor.RED), + winnerReason.color(NamedTextColor.DARK_GRAY).decorate(TextDecoration.ITALIC), + Component.text(winner.getName()).color(NamedTextColor.RED), + Component.text(killsWinner).color(NamedTextColor.WHITE), + Component.text(loser.getName()).color(NamedTextColor.BLUE), + Component.text(killsLoser).color(NamedTextColor.WHITE), + rewardPower.color(NamedTextColor.GRAY), + rewardMoney.color(NamedTextColor.GRAY), + rewardClaims.color(NamedTextColor.GRAY) ); for (UUID uuid : winner.getMembers()) { Player player = Bukkit.getPlayer(uuid); if (player == null) continue; - if (player.isOnline()) player.sendMessage(Component.text(winnerMessage)); + if (player.isOnline()) MessagesManager.sendMessage(player, winnerMessage); } + Component loserReason = TranslationManager.translation(switch (reason) { + case MASCOT_DEATH -> "feature.city.war.result.reason.lose.mascot_death"; + case MASCOT_HP -> "feature.city.war.result.reason.lose.mascot_hp"; + case KILLS -> "feature.city.war.result.reason.lose.kills"; + case DRAW -> "feature.city.war.result.reason.lose.draw"; + }); + + Component lossPower = TranslationManager.translation( + "feature.city.war.result.loss.power", + Component.text(powerChange).color(NamedTextColor.RED) + ); + Component lossMoney = TranslationManager.translation( + "feature.city.war.result.loss.money", + Component.text(EconomyManager.getFormattedSimplifiedNumber(amountStolen) + EconomyManager.getEconomyIcon()) + .color(NamedTextColor.RED) + ); + Component lossClaims = TranslationManager.translation( + "feature.city.war.result.loss.claims", + Component.text(claimNumber).color(NamedTextColor.RED) + ); - String loserMessage = String.format( - message, - "perdu", - loser.getName(), - switch (reason) { - case MASCOT_DEATH -> "Votre mascotte a été tuée!"; - case MASCOT_HP -> "Votre mascotte a eu le moins de points de vie!"; - case KILLS -> "L'adversaire a tué le plus de monde!"; - case DRAW -> "C'est une égalité!"; - }, winner.getName(), killsWinner, loser.getName(), killsLoser, - "§c§lPertes", - "- " + powerChange + " points de puissance", - "- " + EconomyManager.getFormattedSimplifiedNumber(amountStolen) + EconomyManager.getEconomyIcon() + " perdu", - "- " + claimNumber + " territoire(s) perdus" + List loserMessage = TranslationManager.translationLore( + "feature.city.war.result.loser", + Component.text(loser.getName()).color(NamedTextColor.RED), + loserReason.color(NamedTextColor.DARK_GRAY).decorate(TextDecoration.ITALIC), + Component.text(winner.getName()).color(NamedTextColor.RED), + Component.text(killsWinner).color(NamedTextColor.WHITE), + Component.text(loser.getName()).color(NamedTextColor.BLUE), + Component.text(killsLoser).color(NamedTextColor.WHITE), + lossPower.color(NamedTextColor.GRAY), + lossMoney.color(NamedTextColor.GRAY), + lossClaims.color(NamedTextColor.GRAY) ); for (UUID uuid : loser.getMembers()) { Player player = Bukkit.getPlayer(uuid); if (player == null) continue; - if (player.isOnline()) player.sendMessage(Component.text(loserMessage)); + if (player.isOnline()) MessagesManager.sendMessage(player, loserMessage); } } diff --git a/src/main/java/fr/openmc/core/features/city/sub/war/actions/WarActions.java b/src/main/java/fr/openmc/core/features/city/sub/war/actions/WarActions.java index d219c8cc6..31665a36d 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/war/actions/WarActions.java +++ b/src/main/java/fr/openmc/core/features/city/sub/war/actions/WarActions.java @@ -16,9 +16,9 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.event.HoverEvent; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.Sound; import org.bukkit.SoundCategory; @@ -45,76 +45,80 @@ public static void beginLaunchWar(Player player, City cityAttack) { } if (!FeaturesRewards.hasUnlockFeature(launchCity, FeaturesRewards.Feature.WAR)) { - MessagesManager.sendMessage(player, Component.text("Vous n'avez pas débloqué cette feature ! Veuillez améliorer votre ville au niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.WAR) + "!"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "messages.city.havent_unlocked_feature", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.WAR)) + .color(NamedTextColor.RED) + ), Prefix.CITY, MessageType.ERROR, false); return; } if (!launchCity.getType().equals(CityType.WAR)) { MessagesManager.sendMessage(player, - Component.text("Votre ville n'est pas dans un statut de §cgueere §f! Changez la type de votre ville avec §c/city type §fou dans le §cmenu principal des villes"), + TranslationManager.translation("feature.city.war.begin.type_required"), Prefix.CITY, MessageType.ERROR, false); return; } if (!cityAttack.getType().equals(CityType.WAR)) { MessagesManager.sendMessage(player, - Component.text("La ville que vous essayez d'attaquer n'est pas dans un statut de guerre !"), + TranslationManager.translation("feature.city.war.begin.target_not_war"), Prefix.CITY, MessageType.ERROR, false); return; } if (!launchCity.hasPermission(player.getUniqueId(), CityPermission.LAUNCH_WAR)) { MessagesManager.sendMessage(player, - Component.text("Vous n'avez pas la permission de lancer une guerre pour la ville"), + TranslationManager.translation("feature.city.war.begin.no_permission_launch"), Prefix.CITY, MessageType.ERROR, false); return; } if (WarManager.getPendingDefenseFor(launchCity) != null) { MessagesManager.sendMessage(player, - Component.text("Vous avez déjà été déclaré en guerre !"), + TranslationManager.translation("feature.city.war.begin.already_declared"), Prefix.CITY, MessageType.ERROR, false); return; } if (launchCity.isInWar()) { MessagesManager.sendMessage(player, - Component.text("Votre ville est en déjà en guerre !"), + TranslationManager.translation("feature.city.war.begin.already_in_war"), Prefix.CITY, MessageType.ERROR, false); return; } if (WarManager.getPendingDefenseFor(cityAttack) != null) { MessagesManager.sendMessage(player, - Component.text("La ville que vous essayez d'attaquer et déjà en préparation des troupes"), + TranslationManager.translation("feature.city.war.begin.target_preparing"), Prefix.CITY, MessageType.ERROR, false); return; } if (cityAttack.isInWar()) { MessagesManager.sendMessage(player, - Component.text("La ville que vous essayez d'attaquer est déjà en guerre !"), + TranslationManager.translation("feature.city.war.begin.target_in_war"), Prefix.CITY, MessageType.ERROR, false); return; } if (cityAttack.isImmune()) { MessagesManager.sendMessage(player, - Component.text("La ville que vous essayez d'attaquer est en période d'immunité !"), + TranslationManager.translation("feature.city.war.begin.target_immune"), Prefix.CITY, MessageType.ERROR, false); return; } if (launchCity.isImmune()) { MessagesManager.sendMessage(player, - Component.text("Votre ville est en période d'immunité !"), + TranslationManager.translation("feature.city.war.begin.city_immune"), Prefix.CITY, MessageType.ERROR, false); return; } if (cityAttack.getOnlineMembers().isEmpty()) { MessagesManager.sendMessage(player, - Component.text("La ville que vous essayez d'attaquer n'a aucun membre de connecté !"), + TranslationManager.translation("feature.city.war.begin.target_no_online"), Prefix.CITY, MessageType.ERROR, false); return; } @@ -125,7 +129,7 @@ public static void beginLaunchWar(Player player, City cityAttack) { if (maxSize < 1) { MessagesManager.sendMessage(player, - Component.text("Aucun combat possible (pas assez de joueurs connectés)"), + TranslationManager.translation("feature.city.war.begin.no_combat"), Prefix.CITY, MessageType.ERROR, false); return; } @@ -145,7 +149,10 @@ public static void preFinishLaunchWar(Player player, City cityLaunch, City cityA List available = cityLaunch.getOnlineMembers().stream().toList(); if (available.size() < count) { - player.sendMessage("§cPas assez de membres connectés pour lancer un combat en " + count + " vs " + count); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.war.begin.not_enough_members", + Component.text(count).color(NamedTextColor.RED) + ), Prefix.CITY, MessageType.ERROR, false); return; } @@ -163,7 +170,7 @@ public static void preFinishLaunchWar(Player player, City cityLaunch, City cityA public static void confirmLaunchWar(Player player, City cityLaunch, City cityAttack, List attackers) { if (cityLaunch.isInWar() || cityAttack.isInWar()) { MessagesManager.sendMessage(player, - Component.text("Une des villes est déjà en guerre !"), + TranslationManager.translation("feature.city.war.begin.city_already_in_war"), Prefix.CITY, MessageType.ERROR, false); return; } @@ -174,13 +181,14 @@ public static void confirmLaunchWar(Player player, City cityLaunch, City cityAtt player.closeInventory(); }, player::closeInventory, - List.of( - Component.text("§c§lATTENTION"), - Component.text("§7Vous êtes sur le point de lancer une guerre contre §c" + cityAttack.getName()), - Component.text("§7avec §c" + attackers.size() + " §7joueurs de votre ville.") + TranslationManager.translationLore( + "feature.city.war.begin.confirm.lore", + Component.text(cityAttack.getName()).color(NamedTextColor.RED), + Component.text(attackers.size()).color(NamedTextColor.RED) ), - List.of( - Component.text("§7Ne pas lancer une guerre contre §c" + cityAttack.getName()) + TranslationManager.translationLore( + "feature.city.war.begin.confirm.cancel", + Component.text(cityAttack.getName()).color(NamedTextColor.RED) ) ); menu.open(); @@ -198,7 +206,7 @@ public static void confirmLaunchWar(Player player, City cityLaunch, City cityAtt public static void finishLaunchWar(Player player, City cityLaunch, City cityAttack, List attackers) { if (cityLaunch.isInWar() || cityAttack.isInWar()) { MessagesManager.sendMessage(player, - Component.text("Une des villes est déjà en guerre !"), + TranslationManager.translation("feature.city.war.begin.city_already_in_war"), Prefix.CITY, MessageType.ERROR, false); return; } @@ -206,10 +214,14 @@ public static void finishLaunchWar(Player player, City cityLaunch, City cityAtta int requiredParticipants = attackers.size(); Set allDefenders = new HashSet<>(cityAttack.getMembers()); - TextComponent info = Component.text("§c⚔ Votre ville est attaquée par §e" + cityLaunch.getName() + "§c, il vous faut §4" + requiredParticipants + " §c joueur(s)!"); - TextComponent clickToJoin = Component.text("§aCliquez ici pour rejoindre la défense !") + Component info = TranslationManager.translation( + "feature.city.war.begin.defense.attacked", + Component.text(cityLaunch.getName()).color(NamedTextColor.YELLOW), + Component.text(requiredParticipants).color(NamedTextColor.RED) + ); + Component clickToJoin = TranslationManager.translation("feature.city.war.begin.defense.click_to_join") .clickEvent(ClickEvent.runCommand("/war acceptdefense")) - .hoverEvent(HoverEvent.showText(Component.text("§aCliquez pour participer à la guerre"))); + .hoverEvent(HoverEvent.showText(TranslationManager.translation("feature.city.war.begin.defense.hover_join"))); for (UUID uuid : allDefenders) { Player defender = Bukkit.getPlayer(uuid); @@ -219,7 +231,10 @@ public static void finishLaunchWar(Player player, City cityLaunch, City cityAtta } } - TextComponent infoAttackers = Component.text("§c⚔ Vous avez été choisi pour vous battre contre §e" + cityAttack.getName()); + Component infoAttackers = TranslationManager.translation( + "feature.city.war.begin.attacker.chosen", + Component.text(cityAttack.getName()).color(NamedTextColor.YELLOW) + ); for (UUID uuid : attackers) { Player attacker = Bukkit.getPlayer(uuid); @@ -228,7 +243,10 @@ public static void finishLaunchWar(Player player, City cityLaunch, City cityAtta } } - MessagesManager.sendMessage(player, Component.text("§8§oVeuillez attendre que " + cityAttack.getName() + " réagisse, la partie sera tout de même lancée dans 2 min"), Prefix.CITY, MessageType.INFO, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "feature.city.war.begin.waiting_defense", + Component.text(cityAttack.getName()).color(NamedTextColor.YELLOW) + ), Prefix.CITY, MessageType.INFO, false); WarPendingDefense pending = new WarPendingDefense(cityLaunch, cityAttack, attackers, requiredParticipants); WarManager.addPendingDefense(pending); diff --git a/src/main/java/fr/openmc/core/features/city/sub/war/commands/AdminWarCommand.java b/src/main/java/fr/openmc/core/features/city/sub/war/commands/AdminWarCommand.java index 796c246ff..d1f584030 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/war/commands/AdminWarCommand.java +++ b/src/main/java/fr/openmc/core/features/city/sub/war/commands/AdminWarCommand.java @@ -8,7 +8,6 @@ import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; -import net.kyori.adventure.text.Component; import org.bukkit.entity.Player; import revxrsal.commands.annotation.Command; import revxrsal.commands.annotation.Named; @@ -33,7 +32,7 @@ void startCombat( } if (!city.isInWar() && city.getWar().getPhase() != War.WarPhase.PREPARATION) { - MessagesManager.sendMessage(player, Component.text("Cette ville n'est pas en préparation de guerre !"), Prefix.STAFF, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.war.admin.not_in_preparation"), Prefix.STAFF, MessageType.ERROR, false); return; } diff --git a/src/main/java/fr/openmc/core/features/city/sub/war/commands/WarCommand.java b/src/main/java/fr/openmc/core/features/city/sub/war/commands/WarCommand.java index 98e2af0cc..a23723908 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/war/commands/WarCommand.java +++ b/src/main/java/fr/openmc/core/features/city/sub/war/commands/WarCommand.java @@ -16,6 +16,7 @@ import fr.openmc.core.utils.messages.Prefix; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.entity.Player; import revxrsal.commands.annotation.Command; import revxrsal.commands.annotation.CommandPlaceholder; @@ -39,41 +40,48 @@ void mainCommand(Player player) { } if (!FeaturesRewards.hasUnlockFeature(playerCity, FeaturesRewards.Feature.WAR)) { - MessagesManager.sendMessage(player, Component.text("Vous n'avez pas débloqué cette feature ! Veuillez améliorer votre ville au niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.WAR) + "!"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "messages.city.havent_unlocked_feature", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.WAR)).color(NamedTextColor.RED) + ), Prefix.CITY, MessageType.ERROR, false); return; } if (!playerCity.getType().equals(CityType.WAR)) { MessagesManager.sendMessage(player, - Component.text("Votre ville n'est pas dans un statut de §cguerre §f ! Changez la type de votre ville avec §c/city type §fou depuis le §cmenu principal des villes"), + TranslationManager.translation("feature.city.war.command.type_required"), Prefix.CITY, MessageType.ERROR, false); return; } if (playerCity.isImmune()) { MessagesManager.sendMessage(player, - Component.text("Votre ville est actuellement en période d'immunité, vous ne pouvez pas lancer de guerre pour le moment. \nTemps restant : " + DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(playerCity.getUniqueId(), "city:immunity"))), + TranslationManager.translation( + "feature.city.war.command.city_immune", + Component.text(DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(playerCity.getUniqueId(), "city:immunity"))) + .color(NamedTextColor.GOLD) + ), Prefix.CITY, MessageType.ERROR, false); return; } if (!playerCity.hasPermission(player.getUniqueId(), CityPermission.LAUNCH_WAR)) { MessagesManager.sendMessage(player, - Component.text("Vous n'avez pas la permission de lancer une guerre pour la ville"), + TranslationManager.translation("feature.city.war.command.no_permission_launch"), Prefix.CITY, MessageType.ERROR, false); return; } if (WarManager.getPendingDefenseFor(playerCity) != null) { MessagesManager.sendMessage(player, - Component.text("Vous avez déjà été déclaré en guerre !"), + TranslationManager.translation("feature.city.war.command.already_declared"), Prefix.CITY, MessageType.ERROR, false); return; } if (playerCity.isInWar()) { MessagesManager.sendMessage(player, - Component.text("Vous êtes déjà en guerre !"), + TranslationManager.translation("feature.city.war.command.already_in_war"), Prefix.CITY, MessageType.ERROR, false); return; } @@ -87,19 +95,22 @@ void mainCommand(Player player) { public void acceptDefense(Player player) { City city = CityManager.getPlayerCity(player.getUniqueId()); if (city == null) { - player.sendMessage("§cVous n'avez pas de ville."); + MessagesManager.sendMessage(player, TranslationManager.translation("messages.city.player_no_in_city"), Prefix.CITY, MessageType.ERROR, false); return; } if (!FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.WAR)) { - MessagesManager.sendMessage(player, Component.text("Vous n'avez pas débloqué cette feature ! Veuillez améliorer votre ville au niveau " + FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.WAR) + "!"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation( + "messages.city.havent_unlocked_feature", + Component.text(FeaturesRewards.getFeatureUnlockLevel(FeaturesRewards.Feature.WAR)).color(NamedTextColor.RED) + ), Prefix.CITY, MessageType.ERROR, false); return; } WarPendingDefense pending = WarManager.getPendingDefenseFor(city); if (pending == null) { MessagesManager.sendMessage(player, - Component.text("Aucune guerre en cours de préparation."), + TranslationManager.translation("feature.city.war.command.defense.none"), Prefix.CITY, MessageType.ERROR, false); return; } @@ -107,13 +118,13 @@ public void acceptDefense(Player player) { boolean accepted = pending.accept(player.getUniqueId()); if (!accepted) { MessagesManager.sendMessage(player, - Component.text("Le nombre maximal de défenseurs est atteint."), + TranslationManager.translation("feature.city.war.command.defense.full"), Prefix.CITY, MessageType.ERROR, false); return; } MessagesManager.sendMessage(player, - Component.text("Vous participez désormais à la défense ! Plus aucun retour en arrière possible."), + TranslationManager.translation("feature.city.war.command.defense.accepted"), Prefix.CITY, MessageType.ERROR, false); if (pending.getAcceptedDefenders().size() >= pending.getRequired() && !pending.isAlreadyExecuted()) { diff --git a/src/main/java/fr/openmc/core/features/city/sub/war/listeners/TntPlaceListener.java b/src/main/java/fr/openmc/core/features/city/sub/war/listeners/TntPlaceListener.java index ee4bf29a3..3d985ed3e 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/war/listeners/TntPlaceListener.java +++ b/src/main/java/fr/openmc/core/features/city/sub/war/listeners/TntPlaceListener.java @@ -9,6 +9,7 @@ import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -45,7 +46,12 @@ public void onPlaceTNT(BlockPlaceEvent event) { if (current >= MAX_TNT_PER_DAY && !sameCity) { MessagesManager.sendMessage( player, - Component.text("La ville §4" + cityAtLoc.getName() + " §fa atteint sa limite journalière de tnt ! §8(§c" + current + "§8/§c" + MAX_TNT_PER_DAY + " tnt journalière§8)"), + TranslationManager.translation( + "feature.city.war.tnt.limit_reached", + Component.text(cityAtLoc.getName()), + Component.text(current), + Component.text(MAX_TNT_PER_DAY) + ), Prefix.CITY, MessageType.WARNING, false diff --git a/src/main/java/fr/openmc/core/features/city/sub/war/menu/MoreInfoMenu.java b/src/main/java/fr/openmc/core/features/city/sub/war/menu/MoreInfoMenu.java index 3b131e42f..4c5cbc985 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/war/menu/MoreInfoMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/war/menu/MoreInfoMenu.java @@ -4,14 +4,16 @@ import fr.openmc.api.menulib.utils.InventorySize; import fr.openmc.api.menulib.utils.ItemBuilder; import fr.openmc.core.features.city.sub.war.WarManager; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.jetbrains.annotations.NotNull; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -24,7 +26,7 @@ public MoreInfoMenu(Player owner) { @Override public @NotNull Component getName() { - return Component.text("Menu des Guerres - Plus d'info"); + return TranslationManager.translation("feature.city.war.menu.more_info.menu_title"); } @Override @@ -46,45 +48,44 @@ public void onInventoryClick(InventoryClickEvent click) { public @NotNull Map getContent() { Map inventory = new HashMap<>(); - List lore0 = Arrays.asList( - Component.text("§7Choisissez une §6ville §7à attaquer !"), - Component.text("§7Le nombre de combattants sera le même partout !"), - Component.text("§8§oex. Si vous êtes 5 joueurs de connectés et 2 en face,"), - Component.text("§8§oalors vous aurez le choix de faire un 1vs1 ou un 2vs2"), - Component.empty(), - Component.text("§7Lorsque vous venez déclarer la §6guerre §7à une ville, les personnes concernées seront informées "), - Component.text("§7Vous aurez §6" + WarManager.TIME_PREPARATION + " min §7de préparation"), - Component.text("§7ce qui vous laisse le temps de s’équiper et d’aller au front !") + List lore0 = TranslationManager.translationLore( + "feature.city.war.menu.more_info.prep.lore", + Component.text(WarManager.TIME_PREPARATION) + .color(NamedTextColor.GOLD) + .decoration(TextDecoration.ITALIC, false) ); - List lore1 = Arrays.asList( - Component.text("§7Le §ccombat §7commence, la partie se finira §c30 min §7après le commencement."), - Component.text("§7Elle peut être finie avant si la §cmascotte ennemie §7est tuée. "), - Component.text("§7Et pendant ce moment, vous pouvez §ctout faire §7dans la ville ennemie.") + List lore1 = TranslationManager.translationLore( + "feature.city.war.menu.more_info.combat.lore", + Component.text(WarManager.TIME_FIGHT) + .color(NamedTextColor.RED) + .decoration(TextDecoration.ITALIC, false) ); - List lore2 = Arrays.asList( - Component.text("§7La fin de la guerre, la §fpaix §7s’impose entre les deux camps."), - Component.text("§7Le §fvainqueur §7est désigné, la §frécompense §7est donnée."), - Component.text("§7Et les deux villes obtiennent une immunité de §f2 jours §7!") - ); + List lore2 = TranslationManager.translationLore("feature.city.war.menu.more_info.result.lore"); inventory.put(11, new ItemBuilder(this, Material.ORANGE_STAINED_GLASS_PANE, itemMeta -> { - itemMeta.displayName(Component.text("§r§6La préparation - " + WarManager.TIME_PREPARATION + " min")); + itemMeta.displayName(TranslationManager.translation( + "feature.city.war.menu.more_info.prep.title", + Component.text(WarManager.TIME_PREPARATION).color(NamedTextColor.GOLD) + )); itemMeta.lore(lore0); })); inventory.put(13, new ItemBuilder(this, Material.RED_STAINED_GLASS_PANE, itemMeta -> { - itemMeta.displayName(Component.text("§r§cLe combat - " + WarManager.TIME_FIGHT + " min")); + itemMeta.displayName(TranslationManager.translation( + "feature.city.war.menu.more_info.combat.title", + Component.text(WarManager.TIME_FIGHT).color(NamedTextColor.RED) + )); itemMeta.lore(lore1); })); inventory.put(15, new ItemBuilder(this, Material.WHITE_STAINED_GLASS_PANE, itemMeta -> { - itemMeta.displayName(Component.text("§r§fLes résultats")); + itemMeta.displayName(TranslationManager.translation("feature.city.war.menu.more_info.result.title")); itemMeta.lore(lore2); })); - inventory.put(18, new ItemBuilder(this, Material.ARROW, itemMeta -> itemMeta.displayName(Component.text("§r§aRetour")), true)); + inventory.put(18, new ItemBuilder(this, Material.ARROW, itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.back")), true)); return inventory; } diff --git a/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/MainWarMenu.java b/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/MainWarMenu.java index da6b77c4f..6a646124c 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/MainWarMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/MainWarMenu.java @@ -23,6 +23,7 @@ import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextDecoration; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -91,10 +92,23 @@ public List getItems() { List loreCity = new ArrayList<>(List.of( Component.empty(), - Component.text("§7Propriétaire : §d" + PlainTextComponentSerializer.plainText().serialize(PlayerNameCache.name(player.getUniqueId()))), - Component.text("§7Population (en ligne) : §a" + onlineCount), - Component.text("§7Mascotte : §4niv. " + city.getMascot().getLevel()), - Component.text("§7Location : §c" + mascotLocation.getX() + " " + mascotLocation.getY() + " " + mascotLocation.getZ()) + TranslationManager.translation( + "feature.city.war.menu.main.owner", + Component.text(PlainTextComponentSerializer.plainText().serialize(PlayerNameCache.name(player.getUniqueId()))) + .color(NamedTextColor.LIGHT_PURPLE) + ).color(NamedTextColor.GRAY), + TranslationManager.translation( + "feature.city.war.menu.main.population_online", + Component.text(onlineCount).color(NamedTextColor.GREEN) + ).color(NamedTextColor.GRAY), + TranslationManager.translation( + "feature.city.war.menu.main.mascot_level", + Component.text(city.getMascot().getLevel()).color(NamedTextColor.DARK_RED) + ).color(NamedTextColor.GRAY), + TranslationManager.translation( + "feature.city.war.menu.main.mascot_location", + Component.text(mascotLocation.getX() + " " + mascotLocation.getY() + " " + mascotLocation.getZ()).color(NamedTextColor.RED) + ).color(NamedTextColor.GRAY) )); Mayor mayor = city.getMayor(); @@ -103,7 +117,7 @@ public List getItems() { Perks perk2 = PerkManager.getPerkById(mayor.getIdPerk2()); Perks perk3 = PerkManager.getPerkById(mayor.getIdPerk3()); - loreCity.add(Component.text("§7Réformes : ")); + loreCity.add(TranslationManager.translation("feature.city.war.menu.main.reforms").color(NamedTextColor.GRAY)); if (perk1 != null) loreCity.add(Component.text(" - ") .color(NamedTextColor.DARK_GRAY) .append(TranslationManager.translation(perk1.getNameKey()))); @@ -115,15 +129,21 @@ public List getItems() { .append(TranslationManager.translation(perk3.getNameKey()))); } - loreCity.add(Component.text("§7Richesses : §6" + EconomyManager.getFormattedSimplifiedNumber(city.getBalance()) + EconomyManager.getEconomyIcon())); + loreCity.add(TranslationManager.translation( + "feature.city.war.menu.main.wealth", + Component.text(EconomyManager.getFormattedSimplifiedNumber(city.getBalance()) + EconomyManager.getEconomyIcon()) + .color(NamedTextColor.GOLD) + ).color(NamedTextColor.GRAY)); loreCity.add(Component.empty()); - loreCity.add(Component.text("§e§lCLIQUE DROIT POUR PLUS D'INFORMATIONS SUR LA VILLE")); - loreCity.add(Component.text("§e§lCLIQUE GAUCHE POUR LANCER UNE GUERRE")); + loreCity.add(TranslationManager.translation("feature.city.war.menu.main.click_details") + .color(NamedTextColor.YELLOW).decorate(TextDecoration.BOLD)); + loreCity.add(TranslationManager.translation("feature.city.war.menu.main.click_launch") + .color(NamedTextColor.YELLOW).decorate(TextDecoration.BOLD)); items.add(new ItemBuilder(this, SkullUtils.getPlayerSkull(ownerUUID), itemMeta -> { - itemMeta.displayName(Component.text("§c" + city.getName())); + itemMeta.displayName(Component.text(city.getName()).color(NamedTextColor.RED)); itemMeta.lore(loreCity); }).setOnClick(inventoryClickEvent -> { if (inventoryClickEvent.getClick() == ClickType.LEFT) { @@ -144,18 +164,14 @@ public List getTakableSlot() { @Override public Map getButtons() { Map map = new HashMap<>(); - map.put(49, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_cancel")).getBest(), itemMeta -> itemMeta.displayName(Component.text("§7Fermer"))).setCloseButton()); - map.put(48, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_back_orange")).getBest(), itemMeta -> itemMeta.displayName(Component.text("§cPage précédente"))).setPreviousPageButton()); - map.put(50, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_next_orange")).getBest(), itemMeta -> itemMeta.displayName(Component.text("§aPage suivante"))).setNextPageButton()); + map.put(49, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_cancel")).getBest(), itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.close"))).setCloseButton()); + map.put(48, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_back_orange")).getBest(), itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.previous_page"))).setPreviousPageButton()); + map.put(50, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_next_orange")).getBest(), itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.next_page"))).setNextPageButton()); - List loreInfo = Arrays.asList( - Component.text("§7Apprenez en plus sur les Guerres !"), - Component.text("§7La préparation, le combat, ..."), - Component.text("§e§lCLIQUEZ ICI POUR EN SAVOIR PLUS!") - ); + List loreInfo = TranslationManager.translationLore("feature.city.war.menu.more_info.lore"); map.put(53, new ItemBuilder(this, Material.BOOK, itemMeta -> { - itemMeta.displayName(Component.text("§r§aPlus d'info !")); + itemMeta.displayName(TranslationManager.translation("feature.city.war.menu.more_info.title")); itemMeta.lore(loreInfo); }).setOnClick(inventoryClickEvent -> new MoreInfoMenu(getOwner()).open())); @@ -164,7 +180,7 @@ public Map getButtons() { @Override public @NotNull Component getName() { - return Component.text("Menu des Guerres"); + return TranslationManager.translation("feature.city.war.menu.main.title"); } @Override diff --git a/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/WarCityDetailsMenu.java b/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/WarCityDetailsMenu.java index ae53d8e21..b1ce516a3 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/WarCityDetailsMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/WarCityDetailsMenu.java @@ -13,6 +13,7 @@ import fr.openmc.core.features.economy.EconomyManager; import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -39,7 +40,10 @@ public WarCityDetailsMenu(Player owner, City city) { @Override public @NotNull Component getName() { - return Component.text("Menu de Guerre - Details de " + city.getName()); + return TranslationManager.translation( + "feature.city.war.menu.details.title", + Component.text(city.getName()).color(NamedTextColor.YELLOW) + ); } @Override @@ -101,30 +105,55 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { map.put(8, new ItemBuilder(this, city.getMascot().getMascotEgg(), itemMeta -> { - itemMeta.displayName(Component.text("§7Niveau de la mascotte : §4" + mascot.getLevel())); - itemMeta.lore(List.of(Component.text("§7Location de la mascotte : §c" + mascotLocation.getX() + " " + mascotLocation.getY() + " " + mascotLocation.getZ()))); + itemMeta.displayName(TranslationManager.translation( + "feature.city.war.menu.details.mascot.level", + Component.text(mascot.getLevel()).color(NamedTextColor.DARK_RED) + ).color(NamedTextColor.GRAY)); + itemMeta.lore(List.of(TranslationManager.translation( + "feature.city.war.menu.details.mascot.location", + Component.text(mascotLocation.getX() + " " + mascotLocation.getY() + " " + mascotLocation.getZ()).color(NamedTextColor.RED) + ).color(NamedTextColor.GRAY))); })); map.put(9, new ItemBuilder(this, new ItemStack(Material.PAPER), - itemMeta -> itemMeta.displayName(Component.text("§7Taille : §6" + city.getChunks().size() + " chunks")))); + itemMeta -> itemMeta.displayName(TranslationManager.translation( + "feature.city.war.menu.details.size", + Component.text(city.getChunks().size()).color(NamedTextColor.GOLD) + ).color(NamedTextColor.GRAY)))); map.put(22, new ItemBuilder(this, new ItemStack(Material.DIAMOND), - itemMeta -> itemMeta.displayName(Component.text("§7Richesses : §6" + EconomyManager.getFormattedSimplifiedNumber(city.getBalance()) + " " + EconomyManager.getEconomyIcon())))); + itemMeta -> itemMeta.displayName(TranslationManager.translation( + "feature.city.war.menu.details.wealth", + Component.text(EconomyManager.getFormattedSimplifiedNumber(city.getBalance()) + " " + EconomyManager.getEconomyIcon()) + .color(NamedTextColor.GOLD) + ).color(NamedTextColor.GRAY)))); map.put(4, new ItemBuilder(this, new ItemStack(Material.PLAYER_HEAD), itemMeta -> { - itemMeta.displayName(Component.text("§7Population : §d" + city.getMembers().size() + (city.getMembers().size() > 1 ? " joueurs" : " joueur"))); - itemMeta.lore(List.of(Component.text("§7Population connecté : §d" + city.getOnlineMembers().size() + (city.getMembers().size() > 1 ? " joueurs" : " joueur")))); + itemMeta.displayName(TranslationManager.translation( + "feature.city.war.menu.details.population", + Component.text(city.getMembers().size()).color(NamedTextColor.LIGHT_PURPLE), + TranslationManager.translation(city.getMembers().size() > 1 + ? "feature.city.war.menu.details.population.players" + : "feature.city.war.menu.details.population.player") + ).color(NamedTextColor.GRAY)); + itemMeta.lore(List.of(TranslationManager.translation( + "feature.city.war.menu.details.population_online", + Component.text(city.getOnlineMembers().size()).color(NamedTextColor.LIGHT_PURPLE), + TranslationManager.translation(city.getOnlineMembers().size() > 1 + ? "feature.city.war.menu.details.population.players" + : "feature.city.war.menu.details.population.player") + ).color(NamedTextColor.GRAY))); }).setOnClick(inventoryClickEvent -> new WarPlayerListMenu(player, city).open())); map.put(26, new ItemBuilder(this, new ItemStack(city.getType().equals(CityType.WAR) ? Material.RED_BANNER : Material.GREEN_BANNER), - itemMeta -> itemMeta.displayName(Component.text("§7Type : " + city.getType().getDisplayName())))); + itemMeta -> itemMeta.displayName(TranslationManager.translation( + "feature.city.war.menu.details.type", + city.getType().getDisplayName() + ).color(NamedTextColor.GRAY)))); map.put(18, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.itemName(Component.text("§aRetour")); - itemMeta.lore(List.of( - Component.text("§7Vous allez retourner au menu précédent"), - Component.text("§e§lCLIQUEZ ICI POUR CONFIRMER") - )); + itemMeta.itemName(TranslationManager.translation("messages.menus.back")); + itemMeta.lore(TranslationManager.translationLore("messages.menus.back_lore")); }, true)); return map; diff --git a/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/WarPlayerListMenu.java b/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/WarPlayerListMenu.java index 07d569f9f..ed596f990 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/WarPlayerListMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/WarPlayerListMenu.java @@ -10,6 +10,7 @@ import fr.openmc.core.registry.items.CustomItemRegistry; import fr.openmc.core.utils.SkullUtils; import fr.openmc.core.utils.cache.CacheOfflinePlayer; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Bukkit; @@ -73,11 +74,11 @@ else if (MayorManager.cityMayor.get(city.getUniqueId()).getMayorUUID().equals(uu boolean hasPermissionOwner = city.hasPermission(memberUUID, CityPermission.OWNER); String title; if (hasPermissionOwner) { - title = "Propriétaire "; + title = TranslationManager.translationString("feature.city.war.menu.players.role.owner"); } else if (MayorManager.cityMayor.get(city.getUniqueId()).getMayorUUID().equals(memberUUID)) { - title = "Maire "; + title = TranslationManager.translationString("feature.city.war.menu.players.role.mayor"); } else { - title = "Membre "; + title = TranslationManager.translationString("feature.city.war.menu.players.role.member"); } String finalTitle = title; @@ -96,21 +97,18 @@ public List getTakableSlot() { public Map getButtons() { Map map = new HashMap<>(); map.put(45, new ItemBuilder(this, Material.ARROW, itemMeta -> { - itemMeta.itemName(Component.text("§aRetour")); - itemMeta.lore(List.of( - Component.text("§7Vous allez retourner au menu des détails de la ville en guerre"), - Component.text("§e§lCLIQUEZ ICI POUR CONFIRMER") - )); + itemMeta.itemName(TranslationManager.translation("messages.menus.back")); + itemMeta.lore(TranslationManager.translationLore("feature.city.war.menu.players.back_lore")); }, true)); - map.put(49, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_cancel").getBest(), itemMeta -> itemMeta.displayName(Component.text("§7Fermer"))).setCloseButton()); - map.put(48, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_back_orange").getBest(), itemMeta -> itemMeta.displayName(Component.text("§cPage précédente"))).setPreviousPageButton()); - map.put(50, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_next_orange").getBest(), itemMeta -> itemMeta.displayName(Component.text("§aPage suivante"))).setNextPageButton()); + map.put(49, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_cancel").getBest(), itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.close"))).setCloseButton()); + map.put(48, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_back_orange").getBest(), itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.previous_page"))).setPreviousPageButton()); + map.put(50, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_next_orange").getBest(), itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.next_page"))).setNextPageButton()); return map; } @Override public @NotNull Component getName() { - return Component.text("Menu de Guerre - Membres"); + return TranslationManager.translation("feature.city.war.menu.players.title"); } @Override diff --git a/src/main/java/fr/openmc/core/features/city/sub/war/menu/selection/WarChooseParticipantsMenu.java b/src/main/java/fr/openmc/core/features/city/sub/war/menu/selection/WarChooseParticipantsMenu.java index 1c6cb0e53..0d31333c2 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/war/menu/selection/WarChooseParticipantsMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/war/menu/selection/WarChooseParticipantsMenu.java @@ -9,12 +9,14 @@ import fr.openmc.core.features.city.sub.mayor.managers.MayorManager; import fr.openmc.core.features.city.sub.war.actions.WarActions; import fr.openmc.core.registry.items.CustomItemRegistry; -import fr.openmc.core.utils.cache.CacheOfflinePlayer; import fr.openmc.core.utils.SkullUtils; +import fr.openmc.core.utils.cache.CacheOfflinePlayer; import fr.openmc.core.utils.messages.MessageType; import fr.openmc.core.utils.messages.MessagesManager; import fr.openmc.core.utils.messages.Prefix; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -86,19 +88,31 @@ else if (MayorManager.cityMayor.get(cityLaunch.getUniqueId()) != null && (MayorM && cityLaunch.getMayor() != null && cityLaunch.getMayor().getMayorUUID().equals(memberUUID); - String prefix = isOwner ? "Propriétaire " : isMayor ? "Maire " : "Membre "; + String prefix = isOwner + ? TranslationManager.translationString("feature.city.war.menu.players.role.owner") + : isMayor + ? TranslationManager.translationString("feature.city.war.menu.players.role.mayor") + : TranslationManager.translationString("feature.city.war.menu.players.role.member"); ItemBuilder item = new ItemBuilder(this, SkullUtils.getPlayerSkull(memberUUID), meta -> { - meta.displayName(Component.text((isSelected ? "§a✔ " : "") + prefix + offline.getName()) + Component prefixComponent = isSelected + ? TranslationManager.translation("feature.city.war.menu.participants.selected_prefix") + : Component.empty(); + meta.displayName(prefixComponent.append(Component.text(prefix + offline.getName())) .decoration(TextDecoration.ITALIC, false)); - meta.lore(List.of(Component.text(isSelected ? "§c§lCLIQUEZ POUR RETIRER" : "§a§lCLIQUEZ POUR SÉLECTIONNER"))); + meta.lore(List.of(TranslationManager.translation( + isSelected ? "feature.city.war.menu.participants.click_remove" : "feature.city.war.menu.participants.click_select" + ).color(isSelected ? NamedTextColor.RED : NamedTextColor.GREEN).decorate(TextDecoration.BOLD))); }).setOnClick(event -> { if (isSelected) { selected.remove(memberUUID); } else { if (selected.size() >= count) { MessagesManager.sendMessage(player, - Component.text("Vous avez déjà sélectionné " + count + " joueur(s)."), + TranslationManager.translation( + "feature.city.war.menu.participants.already_selected", + Component.text(count) + ), Prefix.CITY, MessageType.ERROR, false); return; } @@ -124,26 +138,32 @@ public Map getButtons() { Player player = getOwner(); map.put(48, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_back_orange").getBest(), meta -> { - meta.displayName(Component.text("§cPage précédente")); + meta.displayName(TranslationManager.translation("messages.menus.previous_page")); }).setPreviousPageButton()); map.put(49, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_cancel").getBest(), meta -> { - meta.displayName(Component.text("§7Fermer")); + meta.displayName(TranslationManager.translation("messages.menus.close")); }).setCloseButton()); map.put(50, new ItemBuilder(this, CustomItemRegistry.getByName("_iainternal:icon_next_orange").getBest(), meta -> { - meta.displayName(Component.text("§aPage suivante")); + meta.displayName(TranslationManager.translation("messages.menus.next_page")); }).setNextPageButton()); map.put(53, new ItemBuilder(this, selected.size() == count ? Material.LIME_CONCRETE : Material.RED_CONCRETE, itemMeta -> { - itemMeta.displayName(Component.text((selected.size() == count ? "§a" : "§c") + "Valider la sélection")); - itemMeta.lore(List.of( - Component.text("§7Participants sélectionnés : §a" + selected.size() + "/" + count) - )); + itemMeta.displayName(TranslationManager.translation("feature.city.war.menu.participants.confirm.title") + .color(selected.size() == count ? NamedTextColor.GREEN : NamedTextColor.RED)); + itemMeta.lore(List.of(TranslationManager.translation( + "feature.city.war.menu.participants.confirm.lore", + Component.text(selected.size()).color(NamedTextColor.GREEN), + Component.text(count).color(NamedTextColor.RED) + ).color(NamedTextColor.GRAY))); }).setOnClick(e -> { if (selected.size() != count) { MessagesManager.sendMessage(player, - Component.text("Vous devez sélectionner " + count + " joueur(s)."), + TranslationManager.translation( + "feature.city.war.menu.participants.must_select", + Component.text(count).color(NamedTextColor.RED) + ), Prefix.CITY, MessageType.ERROR, false); return; } @@ -159,7 +179,7 @@ public Map getButtons() { @Override public @NotNull Component getName() { - return Component.text("Menu des Guerre - Participants"); + return TranslationManager.translation("feature.city.war.menu.participants.title"); } @Override diff --git a/src/main/java/fr/openmc/core/features/city/sub/war/menu/selection/WarChooseSizeMenu.java b/src/main/java/fr/openmc/core/features/city/sub/war/menu/selection/WarChooseSizeMenu.java index 92f1273e5..4862794cc 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/war/menu/selection/WarChooseSizeMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/war/menu/selection/WarChooseSizeMenu.java @@ -8,7 +8,9 @@ import fr.openmc.core.features.city.sub.war.actions.WarActions; import fr.openmc.core.features.city.sub.war.menu.MoreInfoMenu; import fr.openmc.core.registry.items.CustomItemRegistry; +import fr.openmc.core.utils.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; @@ -60,11 +62,13 @@ public List getItems() { int count = i; items.add(new ItemBuilder(this, Material.IRON_SWORD, meta -> { - meta.displayName(Component.text("§c" + count + " vs " + count)); - meta.lore(List.of( - Component.text("§7Affrontement entre " + count + " §7joueurs de chaque ville."), - Component.empty(), - Component.text("§e§lCLIQUEZ POUR CONTINUER") + meta.displayName(TranslationManager.translation( + "feature.city.war.menu.size.title", + Component.text(count).color(NamedTextColor.RED) + ).color(NamedTextColor.RED)); + meta.lore(TranslationManager.translationLore( + "feature.city.war.menu.size.lore", + Component.text(count).color(NamedTextColor.GRAY) )); }).setOnClick(event -> { WarActions.preFinishLaunchWar(getOwner(), cityLaunch, cityAttack, count); @@ -82,18 +86,14 @@ public List getTakableSlot() { @Override public Map getButtons() { Map map = new HashMap<>(); - map.put(49, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_cancel")).getBest(), itemMeta -> itemMeta.displayName(Component.text("§7Fermer"))).setCloseButton()); - map.put(48, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_back_orange")).getBest(), itemMeta -> itemMeta.displayName(Component.text("§cPage précédente"))).setPreviousPageButton()); - map.put(50, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_next_orange")).getBest(), itemMeta -> itemMeta.displayName(Component.text("§aPage suivante"))).setNextPageButton()); + map.put(49, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_cancel")).getBest(), itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.close"))).setCloseButton()); + map.put(48, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_back_orange")).getBest(), itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.previous_page"))).setPreviousPageButton()); + map.put(50, new ItemBuilder(this, Objects.requireNonNull(CustomItemRegistry.getByName("_iainternal:icon_next_orange")).getBest(), itemMeta -> itemMeta.displayName(TranslationManager.translation("messages.menus.next_page"))).setNextPageButton()); - List loreInfo = Arrays.asList( - Component.text("§7Apprenez en plus sur les Guerres !"), - Component.text("§7La préparation, le combat, ..."), - Component.text("§e§lCLIQUEZ ICI POUR EN SAVOIR PLUS!") - ); + List loreInfo = TranslationManager.translationLore("feature.city.war.menu.more_info.lore"); map.put(53, new ItemBuilder(this, Material.BOOK, itemMeta -> { - itemMeta.displayName(Component.text("§r§aPlus d'info !")); + itemMeta.displayName(TranslationManager.translation("feature.city.war.menu.more_info.title")); itemMeta.lore(loreInfo); }).setOnClick(inventoryClickEvent -> new MoreInfoMenu(getOwner()).open())); @@ -102,7 +102,7 @@ public Map getButtons() { @Override public @NotNull Component getName() { - return Component.text("Menu des Guerres - Séléction"); + return TranslationManager.translation("feature.city.war.menu.size.menu_title"); } @Override diff --git a/src/main/java/fr/openmc/core/utils/messages/MessagesManager.java b/src/main/java/fr/openmc/core/utils/messages/MessagesManager.java index 081de55b3..ae16ccbda 100644 --- a/src/main/java/fr/openmc/core/utils/messages/MessagesManager.java +++ b/src/main/java/fr/openmc/core/utils/messages/MessagesManager.java @@ -1,7 +1,6 @@ package fr.openmc.core.utils.messages; import fr.openmc.core.features.settings.PlayerSettingsManager; -import lombok.Getter; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; @@ -9,6 +8,7 @@ import org.bukkit.entity.Player; import java.text.Normalizer; +import java.util.List; import java.util.Map; public class MessagesManager { @@ -64,7 +64,6 @@ public static void sendMessage(OfflinePlayer sender, Component message, Prefix p if (sender.isOnline() && sender instanceof Player player) { sendMessage(player, message, prefix, type, 1.0F, sound); } - } /** @@ -79,6 +78,21 @@ public static void sendMessage(CommandSender sender, Component message, Prefix p sendMessage(sender, message, prefix, MessageType.NONE, false); } + /** + * Sends a message to the player. + * @param player The player to send the message + * @param messages The list of component which will be concatenated and sent to the player + */ + public static void sendMessage(Player player, List messages) { + Component messageComponent = Component.empty(); + + for (Component component : messages) { + messageComponent = messageComponent.appendNewline().append(component); + } + + player.sendMessage(messageComponent); + } + /** * * Broadcasts a formatted message to the entire server diff --git a/src/main/resources/translations/lang.properties b/src/main/resources/translations/lang.properties index e218c7227..321721c57 100644 --- a/src/main/resources/translations/lang.properties +++ b/src/main/resources/translations/lang.properties @@ -50,6 +50,7 @@ messages.menus.previous_page_lore=Cliquez pour aller à la page précéden messages.menus.next_page=Page suivante messages.menus.next_page_lore=Cliquez pour aller à la page suivante messages.menus.close=Fermer +messages.menus.none=Aucun # ** COMMANDS ** command.api.cooldown.debug.must_wait=%2$s (%1$ss) @@ -222,10 +223,10 @@ feature.city.view.commands.visiualizing=Visualisation des claims des villes en c feature.city.type.in_peace=en paix feature.city.type.in_war=en guerre feature.city.type.confirm_change=Es-tu sûr de vouloir changer le type de ta ville -feature.city.type.change_type_to_type=Vous allez passez d'une ville %1$s à une ville %2$s +feature.city.type.change_type_to_type=Vous allez passez d'une ville %1$s à une ville %2$s feature.city.type.warning_war=⚠ Vous pourrez être exposé à des guerres contre d'autres villes à tout moment ! feature.city.type.mascot_losing_level=⚠ Ta mascotte perdra 1 niveau ! -feature.city.type.not_change_type=Ne pas changer le type de ville +feature.city.type.not_change_type=Ne pas changer le type de ville feature.city.type.mascot_not_exist_change_type=Vous n'avez pas de mascotte pour changer le type de votre ville (contactez le staff) feature.city.type.mascot_must_by_alive_change_type=Votre mascotte doit être en vie pour changer le type de ville feature.city.type.must_wait_before_change_type=Vous devez attendre %1$s avant de changer de type de ville @@ -244,7 +245,7 @@ feature.city.claim.already_claim_in_adjacent=Une des parcelles autour de ce chun # - Create feature.city.create.success=Votre ville a été créée : %1$s -feature.city.create.free_claim="+ %1$s chunks gratuits +feature.city.create.free_claim=+ %1$s chunks gratuits # - Delete feature.city.delete.confirm.lore=Voulez vous vraiment dissoudre la ville %1$s ? @@ -510,7 +511,7 @@ feature.city.menus.no_city.create.lore.ready=Vous pouvez aussi créer Faites /city create [nom] ou bien cliquez ici ! \
Coûte : \
- %1$s %2$s \ -
- %3$s d'Aywenite \ +
- %3$s d'Aywenite \
CLIQUEZ ICI POUR CREER VOTRE VILLE feature.city.menus.invitations.name=Menu des villes - Invitations feature.city.menus.invitations.item.name=%1$s vous a invité(e) dans %2$s @@ -947,7 +948,7 @@ feature.city.mascots.interaction.error.not_owner=Cette mascotte ne vous app feature.city.mascots.rename.error=Vous ne pouvez pas renommer cette mascotte feature.city.mascots.name.alive=%1$s %2$s%3$s -feature.city.mascots.name.dead=☠ Mascotte Morte +feature.city.mascots.name.dead= Mascotte Morte feature.city.mascots.admin.remove.success=Mascotte supprimée @@ -977,6 +978,174 @@ feature.city.mascot.mascot=Mascotte # - War feature.city.war.peace=Paix feature.city.war.war=Guerre +feature.city.war.command.type_required=Votre ville n'est pas dans un statut de guerre ! Changez le type de votre ville avec /city type ou depuis le menu principal des villes +feature.city.war.command.city_immune=Votre ville est actuellement en période d'immunité, vous ne pouvez pas lancer de guerre pour le moment. \ +
Temps restant : %1$s +feature.city.war.command.no_permission_launch=Vous n'avez pas la permission de lancer une guerre pour la ville +feature.city.war.command.already_declared=Vous avez déjà été déclaré en guerre ! +feature.city.war.command.already_in_war=Vous êtes déjà en guerre ! +feature.city.war.command.defense.none=Aucune guerre en cours de préparation. +feature.city.war.command.defense.full=Le nombre maximal de défenseurs est atteint. +feature.city.war.command.defense.accepted=Vous participez désormais à la défense ! Plus aucun retour en arrière possible. +feature.city.war.begin.type_required=Votre ville n'est pas dans un statut de guerre ! Changez le type de votre ville avec /city type ou dans le menu principal des villes +feature.city.war.begin.target_not_war=La ville que vous essayez d'attaquer n'est pas dans un statut de guerre ! +feature.city.war.begin.no_permission_launch=Vous n'avez pas la permission de lancer une guerre pour la ville +feature.city.war.begin.already_declared=Vous avez déjà été déclaré en guerre ! +feature.city.war.begin.already_in_war=Votre ville est déjà en guerre ! +feature.city.war.begin.target_preparing=La ville que vous essayez d'attaquer est déjà en préparation des troupes +feature.city.war.begin.target_in_war=La ville que vous essayez d'attaquer est déjà en guerre ! +feature.city.war.begin.target_immune=La ville que vous essayez d'attaquer est en période d'immunité ! +feature.city.war.begin.city_immune=Votre ville est en période d'immunité ! +feature.city.war.begin.target_no_online=La ville que vous essayez d'attaquer n'a aucun membre de connecté ! +feature.city.war.begin.no_combat=Aucun combat possible (pas assez de joueurs connectés) +feature.city.war.begin.not_enough_members=Pas assez de membres connectés pour lancer un combat en %1$s vs %1$s +feature.city.war.begin.city_already_in_war=Une des villes est déjà en guerre ! +feature.city.war.begin.confirm.lore=ATTENTION \ +
Vous êtes sur le point de lancer une guerre contre %1$s \ +
avec %2$s joueurs de votre ville. +feature.city.war.begin.confirm.cancel=Ne pas lancer une guerre contre %1$s +feature.city.war.begin.defense.attacked=⚔ Votre ville est attaquée par %1$s , il vous faut %2$s joueur(s) ! +feature.city.war.begin.defense.click_to_join=Cliquez ici pour rejoindre la défense ! +feature.city.war.begin.defense.hover_join=Cliquez pour participer à la guerre +feature.city.war.begin.attacker.chosen=⚔ Vous avez été choisi pour vous battre contre %1$s +feature.city.war.begin.waiting_defense=Veuillez attendre que %1$s réagisse, la partie sera tout de même lancée dans 2 min +feature.city.war.begin.cancel_not_enough_defenders=La guerre a été annulée car la ville ennemie n'avait pas assez de défenseurs requis. +feature.city.war.preparation.message= \ +
\ +
GUERRE ! La préparation de la guerre commence \ +
Préparez vous pour le combat contre %1$s \ +
Vous avez %2$s minutes pour vous équiper. \ +
Vous serez en %3$s VS %4$s \ +
Lorsque le combat commencera vous serez téléporté à votre mascotte. \ +
\ +
+feature.city.war.combat.message= \ +
\ +
GUERRE ! Le combat est imminent ! \ +
Battez vous contre %1$s \ +
Vous avez %2$s minutes de combat. \ +
Si vous tuez la mascotte de la ville adverse, vous remportez la guerre. \ +
\ +
+feature.city.war.result.draw= \ +
\ +
GUERRE ! C'est la fin des combats! \ +
Il y a eu égalité ! \ +
\ +
Statistiques globales: \ +
- Kills de %3$s : %4$s \ +
- Kills de %5$s : %6$s \ +
\ +
+feature.city.war.result.reason.win.mascot_death=Vous avez tué la mascotte adverse ! +feature.city.war.result.reason.win.mascot_hp=Votre mascotte a eu le plus de points de vie ! +feature.city.war.result.reason.win.kills=Votre ville a tué le plus d'adversaires ! +feature.city.war.result.reason.win.draw=C'est une égalité ! +feature.city.war.result.reason.lose.mascot_death=Votre mascotte a été tuée ! +feature.city.war.result.reason.lose.mascot_hp=Votre mascotte a eu le moins de points de vie ! +feature.city.war.result.reason.lose.kills=L'adversaire a tué le plus de monde ! +feature.city.war.result.reason.lose.draw=C'est une égalité ! +feature.city.war.result.winner= \ +
\ +
GUERRE ! C'est la fin des combats! \ +
Vous avez gagné contre %1$s ! \ +
%2$s \ +
\ +
Statistiques globales: \ +
- Kills de %3$s : %4$s \ +
- Kills de %5$s : %6$s \ +
\ +
Récompenses \ +
%7$s \ +
%8$s \ +
%9$s \ +
\ +
+feature.city.war.result.loser= \ +
\ +
GUERRE ! C'est la fin des combats! \ +
Vous avez perdu contre %1$s ! \ +
%2$s \ +
\ +
Statistiques globales: \ +
- Kills de %3$s : %4$s \ +
- Kills de %5$s : %6$s \ +
\ +
Pertes \ +
%7$s \ +
%8$s \ +
%9$s \ +
\ +
+feature.city.war.result.reward.power=+ %1$s points de puissance +feature.city.war.result.reward.money=+ %1$s volés à l'adversaire +feature.city.war.result.reward.money_bonus=+ %1$s volés à l'adversaire + %2$s bonus +feature.city.war.result.reward.claims=+ %1$s territoire(s) conquis +feature.city.war.result.loss.power=- %1$s points de puissance +feature.city.war.result.loss.money=- %1$s perdu +feature.city.war.result.loss.claims=- %1$s territoire(s) perdus +feature.city.war.admin.not_in_preparation=Cette ville n'est pas en préparation de guerre ! +feature.city.war.tnt.limit_reached=La ville %1$s a atteint sa limite journalière de TNT ! (%2$s/%3$s TNT journalière) +feature.city.war.menu.main.title=Menu des Guerres +feature.city.war.menu.main.owner=Propriétaire : %1$s +feature.city.war.menu.main.population_online=Population (en ligne) : %1$s +feature.city.war.menu.main.mascot_level=Mascotte : niv. %1$s +feature.city.war.menu.main.mascot_location=Location : %1$s +feature.city.war.menu.main.reforms=Réformes : +feature.city.war.menu.main.wealth=Richesses : %1$s +feature.city.war.menu.main.click_details=CLIQUE DROIT POUR PLUS D'INFORMATIONS SUR LA VILLE +feature.city.war.menu.main.click_launch=CLIQUE GAUCHE POUR LANCER UNE GUERRE +feature.city.war.menu.more_info.title=Plus d'info ! +feature.city.war.menu.more_info.lore=Apprenez en plus sur les Guerres ! \ +
La préparation, le combat, ... \ +
CLIQUEZ ICI POUR EN SAVOIR PLUS! +feature.city.war.menu.more_info.menu_title=Menu des Guerres - Plus d'info +feature.city.war.menu.more_info.prep.title=La préparation - %1$s min +feature.city.war.menu.more_info.prep.lore=Choisissez une ville à attaquer ! \ +
Le nombre de combattants sera le même partout ! \ +
ex. Si vous êtes 5 joueurs de connectés et 2 en face, \ +
alors vous aurez le choix de faire un 1vs1 ou un 2vs2 \ +
\ +
Lorsque vous venez déclarer la guerre à une ville, les personnes concernées seront informées \ +
Vous aurez %1$s min de préparation \ +
ce qui vous laisse le temps de s’équiper et d’aller au front ! +feature.city.war.menu.more_info.combat.title=Le combat - %1$s min +feature.city.war.menu.more_info.combat.lore=Le combat commence, la partie se finira %1$s min après le commencement. \ +
Elle peut être finie avant si la mascotte ennemie est tuée. \ +
Et pendant ce moment, vous pouvez tout faire dans la ville ennemie. +feature.city.war.menu.more_info.result.title=Les résultats +feature.city.war.menu.more_info.result.lore=La fin de la guerre, la paix s’impose entre les deux camps. \ +
Le vainqueur est désigné, la récompense est donnée. \ +
Et les deux villes obtiennent une immunité de 2 jours ! +feature.city.war.menu.details.title=Menu de Guerre - Détails de %1$s +feature.city.war.menu.details.mascot.level=Niveau de la mascotte : %1$s +feature.city.war.menu.details.mascot.location=Location de la mascotte : %1$s +feature.city.war.menu.details.size=Taille : %1$s chunks +feature.city.war.menu.details.wealth=Richesses : %1$s +feature.city.war.menu.details.population=Population : %1$s %2$s +feature.city.war.menu.details.population_online=Population connectée : %1$s %2$s +feature.city.war.menu.details.population.player=joueur +feature.city.war.menu.details.population.players=joueurs +feature.city.war.menu.details.type=Type : %1$s +feature.city.war.menu.players.title=Menu de Guerre - Membres +feature.city.war.menu.players.role.owner=Propriétaire +feature.city.war.menu.players.role.mayor=Maire +feature.city.war.menu.players.role.member=Membre +feature.city.war.menu.players.back_lore=Vous allez retourner au menu des détails de la ville en guerre \ +
CLIQUEZ ICI POUR CONFIRMER +feature.city.war.menu.size.menu_title=Menu des Guerres - Sélection +feature.city.war.menu.size.title=%1$s vs %1$s +feature.city.war.menu.size.lore=Affrontement entre %1$s joueurs de chaque ville. \ +
\ +
CLIQUEZ POUR CONTINUER +feature.city.war.menu.participants.title=Menu des Guerres - Participants +feature.city.war.menu.participants.selected_prefix= +feature.city.war.menu.participants.click_remove=CLIQUEZ POUR RETIRER +feature.city.war.menu.participants.click_select=CLIQUEZ POUR SÉLECTIONNER +feature.city.war.menu.participants.already_selected=Vous avez déjà sélectionné %1$s joueur(s). +feature.city.war.menu.participants.confirm.title=Valider la sélection +feature.city.war.menu.participants.confirm.lore=Participants sélectionnés : %1$s/%2$s +feature.city.war.menu.participants.must_select=Vous devez sélectionner %1$s joueur(s). # - Mayor feature.city.mayor.perk.category.military=Réformes militaires