diff --git a/src/main/java/fr/openmc/core/features/dream/milestone/quests/TransferableObjectQuest.java b/src/main/java/fr/openmc/core/features/dream/milestone/quests/TransferableObjectQuest.java index 658c46f1b..e8343d9d7 100644 --- a/src/main/java/fr/openmc/core/features/dream/milestone/quests/TransferableObjectQuest.java +++ b/src/main/java/fr/openmc/core/features/dream/milestone/quests/TransferableObjectQuest.java @@ -12,6 +12,7 @@ import fr.openmc.core.features.quests.rewards.QuestTextReward; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.Prefix; +import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -36,8 +37,7 @@ public TransferableObjectQuest() { DreamSteps.TRANSFERABLE_OBJECT, new QuestTier( 1, - new QuestTextReward("Il y a bien un lien entre cette dimension et le monde réel. " + - "Et ce n'est que le début d'une nouvelle aventure !", Prefix.DREAM, MessageType.SUCCESS) + new QuestTextReward(Component.text("Il y a bien un lien entre cette dimension et le monde réel. Et ce n'est que le début d'une nouvelle aventure !"), Prefix.DREAM, MessageType.SUCCESS) ) ); } diff --git a/src/main/java/fr/openmc/core/features/itemsadder/SpawnerExtractorListener.java b/src/main/java/fr/openmc/core/features/itemsadder/SpawnerExtractorListener.java index 1074982f1..b7ee27146 100644 --- a/src/main/java/fr/openmc/core/features/itemsadder/SpawnerExtractorListener.java +++ b/src/main/java/fr/openmc/core/features/itemsadder/SpawnerExtractorListener.java @@ -2,9 +2,8 @@ import dev.lone.itemsadder.api.CustomStack; import fr.openmc.core.OMCPlugin; -import fr.openmc.core.utils.EnumUtils; +import fr.openmc.core.utils.text.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.block.Block; @@ -41,7 +40,7 @@ public void onBlockBreak(BlockBreakEvent event) { return; if (ThreadLocalRandom.current().nextDouble() < FAILURE_CHANCE) { - player.sendActionBar(Component.text("L'extraction a échoué ! Le spawner s'est brisé.", NamedTextColor.RED)); + player.sendActionBar(TranslationManager.translation("feature.itemsadder.spawner_extractor.fail")); return; } @@ -51,16 +50,19 @@ public void onBlockBreak(BlockBreakEvent event) { ItemStack spawnerItem = ItemStack.of(Material.SPAWNER); spawnerItem.editMeta(meta -> { - meta.displayName(Component.text("Spawner à ", NamedTextColor.YELLOW) - .append(Component.translatable(entityType.translationKey()))); + meta.displayName(TranslationManager.translation( + "feature.itemsadder.spawner_extractor.display_name", + Component.translatable(entityType.translationKey()) + )); meta.getPersistentDataContainer().set(KEY_SPAWNER_MOB, PersistentDataType.STRING, entityType.name()); }); block.getWorld().dropItemNaturally(block.getLocation(), spawnerItem); - player.sendActionBar(Component.text("Vous avez extrait un spawner à ", NamedTextColor.GREEN) - .append(Component.translatable(entityType.translationKey())) - .append(Component.text(" !"))); + player.sendActionBar(TranslationManager.translation( + "feature.itemsadder.spawner_extractor.success_extract", + Component.translatable(entityType.translationKey()) + )); } @EventHandler @@ -82,8 +84,9 @@ public void onBlockPlace(BlockPlaceEvent event) { spawner.setSpawnedType(entityType); spawner.update(); - event.getPlayer().sendActionBar(Component.text("Spawner à ", NamedTextColor.GREEN) - .append(Component.translatable(entityType.translationKey())) - .append(Component.text(" placé !"))); + event.getPlayer().sendActionBar(TranslationManager.translation( + "feature.itemsadder.spawner_extractor.success_place", + Component.translatable(entityType.translationKey()) + )); } } \ No newline at end of file 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 9c5e554d1..224463126 100644 --- a/src/main/java/fr/openmc/core/features/leaderboards/LeaderboardManager.java +++ b/src/main/java/fr/openmc/core/features/leaderboards/LeaderboardManager.java @@ -17,6 +17,7 @@ import fr.openmc.core.features.leaderboards.commands.LeaderboardCommands; import fr.openmc.core.utils.cache.PlayerNameCache; import fr.openmc.core.utils.text.DateUtils; +import fr.openmc.core.utils.text.messages.TranslationManager; import fr.openmc.core.utils.world.entities.TextDisplay; import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import lombok.Getter; @@ -107,9 +108,10 @@ public Set getCommands() { public static Component createContributorsTextLeaderboard() { var contributorsMap = new TreeMap<>(LeaderboardManager.getGithubContributorsMap()); if (contributorsMap.isEmpty()) { - return Component.text("Aucun contributeur trouvé pour le moment.").color(NamedTextColor.RED); + return TranslationManager.translation("feature.leaderboards.empty.contributors") + .color(NamedTextColor.RED); } - Component text = Component.text("--- Leaderboard des Contributeurs GitHub ---") + Component text = TranslationManager.translation("feature.leaderboards.header.contributors") .color(NamedTextColor.DARK_PURPLE) .decorate(TextDecoration.BOLD); for (var entry : contributorsMap.entrySet()) { @@ -121,19 +123,24 @@ public static Component createContributorsTextLeaderboard() { int addLines = stats.added(); int removeLines = stats.removed(); - Component line = Component.text("\n#") - .color(getRankColor(rank)) - .append(Component.text(rank).color(getRankColor(rank))) - .append(Component.text(" ").append(Component.text(contributorName).color(NamedTextColor.LIGHT_PURPLE))) - .append(Component.text(" + ").color(NamedTextColor.GREEN)) - .append(Component.text(addLines).color(NamedTextColor.WHITE) - .append(Component.text(" - ").color(NamedTextColor.RED)) - .append(Component.text(removeLines).color(NamedTextColor.WHITE))); + TextColor rankColor = getRankColor(rank); + Component rankComponent = Component.text("#") + .color(rankColor) + .append(Component.text(rank).color(rankColor)); + Component line = Component.text("\n") + .append(TranslationManager.translation( + "feature.leaderboards.line.contributors", + rankComponent, + Component.text(contributorName).color(NamedTextColor.LIGHT_PURPLE), + Component.text(addLines).color(NamedTextColor.WHITE), + Component.text(removeLines).color(NamedTextColor.WHITE) + )); text = text.append(line); } - text = text.append(Component.text("\n-----------------------------------------") - .color(NamedTextColor.DARK_PURPLE) - .decorate(TextDecoration.BOLD)); + text = text.append(Component.text("\n") + .append(TranslationManager.translation("feature.leaderboards.footer") + .color(NamedTextColor.DARK_PURPLE) + .decorate(TextDecoration.BOLD))); return text; } @@ -145,9 +152,10 @@ public static Component createContributorsTextLeaderboard() { public static Component createMoneyTextLeaderboard() { var moneyMap = new TreeMap<>(LeaderboardManager.getPlayerMoneyMap()); if (moneyMap.isEmpty()) { - return Component.text("Aucun joueur trouvé pour le moment.").color(NamedTextColor.RED); + return TranslationManager.translation("feature.leaderboards.empty.players") + .color(NamedTextColor.RED); } - Component text = Component.text("--- Leaderboard de l'argent des joueurs ---") + Component text = TranslationManager.translation("feature.leaderboards.header.money") .color(NamedTextColor.DARK_PURPLE) .decorate(TextDecoration.BOLD); for (var entry : moneyMap.entrySet()) { @@ -157,17 +165,25 @@ public static Component createMoneyTextLeaderboard() { if (playerName == null || money == null) continue; - Component line = Component.text("\n#") - .color(getRankColor(rank)) - .append(Component.text(rank).color(getRankColor(rank))) - .append(Component.text(" ").append(Component.text(playerName).color(NamedTextColor.LIGHT_PURPLE))) - .append(Component.text(" - ").color(NamedTextColor.GRAY)) - .append(Component.text(money + " " + EconomyManager.getEconomyIcon()).color(NamedTextColor.WHITE)); + TextColor rankColor = getRankColor(rank); + Component rankComponent = Component.text("#") + .color(rankColor) + .append(Component.text(rank).color(rankColor)); + Component valueComponent = Component.text(money + " " + EconomyManager.getEconomyIcon()) + .color(NamedTextColor.WHITE); + Component line = Component.text("\n") + .append(TranslationManager.translation( + "feature.leaderboards.line.money", + rankComponent, + Component.text(playerName).color(NamedTextColor.LIGHT_PURPLE), + valueComponent + )); text = text.append(line); } - text = text.append(Component.text("\n-----------------------------------------") - .color(NamedTextColor.DARK_PURPLE) - .decorate(TextDecoration.BOLD)); + text = text.append(Component.text("\n") + .append(TranslationManager.translation("feature.leaderboards.footer") + .color(NamedTextColor.DARK_PURPLE) + .decorate(TextDecoration.BOLD))); return text; } @@ -179,9 +195,10 @@ public static Component createMoneyTextLeaderboard() { public static Component createCityMoneyTextLeaderboard() { var moneyMap = LeaderboardManager.getVilleMoneyMap(); if (moneyMap.isEmpty()) { - return Component.text("Aucune ville trouvée pour le moment.").color(NamedTextColor.RED); + return TranslationManager.translation("feature.leaderboards.empty.cities") + .color(NamedTextColor.RED); } - Component text = Component.text("--- Leaderboard de l'argent des villes ---") + Component text = TranslationManager.translation("feature.leaderboards.header.city_money") .color(NamedTextColor.DARK_PURPLE) .decorate(TextDecoration.BOLD); for (var entry : moneyMap.entrySet()) { @@ -191,17 +208,25 @@ public static Component createCityMoneyTextLeaderboard() { if (cityName == null || money == null) continue; - Component line = Component.text("\n#") - .color(getRankColor(rank)) - .append(Component.text(rank).color(getRankColor(rank))) - .append(Component.text(" ").append(Component.text(cityName).color(NamedTextColor.LIGHT_PURPLE))) - .append(Component.text(" - ").color(NamedTextColor.GRAY)) - .append(Component.text(money + " " + EconomyManager.getEconomyIcon()).color(NamedTextColor.WHITE)); + TextColor rankColor = getRankColor(rank); + Component rankComponent = Component.text("#") + .color(rankColor) + .append(Component.text(rank).color(rankColor)); + Component valueComponent = Component.text(money + " " + EconomyManager.getEconomyIcon()) + .color(NamedTextColor.WHITE); + Component line = Component.text("\n") + .append(TranslationManager.translation( + "feature.leaderboards.line.city_money", + rankComponent, + Component.text(cityName).color(NamedTextColor.LIGHT_PURPLE), + valueComponent + )); text = text.append(line); } - text = text.append(Component.text("\n-----------------------------------------") - .color(NamedTextColor.DARK_PURPLE) - .decorate(TextDecoration.BOLD)); + text = text.append(Component.text("\n") + .append(TranslationManager.translation("feature.leaderboards.footer") + .color(NamedTextColor.DARK_PURPLE) + .decorate(TextDecoration.BOLD))); return text; } @@ -213,9 +238,10 @@ public static Component createCityMoneyTextLeaderboard() { public static Component createPlayTimeTextLeaderboard() { var playtimeMap = new TreeMap<>(LeaderboardManager.getPlayTimeMap()); if (playtimeMap.isEmpty()) { - return Component.text("Aucun joueur trouvé pour le moment.").color(NamedTextColor.RED); + return TranslationManager.translation("feature.leaderboards.empty.players") + .color(NamedTextColor.RED); } - Component text = Component.text("------- Leaderboard du temps de jeu -------") + Component text = TranslationManager.translation("feature.leaderboards.header.playtime") .color(NamedTextColor.DARK_PURPLE) .decorate(TextDecoration.BOLD); for (var entry : playtimeMap.entrySet()) { @@ -225,26 +251,33 @@ public static Component createPlayTimeTextLeaderboard() { if (playerName == null || time == null) continue; - Component line = Component.text("\n#") - .color(getRankColor(rank)) - .append(Component.text(rank).color(getRankColor(rank))) - .append(Component.text(" ").append(Component.text(playerName).color(NamedTextColor.LIGHT_PURPLE))) - .append(Component.text(" - ").color(NamedTextColor.GRAY)) - .append(Component.text(time).color(NamedTextColor.WHITE)); + TextColor rankColor = getRankColor(rank); + Component rankComponent = Component.text("#") + .color(rankColor) + .append(Component.text(rank).color(rankColor)); + Component line = Component.text("\n") + .append(TranslationManager.translation( + "feature.leaderboards.line.playtime", + rankComponent, + Component.text(playerName).color(NamedTextColor.LIGHT_PURPLE), + Component.text(time).color(NamedTextColor.WHITE) + )); text = text.append(line); } - text = text.append(Component.text("\n-----------------------------------------") - .color(NamedTextColor.DARK_PURPLE) - .decorate(TextDecoration.BOLD)); + text = text.append(Component.text("\n") + .append(TranslationManager.translation("feature.leaderboards.footer") + .color(NamedTextColor.DARK_PURPLE) + .decorate(TextDecoration.BOLD))); return text; } public static Component createPumpkinCountTextLeaderboard() { var pumpkinCountMap = new TreeMap<>(LeaderboardManager.getPumpkinCountMap()); if (pumpkinCountMap.isEmpty()) { - return Component.text("Aucun joueur trouvé pour le moment.", NamedTextColor.RED); + return TranslationManager.translation("feature.leaderboards.empty.players") + .color(NamedTextColor.RED); } - Component text = Component.text("--- Leaderboard des critrouilles ---") + Component text = TranslationManager.translation("feature.leaderboards.header.pumpkin") .color(TextColor.color(156, 69, 26)) .decorate(TextDecoration.BOLD); for (var entry : pumpkinCountMap.entrySet()) { @@ -254,17 +287,23 @@ public static Component createPumpkinCountTextLeaderboard() { if (playerName == null || pumpkinCount == null) continue; - Component line = Component.text("\n#") - .color(getRankColor(rank)) - .append(Component.text(rank).color(getRankColor(rank))) - .append(Component.text(" ").append(Component.text(playerName).color(TextColor.color(255, 107, 37)))) - .append(Component.text(" - ").color(NamedTextColor.GRAY)) - .append(Component.text(pumpkinCount + " citrouilles").color(NamedTextColor.WHITE)); + TextColor rankColor = getRankColor(rank); + Component rankComponent = Component.text("#") + .color(rankColor) + .append(Component.text(rank).color(rankColor)); + Component line = Component.text("\n") + .append(TranslationManager.translation( + "feature.leaderboards.line.pumpkin", + rankComponent, + Component.text(playerName).color(TextColor.color(255, 107, 37)), + Component.text(pumpkinCount).color(NamedTextColor.WHITE) + )); text = text.append(line); } - text = text.append(Component.text("\n-----------------------------------------") - .color(TextColor.color(156, 69, 26)) - .decorate(TextDecoration.BOLD)); + text = text.append(Component.text("\n") + .append(TranslationManager.translation("feature.leaderboards.footer") + .color(TextColor.color(156, 69, 26)) + .decorate(TextDecoration.BOLD))); return text; } diff --git a/src/main/java/fr/openmc/core/features/leaderboards/commands/LeaderboardCommands.java b/src/main/java/fr/openmc/core/features/leaderboards/commands/LeaderboardCommands.java index f3bfc1e58..10d5c2f03 100644 --- a/src/main/java/fr/openmc/core/features/leaderboards/commands/LeaderboardCommands.java +++ b/src/main/java/fr/openmc/core/features/leaderboards/commands/LeaderboardCommands.java @@ -4,7 +4,9 @@ import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.MessagesManager; import fr.openmc.core.utils.text.messages.Prefix; +import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import revxrsal.commands.annotation.*; @@ -19,7 +21,8 @@ public class LeaderboardCommands { @CommandPlaceholder() void mainCommand(CommandSender sender) { - sender.sendMessage("§cVeuillez spécifier un leaderboard valide. (Ex: /leaderboard contributeurs)"); + sender.sendMessage(TranslationManager.translation("feature.leaderboards.command.invalid") + .color(NamedTextColor.RED)); } @Subcommand({"contributeurs"}) @@ -72,15 +75,23 @@ void setPosCommand( LeaderboardManager.setHologramLocation(leaderboard, player.getLocation()); MessagesManager.sendMessage( player, - Component.text("§aPosition du leaderboard " + leaderboard + " mise à jour."), + TranslationManager.translation( + "feature.leaderboards.command.position_updated", + Component.text(leaderboard).color(NamedTextColor.GREEN) + ).color(NamedTextColor.GREEN), Prefix.STAFF, MessageType.SUCCESS, true ); } catch (IOException e) { + String errorMessage = e.getMessage() == null ? "" : e.getMessage(); MessagesManager.sendMessage( player, - Component.text("§cErreur lors de la mise à jour de la position du leaderboard " + leaderboard + ": " + e.getMessage()), + TranslationManager.translation( + "feature.leaderboards.command.position_update_failed", + Component.text(leaderboard).color(NamedTextColor.RED), + Component.text(errorMessage).color(NamedTextColor.RED) + ).color(NamedTextColor.RED), Prefix.STAFF, MessageType.ERROR, true @@ -89,7 +100,8 @@ void setPosCommand( } else { MessagesManager.sendMessage( player, - Component.text("§cVeuillez spécifier un leaderboard valide : contributors, money, ville-money, playtime, pumpkin-count"), + TranslationManager.translation("feature.leaderboards.command.invalid_list") + .color(NamedTextColor.RED), Prefix.STAFF, MessageType.WARNING, true @@ -102,7 +114,8 @@ void setPosCommand( @Description("Désactive tout sauf les commandes") void disableCommand(CommandSender sender) { LeaderboardManager.disable(); - sender.sendMessage("§cHologrammes désactivés avec succès."); + sender.sendMessage(TranslationManager.translation("feature.leaderboards.command.holograms_disabled") + .color(NamedTextColor.RED)); } @Subcommand("enable") @@ -110,7 +123,8 @@ void disableCommand(CommandSender sender) { @Description("Active tout") void enableCommand(CommandSender sender) { LeaderboardManager.enable(); - sender.sendMessage("§aHologrammes activés avec succès."); + sender.sendMessage(TranslationManager.translation("feature.leaderboards.command.holograms_enabled") + .color(NamedTextColor.GREEN)); } @Subcommand("update") @@ -124,7 +138,8 @@ void updateCommand(CommandSender sender) { LeaderboardManager.updatePumpkinCountMap(); LeaderboardManager.updateHolograms(); LeaderboardManager.updateHologramsViewers(); - sender.sendMessage("§aHologrammes mis à jour avec succès."); + sender.sendMessage(TranslationManager.translation("feature.leaderboards.command.holograms_updated") + .color(NamedTextColor.GREEN)); } @Subcommand("setScale") @@ -134,12 +149,23 @@ void setScaleCommand( Player player, @Named("scale") float scale ) { - player.sendMessage("§aTaille des hologrammes modifiée à " + scale); + Component scaleComponent = Component.text(Float.toString(scale)).color(NamedTextColor.GREEN); + player.sendMessage(TranslationManager.translation( + "feature.leaderboards.command.scale_changed", + scaleComponent + ).color(NamedTextColor.GREEN)); try { LeaderboardManager.setScale(scale); - player.sendMessage("§aTaille des hologrammes modifiée à " + scale); + player.sendMessage(TranslationManager.translation( + "feature.leaderboards.command.scale_changed", + scaleComponent + ).color(NamedTextColor.GREEN)); } catch (IOException e) { - player.sendMessage("§cErreur lors de la mise à jour de la taille des hologrammes: " + e.getMessage()); + String errorMessage = e.getMessage() == null ? "" : e.getMessage(); + player.sendMessage(TranslationManager.translation( + "feature.leaderboards.command.scale_update_failed", + Component.text(errorMessage).color(NamedTextColor.RED) + ).color(NamedTextColor.RED)); } } } diff --git a/src/main/java/fr/openmc/core/features/mailboxes/MailboxManager.java b/src/main/java/fr/openmc/core/features/mailboxes/MailboxManager.java index 7224574ed..76b0a1c21 100644 --- a/src/main/java/fr/openmc/core/features/mailboxes/MailboxManager.java +++ b/src/main/java/fr/openmc/core/features/mailboxes/MailboxManager.java @@ -19,6 +19,7 @@ import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.MessagesManager; import fr.openmc.core.utils.text.messages.Prefix; +import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.format.NamedTextColor; @@ -101,8 +102,10 @@ private static boolean sendLetter(Player sender, OfflinePlayer receiver, ItemSta OMCLogger.warn("Error while sending items to offline player: {}", ex.getMessage(), ex); MessagesManager.sendMessage( sender, - Component.text("Une erreur est apparue lors de l'envoie des items à ", NamedTextColor.DARK_RED) - .append(Component.text(receiverName, NamedTextColor.RED)), + TranslationManager.translation( + "feature.mailboxes.message.send_error", + Component.text(receiverName).color(NamedTextColor.RED) + ).color(NamedTextColor.DARK_RED), Prefix.MAILBOX, MessageType.ERROR, true @@ -149,14 +152,23 @@ public static void sendMailNotification(Player player) { if (count == 0) return; - Component message = Component.text("Vous avez reçu ", NamedTextColor.DARK_GREEN) - .append(Component.text((count > 1 ? count : "une") + " ", NamedTextColor.GREEN)) - .append(Component.text(pluralize("lettre", count) + ".", NamedTextColor.DARK_GREEN)) - .appendNewline() - .append(Component.text("Cliquez-ici", NamedTextColor.YELLOW)) + String countLabel = count > 1 + ? Long.toString(count) + : TranslationManager.translationString("feature.mailboxes.message.one_letter"); + Component line1 = TranslationManager.translation( + "feature.mailboxes.message.new_letters.line1", + Component.text(countLabel).color(NamedTextColor.GREEN), + Component.text(pluralize("lettre", count)).color(NamedTextColor.DARK_GREEN) + ).color(NamedTextColor.DARK_GREEN); + Component clickComponent = TranslationManager.translation("feature.mailboxes.message.new_letters.click") + .color(NamedTextColor.YELLOW) .clickEvent(ClickEvent.runCommand("/mailbox")) - .hoverEvent(getHoverEvent("Ouvrir ma boîte aux lettres")) - .append(Component.text(" pour ouvrir les lettres", NamedTextColor.GOLD)); + .hoverEvent(getHoverEvent(TranslationManager.translationString("feature.mailboxes.message.new_letters.hover"))); + Component line2 = clickComponent + .append(Component.space()) + .append(TranslationManager.translation("feature.mailboxes.message.new_letters.suffix") + .color(NamedTextColor.GOLD)); + Component message = line1.appendNewline().append(line2); MessagesManager.sendMessage( player, @@ -203,15 +215,24 @@ public static boolean canSend(Player sender, OfflinePlayer receiver) { } private static void sendLetterReceivedNotification(Player receiver, int numItems, int id, String name) { - Component message = Component.text("Vous avez reçu ", NamedTextColor.DARK_GREEN) - .append(Component.text(numItems, NamedTextColor.GREEN)) - .append(Component.text(pluralize(" item", numItems) + " de la part de ", NamedTextColor.DARK_GREEN)) - .append(Component.text(name, NamedTextColor.GREEN)) - .appendNewline() - .append(Component.text("Cliquez-ici", NamedTextColor.YELLOW)) + Component line1 = TranslationManager.translation( + "feature.mailboxes.message.letter_received.line1", + Component.text(numItems).color(NamedTextColor.GREEN), + Component.text(pluralize(" item", numItems)).color(NamedTextColor.DARK_GREEN), + Component.text(name).color(NamedTextColor.GREEN) + ).color(NamedTextColor.DARK_GREEN); + Component clickComponent = TranslationManager.translation("feature.mailboxes.message.letter_received.click") + .color(NamedTextColor.YELLOW) .clickEvent(ClickEvent.runCommand("/mailbox open " + id)) - .hoverEvent(getHoverEvent("Ouvrir la lettre #" + id)) - .append(Component.text(" pour ouvrir la lettre", NamedTextColor.GOLD)); + .hoverEvent(getHoverEvent(TranslationManager.translationString( + "feature.mailboxes.message.letter_received.hover", + Component.text(id) + ))); + Component line2 = clickComponent + .append(Component.space()) + .append(TranslationManager.translation("feature.mailboxes.message.letter_received.suffix") + .color(NamedTextColor.GOLD)); + Component message = line1.appendNewline().append(line2); MessagesManager.sendMessage( receiver, @@ -227,18 +248,25 @@ private static void sendLetterReceivedNotification(Player receiver, int numItems } private static @NotNull Title getTitle(int numItems, String name) { - Component subtitle = Component.text(name, NamedTextColor.GOLD) - .append(Component.text(" vous a envoyé ", NamedTextColor.YELLOW)) - .append(Component.text(numItems, NamedTextColor.GOLD)) - .append(Component.text(pluralize(" item", numItems), NamedTextColor.YELLOW)); - Component title = Component.text("Nouvelle lettre !", NamedTextColor.GREEN); + Component subtitle = TranslationManager.translation( + "feature.mailboxes.title.new_letter.subtitle", + Component.text(name).color(NamedTextColor.GOLD), + Component.text(numItems).color(NamedTextColor.GOLD), + Component.text(pluralize(" item", numItems)).color(NamedTextColor.YELLOW) + ).color(NamedTextColor.YELLOW); + Component title = TranslationManager.translation("feature.mailboxes.title.new_letter") + .color(NamedTextColor.GREEN); return Title.title(title, subtitle); } private static void sendSuccessSendingMessage(Player player, String receiverName, int numItems) { - Component message = Component.text(numItems, NamedTextColor.GREEN) - .append(Component.text(" " + pluralize("item", numItems) + " " + pluralize("envoyé", numItems) + " à ", NamedTextColor.DARK_GREEN)) - .append(Component.text(receiverName, NamedTextColor.GREEN)); + Component message = TranslationManager.translation( + "feature.mailboxes.message.send_success", + Component.text(numItems).color(NamedTextColor.GREEN), + Component.text(pluralize("item", numItems)).color(NamedTextColor.DARK_GREEN), + Component.text(pluralize("envoyé", numItems)).color(NamedTextColor.DARK_GREEN), + Component.text(receiverName).color(NamedTextColor.GREEN) + ).color(NamedTextColor.DARK_GREEN); MessagesManager.sendMessage( player, diff --git a/src/main/java/fr/openmc/core/features/mailboxes/commands/MailboxCommand.java b/src/main/java/fr/openmc/core/features/mailboxes/commands/MailboxCommand.java index b7822bfe9..41c72b28f 100644 --- a/src/main/java/fr/openmc/core/features/mailboxes/commands/MailboxCommand.java +++ b/src/main/java/fr/openmc/core/features/mailboxes/commands/MailboxCommand.java @@ -12,6 +12,7 @@ import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.MessagesManager; import fr.openmc.core.utils.text.messages.Prefix; +import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; @@ -41,22 +42,27 @@ public void sendMailbox(Player player, @Named("player") @SuggestWith(OnlinePlaye OfflinePlayer receiverPlayer = Bukkit.getPlayerExact(receiver); if (receiverPlayer == null) receiverPlayer = Bukkit.getOfflinePlayerIfCached(receiver); if (receiverPlayer == null || !(receiverPlayer.hasPlayedBefore() || receiverPlayer.isOnline())) { - Component message = Component.text("Le joueur ", NamedTextColor.DARK_RED) - .append(Component.text(receiver, NamedTextColor.RED)) - .append(Component.text(" n'existe pas ou ne s'est jamais connecté !", NamedTextColor.DARK_RED)); + Component message = TranslationManager.translation( + "feature.mailboxes.message.player_not_found", + Component.text(receiver).color(NamedTextColor.RED) + ).color(NamedTextColor.DARK_RED); MessagesManager.sendMessage(player, message, Prefix.MAILBOX, MessageType.ERROR, true); return; } if (receiverPlayer.getUniqueId() == player.getUniqueId()) { - MessagesManager.sendMessage(player, Component.text("Vous ne pouvez pas vous envoyer à vous-même !", NamedTextColor.DARK_RED), Prefix.MAILBOX, MessageType.ERROR, true); + MessagesManager.sendMessage(player, + TranslationManager.translation("feature.mailboxes.message.send_to_self") + .color(NamedTextColor.DARK_RED), + Prefix.MAILBOX, MessageType.ERROR, true); return; } if (!MailboxManager.canSend(player, receiverPlayer)) { MessagesManager.sendMessage( player, - Component.text("Vous n'avez pas les droits pour envoyer à ", NamedTextColor.DARK_RED) - .append(Component.text(receiverPlayer.getName(), NamedTextColor.RED)) - .append(Component.text(" !", NamedTextColor.DARK_RED)), + TranslationManager.translation( + "feature.mailboxes.message.cannot_send", + Component.text(receiverPlayer.getName()).color(NamedTextColor.RED) + ).color(NamedTextColor.DARK_RED), Prefix.MAILBOX, MessageType.ERROR, true @@ -98,9 +104,10 @@ public void cancelMailbox(Player player, @Named("id") @Range(min = 1, max = Inte if (letter == null) { MessagesManager.sendMessage( player, - Component.text("La lettre avec l'id ", NamedTextColor.DARK_RED) - .append(Component.text(id, NamedTextColor.RED)) - .append(Component.text(" n'existe pas.", NamedTextColor.DARK_RED)), + TranslationManager.translation( + "feature.mailboxes.message.letter_not_found", + Component.text(id).color(NamedTextColor.RED) + ).color(NamedTextColor.DARK_RED), Prefix.MAILBOX, MessageType.ERROR, true diff --git a/src/main/java/fr/openmc/core/features/mailboxes/letter/LetterHead.java b/src/main/java/fr/openmc/core/features/mailboxes/letter/LetterHead.java index 2bde9a920..cbb9b463c 100644 --- a/src/main/java/fr/openmc/core/features/mailboxes/letter/LetterHead.java +++ b/src/main/java/fr/openmc/core/features/mailboxes/letter/LetterHead.java @@ -18,6 +18,7 @@ import static fr.openmc.core.features.mailboxes.utils.MailboxUtils.nonItalic; import static fr.openmc.core.utils.text.DateUtils.formatRelativeDate; import static fr.openmc.core.utils.text.InputUtils.pluralize; +import static fr.openmc.core.utils.text.messages.TranslationManager.translation; @Getter @SuppressWarnings("UnstableApiUsage") @@ -36,9 +37,11 @@ public LetterHead(OfflinePlayer player, int letterId, int itemsCount, LocalDateT skullMeta.displayName(getPlayerName(player)); skullMeta.lore(List.of( nonItalic(Component.text(formatRelativeDate(sentAt), NamedTextColor.DARK_GRAY)), - nonItalic(Component.text("➤ Contient ", NamedTextColor.DARK_GREEN) - .append(Component.text(itemsCount, NamedTextColor.GREEN, TextDecoration.BOLD)) - .append(Component.text(pluralize(" item", itemsCount), NamedTextColor.DARK_GREEN))) + nonItalic(translation( + "feature.mailboxes.letter.contains", + Component.text(itemsCount).color(NamedTextColor.GREEN).decorate(TextDecoration.BOLD), + Component.text(pluralize(" item", itemsCount)).color(NamedTextColor.DARK_GREEN) + ).color(NamedTextColor.DARK_GREEN)) )); TooltipDisplay tooltipDisplay = TooltipDisplay.tooltipDisplay().addHiddenComponents( DataComponentTypes.PROFILE diff --git a/src/main/java/fr/openmc/core/features/mailboxes/letter/SenderLetter.java b/src/main/java/fr/openmc/core/features/mailboxes/letter/SenderLetter.java index 243e71ed2..556edee8a 100644 --- a/src/main/java/fr/openmc/core/features/mailboxes/letter/SenderLetter.java +++ b/src/main/java/fr/openmc/core/features/mailboxes/letter/SenderLetter.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.mailboxes.letter; +import fr.openmc.core.utils.text.messages.TranslationManager; import lombok.Getter; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; @@ -24,19 +25,27 @@ public SenderLetter(OfflinePlayer player, int itemsCount, LocalDateTime sentAt, skullMeta.setOwningPlayer(player); skullMeta.displayName(getStatus(refused)); ArrayList lore = new ArrayList<>(); - lore.add(colorText("➡ Cliquez pour annuler", NamedTextColor.YELLOW, true)); + lore.add(colorText(TranslationManager.translationString("feature.mailboxes.letter.cancel_hint"), NamedTextColor.YELLOW, true)); lore.add(getPlayerName(player)); - lore.add(colorText(formatRelativeDate(sentAt) + ", " + itemsCount + " " + pluralize("item", itemsCount), NamedTextColor.DARK_GRAY, true)); + lore.add(colorText(TranslationManager.translationString( + "feature.mailboxes.letter.sent_info", + Component.text(formatRelativeDate(sentAt)), + Component.text(itemsCount), + Component.text(pluralize("item", itemsCount)) + ), NamedTextColor.DARK_GRAY, true)); skullMeta.lore(lore); this.setItemMeta(skullMeta); } public static Component getStatus(boolean refused) { NamedTextColor color = refused ? NamedTextColor.DARK_RED : NamedTextColor.DARK_AQUA; + Component statusLabel = TranslationManager.translation(refused + ? "feature.mailboxes.letter.status.refused" + : "feature.mailboxes.letter.status.pending").color(color); Component status = Component.text("[", NamedTextColor.DARK_GRAY) .append(Component.text(refused ? "❌" : "⌚", color)) .append(Component.text("] ", NamedTextColor.DARK_GRAY)) - .append(Component.text(refused ? "Refusée" : "En attente", color)); + .append(statusLabel); return nonItalic(status); } } diff --git a/src/main/java/fr/openmc/core/features/mailboxes/menu/HomeMailbox.java b/src/main/java/fr/openmc/core/features/mailboxes/menu/HomeMailbox.java index 184889998..0a838dcfd 100644 --- a/src/main/java/fr/openmc/core/features/mailboxes/menu/HomeMailbox.java +++ b/src/main/java/fr/openmc/core/features/mailboxes/menu/HomeMailbox.java @@ -5,6 +5,7 @@ import fr.openmc.api.menulib.utils.InventorySize; import fr.openmc.api.menulib.utils.ItemBuilder; import fr.openmc.core.registry.items.CustomItemRegistry; +import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; @@ -23,7 +24,7 @@ public class HomeMailbox extends Menu { @Override public @NotNull Component getName() { - return Component.text("Boite aux lettres"); + return TranslationManager.translation("feature.mailboxes.menu.title.home"); } @Override @@ -45,22 +46,25 @@ public HomeMailbox(Player player) { Map content = new HashMap<>(); content.put(3, new ItemBuilder(this, CustomItemRegistry.getByName("omc_menus:mailbox_hourglass").getBest(), meta -> { - meta.displayName(Component - .text("En attente", NamedTextColor.DARK_AQUA, TextDecoration.BOLD) + meta.displayName(TranslationManager.translation("feature.mailboxes.menu.pending.item") + .color(NamedTextColor.DARK_AQUA) + .decorate(TextDecoration.BOLD) .decoration(TextDecoration.ITALIC, false) ); }).setOnClick(e -> new PendingMailbox(getOwner()).open())); content.put(4, new ItemBuilder(this, getHead(getOwner()), meta -> { - meta.displayName(Component - .text("Ma boite aux lettres", NamedTextColor.GOLD, TextDecoration.BOLD) + meta.displayName(TranslationManager.translation("feature.mailboxes.menu.player.item") + .color(NamedTextColor.GOLD) + .decorate(TextDecoration.BOLD) .decoration(TextDecoration.ITALIC, false) ); }).setOnClick(e -> new PlayerMailbox(getOwner()).open())); content.put(5, new ItemBuilder(this, CustomItemRegistry.getByName("omc_menus:mailbox_send").getBest(), meta -> { - meta.displayName(Component - .text("Envoyer", NamedTextColor.DARK_AQUA, TextDecoration.BOLD) + meta.displayName(TranslationManager.translation("feature.mailboxes.menu.send.item") + .color(NamedTextColor.DARK_AQUA) + .decorate(TextDecoration.BOLD) .decoration(TextDecoration.ITALIC, false) ); }).setOnClick(e -> new PlayersList(getOwner()).open())); diff --git a/src/main/java/fr/openmc/core/features/mailboxes/menu/PendingMailbox.java b/src/main/java/fr/openmc/core/features/mailboxes/menu/PendingMailbox.java index 0a65a09fc..dcc274c2c 100644 --- a/src/main/java/fr/openmc/core/features/mailboxes/menu/PendingMailbox.java +++ b/src/main/java/fr/openmc/core/features/mailboxes/menu/PendingMailbox.java @@ -13,6 +13,7 @@ import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.MessagesManager; import fr.openmc.core.utils.text.messages.Prefix; +import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; @@ -37,7 +38,7 @@ public PendingMailbox(Player player) { @Override public @NotNull Component getName() { - return Component.text("Courriers en attente d'annulation"); + return TranslationManager.translation("feature.mailboxes.menu.title.pending"); } @Override @@ -106,9 +107,10 @@ public int getSizeOfItems() { public static void cancelLetter(Player player, int id) { Letter letter = MailboxManager.getById(player, id); if (letter == null) { - Component message = Component.text("La lettre avec l'id ", NamedTextColor.DARK_RED) - .append(Component.text(id, NamedTextColor.RED)) - .append(Component.text(" n'a pas été trouvée.", NamedTextColor.DARK_RED)); + Component message = TranslationManager.translation( + "feature.mailboxes.message.letter_not_found", + Component.text(id).color(NamedTextColor.RED) + ).color(NamedTextColor.DARK_RED); MessagesManager.sendMessage( player, message, @@ -126,10 +128,12 @@ public static void cancelLetter(Player player, int id) { if (sender != null) MailboxManager.cancelLetter(sender); MailboxManager.givePlayerItems(sender, items); - Component message = Component.text(player.getName(), NamedTextColor.DARK_GREEN) - .append(Component.text(" a annulé la lettre. Vous avez reçu ", NamedTextColor.DARK_GREEN)) - .append(Component.text(itemsCount, NamedTextColor.GREEN)) - .append(Component.text(pluralize(" item", itemsCount), NamedTextColor.DARK_GREEN)); + Component message = TranslationManager.translation( + "feature.mailboxes.message.cancel_success_sender", + Component.text(player.getName()).color(NamedTextColor.DARK_GREEN), + Component.text(itemsCount).color(NamedTextColor.GREEN), + Component.text(pluralize(" item", itemsCount)).color(NamedTextColor.DARK_GREEN) + ).color(NamedTextColor.DARK_GREEN); MessagesManager.sendMessage( sender, diff --git a/src/main/java/fr/openmc/core/features/mailboxes/menu/PlayerMailbox.java b/src/main/java/fr/openmc/core/features/mailboxes/menu/PlayerMailbox.java index 8e7adb55c..26d7666f6 100644 --- a/src/main/java/fr/openmc/core/features/mailboxes/menu/PlayerMailbox.java +++ b/src/main/java/fr/openmc/core/features/mailboxes/menu/PlayerMailbox.java @@ -8,6 +8,7 @@ import fr.openmc.core.features.mailboxes.MailboxManager; import fr.openmc.core.features.mailboxes.menu.letter.LetterMenu; import fr.openmc.core.features.mailboxes.utils.MailboxMenuManager; +import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -30,7 +31,7 @@ public PlayerMailbox(Player player) { @Override public @NotNull Component getName() { - return Component.text("Boite aux lettres"); + return TranslationManager.translation("feature.mailboxes.menu.title.player"); } @Override diff --git a/src/main/java/fr/openmc/core/features/mailboxes/menu/PlayersList.java b/src/main/java/fr/openmc/core/features/mailboxes/menu/PlayersList.java index 6384d3cd0..779592e07 100644 --- a/src/main/java/fr/openmc/core/features/mailboxes/menu/PlayersList.java +++ b/src/main/java/fr/openmc/core/features/mailboxes/menu/PlayersList.java @@ -10,6 +10,7 @@ import fr.openmc.core.features.mailboxes.menu.letter.SendingLetter; import fr.openmc.core.features.mailboxes.utils.MailboxMenuManager; import fr.openmc.core.utils.bukkit.ItemUtils; +import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -31,7 +32,7 @@ public PlayersList(Player player) { @Override public @NotNull Component getName() { - return Component.text("Liste des joueurs"); + return TranslationManager.translation("feature.mailboxes.menu.title.players_list"); } @Override diff --git a/src/main/java/fr/openmc/core/features/mailboxes/menu/letter/LetterMenu.java b/src/main/java/fr/openmc/core/features/mailboxes/menu/letter/LetterMenu.java index e81403156..09fcc7ef3 100644 --- a/src/main/java/fr/openmc/core/features/mailboxes/menu/letter/LetterMenu.java +++ b/src/main/java/fr/openmc/core/features/mailboxes/menu/letter/LetterMenu.java @@ -14,6 +14,7 @@ import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.MessagesManager; import fr.openmc.core.utils.text.messages.Prefix; +import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; @@ -38,7 +39,10 @@ public class LetterMenu extends Menu { @Override public @NotNull Component getName() { - return Component.text("Lettre de " + letterHead.displayName()); + return TranslationManager.translation( + "feature.mailboxes.menu.title.letter", + letterHead.displayName() + ); } @Override @@ -58,9 +62,10 @@ public static void refuseLetter(Player player, int id) { if (letter.refuse()) { MessagesManager.sendMessage( player, - Component.text("Vous avez refusé la lettre #", NamedTextColor.DARK_GREEN) - .append(Component.text(id, NamedTextColor.GREEN)) - .append(Component.text(".", NamedTextColor.DARK_GREEN)), + TranslationManager.translation( + "feature.mailboxes.message.refuse_success", + Component.text(id).color(NamedTextColor.GREEN) + ).color(NamedTextColor.DARK_GREEN), Prefix.MAILBOX, MessageType.SUCCESS, true @@ -69,9 +74,10 @@ public static void refuseLetter(Player player, int id) { } } - Component message = Component.text("La lettre avec l'id ", NamedTextColor.DARK_RED) - .append(Component.text(id, NamedTextColor.RED)) - .append(Component.text(" n'existe pas.", NamedTextColor.DARK_RED)); + Component message = TranslationManager.translation( + "feature.mailboxes.message.letter_not_found", + Component.text(id).color(NamedTextColor.RED) + ).color(NamedTextColor.DARK_RED); MessagesManager.sendMessage( player, message, @@ -93,9 +99,11 @@ public void accept() { MessagesManager.sendMessage( getOwner(), - Component.text("Vous avez reçu ", NamedTextColor.DARK_GREEN) - .append(Component.text(letterHead.getItemsCount(), NamedTextColor.GREEN)) - .append(Component.text(" " + pluralize("item", letterHead.getItemsCount()), NamedTextColor.DARK_GREEN)), + TranslationManager.translation( + "feature.mailboxes.message.items_received", + Component.text(letterHead.getItemsCount()).color(NamedTextColor.GREEN), + Component.text(pluralize("item", letterHead.getItemsCount())).color(NamedTextColor.DARK_GREEN) + ).color(NamedTextColor.DARK_GREEN), Prefix.MAILBOX, MessageType.SUCCESS, true @@ -107,9 +115,10 @@ public void accept() { } else { - Component message = Component.text("La lettre avec l'id ", NamedTextColor.DARK_RED) - .append(Component.text(letterHead.getLetterId(), NamedTextColor.RED)) - .append(Component.text(" n'existe pas.", NamedTextColor.DARK_RED)); + Component message = TranslationManager.translation( + "feature.mailboxes.message.letter_not_found", + Component.text(letterHead.getLetterId()).color(NamedTextColor.RED) + ).color(NamedTextColor.DARK_RED); MessagesManager.sendMessage( getOwner(), message, @@ -159,9 +168,10 @@ public void cancel() { getOwner().closeInventory(); MessagesManager.sendMessage( getOwner(), - Component.text("Vous avez annulé la lettre #", NamedTextColor.DARK_RED) - .append(Component.text(letterHead.getLetterId(), NamedTextColor.RED)) - .append(Component.text(".", NamedTextColor.DARK_RED)), + TranslationManager.translation( + "feature.mailboxes.message.cancel_letter", + Component.text(letterHead.getLetterId()).color(NamedTextColor.RED) + ).color(NamedTextColor.DARK_RED), Prefix.MAILBOX, MessageType.ERROR, true diff --git a/src/main/java/fr/openmc/core/features/mailboxes/menu/letter/SendingLetter.java b/src/main/java/fr/openmc/core/features/mailboxes/menu/letter/SendingLetter.java index 69f20aea9..c597769ff 100644 --- a/src/main/java/fr/openmc/core/features/mailboxes/menu/letter/SendingLetter.java +++ b/src/main/java/fr/openmc/core/features/mailboxes/menu/letter/SendingLetter.java @@ -12,6 +12,7 @@ import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.MessagesManager; import fr.openmc.core.utils.text.messages.Prefix; +import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; @@ -61,7 +62,8 @@ public void sendLetter(Inventory inv) { if (items.length == 0) { MessagesManager.sendMessage( getOwner(), - Component.text("Vous ne pouvez pas envoyer de lettre vide", NamedTextColor.DARK_RED), + TranslationManager.translation("feature.mailboxes.message.empty_letter") + .color(NamedTextColor.DARK_RED), Prefix.MAILBOX, MessageType.ERROR, true @@ -84,7 +86,11 @@ private void sendMailItems(Player player, OfflinePlayer receiver, ItemStack[] it @Override public @NotNull Component getName() { - return Component.text("Envoyer une lettre à " + receiver.getName()); + String receiverName = receiver.getName() == null ? "" : receiver.getName(); + return TranslationManager.translation( + "feature.mailboxes.menu.title.sending", + Component.text(receiverName) + ); } @Override diff --git a/src/main/java/fr/openmc/core/features/mailboxes/utils/MailboxMenuManager.java b/src/main/java/fr/openmc/core/features/mailboxes/utils/MailboxMenuManager.java index 021a2f70f..d3a447fa0 100644 --- a/src/main/java/fr/openmc/core/features/mailboxes/utils/MailboxMenuManager.java +++ b/src/main/java/fr/openmc/core/features/mailboxes/utils/MailboxMenuManager.java @@ -10,6 +10,7 @@ import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.MessagesManager; import fr.openmc.core.utils.text.messages.Prefix; +import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; @@ -22,11 +23,12 @@ import java.util.List; public class MailboxMenuManager { - public static ItemBuilder getBtn(Menu menu, String symbol, String name, String customModelName, NamedTextColor color, boolean bold) { + public static ItemBuilder getBtn(Menu menu, String symbol, String nameKey, String customModelName, NamedTextColor color, boolean bold) { Component itemName = Component.text("[", NamedTextColor.DARK_GRAY) .append(Component.text(symbol, color)) .append(Component.text("]", NamedTextColor.DARK_GRAY)) - .append(Component.text(" " + name, color)); + .append(Component.space()) + .append(TranslationManager.translation(nameKey).color(color)); return new ItemBuilder(menu, CustomItemRegistry.getByName(customModelName).getBest(), meta -> { meta.displayName(itemName.decorate(TextDecoration.BOLD).decoration(TextDecoration.ITALIC, false).decoration(TextDecoration.BOLD, bold)); meta.setMaxStackSize(1); @@ -34,11 +36,13 @@ public static ItemBuilder getBtn(Menu menu, String symbol, String name, String c } public static ItemBuilder cancelBtn(Menu menu) { - return getBtn(menu, "✘", "Annuler", "omc_menus:mailbox_cancel_btn", NamedTextColor.DARK_RED, true); + return getBtn(menu, "✘", "feature.mailboxes.menu.button.cancel", "omc_menus:mailbox_cancel_btn", NamedTextColor.DARK_RED, true); } public static ItemStack nextPageBtn() { - Component name = Component.text("Next page ➡", NamedTextColor.GOLD, TextDecoration.BOLD); + Component name = TranslationManager.translation("feature.mailboxes.menu.button.next_page_arrow") + .color(NamedTextColor.GOLD) + .decorate(TextDecoration.BOLD); ItemStack item = CustomItemRegistry.getByName("omc_menus:mailbox_arrow_right").getBest(); ItemMeta meta = item.getItemMeta(); meta.displayName(name); @@ -48,7 +52,9 @@ public static ItemStack nextPageBtn() { } public static ItemStack previousPageBtn() { - Component name = Component.text("⬅ Previous page", NamedTextColor.GOLD, TextDecoration.BOLD); + Component name = TranslationManager.translation("feature.mailboxes.menu.button.previous_page_arrow") + .color(NamedTextColor.GOLD) + .decorate(TextDecoration.BOLD); ItemStack item = CustomItemRegistry.getByName("omc_menus:mailbox_arrow_left").getBest(); ItemMeta meta = item.getItemMeta(); meta.displayName(name); @@ -58,17 +64,18 @@ public static ItemStack previousPageBtn() { } public static ItemBuilder acceptBtn(Menu menu) { - return getBtn(menu, "✔", "Accepter", "omc_menus:mailbox_accept_btn", NamedTextColor.DARK_GREEN, true); + return getBtn(menu, "✔", "feature.mailboxes.menu.button.accept", "omc_menus:mailbox_accept_btn", NamedTextColor.DARK_GREEN, true); } public static ItemBuilder sendBtn(Menu menu) { - return getBtn(menu, "✉", "Envoyer", "omc_menus:mailbox_send", NamedTextColor.DARK_AQUA, true); + return getBtn(menu, "✉", "feature.mailboxes.menu.button.send", "omc_menus:mailbox_send", NamedTextColor.DARK_AQUA, true); } public static ItemBuilder refuseBtn(Menu menu) { - ItemBuilder item = getBtn(menu, "✘", "Refuser", "omc_menus:mailbox_refuse_btn", NamedTextColor.DARK_RED, true); + ItemBuilder item = getBtn(menu, "✘", "feature.mailboxes.menu.button.refuse", "omc_menus:mailbox_refuse_btn", NamedTextColor.DARK_RED, true); item.editMeta( - meta -> meta.lore(List.of(Component.text("Si vous faites cela, les items seront supprimés", NamedTextColor.RED, TextDecoration.BOLD).decoration(TextDecoration.ITALIC, false))) + meta -> meta.lore(List.of(TranslationManager.translation("feature.mailboxes.menu.refuse_warning") + .decoration(TextDecoration.ITALIC, false))) ); return item; } @@ -76,7 +83,10 @@ public static ItemBuilder refuseBtn(Menu menu) { public static ItemBuilder homeBtn(Menu menu) { ItemStack item = new ItemStack(Material.CHEST); ItemMeta meta = item.getItemMeta(); - meta.displayName(Component.text("⬅ Home", NamedTextColor.GOLD, TextDecoration.BOLD).decoration(TextDecoration.ITALIC, false)); + meta.displayName(TranslationManager.translation("feature.mailboxes.menu.button.home_arrow") + .color(NamedTextColor.GOLD) + .decorate(TextDecoration.BOLD) + .decoration(TextDecoration.ITALIC, false)); meta.setMaxStackSize(1); item.setItemMeta(meta); return new ItemBuilder(menu, item).setOnClick(e -> new HomeMailbox(menu.getOwner()).open()); @@ -86,15 +96,15 @@ public static HashMap getPaginatedButtons(Menu menu) { HashMap buttons = new HashMap<>(); buttons.put(48, new ItemBuilder(menu, CustomItemRegistry.getByName("omc_menus:mailbox_arrow_left").getBest(), meta -> { - meta.displayName(Component.text("§6§l⬅ Page précédente")); + meta.displayName(TranslationManager.translation("feature.mailboxes.menu.pagination.previous")); }).setPreviousPageButton()); buttons.put(49, new ItemBuilder(menu, CustomItemRegistry.getByName("omc_menus:mailbox_cancel_btn").getBest(), meta -> { - meta.displayName(Component.text("§8§l[§c§l✖§8§l] §c§lFermer")); + meta.displayName(TranslationManager.translation("feature.mailboxes.menu.pagination.close")); }).setCloseButton()); buttons.put(50, new ItemBuilder(menu, CustomItemRegistry.getByName("omc_menus:mailbox_arrow_right").getBest(), meta -> { - meta.displayName(Component.text("§6§lPage suivante ➡")); + meta.displayName(TranslationManager.translation("feature.mailboxes.menu.pagination.next")); }).setNextPageButton()); return buttons; @@ -107,15 +117,24 @@ public static void sendConfirmMenuToCancelLetter(Player player, Letter letter) { new PendingMailbox(player).open(); MessagesManager.sendMessage( player, - Component.text("Vous avez annulé la mailbox #" + letter.getLetterId(), NamedTextColor.GREEN), + TranslationManager.translation( + "feature.mailboxes.menu.cancel.success", + Component.text(letter.getLetterId()).color(NamedTextColor.GREEN) + ).color(NamedTextColor.GREEN), Prefix.MAILBOX, MessageType.SUCCESS, false ); }, player::closeInventory, - List.of(Component.text("Confirmer l'annulation de la mailbox #" + letter.getLetterId(), NamedTextColor.RED)), - List.of(Component.text("Annuler l'annulation de la mailbox #" + letter.getLetterId(), NamedTextColor.GREEN)) + List.of(TranslationManager.translation( + "feature.mailboxes.menu.cancel.confirm", + Component.text(letter.getLetterId()).color(NamedTextColor.RED) + ).color(NamedTextColor.RED)), + List.of(TranslationManager.translation( + "feature.mailboxes.menu.cancel.cancel", + Component.text(letter.getLetterId()).color(NamedTextColor.GREEN) + ).color(NamedTextColor.GREEN)) ).open(); } } \ No newline at end of file diff --git a/src/main/java/fr/openmc/core/features/mailboxes/utils/MailboxUtils.java b/src/main/java/fr/openmc/core/features/mailboxes/utils/MailboxUtils.java index eaadac5a9..b88b8dba3 100644 --- a/src/main/java/fr/openmc/core/features/mailboxes/utils/MailboxUtils.java +++ b/src/main/java/fr/openmc/core/features/mailboxes/utils/MailboxUtils.java @@ -1,8 +1,9 @@ package fr.openmc.core.features.mailboxes.utils; -import net.kyori.adventure.text.event.HoverEvent; +import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.HoverEvent; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Material; @@ -14,8 +15,11 @@ public class MailboxUtils { public static Component getPlayerName(OfflinePlayer player) { String pName = player.getName(); + Component displayName = pName == null + ? TranslationManager.translation("feature.mailboxes.player.unknown") + : Component.text(pName); return Component.text("⬤ ", player.isConnected() ? NamedTextColor.DARK_GREEN : NamedTextColor.DARK_RED) - .append(Component.text(pName == null ? "Unknown" : pName, NamedTextColor.GOLD, TextDecoration.BOLD)) + .append(displayName.color(NamedTextColor.GOLD).decorate(TextDecoration.BOLD)) .decoration(TextDecoration.ITALIC, false); } diff --git a/src/main/java/fr/openmc/core/features/mainmenu/menus/Page1.java b/src/main/java/fr/openmc/core/features/mainmenu/menus/Page1.java index 0c0a09696..a4df4f68b 100644 --- a/src/main/java/fr/openmc/core/features/mainmenu/menus/Page1.java +++ b/src/main/java/fr/openmc/core/features/mainmenu/menus/Page1.java @@ -30,6 +30,7 @@ import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.MessagesManager; import fr.openmc.core.utils.text.messages.Prefix; +import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; @@ -70,15 +71,19 @@ public Page1(Player player) { ItemStack cityItem = new ItemStack(Material.PAPER); cityItem.editMeta(meta -> { meta.setItemModel(NamespacedKey.minecraft("air")); - meta.lore(List.of(Component.text("/city", NamedTextColor.DARK_GRAY))); + meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.city.lore") + .color(NamedTextColor.DARK_GRAY))); }); if (playerCity != null) { title = Component.text(FontImageWrapper.replaceFontImages(":offset_-26::omc_main_menu_page_1:")); - cityItem.editMeta(meta -> meta.itemName(Component.text("Ville : " + playerCity.getName(), NamedTextColor.YELLOW))); + Component cityName = Component.text(playerCity.getName()).color(NamedTextColor.YELLOW); + cityItem.editMeta(meta -> meta.itemName(TranslationManager.translation("feature.mainmenu.item.city.name", cityName) + .color(NamedTextColor.YELLOW))); } else { title = Component.text(FontImageWrapper.replaceFontImages(":offset_-26::omc_main_menu_page_1_sans_ville:")); - cityItem.editMeta(meta -> meta.itemName(Component.text("Vous ne faites pas partie d'une ville.", NamedTextColor.GRAY))); + cityItem.editMeta(meta -> meta.itemName(TranslationManager.translation("feature.mainmenu.item.city.no_city") + .color(NamedTextColor.GRAY))); } content = new HashMap<>(); @@ -86,7 +91,8 @@ public Page1(Player player) { ItemStack advancementsItem = new ItemStack(Material.PAPER); advancementsItem.editMeta(meta -> { meta.setItemModel(NamespacedKey.minecraft("air")); - meta.itemName(Component.text("Afficher les progrès", NamedTextColor.YELLOW)); + meta.itemName(TranslationManager.translation("feature.mainmenu.item.advancements.name") + .color(NamedTextColor.YELLOW)); }); content.put(ADVANCEMENTS_SLOT, advancementsItem); @@ -95,17 +101,24 @@ public Page1(Player player) { ItemStack questsItem = new ItemStack(Material.PAPER); questsItem.editMeta(meta -> { meta.setItemModel(NamespacedKey.minecraft("air")); - meta.itemName(Component.text("Quêtes", NamedTextColor.YELLOW)); - meta.lore(List.of(Component.text("/quest", NamedTextColor.DARK_GRAY))); + meta.itemName(TranslationManager.translation("feature.mainmenu.item.quests.name") + .color(NamedTextColor.YELLOW)); + meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.quests.lore") + .color(NamedTextColor.DARK_GRAY))); }); QUEST_SLOTS.forEach(slot -> content.put(slot, questsItem)); ItemStack milestonesItem = new ItemStack(Material.PAPER); milestonesItem.editMeta(meta -> { meta.setItemModel(NamespacedKey.minecraft("air")); - meta.itemName(Component.text("Milestones", NamedTextColor.YELLOW)); - meta.lore(List.of(Component.text("Découvrez les features dans des routes de progressions !", NamedTextColor.WHITE), - Component.text("/milestones", NamedTextColor.DARK_GRAY))); + meta.itemName(TranslationManager.translation("feature.mainmenu.item.milestones.name") + .color(NamedTextColor.YELLOW)); + meta.lore(List.of( + TranslationManager.translation("feature.mainmenu.item.milestones.lore") + .color(NamedTextColor.WHITE), + TranslationManager.translation("feature.mainmenu.item.milestones.command") + .color(NamedTextColor.DARK_GRAY) + )); }); MILESTONES_SLOTS.forEach(slot -> content.put(slot, milestonesItem)); @@ -116,17 +129,23 @@ public Page1(Player player) { contestItem.editMeta(meta -> { meta.setItemModel(NamespacedKey.minecraft("air")); meta.itemName(data.getCampVSComponent()); + Component timeComponent = Component.text(DateUtils.getTimeUntilNextDay(DayOfWeek.MONDAY)) + .color(NamedTextColor.RED); meta.lore(List.of( - Component.text("§cFin dans " + DateUtils.getTimeUntilNextDay(DayOfWeek.MONDAY)), - Component.text("/contest", NamedTextColor.DARK_GRAY) + TranslationManager.translation("feature.mainmenu.item.contest.ends_in", timeComponent) + .color(NamedTextColor.RED), + TranslationManager.translation("feature.mainmenu.item.contest.command") + .color(NamedTextColor.DARK_GRAY) ) ); }); } else { contestItem.editMeta(meta -> { meta.setItemModel(NamespacedKey.minecraft("air")); - meta.itemName(Component.text("Concours", NamedTextColor.YELLOW)); - meta.lore(List.of(Component.text("/contest", NamedTextColor.DARK_GRAY))); + meta.itemName(TranslationManager.translation("feature.mainmenu.item.contest.name") + .color(NamedTextColor.YELLOW)); + meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.contest.command") + .color(NamedTextColor.DARK_GRAY))); }); } CONTEST_SLOTS.forEach(slot -> content.put(slot, contestItem)); @@ -134,24 +153,30 @@ public Page1(Player player) { ItemStack shopItem = new ItemStack(Material.PAPER); shopItem.editMeta(meta -> { meta.setItemModel(NamespacedKey.minecraft("air")); - meta.itemName(Component.text("Boutique", NamedTextColor.YELLOW)); - meta.lore(List.of(Component.text("/adminshop", NamedTextColor.DARK_GRAY))); + meta.itemName(TranslationManager.translation("feature.mainmenu.item.shop.name") + .color(NamedTextColor.YELLOW)); + meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.shop.command") + .color(NamedTextColor.DARK_GRAY))); }); SHOP_SLOTS.forEach(slot -> content.put(slot, shopItem)); ItemStack homeItem = new ItemStack(Material.PAPER); homeItem.editMeta(meta -> { meta.setItemModel(NamespacedKey.minecraft("air")); - meta.itemName(Component.text("Homes", NamedTextColor.YELLOW)); - meta.lore(List.of(Component.text("/home", NamedTextColor.DARK_GRAY))); + meta.itemName(TranslationManager.translation("feature.mainmenu.item.home.name") + .color(NamedTextColor.YELLOW)); + meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.home.command") + .color(NamedTextColor.DARK_GRAY))); }); HOME_SLOTS.forEach(slot -> content.put(slot, homeItem)); ItemStack profilItem = new ItemStack(Material.PAPER); profilItem.editMeta(meta -> { meta.setItemModel(NamespacedKey.minecraft("air")); - meta.itemName(Component.text("Profil", NamedTextColor.YELLOW)); - meta.lore(List.of(Component.text("En développement", NamedTextColor.RED))); + meta.itemName(TranslationManager.translation("feature.mainmenu.item.profile.name") + .color(NamedTextColor.YELLOW)); + meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.profile.lore") + .color(NamedTextColor.RED))); }); PROFILE_SLOTS.forEach(slot -> { if (slot != 60) @@ -160,8 +185,11 @@ public Page1(Player player) { ItemStack playerHeadProfilItem = CustomStack.getInstance("omc_main_menu:player_head").getItemStack(); playerHeadProfilItem.editMeta(meta -> { - meta.customName(Component.text("Profil", NamedTextColor.YELLOW).decoration(TextDecoration.ITALIC, false)); - meta.lore(List.of(Component.text("En développement", NamedTextColor.RED))); + meta.customName(TranslationManager.translation("feature.mainmenu.item.profile.name") + .color(NamedTextColor.YELLOW) + .decoration(TextDecoration.ITALIC, false)); + meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.profile.lore") + .color(NamedTextColor.RED))); if (meta instanceof org.bukkit.inventory.meta.SkullMeta skullMeta) { skullMeta.setOwningPlayer(player); } @@ -171,23 +199,28 @@ public Page1(Player player) { ItemStack rightArrowItem = new ItemStack(Material.PAPER); rightArrowItem.editMeta(meta -> { meta.setItemModel(NamespacedKey.minecraft("air")); - meta.itemName(Component.text("Page suivante", NamedTextColor.YELLOW)); + meta.itemName(TranslationManager.translation("feature.mainmenu.item.next_page") + .color(NamedTextColor.YELLOW)); }); content.put(RIGHT_ARROW_SLOT, rightArrowItem); ItemStack settingsItem = new ItemStack(Material.PAPER); settingsItem.editMeta(meta -> { meta.setItemModel(NamespacedKey.minecraft("air")); - meta.itemName(Component.text("Paramètres", NamedTextColor.YELLOW)); - meta.lore(List.of(Component.text("/settings", NamedTextColor.DARK_GRAY))); + meta.itemName(TranslationManager.translation("feature.mainmenu.item.settings.name") + .color(NamedTextColor.YELLOW)); + meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.settings.command") + .color(NamedTextColor.DARK_GRAY))); }); SETTINGS_SLOTS.forEach(slot -> content.put(slot, settingsItem)); ItemStack mailboxItem = new ItemStack(Material.PAPER); mailboxItem.editMeta(meta -> { meta.setItemModel(NamespacedKey.minecraft("air")); - meta.itemName(Component.text("Boîte aux lettres", NamedTextColor.YELLOW)); - meta.lore(List.of(Component.text("/mailbox home", NamedTextColor.DARK_GRAY))); + meta.itemName(TranslationManager.translation("feature.mainmenu.item.mailbox.name") + .color(NamedTextColor.YELLOW)); + meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.mailbox.command") + .color(NamedTextColor.DARK_GRAY))); }); MAILBOX_SLOTS.forEach(slot -> content.put(slot, mailboxItem)); } @@ -221,7 +254,10 @@ public void onInventoryClick(InventoryClickEvent event) { if (DreamUtils.isInDreamWorld(player)) { PacketMenuLib.closeMenu(player); - MessagesManager.sendMessage(player, Component.text("Vous ne pouvez pas interagir avec le menu principal depuis le monde des rêves.", NamedTextColor.RED), Prefix.OPENMC, MessageType.ERROR, true); + MessagesManager.sendMessage(player, + TranslationManager.translation("feature.mainmenu.message.dream_world") + .color(NamedTextColor.RED), + Prefix.OPENMC, MessageType.ERROR, true); return; } @@ -240,7 +276,8 @@ public void onInventoryClick(InventoryClickEvent event) { Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> TpHomeCommand.home(player, null)); } else if (PROFILE_SLOTS.contains(slot)) { PacketMenuLib.closeMenu(player); - player.sendMessage(Component.text(FontImageWrapper.replaceFontImages("Les profils des joueurs sont toujours en développement :sad:."), NamedTextColor.RED)); + String rawMessage = TranslationManager.translationString("feature.mainmenu.message.profile_dev"); + player.sendMessage(Component.text(FontImageWrapper.replaceFontImages(rawMessage), NamedTextColor.RED)); } else if (RIGHT_ARROW_SLOT == slot) { PacketMenuLib.openMenu(new Page2(), player); } else if (SETTINGS_SLOTS.contains(slot)) { @@ -257,9 +294,10 @@ public void onInventoryClick(InventoryClickEvent event) { nmsPlayer.connection.send(packet); PacketListener.getEnabledAdvancements().add(nmsPlayer.getUUID()); - Component message = Component.text("Appuyez sur la touche '").color(NamedTextColor.GREEN) - .append(Component.keybind("key.advancements").color(NamedTextColor.YELLOW)) - .append(Component.text("' pour ouvrir le menu des Avancements.", NamedTextColor.GREEN)); + Component message = TranslationManager.translation( + "feature.mainmenu.message.advancements_hint", + Component.keybind("key.advancements").color(NamedTextColor.YELLOW) + ).color(NamedTextColor.GREEN); player.sendActionBar(message); }); } diff --git a/src/main/java/fr/openmc/core/features/mainmenu/menus/Page2.java b/src/main/java/fr/openmc/core/features/mainmenu/menus/Page2.java index 77ccf82fa..4ce9914fb 100644 --- a/src/main/java/fr/openmc/core/features/mainmenu/menus/Page2.java +++ b/src/main/java/fr/openmc/core/features/mainmenu/menus/Page2.java @@ -16,6 +16,7 @@ import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.MessagesManager; import fr.openmc.core.utils.text.messages.Prefix; +import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.minecraft.network.protocol.game.ClientboundUpdateAdvancementsPacket; @@ -57,68 +58,82 @@ public Page2() { ItemStack advancementsItem = new ItemStack(Material.PAPER); advancementsItem.editMeta(meta -> { meta.setItemModel(NamespacedKey.minecraft("air")); - meta.itemName(Component.text("Afficher les progrès", NamedTextColor.YELLOW)); + meta.itemName(TranslationManager.translation("feature.mainmenu.item.advancements.name") + .color(NamedTextColor.YELLOW)); }); content.put(ADVANCEMENTS_SLOT, advancementsItem); ItemStack leftArrowItem = new ItemStack(Material.PAPER); leftArrowItem.editMeta(meta -> { meta.setItemModel(NamespacedKey.minecraft("air")); - meta.itemName(Component.text("Page précédente", NamedTextColor.YELLOW)); + meta.itemName(TranslationManager.translation("feature.mainmenu.item.previous_page") + .color(NamedTextColor.YELLOW)); }); content.put(LEFT_ARROW_SLOT, leftArrowItem); ItemStack settingsItem = new ItemStack(Material.PAPER); settingsItem.editMeta(meta -> { meta.setItemModel(NamespacedKey.minecraft("air")); - meta.itemName(Component.text("Paramètres", NamedTextColor.YELLOW)); - meta.lore(List.of(Component.text("/settings", NamedTextColor.DARK_GRAY))); + meta.itemName(TranslationManager.translation("feature.mainmenu.item.settings.name") + .color(NamedTextColor.YELLOW)); + meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.settings.command") + .color(NamedTextColor.DARK_GRAY))); }); SETTINGS_SLOTS.forEach(slot -> content.put(slot, settingsItem)); ItemStack mailboxItem = new ItemStack(Material.PAPER); mailboxItem.editMeta(meta -> { meta.setItemModel(NamespacedKey.minecraft("air")); - meta.itemName(Component.text("Boîte aux lettres", NamedTextColor.YELLOW)); - meta.lore(List.of(Component.text("/mailbox home", NamedTextColor.DARK_GRAY))); + meta.itemName(TranslationManager.translation("feature.mainmenu.item.mailbox.name") + .color(NamedTextColor.YELLOW)); + meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.mailbox.command") + .color(NamedTextColor.DARK_GRAY))); }); MAILBOX_SLOTS.forEach(slot -> content.put(slot, mailboxItem)); ItemStack shopsItem = new ItemStack(Material.PAPER); shopsItem.editMeta(meta -> { meta.setItemModel(NamespacedKey.minecraft("air")); - meta.itemName(Component.text("Shops (Désactivé)", NamedTextColor.YELLOW)); + meta.itemName(TranslationManager.translation("feature.mainmenu.item.shops_disabled") + .color(NamedTextColor.YELLOW)); }); SHOPS_SLOTS.forEach(slot -> content.put(slot, shopsItem)); ItemStack companyItem = new ItemStack(Material.PAPER); companyItem.editMeta(meta -> { meta.setItemModel(NamespacedKey.minecraft("air")); - meta.itemName(Component.text("Entreprises (Désactivé)", NamedTextColor.YELLOW)); + meta.itemName(TranslationManager.translation("feature.mainmenu.item.company_disabled") + .color(NamedTextColor.YELLOW)); }); COMPANY_SLOTS.forEach(slot -> content.put(slot, companyItem)); ItemStack leaderboardItem = new ItemStack(Material.PAPER); leaderboardItem.editMeta(meta -> { meta.setItemModel(NamespacedKey.minecraft("air")); - meta.itemName(Component.text("Leaderboard", NamedTextColor.YELLOW)); - meta.lore(List.of(Component.text("/leaderboard", NamedTextColor.DARK_GRAY))); + meta.itemName(TranslationManager.translation("feature.mainmenu.item.leaderboard.name") + .color(NamedTextColor.YELLOW)); + meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.leaderboard.command") + .color(NamedTextColor.DARK_GRAY))); }); LEADERBOARD_SLOTS.forEach(slot -> content.put(slot, leaderboardItem)); ItemStack bankItem = new ItemStack(Material.PAPER); bankItem.editMeta(meta -> { meta.setItemModel(NamespacedKey.minecraft("air")); - meta.itemName(Component.text("Banque", NamedTextColor.YELLOW)); - meta.lore(List.of(Component.text("/banque", NamedTextColor.DARK_GRAY))); + meta.itemName(TranslationManager.translation("feature.mainmenu.item.bank.name") + .color(NamedTextColor.YELLOW)); + meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.bank.command") + .color(NamedTextColor.DARK_GRAY))); }); BANK_SLOTS.forEach(slot -> content.put(slot, bankItem)); ItemStack comingSoonItem = new ItemStack(Material.PAPER); comingSoonItem.editMeta(meta -> { meta.setItemModel(NamespacedKey.minecraft("air")); - meta.itemName(Component.text("À venir", NamedTextColor.YELLOW)); - meta.lore(List.of(Component.text("Cette fonctionnalité est en cours de développement.", NamedTextColor.RED))); + meta.itemName(TranslationManager.translation("feature.mainmenu.item.coming_soon.name") + .color(NamedTextColor.YELLOW)); + meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.coming_soon.lore") + .color(NamedTextColor.RED))); }); COMING_SOON_1_SLOTS.forEach(slot -> content.put(slot, comingSoonItem)); COMING_SOON_2_SLOTS.forEach(slot -> content.put(slot, comingSoonItem)); @@ -156,7 +171,10 @@ public void onInventoryClick(InventoryClickEvent event) { if (DreamUtils.isInDreamWorld(player)) { PacketMenuLib.closeMenu(player); - MessagesManager.sendMessage(player, Component.text("Vous ne pouvez pas interagir avec le menu principal depuis le monde des rêves.", NamedTextColor.RED), Prefix.OPENMC, MessageType.ERROR, true); + MessagesManager.sendMessage(player, + TranslationManager.translation("feature.mainmenu.message.dream_world") + .color(NamedTextColor.RED), + Prefix.OPENMC, MessageType.ERROR, true); return; } @@ -177,24 +195,31 @@ public void onInventoryClick(InventoryClickEvent event) { nmsPlayer.connection.send(packet); PacketListener.getEnabledAdvancements().add(nmsPlayer.getUUID()); - Component message = Component.text("Appuyez sur la touche '").color(NamedTextColor.GREEN) - .append(Component.keybind("key.advancements").color(NamedTextColor.YELLOW)) - .append(Component.text("' pour ouvrir le menu des avancements.", NamedTextColor.GREEN)); + Component message = TranslationManager.translation( + "feature.mainmenu.message.advancements_hint", + Component.keybind("key.advancements").color(NamedTextColor.YELLOW) + ).color(NamedTextColor.GREEN); player.sendActionBar(message); }); } else if (COMPANY_SLOTS.contains(slot) || SHOPS_SLOTS.contains(slot)) { - MessagesManager.sendMessage(player, Component.text("Les entreprises et shops on été désactivé :sad:.", NamedTextColor.RED), Prefix.OPENMC, MessageType.ERROR, true); + String rawMessage = TranslationManager.translationString("feature.mainmenu.message.shops_disabled"); + MessagesManager.sendMessage(player, + Component.text(FontImageWrapper.replaceFontImages(rawMessage), NamedTextColor.RED), + Prefix.OPENMC, + MessageType.ERROR, + true); } else if (LEADERBOARD_SLOTS.contains(slot)) { - // TODO: Ajouter un menu de classement PacketMenuLib.closeMenu(player); - player.sendMessage(Component.text(FontImageWrapper.replaceFontImages("Le menu de leaderboard est toujours en développement :sad:.\nVous pouvez toujours utiliser le /lb ou regarder les holograms dans le spawn."), NamedTextColor.RED)); + String rawMessage = TranslationManager.translationString("feature.mainmenu.message.leaderboard_dev"); + player.sendMessage(Component.text(FontImageWrapper.replaceFontImages(rawMessage), NamedTextColor.RED)); } else if (BANK_SLOTS.contains(slot)) { Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> BankCommands.openBankMenu(player)); } else if (COMING_SOON_1_SLOTS.contains(slot) || COMING_SOON_2_SLOTS.contains(slot) || COMING_SOON_3_SLOTS.contains(slot) || COMING_SOON_4_SLOTS.contains(slot) || COMING_SOON_5_SLOTS.contains(slot)) { PacketMenuLib.closeMenu(player); - player.sendMessage(Component.text("Cette fonctionnalité est en cours de développement et sera bientôt disponible !", NamedTextColor.GOLD)); + player.sendMessage(TranslationManager.translation("feature.mainmenu.message.coming_soon") + .color(NamedTextColor.GOLD)); } } diff --git a/src/main/java/fr/openmc/core/features/milestones/menus/MainMilestonesMenu.java b/src/main/java/fr/openmc/core/features/milestones/menus/MainMilestonesMenu.java index 3118b3c7a..5a6d2fc53 100644 --- a/src/main/java/fr/openmc/core/features/milestones/menus/MainMilestonesMenu.java +++ b/src/main/java/fr/openmc/core/features/milestones/menus/MainMilestonesMenu.java @@ -10,7 +10,9 @@ import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.milestones.models.Milestone; import fr.openmc.core.features.milestones.models.MilestoneType; +import fr.openmc.core.utils.text.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; @@ -31,7 +33,7 @@ public MainMilestonesMenu(Player owner) { @Override public @NotNull Component getName() { - return Component.text("Menu des milestones - Plus d'info"); + return TranslationManager.translation("feature.milestones.menu.title.main"); } @Override @@ -64,24 +66,28 @@ public void onInventoryClick(InventoryClickEvent click) { List loreMilestoneVille = new ArrayList<>(); - loreMilestoneVille.add(Component.text("§7Découvrez l'intégralité §3des villes")); - loreMilestoneVille.add(Component.text("§7Via cette §3route de progression §7!")); + loreMilestoneVille.add(TranslationManager.translation("feature.milestones.menu.city.lore.intro_1")); + loreMilestoneVille.add(TranslationManager.translation("feature.milestones.menu.city.lore.intro_2")); loreMilestoneVille.add(Component.empty()); - loreMilestoneVille.add(Component.text("§8§oLes claims, Les mascottes, Les maires, Les guerres, ...")); + loreMilestoneVille.add(TranslationManager.translation("feature.milestones.menu.city.lore.details")); City playerCity = CityManager.getPlayerCity(player.getUniqueId()); if (playerCity == null) { loreMilestoneVille.add(Component.empty()); - loreMilestoneVille.add(Component.text("§cCréez ou rejoignez une ville pour accéder à cela !")); + loreMilestoneVille.add(TranslationManager.translation("feature.milestones.menu.city.lore.need_city")); } else { loreMilestoneVille.add(Component.empty()); - loreMilestoneVille.add(Component.text("§7Level de votre ville : §3" + playerCity.getLevel())); + loreMilestoneVille.add(TranslationManager.translation( + "feature.milestones.menu.city.lore.level", + Component.text(playerCity.getLevel()).color(NamedTextColor.DARK_AQUA) + ).color(NamedTextColor.GRAY)); loreMilestoneVille.add(Component.empty()); - loreMilestoneVille.add(Component.text("§e§lCLIQUEZ ICI POUR ACCEDER A VOTRE MILESTONE")); + loreMilestoneVille.add(TranslationManager.translation("feature.milestones.menu.city.lore.click")); } inventory.put(12, new ItemBuilder(this, Material.SEA_LANTERN, itemMeta -> { - itemMeta.displayName(Component.text("§3Milestone des villes").decoration(TextDecoration.ITALIC, false)); + itemMeta.displayName(TranslationManager.translation("feature.milestones.menu.city.name") + .decoration(TextDecoration.ITALIC, false)); itemMeta.lore(loreMilestoneVille); }).setOnClick(inventoryClickEvent -> { if (playerCity == null) { @@ -99,9 +105,9 @@ public void onInventoryClick(InventoryClickEvent click) { itemMeta.setEnchantmentGlintOverride(MilestonesManager.getPlayerStep(dreamMilestone.getType(), player) + 1 >= dreamMilestone.getSteps().size()); }).setOnClick(inventoryClickEvent -> dreamMilestone.getMenu(player).open())); - inventory.put(16, new ItemBuilder(this, Material.BARREL, itemMeta -> itemMeta.displayName(Component.text(" §ks §cComming soon §ke")))); + inventory.put(16, new ItemBuilder(this, Material.BARREL, itemMeta -> itemMeta.displayName(TranslationManager.translation("feature.milestones.menu.coming_soon")))); - inventory.put(35, new ItemBuilder(this, Material.ARROW, itemMeta -> itemMeta.displayName(Component.text("§r§aRetour")), true)); + inventory.put(35, new ItemBuilder(this, Material.ARROW, itemMeta -> itemMeta.displayName(TranslationManager.translation("feature.milestones.menu.back")), true)); return inventory; } diff --git a/src/main/java/fr/openmc/core/features/milestones/menus/MilestoneMenu.java b/src/main/java/fr/openmc/core/features/milestones/menus/MilestoneMenu.java index 503702295..7f5317fd8 100644 --- a/src/main/java/fr/openmc/core/features/milestones/menus/MilestoneMenu.java +++ b/src/main/java/fr/openmc/core/features/milestones/menus/MilestoneMenu.java @@ -6,7 +6,11 @@ import fr.openmc.core.features.milestones.MilestonesManager; import fr.openmc.core.features.milestones.models.Milestone; import fr.openmc.core.features.milestones.quests.MilestoneQuest; +import fr.openmc.core.utils.text.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.legacy.LegacyComponentSerializer; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; @@ -49,7 +53,10 @@ public MilestoneMenu(Player owner, Milestone milestone) { @Override public @NotNull Component getName() { - return Component.text("Menu des milestones - " + milestone.getName()); + return TranslationManager.translation( + "feature.milestones.menu.title.milestone", + Component.text(milestone.getName()) + ); } @Override @@ -86,14 +93,18 @@ public void onInventoryClick(InventoryClickEvent click) { boolean active = stepIndex == currentStep; List stepLore = new ArrayList<>(); - quest.getDescription(player.getUniqueId()).forEach(line -> stepLore.add(Component.text(line))); + quest.getDescription(player.getUniqueId()).forEach(line -> stepLore.add( + LegacyComponentSerializer.legacySection().deserialize(line) + .decorationIfAbsent(TextDecoration.ITALIC, TextDecoration.State.FALSE) + )); int slot = snake.nodes.get(i); + NamedTextColor nameColor = completed ? NamedTextColor.GREEN : active ? NamedTextColor.YELLOW : NamedTextColor.GRAY; content.put(slot, new ItemBuilder(this, quest.getIcon(), meta -> { - meta.displayName(Component.text( - (completed ? "§a" : active ? "§e" : "§7") + quest.getName() - )); + meta.displayName(Component.text(quest.getName()) + .color(nameColor) + .decoration(TextDecoration.ITALIC, false)); meta.lore(stepLore); meta.setEnchantmentGlintOverride(completed || active); })); @@ -127,7 +138,8 @@ public void onInventoryClick(InventoryClickEvent click) { if (offset > 0) { content.put(48, new ItemBuilder(this, Material.ARROW, - meta -> meta.displayName(Component.text("§e◀ Page précédente"))) + meta -> meta.displayName(TranslationManager.translation("feature.milestones.menu.page.previous") + .decoration(TextDecoration.ITALIC, false))) .setOnClick(c -> { offset = Math.max(0, offset - MAX_VISIBLE_NODES); open(); @@ -136,7 +148,8 @@ public void onInventoryClick(InventoryClickEvent click) { if (offset + visible < steps.size()) { content.put(50, new ItemBuilder(this, Material.ARROW, - meta -> meta.displayName(Component.text("§ePage suivante ▶"))) + meta -> meta.displayName(TranslationManager.translation("feature.milestones.menu.page.next") + .decoration(TextDecoration.ITALIC, false))) .setOnClick(c -> { offset = Math.min(steps.size() - 1, offset + MAX_VISIBLE_NODES); open(); @@ -144,7 +157,8 @@ public void onInventoryClick(InventoryClickEvent click) { } content.put(53, new ItemBuilder(this, Material.BARRIER, - meta -> meta.displayName(Component.text("§cFermer"))).setCloseButton()); + meta -> meta.displayName(TranslationManager.translation("feature.milestones.menu.close") + .decoration(TextDecoration.ITALIC, false))).setCloseButton()); return content; } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/TutorialHologram.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/TutorialHologram.java index e5ce699da..2a25b6091 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/TutorialHologram.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/TutorialHologram.java @@ -2,21 +2,28 @@ import fr.openmc.core.features.displays.holograms.Hologram; import fr.openmc.core.utils.text.fonts.CustomFonts; +import fr.openmc.core.utils.text.messages.TranslationManager; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; public class TutorialHologram extends Hologram { public TutorialHologram() { super("tutorial"); + String icon = CustomFonts.getBest("omc_icons:openmc", ""); this.setLines( - "§f" + CustomFonts.getBest("omc_icons:openmc", "§f"), - "§fBienvenue sur §dOpenMC V2§f!", - "§fCette version est basée sur les §2villes", - "§f", - "§fPour accéder au tutoriel, utilisez la commande §a/milestones§f.", - "§fC'est votre §dserveur §f!", - "§8§m §r", - "§fLiens utiles : §5/socials" + TranslationManager.translationString( + "feature.milestones.tutorial.hologram.icon", + Component.text(icon).color(NamedTextColor.WHITE) + ), + TranslationManager.translationString("feature.milestones.tutorial.hologram.welcome"), + TranslationManager.translationString("feature.milestones.tutorial.hologram.based_on"), + "", + TranslationManager.translationString("feature.milestones.tutorial.hologram.how_to"), + TranslationManager.translationString("feature.milestones.tutorial.hologram.server"), + TranslationManager.translationString("feature.milestones.tutorial.hologram.separator"), + TranslationManager.translationString("feature.milestones.tutorial.hologram.links") ); this.setScale(0.5f); diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/TutorialMilestone.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/TutorialMilestone.java index 5836da823..4592174f5 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/TutorialMilestone.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/TutorialMilestone.java @@ -8,6 +8,7 @@ import fr.openmc.core.features.milestones.models.Milestone; import fr.openmc.core.features.milestones.models.MilestoneModel; import fr.openmc.core.features.milestones.models.MilestoneType; +import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.bossbar.BossBar; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; @@ -30,16 +31,16 @@ public HashMap getPlayerData() { @Override public String getName() { - return "§7Tutoriel d'OpenMC"; + return TranslationManager.translationString("feature.milestones.tutorial.name"); } @Override public List getDescription() { return List.of( - Component.text("§7Découvrez §dOpenMC §7!"), - Component.text("§7Passez en revue les §dfeatures"), - Component.text("§8§oLes villes, les contests, l'adminshop, les quêtes, ..."), - Component.text("§7Idéal pour se lancer dans l'aventure !") + TranslationManager.translation("feature.milestones.tutorial.description.1"), + TranslationManager.translation("feature.milestones.tutorial.description.2"), + TranslationManager.translation("feature.milestones.tutorial.description.3"), + TranslationManager.translation("feature.milestones.tutorial.description.4") ); } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/BreakAyweniteQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/BreakAyweniteQuest.java index 6c343c76a..f5d024878 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/BreakAyweniteQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/BreakAyweniteQuest.java @@ -14,6 +14,9 @@ import fr.openmc.core.registry.items.CustomItemRegistry; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.Prefix; +import fr.openmc.core.utils.text.messages.TranslationManager; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -26,26 +29,33 @@ public class BreakAyweniteQuest extends MilestoneQuest implements Listener { public BreakAyweniteQuest() { super( - "Casser 30 §dAywenites", + TranslationManager.translationString("feature.milestones.tutorial.quest.break_aywenite.name"), List.of( - "§fLe nouveau minerai de la §dV2, trouvable dans les grottes", - "§fIl vous sera §dutile §fdans de nombreuses fonctionnalités" + TranslationManager.translationString("feature.milestones.tutorial.quest.break_aywenite.description.1"), + TranslationManager.translationString("feature.milestones.tutorial.quest.break_aywenite.description.2") ), CustomItemRegistry.getByName("omc_items:aywenite").getBest(), - MilestoneType.TUTORIAL, - TutorialSteps.BREAK_AYWENITE, - new QuestTier( - 30, - new QuestMoneyReward(3500), - new QuestTextReward("Bien joué ! Vous avez fini l'§6étape " + (TutorialSteps.BREAK_AYWENITE.ordinal() + 1 /* Pas le choix */) + " §f! Comme dit précédemment l'§dAywenite §fest un minerai, précieux pour les features. D'ailleurs vous pouvez l'utiliser pour faire votre ville ! ", Prefix.MILLESTONE, MessageType.SUCCESS), - new QuestMethodsReward( - player -> { - if (CityManager.getPlayerCity(player.getUniqueId()) != null) { - TutorialSteps.CITY_CREATE.getQuest().incrementProgress(player.getUniqueId()); - } - } - ) - ) + MilestoneType.TUTORIAL, + TutorialSteps.BREAK_AYWENITE, + new QuestTier( + 30, + new QuestMoneyReward(3500), + new QuestTextReward( + TranslationManager.translation( + "feature.milestones.tutorial.quest.break_aywenite.reward", + Component.text(TutorialSteps.BREAK_AYWENITE.ordinal() + 1).color(NamedTextColor.GOLD) + ), + Prefix.MILLESTONE, + MessageType.SUCCESS + ), + new QuestMethodsReward( + player -> { + if (CityManager.getPlayerCity(player.getUniqueId()) != null) { + TutorialSteps.CITY_CREATE.getQuest().incrementProgress(player.getUniqueId()); + } + } + ) + ) ); } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/CityCreateQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/CityCreateQuest.java index 7fba01c1d..80cc827ef 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/CityCreateQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/CityCreateQuest.java @@ -14,6 +14,9 @@ import fr.openmc.core.features.quests.rewards.QuestTextReward; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.Prefix; +import fr.openmc.core.utils.text.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; @@ -27,31 +30,34 @@ public class CityCreateQuest extends MilestoneQuest implements Listener { public CityCreateQuest() { super( - "Créer/Rejoindre une ville", + TranslationManager.translationString("feature.milestones.tutorial.quest.city_create.name"), List.of( - "§fFaites §d/city §fpour commencer à créer votre ville", - "§fou bien rejoindre une ville à l'aide d'une invitation !" + TranslationManager.translationString("feature.milestones.tutorial.quest.city_create.description.1"), + TranslationManager.translationString("feature.milestones.tutorial.quest.city_create.description.2") ), Material.OAK_DOOR, - MilestoneType.TUTORIAL, - TutorialSteps.CITY_CREATE, - new QuestTier( - 1, - new QuestMoneyReward(500), - new QuestTextReward( - "Bien joué ! Vous avez fini l'§6étape " + (TutorialSteps.CITY_CREATE.ordinal() + 1) + " §f! Cette version d'OpenMC est centrée autour des villes. Vous y trouverez une §emilestone spéciale pour les villes §f (/city milestone) qui vous guidera dans cette aventure singulière ! Et si vous passiez votre ville au §3niveau 2 §f?", - Prefix.MILLESTONE, - MessageType.SUCCESS - ), - new QuestMethodsReward( - player -> { - City playerCity = CityManager.getPlayerCity(player.getUniqueId()); - if (playerCity.getLevel() >= 2) { - TutorialSteps.CITY_LEVEL_2.getQuest().incrementProgress(player.getUniqueId()); - } - } - ) - ) + MilestoneType.TUTORIAL, + TutorialSteps.CITY_CREATE, + new QuestTier( + 1, + new QuestMoneyReward(500), + new QuestTextReward( + TranslationManager.translation( + "feature.milestones.tutorial.quest.city_create.reward", + Component.text(TutorialSteps.CITY_CREATE.ordinal() + 1).color(NamedTextColor.GOLD) + ), + Prefix.MILLESTONE, + MessageType.SUCCESS + ), + new QuestMethodsReward( + player -> { + City playerCity = CityManager.getPlayerCity(player.getUniqueId()); + if (playerCity.getLevel() >= 2) { + TutorialSteps.CITY_LEVEL_2.getQuest().incrementProgress(player.getUniqueId()); + } + } + ) + ) ); } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/CityLevelTwoQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/CityLevelTwoQuest.java index 1eb289cab..666865768 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/CityLevelTwoQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/CityLevelTwoQuest.java @@ -11,6 +11,9 @@ import fr.openmc.core.features.quests.rewards.QuestTextReward; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.Prefix; +import fr.openmc.core.utils.text.messages.TranslationManager; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -23,23 +26,26 @@ public class CityLevelTwoQuest extends MilestoneQuest implements Listener { public CityLevelTwoQuest() { super( - "Avoir une ville niveau 2", + TranslationManager.translationString("feature.milestones.tutorial.quest.city_level_two.name"), List.of( - "§fFaites §d/city milestone §fpour en savoir plus comment", - "§faméliorer votre ville !" + TranslationManager.translationString("feature.milestones.tutorial.quest.city_level_two.description.1"), + TranslationManager.translationString("feature.milestones.tutorial.quest.city_level_two.description.2") ), Material.NETHER_STAR, - MilestoneType.TUTORIAL, - TutorialSteps.CITY_LEVEL_2, - new QuestTier( - 1, - new QuestMoneyReward(500), - new QuestTextReward( - "Bien joué ! Vous avez fini l'§6étape " + (TutorialSteps.CITY_LEVEL_2.ordinal() + 1) + " §f! Vous êtes bien parti pour découvrir toutes les features qu'ils se cachent dans les villes ! Mais avant cela, je voudrais que vous posiez un §2home§f.", - Prefix.MILLESTONE, - MessageType.SUCCESS - ) - ) + MilestoneType.TUTORIAL, + TutorialSteps.CITY_LEVEL_2, + new QuestTier( + 1, + new QuestMoneyReward(500), + new QuestTextReward( + TranslationManager.translation( + "feature.milestones.tutorial.quest.city_level_two.reward", + Component.text(TutorialSteps.CITY_LEVEL_2.ordinal() + 1).color(NamedTextColor.GOLD) + ), + Prefix.MILLESTONE, + MessageType.SUCCESS + ) + ) ); } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/ClaimLetterQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/ClaimLetterQuest.java index ad3d4edd7..a8bfcc480 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/ClaimLetterQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/ClaimLetterQuest.java @@ -10,6 +10,9 @@ import fr.openmc.core.features.quests.rewards.QuestTextReward; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.Prefix; +import fr.openmc.core.utils.text.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.EventHandler; @@ -21,23 +24,26 @@ public class ClaimLetterQuest extends MilestoneQuest implements Listener { public ClaimLetterQuest() { super( - "Ouvrir la lettre des récompenses", + TranslationManager.translationString("feature.milestones.tutorial.quest.claim_letter.name"), List.of( - "§fTapez §d/mailbox §fou bien allez dans le §dmenu principal (/menu) §fpour pouvoir ouvrir le menu mailbox", - "§8§oUn moyen efficace d'envoyer des items à d'autres joueurs !" + TranslationManager.translationString("feature.milestones.tutorial.quest.claim_letter.description.1"), + TranslationManager.translationString("feature.milestones.tutorial.quest.claim_letter.description.2") ), Material.PAPER, - MilestoneType.TUTORIAL, - TutorialSteps.CLAIM_LETTER, - new QuestTier( - 1, - new QuestMoneyReward(500), - new QuestTextReward( - "Bien joué ! Vous avez fini l'§6étape " + (TutorialSteps.CLAIM_LETTER.ordinal() + 1) + " §f! Vous avez découvert les bases d'OpenMC. Et maintenant, libre à vous d'aller découvrir les features par vous même ! Sur ce, nous vous souhaitons le meilleur de votre aventure sur §dOpenMC §f!", - Prefix.MILLESTONE, - MessageType.SUCCESS - ) - ) + MilestoneType.TUTORIAL, + TutorialSteps.CLAIM_LETTER, + new QuestTier( + 1, + new QuestMoneyReward(500), + new QuestTextReward( + TranslationManager.translation( + "feature.milestones.tutorial.quest.claim_letter.reward", + Component.text(TutorialSteps.CLAIM_LETTER.ordinal() + 1).color(NamedTextColor.GOLD) + ), + Prefix.MILLESTONE, + MessageType.SUCCESS + ) + ) ); } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/FinishQuestQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/FinishQuestQuest.java index 06704a08d..e66e7fbc9 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/FinishQuestQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/FinishQuestQuest.java @@ -10,6 +10,9 @@ import fr.openmc.core.features.quests.rewards.QuestTextReward; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.Prefix; +import fr.openmc.core.utils.text.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.EventHandler; @@ -21,23 +24,26 @@ public class FinishQuestQuest extends MilestoneQuest implements Listener { public FinishQuestQuest() { super( - "Accomplir une quête", + TranslationManager.translationString("feature.milestones.tutorial.quest.finish_quest.name"), List.of( - "§fAccomplissez une quête de votre choix", - "§8§oCela va pouvoir vous donner de l'argent ou certaines ressources !" + TranslationManager.translationString("feature.milestones.tutorial.quest.finish_quest.description.1"), + TranslationManager.translationString("feature.milestones.tutorial.quest.finish_quest.description.2") ), Material.DIAMOND, - MilestoneType.TUTORIAL, - TutorialSteps.FINISH_QUEST, - new QuestTier( - 1, - new QuestMoneyReward(500), - new QuestTextReward( - "Bien joué ! Vous avez fini l'§6étape " + (TutorialSteps.FINISH_QUEST.ordinal() + 1) + " §f! Et voici une §9récompense §f! Pratique, non ? Allons découvrir une autre méthode de production d'argent et de consommation ! Allez dans l'§cadminshop§f, un endroit où plusieurs items sont achetable à des prix variants en fonction l'§coffre et la demande §f!", - Prefix.MILLESTONE, - MessageType.SUCCESS - ) - ) + MilestoneType.TUTORIAL, + TutorialSteps.FINISH_QUEST, + new QuestTier( + 1, + new QuestMoneyReward(500), + new QuestTextReward( + TranslationManager.translation( + "feature.milestones.tutorial.quest.finish_quest.reward", + Component.text(TutorialSteps.FINISH_QUEST.ordinal() + 1).color(NamedTextColor.GOLD) + ), + Prefix.MILLESTONE, + MessageType.SUCCESS + ) + ) ); } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/HomeCreateQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/HomeCreateQuest.java index 675715e76..6112b4cc4 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/HomeCreateQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/HomeCreateQuest.java @@ -13,6 +13,9 @@ import fr.openmc.core.registry.items.CustomItemRegistry; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.Prefix; +import fr.openmc.core.utils.text.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.EventHandler; @@ -24,24 +27,27 @@ public class HomeCreateQuest extends MilestoneQuest implements Listener { public HomeCreateQuest() { super( - "Poser un home", + TranslationManager.translationString("feature.milestones.tutorial.quest.home_create.name"), List.of( - "§fTapez §d/sethome §fen étant là où vous voulez poser votre home", - "§8§oC'est très utile d'en faire un pour se téléporter à sa base !" + TranslationManager.translationString("feature.milestones.tutorial.quest.home_create.description.1"), + TranslationManager.translationString("feature.milestones.tutorial.quest.home_create.description.2") ), Material.ENDER_PEARL, - MilestoneType.TUTORIAL, - TutorialSteps.HOME_CREATE, - new QuestTier( - 1, - new QuestMoneyReward(HomeLimits.LIMIT_1.getPrice()), - new QuestItemReward(CustomItemRegistry.getByName("omc_items:aywenite").getBest(), HomeLimits.LIMIT_1.getAyweniteCost()), - new QuestTextReward( - "Bien joué ! Vous avez fini l'§6étape " + (TutorialSteps.HOME_CREATE.ordinal() + 1) + " §f! Les homes sont souvent utilisés pour pas perdre votre base ! Vous êtes limité à avoir que 1 home au début. Il va falloir penser à les améliorer...", - Prefix.MILLESTONE, - MessageType.SUCCESS - ) - ) + MilestoneType.TUTORIAL, + TutorialSteps.HOME_CREATE, + new QuestTier( + 1, + new QuestMoneyReward(HomeLimits.LIMIT_1.getPrice()), + new QuestItemReward(CustomItemRegistry.getByName("omc_items:aywenite").getBest(), HomeLimits.LIMIT_1.getAyweniteCost()), + new QuestTextReward( + TranslationManager.translation( + "feature.milestones.tutorial.quest.home_create.reward", + Component.text(TutorialSteps.HOME_CREATE.ordinal() + 1).color(NamedTextColor.GOLD) + ), + Prefix.MILLESTONE, + MessageType.SUCCESS + ) + ) ); } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/HomeUpgradeQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/HomeUpgradeQuest.java index f45098032..75e6604fc 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/HomeUpgradeQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/HomeUpgradeQuest.java @@ -11,6 +11,9 @@ import fr.openmc.core.registry.items.CustomItemRegistry; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.Prefix; +import fr.openmc.core.utils.text.messages.TranslationManager; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -21,24 +24,27 @@ public class HomeUpgradeQuest extends MilestoneQuest implements Listener { public HomeUpgradeQuest() { super( - "Améliorer votre limite de homes", + TranslationManager.translationString("feature.milestones.tutorial.quest.home_upgrade.name"), List.of( - "§fTapez §d/upgradehome §fou bien aller dans le §dmenu des homes (/homes)", - "§fpour pouvoir améliorer votre limite de homes", - "§8§oCela vous permettra d'avoir plus de homes !" + TranslationManager.translationString("feature.milestones.tutorial.quest.home_upgrade.description.1"), + TranslationManager.translationString("feature.milestones.tutorial.quest.home_upgrade.description.2"), + TranslationManager.translationString("feature.milestones.tutorial.quest.home_upgrade.description.3") ), CustomItemRegistry.getByName("omc_homes:omc_homes_icon_upgrade").getBest(), - MilestoneType.TUTORIAL, - TutorialSteps.HOME_UPGRADE, - new QuestTier( - 1, - new QuestMoneyReward(500), - new QuestTextReward( - "Bien joué ! Vous avez fini l'§6étape " + (TutorialSteps.HOME_UPGRADE.ordinal() + 1) + "§f ! Les §2homes §fvous seront très utile pour vous déplacer rapidement entre vos bases ! maintenant, je pense que vous avez besoin de challenges ! Ouvrez le menu des §9quêtes", - Prefix.MILLESTONE, - MessageType.SUCCESS - ) - ) + MilestoneType.TUTORIAL, + TutorialSteps.HOME_UPGRADE, + new QuestTier( + 1, + new QuestMoneyReward(500), + new QuestTextReward( + TranslationManager.translation( + "feature.milestones.tutorial.quest.home_upgrade.reward", + Component.text(TutorialSteps.HOME_UPGRADE.ordinal() + 1).color(NamedTextColor.GOLD) + ), + Prefix.MILLESTONE, + MessageType.SUCCESS + ) + ) ); } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenAdminShopMenuQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenAdminShopMenuQuest.java index d5414d8d8..1ffa44c0e 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenAdminShopMenuQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenAdminShopMenuQuest.java @@ -11,6 +11,9 @@ import fr.openmc.core.features.quests.rewards.QuestTextReward; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.Prefix; +import fr.openmc.core.utils.text.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.EventHandler; @@ -22,23 +25,26 @@ public class OpenAdminShopMenuQuest extends MilestoneQuest implements Listener { public OpenAdminShopMenuQuest() { super( - "Ouvrir le menu de l'adminshop", + TranslationManager.translationString("feature.milestones.tutorial.quest.open_adminshop.name"), List.of( - "§fTapez §c/adminshop §fou bien allez dans le §dmenu principal (/menu) §fpour pouvoir ouvrir le menu", - "§8§oLe marché qui varie en fonction de l'offre et de la demande !" + TranslationManager.translationString("feature.milestones.tutorial.quest.open_adminshop.description.1"), + TranslationManager.translationString("feature.milestones.tutorial.quest.open_adminshop.description.2") ), Material.EMERALD, - MilestoneType.TUTORIAL, - TutorialSteps.OPEN_ADMINSHOP, - new QuestTier( - 1, - new QuestMoneyReward(500), - new QuestTextReward( - "Bien joué ! Vous avez fini l'§6étape " + (TutorialSteps.OPEN_ADMINSHOP.ordinal() + 1) + " §f! L'§cadminshop §fvous servira à vous procurer de l'argent et des blocs ! Vous pouvez d'ailleurs dès maintenant vendre ou acheter une ressource à l'adminshop !", - Prefix.MILLESTONE, - MessageType.SUCCESS - ) - ) + MilestoneType.TUTORIAL, + TutorialSteps.OPEN_ADMINSHOP, + new QuestTier( + 1, + new QuestMoneyReward(500), + new QuestTextReward( + TranslationManager.translation( + "feature.milestones.tutorial.quest.open_adminshop.reward", + Component.text(TutorialSteps.OPEN_ADMINSHOP.ordinal() + 1).color(NamedTextColor.GOLD) + ), + Prefix.MILLESTONE, + MessageType.SUCCESS + ) + ) ); } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenContestMenuQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenContestMenuQuest.java index 1ff1d6c26..fd5cb0375 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenContestMenuQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenContestMenuQuest.java @@ -11,6 +11,9 @@ import fr.openmc.core.registry.items.CustomItemRegistry; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.Prefix; +import fr.openmc.core.utils.text.messages.TranslationManager; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -22,48 +25,27 @@ public class OpenContestMenuQuest extends MilestoneQuest implements Listener { public OpenContestMenuQuest() { super( - "Ouvrez le menu des contests", + TranslationManager.translationString("feature.milestones.tutorial.quest.open_contest.name"), List.of( - "§fTapez §d/contest §fou bien aller dans le §dmenu principal (/menu) §fpour pouvoir ouvrir le menu", - "§8§oUne méthode compétitive pour gagner des grosses récompenses !" + TranslationManager.translationString("feature.milestones.tutorial.quest.open_contest.description.1"), + TranslationManager.translationString("feature.milestones.tutorial.quest.open_contest.description.2") ), CustomItemRegistry.getByName("omc_contest:contest_shell").getBest(), - MilestoneType.TUTORIAL, - TutorialSteps.OPEN_CONTEST, - new QuestTier( - 1, - new QuestMoneyReward(1000), - new QuestTextReward( - "Bien joué ! Vous avez fini l'§6étape " + (TutorialSteps.OPEN_CONTEST.ordinal() + 1) + " §f! Les §6contests§f opposent 2 groupes sur un thème, les gagnants remportent une grosse récompense ! Et voila le tutoriel est maintenant terminé, allez récupérer votre récompense dans la §9mailbox§f, un système de lettre pour recevoir ou bien envoyer des lettres !", - Prefix.MILLESTONE, - MessageType.SUCCESS - ), - new QuestItemReward(CustomItemRegistry.getByName("omc_items:aywenite").getBest(), 30) - /* new QuestMethodsReward( - player -> { - List items = new ArrayList<>(); - - FileConfiguration config = OMCPlugin.getConfigs(); - if (config != null) { - LocalDate today = LocalDate.now(); - LocalDate limitDate = LocalDate.of( - config.getInt("features.aywen_pelush.year", 2025), - config.getInt("features.aywen_pelush.month", 11), - config.getInt("features.aywen_pelush.day", 3) - ); - - if (!limitDate.isBefore(today)) { - ItemStack aywenPlush = CustomItemRegistry.getByName("omc_plush:peluche_awyen").getBest(); - items.add(aywenPlush); - } - } - - ItemStack[] itemsArray = items.toArray(new ItemStack[0]); - - MailboxManager.sendItems(player, player, itemsArray); - } - ) */ // => PELUCHES AVANT LE 3 NOVEMBRE 2025 - ) + MilestoneType.TUTORIAL, + TutorialSteps.OPEN_CONTEST, + new QuestTier( + 1, + new QuestMoneyReward(1000), + new QuestTextReward( + TranslationManager.translation( + "feature.milestones.tutorial.quest.open_contest.reward", + Component.text(TutorialSteps.OPEN_CONTEST.ordinal() + 1).color(NamedTextColor.GOLD) + ), + Prefix.MILLESTONE, + MessageType.SUCCESS + ), + new QuestItemReward(CustomItemRegistry.getByName("omc_items:aywenite").getBest(), 30) + ) ); } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenQuestMenuQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenQuestMenuQuest.java index 3869830c5..04547adcb 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenQuestMenuQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenQuestMenuQuest.java @@ -11,6 +11,9 @@ import fr.openmc.core.features.quests.rewards.QuestTextReward; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.Prefix; +import fr.openmc.core.utils.text.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.EventHandler; @@ -22,23 +25,26 @@ public class OpenQuestMenuQuest extends MilestoneQuest implements Listener { public OpenQuestMenuQuest() { super( - "Ouvrir le menu des quêtes", + TranslationManager.translationString("feature.milestones.tutorial.quest.open_quest.name"), List.of( - "§fTapez §d/quests §fou bien allez dans le §dmenu principal (/menu) §fpour pouvoir ouvrir le menu et voir quelles quêtes vous pouvez accomplir", - "§8§oCela va pouvoir vous lancer dans l'aventure et vous donner des défis afin de vous diversifier !" + TranslationManager.translationString("feature.milestones.tutorial.quest.open_quest.description.1"), + TranslationManager.translationString("feature.milestones.tutorial.quest.open_quest.description.2") ), Material.GOLDEN_AXE, - MilestoneType.TUTORIAL, - TutorialSteps.OPEN_QUEST, - new QuestTier( - 1, - new QuestMoneyReward(500), - new QuestTextReward( - "Bien joué ! Vous avez fini l'§6étape " + (TutorialSteps.OPEN_QUEST.ordinal() + 1) + " §f! Les §9quêtes §fvous serviront à vous procurer de l'argent facilement pour le §9début de jeu §f! Vous pouvez tenter d'accomplir la §9tâche §fque vous voulez !", - Prefix.MILLESTONE, - MessageType.SUCCESS - ) - ) + MilestoneType.TUTORIAL, + TutorialSteps.OPEN_QUEST, + new QuestTier( + 1, + new QuestMoneyReward(500), + new QuestTextReward( + TranslationManager.translation( + "feature.milestones.tutorial.quest.open_quest.reward", + Component.text(TutorialSteps.OPEN_QUEST.ordinal() + 1).color(NamedTextColor.GOLD) + ), + Prefix.MILLESTONE, + MessageType.SUCCESS + ) + ) ); } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenSettingsMenuQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenSettingsMenuQuest.java index ed0727f6c..53d4b0530 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenSettingsMenuQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/OpenSettingsMenuQuest.java @@ -11,6 +11,9 @@ import fr.openmc.core.features.settings.menu.PlayerSettingsMenu; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.Prefix; +import fr.openmc.core.utils.text.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.EventHandler; @@ -22,24 +25,26 @@ public class OpenSettingsMenuQuest extends MilestoneQuest implements Listener { public OpenSettingsMenuQuest() { super( - "Ouvrir le menu des paramètres", + TranslationManager.translationString("feature.milestones.tutorial.quest.open_settings.name"), List.of( - "§fTapez §d/settings §fou bien allez dans le §dmenu principal (/menu) §fpour pouvoir ouvrir le menu", - "§8§oCela va vous permettre de configurer votre expérience de jeu !" + TranslationManager.translationString("feature.milestones.tutorial.quest.open_settings.description.1"), + TranslationManager.translationString("feature.milestones.tutorial.quest.open_settings.description.2") ), Material.COMPARATOR, - MilestoneType.TUTORIAL, - TutorialSteps.OPEN_SETTINGS, - new QuestTier( - 1, - new QuestMoneyReward(500), - new QuestTextReward( - "Bien joué ! Vous avez fini l'§6étape " + (TutorialSteps.OPEN_SETTINGS.ordinal() + 1) + " §f! Les §9paramètres §fcustomisent votre jeu, ils peuvent être utiles dans certains cas, comme pour bloquer des demandes d'amis, ..." + - " Sujet à part, vous pouvez passer en mode compétition grâce aux §6contests§f, une sorte de concours hebdomadaire !", - Prefix.MILLESTONE, - MessageType.SUCCESS - ) - ) + MilestoneType.TUTORIAL, + TutorialSteps.OPEN_SETTINGS, + new QuestTier( + 1, + new QuestMoneyReward(500), + new QuestTextReward( + TranslationManager.translation( + "feature.milestones.tutorial.quest.open_settings.reward", + Component.text(TutorialSteps.OPEN_SETTINGS.ordinal() + 1).color(NamedTextColor.GOLD) + ), + Prefix.MILLESTONE, + MessageType.SUCCESS + ) + ) ); } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/SellBuyQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/SellBuyQuest.java index 4f8bea994..fad9d1b33 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/SellBuyQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/SellBuyQuest.java @@ -12,6 +12,9 @@ import fr.openmc.core.listeners.PlayerDeathListener; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.Prefix; +import fr.openmc.core.utils.text.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.EventHandler; @@ -23,23 +26,27 @@ public class SellBuyQuest extends MilestoneQuest implements Listener { public SellBuyQuest() { super( - "Acheter ou vendre une ressource à l'adminshop", + TranslationManager.translationString("feature.milestones.tutorial.quest.sell_buy.name"), List.of( - "§fTapez §c/adminshop §fou bien allez dans le §dmenu principal /menu §fpour pouvoir vendre ou acheter une ressource", - "§8§oC'est le début de la richesse !" + TranslationManager.translationString("feature.milestones.tutorial.quest.sell_buy.description.1"), + TranslationManager.translationString("feature.milestones.tutorial.quest.sell_buy.description.2") ), Material.GOLD_INGOT, - MilestoneType.TUTORIAL, - TutorialSteps.SELL_BUY_ADMINSHOP, - new QuestTier( - 1, - new QuestMoneyReward(500), - new QuestTextReward( - "Bien joué ! Vous avez fini l'§6étape " + (TutorialSteps.SELL_BUY_ADMINSHOP.ordinal() + 1) + " §f! L'§cadminshop §fpropose divers objets afin de pouvoir build, ou faire de l'argent ! Cependant, lorsque vous mourrez vous perdez §6" + PlayerDeathListener.LOSS_MONEY * 100 + "%§f de votre argent ! Il est donc important de faire attention à votre peau, ou alors de déposer de l'argent dans votre banque !", - Prefix.MILLESTONE, - MessageType.SUCCESS - ) - ) + MilestoneType.TUTORIAL, + TutorialSteps.SELL_BUY_ADMINSHOP, + new QuestTier( + 1, + new QuestMoneyReward(500), + new QuestTextReward( + TranslationManager.translation( + "feature.milestones.tutorial.quest.sell_buy.reward", + Component.text(TutorialSteps.SELL_BUY_ADMINSHOP.ordinal() + 1).color(NamedTextColor.GOLD), + Component.text(PlayerDeathListener.LOSS_MONEY * 100).color(NamedTextColor.GOLD) + ), + Prefix.MILLESTONE, + MessageType.SUCCESS + ) + ) ); } diff --git a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/SpareBankQuest.java b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/SpareBankQuest.java index 4a46f962f..e34dca1a6 100644 --- a/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/SpareBankQuest.java +++ b/src/main/java/fr/openmc/core/features/milestones/tutorial/quests/SpareBankQuest.java @@ -10,6 +10,9 @@ import fr.openmc.core.features.quests.rewards.QuestTextReward; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.Prefix; +import fr.openmc.core.utils.text.messages.TranslationManager; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -22,24 +25,26 @@ public class SpareBankQuest extends MilestoneQuest implements Listener { public SpareBankQuest() { super( - "Déposer de l'argent à la banque", + TranslationManager.translationString("feature.milestones.tutorial.quest.spare_bank.name"), List.of( - "§fTapez §d/bank §fou bien allez dans le §dmenu principal (/menu) §fpour pouvoir ouvrir le menu", - "§8§oune méthode compétitive pour gagner des grosses récompenses !" + TranslationManager.translationString("feature.milestones.tutorial.quest.spare_bank.description.1"), + TranslationManager.translationString("feature.milestones.tutorial.quest.spare_bank.description.2") ), Material.DIAMOND_BLOCK, - MilestoneType.TUTORIAL, - TutorialSteps.SPARE_BANK, - new QuestTier( - 1, - new QuestMoneyReward(500), - new QuestTextReward( - "Bien joué ! Vous avez fini l'§6étape " + (TutorialSteps.SPARE_BANK.ordinal() + 1) + " §f! Les §bbanques§f peuvent stocker une quantité infinie d'argent et protègent celui-ci si vous mourrez ! " + - "Personnalisons maintenant l'expérience de jeu grâce aux paramètres !", - Prefix.MILLESTONE, - MessageType.SUCCESS - ) - ) + MilestoneType.TUTORIAL, + TutorialSteps.SPARE_BANK, + new QuestTier( + 1, + new QuestMoneyReward(500), + new QuestTextReward( + TranslationManager.translation( + "feature.milestones.tutorial.quest.spare_bank.reward", + Component.text(TutorialSteps.SPARE_BANK.ordinal() + 1).color(NamedTextColor.GOLD) + ), + Prefix.MILLESTONE, + MessageType.SUCCESS + ) + ) ); } diff --git a/src/main/java/fr/openmc/core/features/quests/rewards/QuestTextReward.java b/src/main/java/fr/openmc/core/features/quests/rewards/QuestTextReward.java index 59bac4d97..206367b61 100644 --- a/src/main/java/fr/openmc/core/features/quests/rewards/QuestTextReward.java +++ b/src/main/java/fr/openmc/core/features/quests/rewards/QuestTextReward.java @@ -13,7 +13,7 @@ *

* This class implements the QuestReward interface and provides functionality to give a specified amount of money to a player. */ -public record QuestTextReward(String text, Prefix prefix, MessageType messageType) implements QuestReward { +public record QuestTextReward(Component text, Prefix prefix, MessageType messageType) implements QuestReward { /** * Gives the specified amount of money to the player. * @@ -24,7 +24,7 @@ public void giveReward(Player player) { Bukkit.getScheduler().runTaskLater(OMCPlugin.getInstance(), () -> { MessagesManager.sendMessage( player, - Component.text(text), + text, prefix, messageType, false @@ -32,4 +32,8 @@ public void giveReward(Player player) { }, 1L); } + + public QuestTextReward(String text, Prefix prefix, MessageType messageType) { + this(Component.text(text), prefix, messageType); + } } diff --git a/src/main/resources/translations/default/itemsadder.properties b/src/main/resources/translations/default/itemsadder.properties new file mode 100644 index 000000000..ebe730f98 --- /dev/null +++ b/src/main/resources/translations/default/itemsadder.properties @@ -0,0 +1,5 @@ +feature.itemsadder.spawner_extractor.fail=L'extraction a échoué ! Le spawner s'est brisé. +feature.itemsadder.spawner_extractor.display_name=Spawner à %1$s +feature.itemsadder.spawner_extractor.success_extract=Vous avez extrait un spawner à %1$s ! +feature.itemsadder.spawner_extractor.success_place=Spawner à %1$s placé ! + diff --git a/src/main/resources/translations/default/leaderboards.properties b/src/main/resources/translations/default/leaderboards.properties new file mode 100644 index 000000000..edbc6a6c6 --- /dev/null +++ b/src/main/resources/translations/default/leaderboards.properties @@ -0,0 +1,28 @@ +feature.leaderboards.empty.contributors=Aucun contributeur trouvé pour le moment. +feature.leaderboards.empty.players=Aucun joueur trouvé pour le moment. +feature.leaderboards.empty.cities=Aucune ville trouvée pour le moment. + +feature.leaderboards.header.contributors=--- Leaderboard des Contributeurs GitHub --- +feature.leaderboards.header.money=--- Leaderboard de l'argent des joueurs --- +feature.leaderboards.header.city_money=--- Leaderboard de l'argent des villes --- +feature.leaderboards.header.playtime=------- Leaderboard du temps de jeu ------- +feature.leaderboards.header.pumpkin=--- Leaderboard des citrouilles --- + +feature.leaderboards.footer=----------------------------------------- + +feature.leaderboards.line.contributors=%1$s %2$s + %3$s - %4$s +feature.leaderboards.line.money=%1$s %2$s - %3$s +feature.leaderboards.line.city_money=%1$s %2$s - %3$s +feature.leaderboards.line.playtime=%1$s %2$s - %3$s +feature.leaderboards.line.pumpkin=%1$s %2$s - %3$s citrouilles + +feature.leaderboards.command.invalid=Veuillez spécifier un leaderboard valide. (Ex: /leaderboard contributeurs) +feature.leaderboards.command.position_updated=Position du leaderboard %1$s mise à jour. +feature.leaderboards.command.position_update_failed=Erreur lors de la mise à jour de la position du leaderboard %1$s : %2$s +feature.leaderboards.command.invalid_list=Veuillez spécifier un leaderboard valide : contributors, money, ville-money, playtime, pumpkin-count +feature.leaderboards.command.holograms_disabled=Hologrammes désactivés avec succès. +feature.leaderboards.command.holograms_enabled=Hologrammes activés avec succès. +feature.leaderboards.command.holograms_updated=Hologrammes mis à jour avec succès. +feature.leaderboards.command.scale_changed=Taille des hologrammes modifiée à %1$s +feature.leaderboards.command.scale_update_failed=Erreur lors de la mise à jour de la taille des hologrammes : %1$s + diff --git a/src/main/resources/translations/default/mailboxes.properties b/src/main/resources/translations/default/mailboxes.properties new file mode 100644 index 000000000..dde8082af --- /dev/null +++ b/src/main/resources/translations/default/mailboxes.properties @@ -0,0 +1,54 @@ +feature.mailboxes.player.unknown=Inconnu + +feature.mailboxes.menu.title.home=Boite aux lettres +feature.mailboxes.menu.title.player=Boite aux lettres +feature.mailboxes.menu.title.pending=Courriers en attente d'annulation +feature.mailboxes.menu.title.players_list=Liste des joueurs +feature.mailboxes.menu.title.letter=Lettre de %1$s +feature.mailboxes.menu.title.sending=Envoyer une lettre à %1$s + +feature.mailboxes.menu.pending.item=En attente +feature.mailboxes.menu.player.item=Ma boite aux lettres +feature.mailboxes.menu.send.item=Envoyer + +feature.mailboxes.menu.button.cancel=Annuler +feature.mailboxes.menu.button.accept=Accepter +feature.mailboxes.menu.button.send=Envoyer +feature.mailboxes.menu.button.refuse=Refuser +feature.mailboxes.menu.button.home_arrow=⬅ Home +feature.mailboxes.menu.button.next_page_arrow=Page suivante ➡ +feature.mailboxes.menu.button.previous_page_arrow=⬅ Page précédente + +feature.mailboxes.menu.pagination.previous=⬅ Page précédente +feature.mailboxes.menu.pagination.next=Page suivante ➡ +feature.mailboxes.menu.pagination.close=[] Fermer + +feature.mailboxes.menu.refuse_warning=Si vous faites cela, les items seront supprimés +feature.mailboxes.menu.cancel.success=Vous avez annulé la mailbox #%1$s +feature.mailboxes.menu.cancel.confirm=Confirmer l'annulation de la mailbox #%1$s +feature.mailboxes.menu.cancel.cancel=Annuler l'annulation de la mailbox #%1$s + +feature.mailboxes.message.letter_not_found=La lettre avec l'id %1$s n'existe pas. +feature.mailboxes.message.cancel_success_sender=%1$s a annulé la lettre. Vous avez reçu %2$s%3$s +feature.mailboxes.message.refuse_success=Vous avez refusé la lettre #%1$s. +feature.mailboxes.message.items_received=Vous avez reçu %1$s %2$s +feature.mailboxes.message.cancel_letter=Vous avez annulé la lettre #%1$s. +feature.mailboxes.message.empty_letter=Vous ne pouvez pas envoyer de lettre vide +feature.mailboxes.message.player_not_found=Le joueur %1$s n'existe pas ou ne s'est jamais connecté ! +feature.mailboxes.message.send_to_self=Vous ne pouvez pas vous envoyer à vous-même ! +feature.mailboxes.message.cannot_send=Vous n'avez pas les droits pour envoyer à %1$s ! + +feature.mailboxes.message.send_error=Une erreur est apparue lors de l'envoie des items à %1$s +feature.mailboxes.message.one_letter=une +feature.mailboxes.message.new_letters.line1=Vous avez reçu %1$s %2$s. +feature.mailboxes.message.new_letters.click=Cliquez-ici +feature.mailboxes.message.new_letters.suffix=pour ouvrir les lettres +feature.mailboxes.message.new_letters.hover=Ouvrir ma boîte aux lettres +feature.mailboxes.message.letter_received.line1=Vous avez reçu %1$s%2$s de la part de %3$s +feature.mailboxes.message.letter_received.click=Cliquez-ici +feature.mailboxes.message.letter_received.suffix=pour ouvrir la lettre +feature.mailboxes.message.letter_received.hover=Ouvrir la lettre #%1$s +feature.mailboxes.message.send_success=%1$s %2$s %3$s à %4$s + +feature.mailboxes.title.new_letter=Nouvelle lettre ! +feature.mailboxes.title.new_letter.subtitle=%1$s vous a envoyé %2$s%3$s diff --git a/src/main/resources/translations/default/mainmenu.properties b/src/main/resources/translations/default/mainmenu.properties new file mode 100644 index 000000000..cabc2d561 --- /dev/null +++ b/src/main/resources/translations/default/mainmenu.properties @@ -0,0 +1,51 @@ +feature.mainmenu.item.city.lore=/city +feature.mainmenu.item.city.name=Ville : %1$s +feature.mainmenu.item.city.no_city=Vous ne faites pas partie d'une ville. + +feature.mainmenu.item.advancements.name=Afficher les progrès + +feature.mainmenu.item.quests.name=Quêtes +feature.mainmenu.item.quests.lore=/quest + +feature.mainmenu.item.milestones.name=Milestones +feature.mainmenu.item.milestones.lore=Découvrez les features dans des routes de progressions ! +feature.mainmenu.item.milestones.command=/milestones + +feature.mainmenu.item.contest.ends_in=Fin dans %1$s +feature.mainmenu.item.contest.name=Concours +feature.mainmenu.item.contest.command=/contest + +feature.mainmenu.item.shop.name=Boutique +feature.mainmenu.item.shop.command=/adminshop + +feature.mainmenu.item.home.name=Homes +feature.mainmenu.item.home.command=/home + +feature.mainmenu.item.profile.name=Profil +feature.mainmenu.item.profile.lore=En développement + +feature.mainmenu.item.next_page=Page suivante +feature.mainmenu.item.previous_page=Page précédente + +feature.mainmenu.item.settings.name=Paramètres +feature.mainmenu.item.settings.command=/settings + +feature.mainmenu.item.mailbox.name=Boîte aux lettres +feature.mainmenu.item.mailbox.command=/mailbox home + +feature.mainmenu.item.shops_disabled=Shops (Désactivé) +feature.mainmenu.item.company_disabled=Entreprises (Désactivé) +feature.mainmenu.item.leaderboard.name=Leaderboard +feature.mainmenu.item.leaderboard.command=/leaderboard +feature.mainmenu.item.bank.name=Banque +feature.mainmenu.item.bank.command=/banque +feature.mainmenu.item.coming_soon.name=À venir +feature.mainmenu.item.coming_soon.lore=Cette fonctionnalité est en cours de développement. + +feature.mainmenu.message.dream_world=Vous ne pouvez pas interagir avec le menu principal depuis le monde des rêves. +feature.mainmenu.message.profile_dev=Les profils des joueurs sont toujours en développement :sad:. +feature.mainmenu.message.advancements_hint=Appuyez sur la touche '%1$s' pour ouvrir le menu des Avancements. +feature.mainmenu.message.shops_disabled=Les entreprises et shops on été désactivé :sad:. +feature.mainmenu.message.leaderboard_dev=Le menu de leaderboard est toujours en développement :sad:.\nVous pouvez toujours utiliser le /lb ou regarder les holograms dans le spawn. +feature.mainmenu.message.coming_soon=Cette fonctionnalité est en cours de développement et sera bientôt disponible ! + diff --git a/src/main/resources/translations/default/milestones.properties b/src/main/resources/translations/default/milestones.properties new file mode 100644 index 000000000..dbb834b4e --- /dev/null +++ b/src/main/resources/translations/default/milestones.properties @@ -0,0 +1,96 @@ +feature.milestones.menu.title.main=Menu des milestones - Plus d'info +feature.milestones.menu.title.milestone=Menu des milestones - %1$s +feature.milestones.menu.page.previous=◀ Page précédente +feature.milestones.menu.page.next=Page suivante ▶ +feature.milestones.menu.close=Fermer +feature.milestones.menu.back=Retour +feature.milestones.menu.coming_soon=s Comming soon e + +feature.milestones.menu.city.name=Milestone des villes +feature.milestones.menu.city.lore.intro_1=Découvrez l'intégralité des villes +feature.milestones.menu.city.lore.intro_2=Via cette route de progression ! +feature.milestones.menu.city.lore.details=Les claims, Les mascottes, Les maires, Les guerres, ... +feature.milestones.menu.city.lore.need_city=Créez ou rejoignez une ville pour accéder à cela ! +feature.milestones.menu.city.lore.level=Level de votre ville : %1$s +feature.milestones.menu.city.lore.click=CLIQUEZ ICI POUR ACCEDER A VOTRE MILESTONE + +feature.milestones.tutorial.name=Tutoriel d'OpenMC +feature.milestones.tutorial.description.1=Découvrez OpenMC ! +feature.milestones.tutorial.description.2=Passez en revue les features +feature.milestones.tutorial.description.3=Les villes, les contests, l'adminshop, les quêtes, ... +feature.milestones.tutorial.description.4=Idéal pour se lancer dans l'aventure ! + +feature.milestones.tutorial.hologram.icon=%1$s +feature.milestones.tutorial.hologram.welcome=Bienvenue sur OpenMC V2! +feature.milestones.tutorial.hologram.based_on=Cette version est basée sur les villes +feature.milestones.tutorial.hologram.how_to=Pour accéder au tutoriel, utilisez la commande /milestones. +feature.milestones.tutorial.hologram.server=C'est votre serveur! +feature.milestones.tutorial.hologram.separator= +feature.milestones.tutorial.hologram.links=Liens utiles : /socials + +feature.milestones.tutorial.quest.spare_bank.name=Déposer de l'argent à la banque +feature.milestones.tutorial.quest.spare_bank.description.1=Tapez /bank ou bien allez dans le menu principal (/menu) pour pouvoir ouvrir le menu +feature.milestones.tutorial.quest.spare_bank.description.2=Une méthode compétitive pour gagner des grosses récompenses ! +feature.milestones.tutorial.quest.spare_bank.reward=Bien joué ! Vous avez fini l'étape %1$s ! Les banques peuvent stocker une quantité infinie d'argent et protègent celui-ci si vous mourrez ! Personnalisons maintenant l'expérience de jeu grâce aux paramètres ! + +feature.milestones.tutorial.quest.sell_buy.name=Acheter ou vendre une ressource à l'adminshop +feature.milestones.tutorial.quest.sell_buy.description.1=Tapez /adminshop ou bien allez dans le menu principal /menu pour pouvoir vendre ou acheter une ressource +feature.milestones.tutorial.quest.sell_buy.description.2=C'est le début de la richesse ! +feature.milestones.tutorial.quest.sell_buy.reward=Bien joué ! Vous avez fini l'étape %1$s ! L'adminshop propose divers objets afin de pouvoir build, ou faire de l'argent ! Cependant, lorsque vous mourrez vous perdez %2$s% de votre argent ! Il est donc important de faire attention à votre peau, ou alors de déposer de l'argent dans votre banque ! + +feature.milestones.tutorial.quest.open_settings.name=Ouvrir le menu des paramètres +feature.milestones.tutorial.quest.open_settings.description.1=Tapez /settings ou bien allez dans le menu principal (/menu) pour pouvoir ouvrir le menu +feature.milestones.tutorial.quest.open_settings.description.2=Cela va vous permettre de configurer votre expérience de jeu ! +feature.milestones.tutorial.quest.open_settings.reward=Bien joué ! Vous avez fini l'étape %1$s ! Les paramètres customisent votre jeu, ils peuvent être utiles dans certains cas, comme pour bloquer des demandes d'amis, ... Sujet à part, vous pouvez passer en mode compétition grâce aux contests, une sorte de concours hebdomadaire ! + +feature.milestones.tutorial.quest.open_quest.name=Ouvrir le menu des quêtes +feature.milestones.tutorial.quest.open_quest.description.1=Tapez /quests ou bien allez dans le menu principal (/menu) pour pouvoir ouvrir le menu et voir quelles quêtes vous pouvez accomplir +feature.milestones.tutorial.quest.open_quest.description.2=Cela va pouvoir vous lancer dans l'aventure et vous donner des défis afin de vous diversifier ! +feature.milestones.tutorial.quest.open_quest.reward=Bien joué ! Vous avez fini l'étape %1$s ! Les quêtes vous serviront à vous procurer de l'argent facilement pour le début de jeu ! Vous pouvez tenter d'accomplir la tâche que vous voulez ! + +feature.milestones.tutorial.quest.open_contest.name=Ouvrez le menu des contests +feature.milestones.tutorial.quest.open_contest.description.1=Tapez /contest ou bien aller dans le menu principal (/menu) pour pouvoir ouvrir le menu +feature.milestones.tutorial.quest.open_contest.description.2=Une méthode compétitive pour gagner des grosses récompenses ! +feature.milestones.tutorial.quest.open_contest.reward=Bien joué ! Vous avez fini l'étape %1$s ! Les contests opposent 2 groupes sur un thème, les gagnants remportent une grosse récompense ! Et voila le tutoriel est maintenant terminé, allez récupérer votre récompense dans la mailbox, un système de lettre pour recevoir ou bien envoyer des lettres ! + +feature.milestones.tutorial.quest.open_adminshop.name=Ouvrir le menu de l'adminshop +feature.milestones.tutorial.quest.open_adminshop.description.1=Tapez /adminshop ou bien allez dans le menu principal (/menu) pour pouvoir ouvrir le menu +feature.milestones.tutorial.quest.open_adminshop.description.2=Le marché qui varie en fonction de l'offre et de la demande ! +feature.milestones.tutorial.quest.open_adminshop.reward=Bien joué ! Vous avez fini l'étape %1$s ! L'adminshop vous servira à vous procurer de l'argent et des blocs ! Vous pouvez d'ailleurs dès maintenant vendre ou acheter une ressource à l'adminshop ! + +feature.milestones.tutorial.quest.home_upgrade.name=Améliorer votre limite de homes +feature.milestones.tutorial.quest.home_upgrade.description.1=Tapez /upgradehome ou bien aller dans le menu des homes (/homes) +feature.milestones.tutorial.quest.home_upgrade.description.2=pour pouvoir améliorer votre limite de homes +feature.milestones.tutorial.quest.home_upgrade.description.3=Cela vous permettra d'avoir plus de homes ! +feature.milestones.tutorial.quest.home_upgrade.reward=Bien joué ! Vous avez fini l'étape %1$s ! Les homes vous seront très utile pour vous déplacer rapidement entre vos bases ! maintenant, je pense que vous avez besoin de challenges ! Ouvrez le menu des quêtes. + +feature.milestones.tutorial.quest.home_create.name=Poser un home +feature.milestones.tutorial.quest.home_create.description.1=Tapez /sethome en étant là où vous voulez poser votre home +feature.milestones.tutorial.quest.home_create.description.2=C'est très utile d'en faire un pour se téléporter à sa base ! +feature.milestones.tutorial.quest.home_create.reward=Bien joué ! Vous avez fini l'étape %1$s ! Les homes sont souvent utilisés pour ne pas perdre votre base ! Vous êtes limité à avoir que 1 home au début. Il va falloir penser à les améliorer... + +feature.milestones.tutorial.quest.finish_quest.name=Accomplir une quête +feature.milestones.tutorial.quest.finish_quest.description.1=Accomplissez une quête de votre choix +feature.milestones.tutorial.quest.finish_quest.description.2=Cela va pouvoir vous donner de l'argent ou certaines ressources ! +feature.milestones.tutorial.quest.finish_quest.reward=Bien joué ! Vous avez fini l'étape %1$s ! Et voici une récompense ! Pratique, non ? Allons découvrir une autre méthode de production d'argent et de consommation ! Allez dans l'adminshop, un endroit où plusieurs items sont achetable à des prix variants en fonction l'offre et la demande ! + +feature.milestones.tutorial.quest.claim_letter.name=Ouvrir la lettre des récompenses +feature.milestones.tutorial.quest.claim_letter.description.1=Tapez /mailbox ou bien allez dans le menu principal (/menu) pour pouvoir ouvrir le menu mailbox +feature.milestones.tutorial.quest.claim_letter.description.2=Un moyen efficace d'envoyer des items à d'autres joueurs ! +feature.milestones.tutorial.quest.claim_letter.reward=Bien joué ! Vous avez fini l'étape %1$s ! Vous avez découvert les bases d'OpenMC. Et maintenant, libre à vous d'aller découvrir les features par vous même ! Sur ce, nous vous souhaitons le meilleur de votre aventure sur OpenMC ! + +feature.milestones.tutorial.quest.city_create.name=Créer/Rejoindre une ville +feature.milestones.tutorial.quest.city_create.description.1=Faites /city pour commencer à créer votre ville +feature.milestones.tutorial.quest.city_create.description.2=ou bien rejoindre une ville à l'aide d'une invitation ! +feature.milestones.tutorial.quest.city_create.reward=Bien joué ! Vous avez fini l'étape %1$s ! Cette version d'OpenMC est centrée autour des villes. Vous y trouverez une milestone spéciale pour les villes (/city milestone) qui vous guidera dans cette aventure singulière ! Et si vous passiez votre ville au niveau 2 ? + +feature.milestones.tutorial.quest.city_level_two.name=Avoir une ville niveau 2 +feature.milestones.tutorial.quest.city_level_two.description.1=Faites /city milestone pour en savoir plus comment +feature.milestones.tutorial.quest.city_level_two.description.2=améliorer votre ville ! +feature.milestones.tutorial.quest.city_level_two.reward=Bien joué ! Vous avez fini l'étape %1$s ! Vous êtes bien parti pour découvrir toutes les features qu'ils se cachent dans les villes ! Mais avant cela, je voudrais que vous posiez un home. + +feature.milestones.tutorial.quest.break_aywenite.name=Casser 30 Aywenites +feature.milestones.tutorial.quest.break_aywenite.description.1=Le nouveau minerai de la V2, trouvable dans les grottes +feature.milestones.tutorial.quest.break_aywenite.description.2=Il vous sera utile dans de nombreuses fonctionnalités +feature.milestones.tutorial.quest.break_aywenite.reward=Bien joué ! Vous avez fini l'étape %1$s ! Comme dit précédemment l'Aywenite est un minerai, précieux pour les features. D'ailleurs vous pouvez l'utiliser pour faire votre ville ! +