From e67afd8a4862905ff837be76e275b85d4470fbae Mon Sep 17 00:00:00 2001 From: iambibi <89582596+iambibi@users.noreply.github.com> Date: Wed, 30 Sep 2026 17:46:05 +0200 Subject: [PATCH 01/10] feat: add aywenite icon in most Component --- .../city/conditions/CityChestConditions.java | 6 +++- .../city/conditions/CityClaimCondition.java | 6 ++-- .../city/conditions/CityCreateConditions.java | 6 ++-- .../features/city/menu/CityChestMenu.java | 6 ++-- .../features/city/menu/CityChunkMenu.java | 7 +++-- .../core/features/city/menu/NoCityMenu.java | 4 ++- .../city/sub/mascots/menu/MascotMenu.java | 11 +++---- .../sub/mascots/menu/MascotsDeadMenu.java | 7 +++-- .../sub/mascots/menu/MascotsSkinMenu.java | 12 +++++--- .../city/sub/mascots/models/MascotType.java | 4 ++- .../contest/managers/ContestManager.java | 2 +- .../features/homes/HomeUpgradeManager.java | 9 +++--- .../features/homes/menu/HomeUpgradeMenu.java | 1 + .../tutorial/quests/BreakAyweniteQuest.java | 8 +++-- .../openmc/core/utils/bukkit/ItemUtils.java | 6 ++-- .../translations/default/city.properties | 29 ++++++++----------- .../translations/default/contest.properties | 1 - .../translations/default/homes.properties | 7 ++--- .../default/milestones.properties | 4 +-- .../translations/default/utils.properties | 4 +-- .../translations/en_GB/city.properties | 26 ++++++++--------- .../translations/en_GB/contest.properties | 1 - .../translations/en_GB/homes.properties | 7 ++--- .../translations/en_GB/milestones.properties | 4 +-- .../translations/en_GB/utils.properties | 4 +-- .../translations/en_US/city.properties | 29 ++++++++----------- .../translations/en_US/contest.properties | 1 - .../translations/en_US/homes.properties | 7 ++--- .../translations/en_US/milestones.properties | 4 +-- .../translations/en_US/utils.properties | 4 +-- 30 files changed, 120 insertions(+), 107 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/city/conditions/CityChestConditions.java b/src/main/java/fr/openmc/core/features/city/conditions/CityChestConditions.java index 1f7bbc0bd..30f1a9e8d 100644 --- a/src/main/java/fr/openmc/core/features/city/conditions/CityChestConditions.java +++ b/src/main/java/fr/openmc/core/features/city/conditions/CityChestConditions.java @@ -12,6 +12,7 @@ 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.entity.Player; @@ -97,7 +98,10 @@ public static boolean canCityChestUpgrade(City city, Player player) { int aywenite = city.getChestPages() * UPGRADE_PER_AYWENITE; // fonction linéaire f(x)=ax ; a=UPGRADE_PER_MONEY if (!ItemUtils.hasEnoughItems(player, OMCRegistry.CUSTOM_ITEMS.AYWENITE.getBest(), aywenite)) { - MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.conditions.resource.not_enough_aywenite", Component.text(aywenite)), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(player, TranslationManager.translation("core.utils.aywenite.not_enough", + Component.text(aywenite), + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite() + ), Prefix.CITY, MessageType.ERROR, false); return false; } diff --git a/src/main/java/fr/openmc/core/features/city/conditions/CityClaimCondition.java b/src/main/java/fr/openmc/core/features/city/conditions/CityClaimCondition.java index 5e99a4a3d..306ae4de0 100644 --- a/src/main/java/fr/openmc/core/features/city/conditions/CityClaimCondition.java +++ b/src/main/java/fr/openmc/core/features/city/conditions/CityClaimCondition.java @@ -46,8 +46,10 @@ public static boolean canCityClaim(City city, Player player) { if (!ItemUtils.hasEnoughItems(player, OMCRegistry.CUSTOM_ITEMS.AYWENITE.getBest(), amount)) { MessagesManager.sendMessage( player, - TranslationManager.translation("feature.city.conditions.resource.not_enough_aywenite", Component.text(amount)), - Prefix.OPENMC, + TranslationManager.translation("core.utils.aywenite.not_enough", + Component.text(amount), + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite() + ), Prefix.OPENMC, MessageType.ERROR, false ); diff --git a/src/main/java/fr/openmc/core/features/city/conditions/CityCreateConditions.java b/src/main/java/fr/openmc/core/features/city/conditions/CityCreateConditions.java index f436e115d..f20a14bcb 100644 --- a/src/main/java/fr/openmc/core/features/city/conditions/CityCreateConditions.java +++ b/src/main/java/fr/openmc/core/features/city/conditions/CityCreateConditions.java @@ -52,8 +52,10 @@ public static boolean canCityCreate(Player player, String cityName) { if (!ItemUtils.hasEnoughItems(player, OMCRegistry.CUSTOM_ITEMS.AYWENITE.getBest(), AYWENITE_CREATE)) { MessagesManager.sendMessage(player, - TranslationManager.translation("feature.city.conditions.resource.not_enough_aywenite", - Component.text(AYWENITE_CREATE), OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite()), Prefix.CITY, MessageType.ERROR, false); + TranslationManager.translation("core.utils.aywenite.not_enough", + Component.text(AYWENITE_CREATE), + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite() + ), Prefix.CITY, MessageType.ERROR, false); return false; } diff --git a/src/main/java/fr/openmc/core/features/city/menu/CityChestMenu.java b/src/main/java/fr/openmc/core/features/city/menu/CityChestMenu.java index a5b4570f1..4de2df646 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/CityChestMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/CityChestMenu.java @@ -154,14 +154,16 @@ public Map getButtons() { "feature.city.menus.chest.upgrade.lore.max", moneyValue, moneyIcon, - ayweniteValue + ayweniteValue, + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite() ); } else { loreUpgrade = TranslationManager.translationLore( "feature.city.menus.chest.upgrade.lore.click", moneyValue, moneyIcon, - ayweniteValue + ayweniteValue, + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite() ); } diff --git a/src/main/java/fr/openmc/core/features/city/menu/CityChunkMenu.java b/src/main/java/fr/openmc/core/features/city/menu/CityChunkMenu.java index 381acedac..dd3ba9dd9 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/CityChunkMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/CityChunkMenu.java @@ -5,6 +5,7 @@ import fr.openmc.api.menulib.utils.InventorySize; import fr.openmc.api.menulib.utils.ItemMenuBuilder; import fr.openmc.core.OMCPlugin; +import fr.openmc.core.OMCRegistry; import fr.openmc.core.features.city.ChunkDataCache; import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityManager; @@ -279,7 +280,8 @@ private ItemMenuBuilder createPlayerCityChunkItem(Material material, City city, position, moneyValue, moneyIcon, - ayweniteValue + ayweniteValue, + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite() ); } else { lore = TranslationManager.translationLore( @@ -323,7 +325,8 @@ private ItemMenuBuilder createUnclaimedChunkItem(Material material, int chunkX, position, moneyValue, moneyIcon, - ayweniteValue + ayweniteValue, + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite() ); } diff --git a/src/main/java/fr/openmc/core/features/city/menu/NoCityMenu.java b/src/main/java/fr/openmc/core/features/city/menu/NoCityMenu.java index a5310791d..4cee8ec4b 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/NoCityMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/NoCityMenu.java @@ -7,6 +7,7 @@ import fr.openmc.api.menulib.utils.ItemMenuBuilder; import fr.openmc.api.menulib.utils.MenuUtils; import fr.openmc.core.OMCPlugin; +import fr.openmc.core.OMCRegistry; import fr.openmc.core.features.city.actions.CityCreateAction; import fr.openmc.core.features.city.commands.CityInviteCommands; import fr.openmc.core.features.city.conditions.CityCreateConditions; @@ -104,7 +105,8 @@ public void onInventoryClick(InventoryClickEvent click) { "feature.city.menus.no_city.create.lore.ready", Component.text(CityCreateConditions.MONEY_CREATE).color(NamedTextColor.GOLD), Component.text(EconomyManager.getEconomyIcon()).color(NamedTextColor.GOLD), - Component.text(CityCreateConditions.AYWENITE_CREATE).color(NamedTextColor.LIGHT_PURPLE) + Component.text(CityCreateConditions.AYWENITE_CREATE).color(NamedTextColor.LIGHT_PURPLE), + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite() ); } diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotMenu.java index fc9411cd8..9de04ed8c 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotMenu.java @@ -226,7 +226,8 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { } else { requiredAmount.add(TranslationManager.translation( "feature.city.mascots.menu.main.upgrade.cost", - Component.text(mascotsLevels.getUpgradeCost()).color(NamedTextColor.LIGHT_PURPLE).decoration(TextDecoration.ITALIC, false) + Component.text(mascotsLevels.getUpgradeCost()).color(NamedTextColor.LIGHT_PURPLE).decoration(TextDecoration.ITALIC, false), + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite() )); } @@ -261,8 +262,6 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { player.closeInventory(); return; } - MessagesManager.sendMessage(player, TranslationManager.translation("feature.city.mascots.menu.main.upgrade.not_enough_aywenite"), Prefix.CITY, MessageType.ERROR, false); - } else { MessagesManager.sendMessage(player, TranslationManager.translation("messages.global.cannot_do_this"), Prefix.CITY, MessageType.ERROR, false); } @@ -276,7 +275,8 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { List lore = TranslationManager.translationLore( "feature.city.mascots.menu.main.immunity.lore", Component.text(DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(city.getUniqueId(), "city:immunity"))).color(NamedTextColor.GRAY), - Component.text(AYWENITE_REDUCE).color(NamedTextColor.LIGHT_PURPLE).decoration(TextDecoration.ITALIC, false) + Component.text(AYWENITE_REDUCE).color(NamedTextColor.LIGHT_PURPLE).decoration(TextDecoration.ITALIC, false), + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite() ); return new ItemMenuBuilder(this, Material.DIAMOND, itemMeta -> { @@ -295,7 +295,8 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { MessagesManager.sendMessage(player, TranslationManager.translation( "feature.city.mascots.menu.main.immunity.reduce.success", - Component.text(AYWENITE_REDUCE).color(NamedTextColor.LIGHT_PURPLE) + Component.text(AYWENITE_REDUCE).color(NamedTextColor.LIGHT_PURPLE), + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite() ), Prefix.CITY, MessageType.SUCCESS, false); }); diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotsDeadMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotsDeadMenu.java index f6412ea2a..0da09f2e2 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotsDeadMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotsDeadMenu.java @@ -6,6 +6,7 @@ import fr.openmc.api.menulib.utils.ItemMenuBuilder; import fr.openmc.api.menulib.utils.MenuUtils; import fr.openmc.core.OMCPlugin; +import fr.openmc.core.OMCRegistry; import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityManager; import fr.openmc.core.utils.bukkit.ItemUtils; @@ -72,7 +73,8 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { itemMeta.lore(TranslationManager.translationLore( "feature.city.mascots.menu.dead.lore", Component.text(DateUtils.convertMillisToTime(DynamicCooldownManager.getRemaining(cityUUID, "city:immunity"))).color(NamedTextColor.RED), - Component.text(AYWENITE_REDUCE).color(NamedTextColor.LIGHT_PURPLE) + Component.text(AYWENITE_REDUCE).color(NamedTextColor.LIGHT_PURPLE), + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite() )); }).setOnClick(inventoryClickEvent -> { City city = CityManager.getCity(cityUUID); @@ -89,7 +91,8 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { MessagesManager.sendMessage(player, TranslationManager.translation( "feature.city.mascots.menu.dead.reduce.success", - Component.text(AYWENITE_REDUCE).color(NamedTextColor.LIGHT_PURPLE) + Component.text(AYWENITE_REDUCE).color(NamedTextColor.LIGHT_PURPLE), + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite() ), Prefix.CITY, MessageType.SUCCESS, false); }); diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotsSkinMenu.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotsSkinMenu.java index b326c7c45..7b9445548 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotsSkinMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/menu/MascotsSkinMenu.java @@ -103,7 +103,8 @@ private ItemMenuBuilder createMascotButton(City city, MascotType type) { } else { loreMascots.add(TranslationManager.translation( "feature.city.mascots.menu.skin.lore.price_required", - Component.text(type.getPrice()).color(NamedTextColor.LIGHT_PURPLE).decoration(TextDecoration.ITALIC, false) + Component.text(type.getPrice()).color(NamedTextColor.LIGHT_PURPLE).decoration(TextDecoration.ITALIC, false), + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite() )); } @@ -116,13 +117,16 @@ private ItemMenuBuilder createMascotButton(City city, MascotType type) { } if (!egg.equals(type.getSpawnEgg())) { int aywenite = type.getPrice(); - ItemStack ISAywenite = OMCRegistry.CUSTOM_ITEMS.AYWENITE.getBest(); - if (ItemUtils.hasEnoughItems(getOwner(), ISAywenite, aywenite)) { + ItemStack isAywenite = OMCRegistry.CUSTOM_ITEMS.AYWENITE.getBest(); + if (ItemUtils.hasEnoughItems(getOwner(), isAywenite, aywenite)) { changeMascotsSkin(mascots, type.getEntityType(), getOwner(), aywenite); getOwner().playSound(getOwner().getLocation(), selectSound, 1, 1); getOwner().closeInventory(); } else { - MessagesManager.sendMessage(getOwner(), TranslationManager.translation("feature.city.mascots.menu.skin.error.not_enough_aywenite"), Prefix.CITY, MessageType.ERROR, false); + MessagesManager.sendMessage(getOwner(), TranslationManager.translation("core.utils.aywenite.not_enough", + Component.text(aywenite), + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite() + ), Prefix.CITY, MessageType.ERROR, false); getOwner().closeInventory(); } } else { diff --git a/src/main/java/fr/openmc/core/features/city/sub/mascots/models/MascotType.java b/src/main/java/fr/openmc/core/features/city/sub/mascots/models/MascotType.java index f947f6c2a..93a8bd388 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mascots/models/MascotType.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mascots/models/MascotType.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.city.sub.mascots.models; +import fr.openmc.core.OMCRegistry; import fr.openmc.core.utils.EnumUtils; import fr.openmc.core.utils.text.messages.TranslationManager; import fr.openmc.core.utils.world.EntityUtils; @@ -65,7 +66,8 @@ private ItemStack createMascotItem(boolean selected) { meta.lore(TranslationManager.translationLore( "feature.city.mascots.skin.requirement", - Component.text(price).color(NamedTextColor.LIGHT_PURPLE).decoration(TextDecoration.ITALIC, false) + Component.text(price).color(NamedTextColor.LIGHT_PURPLE).decoration(TextDecoration.ITALIC, false), + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite() )); if (selected) diff --git a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/managers/ContestManager.java b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/managers/ContestManager.java index 52244d064..c1e90f93c 100644 --- a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/managers/ContestManager.java +++ b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/managers/ContestManager.java @@ -498,7 +498,7 @@ public static void initPhase3() { .appendNewline() .append(TranslationManager.translation("feature.events.contest.book.page.rewards.aywenite.prefix")) .append(Component.text(aywenite).color(NamedTextColor.LIGHT_PURPLE)) - .append(TranslationManager.translation("feature.events.contest.book.page.rewards.aywenite.suffix")) + .append(OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite()) .appendNewline() .append(TranslationManager.translation("feature.events.contest.book.page.rewards.boost.prefix")) .append(Component.text(multiplicator).color(NamedTextColor.AQUA)); diff --git a/src/main/java/fr/openmc/core/features/homes/HomeUpgradeManager.java b/src/main/java/fr/openmc/core/features/homes/HomeUpgradeManager.java index 6bd6b3c1a..10a9739df 100644 --- a/src/main/java/fr/openmc/core/features/homes/HomeUpgradeManager.java +++ b/src/main/java/fr/openmc/core/features/homes/HomeUpgradeManager.java @@ -55,9 +55,9 @@ public static void upgradeHome(OMCPlayer player) { if (!ItemUtils.hasEnoughItems(player, OMCRegistry.CUSTOM_ITEMS.AYWENITE.getBest(), ayweniteAmount)) { player.message().sendError( - TranslationManager.translation( - "feature.homes.upgrade.not_enough_aywenite", - Component.text(ayweniteAmount).color(NamedTextColor.LIGHT_PURPLE) + TranslationManager.translation("core.utils.aywenite.not_enough", + Cmponent.text(ayweniteAmount), + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite() ), Prefix.OPENMC, true @@ -94,7 +94,8 @@ public static void upgradeHome(OMCPlayer player) { "feature.homes.upgrade.success", Component.text(updatedHomesLimit).color(NamedTextColor.YELLOW), Component.text(nextUpgrade.getPrice()).color(NamedTextColor.YELLOW), - Component.text(ayweniteAmount).color(NamedTextColor.LIGHT_PURPLE) + Component.text(ayweniteAmount).color(NamedTextColor.LIGHT_PURPLE), + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite() ), Prefix.HOME, true); } else { player.message().sendError( diff --git a/src/main/java/fr/openmc/core/features/homes/menu/HomeUpgradeMenu.java b/src/main/java/fr/openmc/core/features/homes/menu/HomeUpgradeMenu.java index 4d52b9934..4aaff1c6e 100644 --- a/src/main/java/fr/openmc/core/features/homes/menu/HomeUpgradeMenu.java +++ b/src/main/java/fr/openmc/core/features/homes/menu/HomeUpgradeMenu.java @@ -59,6 +59,7 @@ public String getTexture() { Component.text(nextUpgrade.getPrice()).color(NamedTextColor.GREEN), Component.text(EconomyManager.getEconomyIcon()).decoration(TextDecoration.ITALIC, false), Component.text(nextUpgrade.getAyweniteCost()).color(NamedTextColor.LIGHT_PURPLE), + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite(), Component.text(nextUpgrade.getLimit()).color(NamedTextColor.YELLOW) )); } 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 f4189cd66..158dcdd40 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 @@ -28,7 +28,10 @@ public class BreakAyweniteQuest extends MilestoneQuest implements Listener { public BreakAyweniteQuest() { super( TranslationManager.translation("feature.milestones.tutorial.quest.break_aywenite.name"), - TranslationManager.translationLore("feature.milestones.tutorial.quest.break_aywenite.description"), + TranslationManager.translationLore("feature.milestones.tutorial.quest.break_aywenite.description", + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite(), + OMCRegistry.CUSTOM_ITEMS.AYWENITE_ORE.getSprite(), + OMCRegistry.CUSTOM_ITEMS.DEEPSLATE_AYWENITE_ORE.getSprite()), OMCRegistry.CUSTOM_ITEMS.AYWENITE, MilestoneType.TUTORIAL, TutorialSteps.BREAK_AYWENITE, @@ -38,7 +41,8 @@ public BreakAyweniteQuest() { new QuestTextReward( TranslationManager.translation( "feature.milestones.tutorial.quest.break_aywenite.reward", - Component.text(TutorialSteps.BREAK_AYWENITE.ordinal() + 1).color(NamedTextColor.GOLD) + Component.text(TutorialSteps.BREAK_AYWENITE.ordinal() + 1).color(NamedTextColor.GOLD), + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite() ), Prefix.MILLESTONE, MessageType.SUCCESS diff --git a/src/main/java/fr/openmc/core/utils/bukkit/ItemUtils.java b/src/main/java/fr/openmc/core/utils/bukkit/ItemUtils.java index 229493a28..4615a3279 100644 --- a/src/main/java/fr/openmc/core/utils/bukkit/ItemUtils.java +++ b/src/main/java/fr/openmc/core/utils/bukkit/ItemUtils.java @@ -288,8 +288,8 @@ public static boolean takeAywenite(Player player, int amount) { MessagesManager.sendMessage( player, TranslationManager.translation("core.utils.aywenite.not_enough", - Component.text("Aywenite").color(NamedTextColor.LIGHT_PURPLE), - Component.text(amount)), + Component.text(amount), + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite()), Prefix.OPENMC, MessageType.ERROR, true @@ -311,7 +311,7 @@ public static boolean giveItem(Player player, ItemStack item, int amount) { player, TranslationManager.translation("core.utils.aywenite.not_enough_space", Component.text(amount), - item.getItemMeta().displayName().color(NamedTextColor.LIGHT_PURPLE)), + OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite()), Prefix.OPENMC, MessageType.ERROR, true diff --git a/src/main/resources/translations/default/city.properties b/src/main/resources/translations/default/city.properties index 2daf55803..5f659da00 100644 --- a/src/main/resources/translations/default/city.properties +++ b/src/main/resources/translations/default/city.properties @@ -146,9 +146,6 @@ feature.city.conditions.claim.not_enough_city_money=Tu n'as pas assez d'argent d feature.city.conditions.create.must_wait=Tu dois attendre avant de pouvoir créer ta ville (%1$s secondes) feature.city.conditions.create.not_enough_player_money=Tu n'as pas assez d'argent pour créer ta ville (%1$s nécessaires) -# - Resources -feature.city.conditions.resource.not_enough_aywenite=Vous n'avez pas assez d'Aywenite (%1$s %2$s nécessaires) - # - Chest feature.city.conditions.chest.open.no_permission=Vous n'avez pas les permissions de voir le coffre feature.city.conditions.chest.open.already_opened_by=Le coffre est déjà ouvert par %1$s @@ -357,7 +354,7 @@ feature.city.menus.no_city.create.lore.ready=Vous pouvez aussi créer Faites /city create [nom] ou bien cliquez ici ! \
Coûte : \
- %1$s %2$s \ -
- %3$s d'Aywenite \ +
- %3$s %4$s \
CLIQUEZ ICI POUR CREER VOTRE VILLE feature.city.menus.invitations.name=Menu des villes - Invitations feature.city.menus.invitations.item.name=%1$s vous a invité(e) dans %2$s @@ -408,11 +405,11 @@ feature.city.menus.chest.name=Menu du coffre de %1$s - Page %2$s feature.city.menus.chest.upgrade.title=Améliorer le coffre feature.city.menus.chest.upgrade.lore.click=Votre ville doit avoir : \
- %1$s %2$s \ -
- %3$s d'Aywenite \ +
- %3$s %4$s \
CLIQUEZ ICI POUR AMELIORER LE COFFRE feature.city.menus.chest.upgrade.lore.max=Votre ville doit avoir : \
- %1$s %2$s \ -
- %3$s d'Aywenite \ +
- %3$s %4$s \
Limite atteinte feature.city.menus.chunks.name=Menu des villes - La carte feature.city.menus.chunks.loading.title=Chargement... @@ -429,7 +426,7 @@ feature.city.menus.chunks.player_claim.lore.reward=Ville : %1$s \
Position : %2$s \
Vous rapporte : \
- %3$s %4$s \ -
- %5$s d'Aywenite \ +
- %5$s %6$s \
CLIQUEZ POUR UNCLAIM feature.city.menus.chunks.player_claim.lore.basic=Ville : %1$s \
Position : %2$s \ @@ -445,7 +442,7 @@ feature.city.menus.chunks.unclaimed.lore.free=Position : %1$s \ feature.city.menus.chunks.unclaimed.lore.cost=Position : %1$s \
Coûte : \
- %2$s %3$s \ -
- %4$s d'Aywenite \ +
- %4$s %5$s \
CLIQUEZ POUR CLAIM feature.city.menus.chunks.confirm_claim.accept=Voulez vous vraiment claim ce chunk ? feature.city.menus.chunks.confirm_claim.deny=Annuler la procédure de claim @@ -757,34 +754,32 @@ feature.city.mascots.menu.main.move.error.invalid_chunk=Impossible de dépl feature.city.mascots.menu.main.upgrade.title=Améliorer votre Mascotte feature.city.mascots.menu.main.upgrade.max_level=Niveau max atteint feature.city.mascots.menu.main.upgrade.level_required=Vous devez être niveau %1$s pour améliorer la mascotte -feature.city.mascots.menu.main.upgrade.cost=Nécessite %1$s d'Aywenites +feature.city.mascots.menu.main.upgrade.cost=Nécessite %1$s %2$s feature.city.mascots.menu.main.upgrade.success=Vous avez amélioré votre mascotte au niveau %1$s -feature.city.mascots.menu.main.upgrade.not_enough_aywenite=Vous n'avez pas assez d'Aywenite feature.city.mascots.menu.main.immunity.title=Votre mascotte est immunisée ! feature.city.mascots.menu.main.immunity.lore=Vous avez une immunité sur votre mascotte \
Temps restant : %1$s \
Pour réduire le temps de 1 heure, vous devez posséder : \ -
- %2$s d'Aywenite \ +
- %2$s %3$s \
CLIQUEZ ICI POUR REDUIRE LE TEMPS D'IMMUNITÉ -feature.city.mascots.menu.main.immunity.reduce.success=Vous venez de dépenser %1$s d'Aywenite pour réduire le cooldown d'une heure +feature.city.mascots.menu.main.immunity.reduce.success=Vous venez de dépenser %1$s %2$s pour réduire le cooldown d'une heure feature.city.mascots.menu.dead.name=Menu des mascottes [DEAD] feature.city.mascots.menu.dead.title=Votre mascotte est morte feature.city.mascots.menu.dead.lore=Votre mascotte est morte, vous pouvez faire réduire le temps de réanimation \
qui est actuellement de : %1$s \
Pour réduire le temps de 1 heure, vous devez posséder : \ -
- %2$s d'Aywenite \ +
- %2$s %3$s \
CLIQUEZ ICI POUR REDUIRE LE TEMPS DE REANIMATION -feature.city.mascots.menu.dead.reduce.success=Vous venez de dépenser %1$s d'Aywenite pour réduire le cooldown d'une heure +feature.city.mascots.menu.dead.reduce.success=Vous venez de dépenser %1$s %2$s pour réduire le cooldown d'une heure feature.city.mascots.menu.skin.name=Menu des skins des mascottes feature.city.mascots.menu.skin.lore.level_required=Vous devez être niveau %1$s pour débloquer ce skin -feature.city.mascots.menu.skin.lore.price_required=Vous devez avoir %1$s Aywenite +feature.city.mascots.menu.skin.lore.price_required=Vous devez avoir %1$s %2$s feature.city.mascots.menu.skin.error.level_required=Vous n'avez pas le niveau de ville requis pour mettre ce skin -feature.city.mascots.menu.skin.error.not_enough_aywenite=Vous n'avez pas assez d'Aywenite -feature.city.mascots.skin.requirement=Nécessite %1$s d'Aywenites +feature.city.mascots.skin.requirement=Nécessite %1$s %2$s feature.city.mascots.skin.error.space_above=Libérez de l'espace au dessus de la mascotte pour changer son skin feature.city.mascots.skin.error.space_around=Libérez de l'espace tout autour de la mascotte pour changer son skin diff --git a/src/main/resources/translations/default/contest.properties b/src/main/resources/translations/default/contest.properties index c0c94322e..b0e44efb0 100644 --- a/src/main/resources/translations/default/contest.properties +++ b/src/main/resources/translations/default/contest.properties @@ -123,7 +123,6 @@ feature.events.contest.book.page.rewards.money.prefix=\ feature.events.contest.book.page.rewards.money.suffix=$ feature.events.contest.book.page.rewards.aywenite.prefix=\ + -feature.events.contest.book.page.rewards.aywenite.suffix= d'Aywenite feature.events.contest.book.page.rewards.boost.prefix=\ Boost de feature.events.contest.camp.mayonnaise=Mayonnaise diff --git a/src/main/resources/translations/default/homes.properties b/src/main/resources/translations/default/homes.properties index cff0a7d56..d03131215 100644 --- a/src/main/resources/translations/default/homes.properties +++ b/src/main/resources/translations/default/homes.properties @@ -19,8 +19,8 @@ feature.homes.upgrade.lore.max=Nombre de home actuel: %1$s\
Vous avez atteint le nombre maximum de homes feature.homes.upgrade.lore.available=Nombre de home actuel: %1$s\
Prix : %2$s %3$s\ -
Aywenite : %4$s\ -
Nombre de home au prochain niveau : %5$s\ +
Prix en Aywenite : %4$s %5$s\ +
Nombre de home au prochain niveau : %6$s\
→ Clique gauche pour améliorer feature.homes.delete.menu.title=Menu des Homes - Confirmation feature.homes.delete.confirm.name=Confirmer la suppression @@ -62,9 +62,8 @@ feature.homes.world.list.title=Liste des mondes où les homes sont désa feature.homes.world.list.item= - %1$s (%2$s) feature.homes.world.info=Ajouté par %1$s le %2$s feature.homes.upgrade.not_reached_limit=Vous n'avez pas atteint la limite de homes pour acheter cette amélioration. -feature.homes.upgrade.not_enough_aywenite=Vous n'avez pas assez d'Aywenite (%1$s nécessaires) feature.homes.upgrade.not_enough_money=Tu n'as pas assez d'argent sur toi ! (%1$s%2$s nécessaires) -feature.homes.upgrade.success=Vous avez amélioré votre limite de homes à %1$s pour %2$s$ et à %3$s d'Aywenite +feature.homes.upgrade.success=Vous avez amélioré votre limite de homes à %1$s pour %2$s$ et à %3$s %4$s feature.homes.upgrade.max=Vous avez atteint la limite maximale de homes. feature.homes.icon.name=%1$s feature.homes.icon.normal_lore=■ Clique gauche pour changer l'icône diff --git a/src/main/resources/translations/default/milestones.properties b/src/main/resources/translations/default/milestones.properties index c2ef35777..dc4e82b07 100644 --- a/src/main/resources/translations/default/milestones.properties +++ b/src/main/resources/translations/default/milestones.properties @@ -76,9 +76,9 @@ feature.milestones.tutorial.quest.city_level_two.description=Faites 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=Le nouveau minerai de la V2, trouvable dans les grottes\ +feature.milestones.tutorial.quest.break_aywenite.description=Le nouveau minerai %1$s de la V2, trouvable dans les grottes (%2$s, %3$s) \
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 ! +feature.milestones.tutorial.quest.break_aywenite.reward=Bien joué ! Vous avez fini l'étape %1$s ! Comme dit précédemment l'Aywenite %2$s est un minerai, précieux pour les features. D'ailleurs vous pouvez l'utiliser pour faire votre ville ! feature.milestones.tutorial.quest.place_shop.name=Placer un shop feature.milestones.tutorial.quest.place_shop.description=Placez un shop et commencer à vendre vos items !\
si possible le plus proche du spawn pour plus de vente ! diff --git a/src/main/resources/translations/default/utils.properties b/src/main/resources/translations/default/utils.properties index cca06b8fb..d0d48fa72 100644 --- a/src/main/resources/translations/default/utils.properties +++ b/src/main/resources/translations/default/utils.properties @@ -1,3 +1,3 @@ core.utils.fade_title.teleporting=Téléportation... -core.utils.aywenite.not_enough=Vous n'avez pas assez d'%1$s (%2$s nécessaires) -core.utils.aywenite.not_enough_space=Vous n'avez pas assez de place dans votre inventaire pour recevoir %1$s d'%2$s. L'aywenite est disponible dans votre mailbox +core.utils.aywenite.not_enough=Vous n'avez pas assez d'Aywenite (%2$s %3$s nécessaires) +core.utils.aywenite.not_enough_space=Vous n'avez pas assez de place dans votre inventaire pour recevoir %1$s %2$s. L'Aywenite est disponible dans votre mailbox diff --git a/src/main/resources/translations/en_GB/city.properties b/src/main/resources/translations/en_GB/city.properties index 184cbdbf7..3d188efa9 100644 --- a/src/main/resources/translations/en_GB/city.properties +++ b/src/main/resources/translations/en_GB/city.properties @@ -357,7 +357,7 @@ feature.city.menus.no_city.create.lore.ready=You can also create Do /city create [name] or click here! \
Costs: \
- %1$s %2$s \ -
- %3$s of Aywenite \ +
- %3$s %4$s \
CLICK HERE TO CREATE YOUR CITY feature.city.menus.invitations.name=Menu of cities - Invitations feature.city.menus.invitations.item.name=%1$s invited you to %2$s @@ -408,11 +408,11 @@ feature.city.menus.chest.name=Safe menu %1$s - Page %2$s feature.city.menus.chest.upgrade.title=Upgrade the trunk feature.city.menus.chest.upgrade.lore.click=Your city must have: \
- %1$s %2$s \ -
- %3$s of Aywenite \ +
- %3$s %4$s \
CLICK HERE TO IMPROVE THE CHEST feature.city.menus.chest.upgrade.lore.max=Your city must have: \
- %1$s %2$s \ -
- %3$s of Aywenite \ +
- %3$s %4$s \
Limit reached feature.city.menus.chunks.name=Cities menu - The map feature.city.menus.chunks.loading.title=Loading... @@ -429,7 +429,7 @@ feature.city.menus.chunks.player_claim.lore.reward=City : %1$s \
Position : %2$s \
Brings you: \
- %3$s %4$s \ -
- %5$s of Aywenite \ +
- %5$s %6$s \
CLICK TO UNCLAIM feature.city.menus.chunks.player_claim.lore.basic=City : %1$s \
Position : %2$s \ @@ -445,7 +445,7 @@ feature.city.menus.chunks.unclaimed.lore.free=Position : %1$s \ feature.city.menus.chunks.unclaimed.lore.cost=Position : %1$s \
Costs: \
- %2$s %3$s \ -
- %4$s of Aywenite \ +
- %4$s %5$s \
CLICK TO CLAIM feature.city.menus.chunks.confirm_claim.accept=Do you really want to claim this chunk? feature.city.menus.chunks.confirm_claim.deny=Cancel the claim procedure @@ -757,34 +757,32 @@ feature.city.mascots.menu.main.move.error.invalid_chunk=Cannot move the mas feature.city.mascots.menu.main.upgrade.title=Improve your Mascot feature.city.mascots.menu.main.upgrade.max_level=Max level reached feature.city.mascots.menu.main.upgrade.level_required=You must be level %1$s to improve the mascot -feature.city.mascots.menu.main.upgrade.cost=Need %1$s of Aywenites +feature.city.mascots.menu.main.upgrade.cost=Need %1$s %2$s feature.city.mascots.menu.main.upgrade.success=You have improved your mascot to the level %1$s -feature.city.mascots.menu.main.upgrade.not_enough_aywenite=You don't have enough Aywenite feature.city.mascots.menu.main.immunity.title=Your mascot is immune ! feature.city.mascots.menu.main.immunity.lore=You have a immunity on your mascot \
Time remaining: %1$s \
To reduce the time by 1 hour, you must have: \ -
- %2$s of Aywenite \ +
- %2$s %3$s \
CLICK HERE TO REDUCE IMMUNITY TIME -feature.city.mascots.menu.main.immunity.reduce.success=You just spent %1$s of Aywenite to reduce the cooldown by one hour +feature.city.mascots.menu.main.immunity.reduce.success=You just spent %1$s %2$s to reduce the cooldown by one hour feature.city.mascots.menu.dead.name=Mascot menu [DEAD] feature.city.mascots.menu.dead.title=Your mascot is dead feature.city.mascots.menu.dead.lore=Your mascot is dead, you can reduce the reanimation time \
which is currently: %1$s \
To reduce the time by 1 hour, you must have: \ -
- %2$s of Aywenite \ +
- %2$s %3$s \
CLICK HERE TO REDUCE RESUSCITATION TIME -feature.city.mascots.menu.dead.reduce.success=You just spent %1$s of Aywenite to reduce the cooldown by one hour +feature.city.mascots.menu.dead.reduce.success=You just spent %1$s %2$s to reduce the cooldown by one hour feature.city.mascots.menu.skin.name=Pet Skin Menu feature.city.mascots.menu.skin.lore.level_required=You must be level %1$s to unlock this skin -feature.city.mascots.menu.skin.lore.price_required=You must have %1$s Aywenite +feature.city.mascots.menu.skin.lore.price_required=You must have %1$s %2$s feature.city.mascots.menu.skin.error.level_required=You do not have the required city level to put on this skin -feature.city.mascots.menu.skin.error.not_enough_aywenite=You don't have enough Aywenite -feature.city.mascots.skin.requirement=Need %1$s of Aywenites +feature.city.mascots.skin.requirement=Need %1$s %2$s feature.city.mascots.skin.error.space_above=Free up space above the mascot to change its skin feature.city.mascots.skin.error.space_around=Free up space around the mascot to change its skin diff --git a/src/main/resources/translations/en_GB/contest.properties b/src/main/resources/translations/en_GB/contest.properties index fad8944ee..50f2a5c52 100644 --- a/src/main/resources/translations/en_GB/contest.properties +++ b/src/main/resources/translations/en_GB/contest.properties @@ -123,7 +123,6 @@ feature.events.contest.book.page.rewards.money.prefix=\ feature.events.contest.book.page.rewards.money.suffix=$ feature.events.contest.book.page.rewards.aywenite.prefix=\ + -feature.events.contest.book.page.rewards.aywenite.suffix= of Aywenite feature.events.contest.book.page.rewards.boost.prefix=\ Boost feature.events.contest.camp.mayonnaise=Mayonnaise diff --git a/src/main/resources/translations/en_GB/homes.properties b/src/main/resources/translations/en_GB/homes.properties index 456b55968..932fc8832 100644 --- a/src/main/resources/translations/en_GB/homes.properties +++ b/src/main/resources/translations/en_GB/homes.properties @@ -19,8 +19,8 @@ feature.homes.upgrade.lore.max=Current number of homes: %1$s\
You have reached the maximum number of homes feature.homes.upgrade.lore.available=Current number of homes: %1$s\
Price : %2$s %3$s\ -
Aywenite: %4$s\ -
Number of homes on the next level: %5$s\ +
Price in Aywenite: %4$s %5$s\ +
Number of homes on the next level: %6$s\
→ Left click to improve feature.homes.delete.menu.title=Homes Menu - Confirmation feature.homes.delete.confirm.name=Confirm deletion @@ -62,9 +62,8 @@ feature.homes.world.list.title=List of worlds where homes are disabled:< feature.homes.world.list.item= - %1$s (%2$s) feature.homes.world.info=Added by %1$s THE %2$s feature.homes.upgrade.not_reached_limit=You have not reached the house limit to purchase this improvement. -feature.homes.upgrade.not_enough_aywenite=You don't have enough Aywenite (%1$s necessary) feature.homes.upgrade.not_enough_money=You don't have enough money on you! (%1$s%2$s necessary) -feature.homes.upgrade.success=You have improved your house limit to %1$s For %2$s$ and to %3$s of Aywenite +feature.homes.upgrade.success=You have improved your house limit to %1$s For %2$s$ and to %3$s %4$s feature.homes.upgrade.max=You have reached the maximum limit of homes. feature.homes.icon.name=%1$s feature.homes.icon.normal_lore=■ Click LEFT to change the icon diff --git a/src/main/resources/translations/en_GB/milestones.properties b/src/main/resources/translations/en_GB/milestones.properties index fbb2009d6..0d5db42c3 100644 --- a/src/main/resources/translations/en_GB/milestones.properties +++ b/src/main/resources/translations/en_GB/milestones.properties @@ -76,9 +76,9 @@ feature.milestones.tutorial.quest.city_level_two.description=Do <
improve your city! feature.milestones.tutorial.quest.city_level_two.reward=Well done! You finished thestage %1$s ! You're well on your way to discovering all the features hidden in cities! But before that, I would like you to ask a home. feature.milestones.tutorial.quest.break_aywenite.name=Break 30 Aywenites -feature.milestones.tutorial.quest.break_aywenite.description=The new ore of V2, found in caves\ +feature.milestones.tutorial.quest.break_aywenite.description=The new ore %1$s of V2, found in caves (%2$s, %3$s)\
It will be to you useful in many features -feature.milestones.tutorial.quest.break_aywenite.reward=Well done! You finished thestage %1$s ! As said previously theAywenite is an ore, valuable for features. Besides, you can use it to make your city! +feature.milestones.tutorial.quest.break_aywenite.reward=Well done! You finished thestage %1$s ! As said previously theAywenite %2$s is an ore, valuable for features. Besides, you can use it to make your city! feature.milestones.tutorial.quest.connect_discord.name=Connect to Discord feature.milestones.tutorial.quest.connect_discord.description=Connect your Discord account to your Minecraft account!\ diff --git a/src/main/resources/translations/en_GB/utils.properties b/src/main/resources/translations/en_GB/utils.properties index a48eee6bc..be89da307 100644 --- a/src/main/resources/translations/en_GB/utils.properties +++ b/src/main/resources/translations/en_GB/utils.properties @@ -1,3 +1,3 @@ core.utils.fade_title.teleporting=Teleport... -core.utils.aywenite.not_enough=You don't have enough%1$s (%2$s necessary) -core.utils.aywenite.not_enough_space=You do not have enough space in your inventory to receive %1$s of%2$s. Aywenite is available in your mailbox +core.utils.aywenite.not_enough=You don't have enough Aywenite (%2$s %3$s necessary) +core.utils.aywenite.not_enough_space=You do not have enough space in your inventory to receive %1$s %2$s. Aywenite is available in your mailbox diff --git a/src/main/resources/translations/en_US/city.properties b/src/main/resources/translations/en_US/city.properties index 184cbdbf7..69013ef85 100644 --- a/src/main/resources/translations/en_US/city.properties +++ b/src/main/resources/translations/en_US/city.properties @@ -146,9 +146,6 @@ feature.city.conditions.claim.not_enough_city_money=You don't have enough money feature.city.conditions.create.must_wait=You have to wait before you can create your city (%1$s seconds) feature.city.conditions.create.not_enough_player_money=You don't have enough money to create your city (%1$s necessary) -# - Resources -feature.city.conditions.resource.not_enough_aywenite=You don't have enough Aywenite (%1$s %2$s necessary) - # - Chest feature.city.conditions.chest.open.no_permission=You do not have permissions to view the vault feature.city.conditions.chest.open.already_opened_by=The trunk is already opened by %1$s @@ -357,7 +354,7 @@ feature.city.menus.no_city.create.lore.ready=You can also create Do /city create [name] or click here! \
Costs: \
- %1$s %2$s \ -
- %3$s of Aywenite \ +
- %3$s %4$s \
CLICK HERE TO CREATE YOUR CITY feature.city.menus.invitations.name=Menu of cities - Invitations feature.city.menus.invitations.item.name=%1$s invited you to %2$s @@ -408,11 +405,11 @@ feature.city.menus.chest.name=Safe menu %1$s - Page %2$s feature.city.menus.chest.upgrade.title=Upgrade the trunk feature.city.menus.chest.upgrade.lore.click=Your city must have: \
- %1$s %2$s \ -
- %3$s of Aywenite \ +
- %3$s %4$s \
CLICK HERE TO IMPROVE THE CHEST feature.city.menus.chest.upgrade.lore.max=Your city must have: \
- %1$s %2$s \ -
- %3$s of Aywenite \ +
- %3$s %4$s \
Limit reached feature.city.menus.chunks.name=Cities menu - The map feature.city.menus.chunks.loading.title=Loading... @@ -429,7 +426,7 @@ feature.city.menus.chunks.player_claim.lore.reward=City : %1$s \
Position : %2$s \
Brings you: \
- %3$s %4$s \ -
- %5$s of Aywenite \ +
- %5$s %6$s \
CLICK TO UNCLAIM feature.city.menus.chunks.player_claim.lore.basic=City : %1$s \
Position : %2$s \ @@ -445,7 +442,7 @@ feature.city.menus.chunks.unclaimed.lore.free=Position : %1$s \ feature.city.menus.chunks.unclaimed.lore.cost=Position : %1$s \
Costs: \
- %2$s %3$s \ -
- %4$s of Aywenite \ +
- %4$s %5$s \
CLICK TO CLAIM feature.city.menus.chunks.confirm_claim.accept=Do you really want to claim this chunk? feature.city.menus.chunks.confirm_claim.deny=Cancel the claim procedure @@ -757,34 +754,32 @@ feature.city.mascots.menu.main.move.error.invalid_chunk=Cannot move the mas feature.city.mascots.menu.main.upgrade.title=Improve your Mascot feature.city.mascots.menu.main.upgrade.max_level=Max level reached feature.city.mascots.menu.main.upgrade.level_required=You must be level %1$s to improve the mascot -feature.city.mascots.menu.main.upgrade.cost=Need %1$s of Aywenites +feature.city.mascots.menu.main.upgrade.cost=Need %1$s %2$s feature.city.mascots.menu.main.upgrade.success=You have improved your mascot to the level %1$s -feature.city.mascots.menu.main.upgrade.not_enough_aywenite=You don't have enough Aywenite feature.city.mascots.menu.main.immunity.title=Your mascot is immune ! feature.city.mascots.menu.main.immunity.lore=You have a immunity on your mascot \
Time remaining: %1$s \
To reduce the time by 1 hour, you must have: \ -
- %2$s of Aywenite \ +
- %2$s %3$s \
CLICK HERE TO REDUCE IMMUNITY TIME -feature.city.mascots.menu.main.immunity.reduce.success=You just spent %1$s of Aywenite to reduce the cooldown by one hour +feature.city.mascots.menu.main.immunity.reduce.success=You just spent %1$s %2$s to reduce the cooldown by one hour feature.city.mascots.menu.dead.name=Mascot menu [DEAD] feature.city.mascots.menu.dead.title=Your mascot is dead feature.city.mascots.menu.dead.lore=Your mascot is dead, you can reduce the reanimation time \
which is currently: %1$s \
To reduce the time by 1 hour, you must have: \ -
- %2$s of Aywenite \ +
- %2$s %3$s \
CLICK HERE TO REDUCE RESUSCITATION TIME -feature.city.mascots.menu.dead.reduce.success=You just spent %1$s of Aywenite to reduce the cooldown by one hour +feature.city.mascots.menu.dead.reduce.success=You just spent %1$s %2$s to reduce the cooldown by one hour feature.city.mascots.menu.skin.name=Pet Skin Menu feature.city.mascots.menu.skin.lore.level_required=You must be level %1$s to unlock this skin -feature.city.mascots.menu.skin.lore.price_required=You must have %1$s Aywenite +feature.city.mascots.menu.skin.lore.price_required=You must have %1$s %2$s feature.city.mascots.menu.skin.error.level_required=You do not have the required city level to put on this skin -feature.city.mascots.menu.skin.error.not_enough_aywenite=You don't have enough Aywenite -feature.city.mascots.skin.requirement=Need %1$s of Aywenites +feature.city.mascots.skin.requirement=Need %1$s %2$s feature.city.mascots.skin.error.space_above=Free up space above the mascot to change its skin feature.city.mascots.skin.error.space_around=Free up space around the mascot to change its skin diff --git a/src/main/resources/translations/en_US/contest.properties b/src/main/resources/translations/en_US/contest.properties index ccd07b63f..1afd9aa74 100644 --- a/src/main/resources/translations/en_US/contest.properties +++ b/src/main/resources/translations/en_US/contest.properties @@ -123,7 +123,6 @@ feature.events.contest.book.page.rewards.money.prefix=\ feature.events.contest.book.page.rewards.money.suffix=$ feature.events.contest.book.page.rewards.aywenite.prefix=\ + -feature.events.contest.book.page.rewards.aywenite.suffix= of Aywenite feature.events.contest.book.page.rewards.boost.prefix=\ Boost feature.events.contest.camp.mayonnaise=Mayonnaise diff --git a/src/main/resources/translations/en_US/homes.properties b/src/main/resources/translations/en_US/homes.properties index 456b55968..932fc8832 100644 --- a/src/main/resources/translations/en_US/homes.properties +++ b/src/main/resources/translations/en_US/homes.properties @@ -19,8 +19,8 @@ feature.homes.upgrade.lore.max=Current number of homes: %1$s\
You have reached the maximum number of homes feature.homes.upgrade.lore.available=Current number of homes: %1$s\
Price : %2$s %3$s\ -
Aywenite: %4$s\ -
Number of homes on the next level: %5$s\ +
Price in Aywenite: %4$s %5$s\ +
Number of homes on the next level: %6$s\
→ Left click to improve feature.homes.delete.menu.title=Homes Menu - Confirmation feature.homes.delete.confirm.name=Confirm deletion @@ -62,9 +62,8 @@ feature.homes.world.list.title=List of worlds where homes are disabled:< feature.homes.world.list.item= - %1$s (%2$s) feature.homes.world.info=Added by %1$s THE %2$s feature.homes.upgrade.not_reached_limit=You have not reached the house limit to purchase this improvement. -feature.homes.upgrade.not_enough_aywenite=You don't have enough Aywenite (%1$s necessary) feature.homes.upgrade.not_enough_money=You don't have enough money on you! (%1$s%2$s necessary) -feature.homes.upgrade.success=You have improved your house limit to %1$s For %2$s$ and to %3$s of Aywenite +feature.homes.upgrade.success=You have improved your house limit to %1$s For %2$s$ and to %3$s %4$s feature.homes.upgrade.max=You have reached the maximum limit of homes. feature.homes.icon.name=%1$s feature.homes.icon.normal_lore=■ Click LEFT to change the icon diff --git a/src/main/resources/translations/en_US/milestones.properties b/src/main/resources/translations/en_US/milestones.properties index fbb2009d6..439fe394c 100644 --- a/src/main/resources/translations/en_US/milestones.properties +++ b/src/main/resources/translations/en_US/milestones.properties @@ -76,9 +76,9 @@ feature.milestones.tutorial.quest.city_level_two.description=Do <
improve your city! feature.milestones.tutorial.quest.city_level_two.reward=Well done! You finished thestage %1$s ! You're well on your way to discovering all the features hidden in cities! But before that, I would like you to ask a home. feature.milestones.tutorial.quest.break_aywenite.name=Break 30 Aywenites -feature.milestones.tutorial.quest.break_aywenite.description=The new ore of V2, found in caves\ +feature.milestones.tutorial.quest.break_aywenite.description=The new ore %1$s of V2, found in caves (%2$s, %3$s) \
It will be to you useful in many features -feature.milestones.tutorial.quest.break_aywenite.reward=Well done! You finished thestage %1$s ! As said previously theAywenite is an ore, valuable for features. Besides, you can use it to make your city! +feature.milestones.tutorial.quest.break_aywenite.reward=Well done! You finished thestage %1$s ! As said previously theAywenite %2$s is an ore, valuable for features. Besides, you can use it to make your city! feature.milestones.tutorial.quest.connect_discord.name=Connect to Discord feature.milestones.tutorial.quest.connect_discord.description=Connect your Discord account to your Minecraft account!\ diff --git a/src/main/resources/translations/en_US/utils.properties b/src/main/resources/translations/en_US/utils.properties index 1949e1c55..114287253 100644 --- a/src/main/resources/translations/en_US/utils.properties +++ b/src/main/resources/translations/en_US/utils.properties @@ -1,3 +1,3 @@ core.utils.fade_title.teleporting=Teleport... -core.utils.aywenite.not_enough=You don't have enough %1$s (%2$s necessary) -core.utils.aywenite.not_enough_space=You do not have enough space in your inventory to receive %1$s of%2$s. Aywenite is available in your mailbox +core.utils.aywenite.not_enough=You don't have enough Aywneite (%2$s %3$s necessary) +core.utils.aywenite.not_enough_space=You do not have enough space in your inventory to receive %1$s %2$s. Aywenite is available in your mailbox From 5f7ee40641647148b61930953dc9e9be1965775f Mon Sep 17 00:00:00 2001 From: iambibi <89582596+iambibi@users.noreply.github.com> Date: Wed, 30 Sep 2026 18:30:32 +0200 Subject: [PATCH 02/10] fix; build --- .../fr/openmc/core/features/homes/HomeUpgradeManager.java | 2 +- .../fr/openmc/core/hooks/itemsadder/sprite/SpriteUtils.java | 4 +++- src/main/java/fr/openmc/core/registry/items/CustomItem.java | 1 + .../fr/openmc/core/registry/items/CustomItemRegistry.java | 2 ++ 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/homes/HomeUpgradeManager.java b/src/main/java/fr/openmc/core/features/homes/HomeUpgradeManager.java index 10a9739df..677c564a1 100644 --- a/src/main/java/fr/openmc/core/features/homes/HomeUpgradeManager.java +++ b/src/main/java/fr/openmc/core/features/homes/HomeUpgradeManager.java @@ -56,7 +56,7 @@ public static void upgradeHome(OMCPlayer player) { if (!ItemUtils.hasEnoughItems(player, OMCRegistry.CUSTOM_ITEMS.AYWENITE.getBest(), ayweniteAmount)) { player.message().sendError( TranslationManager.translation("core.utils.aywenite.not_enough", - Cmponent.text(ayweniteAmount), + Component.text(ayweniteAmount), OMCRegistry.CUSTOM_ITEMS.AYWENITE.getSprite() ), Prefix.OPENMC, diff --git a/src/main/java/fr/openmc/core/hooks/itemsadder/sprite/SpriteUtils.java b/src/main/java/fr/openmc/core/hooks/itemsadder/sprite/SpriteUtils.java index 518d6cf05..9fdbedbe7 100644 --- a/src/main/java/fr/openmc/core/hooks/itemsadder/sprite/SpriteUtils.java +++ b/src/main/java/fr/openmc/core/hooks/itemsadder/sprite/SpriteUtils.java @@ -8,6 +8,7 @@ import net.kyori.adventure.key.Key; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.ObjectComponent; +import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.object.ObjectContents; import java.util.Set; @@ -36,6 +37,7 @@ public static ObjectComponent getSprite(CustomItem item) { Key resourceKey = Key.key(prefix + IdentifierUtils.removeExtensionPath(bestResourceId)); - return Component.object(ObjectContents.sprite(atlasKey, resourceKey)); + return Component.object(ObjectContents.sprite(atlasKey, resourceKey)) + .color(NamedTextColor.WHITE); } } diff --git a/src/main/java/fr/openmc/core/registry/items/CustomItem.java b/src/main/java/fr/openmc/core/registry/items/CustomItem.java index 675134a37..caff611d2 100644 --- a/src/main/java/fr/openmc/core/registry/items/CustomItem.java +++ b/src/main/java/fr/openmc/core/registry/items/CustomItem.java @@ -13,6 +13,7 @@ import net.kyori.adventure.text.ObjectComponent; import net.kyori.adventure.text.event.HoverEvent; import net.kyori.adventure.text.event.HoverEventSource; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/fr/openmc/core/registry/items/CustomItemRegistry.java b/src/main/java/fr/openmc/core/registry/items/CustomItemRegistry.java index 6baabbbf4..87c23880c 100644 --- a/src/main/java/fr/openmc/core/registry/items/CustomItemRegistry.java +++ b/src/main/java/fr/openmc/core/registry/items/CustomItemRegistry.java @@ -87,6 +87,8 @@ public class CustomItemRegistry extends Registry /* Blocs */ public final CustomItem AYWENITE_BLOCK = register("omc_blocks:aywenite_block", Material.AMETHYST_BLOCK); + public final CustomItem AYWENITE_ORE = register("omc_blocks:aywenite_ore", Material.AMETHYST_BLOCK); + public final CustomItem DEEPSLATE_AYWENITE_ORE = register("omc_blocks:deepslate_aywenite_ore", Material.AMETHYST_BLOCK); public final CustomItem PELUCHE_SEINYY = register("omc_plush:peluche_seinyy", Material.PAPER); public final CustomItem PELUCHE_AWYEN = register("omc_plush:peluche_awyen", Material.PAPER); public final CustomItem PELUCHE_ROOT = register("omc_plush:peluche_root", Material.PAPER); From 627ec649a828154a872fb8e16d99875689660542 Mon Sep 17 00:00:00 2001 From: iambibi <89582596+iambibi@users.noreply.github.com> Date: Wed, 30 Sep 2026 19:16:09 +0200 Subject: [PATCH 03/10] fix: color for sprite aywenite --- src/main/resources/translations/default/city.properties | 4 ++-- src/main/resources/translations/default/milestones.properties | 4 ++-- src/main/resources/translations/default/utils.properties | 2 +- src/main/resources/translations/en_GB/city.properties | 4 ++-- src/main/resources/translations/en_GB/milestones.properties | 4 ++-- src/main/resources/translations/en_GB/utils.properties | 2 +- src/main/resources/translations/en_US/city.properties | 4 ++-- src/main/resources/translations/en_US/milestones.properties | 4 ++-- src/main/resources/translations/en_US/utils.properties | 2 +- 9 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/resources/translations/default/city.properties b/src/main/resources/translations/default/city.properties index 5f659da00..3f105d242 100644 --- a/src/main/resources/translations/default/city.properties +++ b/src/main/resources/translations/default/city.properties @@ -763,7 +763,7 @@ feature.city.mascots.menu.main.immunity.lore=Vous avez une immunité
Pour réduire le temps de 1 heure, vous devez posséder : \
- %2$s %3$s \
CLIQUEZ ICI POUR REDUIRE LE TEMPS D'IMMUNITÉ -feature.city.mascots.menu.main.immunity.reduce.success=Vous venez de dépenser %1$s %2$s pour réduire le cooldown d'une heure +feature.city.mascots.menu.main.immunity.reduce.success=Vous venez de dépenser %1$s %2$s pour réduire le cooldown d'une heure feature.city.mascots.menu.dead.name=Menu des mascottes [DEAD] feature.city.mascots.menu.dead.title=Votre mascotte est morte @@ -772,7 +772,7 @@ feature.city.mascots.menu.dead.lore=Votre mascotte est morte, vous pouvez
Pour réduire le temps de 1 heure, vous devez posséder : \
- %2$s %3$s \
CLIQUEZ ICI POUR REDUIRE LE TEMPS DE REANIMATION -feature.city.mascots.menu.dead.reduce.success=Vous venez de dépenser %1$s %2$s pour réduire le cooldown d'une heure +feature.city.mascots.menu.dead.reduce.success=Vous venez de dépenser %1$s %2$s pour réduire le cooldown d'une heure feature.city.mascots.menu.skin.name=Menu des skins des mascottes feature.city.mascots.menu.skin.lore.level_required=Vous devez être niveau %1$s pour débloquer ce skin diff --git a/src/main/resources/translations/default/milestones.properties b/src/main/resources/translations/default/milestones.properties index dc4e82b07..30dcdf261 100644 --- a/src/main/resources/translations/default/milestones.properties +++ b/src/main/resources/translations/default/milestones.properties @@ -76,9 +76,9 @@ feature.milestones.tutorial.quest.city_level_two.description=Faites 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=Le nouveau minerai %1$s de la V2, trouvable dans les grottes (%2$s, %3$s) \ +feature.milestones.tutorial.quest.break_aywenite.description=Le nouveau minerai %1$s de la V2, trouvable dans les grottes (%2$s, %3$s) \
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 %2$s est un minerai, précieux pour les features. D'ailleurs vous pouvez l'utiliser pour faire votre ville ! +feature.milestones.tutorial.quest.break_aywenite.reward=Bien joué ! Vous avez fini l'étape %1$s ! Comme dit précédemment l'Aywenite %2$s est un minerai, précieux pour les features. D'ailleurs vous pouvez l'utiliser pour faire votre ville ! feature.milestones.tutorial.quest.place_shop.name=Placer un shop feature.milestones.tutorial.quest.place_shop.description=Placez un shop et commencer à vendre vos items !\
si possible le plus proche du spawn pour plus de vente ! diff --git a/src/main/resources/translations/default/utils.properties b/src/main/resources/translations/default/utils.properties index d0d48fa72..1a2bf0f5e 100644 --- a/src/main/resources/translations/default/utils.properties +++ b/src/main/resources/translations/default/utils.properties @@ -1,3 +1,3 @@ core.utils.fade_title.teleporting=Téléportation... -core.utils.aywenite.not_enough=Vous n'avez pas assez d'Aywenite (%2$s %3$s nécessaires) +core.utils.aywenite.not_enough=Vous n'avez pas assez d'Aywenite (%2$s %3$s nécessaires) core.utils.aywenite.not_enough_space=Vous n'avez pas assez de place dans votre inventaire pour recevoir %1$s %2$s. L'Aywenite est disponible dans votre mailbox diff --git a/src/main/resources/translations/en_GB/city.properties b/src/main/resources/translations/en_GB/city.properties index 3d188efa9..3accd9da8 100644 --- a/src/main/resources/translations/en_GB/city.properties +++ b/src/main/resources/translations/en_GB/city.properties @@ -766,7 +766,7 @@ feature.city.mascots.menu.main.immunity.lore=You have a immunityTo reduce the time by 1 hour, you must have: \
- %2$s %3$s \
CLICK HERE TO REDUCE IMMUNITY TIME -feature.city.mascots.menu.main.immunity.reduce.success=You just spent %1$s %2$s to reduce the cooldown by one hour +feature.city.mascots.menu.main.immunity.reduce.success=You just spent %1$s %2$s to reduce the cooldown by one hour feature.city.mascots.menu.dead.name=Mascot menu [DEAD] feature.city.mascots.menu.dead.title=Your mascot is dead @@ -775,7 +775,7 @@ feature.city.mascots.menu.dead.lore=Your mascot is dead, you can reduce th
To reduce the time by 1 hour, you must have: \
- %2$s %3$s \
CLICK HERE TO REDUCE RESUSCITATION TIME -feature.city.mascots.menu.dead.reduce.success=You just spent %1$s %2$s to reduce the cooldown by one hour +feature.city.mascots.menu.dead.reduce.success=You just spent %1$s %2$s to reduce the cooldown by one hour feature.city.mascots.menu.skin.name=Pet Skin Menu feature.city.mascots.menu.skin.lore.level_required=You must be level %1$s to unlock this skin diff --git a/src/main/resources/translations/en_GB/milestones.properties b/src/main/resources/translations/en_GB/milestones.properties index 0d5db42c3..7ceb8269e 100644 --- a/src/main/resources/translations/en_GB/milestones.properties +++ b/src/main/resources/translations/en_GB/milestones.properties @@ -76,9 +76,9 @@ feature.milestones.tutorial.quest.city_level_two.description=Do <
improve your city! feature.milestones.tutorial.quest.city_level_two.reward=Well done! You finished thestage %1$s ! You're well on your way to discovering all the features hidden in cities! But before that, I would like you to ask a home. feature.milestones.tutorial.quest.break_aywenite.name=Break 30 Aywenites -feature.milestones.tutorial.quest.break_aywenite.description=The new ore %1$s of V2, found in caves (%2$s, %3$s)\ +feature.milestones.tutorial.quest.break_aywenite.description=The new ore %1$s of V2, found in caves (%2$s, %3$s)\
It will be to you useful in many features -feature.milestones.tutorial.quest.break_aywenite.reward=Well done! You finished thestage %1$s ! As said previously theAywenite %2$s is an ore, valuable for features. Besides, you can use it to make your city! +feature.milestones.tutorial.quest.break_aywenite.reward=Well done! You finished thestage %1$s ! As said previously theAywenite %2$s is an ore, valuable for features. Besides, you can use it to make your city! feature.milestones.tutorial.quest.connect_discord.name=Connect to Discord feature.milestones.tutorial.quest.connect_discord.description=Connect your Discord account to your Minecraft account!\ diff --git a/src/main/resources/translations/en_GB/utils.properties b/src/main/resources/translations/en_GB/utils.properties index be89da307..8f14bdb87 100644 --- a/src/main/resources/translations/en_GB/utils.properties +++ b/src/main/resources/translations/en_GB/utils.properties @@ -1,3 +1,3 @@ core.utils.fade_title.teleporting=Teleport... -core.utils.aywenite.not_enough=You don't have enough Aywenite (%2$s %3$s necessary) +core.utils.aywenite.not_enough=You don't have enough Aywenite (%2$s %3$s necessary) core.utils.aywenite.not_enough_space=You do not have enough space in your inventory to receive %1$s %2$s. Aywenite is available in your mailbox diff --git a/src/main/resources/translations/en_US/city.properties b/src/main/resources/translations/en_US/city.properties index 69013ef85..6b8fe57c3 100644 --- a/src/main/resources/translations/en_US/city.properties +++ b/src/main/resources/translations/en_US/city.properties @@ -763,7 +763,7 @@ feature.city.mascots.menu.main.immunity.lore=You have a immunityTo reduce the time by 1 hour, you must have: \
- %2$s %3$s \
CLICK HERE TO REDUCE IMMUNITY TIME -feature.city.mascots.menu.main.immunity.reduce.success=You just spent %1$s %2$s to reduce the cooldown by one hour +feature.city.mascots.menu.main.immunity.reduce.success=You just spent %1$s %2$s to reduce the cooldown by one hour feature.city.mascots.menu.dead.name=Mascot menu [DEAD] feature.city.mascots.menu.dead.title=Your mascot is dead @@ -772,7 +772,7 @@ feature.city.mascots.menu.dead.lore=Your mascot is dead, you can reduce th
To reduce the time by 1 hour, you must have: \
- %2$s %3$s \
CLICK HERE TO REDUCE RESUSCITATION TIME -feature.city.mascots.menu.dead.reduce.success=You just spent %1$s %2$s to reduce the cooldown by one hour +feature.city.mascots.menu.dead.reduce.success=You just spent %1$s %2$s to reduce the cooldown by one hour feature.city.mascots.menu.skin.name=Pet Skin Menu feature.city.mascots.menu.skin.lore.level_required=You must be level %1$s to unlock this skin diff --git a/src/main/resources/translations/en_US/milestones.properties b/src/main/resources/translations/en_US/milestones.properties index 439fe394c..c16f13c2c 100644 --- a/src/main/resources/translations/en_US/milestones.properties +++ b/src/main/resources/translations/en_US/milestones.properties @@ -76,9 +76,9 @@ feature.milestones.tutorial.quest.city_level_two.description=Do <
improve your city! feature.milestones.tutorial.quest.city_level_two.reward=Well done! You finished thestage %1$s ! You're well on your way to discovering all the features hidden in cities! But before that, I would like you to ask a home. feature.milestones.tutorial.quest.break_aywenite.name=Break 30 Aywenites -feature.milestones.tutorial.quest.break_aywenite.description=The new ore %1$s of V2, found in caves (%2$s, %3$s) \ +feature.milestones.tutorial.quest.break_aywenite.description=The new ore %1$s of V2, found in caves (%2$s, %3$s) \
It will be to you useful in many features -feature.milestones.tutorial.quest.break_aywenite.reward=Well done! You finished thestage %1$s ! As said previously theAywenite %2$s is an ore, valuable for features. Besides, you can use it to make your city! +feature.milestones.tutorial.quest.break_aywenite.reward=Well done! You finished thestage %1$s ! As said previously theAywenite %2$s is an ore, valuable for features. Besides, you can use it to make your city! feature.milestones.tutorial.quest.connect_discord.name=Connect to Discord feature.milestones.tutorial.quest.connect_discord.description=Connect your Discord account to your Minecraft account!\ diff --git a/src/main/resources/translations/en_US/utils.properties b/src/main/resources/translations/en_US/utils.properties index 114287253..cb738d45c 100644 --- a/src/main/resources/translations/en_US/utils.properties +++ b/src/main/resources/translations/en_US/utils.properties @@ -1,3 +1,3 @@ core.utils.fade_title.teleporting=Teleport... -core.utils.aywenite.not_enough=You don't have enough Aywneite (%2$s %3$s necessary) +core.utils.aywenite.not_enough=You don't have enough Aywneite (%2$s %3$s necessary) core.utils.aywenite.not_enough_space=You do not have enough space in your inventory to receive %1$s %2$s. Aywenite is available in your mailbox From d67bcda26aaf1ae65a7d0f359b61a73112c368d3 Mon Sep 17 00:00:00 2001 From: iambibi <89582596+iambibi@users.noreply.github.com> Date: Wed, 30 Sep 2026 21:14:17 +0200 Subject: [PATCH 04/10] apply getNameWithHead in friends and improve OMCPlayer and OMCOfflinePlayer --- .../api/entity/player/OMCOfflinePlayer.java | 22 ---- .../entity/player/OMCOfflinePlayerImpl.java | 29 ----- src/main/java/fr/openmc/api/menulib/Menu.java | 2 +- .../api/omcplayer/OMCOfflinePlayer.java | 37 +++++++ .../api/omcplayer/OMCOfflinePlayerImpl.java | 48 +++++++++ .../player => omcplayer}/OMCPlayer.java | 16 +-- .../player => omcplayer}/OMCPlayerImpl.java | 30 +++++- .../lamp/OMCOfflinePlayerParameterType.java | 26 +++++ .../lamp}/OMCPlayerParameterType.java | 3 +- .../lamp}/OMCPlayerSenderResolver.java | 3 +- .../sub/OMCPlayerCity.java | 2 +- .../sub/OMCPlayerEconomy.java | 2 +- .../sub/OMCPlayerFeat.java | 2 +- .../sub/OMCPlayerHome.java | 2 +- .../sub/OMCPlayerMessage.java | 2 +- .../sub/OMCPlayerSettings.java | 2 +- .../java/fr/openmc/core/CommandsManager.java | 10 +- .../city/commands/CityInviteCommands.java | 2 +- .../city/conditions/CityInviteConditions.java | 2 +- .../features/city/menu/InvitationsMenu.java | 2 +- .../menu/playerlist/CityPlayerListMenu.java | 2 +- .../core/features/corpse/CorpseListener.java | 4 +- .../core/features/displays/TabList.java | 14 +-- .../economy/commands/BankCommands.java | 2 +- .../features/economy/commands/History.java | 2 +- .../core/features/economy/commands/Money.java | 2 +- .../core/features/economy/commands/Pay.java | 2 +- .../friend/commands/FriendCommand.java | 100 +++++++----------- .../features/homes/HomeUpgradeManager.java | 2 +- .../homes/command/DelHomeCommand.java | 4 +- .../homes/command/HomeWorldCommand.java | 2 +- .../homes/command/RelocateHomeCommand.java | 2 +- .../homes/command/RenameHomeCommand.java | 4 +- .../homes/command/SetHomeCommand.java | 4 +- .../features/homes/command/TpHomeCommand.java | 4 +- .../autocomplete/HomeAutoComplete.java | 2 +- .../features/homes/icons/CachedIconItem.java | 2 +- .../features/homes/menu/HomeConfigMenu.java | 3 +- .../homes/menu/HomeDeleteConfirmMenu.java | 2 +- .../core/features/homes/menu/HomeMenu.java | 4 +- .../core/features/mainmenu/menus/Page1.java | 2 +- .../core/features/mainmenu/menus/Page2.java | 2 +- .../privatemessage/PrivateMessageManager.java | 2 +- .../command/PrivateMessageCommand.java | 2 +- .../listeners/JoinQuitMessageListener.java | 38 ++++--- .../listeners/OMCPlayerCacheListener.java | 2 +- .../core/utils/cache/CacheOfflinePlayer.java | 13 ++- 47 files changed, 278 insertions(+), 190 deletions(-) delete mode 100644 src/main/java/fr/openmc/api/entity/player/OMCOfflinePlayer.java delete mode 100644 src/main/java/fr/openmc/api/entity/player/OMCOfflinePlayerImpl.java create mode 100644 src/main/java/fr/openmc/api/omcplayer/OMCOfflinePlayer.java create mode 100644 src/main/java/fr/openmc/api/omcplayer/OMCOfflinePlayerImpl.java rename src/main/java/fr/openmc/api/{entity/player => omcplayer}/OMCPlayer.java (69%) rename src/main/java/fr/openmc/api/{entity/player => omcplayer}/OMCPlayerImpl.java (69%) create mode 100644 src/main/java/fr/openmc/api/omcplayer/lamp/OMCOfflinePlayerParameterType.java rename src/main/java/fr/openmc/api/{entity/player => omcplayer/lamp}/OMCPlayerParameterType.java (91%) rename src/main/java/fr/openmc/api/{entity/player => omcplayer/lamp}/OMCPlayerSenderResolver.java (90%) rename src/main/java/fr/openmc/api/{entity/player => omcplayer}/sub/OMCPlayerCity.java (91%) rename src/main/java/fr/openmc/api/{entity/player => omcplayer}/sub/OMCPlayerEconomy.java (97%) rename src/main/java/fr/openmc/api/{entity/player => omcplayer}/sub/OMCPlayerFeat.java (93%) rename src/main/java/fr/openmc/api/{entity/player => omcplayer}/sub/OMCPlayerHome.java (98%) rename src/main/java/fr/openmc/api/{entity/player => omcplayer}/sub/OMCPlayerMessage.java (98%) rename src/main/java/fr/openmc/api/{entity/player => omcplayer}/sub/OMCPlayerSettings.java (96%) diff --git a/src/main/java/fr/openmc/api/entity/player/OMCOfflinePlayer.java b/src/main/java/fr/openmc/api/entity/player/OMCOfflinePlayer.java deleted file mode 100644 index 2e15dadc7..000000000 --- a/src/main/java/fr/openmc/api/entity/player/OMCOfflinePlayer.java +++ /dev/null @@ -1,22 +0,0 @@ -package fr.openmc.api.entity.player; - -import fr.openmc.api.entity.player.sub.OMCPlayerHome; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -@SuppressWarnings({"unused", "removal", "deprecation"}) -public interface OMCOfflinePlayer extends OfflinePlayer { - - static OMCOfflinePlayer of(@NotNull OfflinePlayer player) { - if (player instanceof Player online) - return OMCPlayer.of(online); - if (player instanceof OMCOfflinePlayer omcPlayer) - return omcPlayer; - return new OMCOfflinePlayerImpl(player); - } - - @NotNull OfflinePlayer getOfflinePlayer(); - - OMCPlayerHome home(); -} diff --git a/src/main/java/fr/openmc/api/entity/player/OMCOfflinePlayerImpl.java b/src/main/java/fr/openmc/api/entity/player/OMCOfflinePlayerImpl.java deleted file mode 100644 index 7765521f3..000000000 --- a/src/main/java/fr/openmc/api/entity/player/OMCOfflinePlayerImpl.java +++ /dev/null @@ -1,29 +0,0 @@ -package fr.openmc.api.entity.player; - -import fr.openmc.api.entity.player.sub.OMCPlayerHome; -import lombok.experimental.Delegate; -import org.bukkit.OfflinePlayer; -import org.jetbrains.annotations.NotNull; - -@SuppressWarnings({"unused", "removal", "deprecation"}) -public class OMCOfflinePlayerImpl implements OMCOfflinePlayer { - - @Delegate(types = OfflinePlayer.class) - private final OfflinePlayer player; - private final OMCPlayerHome home; - - OMCOfflinePlayerImpl(OfflinePlayer player) { - this.player = player; - this.home = new OMCPlayerHome(player); - } - - @Override - public @NotNull OfflinePlayer getOfflinePlayer() { - return player; - } - - @Override - public OMCPlayerHome home() { - return home; - } -} diff --git a/src/main/java/fr/openmc/api/menulib/Menu.java b/src/main/java/fr/openmc/api/menulib/Menu.java index fc3212194..95b817ee1 100644 --- a/src/main/java/fr/openmc/api/menulib/Menu.java +++ b/src/main/java/fr/openmc/api/menulib/Menu.java @@ -1,6 +1,6 @@ package fr.openmc.api.menulib; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.api.menulib.events.OpenMenuEvent; import fr.openmc.api.menulib.utils.InventorySize; import fr.openmc.api.menulib.utils.ItemMenuBuilder; diff --git a/src/main/java/fr/openmc/api/omcplayer/OMCOfflinePlayer.java b/src/main/java/fr/openmc/api/omcplayer/OMCOfflinePlayer.java new file mode 100644 index 000000000..37bf1c105 --- /dev/null +++ b/src/main/java/fr/openmc/api/omcplayer/OMCOfflinePlayer.java @@ -0,0 +1,37 @@ +package fr.openmc.api.omcplayer; + +import fr.openmc.api.omcplayer.sub.OMCPlayerHome; +import fr.openmc.core.utils.cache.CacheOfflinePlayer; +import net.kyori.adventure.text.Component; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import java.util.UUID; + +@SuppressWarnings({"unused", "removal", "deprecation"}) +public interface OMCOfflinePlayer extends OfflinePlayer { + static OMCOfflinePlayer of(UUID playerUUID) { + OfflinePlayer offlinePlayer = CacheOfflinePlayer.getOfflinePlayer(playerUUID); + return new OMCOfflinePlayerImpl(offlinePlayer); + } + + static OMCOfflinePlayer of(String playerName) { + OfflinePlayer offlinePlayer = CacheOfflinePlayer.getOfflinePlayer(playerName); + return new OMCOfflinePlayerImpl(offlinePlayer); + } + + static OMCOfflinePlayer of(@NotNull OfflinePlayer player) { + if (player instanceof Player online) + return OMCPlayer.of(online); + if (player instanceof OMCOfflinePlayer omcPlayer) + return omcPlayer; + return new OMCOfflinePlayerImpl(player); + } + + @NotNull OfflinePlayer getOfflinePlayer(); + + Component getNameWithHead(); + + OMCPlayerHome home(); +} diff --git a/src/main/java/fr/openmc/api/omcplayer/OMCOfflinePlayerImpl.java b/src/main/java/fr/openmc/api/omcplayer/OMCOfflinePlayerImpl.java new file mode 100644 index 000000000..2f34393b8 --- /dev/null +++ b/src/main/java/fr/openmc/api/omcplayer/OMCOfflinePlayerImpl.java @@ -0,0 +1,48 @@ +package fr.openmc.api.omcplayer; + +import fr.openmc.api.omcplayer.sub.OMCPlayerHome; +import fr.openmc.core.utils.cache.CachePlayerName; +import lombok.experimental.Delegate; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.object.ObjectContents; +import org.bukkit.OfflinePlayer; +import org.jetbrains.annotations.NotNull; + +@SuppressWarnings({"unused", "removal", "deprecation"}) +public class OMCOfflinePlayerImpl implements OMCOfflinePlayer { + + @Delegate(types = OfflinePlayer.class) + private final OfflinePlayer player; + private final OMCPlayerHome home; + + OMCOfflinePlayerImpl(OfflinePlayer player) { + this.player = player; + this.home = new OMCPlayerHome(player); + } + + @Override + public Component getNameWithHead() { + if (player == null) + return CachePlayerName.name(null); + + String playerName = player.getName(); + + if (playerName == null) + playerName = CachePlayerName.getName(player.getUniqueId()); + + return Component.object(ObjectContents.playerHead(player.getUniqueId())).color(NamedTextColor.WHITE) + .appendSpace() + .append(Component.text(playerName)); + } + + @Override + public @NotNull OfflinePlayer getOfflinePlayer() { + return player; + } + + @Override + public OMCPlayerHome home() { + return home; + } +} diff --git a/src/main/java/fr/openmc/api/entity/player/OMCPlayer.java b/src/main/java/fr/openmc/api/omcplayer/OMCPlayer.java similarity index 69% rename from src/main/java/fr/openmc/api/entity/player/OMCPlayer.java rename to src/main/java/fr/openmc/api/omcplayer/OMCPlayer.java index 9f6410601..e5ca32ea5 100644 --- a/src/main/java/fr/openmc/api/entity/player/OMCPlayer.java +++ b/src/main/java/fr/openmc/api/omcplayer/OMCPlayer.java @@ -1,9 +1,11 @@ -package fr.openmc.api.entity.player; - -import fr.openmc.api.entity.player.sub.OMCPlayerCity; -import fr.openmc.api.entity.player.sub.OMCPlayerEconomy; -import fr.openmc.api.entity.player.sub.OMCPlayerMessage; -import fr.openmc.api.entity.player.sub.OMCPlayerSettings; +package fr.openmc.api.omcplayer; + +import fr.openmc.api.omcplayer.sub.OMCPlayerCity; +import fr.openmc.api.omcplayer.sub.OMCPlayerEconomy; +import fr.openmc.api.omcplayer.sub.OMCPlayerMessage; +import fr.openmc.api.omcplayer.sub.OMCPlayerSettings; +import net.minecraft.server.level.ServerPlayer; +import org.bukkit.craftbukkit.entity.CraftPlayer; import org.bukkit.entity.Player; import org.jetbrains.annotations.Nullable; @@ -32,6 +34,8 @@ static OMCPlayer of(@Nullable Player player) { } @Nullable Player getPlayer(); + @Nullable CraftPlayer getCraftPlayer(); + ServerPlayer getServerPlayer(); OMCPlayerMessage message(); diff --git a/src/main/java/fr/openmc/api/entity/player/OMCPlayerImpl.java b/src/main/java/fr/openmc/api/omcplayer/OMCPlayerImpl.java similarity index 69% rename from src/main/java/fr/openmc/api/entity/player/OMCPlayerImpl.java rename to src/main/java/fr/openmc/api/omcplayer/OMCPlayerImpl.java index 8df998e87..cdfd728aa 100644 --- a/src/main/java/fr/openmc/api/entity/player/OMCPlayerImpl.java +++ b/src/main/java/fr/openmc/api/omcplayer/OMCPlayerImpl.java @@ -1,11 +1,14 @@ -package fr.openmc.api.entity.player; +package fr.openmc.api.omcplayer; -import fr.openmc.api.entity.player.sub.OMCPlayerCity; -import fr.openmc.api.entity.player.sub.OMCPlayerEconomy; -import fr.openmc.api.entity.player.sub.OMCPlayerMessage; -import fr.openmc.api.entity.player.sub.OMCPlayerSettings; +import fr.openmc.api.omcplayer.sub.OMCPlayerCity; +import fr.openmc.api.omcplayer.sub.OMCPlayerEconomy; +import fr.openmc.api.omcplayer.sub.OMCPlayerMessage; +import fr.openmc.api.omcplayer.sub.OMCPlayerSettings; import lombok.experimental.Delegate; +import net.minecraft.server.level.ServerPlayer; +import org.bukkit.craftbukkit.entity.CraftPlayer; import org.bukkit.entity.Player; +import org.jetbrains.annotations.Nullable; import java.util.Map; import java.util.UUID; @@ -37,6 +40,23 @@ static OMCPlayer of(Player player) { return CACHE.computeIfAbsent(player.getUniqueId(), id -> new OMCPlayerImpl(player)); } + @Override + public @Nullable Player getPlayer() { + return player; + } + + @Override + public @Nullable CraftPlayer getCraftPlayer() { + return (CraftPlayer) player; + } + + @Override + public ServerPlayer getServerPlayer() { + if (getCraftPlayer() == null) + throw new IllegalStateException("getCraftPlayer() ne devrait pas être null"); + return getCraftPlayer().getHandle(); + } + public static void removeCache(UUID uuid) { CACHE.remove(uuid); } diff --git a/src/main/java/fr/openmc/api/omcplayer/lamp/OMCOfflinePlayerParameterType.java b/src/main/java/fr/openmc/api/omcplayer/lamp/OMCOfflinePlayerParameterType.java new file mode 100644 index 000000000..958ea3bce --- /dev/null +++ b/src/main/java/fr/openmc/api/omcplayer/lamp/OMCOfflinePlayerParameterType.java @@ -0,0 +1,26 @@ +package fr.openmc.api.omcplayer.lamp; + +import fr.openmc.api.omcplayer.OMCOfflinePlayer; +import fr.openmc.api.omcplayer.OMCPlayer; +import org.jetbrains.annotations.NotNull; +import revxrsal.commands.autocomplete.SuggestionProvider; +import revxrsal.commands.bukkit.actor.BukkitCommandActor; +import revxrsal.commands.bukkit.parameters.PlayerParameterType; +import revxrsal.commands.node.ExecutionContext; +import revxrsal.commands.parameter.ParameterType; +import revxrsal.commands.stream.MutableStringStream; + +public class OMCOfflinePlayerParameterType implements ParameterType { + + private final PlayerParameterType delegate = new PlayerParameterType(false); + + @Override + public OMCOfflinePlayer parse(@NotNull MutableStringStream input, @NotNull ExecutionContext context) { + return OMCOfflinePlayer.of(delegate.parse(input, context)); + } + + @Override + public @NotNull SuggestionProvider defaultSuggestions() { + return delegate.defaultSuggestions(); + } +} diff --git a/src/main/java/fr/openmc/api/entity/player/OMCPlayerParameterType.java b/src/main/java/fr/openmc/api/omcplayer/lamp/OMCPlayerParameterType.java similarity index 91% rename from src/main/java/fr/openmc/api/entity/player/OMCPlayerParameterType.java rename to src/main/java/fr/openmc/api/omcplayer/lamp/OMCPlayerParameterType.java index d1ca280d3..1db73f3a1 100644 --- a/src/main/java/fr/openmc/api/entity/player/OMCPlayerParameterType.java +++ b/src/main/java/fr/openmc/api/omcplayer/lamp/OMCPlayerParameterType.java @@ -1,5 +1,6 @@ -package fr.openmc.api.entity.player; +package fr.openmc.api.omcplayer.lamp; +import fr.openmc.api.omcplayer.OMCPlayer; import org.jetbrains.annotations.NotNull; import revxrsal.commands.autocomplete.SuggestionProvider; import revxrsal.commands.bukkit.actor.BukkitCommandActor; diff --git a/src/main/java/fr/openmc/api/entity/player/OMCPlayerSenderResolver.java b/src/main/java/fr/openmc/api/omcplayer/lamp/OMCPlayerSenderResolver.java similarity index 90% rename from src/main/java/fr/openmc/api/entity/player/OMCPlayerSenderResolver.java rename to src/main/java/fr/openmc/api/omcplayer/lamp/OMCPlayerSenderResolver.java index 6b9be5406..1f79e9611 100644 --- a/src/main/java/fr/openmc/api/entity/player/OMCPlayerSenderResolver.java +++ b/src/main/java/fr/openmc/api/omcplayer/lamp/OMCPlayerSenderResolver.java @@ -1,5 +1,6 @@ -package fr.openmc.api.entity.player; +package fr.openmc.api.omcplayer.lamp; +import fr.openmc.api.omcplayer.OMCPlayer; import org.jetbrains.annotations.NotNull; import revxrsal.commands.bukkit.actor.BukkitCommandActor; import revxrsal.commands.command.CommandParameter; diff --git a/src/main/java/fr/openmc/api/entity/player/sub/OMCPlayerCity.java b/src/main/java/fr/openmc/api/omcplayer/sub/OMCPlayerCity.java similarity index 91% rename from src/main/java/fr/openmc/api/entity/player/sub/OMCPlayerCity.java rename to src/main/java/fr/openmc/api/omcplayer/sub/OMCPlayerCity.java index 34e09e2ea..dec40daec 100644 --- a/src/main/java/fr/openmc/api/entity/player/sub/OMCPlayerCity.java +++ b/src/main/java/fr/openmc/api/omcplayer/sub/OMCPlayerCity.java @@ -1,4 +1,4 @@ -package fr.openmc.api.entity.player.sub; +package fr.openmc.api.omcplayer.sub; import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityManager; diff --git a/src/main/java/fr/openmc/api/entity/player/sub/OMCPlayerEconomy.java b/src/main/java/fr/openmc/api/omcplayer/sub/OMCPlayerEconomy.java similarity index 97% rename from src/main/java/fr/openmc/api/entity/player/sub/OMCPlayerEconomy.java rename to src/main/java/fr/openmc/api/omcplayer/sub/OMCPlayerEconomy.java index adb68de84..19537fd72 100644 --- a/src/main/java/fr/openmc/api/entity/player/sub/OMCPlayerEconomy.java +++ b/src/main/java/fr/openmc/api/omcplayer/sub/OMCPlayerEconomy.java @@ -1,4 +1,4 @@ -package fr.openmc.api.entity.player.sub; +package fr.openmc.api.omcplayer.sub; import fr.openmc.core.features.economy.EconomyManager; import org.bukkit.entity.Player; diff --git a/src/main/java/fr/openmc/api/entity/player/sub/OMCPlayerFeat.java b/src/main/java/fr/openmc/api/omcplayer/sub/OMCPlayerFeat.java similarity index 93% rename from src/main/java/fr/openmc/api/entity/player/sub/OMCPlayerFeat.java rename to src/main/java/fr/openmc/api/omcplayer/sub/OMCPlayerFeat.java index db1e8047d..c43d66bc3 100644 --- a/src/main/java/fr/openmc/api/entity/player/sub/OMCPlayerFeat.java +++ b/src/main/java/fr/openmc/api/omcplayer/sub/OMCPlayerFeat.java @@ -1,4 +1,4 @@ -package fr.openmc.api.entity.player.sub; +package fr.openmc.api.omcplayer.sub; import lombok.Getter; import org.bukkit.OfflinePlayer; diff --git a/src/main/java/fr/openmc/api/entity/player/sub/OMCPlayerHome.java b/src/main/java/fr/openmc/api/omcplayer/sub/OMCPlayerHome.java similarity index 98% rename from src/main/java/fr/openmc/api/entity/player/sub/OMCPlayerHome.java rename to src/main/java/fr/openmc/api/omcplayer/sub/OMCPlayerHome.java index de2a4811f..d38ad3cc2 100644 --- a/src/main/java/fr/openmc/api/entity/player/sub/OMCPlayerHome.java +++ b/src/main/java/fr/openmc/api/omcplayer/sub/OMCPlayerHome.java @@ -1,4 +1,4 @@ -package fr.openmc.api.entity.player.sub; +package fr.openmc.api.omcplayer.sub; import fr.openmc.core.features.homes.HomeLimits; import fr.openmc.core.features.homes.HomesManager; diff --git a/src/main/java/fr/openmc/api/entity/player/sub/OMCPlayerMessage.java b/src/main/java/fr/openmc/api/omcplayer/sub/OMCPlayerMessage.java similarity index 98% rename from src/main/java/fr/openmc/api/entity/player/sub/OMCPlayerMessage.java rename to src/main/java/fr/openmc/api/omcplayer/sub/OMCPlayerMessage.java index b29bc7c9f..572fc587c 100644 --- a/src/main/java/fr/openmc/api/entity/player/sub/OMCPlayerMessage.java +++ b/src/main/java/fr/openmc/api/omcplayer/sub/OMCPlayerMessage.java @@ -1,4 +1,4 @@ -package fr.openmc.api.entity.player.sub; +package fr.openmc.api.omcplayer.sub; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.MessagesManager; diff --git a/src/main/java/fr/openmc/api/entity/player/sub/OMCPlayerSettings.java b/src/main/java/fr/openmc/api/omcplayer/sub/OMCPlayerSettings.java similarity index 96% rename from src/main/java/fr/openmc/api/entity/player/sub/OMCPlayerSettings.java rename to src/main/java/fr/openmc/api/omcplayer/sub/OMCPlayerSettings.java index 9684f3f0e..41392ef1d 100644 --- a/src/main/java/fr/openmc/api/entity/player/sub/OMCPlayerSettings.java +++ b/src/main/java/fr/openmc/api/omcplayer/sub/OMCPlayerSettings.java @@ -1,4 +1,4 @@ -package fr.openmc.api.entity.player.sub; +package fr.openmc.api.omcplayer.sub; import fr.openmc.core.features.settings.PlayerSettings; import fr.openmc.core.features.settings.PlayerSettingsManager; diff --git a/src/main/java/fr/openmc/core/CommandsManager.java b/src/main/java/fr/openmc/core/CommandsManager.java index 00aaa7198..1e3c57a38 100644 --- a/src/main/java/fr/openmc/core/CommandsManager.java +++ b/src/main/java/fr/openmc/core/CommandsManager.java @@ -1,9 +1,11 @@ package fr.openmc.core; import fr.openmc.api.cooldown.CooldownInterceptor; -import fr.openmc.api.entity.player.OMCPlayer; -import fr.openmc.api.entity.player.OMCPlayerParameterType; -import fr.openmc.api.entity.player.OMCPlayerSenderResolver; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; +import fr.openmc.api.omcplayer.OMCPlayer; +import fr.openmc.api.omcplayer.lamp.OMCOfflinePlayerParameterType; +import fr.openmc.api.omcplayer.lamp.OMCPlayerParameterType; +import fr.openmc.api.omcplayer.lamp.OMCPlayerSenderResolver; import fr.openmc.core.commands.debug.ChronometerCommand; import fr.openmc.core.commands.debug.CustomItemCommand; import fr.openmc.core.commands.debug.ToastCommand; @@ -39,6 +41,8 @@ public static void init() { .commandCondition(new CooldownInterceptor()) .parameterTypes(builder -> builder.addParameterType(OMCPlayer.class, new OMCPlayerParameterType())) + .parameterTypes(builder -> + builder.addParameterType(OMCOfflinePlayer.class, new OMCOfflinePlayerParameterType())) .build(); registerCommands(); diff --git a/src/main/java/fr/openmc/core/features/city/commands/CityInviteCommands.java b/src/main/java/fr/openmc/core/features/city/commands/CityInviteCommands.java index 7fce9a589..fb99c0c10 100644 --- a/src/main/java/fr/openmc/core/features/city/commands/CityInviteCommands.java +++ b/src/main/java/fr/openmc/core/features/city/commands/CityInviteCommands.java @@ -1,6 +1,6 @@ package fr.openmc.core.features.city.commands; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.commands.autocomplete.OnlinePlayerAutoComplete; import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityManager; diff --git a/src/main/java/fr/openmc/core/features/city/conditions/CityInviteConditions.java b/src/main/java/fr/openmc/core/features/city/conditions/CityInviteConditions.java index 171eb4246..f1b2881fb 100644 --- a/src/main/java/fr/openmc/core/features/city/conditions/CityInviteConditions.java +++ b/src/main/java/fr/openmc/core/features/city/conditions/CityInviteConditions.java @@ -1,6 +1,6 @@ package fr.openmc.core.features.city.conditions; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityManager; import fr.openmc.core.features.city.CityPermission; diff --git a/src/main/java/fr/openmc/core/features/city/menu/InvitationsMenu.java b/src/main/java/fr/openmc/core/features/city/menu/InvitationsMenu.java index 4661c7110..8e2e4bd5c 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/InvitationsMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/InvitationsMenu.java @@ -1,6 +1,6 @@ package fr.openmc.core.features.city.menu; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.api.menulib.PaginatedMenu; import fr.openmc.api.menulib.template.ConfirmMenu; import fr.openmc.api.menulib.template.ItemMenuTemplate; diff --git a/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerListMenu.java b/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerListMenu.java index aec6debf4..291aa998f 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerListMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerListMenu.java @@ -1,6 +1,6 @@ package fr.openmc.core.features.city.menu.playerlist; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.api.input.dialog.DialogInput; import fr.openmc.api.menulib.PaginatedMenu; import fr.openmc.api.menulib.template.ConfirmMenu; diff --git a/src/main/java/fr/openmc/core/features/corpse/CorpseListener.java b/src/main/java/fr/openmc/core/features/corpse/CorpseListener.java index 29041552c..63d2428ca 100644 --- a/src/main/java/fr/openmc/core/features/corpse/CorpseListener.java +++ b/src/main/java/fr/openmc/core/features/corpse/CorpseListener.java @@ -3,7 +3,7 @@ import de.oliver.fancynpcs.api.events.NpcInteractEvent; import fr.openmc.api.cooldown.CooldownEndEvent; import fr.openmc.api.cooldown.DynamicCooldownManager; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.OMCPlugin; import fr.openmc.core.features.corpse.model.DBCorpse; import fr.openmc.core.features.corpse.npc.CorpseNPCManager; @@ -13,7 +13,6 @@ 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 fr.openmc.core.utils.world.WorldUtils; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.TextColor; import org.bukkit.Color; @@ -21,7 +20,6 @@ import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.PlayerDeathEvent; diff --git a/src/main/java/fr/openmc/core/features/displays/TabList.java b/src/main/java/fr/openmc/core/features/displays/TabList.java index 3fd9c67c4..9d7b20d1d 100644 --- a/src/main/java/fr/openmc/core/features/displays/TabList.java +++ b/src/main/java/fr/openmc/core/features/displays/TabList.java @@ -8,6 +8,7 @@ import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketEvent; import dev.lone.itemsadder.api.FontImages.FontImageWrapper; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.OMCPlugin; import fr.openmc.core.bootstrap.features.Feature; import fr.openmc.core.bootstrap.features.types.LoadIfEnable; @@ -22,7 +23,6 @@ import net.minecraft.network.protocol.game.ClientboundTabListPacket; import net.minecraft.server.level.ServerPlayer; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.entity.CraftPlayer; import org.bukkit.entity.Player; import java.util.EnumSet; @@ -75,21 +75,21 @@ public void onPacketSending(PacketEvent event) { }); } - public static void updateHeaderFooter(Player player, Component header, Component footer) { - ServerPlayer nmsPlayer = ((CraftPlayer) player).getHandle(); + public static void updateHeaderFooter(OMCPlayer omcPlayer, Component header, Component footer) { + ServerPlayer nmsPlayer = omcPlayer.getServerPlayer(); nmsPlayer.connection.send(new ClientboundTabListPacket( PaperAdventure.asVanilla(header), PaperAdventure.asVanilla(footer))); } - public static void updateTabList(Player player) { + public static void updateTabList(OMCPlayer omcPlayer) { int visibleOnlinePlayers = 0; for (Player p : Bukkit.getOnlinePlayers()) { - if (player.canSee(p)) { + if (omcPlayer.canSee(p)) { visibleOnlinePlayers++; } } - boolean isInDream = DreamUtils.isInDream(player); + boolean isInDream = DreamUtils.isInDream(omcPlayer); String logo; if (ItemsAdderHook.isEnable()) { logo = FontImageWrapper.replaceFontImages(isInDream ? ":dream_openmc:" : ":openmc:"); @@ -112,7 +112,7 @@ public static void updateTabList(Player player) { ? TranslationManager.translation("feature.displays.tablist.footer.dream") : TranslationManager.translation("feature.displays.tablist.footer.default"); - updateHeaderFooter(player, header, footer); + updateHeaderFooter(omcPlayer, header, footer); } } diff --git a/src/main/java/fr/openmc/core/features/economy/commands/BankCommands.java b/src/main/java/fr/openmc/core/features/economy/commands/BankCommands.java index 881d76b5d..7822ab301 100644 --- a/src/main/java/fr/openmc/core/features/economy/commands/BankCommands.java +++ b/src/main/java/fr/openmc/core/features/economy/commands/BankCommands.java @@ -1,6 +1,6 @@ package fr.openmc.core.features.economy.commands; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.features.city.sub.bank.CityBankManager; import fr.openmc.core.features.city.sub.milestone.rewards.FeaturesRewards; import fr.openmc.core.features.economy.BankManager; diff --git a/src/main/java/fr/openmc/core/features/economy/commands/History.java b/src/main/java/fr/openmc/core/features/economy/commands/History.java index 12685191c..acecab7d0 100644 --- a/src/main/java/fr/openmc/core/features/economy/commands/History.java +++ b/src/main/java/fr/openmc/core/features/economy/commands/History.java @@ -1,6 +1,6 @@ package fr.openmc.core.features.economy.commands; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.commands.autocomplete.OnlinePlayerAutoComplete; import fr.openmc.core.features.economy.menu.TransactionsMenu; import revxrsal.commands.annotation.*; diff --git a/src/main/java/fr/openmc/core/features/economy/commands/Money.java b/src/main/java/fr/openmc/core/features/economy/commands/Money.java index 3093fc569..fb960c12b 100644 --- a/src/main/java/fr/openmc/core/features/economy/commands/Money.java +++ b/src/main/java/fr/openmc/core/features/economy/commands/Money.java @@ -1,6 +1,6 @@ package fr.openmc.core.features.economy.commands; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.commands.autocomplete.OnlinePlayerAutoComplete; import fr.openmc.core.features.economy.EconomyManager; import fr.openmc.core.utils.text.messages.MessageType; diff --git a/src/main/java/fr/openmc/core/features/economy/commands/Pay.java b/src/main/java/fr/openmc/core/features/economy/commands/Pay.java index 4eb77447c..f5a9747eb 100644 --- a/src/main/java/fr/openmc/core/features/economy/commands/Pay.java +++ b/src/main/java/fr/openmc/core/features/economy/commands/Pay.java @@ -1,6 +1,6 @@ package fr.openmc.core.features.economy.commands; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.commands.autocomplete.OnlinePlayerAutoComplete; import fr.openmc.core.features.economy.EconomyManager; import fr.openmc.core.utils.text.messages.TranslationManager; diff --git a/src/main/java/fr/openmc/core/features/friend/commands/FriendCommand.java b/src/main/java/fr/openmc/core/features/friend/commands/FriendCommand.java index 50d806117..5ea7a9758 100644 --- a/src/main/java/fr/openmc/core/features/friend/commands/FriendCommand.java +++ b/src/main/java/fr/openmc/core/features/friend/commands/FriendCommand.java @@ -1,6 +1,7 @@ package fr.openmc.core.features.friend.commands; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.commands.autocomplete.OnlinePlayerAutoComplete; import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityManager; @@ -66,7 +67,7 @@ public void addCommand( player.message().sendInfo( TranslationManager.translation( "feature.friend.add.sent", - Component.text(target.getName()).color(NamedTextColor.YELLOW) + target.getNameWithHead().color(NamedTextColor.YELLOW) ), Prefix.FRIEND, true @@ -89,7 +90,7 @@ public void addCommand( target, TranslationManager.translation( "feature.friend.request.ignored", - Component.text(player.getName()).color(NamedTextColor.YELLOW) + player.getNameWithHead().color(NamedTextColor.YELLOW) ), Prefix.FRIEND, MessageType.INFO, @@ -106,7 +107,7 @@ public void addCommand( target.message().sendInfo( TranslationManager.translation( "feature.friend.request.received", - Component.text(player.getName()).color(NamedTextColor.YELLOW) + player.getNameWithHead().color(NamedTextColor.YELLOW) ).appendNewline() .append(acceptButton).appendSpace() .append(ignoreButton).appendSpace() @@ -127,44 +128,37 @@ public void addCommand( @Subcommand("remove") @Description("Supprimer un ami de votre liste") public void removeCommand( - Player player, - @Named("ami") @SuggestWith(FriendsAutoComplete.class) String targetName + OMCPlayer player, + @Named("ami") @SuggestWith(FriendsAutoComplete.class) OMCOfflinePlayer target ) { try { - OfflinePlayer target = Bukkit.getOfflinePlayer(targetName); - String playerName = target.getName() != null ? target.getName() : "null"; - if (!target.hasPlayedBefore()) { - MessagesManager.sendMessage(player, TranslationManager.translation("feature.friend.player_not_found"), Prefix.OPENMC, MessageType.ERROR, true); + player.message().send(TranslationManager.translation("feature.friend.player_not_found"), Prefix.OPENMC, MessageType.ERROR, true); return; } if (!FriendManager.areFriends(player.getUniqueId(), target.getUniqueId())) { - MessagesManager.sendMessage(player, TranslationManager.translation("feature.friend.remove.not_friend"), Prefix.FRIEND, MessageType.ERROR, true); + player.message().send(TranslationManager.translation("feature.friend.remove.not_friend"), Prefix.FRIEND, MessageType.ERROR, true); return; } if (!FriendManager.removeFriend(player.getUniqueId(), target.getUniqueId())) { - MessagesManager.sendMessage(player, TranslationManager.translation("feature.friend.remove.error"), Prefix.FRIEND, MessageType.ERROR, true); + player.message().send(TranslationManager.translation("feature.friend.remove.error"), Prefix.FRIEND, MessageType.ERROR, true); return; } - Component targetDisplayName = target.getName() != null - ? Component.text(playerName) - : TranslationManager.translation("feature.friend.unknown_player"); - MessagesManager.sendMessage( - player, - TranslationManager.translation( + + player.message().send(TranslationManager.translation( "feature.friend.remove.success", - targetDisplayName.color(NamedTextColor.YELLOW) + target.getNameWithHead().color(NamedTextColor.YELLOW) ), Prefix.FRIEND, MessageType.INFO, - true - ); + true); + if (target instanceof Player targetPlayer && targetPlayer.isOnline()) { MessagesManager.sendMessage( targetPlayer, TranslationManager.translation( "feature.friend.remove.removed_by", - Component.text(player.getName()).color(NamedTextColor.YELLOW) + player.getNameWithHead().color(NamedTextColor.YELLOW) ), Prefix.FRIEND, MessageType.INFO, @@ -172,7 +166,7 @@ public void removeCommand( ); } } catch (Exception e) { - MessagesManager.sendMessage(player, TranslationManager.translation("feature.friend.remove.error"), Prefix.FRIEND, MessageType.ERROR, true); + player.message().send(TranslationManager.translation("feature.friend.remove.error"), Prefix.FRIEND, MessageType.ERROR, true); throw new RuntimeException(e); } } @@ -181,7 +175,7 @@ public void removeCommand( @Description("Afficher la liste de vos amis") @Syntax("[page]") public void listCommand( - Player player, + OMCPlayer player, @Named("page") @Optional Integer page ) { int currentPage = (page != null && page > 0) ? page : 1; @@ -189,7 +183,7 @@ public void listCommand( FriendManager.getFriendsAsync(player.getUniqueId()).thenAccept(friends -> { if (friends.isEmpty()) { - MessagesManager.sendMessage(player, TranslationManager.translation("feature.friend.list.none"), Prefix.FRIEND, MessageType.ERROR, true); + player.message().send(TranslationManager.translation("feature.friend.list.none"), Prefix.FRIEND, MessageType.ERROR, true); return; } @@ -197,9 +191,7 @@ public void listCommand( int totalPages = (int) Math.ceil((double) friendsList.size() / ITEMS_PER_PAGE); if (currentPage > totalPages) { - MessagesManager.sendMessage( - player, - TranslationManager.translation( + player.message().send(TranslationManager.translation( "feature.friend.list.page_invalid", Component.text(currentPage).color(NamedTextColor.RED), Component.text(totalPages).color(NamedTextColor.RED) @@ -220,14 +212,11 @@ public void listCommand( Component.text(totalPages) ) .color(NamedTextColor.GOLD); - player.sendMessage(header); + player.message().send(header); + for (int i = startIndex; i < endIndex; i++) { UUID friendUUID = friendsList.get(i); - OfflinePlayer friend = CacheOfflinePlayer.getOfflinePlayer(friendUUID); - String friendName = friend.getName() != null ? friend.getName() : "null"; - Component friendNameComponent = friend.getName() != null - ? Component.text(friendName) - : TranslationManager.translation("feature.friend.unknown_player"); + OMCOfflinePlayer friend = OMCOfflinePlayer.of(friendUUID); try { Timestamp timestamp = FriendManager.getTimestamp(player.getUniqueId(), friend.getUniqueId()); @@ -246,7 +235,7 @@ public void listCommand( TextComponent friendComponent = Component.text(" " + (i + 1) + ". ") .color(NamedTextColor.GRAY) - .append(friendNameComponent + .append(friend.getNameWithHead() .color(isOnline ? NamedTextColor.GREEN : NamedTextColor.YELLOW) .decoration(TextDecoration.BOLD, isOnline)) .hoverEvent(HoverEvent.showText( @@ -269,7 +258,7 @@ public void listCommand( Component actions = TranslationManager.translation("feature.friend.list.action.remove") .color(NamedTextColor.RED) - .clickEvent(ClickEvent.runCommand("/friends remove " + friendName)) + .clickEvent(ClickEvent.runCommand("/friends remove " + friend.getName())) .hoverEvent(HoverEvent.showText(TranslationManager.translation("feature.friend.list.action.remove_hover").color(NamedTextColor.RED))); player.sendMessage(friendComponent.append(statusIcon).append(dateInfo).appendSpace().append(actions)); @@ -278,7 +267,7 @@ public void listCommand( player.sendMessage( TranslationManager.translation( "feature.friend.list.fetch_error", - Component.text(friendName).color(NamedTextColor.RED) + friend.getNameWithHead().color(NamedTextColor.RED) ).color(NamedTextColor.RED) ); throw new RuntimeException(e); @@ -327,7 +316,7 @@ public void listCommand( player.sendMessage(navigation); } }).exceptionally(ex -> { - MessagesManager.sendMessage(player, TranslationManager.translation("feature.friend.list.error"), Prefix.FRIEND, MessageType.ERROR, true); + player.message().send(TranslationManager.translation("feature.friend.list.error"), Prefix.FRIEND, MessageType.ERROR, true); throw new RuntimeException(ex); }); } @@ -335,11 +324,10 @@ public void listCommand( @Subcommand("accept") @Description("Accepter une demande d'ami") public void acceptCommand( - Player player, - @Named("ami") @SuggestWith(FriendsRequestAutoComplete.class) String targetName + OMCPlayer player, + @Named("ami") @SuggestWith(FriendsRequestAutoComplete.class) OMCOfflinePlayer target ) { try { - OfflinePlayer target = Bukkit.getOfflinePlayer(targetName); if (!target.hasPlayedBefore()) { MessagesManager.sendMessage(player, TranslationManager.translation("feature.friend.player_not_found"), Prefix.OPENMC, MessageType.ERROR, true); return; @@ -348,15 +336,12 @@ public void acceptCommand( MessagesManager.sendMessage(player, TranslationManager.translation("feature.friend.request.not_received"), Prefix.FRIEND, MessageType.ERROR, true); return; } + FriendManager.addFriend(player.getUniqueId(), target.getUniqueId()); - Component targetDisplayName = target.getName() != null - ? Component.text(targetName) - : TranslationManager.translation("feature.friend.unknown_player"); - MessagesManager.sendMessage( - player, + player.message().send( TranslationManager.translation( "feature.friend.request.accepted", - targetDisplayName.color(NamedTextColor.YELLOW) + target.getNameWithHead().color(NamedTextColor.YELLOW) ), Prefix.FRIEND, MessageType.INFO, @@ -367,7 +352,7 @@ public void acceptCommand( targetPlayer, TranslationManager.translation( "feature.friend.request.accepted", - Component.text(player.getName()).color(NamedTextColor.YELLOW) + player.getNameWithHead().color(NamedTextColor.YELLOW) ), Prefix.FRIEND, MessageType.INFO, @@ -375,7 +360,7 @@ public void acceptCommand( ); } } catch (Exception e) { - MessagesManager.sendMessage(player, TranslationManager.translation("feature.friend.request.accept_error"), Prefix.FRIEND, MessageType.ERROR, true); + player.message().send(TranslationManager.translation("feature.friend.request.accept_error"), Prefix.FRIEND, MessageType.ERROR, true); throw new RuntimeException(e); } } @@ -383,28 +368,25 @@ public void acceptCommand( @Subcommand("deny") @Description("Refuser une demande d'ami") public void denyCommand( - Player player, - @Named("demande d'ami") @SuggestWith(FriendsRequestAutoComplete.class) String targetName + OMCPlayer player, + @Named("demande d'ami") @SuggestWith(FriendsRequestAutoComplete.class) OMCOfflinePlayer target ) { try { - OfflinePlayer target = Bukkit.getOfflinePlayer(targetName); if (!target.hasPlayedBefore()) { MessagesManager.sendMessage(player, TranslationManager.translation("feature.friend.player_not_found"), Prefix.OPENMC, MessageType.ERROR, true); return; } + if (!FriendManager.isRequestPending(target.getUniqueId())) { MessagesManager.sendMessage(player, TranslationManager.translation("feature.friend.request.not_received"), Prefix.FRIEND, MessageType.ERROR, true); return; } + FriendManager.removeRequest(FriendManager.getRequest(target.getUniqueId())); - Component targetDisplayName = target.getName() != null - ? Component.text(target.getName()) - : TranslationManager.translation("feature.friend.unknown_player"); - MessagesManager.sendMessage( - player, + player.message().send( TranslationManager.translation( "feature.friend.request.denied", - targetDisplayName.color(NamedTextColor.YELLOW) + target.getNameWithHead().color(NamedTextColor.YELLOW) ), Prefix.FRIEND, MessageType.INFO, @@ -423,7 +405,7 @@ public void denyCommand( ); } } catch (Exception e) { - MessagesManager.sendMessage(player, TranslationManager.translation("feature.friend.request.deny_error"), Prefix.FRIEND, MessageType.ERROR, true); + player.message().send(TranslationManager.translation("feature.friend.request.deny_error"), Prefix.FRIEND, MessageType.ERROR, true); throw new RuntimeException(e); } } diff --git a/src/main/java/fr/openmc/core/features/homes/HomeUpgradeManager.java b/src/main/java/fr/openmc/core/features/homes/HomeUpgradeManager.java index 677c564a1..a4beea459 100644 --- a/src/main/java/fr/openmc/core/features/homes/HomeUpgradeManager.java +++ b/src/main/java/fr/openmc/core/features/homes/HomeUpgradeManager.java @@ -1,6 +1,6 @@ package fr.openmc.core.features.homes; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.OMCPlugin; import fr.openmc.core.OMCRegistry; import fr.openmc.core.features.economy.EconomyManager; diff --git a/src/main/java/fr/openmc/core/features/homes/command/DelHomeCommand.java b/src/main/java/fr/openmc/core/features/homes/command/DelHomeCommand.java index 72ee57b28..c3909bb9a 100644 --- a/src/main/java/fr/openmc/core/features/homes/command/DelHomeCommand.java +++ b/src/main/java/fr/openmc/core/features/homes/command/DelHomeCommand.java @@ -1,7 +1,7 @@ package fr.openmc.core.features.homes.command; -import fr.openmc.api.entity.player.OMCOfflinePlayer; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.features.homes.command.autocomplete.HomeAutoComplete; import fr.openmc.core.features.homes.models.Home; import fr.openmc.core.utils.text.messages.Prefix; diff --git a/src/main/java/fr/openmc/core/features/homes/command/HomeWorldCommand.java b/src/main/java/fr/openmc/core/features/homes/command/HomeWorldCommand.java index 046af45ff..2e4858d70 100644 --- a/src/main/java/fr/openmc/core/features/homes/command/HomeWorldCommand.java +++ b/src/main/java/fr/openmc/core/features/homes/command/HomeWorldCommand.java @@ -1,6 +1,6 @@ package fr.openmc.core.features.homes.command; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.features.homes.command.autocomplete.HomeWorldAddAutoComplete; import fr.openmc.core.features.homes.command.autocomplete.HomeWorldRemoveAutoComplete; import fr.openmc.core.features.homes.world.DisabledWorldHome; diff --git a/src/main/java/fr/openmc/core/features/homes/command/RelocateHomeCommand.java b/src/main/java/fr/openmc/core/features/homes/command/RelocateHomeCommand.java index e5fabb37e..84e37013b 100644 --- a/src/main/java/fr/openmc/core/features/homes/command/RelocateHomeCommand.java +++ b/src/main/java/fr/openmc/core/features/homes/command/RelocateHomeCommand.java @@ -1,6 +1,6 @@ package fr.openmc.core.features.homes.command; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.features.homes.command.autocomplete.HomeAutoComplete; import fr.openmc.core.features.homes.models.Home; import fr.openmc.core.features.homes.world.DisabledWorldHome; diff --git a/src/main/java/fr/openmc/core/features/homes/command/RenameHomeCommand.java b/src/main/java/fr/openmc/core/features/homes/command/RenameHomeCommand.java index 9266c8347..896279b33 100644 --- a/src/main/java/fr/openmc/core/features/homes/command/RenameHomeCommand.java +++ b/src/main/java/fr/openmc/core/features/homes/command/RenameHomeCommand.java @@ -1,7 +1,7 @@ package fr.openmc.core.features.homes.command; -import fr.openmc.api.entity.player.OMCOfflinePlayer; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.features.homes.command.autocomplete.HomeAutoComplete; import fr.openmc.core.features.homes.models.Home; import fr.openmc.core.features.homes.utils.HomeUtil; diff --git a/src/main/java/fr/openmc/core/features/homes/command/SetHomeCommand.java b/src/main/java/fr/openmc/core/features/homes/command/SetHomeCommand.java index 28d29d3d6..f9b3927c9 100644 --- a/src/main/java/fr/openmc/core/features/homes/command/SetHomeCommand.java +++ b/src/main/java/fr/openmc/core/features/homes/command/SetHomeCommand.java @@ -1,7 +1,7 @@ package fr.openmc.core.features.homes.command; -import fr.openmc.api.entity.player.OMCOfflinePlayer; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.OMCPlugin; import fr.openmc.core.features.homes.command.autocomplete.HomeAutoComplete; import fr.openmc.core.features.homes.events.HomeCreateEvent; diff --git a/src/main/java/fr/openmc/core/features/homes/command/TpHomeCommand.java b/src/main/java/fr/openmc/core/features/homes/command/TpHomeCommand.java index b4751ccd5..3dbda2062 100644 --- a/src/main/java/fr/openmc/core/features/homes/command/TpHomeCommand.java +++ b/src/main/java/fr/openmc/core/features/homes/command/TpHomeCommand.java @@ -1,7 +1,7 @@ package fr.openmc.core.features.homes.command; -import fr.openmc.api.entity.player.OMCOfflinePlayer; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.api.menulib.Menu; import fr.openmc.core.OMCPlugin; import fr.openmc.core.features.homes.command.autocomplete.HomeAutoComplete; diff --git a/src/main/java/fr/openmc/core/features/homes/command/autocomplete/HomeAutoComplete.java b/src/main/java/fr/openmc/core/features/homes/command/autocomplete/HomeAutoComplete.java index 6b9eaaf47..30b73a6c0 100644 --- a/src/main/java/fr/openmc/core/features/homes/command/autocomplete/HomeAutoComplete.java +++ b/src/main/java/fr/openmc/core/features/homes/command/autocomplete/HomeAutoComplete.java @@ -1,6 +1,6 @@ package fr.openmc.core.features.homes.command.autocomplete; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.features.homes.models.Home; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; diff --git a/src/main/java/fr/openmc/core/features/homes/icons/CachedIconItem.java b/src/main/java/fr/openmc/core/features/homes/icons/CachedIconItem.java index 5deb3925d..03ec4c9f3 100644 --- a/src/main/java/fr/openmc/core/features/homes/icons/CachedIconItem.java +++ b/src/main/java/fr/openmc/core/features/homes/icons/CachedIconItem.java @@ -1,6 +1,6 @@ package fr.openmc.core.features.homes.icons; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.api.menulib.utils.ItemMenuBuilder; import fr.openmc.api.menulib.utils.ItemUtils; import fr.openmc.core.OMCPlugin; diff --git a/src/main/java/fr/openmc/core/features/homes/menu/HomeConfigMenu.java b/src/main/java/fr/openmc/core/features/homes/menu/HomeConfigMenu.java index b901e24c2..9b644c574 100644 --- a/src/main/java/fr/openmc/core/features/homes/menu/HomeConfigMenu.java +++ b/src/main/java/fr/openmc/core/features/homes/menu/HomeConfigMenu.java @@ -1,7 +1,7 @@ package fr.openmc.core.features.homes.menu; import dev.lone.itemsadder.api.FontImages.FontImageWrapper; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.api.input.dialog.DialogInput; import fr.openmc.api.menulib.Menu; import fr.openmc.api.menulib.template.ItemMenuTemplate; @@ -16,7 +16,6 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; -import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/fr/openmc/core/features/homes/menu/HomeDeleteConfirmMenu.java b/src/main/java/fr/openmc/core/features/homes/menu/HomeDeleteConfirmMenu.java index 86c38cfb4..528ca1a40 100644 --- a/src/main/java/fr/openmc/core/features/homes/menu/HomeDeleteConfirmMenu.java +++ b/src/main/java/fr/openmc/core/features/homes/menu/HomeDeleteConfirmMenu.java @@ -1,7 +1,7 @@ package fr.openmc.core.features.homes.menu; import dev.lone.itemsadder.api.FontImages.FontImageWrapper; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.api.menulib.Menu; import fr.openmc.api.menulib.utils.InventorySize; import fr.openmc.api.menulib.utils.ItemMenuBuilder; diff --git a/src/main/java/fr/openmc/core/features/homes/menu/HomeMenu.java b/src/main/java/fr/openmc/core/features/homes/menu/HomeMenu.java index 9b7a7d809..989c24eae 100644 --- a/src/main/java/fr/openmc/core/features/homes/menu/HomeMenu.java +++ b/src/main/java/fr/openmc/core/features/homes/menu/HomeMenu.java @@ -1,8 +1,8 @@ package fr.openmc.core.features.homes.menu; import dev.lone.itemsadder.api.FontImages.FontImageWrapper; -import fr.openmc.api.entity.player.OMCOfflinePlayer; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.api.menulib.PaginatedMenu; import fr.openmc.api.menulib.template.ItemMenuTemplate; import fr.openmc.api.menulib.utils.InventorySize; 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 b7c1526b4..9105f6ed1 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 @@ -2,7 +2,7 @@ import dev.lone.itemsadder.api.CustomStack; import dev.lone.itemsadder.api.FontImages.FontImageWrapper; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.api.packetmenulib.PacketMenuLib; import fr.openmc.api.packetmenulib.events.InventoryClickEvent; import fr.openmc.api.packetmenulib.events.InventoryCloseEvent; 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 0ce9f04b4..e9a6c8a63 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 @@ -1,7 +1,7 @@ package fr.openmc.core.features.mainmenu.menus; import dev.lone.itemsadder.api.FontImages.FontImageWrapper; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.api.packetmenulib.PacketMenuLib; import fr.openmc.api.packetmenulib.events.InventoryClickEvent; import fr.openmc.api.packetmenulib.events.InventoryCloseEvent; diff --git a/src/main/java/fr/openmc/core/features/privatemessage/PrivateMessageManager.java b/src/main/java/fr/openmc/core/features/privatemessage/PrivateMessageManager.java index 27f5f0e19..00d473076 100644 --- a/src/main/java/fr/openmc/core/features/privatemessage/PrivateMessageManager.java +++ b/src/main/java/fr/openmc/core/features/privatemessage/PrivateMessageManager.java @@ -1,6 +1,6 @@ package fr.openmc.core.features.privatemessage; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.bootstrap.features.Feature; import fr.openmc.core.bootstrap.features.annotations.Credit; import fr.openmc.core.bootstrap.features.types.HasCommands; diff --git a/src/main/java/fr/openmc/core/features/privatemessage/command/PrivateMessageCommand.java b/src/main/java/fr/openmc/core/features/privatemessage/command/PrivateMessageCommand.java index e1652c52e..15da606ad 100644 --- a/src/main/java/fr/openmc/core/features/privatemessage/command/PrivateMessageCommand.java +++ b/src/main/java/fr/openmc/core/features/privatemessage/command/PrivateMessageCommand.java @@ -1,6 +1,6 @@ package fr.openmc.core.features.privatemessage.command; -import fr.openmc.api.entity.player.OMCPlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.commands.autocomplete.OnlinePlayerAutoComplete; import fr.openmc.core.features.privatemessage.PrivateMessageManager; import revxrsal.commands.annotation.Command; diff --git a/src/main/java/fr/openmc/core/listeners/JoinQuitMessageListener.java b/src/main/java/fr/openmc/core/listeners/JoinQuitMessageListener.java index e47919b36..433cb263a 100644 --- a/src/main/java/fr/openmc/core/listeners/JoinQuitMessageListener.java +++ b/src/main/java/fr/openmc/core/listeners/JoinQuitMessageListener.java @@ -1,5 +1,6 @@ package fr.openmc.core.listeners; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.OMCPlugin; import fr.openmc.core.bootstrap.integration.OMCLogger; import fr.openmc.core.commands.utils.SpawnManager; @@ -18,6 +19,7 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.object.ObjectContents; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -31,28 +33,27 @@ public class JoinQuitMessageListener implements Listener { private final double balanceOnJoin; - public static final String JOIN_MESSAGE = "§8[§a§l+§8] §r%s%s"; - public static final String QUIT_MESSAGE = "§8[§c§l-§8] §r%s%s"; - public JoinQuitMessageListener() { this.balanceOnJoin = OMCPlugin.getInstance().getConfig().getDouble("money-on-first-join", 500D); } @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { - final Player player = event.getPlayer(); + final OMCPlayer player = OMCPlayer.of(event.getPlayer()); - MessagesManager.sendMessage(player, TranslationManager.translation("core.player.join.welcome"), Prefix.OPENMC, MessageType.INFO, false); + player.message().send(TranslationManager.translation("core.player.join.welcome"), Prefix.OPENMC, MessageType.INFO, false); TabList.updateTabList(player); FriendManager.getFriendsAsync(player.getUniqueId()).thenAccept(friendsUUIDS -> { for (UUID friendUUID : friendsUUIDS) { - final Player friend = player.getServer().getPlayer(friendUUID); + final Player friend = Bukkit.getPlayer(friendUUID); if (friend != null && friend.isOnline() && !friend.hasMetadata(OMCPlugin.VANISH_META_KEY)) { - MessagesManager.sendMessage(friend, TranslationManager.translation( + player.message().send(TranslationManager.translation( "core.player.join.friend_online", - Component.text(LuckPermsHook.getFormattedPAPIPrefix(player) + player.getName()).color(NamedTextColor.GREEN) + Component.object(ObjectContents.playerHead(player.getUniqueId())).color(NamedTextColor.WHITE) + .appendSpace() + .append(Component.text(LuckPermsHook.getFormattedPAPIPrefix(player) + player.getName()).color(NamedTextColor.GREEN)) ), Prefix.FRIEND, MessageType.NONE, true); } } @@ -69,7 +70,7 @@ public void onPlayerJoin(PlayerJoinEvent event) { int pendingRewardsNumber = quest.getPendingRewardTiers(player.getUniqueId()).size(); Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> { - MessagesManager.sendMessage(player, + player.message().send( TranslationManager.translation("core.player.join.quest_reward", Component.text(pendingRewardsNumber)) .append(Component.text(" ")) .append(TranslationManager.translation("core.player.join.quest_reward_click")) @@ -84,7 +85,12 @@ public void onPlayerJoin(PlayerJoinEvent event) { }); if (!player.hasMetadata(OMCPlugin.VANISH_META_KEY)) - event.joinMessage(Component.text(JOIN_MESSAGE.formatted(LuckPermsHook.getFormattedPAPIPrefix(player), player.getName()))); + event.joinMessage(Component.text("§8[§a§l+§8] §r") + .append(Component.object(ObjectContents.playerHead(player.getUniqueId())).color(NamedTextColor.WHITE)) + .appendSpace() + .append(Component.text(LuckPermsHook.getFormattedPAPIPrefix(player))) + .append(Component.text(player.getName())) + ); // Adjust player's spawn location if (!player.hasPlayedBefore()) { @@ -107,13 +113,13 @@ public void run() { @EventHandler public void onPlayerQuit(PlayerQuitEvent event) { - final Player player = event.getPlayer(); + final OMCPlayer player = OMCPlayer.of(event.getPlayer()); Bukkit.getScheduler().runTaskAsynchronously(OMCPlugin.getInstance(), () -> QuestsManager.saveQuests(player.getUniqueId())); FriendManager.getFriendsAsync(player.getUniqueId()).thenAccept(friendsUUIDS -> { for (UUID friendUUID : friendsUUIDS) { - final Player friend = player.getServer().getPlayer(friendUUID); + final Player friend = Bukkit.getPlayer(friendUUID); if (friend != null && friend.isOnline() && !friend.hasMetadata(OMCPlugin.VANISH_META_KEY)) { MessagesManager.sendMessage(friend, TranslationManager.translation( "core.player.quit.friend_offline", @@ -144,7 +150,11 @@ public void onPlayerQuit(PlayerQuitEvent event) { } if (!player.hasMetadata(OMCPlugin.VANISH_META_KEY)) - event.quitMessage(Component.text(QUIT_MESSAGE.formatted(LuckPermsHook.getFormattedPAPIPrefix(player), player.getName()))); + event.quitMessage(Component.text("§8[§c§l-§8] §r") + .append(Component.object(ObjectContents.playerHead(player.getUniqueId())).color(NamedTextColor.WHITE)) + .appendSpace() + .append(Component.text(LuckPermsHook.getFormattedPAPIPrefix(player))) + .append(Component.text(player.getName())) + ); } - } diff --git a/src/main/java/fr/openmc/core/listeners/OMCPlayerCacheListener.java b/src/main/java/fr/openmc/core/listeners/OMCPlayerCacheListener.java index 077798c60..147e506e3 100644 --- a/src/main/java/fr/openmc/core/listeners/OMCPlayerCacheListener.java +++ b/src/main/java/fr/openmc/core/listeners/OMCPlayerCacheListener.java @@ -1,6 +1,6 @@ package fr.openmc.core.listeners; -import fr.openmc.api.entity.player.OMCPlayerImpl; +import fr.openmc.api.omcplayer.OMCPlayerImpl; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerQuitEvent; diff --git a/src/main/java/fr/openmc/core/utils/cache/CacheOfflinePlayer.java b/src/main/java/fr/openmc/core/utils/cache/CacheOfflinePlayer.java index e113dce88..c633e8312 100644 --- a/src/main/java/fr/openmc/core/utils/cache/CacheOfflinePlayer.java +++ b/src/main/java/fr/openmc/core/utils/cache/CacheOfflinePlayer.java @@ -8,12 +8,21 @@ import java.util.UUID; public class CacheOfflinePlayer { - private static final Object2ObjectMap offlinePlayerCache = new Object2ObjectOpenHashMap<>(); + private static final Object2ObjectMap offlinePlayerByUUIDCache = new Object2ObjectOpenHashMap<>(); + private static final Object2ObjectMap offlinePlayerByNameCache = new Object2ObjectOpenHashMap<>(); + + /** + * Donne l'OfflinePlayer s'il est déjà mis en cache, sinon il exécute la méthode basique + * Consomme plus que d'habitude, a utiliser avec modération + */ + public static OfflinePlayer getOfflinePlayer(String playerName) { + return offlinePlayerByNameCache.computeIfAbsent(playerName, key -> Bukkit.getOfflinePlayer(playerName)); + } /** * Donne l'OfflinePlayer s'il est déjà mis en cache, sinon il exécute la méthode basique */ public static OfflinePlayer getOfflinePlayer(UUID uuid) { - return offlinePlayerCache.computeIfAbsent(uuid, key -> Bukkit.getOfflinePlayer((UUID) key)); + return offlinePlayerByUUIDCache.computeIfAbsent(uuid, key -> Bukkit.getOfflinePlayer((UUID) key)); } } From b5f50526ffb250d0a762f4296ad23f3d2b043b04 Mon Sep 17 00:00:00 2001 From: iambibi <89582596+iambibi@users.noreply.github.com> Date: Wed, 30 Sep 2026 22:16:56 +0200 Subject: [PATCH 05/10] apply getNameWithHead in random spot --- .../api/omcplayer/OMCOfflinePlayerImpl.java | 7 +- .../city/commands/CityInviteCommands.java | 8 +-- .../city/commands/CityPermsCommands.java | 65 ++++++++++--------- .../city/conditions/CityChestConditions.java | 4 +- .../features/city/menu/CityPermsMenu.java | 10 +-- .../core/features/city/menu/CityTopMenu.java | 6 +- .../features/city/menu/list/CityListMenu.java | 6 +- .../city/menu/main/buttons/ChestButton.java | 3 +- .../city/menu/main/buttons/ManageButton.java | 8 ++- .../city/menu/main/buttons/MayorButton.java | 2 +- .../features/city/sub/mayor/models/Mayor.java | 5 ++ .../mecanism/tradernpc/GlaciteTradeMenu.java | 3 +- .../leaderboards/MoneyLeaderBoard.java | 4 +- .../leaderboards/PlayTimeLeaderBoard.java | 6 +- .../leaderboards/PumpkinCountLeaderBoard.java | 4 +- .../translations/default/dream.properties | 2 +- .../translations/en_GB/dream.properties | 2 +- .../translations/en_US/dream.properties | 2 +- 18 files changed, 87 insertions(+), 60 deletions(-) diff --git a/src/main/java/fr/openmc/api/omcplayer/OMCOfflinePlayerImpl.java b/src/main/java/fr/openmc/api/omcplayer/OMCOfflinePlayerImpl.java index 2f34393b8..9bdbbf332 100644 --- a/src/main/java/fr/openmc/api/omcplayer/OMCOfflinePlayerImpl.java +++ b/src/main/java/fr/openmc/api/omcplayer/OMCOfflinePlayerImpl.java @@ -31,9 +31,10 @@ public Component getNameWithHead() { if (playerName == null) playerName = CachePlayerName.getName(player.getUniqueId()); - return Component.object(ObjectContents.playerHead(player.getUniqueId())).color(NamedTextColor.WHITE) - .appendSpace() - .append(Component.text(playerName)); + return Component.textOfChildren( + Component.object(ObjectContents.playerHead(player.getUniqueId())).color(NamedTextColor.WHITE), + Component.space() + ).append(Component.text(playerName)); } @Override diff --git a/src/main/java/fr/openmc/core/features/city/commands/CityInviteCommands.java b/src/main/java/fr/openmc/core/features/city/commands/CityInviteCommands.java index fb99c0c10..a084b4301 100644 --- a/src/main/java/fr/openmc/core/features/city/commands/CityInviteCommands.java +++ b/src/main/java/fr/openmc/core/features/city/commands/CityInviteCommands.java @@ -45,13 +45,13 @@ public static void invite( playerInvitations.add(sender); } sender.message().sendSuccess( - TranslationManager.translation("feature.city.invite.commands.invite.success", target.displayName()), + TranslationManager.translation("feature.city.invite.commands.invite.success", target.getNameWithHead()), Prefix.CITY ); target.message().sendInfo( TranslationManager.translation( "feature.city.invite.commands.invite.received", - sender.displayName(), + sender.getNameWithHead(), Component.text(city.getName()) ) .append(Component.newline()) @@ -89,7 +89,7 @@ public static void acceptInvitation( player.message().sendError( TranslationManager.translation( "feature.city.invite.commands.accept.not_invited", - inviter.displayName() + inviter.getNameWithHead() ), Prefix.CITY ); @@ -110,7 +110,7 @@ public static void acceptInvitation( ); if (inviter.isOnline()) { inviter.message().sendSuccess( - TranslationManager.translation("feature.city.invite.commands.accept.inviter_notified", player.displayName()), + TranslationManager.translation("feature.city.invite.commands.accept.inviter_notified", player.getNameWithHead()), Prefix.CITY, true ); diff --git a/src/main/java/fr/openmc/core/features/city/commands/CityPermsCommands.java b/src/main/java/fr/openmc/core/features/city/commands/CityPermsCommands.java index feb885ea7..62a84cb7e 100644 --- a/src/main/java/fr/openmc/core/features/city/commands/CityPermsCommands.java +++ b/src/main/java/fr/openmc/core/features/city/commands/CityPermsCommands.java @@ -1,5 +1,7 @@ package fr.openmc.core.features.city.commands; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityManager; import fr.openmc.core.features.city.CityPermission; @@ -23,34 +25,37 @@ public class CityPermsCommands { @Subcommand("switch") @CommandPermission("omc.commands.city.perm.switch") @Description("Inverse la permission d'un joueur") - public static void swap(Player sender, @SuggestWith(CityMembersAutoComplete.class) OfflinePlayer player, @SuggestWith(CityPermissionsAutoComplete.class) CityPermission permission) { + public static void swap( + OMCPlayer sender, + @SuggestWith(CityMembersAutoComplete.class) OMCOfflinePlayer player, + @SuggestWith(CityPermissionsAutoComplete.class) CityPermission permission) { if (!CityPermsConditions.canSeePerms(sender, player.getUniqueId())) return; if (!CityPermsConditions.canModifyPerms(sender, permission)) return; City city = CityManager.getPlayerCity(sender.getUniqueId()); if (city == null) { - MessagesManager.sendMessage(sender, TranslationManager.translation("messages.city.player_no_in_city"), Prefix.CITY, MessageType.ERROR, false); + sender.message().send(TranslationManager.translation("messages.city.player_no_in_city"), Prefix.CITY, MessageType.ERROR, false); return; } if (!city.getMembers().contains(player.getUniqueId())) { - MessagesManager.sendMessage(sender, TranslationManager.translation("messages.city.target_in_other_city"), Prefix.CITY, MessageType.ERROR, false); + sender.message().send(TranslationManager.translation("messages.city.target_in_other_city"), Prefix.CITY, MessageType.ERROR, false); return; } if (city.hasPermission(player.getUniqueId(), permission)) { city.removePermission(player.getUniqueId(), permission); - MessagesManager.sendMessage(sender, TranslationManager.translation( + sender.message().send(TranslationManager.translation( "feature.city.perms.commands.switch.removed", - CachePlayerName.name(player.getUniqueId()), + player.getNameWithHead(), Component.text(permission.toString()) ), Prefix.CITY, MessageType.SUCCESS, false); } else { city.addPermission(player.getUniqueId(), permission); - MessagesManager.sendMessage(sender, TranslationManager.translation( + sender.message().send(TranslationManager.translation( "feature.city.perms.commands.switch.added", - CachePlayerName.name(player.getUniqueId()), + player.getNameWithHead(), permission.getDisplayName() ), Prefix.CITY, MessageType.SUCCESS, false); } @@ -60,8 +65,8 @@ public static void swap(Player sender, @SuggestWith(CityMembersAutoComplete.clas @CommandPermission("omc.commands.city.perm.add") @Description("Ajouter des permissions à un membre") void add( - Player sender, - @Named("membre") @SuggestWith(CityMembersAutoComplete.class) OfflinePlayer player, + OMCPlayer sender, + @Named("membre") @SuggestWith(CityMembersAutoComplete.class) OMCOfflinePlayer player, @Named("permission") @SuggestWith(CityPermissionsAutoComplete.class) CityPermission permission ) { if (!CityPermsConditions.canSeePerms(sender, player.getUniqueId())) return; @@ -70,27 +75,27 @@ void add( City city = CityManager.getPlayerCity(sender.getUniqueId()); if (city == null) { - MessagesManager.sendMessage(sender, TranslationManager.translation("messages.city.player_no_in_city"), Prefix.CITY, MessageType.ERROR, false); + sender.message().send(TranslationManager.translation("messages.city.player_no_in_city"), Prefix.CITY, MessageType.ERROR, false); return; } if (!city.getMembers().contains(player.getUniqueId())) { - MessagesManager.sendMessage(sender, TranslationManager.translation("messages.city.target_in_other_city"), Prefix.CITY, MessageType.ERROR, false); + sender.message().send(TranslationManager.translation("messages.city.target_in_other_city"), Prefix.CITY, MessageType.ERROR, false); return; } if (city.hasPermission(player.getUniqueId(), permission)) { - MessagesManager.sendMessage(sender, TranslationManager.translation( + sender.message().send(TranslationManager.translation( "feature.city.perms.commands.add.already_has", - CachePlayerName.name(player.getUniqueId()) + player.getNameWithHead() ), Prefix.CITY, MessageType.ERROR, false); return; } city.addPermission(player.getUniqueId(), permission); - MessagesManager.sendMessage(sender, TranslationManager.translation( + sender.message().send(TranslationManager.translation( "feature.city.perms.commands.modified", - CachePlayerName.name(player.getUniqueId()) + player.getNameWithHead() ), Prefix.CITY, MessageType.SUCCESS, false); } @@ -98,8 +103,8 @@ void add( @CommandPermission("omc.commands.city.perm.remove") @Description("Retirer des permissions à un membre") void remove( - Player sender, - @Named("membre") @SuggestWith(CityMembersAutoComplete.class) OfflinePlayer player, + OMCPlayer sender, + @Named("membre") @SuggestWith(CityMembersAutoComplete.class) OMCOfflinePlayer player, @Named("permission") @SuggestWith(CityPermissionsAutoComplete.class) CityPermission permission ) { if (!CityPermsConditions.canSeePerms(sender, player.getUniqueId())) return; @@ -108,27 +113,27 @@ void remove( City city = CityManager.getPlayerCity(sender.getUniqueId()); if (city == null) { - MessagesManager.sendMessage(sender, TranslationManager.translation("messages.city.player_no_in_city"), Prefix.CITY, MessageType.ERROR, false); + sender.message().send(TranslationManager.translation("messages.city.player_no_in_city"), Prefix.CITY, MessageType.ERROR, false); return; } if (!city.getMembers().contains(player.getUniqueId())) { - MessagesManager.sendMessage(sender, TranslationManager.translation("messages.city.target_in_other_city"), Prefix.CITY, MessageType.ERROR, false); + sender.message().send(TranslationManager.translation("messages.city.target_in_other_city"), Prefix.CITY, MessageType.ERROR, false); return; } if (!city.hasPermission(player.getUniqueId(), permission)) { - MessagesManager.sendMessage(sender, TranslationManager.translation( + sender.message().send(TranslationManager.translation( "feature.city.perms.commands.remove.does_not_have", - CachePlayerName.name(player.getUniqueId()) + player.getNameWithHead() ), Prefix.CITY, MessageType.ERROR, false); return; } city.removePermission(player.getUniqueId(), permission); - MessagesManager.sendMessage(sender, TranslationManager.translation( + sender.message().send(TranslationManager.translation( "feature.city.perms.commands.modified", - CachePlayerName.name(player.getUniqueId()) + sender.getNameWithHead() ), Prefix.CITY, MessageType.SUCCESS, false); } @@ -136,7 +141,7 @@ void remove( @Subcommand("get") @CommandPermission("omc.commands.city.perm.get") @Description("Obtenir les permissions d'un membre") - void get(Player sender, @SuggestWith(CityMembersAutoComplete.class) OfflinePlayer player) { + void get(OMCPlayer sender, @SuggestWith(CityMembersAutoComplete.class) OMCOfflinePlayer player) { if (!CityPermsConditions.canSeePerms(sender, player.getUniqueId())) return; new CityPermsMenu(sender, player.getUniqueId(), false).open(); } @@ -144,19 +149,19 @@ void get(Player sender, @SuggestWith(CityMembersAutoComplete.class) OfflinePlaye @Subcommand("removeall") @CommandPermission("omc.commands.city.perm.removeall") @Description("Retirer toutes les permissions d'un membre") - public static void removeAll(Player sender, @SuggestWith(CityMembersAutoComplete.class) OfflinePlayer player) { + public static void removeAll(OMCPlayer sender, @SuggestWith(CityMembersAutoComplete.class) OMCOfflinePlayer player) { if (!CityPermsConditions.canSeePerms(sender, player.getUniqueId())) return; if (!CityPermsConditions.canModifyPerms(sender, null)) return; City city = CityManager.getPlayerCity(sender.getUniqueId()); if (city == null) { - MessagesManager.sendMessage(sender, TranslationManager.translation("messages.city.player_no_in_city"), Prefix.CITY, MessageType.ERROR, false); + sender.message().send(TranslationManager.translation("messages.city.player_no_in_city"), Prefix.CITY, MessageType.ERROR, false); return; } if (!city.getMembers().contains(player.getUniqueId())) { - MessagesManager.sendMessage(sender, TranslationManager.translation("messages.city.target_in_other_city"), Prefix.CITY, MessageType.ERROR, false); + sender.message().send(TranslationManager.translation("messages.city.target_in_other_city"), Prefix.CITY, MessageType.ERROR, false); return; } @@ -169,17 +174,17 @@ public static void removeAll(Player sender, @SuggestWith(CityMembersAutoComplete @Subcommand("addall") @CommandPermission("omc.commands.city.perm.addall") @Description("Ajouter toutes les permissions à un membre") - public static void addAll(Player sender, @SuggestWith(CityMembersAutoComplete.class) OfflinePlayer player) { + public static void addAll(OMCPlayer sender, @SuggestWith(CityMembersAutoComplete.class) OMCOfflinePlayer player) { if (!CityPermsConditions.canSeePerms(sender, player.getUniqueId())) return; if (!CityPermsConditions.canModifyPerms(sender, null)) return; City city = CityManager.getPlayerCity(sender.getUniqueId()); if (city == null) { - MessagesManager.sendMessage(sender, TranslationManager.translation("messages.city.player_no_in_city"), Prefix.CITY, MessageType.ERROR, false); + sender.message().send(TranslationManager.translation("messages.city.player_no_in_city"), Prefix.CITY, MessageType.ERROR, false); return; } if (!city.getMembers().contains(player.getUniqueId())) { - MessagesManager.sendMessage(sender, TranslationManager.translation("messages.city.target_in_other_city"), Prefix.CITY, MessageType.ERROR, false); + sender.message().send(TranslationManager.translation("messages.city.target_in_other_city"), Prefix.CITY, MessageType.ERROR, false); return; } diff --git a/src/main/java/fr/openmc/core/features/city/conditions/CityChestConditions.java b/src/main/java/fr/openmc/core/features/city/conditions/CityChestConditions.java index 30f1a9e8d..b14cd2a60 100644 --- a/src/main/java/fr/openmc/core/features/city/conditions/CityChestConditions.java +++ b/src/main/java/fr/openmc/core/features/city/conditions/CityChestConditions.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.city.conditions; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; import fr.openmc.core.OMCRegistry; import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityPermission; @@ -52,9 +53,10 @@ public static boolean canCityChestOpen(City city, Player player) { } if (city.getChestWatcher() != null) { + OMCOfflinePlayer chestWatcher = OMCOfflinePlayer.of(city.getChestWatcher()); MessagesManager.sendMessage(player, TranslationManager.translation( "feature.city.conditions.chest.open.already_opened_by", - Component.text(Bukkit.getPlayer(city.getChestWatcher()).getName()) + chestWatcher.getNameWithHead() ), Prefix.CITY, MessageType.ERROR, false); return false; } diff --git a/src/main/java/fr/openmc/core/features/city/menu/CityPermsMenu.java b/src/main/java/fr/openmc/core/features/city/menu/CityPermsMenu.java index b047182aa..abeef23c9 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/CityPermsMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/CityPermsMenu.java @@ -5,6 +5,8 @@ import fr.openmc.api.menulib.utils.ItemMenuBuilder; import fr.openmc.api.menulib.utils.ItemUtils; import fr.openmc.api.menulib.utils.StaticSlots; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.OMCRegistry; import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityManager; @@ -53,7 +55,7 @@ public CityPermsMenu(Player owner, UUID memberUUID, boolean edit) { @Override public List getItems() { List items = new ArrayList<>(); - Player player = getOwner(); + OMCPlayer player = getOwner(); Set memberPerms = city.getPermissions(memberUUID); for (CityPermission permission : CityPermission.values()) { @@ -89,7 +91,7 @@ public List getItems() { if (!edit) MessagesManager.sendMessage(getOwner(), TranslationManager.translation("messages.city.player_no_permission_access"), Prefix.CITY, MessageType.ERROR, true); else { - CityPermsCommands.swap(player, CacheOfflinePlayer.getOfflinePlayer(memberUUID), permission); + CityPermsCommands.swap(player, OMCOfflinePlayer.of(memberUUID), permission); new CityPermsMenu(player, memberUUID, true).open(); } }).hide(ItemUtils.getDataComponentType()); @@ -121,8 +123,8 @@ public Map getButtons() { itemMeta.displayName(TranslationManager.translation("feature.city.menus.perms.bulk.title")); itemMeta.lore(TranslationManager.translationLore("feature.city.menus.perms.bulk.lore")); }).setOnClick(inventoryClickEvent -> { - if (inventoryClickEvent.isLeftClick()) CityPermsCommands.removeAll(getOwner(), CacheOfflinePlayer.getOfflinePlayer(memberUUID)); - else if (inventoryClickEvent.isRightClick()) CityPermsCommands.addAll(getOwner(), CacheOfflinePlayer.getOfflinePlayer(memberUUID)); + if (inventoryClickEvent.isLeftClick()) CityPermsCommands.removeAll(getOwner(), OMCOfflinePlayer.of(memberUUID)); + else if (inventoryClickEvent.isRightClick()) CityPermsCommands.addAll(getOwner(), OMCOfflinePlayer.of(memberUUID)); new CityPermsMenu(getOwner(), memberUUID, true).open(); })); diff --git a/src/main/java/fr/openmc/core/features/city/menu/CityTopMenu.java b/src/main/java/fr/openmc/core/features/city/menu/CityTopMenu.java index 8e9a6c2c1..a2f3c627a 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/CityTopMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/CityTopMenu.java @@ -3,6 +3,7 @@ import fr.openmc.api.menulib.PaginatedMenu; import fr.openmc.api.menulib.utils.InventorySize; import fr.openmc.api.menulib.utils.ItemMenuBuilder; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityManager; import fr.openmc.core.features.city.CityPermission; @@ -81,11 +82,12 @@ public List getItems() { cities.forEach(city -> { UUID ownerUUID = city.getPlayerWithPermission(CityPermission.OWNER); + OMCOfflinePlayer owner = OMCOfflinePlayer.of(ownerUUID); if (ownerUUID != null) { List cityLore = new ArrayList<>(); - Component ownerComponent = CachePlayerName.name(ownerUUID).color(NamedTextColor.GRAY); + Component ownerComponent = owner.getNameWithHead().color(NamedTextColor.GRAY); Component levelComponent = Component.text(city.getLevel()).color(NamedTextColor.DARK_AQUA); Component membersCurrent = Component.text(city.getMembers().size()).color(NamedTextColor.GREEN); Component membersLimit = Component.text(MemberLimitRewards.getMemberLimit(city.getLevel())).color(NamedTextColor.GREEN); @@ -97,7 +99,7 @@ public List getItems() { if (MayorManager.phaseMayor == 2 && FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.MAYOR)) { Component mayorName = city.getMayor() == null ? TranslationManager.translation("messages.menus.none") - : city.getMayor().getName(); + : city.getMayor().getOMCOfflinePlayer().getNameWithHead(); NamedTextColor mayorColor = (city.getMayor() == null || city.getMayor().getMayorColor() == null) ? NamedTextColor.WHITE : city.getMayor().getMayorColor(); diff --git a/src/main/java/fr/openmc/core/features/city/menu/list/CityListMenu.java b/src/main/java/fr/openmc/core/features/city/menu/list/CityListMenu.java index d73b43143..2642a0201 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/list/CityListMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/list/CityListMenu.java @@ -5,6 +5,7 @@ import fr.openmc.api.menulib.utils.ItemMenuBuilder; import fr.openmc.api.menulib.utils.ItemUtils; import fr.openmc.api.menulib.utils.StaticSlots; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; import fr.openmc.core.OMCRegistry; import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityManager; @@ -76,12 +77,13 @@ public List getItems() { List items = new ArrayList<>(); for (City city : cities) { UUID ownerUUID = city.getPlayerWithPermission(CityPermission.OWNER); + OMCOfflinePlayer owner = OMCOfflinePlayer.of(ownerUUID); if (ownerUUID == null) continue; List cityLore = new ArrayList<>(); - Component ownerComponent = CachePlayerName.name(ownerUUID).color(NamedTextColor.GRAY); + Component ownerComponent = owner.getNameWithHead().color(NamedTextColor.GRAY); Component levelComponent = Component.text(city.getLevel()).color(NamedTextColor.DARK_AQUA); Component membersCurrent = Component.text(city.getMembers().size()).color(NamedTextColor.GREEN); Component membersLimit = Component.text(MemberLimitRewards.getMemberLimit(city.getLevel())).color(NamedTextColor.GREEN); @@ -92,7 +94,7 @@ public List getItems() { if (MayorManager.phaseMayor == 2 && FeaturesRewards.hasUnlockFeature(city, FeaturesRewards.Feature.MAYOR)) { Component mayorCity = city.getMayor() == null ? TranslationManager.translation("messages.menus.none") - : city.getMayor().getName(); + : city.getMayor().getOMCOfflinePlayer().getNameWithHead(); NamedTextColor mayorColor = (city.getMayor() == null || city.getMayor().getMayorColor() == null) ? NamedTextColor.WHITE : city.getMayor().getMayorColor(); Component mayorComponent = mayorCity.color(mayorColor).decoration(TextDecoration.ITALIC, false); cityLore.addAll(TranslationManager.translationLore( diff --git a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ChestButton.java b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ChestButton.java index c13b036fc..4ad1884c8 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ChestButton.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ChestButton.java @@ -3,6 +3,7 @@ import fr.openmc.api.menulib.Menu; import fr.openmc.api.menulib.utils.ItemMenuBuilder; import fr.openmc.api.menulib.utils.MenuUtils; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityManager; import fr.openmc.core.features.city.CityPermission; @@ -53,7 +54,7 @@ private static List getDynamicLore(City city, Player player) { if (city.getChestWatcher() != null) { lore = TranslationManager.translationLore( "feature.city.menus.main.chest.lore.opened", - Component.text(CachePlayerName.getName(city.getChestWatcher())).color(NamedTextColor.RED) + OMCOfflinePlayer.of(city.getChestWatcher()).getNameWithHead().color(NamedTextColor.RED) ); } else { lore = TranslationManager.translationLore("feature.city.menus.main.chest.lore.click"); diff --git a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ManageButton.java b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ManageButton.java index ad2473533..37fd666ae 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ManageButton.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ManageButton.java @@ -2,6 +2,7 @@ import fr.openmc.api.menulib.Menu; import fr.openmc.api.menulib.utils.ItemMenuBuilder; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityManager; import fr.openmc.core.features.city.CityPermission; @@ -53,16 +54,17 @@ private static List getDynamicLore(City city, Player player) { boolean hasPermissionOwner = city.hasPermission(player.getUniqueId(), CityPermission.OWNER); Component mayorName = (city.getMayor() != null && city.getMayor().getName() != null) - ? city.getMayor().getName() + ? city.getMayor().getOMCOfflinePlayer().getNameWithHead() : TranslationManager.translation("messages.menus.none"); NamedTextColor mayorColor = (city.getMayor() != null && city.getMayor().getName() != null) ? city.getMayor().getMayorColor() : NamedTextColor.DARK_GRAY; UUID ownerUUID = city.getPlayerWithPermission(CityPermission.OWNER); + OMCOfflinePlayer owner = OMCOfflinePlayer.of(ownerUUID); List lore; if (hasPermissionRenameCity || hasPermissionOwner) { lore = TranslationManager.translationLore( "feature.city.menus.main.manage.lore.edit", - CachePlayerName.name(ownerUUID).color(NamedTextColor.GRAY), + owner.getNameWithHead().color(NamedTextColor.GRAY), mayorName.color(mayorColor).decoration(TextDecoration.ITALIC, false), Component.text(city.getMembers().size()).color(NamedTextColor.LIGHT_PURPLE), Component.text(MemberLimitRewards.getMemberLimit(city.getLevel())).color(NamedTextColor.LIGHT_PURPLE) @@ -70,7 +72,7 @@ private static List getDynamicLore(City city, Player player) { } else { lore = TranslationManager.translationLore( "feature.city.menus.main.manage.lore.view", - CachePlayerName.name(ownerUUID).color(NamedTextColor.GRAY), + owner.getNameWithHead().color(NamedTextColor.GRAY), mayorName.color(mayorColor).decoration(TextDecoration.ITALIC, false), Component.text(city.getMembers().size()).color(NamedTextColor.LIGHT_PURPLE), Component.text(MemberLimitRewards.getMemberLimit(city.getLevel())).color(NamedTextColor.LIGHT_PURPLE) diff --git a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MayorButton.java b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MayorButton.java index 3cbd22837..b2baa2775 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MayorButton.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/MayorButton.java @@ -46,7 +46,7 @@ private static Supplier getItemSupplier(Menu menu, City city, P private static List getDynamicLore(City city, Player player) { boolean hasPermissionOwner = city.hasPermission(player.getUniqueId(), CityPermission.OWNER); Component mayorName = (city.getMayor() != null && city.getMayor().getName() != null) - ? city.getMayor().getName() + ? city.getMayor().getOMCOfflinePlayer().getNameWithHead() : TranslationManager.translation("messages.menus.none"); NamedTextColor mayorColor = (city.getMayor() != null && city.getMayor().getName() != null) ? city.getMayor().getMayorColor() : NamedTextColor.DARK_GRAY; Component mayorComponent = mayorName.color(mayorColor).decoration(TextDecoration.ITALIC, false); diff --git a/src/main/java/fr/openmc/core/features/city/sub/mayor/models/Mayor.java b/src/main/java/fr/openmc/core/features/city/sub/mayor/models/Mayor.java index 9f5f2fe5d..27617268e 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/mayor/models/Mayor.java +++ b/src/main/java/fr/openmc/core/features/city/sub/mayor/models/Mayor.java @@ -2,6 +2,7 @@ import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; import fr.openmc.core.features.city.sub.mayor.ElectionType; import fr.openmc.core.utils.text.ColorUtils; import fr.openmc.core.utils.text.messages.TranslationManager; @@ -79,4 +80,8 @@ public ElectionType getElectionType() { public void setElectionType(ElectionType type) { this.electionType = type.name(); } + + public OMCOfflinePlayer getOMCOfflinePlayer() { + return OMCOfflinePlayer.of(this.mayorUUID); + } } diff --git a/src/main/java/fr/openmc/core/features/dream/mecanism/tradernpc/GlaciteTradeMenu.java b/src/main/java/fr/openmc/core/features/dream/mecanism/tradernpc/GlaciteTradeMenu.java index b8c4c69a1..a81e68239 100644 --- a/src/main/java/fr/openmc/core/features/dream/mecanism/tradernpc/GlaciteTradeMenu.java +++ b/src/main/java/fr/openmc/core/features/dream/mecanism/tradernpc/GlaciteTradeMenu.java @@ -179,7 +179,8 @@ private List getLoreTrade(GlaciteTrade trade) { if (trade.getEweniteCost() > 0) lore.addAll(TranslationManager.translationLore( "feature.dream.trader.menu.trade.lore.ewenite", - Component.text(trade.getEweniteCost()).color(NamedTextColor.DARK_PURPLE) + Component.text(trade.getEweniteCost()).color(NamedTextColor.DARK_PURPLE), + DreamItemRegistry.EWENITE.getSprite() )); lore.add(Component.text("")); diff --git a/src/main/java/fr/openmc/core/features/leaderboards/leaderboards/MoneyLeaderBoard.java b/src/main/java/fr/openmc/core/features/leaderboards/leaderboards/MoneyLeaderBoard.java index 221405181..84425d928 100644 --- a/src/main/java/fr/openmc/core/features/leaderboards/leaderboards/MoneyLeaderBoard.java +++ b/src/main/java/fr/openmc/core/features/leaderboards/leaderboards/MoneyLeaderBoard.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.leaderboards.leaderboards; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; import fr.openmc.core.features.economy.BankManager; import fr.openmc.core.features.economy.EconomyManager; import fr.openmc.core.features.leaderboards.LeaderBoard; @@ -48,12 +49,13 @@ public Component createComponent() { for (int i = 0;i < balances.size(); i++){ Map.Entry balance = balances.get(i); Component rank = Component.text("#" + (i+1)).color(ColorUtils.getRankColor(i+1)); + OMCOfflinePlayer player = OMCOfflinePlayer.of(balance.getKey()); text = text.append(Component.text("\n") .append(TranslationManager.translation( "feature.leaderboards.line.money", rank, - CachePlayerName.name(balance.getKey()).color(NamedTextColor.LIGHT_PURPLE), + player.getNameWithHead().color(NamedTextColor.LIGHT_PURPLE), Component.text(EconomyManager.getFormattedSimplifiedNumber(balance.getValue()) + " " + EconomyManager.getEconomyIcon()) .color(NamedTextColor.WHITE) ))); diff --git a/src/main/java/fr/openmc/core/features/leaderboards/leaderboards/PlayTimeLeaderBoard.java b/src/main/java/fr/openmc/core/features/leaderboards/leaderboards/PlayTimeLeaderBoard.java index 46ae27159..2493270cb 100644 --- a/src/main/java/fr/openmc/core/features/leaderboards/leaderboards/PlayTimeLeaderBoard.java +++ b/src/main/java/fr/openmc/core/features/leaderboards/leaderboards/PlayTimeLeaderBoard.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.leaderboards.leaderboards; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; import fr.openmc.core.features.leaderboards.LeaderBoard; import fr.openmc.core.utils.cache.CachePlaytime; import fr.openmc.core.utils.text.ColorUtils; @@ -47,15 +48,14 @@ public Component createComponent() { Map.Entry stat = stats.get(i); Component rank = Component.text("#" + (i + 1)).color(ColorUtils.getRankColor(i + 1)); - String playerName = stat.getKey().getName(); + OMCOfflinePlayer player = OMCOfflinePlayer.of(stat.getKey()); String time = DateUtils.convertTime(stat.getValue()); - if (playerName == null) continue; text = text.append(Component.text("\n") .append(TranslationManager.translation( "feature.leaderboards.line.playtime", rank, - Component.text(playerName).color(NamedTextColor.LIGHT_PURPLE), + player.getNameWithHead().color(NamedTextColor.LIGHT_PURPLE), Component.text(time).color(NamedTextColor.WHITE) ))); } diff --git a/src/main/java/fr/openmc/core/features/leaderboards/leaderboards/PumpkinCountLeaderBoard.java b/src/main/java/fr/openmc/core/features/leaderboards/leaderboards/PumpkinCountLeaderBoard.java index 9e05cf110..2b696b5d1 100644 --- a/src/main/java/fr/openmc/core/features/leaderboards/leaderboards/PumpkinCountLeaderBoard.java +++ b/src/main/java/fr/openmc/core/features/leaderboards/leaderboards/PumpkinCountLeaderBoard.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.leaderboards.leaderboards; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; import fr.openmc.core.features.economy.EconomyManager; import fr.openmc.core.features.events.contents.halloween.managers.HalloweenManager; import fr.openmc.core.features.events.contents.halloween.models.HalloweenData; @@ -46,7 +47,8 @@ public Component createComponent() { for (int i = 0; i < datas.size(); i++){ HalloweenData data = datas.get(i); - Component name = CachePlayerName.name(data.getPlayerUUID()); + OMCOfflinePlayer player = OMCOfflinePlayer.of(data.getPlayerUUID()); + Component name = player.getNameWithHead(); String formattedPumpkinCount = EconomyManager.getFormattedSimplifiedNumber(data.getPumpkinCount()); Component rank = Component.text("#" + (i+1)).color(ColorUtils.getRankColor(i+1)); text = text.append(Component.text("\n").append(TranslationManager.translation( diff --git a/src/main/resources/translations/default/dream.properties b/src/main/resources/translations/default/dream.properties index 1224e651e..d5bb51654 100644 --- a/src/main/resources/translations/default/dream.properties +++ b/src/main/resources/translations/default/dream.properties @@ -187,7 +187,7 @@ feature.dream.trader.menu.time.lore=Achetez du temps pour vous permettre d
%1$s Ewenite feature.dream.trader.menu.trade.lore.cost=Coût : feature.dream.trader.menu.trade.lore.glacite= %1$s Glacite -feature.dream.trader.menu.trade.lore.ewenite= %1$s Ewenite +feature.dream.trader.menu.trade.lore.ewenite= %1$s %1$s feature.dream.trader.menu.trade.lore.click=CLIQUE-GAUCHE POUR ACHETER feature.dream.trader.message.not_enough_resources=Vous n'avez pas assez de ressources pour effectuer cet achat ! feature.dream.trader.message.time_trade_success=Vous avez échangé %1$s d'Ewenite contre %2$s diff --git a/src/main/resources/translations/en_GB/dream.properties b/src/main/resources/translations/en_GB/dream.properties index e654993c1..efc27e45b 100644 --- a/src/main/resources/translations/en_GB/dream.properties +++ b/src/main/resources/translations/en_GB/dream.properties @@ -128,7 +128,7 @@ feature.dream.trader.menu.time.lore=Buy time so you can stay longer!%1$s Ewenite feature.dream.trader.menu.trade.lore.cost=Cost : feature.dream.trader.menu.trade.lore.glacite= %1$s Glacite -feature.dream.trader.menu.trade.lore.ewenite= %1$s Ewenite +feature.dream.trader.menu.trade.lore.ewenite= %1$s %2$s feature.dream.trader.menu.trade.lore.click=LEFT CLICK TO BUY feature.dream.trader.message.not_enough_resources=You don't have enough resources to make this purchase! feature.dream.trader.message.time_trade_success=You exchanged %1$s of Ewenite against %2$s diff --git a/src/main/resources/translations/en_US/dream.properties b/src/main/resources/translations/en_US/dream.properties index e654993c1..efc27e45b 100644 --- a/src/main/resources/translations/en_US/dream.properties +++ b/src/main/resources/translations/en_US/dream.properties @@ -128,7 +128,7 @@ feature.dream.trader.menu.time.lore=Buy time so you can stay longer!%1$s Ewenite feature.dream.trader.menu.trade.lore.cost=Cost : feature.dream.trader.menu.trade.lore.glacite= %1$s Glacite -feature.dream.trader.menu.trade.lore.ewenite= %1$s Ewenite +feature.dream.trader.menu.trade.lore.ewenite= %1$s %2$s feature.dream.trader.menu.trade.lore.click=LEFT CLICK TO BUY feature.dream.trader.message.not_enough_resources=You don't have enough resources to make this purchase! feature.dream.trader.message.time_trade_success=You exchanged %1$s of Ewenite against %2$s From fa293de0f7525dd3f9faa04619360bca090e3619 Mon Sep 17 00:00:00 2001 From: iambibi <89582596+iambibi@users.noreply.github.com> Date: Thu, 1 Oct 2026 14:29:46 +0200 Subject: [PATCH 06/10] apply getNameWithHead in mailbox --- .../fr/openmc/api/omcplayer/OMCPlayer.java | 6 ++++ .../openmc/api/omcplayer/OMCPlayerImpl.java | 7 ++++ .../city/actions/CityCreateAction.java | 3 +- .../features/city/commands/CityCommands.java | 3 +- .../core/features/city/menu/NoCityMenu.java | 8 ++--- .../city/sub/war/menu/main/MainWarMenu.java | 6 ++-- .../core/features/corpse/CorpseListener.java | 3 +- .../core/features/corpse/CorpseManager.java | 4 ++- .../singularity/SingularityCraftListener.java | 4 ++- .../contents/contest/menu/TradeMenu.java | 11 +++--- .../core/features/mailboxes/Letter.java | 21 ++++++------ .../features/mailboxes/MailboxManager.java | 33 +++++++++--------- .../mailboxes/commands/MailboxCommand.java | 34 +++++++++---------- .../features/mailboxes/letter/LetterHead.java | 3 +- .../mailboxes/letter/SenderLetter.java | 3 +- .../mailboxes/menu/PendingMailbox.java | 2 +- .../features/mailboxes/menu/PlayersList.java | 4 ++- .../mailboxes/menu/letter/LetterMenu.java | 2 +- .../mailboxes/menu/letter/SendingLetter.java | 8 +++-- .../mailboxes/utils/MailboxUtils.java | 10 +++--- .../core/features/mainmenu/menus/Page1.java | 5 ++- .../core/features/mainmenu/menus/Page2.java | 5 ++- .../milestones/quests/QuestDialogReward.java | 3 +- .../profile/command/ProfileCommand.java | 14 ++++---- .../listeners/ProfileInteractionListener.java | 5 +-- .../features/profile/menu/ProfileMenu.java | 10 +++--- .../features/quests/command/QuestCommand.java | 7 ++-- .../features/quests/menus/QuestsMenu.java | 11 +++--- .../core/features/quests/objects/Quest.java | 10 +++--- .../quests/rewards/QuestItemReward.java | 3 +- .../quests/rewards/QuestMethodsReward.java | 5 +-- .../quests/rewards/QuestMoneyReward.java | 3 +- .../features/quests/rewards/QuestReward.java | 3 +- .../quests/rewards/QuestTextReward.java | 3 +- .../openmc/core/utils/bukkit/ItemUtils.java | 3 +- 35 files changed, 148 insertions(+), 117 deletions(-) diff --git a/src/main/java/fr/openmc/api/omcplayer/OMCPlayer.java b/src/main/java/fr/openmc/api/omcplayer/OMCPlayer.java index e5ca32ea5..513b27846 100644 --- a/src/main/java/fr/openmc/api/omcplayer/OMCPlayer.java +++ b/src/main/java/fr/openmc/api/omcplayer/OMCPlayer.java @@ -9,6 +9,8 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.Nullable; +import java.util.UUID; + /** * Wrapper autour d'un {@link Player} pour les methodes propres a OpenMC * (economie, ville, menus...). @@ -33,6 +35,10 @@ static OMCPlayer of(@Nullable Player player) { return OMCPlayerImpl.of(player); } + static OMCPlayer of(@Nullable UUID playerUUID) { + return OMCPlayerImpl.of(playerUUID); + } + @Nullable Player getPlayer(); @Nullable CraftPlayer getCraftPlayer(); ServerPlayer getServerPlayer(); diff --git a/src/main/java/fr/openmc/api/omcplayer/OMCPlayerImpl.java b/src/main/java/fr/openmc/api/omcplayer/OMCPlayerImpl.java index cdfd728aa..b150f44e1 100644 --- a/src/main/java/fr/openmc/api/omcplayer/OMCPlayerImpl.java +++ b/src/main/java/fr/openmc/api/omcplayer/OMCPlayerImpl.java @@ -6,6 +6,7 @@ import fr.openmc.api.omcplayer.sub.OMCPlayerSettings; import lombok.experimental.Delegate; import net.minecraft.server.level.ServerPlayer; +import org.bukkit.Bukkit; import org.bukkit.craftbukkit.entity.CraftPlayer; import org.bukkit.entity.Player; import org.jetbrains.annotations.Nullable; @@ -40,6 +41,12 @@ static OMCPlayer of(Player player) { return CACHE.computeIfAbsent(player.getUniqueId(), id -> new OMCPlayerImpl(player)); } + static OMCPlayer of(UUID playerUUID) { + Player playerBukkit = Bukkit.getPlayer(playerUUID); + return CACHE.computeIfAbsent(playerUUID, id -> new OMCPlayerImpl(playerBukkit)); + } + + @Override public @Nullable Player getPlayer() { return player; diff --git a/src/main/java/fr/openmc/core/features/city/actions/CityCreateAction.java b/src/main/java/fr/openmc/core/features/city/actions/CityCreateAction.java index d079746f4..fdc47372b 100644 --- a/src/main/java/fr/openmc/core/features/city/actions/CityCreateAction.java +++ b/src/main/java/fr/openmc/core/features/city/actions/CityCreateAction.java @@ -2,6 +2,7 @@ import fr.openmc.api.cooldown.DynamicCooldownManager; import fr.openmc.api.input.location.ItemInteraction; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.OMCRegistry; import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityManager; @@ -38,7 +39,7 @@ public class CityCreateAction { private static final Map pendingCities = new HashMap<>(); - public static void beginCreateCity(Player player, String cityName) { + public static void beginCreateCity(OMCPlayer player, String cityName) { if (cityName == null) return; if (!CityCreateConditions.canCityCreate(player, cityName)) return; diff --git a/src/main/java/fr/openmc/core/features/city/commands/CityCommands.java b/src/main/java/fr/openmc/core/features/city/commands/CityCommands.java index aaff3d985..712954a6a 100644 --- a/src/main/java/fr/openmc/core/features/city/commands/CityCommands.java +++ b/src/main/java/fr/openmc/core/features/city/commands/CityCommands.java @@ -2,6 +2,7 @@ import fr.openmc.api.chronometer.Chronometer; import fr.openmc.api.input.dialog.DialogInput; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityManager; import fr.openmc.core.features.city.actions.*; @@ -64,7 +65,7 @@ void info(Player player) { @CommandPermission("omc.commands.city.create") @Description("Créer une ville") void create( - Player player, + OMCPlayer player, @Named("nom de ville") @Optional String name ) { if (!CityCreateConditions.canCityCreate(player, null)) { diff --git a/src/main/java/fr/openmc/core/features/city/menu/NoCityMenu.java b/src/main/java/fr/openmc/core/features/city/menu/NoCityMenu.java index 4cee8ec4b..6a92347a4 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/NoCityMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/NoCityMenu.java @@ -6,6 +6,7 @@ import fr.openmc.api.menulib.utils.InventorySize; import fr.openmc.api.menulib.utils.ItemMenuBuilder; import fr.openmc.api.menulib.utils.MenuUtils; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.OMCPlugin; import fr.openmc.core.OMCRegistry; import fr.openmc.core.features.city.actions.CityCreateAction; @@ -62,11 +63,10 @@ public void onInventoryClick(InventoryClickEvent click) { @Override public @NotNull Map getContent() { Map inventory = new HashMap<>(); - Player player = getOwner(); + OMCPlayer player = getOwner(); - - Component nameNotif; - List loreNotif = new ArrayList<>(); + Component nameNotif; + List loreNotif = new ArrayList<>(); if (!CityInviteCommands.invitations.containsKey(player)) { nameNotif = TranslationManager.translation("feature.city.menus.no_city.invitations.none.title"); loreNotif.addAll(TranslationManager.translationLore("feature.city.menus.no_city.invitations.none.lore")); diff --git a/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/MainWarMenu.java b/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/MainWarMenu.java index d80364bf5..3dea8d151 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/MainWarMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/MainWarMenu.java @@ -6,6 +6,7 @@ import fr.openmc.api.menulib.utils.ItemMenuBuilder; import fr.openmc.api.menulib.utils.ItemUtils; import fr.openmc.api.menulib.utils.StaticSlots; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityManager; import fr.openmc.core.features.city.CityPermission; @@ -69,7 +70,7 @@ public int getSizeOfItems() { @Override public List getItems() { List items = new ArrayList<>(); - Player player = getOwner(); + OMCPlayer player = getOwner(); List warCities = CityManager.getCities().stream() .sorted((c1, c2) -> Integer.compare(c2.getOnlineMembers().size(), c1.getOnlineMembers().size())) @@ -95,8 +96,7 @@ public List getItems() { Component.empty(), TranslationManager.translation( "feature.city.war.menu.main.owner", - Component.text(PlainTextComponentSerializer.plainText().serialize(CachePlayerName.name(player.getUniqueId()))) - .color(NamedTextColor.LIGHT_PURPLE) + player.getNameWithHead().color(NamedTextColor.LIGHT_PURPLE) ).color(NamedTextColor.GRAY), TranslationManager.translation( "feature.city.war.menu.main.population_online", diff --git a/src/main/java/fr/openmc/core/features/corpse/CorpseListener.java b/src/main/java/fr/openmc/core/features/corpse/CorpseListener.java index 63d2428ca..985b5f05c 100644 --- a/src/main/java/fr/openmc/core/features/corpse/CorpseListener.java +++ b/src/main/java/fr/openmc/core/features/corpse/CorpseListener.java @@ -91,8 +91,7 @@ public void onCooldownEndEvent(CooldownEndEvent event) { @EventHandler public void onNPCInteraction(NpcInteractEvent event) { - - Player player = event.getPlayer(); + OMCPlayer player = OMCPlayer.of(event.getPlayer()); if (event.getNpc().getData().getName().startsWith("corpse-")) { UUID ownerUUID = UUID.fromString(event.getNpc().getData().getName().replace("corpse-", "")); diff --git a/src/main/java/fr/openmc/core/features/corpse/CorpseManager.java b/src/main/java/fr/openmc/core/features/corpse/CorpseManager.java index 691ad672a..b0322662c 100644 --- a/src/main/java/fr/openmc/core/features/corpse/CorpseManager.java +++ b/src/main/java/fr/openmc/core/features/corpse/CorpseManager.java @@ -5,6 +5,8 @@ import com.j256.ormlite.support.ConnectionSource; import com.j256.ormlite.table.TableUtils; import fr.openmc.api.cooldown.DynamicCooldownManager; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.OMCPlugin; import fr.openmc.core.bootstrap.features.Feature; import fr.openmc.core.bootstrap.features.annotations.Credit; @@ -230,7 +232,7 @@ public static void deleteCorpse(UUID ownerUUID, FoundTypes found) { } } - public static void sendMailItems(Player player, OfflinePlayer receiver, ItemStack[] items) { + public static void sendMailItems(OMCPlayer player, OMCOfflinePlayer receiver, ItemStack[] items) { Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> { if (!MailboxManager.sendItems(player, receiver, items)) MailboxManager.givePlayerItems(player, items); diff --git a/src/main/java/fr/openmc/core/features/dream/mecanism/singularity/SingularityCraftListener.java b/src/main/java/fr/openmc/core/features/dream/mecanism/singularity/SingularityCraftListener.java index 93478f03b..c5d5c4b04 100644 --- a/src/main/java/fr/openmc/core/features/dream/mecanism/singularity/SingularityCraftListener.java +++ b/src/main/java/fr/openmc/core/features/dream/mecanism/singularity/SingularityCraftListener.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.dream.mecanism.singularity; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.features.dream.models.registry.items.DreamItem; import fr.openmc.core.features.dream.registries.DreamItemRegistry; import fr.openmc.core.features.mailboxes.MailboxManager; @@ -25,7 +26,8 @@ public void onCraft(CraftItemEvent event) { DreamItem dreamItem = DreamItemRegistry.getByItemStack(item); if (dreamItem == null) return; - if (!(event.getWhoClicked() instanceof Player player)) return; + if (!(event.getWhoClicked() instanceof Player playerr)) return; + OMCPlayer player = OMCPlayer.of(playerr); if (!dreamItem.getId().equals(DreamItemRegistry.SINGULARITY.getId())) return; diff --git a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/menu/TradeMenu.java b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/menu/TradeMenu.java index b02419ffb..04468eced 100644 --- a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/menu/TradeMenu.java +++ b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/menu/TradeMenu.java @@ -4,6 +4,7 @@ import fr.openmc.api.menulib.Menu; import fr.openmc.api.menulib.utils.InventorySize; import fr.openmc.api.menulib.utils.ItemMenuBuilder; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.OMCRegistry; import fr.openmc.core.features.events.contents.weeklyevents.contents.contest.managers.ContestManager; import fr.openmc.core.features.events.contents.weeklyevents.contents.contest.managers.ContestPlayerManager; @@ -29,8 +30,6 @@ public class TradeMenu extends Menu { - private static final String SHELL_NAMESPACE = "omc_contest:contest_shell"; - public TradeMenu(Player owner) { super(owner); } @@ -57,7 +56,7 @@ public void onInventoryClick(InventoryClickEvent click) { @Override public @NotNull Map getContent() { - Player player = getOwner(); + OMCPlayer player = getOwner(); Map inventory = new HashMap<>(); Component campName = ContestPlayerManager.getPlayerCampComponent(player); @@ -150,7 +149,7 @@ public List getTakableSlot() { * @param shellsEarned le nombre de coquillages à attribuer * @param tradeName le nom du trade sous forme de composant traduisible */ - private void handleSingleTrade(Player player, ItemStack item, int itemsRemoved, int shellsEarned, TranslatableComponent tradeName) { + private void handleSingleTrade(OMCPlayer player, ItemStack item, int itemsRemoved, int shellsEarned, TranslatableComponent tradeName) { if (!ItemUtils.hasEnoughItems(player, item, itemsRemoved)) { sendNotEnoughMessage(player); return; @@ -173,7 +172,7 @@ private void handleSingleTrade(Player player, ItemStack item, int itemsRemoved, * @param amountShell le nombre de coquillages attribués pour cet échange * @param tradeName le nom du trade sous forme de composant traduisible */ - private void handleBulkTrade(Player player, ItemStack item, int amount, int amountShell, TranslatableComponent tradeName) { + private void handleBulkTrade(OMCPlayer player, ItemStack item, int amount, int amountShell, TranslatableComponent tradeName) { if (!ItemUtils.hasEnoughItems(player, item, amount)) { sendNotEnoughMessage(player); return; @@ -197,7 +196,7 @@ private void handleBulkTrade(Player player, ItemStack item, int amount, int amou * @param player le joueur destinataire des coquillages * @param amount le nombre total de coquillages à attribuer */ - private void giveShells(Player player, int amount) { + private void giveShells(OMCPlayer player, int amount) { ItemStack baseShell = OMCRegistry.CUSTOM_ITEMS.CONTEST_SHELL.getBest(); List stacks = ItemUtils.splitAmountIntoStack(baseShell, amount); List leftovers = new ArrayList<>(); diff --git a/src/main/java/fr/openmc/core/features/mailboxes/Letter.java b/src/main/java/fr/openmc/core/features/mailboxes/Letter.java index ab8c7bc37..def6a0c98 100644 --- a/src/main/java/fr/openmc/core/features/mailboxes/Letter.java +++ b/src/main/java/fr/openmc/core/features/mailboxes/Letter.java @@ -5,6 +5,7 @@ import com.j256.ormlite.table.DatabaseTable; import fr.openmc.api.menulib.Menu; import fr.openmc.api.menulib.utils.ItemMenuBuilder; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; import fr.openmc.core.features.mailboxes.letter.LetterHead; import fr.openmc.core.features.mailboxes.letter.SenderLetter; import fr.openmc.core.utils.bukkit.serializer.BukkitSerializer; @@ -24,10 +25,10 @@ public class Letter { @DatabaseField(columnName = "letter_id") private int letterId; - @DatabaseField(canBeNull = false) - private UUID sender; - @DatabaseField(canBeNull = false) - private UUID receiver; + @DatabaseField(canBeNull = false, columnName = "sender") + private UUID senderUUID; + @DatabaseField(canBeNull = false, columnName = "receiver") + private UUID receiverUUID; @DatabaseField(canBeNull = false, dataType = DataType.BYTE_ARRAY) private byte[] items; @DatabaseField(columnName = "num_items", canBeNull = false) @@ -45,8 +46,8 @@ public class Letter { Letter(int id, UUID sender, UUID receiver, byte[] items, int numItems, Timestamp sent, boolean refused) { this.letterId = id; - this.sender = sender; - this.receiver = receiver; + this.senderUUID = sender; + this.receiverUUID = receiver; this.items = items; this.numItems = numItems; this.refused = refused; @@ -59,12 +60,12 @@ public boolean refuse() { } public LetterHead toLetterHead() { - OfflinePlayer player = CacheOfflinePlayer.getOfflinePlayer(sender); + OMCOfflinePlayer player = OMCOfflinePlayer.of(senderUUID); return new LetterHead(player, letterId, numItems, LocalDateTime.ofInstant(sent.toInstant(), ZoneId.systemDefault()), this.cachedItems); } public ItemMenuBuilder toSenderLetterItemBuilder(Menu menu) { - OfflinePlayer player = CacheOfflinePlayer.getOfflinePlayer(sender); + OMCOfflinePlayer player = OMCOfflinePlayer.of(senderUUID); SenderLetter senderLetter = new SenderLetter(player, numItems, LocalDateTime.ofInstant(sent.toInstant(), ZoneId.systemDefault()), refused); @@ -75,10 +76,10 @@ public ItemMenuBuilder toSenderLetterItemBuilder(Menu menu) { public String toString() { return "Letter{" + "letterId=" + letterId + - ", sender=" + sender + + ", senderUUID=" + senderUUID + ", items" + Arrays.toString(items) + ", cachedItems=" + Arrays.toString(cachedItems) + - ", receiver=" + receiver + + ", receiverUUID=" + receiverUUID + ", itemsLength=" + items.length + ", numItems=" + numItems + ", sent=" + sent + 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 b8d110fcc..5539ffcca 100644 --- a/src/main/java/fr/openmc/core/features/mailboxes/MailboxManager.java +++ b/src/main/java/fr/openmc/core/features/mailboxes/MailboxManager.java @@ -4,6 +4,8 @@ import com.j256.ormlite.dao.DaoManager; import com.j256.ormlite.support.ConnectionSource; import com.j256.ormlite.table.TableUtils; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.bootstrap.features.Feature; import fr.openmc.core.bootstrap.features.annotations.Credit; import fr.openmc.core.bootstrap.features.types.HasCommands; @@ -66,7 +68,7 @@ public void save() { MailboxManager.saveLetters(); } - public static boolean sendItems(Player sender, OfflinePlayer receiver, ItemStack[] items) { + public static boolean sendItems(OMCPlayer sender, OMCOfflinePlayer receiver, ItemStack[] items) { if (!canSend(sender, receiver)) return false; List allItems = Arrays.asList(items); @@ -79,8 +81,7 @@ public static boolean sendItems(Player sender, OfflinePlayer receiver, ItemStack return true; } - private static boolean sendLetter(Player sender, OfflinePlayer receiver, ItemStack[] items) { - String receiverName = receiver.getName(); + private static boolean sendLetter(OMCPlayer sender, OMCOfflinePlayer receiver, ItemStack[] items) { int numItems = Arrays.stream(items).mapToInt(ItemStack::getAmount).sum(); LocalDateTime sent = DateUtils.getLocalDateTime(); @@ -90,14 +91,14 @@ private static boolean sendLetter(Player sender, OfflinePlayer receiver, ItemSta letters.add(letter); int id = letter.getLetterId(); - Player receiverPlayer = receiver.getPlayer(); + OMCPlayer receiverPlayer = OMCPlayer.of(receiver.getPlayer()) ; if (receiverPlayer != null) { Inventory inv = receiverPlayer.getInventory(); if (inv instanceof PlayerMailbox receiverMailbox) receiverMailbox.open(); - sendLetterReceivedNotification(receiverPlayer, numItems, id, sender.getName()); + sendLetterReceivedNotification(sender, receiverPlayer, numItems, id); } - sendSuccessSendingMessage(sender, receiverName, numItems); + sendSuccessSendingMessage(sender, receiver, numItems); return true; } catch (Exception ex) { OMCLogger.warn("Error while sending items to offline player: {}", ex.getMessage(), ex); @@ -105,7 +106,7 @@ private static boolean sendLetter(Player sender, OfflinePlayer receiver, ItemSta sender, TranslationManager.translation( "feature.mailboxes.message.send_error", - Component.text(receiverName).color(NamedTextColor.RED) + receiver.getNameWithHead().color(NamedTextColor.RED) ).color(NamedTextColor.DARK_RED), Prefix.MAILBOX, MessageType.ERROR, @@ -149,7 +150,7 @@ private static ItemStack[] changeStackItem(ItemStack[] items) { public static void sendMailNotification(Player player) { long count = letters.stream() - .filter(letter -> letter.getReceiver().equals(player.getUniqueId()) && !letter.isRefused()) + .filter(letter -> letter.getReceiverUUID().equals(player.getUniqueId()) && !letter.isRefused()) .count(); if (count == 0) return; @@ -188,7 +189,7 @@ public static boolean deleteLetter(int id) { public static Letter getById(Player player, int id) { Letter letter = letters.stream() .filter(l -> l.getLetterId() == id) - .filter(l -> l.getReceiver().equals(player.getUniqueId())) + .filter(l -> l.getReceiverUUID().equals(player.getUniqueId())) .findFirst() .orElse(null); @@ -198,14 +199,14 @@ public static Letter getById(Player player, int id) { public static List getSentLetters(Player player) { return letters.stream() - .filter(l -> l.getSender().equals(player.getUniqueId())) + .filter(l -> l.getSenderUUID().equals(player.getUniqueId())) .sorted(Comparator.comparing(Letter::getSent).reversed()) .toList(); } public static List getReceivedLetters(Player player) { return letters.stream() - .filter(l -> l.getReceiver().equals(player.getUniqueId()) && !l.isRefused()) + .filter(l -> l.getReceiverUUID().equals(player.getUniqueId()) && !l.isRefused()) .sorted(Comparator.comparing(Letter::getSent).reversed()) .toList(); } @@ -217,13 +218,13 @@ public static boolean canSend(Player sender, OfflinePlayer receiver) { return settings.canPerformAction(SettingType.MAILBOX_RECEIVE_POLICY, sender.getUniqueId()); } - private static void sendLetterReceivedNotification(Player receiver, int numItems, int id, String name) { + private static void sendLetterReceivedNotification(OMCPlayer sender, OMCPlayer receiver, int numItems, int id) { Component line1 = TranslationManager.translation( "feature.mailboxes.message.letter_received.line1", Component.text(numItems).color(NamedTextColor.GREEN), pluralize(Component.space() .append(TranslationManager.translation("global.item")), numItems).color(NamedTextColor.DARK_GREEN), - Component.text(name).color(NamedTextColor.GREEN) + sender.getNameWithHead().color(NamedTextColor.GREEN) ).color(NamedTextColor.DARK_GREEN); Component clickComponent = TranslationManager.translation("feature.mailboxes.message.letter_received.click") .color(NamedTextColor.YELLOW) @@ -245,7 +246,7 @@ private static void sendLetterReceivedNotification(Player receiver, int numItems MessageType.SUCCESS, true ); - Title titleComponent = getTitle(numItems, name); + Title titleComponent = getTitle(numItems, sender.getName()); receiver.playSound(receiver.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, SoundCategory.MASTER, 1.0f, 1.0f); receiver.showTitle(titleComponent); @@ -264,13 +265,13 @@ private static void sendLetterReceivedNotification(Player receiver, int numItems return Title.title(title, subtitle); } - private static void sendSuccessSendingMessage(Player player, String receiverName, int numItems) { + private static void sendSuccessSendingMessage(Player player, OMCOfflinePlayer receiver, int numItems) { Component message = TranslationManager.translation( "feature.mailboxes.message.send_success", Component.text(numItems).color(NamedTextColor.GREEN), pluralize(TranslationManager.translation("global.item"), numItems).color(NamedTextColor.DARK_GREEN), pluralize(TranslationManager.translation("feature.mailboxes.message.sent_word"), numItems).color(NamedTextColor.DARK_GREEN), - Component.text(receiverName).color(NamedTextColor.GREEN) + receiver.getNameWithHead().color(NamedTextColor.GREEN) ).color(NamedTextColor.DARK_GREEN); MessagesManager.sendMessage( 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 41c72b28f..a98afc188 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 @@ -1,5 +1,7 @@ package fr.openmc.core.features.mailboxes.commands; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.commands.autocomplete.OnlinePlayerAutoComplete; import fr.openmc.core.features.mailboxes.Letter; import fr.openmc.core.features.mailboxes.MailboxManager; @@ -26,42 +28,39 @@ public class MailboxCommand { @CommandPlaceholder() - public void mailbox(Player player) { + public void mailbox(OMCPlayer player) { new PlayerMailbox(player).open(); } @Subcommand("home") @Description("Ouvrir la page d'accueil de la boite aux lettres") - public static void homeMailbox(Player player) { + public static void homeMailbox(OMCPlayer player) { new HomeMailbox(player).open(); } @Subcommand("send") @Description("Envoyer une lettre à un joueur") - public void sendMailbox(Player player, @Named("player") @SuggestWith(OnlinePlayerAutoComplete.class) String receiver) { - OfflinePlayer receiverPlayer = Bukkit.getPlayerExact(receiver); - if (receiverPlayer == null) receiverPlayer = Bukkit.getOfflinePlayerIfCached(receiver); + public void sendMailbox(OMCPlayer player, @Named("player") @SuggestWith(OnlinePlayerAutoComplete.class) String receiver) { + OMCOfflinePlayer receiverPlayer = OMCOfflinePlayer.of(receiver); if (receiverPlayer == null || !(receiverPlayer.hasPlayedBefore() || receiverPlayer.isOnline())) { - Component message = TranslationManager.translation( + player.message().send(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); + ).color(NamedTextColor.DARK_RED), Prefix.MAILBOX, MessageType.ERROR, true); return; } if (receiverPlayer.getUniqueId() == player.getUniqueId()) { - MessagesManager.sendMessage(player, + player.message().send( 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, + player.message().send( TranslationManager.translation( "feature.mailboxes.message.cannot_send", - Component.text(receiverPlayer.getName()).color(NamedTextColor.RED) + receiverPlayer.getNameWithHead().color(NamedTextColor.RED) ).color(NamedTextColor.DARK_RED), Prefix.MAILBOX, MessageType.ERROR, @@ -75,14 +74,14 @@ public void sendMailbox(Player player, @Named("player") @SuggestWith(OnlinePlaye @Subcommand("pending") @Description("Ouvrir les lettres en attente de réception") - public void pendingMailbox(Player player) { + public void pendingMailbox(OMCPlayer player) { new PendingMailbox(player).open(); } @SecretCommand @Subcommand("open") @Description("Ouvrir une lettre") - public void openMailbox(Player player, @Named("id") @Range(min = 1, max = Integer.MAX_VALUE) int id) { + public void openMailbox(OMCPlayer player, @Named("id") @Range(min = 1, max = Integer.MAX_VALUE) int id) { Letter letter = MailboxManager.getById(player, id); if (letter == null) return; LetterMenu mailbox = new LetterMenu(player, letter); @@ -92,18 +91,17 @@ public void openMailbox(Player player, @Named("id") @Range(min = 1, max = Intege @Subcommand("refuse") @SecretCommand @Description("Refuser une lettre") - public void refuseMailbox(Player player, @Named("id") @Range(min = 1, max = Integer.MAX_VALUE) int id) { + public void refuseMailbox(OMCPlayer player, @Named("id") @Range(min = 1, max = Integer.MAX_VALUE) int id) { LetterMenu.refuseLetter(player, id); } @Subcommand("cancel") @SecretCommand @Description("Annuler une lettre") - public void cancelMailbox(Player player, @Named("id") @Range(min = 1, max = Integer.MAX_VALUE) int id) { + public void cancelMailbox(OMCPlayer player, @Named("id") @Range(min = 1, max = Integer.MAX_VALUE) int id) { Letter letter = MailboxManager.getById(player, id); if (letter == null) { - MessagesManager.sendMessage( - player, + player.message().send( TranslationManager.translation( "feature.mailboxes.message.letter_not_found", Component.text(id).color(NamedTextColor.RED) 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 bf61f0292..e1e4e5235 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 @@ -1,5 +1,6 @@ package fr.openmc.core.features.mailboxes.letter; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; import fr.openmc.core.utils.text.messages.TranslationManager; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.TooltipDisplay; @@ -28,7 +29,7 @@ public class LetterHead extends ItemStack { private final int itemsCount; private final ItemStack[] items; - public LetterHead(OfflinePlayer player, int letterId, int itemsCount, LocalDateTime sentAt, ItemStack[] items) { + public LetterHead(OMCOfflinePlayer player, int letterId, int itemsCount, LocalDateTime sentAt, ItemStack[] items) { super(Material.PLAYER_HEAD, 1); this.letterId = letterId; this.itemsCount = itemsCount; 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 fcca11d0a..947dcf1ea 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.api.omcplayer.OMCOfflinePlayer; import fr.openmc.core.utils.text.messages.TranslationManager; import lombok.Getter; import net.kyori.adventure.text.Component; @@ -21,7 +22,7 @@ @Getter public class SenderLetter extends ItemStack { - public SenderLetter(OfflinePlayer player, int itemsCount, LocalDateTime sentAt, boolean refused) { + public SenderLetter(OMCOfflinePlayer player, int itemsCount, LocalDateTime sentAt, boolean refused) { super(Material.PLAYER_HEAD, 1); SkullMeta skullMeta = (SkullMeta) this.getItemMeta(); skullMeta.setOwningPlayer(player); 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 2b943d3c6..05fbfc784 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 @@ -125,7 +125,7 @@ public static void cancelLetter(Player player, int id) { int itemsCount = letter.getNumItems(); ItemStack[] items = BukkitSerializer.deserializeItemStacks(letter.getItems()); - Player sender = CacheOfflinePlayer.getOfflinePlayer(letter.getSender()).getPlayer(); + Player sender = CacheOfflinePlayer.getOfflinePlayer(letter.getSenderUUID()).getPlayer(); if (MailboxManager.deleteLetter(id)) { if (sender != null) 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 2ac491e2d..426ec892f 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 @@ -7,6 +7,7 @@ import fr.openmc.api.menulib.utils.InventorySize; import fr.openmc.api.menulib.utils.ItemMenuBuilder; import fr.openmc.api.menulib.utils.StaticSlots; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.features.mailboxes.MailboxManager; import fr.openmc.core.features.mailboxes.menu.letter.SendingLetter; import fr.openmc.core.utils.bukkit.ItemUtils; @@ -55,10 +56,11 @@ public List getItems() { List pageItems = new java.util.ArrayList<>(); for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { if (onlinePlayer == getOwner()) continue; + OMCPlayer omcPlayer = OMCPlayer.of(onlinePlayer); if (!MailboxManager.canSend(getOwner(), onlinePlayer)) continue; pageItems.add(new ItemMenuBuilder(this, ItemUtils.getPlayerHead(onlinePlayer.getUniqueId())) .setOnClick(event -> { - new SendingLetter(getOwner(), onlinePlayer).open(); + new SendingLetter(getOwner(), omcPlayer).open(); })); } return pageItems; 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 fd75a1d07..037b37b1a 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 @@ -90,7 +90,7 @@ public static void refuseLetter(Player player, int id) { } public void accept(Player player) { - if (!this.letter.getReceiver().equals(player.getUniqueId())) return; + if (!this.letter.getReceiverUUID().equals(player.getUniqueId())) return; ItemStack[] items = getLetterItems(); if (MailboxManager.deleteLetter(letterHead.getLetterId())) { 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 def902bc2..bf8d086e3 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 @@ -6,6 +6,8 @@ import fr.openmc.api.menulib.utils.InventorySize; import fr.openmc.api.menulib.utils.ItemMenuBuilder; import fr.openmc.api.menulib.utils.MenuUtils; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.OMCPlugin; import fr.openmc.core.features.mailboxes.MailboxManager; import fr.openmc.core.utils.bukkit.ItemUtils; @@ -34,10 +36,10 @@ import static fr.openmc.core.features.mailboxes.utils.MailboxUtils.getHead; public class SendingLetter extends Menu { - private final OfflinePlayer receiver; + private final OMCOfflinePlayer receiver; private boolean hasSent = false; - public SendingLetter(Player player, OfflinePlayer receiver) { + public SendingLetter(OMCPlayer player, OMCOfflinePlayer receiver) { super(player); this.receiver = receiver; } @@ -77,7 +79,7 @@ public void sendLetter(Inventory inv) { sendMailItems(getOwner(), receiver, items); } - private void sendMailItems(Player player, OfflinePlayer receiver, ItemStack[] items) { + private void sendMailItems(OMCPlayer player, OMCOfflinePlayer receiver, ItemStack[] items) { Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> { if (!MailboxManager.sendItems(player, receiver, items)) MailboxManager.givePlayerItems(player, items); 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 91d53b7b0..184af5aee 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,6 +1,7 @@ package fr.openmc.core.features.mailboxes.utils; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.event.HoverEvent; @@ -13,11 +14,10 @@ import org.jetbrains.annotations.NotNull; public class MailboxUtils { - public static Component getPlayerName(OfflinePlayer player) { - String pName = player.getName(); - Component displayName = pName == null + public static Component getPlayerName(OMCOfflinePlayer player) { + Component displayName = player.getNameWithHead() == null ? TranslationManager.translation("feature.mailboxes.player.unknown") - : Component.text(pName); + : player.getNameWithHead(); return Component.text("⬤ ", player.isConnected() ? NamedTextColor.DARK_GREEN : NamedTextColor.DARK_RED) .append(displayName.color(NamedTextColor.GOLD).decorate(TextDecoration.BOLD)) .decoration(TextDecoration.ITALIC, false); @@ -45,7 +45,7 @@ public static Component nonItalic(Component name) { return HoverEvent.showText(message.color(NamedTextColor.GRAY)); } - public static ItemStack getHead(OfflinePlayer player) { + public static ItemStack getHead(OMCOfflinePlayer player) { return getHead(player, getPlayerName(player)); } } 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 9105f6ed1..a139f7a32 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 @@ -245,8 +245,7 @@ public Map getContent() { @Override public void onInventoryClick(InventoryClickEvent event) { - Player player = event.player(); - OMCPlayer omcPlayer = OMCPlayer.of(player); + OMCPlayer player = OMCPlayer.of(event.player()); if (event.clickType() == ClickType.CLICK_OUTSIDE) { PacketMenuLib.closeMenu(player); return; @@ -277,7 +276,7 @@ public void onInventoryClick(InventoryClickEvent event) { } else if (SHOP_SLOTS.contains(slot)) { Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> AdminShopManager.openMainMenu(player)); } else if (HOME_SLOTS.contains(slot)) { - Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> TpHomeCommand.home(omcPlayer, null)); + Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> TpHomeCommand.home(player, null)); } else if (PROFILE_SLOTS.contains(slot)) { PacketMenuLib.closeMenu(player); Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> new ProfileMenu(player).open()); 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 e9a6c8a63..f0d31df88 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 @@ -160,8 +160,7 @@ public Map getContent() { @Override public void onInventoryClick(InventoryClickEvent event) { - Player player = event.player(); - OMCPlayer omcPlayer = OMCPlayer.of(player); + OMCPlayer player = OMCPlayer.of(event.player()); if (event.clickType() == ClickType.CLICK_OUTSIDE) { PacketMenuLib.closeMenu(player); return; @@ -214,7 +213,7 @@ public void onInventoryClick(InventoryClickEvent event) { MessageType.INFO, true); } else if (BANK_SLOTS.contains(slot)) { - Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> BankCommands.openBankMenu(omcPlayer)); + 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)) { diff --git a/src/main/java/fr/openmc/core/features/milestones/quests/QuestDialogReward.java b/src/main/java/fr/openmc/core/features/milestones/quests/QuestDialogReward.java index 21d344ac1..10409f3e9 100644 --- a/src/main/java/fr/openmc/core/features/milestones/quests/QuestDialogReward.java +++ b/src/main/java/fr/openmc/core/features/milestones/quests/QuestDialogReward.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.milestones.quests; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.OMCPlugin; import fr.openmc.core.features.milestones.MilestoneStep; import fr.openmc.core.features.milestones.dialogs.MilestoneDialog; @@ -12,7 +13,7 @@ public record QuestDialogReward(Enum step, List dialogs) implements QuestReward { @Override - public void giveReward(Player player) { + public void giveReward(OMCPlayer player) { Bukkit.getServer().getScheduler().runTaskLater(OMCPlugin.getInstance(), () -> { player.closeInventory(); MilestoneDialog.addToMilestoneDialog(player); diff --git a/src/main/java/fr/openmc/core/features/profile/command/ProfileCommand.java b/src/main/java/fr/openmc/core/features/profile/command/ProfileCommand.java index 467bba14d..548163313 100644 --- a/src/main/java/fr/openmc/core/features/profile/command/ProfileCommand.java +++ b/src/main/java/fr/openmc/core/features/profile/command/ProfileCommand.java @@ -1,5 +1,7 @@ package fr.openmc.core.features.profile.command; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.commands.autocomplete.OnlinePlayerAutoComplete; import fr.openmc.core.features.profile.menu.ProfileMenu; import fr.openmc.core.utils.text.messages.MessageType; @@ -22,13 +24,11 @@ public class ProfileCommand { @CommandPlaceholder public void openProfile( - Player player, - @Named("joueur") @Optional @SuggestWith(OnlinePlayerAutoComplete.class) OfflinePlayer target + OMCPlayer player, + @Named("joueur") @Optional @SuggestWith(OnlinePlayerAutoComplete.class) OMCOfflinePlayer target ) { - OfflinePlayer selectedTarget = target == null ? player : target; - if (!selectedTarget.isOnline() && !selectedTarget.hasPlayedBefore()) { - MessagesManager.sendMessage( - player, + if (!target.isConnected() && !target.hasPlayedBefore()) { + player.message().send( TranslationManager.translation("feature.profile.message.player_not_found"), Prefix.OPENMC, MessageType.ERROR, @@ -37,6 +37,6 @@ public void openProfile( return; } - new ProfileMenu(player, selectedTarget).open(); + new ProfileMenu(player, target).open(); } } diff --git a/src/main/java/fr/openmc/core/features/profile/listeners/ProfileInteractionListener.java b/src/main/java/fr/openmc/core/features/profile/listeners/ProfileInteractionListener.java index 3d8eaad40..3bab6f8e6 100644 --- a/src/main/java/fr/openmc/core/features/profile/listeners/ProfileInteractionListener.java +++ b/src/main/java/fr/openmc/core/features/profile/listeners/ProfileInteractionListener.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.profile.listeners; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.features.profile.menu.ProfileMenu; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -10,11 +11,11 @@ public class ProfileInteractionListener implements Listener { @EventHandler(ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEntityEvent event) { - Player viewer = event.getPlayer(); + OMCPlayer viewer = OMCPlayer.of(event.getPlayer()); if (event.getHand() != EquipmentSlot.HAND || !viewer.isSneaking()) return; if (!(event.getRightClicked() instanceof Player target)) return; event.setCancelled(true); - new ProfileMenu(viewer, target).open(); + new ProfileMenu(viewer, OMCPlayer.of(target)).open(); } } diff --git a/src/main/java/fr/openmc/core/features/profile/menu/ProfileMenu.java b/src/main/java/fr/openmc/core/features/profile/menu/ProfileMenu.java index 6263395bb..70a06771e 100644 --- a/src/main/java/fr/openmc/core/features/profile/menu/ProfileMenu.java +++ b/src/main/java/fr/openmc/core/features/profile/menu/ProfileMenu.java @@ -3,6 +3,8 @@ import fr.openmc.api.menulib.Menu; import fr.openmc.api.menulib.utils.InventorySize; import fr.openmc.api.menulib.utils.ItemMenuBuilder; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.OMCPlugin; import fr.openmc.core.OMCRegistry; import fr.openmc.core.features.city.City; @@ -36,13 +38,13 @@ import java.util.Map; public class ProfileMenu extends Menu { - private final OfflinePlayer target; + private final OMCOfflinePlayer target; - public ProfileMenu(Player owner) { + public ProfileMenu(OMCPlayer owner) { this(owner, owner); } - public ProfileMenu(Player owner, OfflinePlayer target) { + public ProfileMenu(OMCPlayer owner, OMCOfflinePlayer target) { super(owner); this.target = target; } @@ -126,7 +128,7 @@ private void addIdentityItem(Map inventory) { } ).setOnClick(click -> { if (click.getWhoClicked().getUniqueId() == target.getUniqueId()) { - Player owner = getOwner(); + OMCPlayer owner = getOwner(); Bukkit.getScheduler().runTaskAsynchronously(OMCPlugin.getInstance(), () -> { GitHubHook.refreshContributorId(target.getUniqueId()); Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> { diff --git a/src/main/java/fr/openmc/core/features/quests/command/QuestCommand.java b/src/main/java/fr/openmc/core/features/quests/command/QuestCommand.java index 648317a4c..ca102591e 100644 --- a/src/main/java/fr/openmc/core/features/quests/command/QuestCommand.java +++ b/src/main/java/fr/openmc/core/features/quests/command/QuestCommand.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.quests.command; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.commands.autocomplete.OnlinePlayerAutoComplete; import fr.openmc.core.features.quests.menus.QuestsMenu; import fr.openmc.core.utils.text.messages.MessageType; @@ -15,15 +16,15 @@ public class QuestCommand { @CommandPlaceholder() @Description("Ouvre le menu des quêtes") - public static void onQuest(Player player) { + public static void onQuest(OMCPlayer player) { new QuestsMenu(player).open(); } @Subcommand("open") @Description("Ouvre le menu des quêtes") public void resetProgress( - Player sender, - @Named("joueur") @SuggestWith(OnlinePlayerAutoComplete.class) @Optional Player target + OMCPlayer sender, + @Named("joueur") @SuggestWith(OnlinePlayerAutoComplete.class) @Optional OMCPlayer target ) { if (target == null || target == sender) { new QuestsMenu(sender).open(); diff --git a/src/main/java/fr/openmc/core/features/quests/menus/QuestsMenu.java b/src/main/java/fr/openmc/core/features/quests/menus/QuestsMenu.java index 8873b1a54..c20d8ab3e 100644 --- a/src/main/java/fr/openmc/core/features/quests/menus/QuestsMenu.java +++ b/src/main/java/fr/openmc/core/features/quests/menus/QuestsMenu.java @@ -4,6 +4,7 @@ import fr.openmc.api.menulib.Menu; import fr.openmc.api.menulib.utils.InventorySize; import fr.openmc.api.menulib.utils.ItemMenuBuilder; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.OMCRegistry; import fr.openmc.core.features.economy.EconomyManager; import fr.openmc.core.features.quests.QuestsManager; @@ -34,29 +35,29 @@ public class QuestsMenu extends Menu { private int currentPage; private static String TITLE; private final int totalPages; - private Player target; + private OMCPlayer target; private final Map slotToQuestIndex = new HashMap<>(); - public QuestsMenu(Player player, int currentPage) { + public QuestsMenu(OMCPlayer player, int currentPage) { super(player); this.currentPage = currentPage; this.totalPages = (int) Math.ceil(QuestsManager.getAllQuests().size() / 9.0F); this.target = player; } - public QuestsMenu(Player player, Player target, int currentPage) { + public QuestsMenu(OMCPlayer player, OMCPlayer target, int currentPage) { super(player); this.currentPage = currentPage; this.totalPages = (int) Math.ceil(QuestsManager.getAllQuests().size() / 9.0F); this.target = target; } - public QuestsMenu(Player player) { + public QuestsMenu(OMCPlayer player) { this(player, 0); this.target = player; } - public QuestsMenu(Player player, Player target) { + public QuestsMenu(OMCPlayer player, OMCPlayer target) { this(player, 0); this.target = target; } diff --git a/src/main/java/fr/openmc/core/features/quests/objects/Quest.java b/src/main/java/fr/openmc/core/features/quests/objects/Quest.java index 69bdb3ff2..83b04dc1e 100644 --- a/src/main/java/fr/openmc/core/features/quests/objects/Quest.java +++ b/src/main/java/fr/openmc/core/features/quests/objects/Quest.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.quests.objects; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.OMCPlugin; import fr.openmc.core.features.dream.DreamUtils; import fr.openmc.core.features.quests.events.QuestCompleteEvent; @@ -18,10 +19,7 @@ import net.kyori.adventure.text.format.TextColor; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import net.kyori.adventure.title.Title; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.Sound; +import org.bukkit.*; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -287,7 +285,7 @@ public void completeTier(UUID uuid, int tierIndex) { if (!playerCompletedTiers.contains(tierIndex) && tierIndex < this.tiers.size() && !this.isFullyCompleted(uuid)) { playerCompletedTiers.add(tierIndex); this.currentTier.put(uuid, Math.min(tierIndex + 1, this.tiers.size())); - Player player = Bukkit.getPlayer(uuid); + OMCPlayer player = OMCPlayer.of(uuid); QuestTier tier = this.tiers.get(tierIndex); boolean isLastTier = tierIndex == this.tiers.size() - 1; @@ -409,7 +407,7 @@ public Set getPendingRewardTiers(UUID playerUUID) { * @param tierIndex The index of the tier for which to claim rewards * @return true if all rewards were claimed, false otherwise */ - public boolean claimPendingRewards(Player player, int tierIndex) { + public boolean claimPendingRewards(OMCPlayer player, int tierIndex) { UUID playerUUID = player.getUniqueId(); List rewards = getPendingRewardsForTier(playerUUID, tierIndex); if (rewards == null || rewards.isEmpty()) { diff --git a/src/main/java/fr/openmc/core/features/quests/rewards/QuestItemReward.java b/src/main/java/fr/openmc/core/features/quests/rewards/QuestItemReward.java index 13b62e345..6af0b4daa 100644 --- a/src/main/java/fr/openmc/core/features/quests/rewards/QuestItemReward.java +++ b/src/main/java/fr/openmc/core/features/quests/rewards/QuestItemReward.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.quests.rewards; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.registry.items.CustomItem; import lombok.Getter; import org.bukkit.Material; @@ -56,7 +57,7 @@ public QuestItemReward(CustomItem customItem, int amount) { * @param player the target player for the reward. */ @Override - public void giveReward(Player player) { + public void giveReward(OMCPlayer player) { int remaining = amount; while (remaining > 0) { int stackAmount = Math.min(remaining, itemStack.getMaxStackSize()); diff --git a/src/main/java/fr/openmc/core/features/quests/rewards/QuestMethodsReward.java b/src/main/java/fr/openmc/core/features/quests/rewards/QuestMethodsReward.java index f9f0a3f70..1afcb8552 100644 --- a/src/main/java/fr/openmc/core/features/quests/rewards/QuestMethodsReward.java +++ b/src/main/java/fr/openmc/core/features/quests/rewards/QuestMethodsReward.java @@ -1,10 +1,11 @@ package fr.openmc.core.features.quests.rewards; +import fr.openmc.api.omcplayer.OMCPlayer; import org.bukkit.entity.Player; import java.util.function.Consumer; -public record QuestMethodsReward(Consumer runnable) implements QuestReward { +public record QuestMethodsReward(Consumer runnable) implements QuestReward { /** * Gives the reward to the specified player. *

@@ -15,7 +16,7 @@ public record QuestMethodsReward(Consumer runnable) implements QuestRewa * @param player the target player for the reward. */ @Override - public void giveReward(Player player) { + public void giveReward(OMCPlayer player) { runnable.accept(player); } } diff --git a/src/main/java/fr/openmc/core/features/quests/rewards/QuestMoneyReward.java b/src/main/java/fr/openmc/core/features/quests/rewards/QuestMoneyReward.java index 948627b11..3fa0bdda8 100644 --- a/src/main/java/fr/openmc/core/features/quests/rewards/QuestMoneyReward.java +++ b/src/main/java/fr/openmc/core/features/quests/rewards/QuestMoneyReward.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.quests.rewards; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.features.economy.EconomyManager; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.MessagesManager; @@ -22,7 +23,7 @@ public record QuestMoneyReward(double amount) implements QuestReward { * @param player The player to whom the reward will be given. */ @Override - public void giveReward(Player player) { + public void giveReward(OMCPlayer player) { EconomyManager.addBalance(player.getUniqueId(), amount, "Récompense de quête"); Component amountComponent = Component.text(EconomyManager.getFormattedSimplifiedNumber(amount) + " " + EconomyManager.getEconomyIcon()) .color(NamedTextColor.YELLOW); diff --git a/src/main/java/fr/openmc/core/features/quests/rewards/QuestReward.java b/src/main/java/fr/openmc/core/features/quests/rewards/QuestReward.java index 42d4a166b..e905bd6aa 100644 --- a/src/main/java/fr/openmc/core/features/quests/rewards/QuestReward.java +++ b/src/main/java/fr/openmc/core/features/quests/rewards/QuestReward.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.quests.rewards; +import fr.openmc.api.omcplayer.OMCPlayer; import org.bukkit.entity.Player; /** @@ -12,5 +13,5 @@ public interface QuestReward { * * @param player The player to give the reward to. */ - void giveReward(Player player); + void giveReward(OMCPlayer player); } 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 75e81b489..f3c295f65 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 @@ -1,5 +1,6 @@ package fr.openmc.core.features.quests.rewards; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.OMCPlugin; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.MessagesManager; @@ -20,7 +21,7 @@ public record QuestTextReward(Component text, Prefix prefix, MessageType message * @param player The player to whom the reward will be given. */ @Override - public void giveReward(Player player) { + public void giveReward(OMCPlayer player) { Bukkit.getScheduler().runTaskLater(OMCPlugin.getInstance(), () -> { MessagesManager.sendMessage( player, diff --git a/src/main/java/fr/openmc/core/utils/bukkit/ItemUtils.java b/src/main/java/fr/openmc/core/utils/bukkit/ItemUtils.java index 4615a3279..46d928409 100644 --- a/src/main/java/fr/openmc/core/utils/bukkit/ItemUtils.java +++ b/src/main/java/fr/openmc/core/utils/bukkit/ItemUtils.java @@ -1,6 +1,7 @@ package fr.openmc.core.utils.bukkit; import dev.lone.itemsadder.api.CustomStack; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.OMCPlugin; import fr.openmc.core.OMCRegistry; import fr.openmc.core.features.mailboxes.MailboxManager; @@ -301,7 +302,7 @@ public static boolean takeAywenite(Player player, int amount) { return true; } - public static boolean giveItem(Player player, ItemStack item, int amount) { + public static boolean giveItem(OMCPlayer player, ItemStack item, int amount) { if (item == null) return false; item.setAmount(amount); From f698f780c02a725515a84b595f19283614730a6f Mon Sep 17 00:00:00 2001 From: iambibi <89582596+iambibi@users.noreply.github.com> Date: Thu, 1 Oct 2026 18:51:41 +0200 Subject: [PATCH 07/10] fix: OMCPlayer instance when player join and quit and join --- .../fr/openmc/api/omcplayer/OMCPlayer.java | 2 +- .../openmc/api/omcplayer/OMCPlayerImpl.java | 25 +++++++++++++---- .../api/packetmenulib/PacketMenuLib.java | 23 +++++++++------- .../api/packetmenulib/PacketMenuListener.java | 16 +++++------ .../events/InventoryClickEvent.java | 3 ++- .../core/features/mainmenu/MainMenu.java | 3 ++- .../mainmenu/commands/MainMenuCommand.java | 3 ++- .../mainmenu/listeners/MainMenuListener.java | 27 +++++++++++-------- .../core/features/mainmenu/menus/Page1.java | 10 +++---- .../core/features/mainmenu/menus/Page2.java | 12 ++++----- .../listeners/OMCPlayerCacheListener.java | 1 + 11 files changed, 74 insertions(+), 51 deletions(-) diff --git a/src/main/java/fr/openmc/api/omcplayer/OMCPlayer.java b/src/main/java/fr/openmc/api/omcplayer/OMCPlayer.java index 513b27846..e0a3802cf 100644 --- a/src/main/java/fr/openmc/api/omcplayer/OMCPlayer.java +++ b/src/main/java/fr/openmc/api/omcplayer/OMCPlayer.java @@ -35,7 +35,7 @@ static OMCPlayer of(@Nullable Player player) { return OMCPlayerImpl.of(player); } - static OMCPlayer of(@Nullable UUID playerUUID) { + static OMCPlayer of(UUID playerUUID) { return OMCPlayerImpl.of(playerUUID); } diff --git a/src/main/java/fr/openmc/api/omcplayer/OMCPlayerImpl.java b/src/main/java/fr/openmc/api/omcplayer/OMCPlayerImpl.java index b150f44e1..f065a60c4 100644 --- a/src/main/java/fr/openmc/api/omcplayer/OMCPlayerImpl.java +++ b/src/main/java/fr/openmc/api/omcplayer/OMCPlayerImpl.java @@ -36,16 +36,27 @@ private OMCPlayerImpl(Player player) { } static OMCPlayer of(Player player) { - if (player instanceof OMCPlayer omcPlayer) - return omcPlayer; - return CACHE.computeIfAbsent(player.getUniqueId(), id -> new OMCPlayerImpl(player)); + if (player == null) throw new IllegalArgumentException("player ne peut pas être null"); + + + return CACHE.compute(player.getUniqueId(), (id, cachedPlayer) -> { + if (cachedPlayer == null) return new OMCPlayerImpl(player); + + Player cachedBukkitPlayer = cachedPlayer.getPlayer(); + + if (cachedBukkitPlayer == null) return new OMCPlayerImpl(player); + + return cachedPlayer; + }); } static OMCPlayer of(UUID playerUUID) { Player playerBukkit = Bukkit.getPlayer(playerUUID); - return CACHE.computeIfAbsent(playerUUID, id -> new OMCPlayerImpl(playerBukkit)); - } + if (playerBukkit == null) return; + + return of(playerBukkit); + } @Override public @Nullable Player getPlayer() { @@ -64,6 +75,10 @@ public ServerPlayer getServerPlayer() { return getCraftPlayer().getHandle(); } + public static OMCPlayer getCache(UUID uuid) { + return CACHE.get(uuid); + } + public static void removeCache(UUID uuid) { CACHE.remove(uuid); } diff --git a/src/main/java/fr/openmc/api/packetmenulib/PacketMenuLib.java b/src/main/java/fr/openmc/api/packetmenulib/PacketMenuLib.java index 383d6d65e..54db1e02c 100644 --- a/src/main/java/fr/openmc/api/packetmenulib/PacketMenuLib.java +++ b/src/main/java/fr/openmc/api/packetmenulib/PacketMenuLib.java @@ -1,5 +1,6 @@ package fr.openmc.api.packetmenulib; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.api.packetmenulib.menu.Menu; import fr.openmc.api.packetmenulib.utils.PacketUtils; import lombok.Getter; @@ -32,10 +33,10 @@ public static void init(JavaPlugin plugin) { * @param menu the {@code Menu} instance to open for the player * @param player the {@code Player} who should see the menu */ - public static void openMenu(Menu menu, Player player) { - int windowId = ((CraftPlayer) player).getHandle().nextContainerCounter(); + public static void openMenu(Menu menu, OMCPlayer player) { + int windowId = player.getServerPlayer().nextContainerCounter(); windowIds.put(player.getUniqueId(), windowId); - PacketUtils.sendOpenInventoryPacket(player, windowId, menu.getInventoryType().getMenuType(), menu.getTitle()); + PacketUtils.sendOpenInventoryPacket(player.getPlayer(), windowId, menu.getInventoryType().getMenuType(), menu.getTitle()); openMenus.put(player.getUniqueId(), menu); updateMenu(menu, player, 1); } @@ -45,10 +46,10 @@ public static void openMenu(Menu menu, Player player) { * * @param player the player for whom the menu should be closed */ - public static void closeMenu(Player player) { + public static void closeMenu(OMCPlayer player) { Integer windowId = windowIds.get(player.getUniqueId()); if (windowId != null) { - PacketUtils.sendCloseInventoryPacket(player, windowId); + PacketUtils.sendCloseInventoryPacket(player.getPlayer(), windowId); } windowIds.remove(player.getUniqueId()); openMenus.remove(player.getUniqueId()); @@ -62,7 +63,7 @@ public static void closeMenu(Player player) { * @param player the Player whose menu is being updated * @param stateId the state ID to be sent with the update */ - public static void updateMenu(Menu menu, Player player, Integer stateId) { + public static void updateMenu(Menu menu, OMCPlayer player, Integer stateId) { UUID playerUUID = player.getUniqueId(); Integer windowId = windowIds.get(playerUUID); @@ -70,9 +71,11 @@ public static void updateMenu(Menu menu, Player player, Integer stateId) { openMenus.remove(playerUUID); return; } + ItemStack cursorItem = menu.isCursorItemEnabled() ? getCursorItem() : null; List items = createItemList(menu); - PacketUtils.sendContainerContentPacket(player, windowId, stateId, items, cursorItem); + PacketUtils.sendContainerContentPacket(player.getPlayer(), windowId, stateId, items, cursorItem); + } /** @@ -81,9 +84,9 @@ public static void updateMenu(Menu menu, Player player, Integer stateId) { * * @param player the player whose inventory needs to be updated */ - public static void updateInv(Player player) { + public static void updateInv(OMCPlayer player) { List items = getPlayerItems(player); - PacketUtils.sendContainerContentPacket(player, 0, 1, items, new ItemStack(Material.AIR)); + PacketUtils.sendContainerContentPacket(player.getPlayer(), 0, 1, items, new ItemStack(Material.AIR)); } /** @@ -126,7 +129,7 @@ private static List createItemList(Menu menu) { * @param player the player whose inventory items are to be retrieved * @return a list of {@code ItemStack} representing the player's inventory items */ - private static List getPlayerItems(Player player) { + private static List getPlayerItems(OMCPlayer player) { List items = new ArrayList<>(Collections.nCopies(45, new ItemStack(Material.AIR))); ItemStack[] contents = player.getInventory().getContents(); // hotbar diff --git a/src/main/java/fr/openmc/api/packetmenulib/PacketMenuListener.java b/src/main/java/fr/openmc/api/packetmenulib/PacketMenuListener.java index a02d30992..642786f20 100644 --- a/src/main/java/fr/openmc/api/packetmenulib/PacketMenuListener.java +++ b/src/main/java/fr/openmc/api/packetmenulib/PacketMenuListener.java @@ -5,6 +5,7 @@ import com.comphenix.protocol.events.PacketAdapter; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketEvent; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.api.packetmenulib.events.InventoryClickEvent; import fr.openmc.api.packetmenulib.events.InventoryCloseEvent; import fr.openmc.api.packetmenulib.menu.ClickType; @@ -32,20 +33,19 @@ public void onPacketSending(PacketEvent event) { if (event.getPacketType() == PacketType.Play.Server.OPEN_WINDOW) { PacketContainer packet = event.getPacket(); int windowId = packet.getIntegers().read(0); - Player player = event.getPlayer(); + OMCPlayer player = OMCPlayer.of(event.getPlayer()); UUID uuid = player.getUniqueId(); if (PacketMenuLib.getOpenMenus().containsKey(uuid) && PacketMenuLib.getWindowIds().get(uuid) != windowId) { PacketMenuLib.getOpenMenus().get(uuid).onInventoryClose(new InventoryCloseEvent(player)); PacketMenuLib.getOpenMenus().remove(uuid); PacketMenuLib.getWindowIds().remove(uuid); - PacketMenuLib.updateInv(Objects.requireNonNull(player)); + PacketMenuLib.updateInv(player); } } else if (event.getPacketType() == PacketType.Play.Server.SET_SLOT && PacketMenuLib.getOpenMenus().containsKey(event.getPlayer().getUniqueId())) { event.setCancelled(true); } else if (event.getPacketType() == PacketType.Play.Server.WINDOW_ITEMS) { - Player player = event.getPlayer(); - UUID uuid = player.getUniqueId(); + UUID uuid = event.getPlayer().getUniqueId(); if (!PacketMenuLib.getOpenMenus().containsKey(uuid)) return; @@ -68,7 +68,7 @@ public void onPacketReceiving(PacketEvent event) { int mode = ((ContainerInput) packet.getStructures().withType(ContainerInput.class).read(0)).ordinal(); if (PacketMenuLib.getWindowIds().containsKey(event.getPlayer().getUniqueId()) && windowId == PacketMenuLib.getWindowIds().get(event.getPlayer().getUniqueId())) { - Player player = event.getPlayer(); + OMCPlayer player = OMCPlayer.of(event.getPlayer()); event.setCancelled(true); UUID uuid = player.getUniqueId(); @@ -91,14 +91,14 @@ public void onPacketReceiving(PacketEvent event) { } } } else if (event.getPacketType() == PacketType.Play.Client.CLOSE_WINDOW) { - Player player = event.getPlayer(); + OMCPlayer player = OMCPlayer.of(event.getPlayer()); UUID uuid = player.getUniqueId(); if (PacketMenuLib.getOpenMenus().containsKey(uuid)) { - PacketMenuLib.getOpenMenus().get(uuid).onInventoryClose(new InventoryCloseEvent(player)); + PacketMenuLib.getOpenMenus().get(uuid).onInventoryClose(new InventoryCloseEvent(player.getPlayer())); PacketMenuLib.getOpenMenus().remove(uuid); PacketMenuLib.getWindowIds().remove(uuid); - PacketMenuLib.updateInv(Objects.requireNonNull(player)); + PacketMenuLib.updateInv(player); } // We don't verify if it is a good window id because if we do, the player can close the inventory without a packet and the event will never be called } } diff --git a/src/main/java/fr/openmc/api/packetmenulib/events/InventoryClickEvent.java b/src/main/java/fr/openmc/api/packetmenulib/events/InventoryClickEvent.java index 5849f55c6..5b605c2d2 100644 --- a/src/main/java/fr/openmc/api/packetmenulib/events/InventoryClickEvent.java +++ b/src/main/java/fr/openmc/api/packetmenulib/events/InventoryClickEvent.java @@ -1,7 +1,8 @@ package fr.openmc.api.packetmenulib.events; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.api.packetmenulib.menu.ClickType; import org.bukkit.entity.Player; -public record InventoryClickEvent(ClickType clickType, int slot, Player player) { +public record InventoryClickEvent(ClickType clickType, int slot, OMCPlayer player) { } diff --git a/src/main/java/fr/openmc/core/features/mainmenu/MainMenu.java b/src/main/java/fr/openmc/core/features/mainmenu/MainMenu.java index 203e42281..c6a38a4d9 100644 --- a/src/main/java/fr/openmc/core/features/mainmenu/MainMenu.java +++ b/src/main/java/fr/openmc/core/features/mainmenu/MainMenu.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.mainmenu; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.api.packetmenulib.PacketMenuLib; import fr.openmc.core.OMCPlugin; import fr.openmc.core.bootstrap.features.Feature; @@ -30,7 +31,7 @@ public Set getCommands() { ); } - public static void openMainMenu(Player player) { + public static void openMainMenu(OMCPlayer player) { PacketMenuLib.openMenu(new Page1(player), player); } } diff --git a/src/main/java/fr/openmc/core/features/mainmenu/commands/MainMenuCommand.java b/src/main/java/fr/openmc/core/features/mainmenu/commands/MainMenuCommand.java index cbcc98e67..ade984a94 100644 --- a/src/main/java/fr/openmc/core/features/mainmenu/commands/MainMenuCommand.java +++ b/src/main/java/fr/openmc/core/features/mainmenu/commands/MainMenuCommand.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.mainmenu.commands; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.features.mainmenu.MainMenu; import org.bukkit.entity.Player; import revxrsal.commands.annotation.Command; @@ -10,7 +11,7 @@ public class MainMenuCommand { @Command({"menu", "mainmenu"}) @Description("Permet d'ouvrir le menu principal d'OpenMC") @CommandPermission("omc.commands.menu") - public void menuCommand(Player player) { + public void menuCommand(OMCPlayer player) { MainMenu.openMainMenu(player); } } diff --git a/src/main/java/fr/openmc/core/features/mainmenu/listeners/MainMenuListener.java b/src/main/java/fr/openmc/core/features/mainmenu/listeners/MainMenuListener.java index 4dfbe0678..070282fdc 100644 --- a/src/main/java/fr/openmc/core/features/mainmenu/listeners/MainMenuListener.java +++ b/src/main/java/fr/openmc/core/features/mainmenu/listeners/MainMenuListener.java @@ -1,12 +1,10 @@ package fr.openmc.core.features.mainmenu.listeners; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.OMCPlugin; import fr.openmc.core.features.mainmenu.MainMenu; import fr.openmc.core.utils.text.messages.TranslationManager; -import io.netty.channel.Channel; -import io.netty.channel.ChannelDuplexHandler; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelPromise; +import io.netty.channel.*; import io.papermc.paper.adventure.PaperAdventure; import lombok.Getter; import net.minecraft.advancements.*; @@ -89,14 +87,17 @@ private static org.bukkit.inventory.ItemStack getInvisibleItem() { return item; } - public void inject(Player player) { - ServerGamePacketListenerImpl connection = ((CraftPlayer) player).getHandle().connection; + public void inject(UUID playerUUID, ServerGamePacketListenerImpl connection) { Channel channel = connection.connection.channel; - UUID playerUUID = player.getUniqueId(); + if (!channel.isOpen()) return; - if (channel.pipeline().get("packet_listener") != null) return; + ChannelPipeline pipeline = channel.pipeline(); + if (pipeline.get("packet_listener") != null) return; - channel.pipeline().addBefore("packet_handler", "packet_listener", new ChannelDuplexHandler() { + ChannelHandlerContext ctx = pipeline.context(net.minecraft.network.Connection.class); + if (ctx == null) return; + + pipeline.addBefore(ctx.name(), "packet_listener", new ChannelDuplexHandler() { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { if (msg instanceof ServerboundSeenAdvancementsPacket packet) { @@ -104,7 +105,7 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception new BukkitRunnable() { @Override public void run() { - MainMenu.openMainMenu(player); + MainMenu.openMainMenu(OMCPlayer.of(playerUUID)); } }.runTask(OMCPlugin.getInstance()); } else if (packet.getAction() == ServerboundSeenAdvancementsPacket.Action.CLOSED_SCREEN && enabledAdvancements.contains(playerUUID)) { @@ -129,7 +130,11 @@ public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) @EventHandler void onPlayerJoin(PlayerJoinEvent event) { - inject(event.getPlayer()); + Player bukkitPlayer = event.getPlayer(); + ServerGamePacketListenerImpl connection = + ((CraftPlayer) bukkitPlayer).getHandle().connection; + + inject(bukkitPlayer.getUniqueId(), connection); } @EventHandler 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 a139f7a32..58d050d42 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 @@ -69,7 +69,7 @@ public class Page1 implements Menu { private static final Set MAILBOX_SLOTS = Set.of(85, 86, 87); private static final int ADVANCEMENTS_SLOT = 88; - public Page1(Player player) { + public Page1(OMCPlayer player) { City playerCity = CityManager.getPlayerCity(player.getUniqueId()); ItemStack cityItem = new ItemStack(Material.PAPER); cityItem.editMeta(meta -> { @@ -251,13 +251,11 @@ public void onInventoryClick(InventoryClickEvent event) { return; } - if (event.clickType() != ClickType.LEFT_CLICK) { - return; - } + if (event.clickType() != ClickType.LEFT_CLICK) return; if (DreamUtils.isInDreamWorld(player)) { PacketMenuLib.closeMenu(player); - MessagesManager.sendMessage(player, + player.message().send( TranslationManager.translation("feature.mainmenu.message.dream_world") .color(NamedTextColor.RED), Prefix.OPENMC, MessageType.ERROR, true); @@ -289,7 +287,7 @@ public void onInventoryClick(InventoryClickEvent event) { } else if (ADVANCEMENTS_SLOT == slot) { PacketMenuLib.closeMenu(player); Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> { - ServerPlayer nmsPlayer = ((CraftPlayer) player).getHandle(); + ServerPlayer nmsPlayer = player.getServerPlayer(); ClientboundUpdateAdvancementsPacket packet = MainMenuListener.getAdvancementPackets().get(nmsPlayer.getUUID()); if (packet == null) return; 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 f0d31df88..b6124efb7 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 @@ -166,13 +166,11 @@ public void onInventoryClick(InventoryClickEvent event) { return; } - if (event.clickType() != ClickType.LEFT_CLICK) { - return; - } + if (event.clickType() != ClickType.LEFT_CLICK) return; if (DreamUtils.isInDreamWorld(player)) { PacketMenuLib.closeMenu(player); - MessagesManager.sendMessage(player, + player.message().send( TranslationManager.translation("feature.mainmenu.message.dream_world") .color(NamedTextColor.RED), Prefix.OPENMC, MessageType.ERROR, true); @@ -189,7 +187,7 @@ public void onInventoryClick(InventoryClickEvent event) { } else if (ADVANCEMENTS_SLOT == slot) { PacketMenuLib.closeMenu(player); Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> { - ServerPlayer nmsPlayer = ((CraftPlayer) player).getHandle(); + ServerPlayer nmsPlayer = player.getServerPlayer(); ClientboundUpdateAdvancementsPacket packet = MainMenuListener.getAdvancementPackets().get(nmsPlayer.getUUID()); if (packet == null) return; @@ -204,7 +202,7 @@ public void onInventoryClick(InventoryClickEvent event) { }); } else if (LEADERBOARD_SLOTS.contains(slot)) { PacketMenuLib.closeMenu(player); - MessagesManager.sendMessage(player, + player.message().send( TranslationManager.translation( "feature.mainmenu.message.leaderboard_dev", Component.text(FontImageWrapper.replaceFontImages(":sad:")) @@ -218,7 +216,7 @@ public void onInventoryClick(InventoryClickEvent event) { || COMING_SOON_3_SLOTS.contains(slot) || COMING_SOON_4_SLOTS.contains(slot) || COMING_SOON_5_SLOTS.contains(slot)) { PacketMenuLib.closeMenu(player); - MessagesManager.sendMessage(player, TranslationManager.translation("feature.mainmenu.message.coming_soon") + player.message().send(TranslationManager.translation("feature.mainmenu.message.coming_soon") .color(NamedTextColor.GOLD), Prefix.OPENMC, MessageType.INFO, true); } } diff --git a/src/main/java/fr/openmc/core/listeners/OMCPlayerCacheListener.java b/src/main/java/fr/openmc/core/listeners/OMCPlayerCacheListener.java index 147e506e3..e868ea369 100644 --- a/src/main/java/fr/openmc/core/listeners/OMCPlayerCacheListener.java +++ b/src/main/java/fr/openmc/core/listeners/OMCPlayerCacheListener.java @@ -1,5 +1,6 @@ package fr.openmc.core.listeners; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.api.omcplayer.OMCPlayerImpl; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; From 66ef526dd499bd6bc7b99dd6a6829256e369bbc1 Mon Sep 17 00:00:00 2001 From: iambibi <89582596+iambibi@users.noreply.github.com> Date: Thu, 1 Oct 2026 18:53:20 +0200 Subject: [PATCH 08/10] fix: OMCPlayer instance when player join and quit and join --- src/main/java/fr/openmc/api/omcplayer/OMCPlayerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fr/openmc/api/omcplayer/OMCPlayerImpl.java b/src/main/java/fr/openmc/api/omcplayer/OMCPlayerImpl.java index f065a60c4..57f1469d2 100644 --- a/src/main/java/fr/openmc/api/omcplayer/OMCPlayerImpl.java +++ b/src/main/java/fr/openmc/api/omcplayer/OMCPlayerImpl.java @@ -53,7 +53,7 @@ static OMCPlayer of(Player player) { static OMCPlayer of(UUID playerUUID) { Player playerBukkit = Bukkit.getPlayer(playerUUID); - if (playerBukkit == null) return; + if (playerBukkit == null) throw new IllegalArgumentException("player ne peut pas être null"); return of(playerBukkit); } From 7c1b4c95ca347b69ed16683ae9a7fffb367f6167 Mon Sep 17 00:00:00 2001 From: iambibi <89582596+iambibi@users.noreply.github.com> Date: Thu, 1 Oct 2026 20:43:38 +0200 Subject: [PATCH 09/10] fix: placehodlers --- .../core/features/quests/objects/Quest.java | 7 +++- .../features/quests/objects/QuestStep.java | 7 +++- .../translations/default/quests.properties | 34 +++++++++---------- .../translations/en_GB/quests.properties | 34 +++++++++---------- .../translations/en_US/quests.properties | 34 +++++++++---------- 5 files changed, 63 insertions(+), 53 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/quests/objects/Quest.java b/src/main/java/fr/openmc/core/features/quests/objects/Quest.java index 83b04dc1e..943da7191 100644 --- a/src/main/java/fr/openmc/core/features/quests/objects/Quest.java +++ b/src/main/java/fr/openmc/core/features/quests/objects/Quest.java @@ -15,6 +15,7 @@ import lombok.Getter; import lombok.Setter; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TranslatableComponent; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextColor; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; @@ -650,7 +651,11 @@ public void incrementStepProgressByDescription(UUID playerUUID, String stepDescr } private Component formattedQuestComponent(Component initial, String target, String s) { - return initial.replaceText(b -> { + Component result = initial; + if (result instanceof TranslatableComponent translatable) { + result = translatable.arguments(Component.text(target), Component.text(s)); + } + return result.replaceText(b -> { b.matchLiteral("[target]"); b.replacement(String.valueOf(target)); }).replaceText(b -> { diff --git a/src/main/java/fr/openmc/core/features/quests/objects/QuestStep.java b/src/main/java/fr/openmc/core/features/quests/objects/QuestStep.java index d901f9dec..33c1c4798 100644 --- a/src/main/java/fr/openmc/core/features/quests/objects/QuestStep.java +++ b/src/main/java/fr/openmc/core/features/quests/objects/QuestStep.java @@ -2,6 +2,7 @@ import lombok.Getter; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TranslatableComponent; import java.util.Map; import java.util.UUID; @@ -35,7 +36,11 @@ public QuestStep(Component description, int target) { * @return The description of the step with the target number replaced */ public Component getDescription() { - return this.description.replaceText(b -> { + Component result = this.description; + if (result instanceof TranslatableComponent translatable) { + result = translatable.arguments(Component.text(this.target)); + } + return result.replaceText(b -> { b.matchLiteral("[target]"); b.replacement(String.valueOf(this.target)); }); diff --git a/src/main/resources/translations/default/quests.properties b/src/main/resources/translations/default/quests.properties index bb50e511e..d8a18efae 100644 --- a/src/main/resources/translations/default/quests.properties +++ b/src/main/resources/translations/default/quests.properties @@ -28,19 +28,19 @@ feature.quests.message.step_completed=✓ Étape %1$s de %2$s validée ! feature.quests.break_log.lore.line=%1$s : %2$s points feature.quests.break_diamond.name=Richou -feature.quests.break_diamond.description=Casser [target] minerai[s] de diamant +feature.quests.break_diamond.description=Casser %1$s minerai%2$s de diamant feature.quests.break_log.name=Bûcheron de l'extrême -feature.quests.break_log.description=Casser [target] bûches +feature.quests.break_log.description=Casser %1$s bûches feature.quests.break_stone.name=Casseur de pierres -feature.quests.break_stone.description=Miner [target] blocs de pierre +feature.quests.break_stone.description=Miner %1$s blocs de pierre feature.quests.break_wheat.name=Fermier dévoué -feature.quests.break_wheat.description=Récolter [target] blé +feature.quests.break_wheat.description=Récolter %1$s blé feature.quests.chicken_thrower.name=Lanceur de poules -feature.quests.chicken_thrower.description=Lancer [target] oeufs +feature.quests.chicken_thrower.description=Lancer %1$s oeufs feature.quests.consume_kebab.name=Miam miam -feature.quests.consume_kebab.description=Manger [target] kebab[s] +feature.quests.consume_kebab.description=Manger %1$s kebab%2$s feature.quests.craft_cake.name=Le pâtissier -feature.quests.craft_cake.description=Craft [target] gâteaux +feature.quests.craft_cake.description=Craft %1$s gâteaux feature.quests.craft_diamond_armor.name=Armure précieuse feature.quests.craft_diamond_armor.description=Fabriquer une armure complète en diamant feature.quests.craft_diamond_armor.step.helmet=Casque en diamant @@ -48,25 +48,25 @@ feature.quests.craft_diamond_armor.step.chestplate=Plastron en diamant feature.quests.craft_diamond_armor.step.leggings=Pantalon en diamant feature.quests.craft_diamond_armor.step.boots=Bottes en diamant feature.quests.craft_the_mixture.name=The Mixture -feature.quests.craft_the_mixture.description=Fabriquer [target] The Mixture[s] +feature.quests.craft_the_mixture.description=Fabriquer %1$s The Mixture%2$s feature.quests.enchant_first_item.name=Abracadabra feature.quests.enchant_first_item.description=Enchanter un objet pour la première fois feature.quests.fishing.name=Pêcheur expérimenté -feature.quests.fishing.description=Pêcher [target] poissons +feature.quests.fishing.description=Pêcher %1$s poissons feature.quests.kill_players.name=Tueur à gage -feature.quests.kill_players.description=Tuer [target] joueurs +feature.quests.kill_players.description=Tuer %1$s joueurs feature.quests.kill_super_creeper.name=Le boss des creepers -feature.quests.kill_super_creeper.description=Tuer [target] creepers super chargés +feature.quests.kill_super_creeper.description=Tuer %1$s creepers super chargés feature.quests.kill_zombie.name=Apocalypse zombie ? -feature.quests.kill_zombie.description=Tuer [target] zombies +feature.quests.kill_zombie.description=Tuer %1$s zombies feature.quests.mine_aywenite.name=Ohhh... c'est précieux ça ? -feature.quests.mine_aywenite.description=Miner [target] Aywenite[s] +feature.quests.mine_aywenite.description=Miner %1$s Aywenite%2$s feature.quests.save_the_earth.name=Sauvons la planète -feature.quests.save_the_earth.description=Planter [target] arbres et les faire grandir avec des poudres d'os +feature.quests.save_the_earth.description=Planter %1$s arbres et les faire grandir avec des poudres d'os feature.quests.smelt_iron.name=Chaud devant ! -feature.quests.smelt_iron.description=Faire fondre [target] lingots de fer +feature.quests.smelt_iron.description=Faire fondre %1$s lingots de fer feature.quests.walk.name=Le randonneur -feature.quests.walk.description=Marcher [target] blocs +feature.quests.walk.description=Marcher %1$s blocs feature.quests.win_contest.name=Choisir son camp -feature.quests.win_contest.description=Gagne [target] contest +feature.quests.win_contest.description=Gagne %1$s contest diff --git a/src/main/resources/translations/en_GB/quests.properties b/src/main/resources/translations/en_GB/quests.properties index 309f0d99e..ecd90d813 100644 --- a/src/main/resources/translations/en_GB/quests.properties +++ b/src/main/resources/translations/en_GB/quests.properties @@ -28,19 +28,19 @@ feature.quests.message.step_completed=✓ Step %1$s of %2$s validated! feature.quests.break_log.lore.line=%1$s : %2$s points feature.quests.break_diamond.name=Richou -feature.quests.break_diamond.description=Break diamond [target] ore[s] +feature.quests.break_diamond.description=Break diamond %1$s ore%2$s feature.quests.break_log.name=Extreme lumberjack -feature.quests.break_log.description=Break [target] logs +feature.quests.break_log.description=Break %1$s logs feature.quests.break_stone.name=Stone Breaker -feature.quests.break_stone.description=Mine [target] stone blocks +feature.quests.break_stone.description=Mine %1$s stone blocks feature.quests.break_wheat.name=Dedicated farmer -feature.quests.break_wheat.description=Harvest [target] wheat +feature.quests.break_wheat.description=Harvest %1$s wheat feature.quests.chicken_thrower.name=Chicken thrower -feature.quests.chicken_thrower.description=Throw [target] eggs +feature.quests.chicken_thrower.description=Throw %1$s eggs feature.quests.consume_kebab.name=Yum yum -feature.quests.consume_kebab.description=Eat [target] kebab[s] +feature.quests.consume_kebab.description=Eat %1$s kebab%2$s feature.quests.craft_cake.name=The pastry chef -feature.quests.craft_cake.description=Craft [target] cakes +feature.quests.craft_cake.description=Craft %1$s cakes feature.quests.craft_diamond_armor.name=Precious armor feature.quests.craft_diamond_armor.description=Craft Full Diamond Armor feature.quests.craft_diamond_armor.step.helmet=Diamond Helmet @@ -48,25 +48,25 @@ feature.quests.craft_diamond_armor.step.chestplate=Diamond breastplate feature.quests.craft_diamond_armor.step.leggings=Diamond pants feature.quests.craft_diamond_armor.step.boots=Diamond Boots feature.quests.craft_the_mixture.name=The Mixture -feature.quests.craft_the_mixture.description=Make [target] The Mixture[s] +feature.quests.craft_the_mixture.description=Make %1$s The Mixture%2$s feature.quests.enchant_first_item.name=Abracadabra feature.quests.enchant_first_item.description=Enchant an item for the first time feature.quests.fishing.name=Experienced fisherman -feature.quests.fishing.description=Catch [target] fish +feature.quests.fishing.description=Catch %1$s fish feature.quests.kill_players.name=Hitman -feature.quests.kill_players.description=Kill [target] players +feature.quests.kill_players.description=Kill %1$s players feature.quests.kill_super_creeper.name=The creeper boss -feature.quests.kill_super_creeper.description=Kill [target] Super Charged Creepers +feature.quests.kill_super_creeper.description=Kill %1$s Super Charged Creepers feature.quests.kill_zombie.name=Zombie Apocalypse? -feature.quests.kill_zombie.description=Kill [target] zombies +feature.quests.kill_zombie.description=Kill %1$s zombies feature.quests.mine_aywenite.name=Ohhh... is that precious? -feature.quests.mine_aywenite.description=Mine [target] Aywenite[s] +feature.quests.mine_aywenite.description=Mine %1$s Aywenite%2$s feature.quests.save_the_earth.name=Let's save the planet -feature.quests.save_the_earth.description=Plant [target] trees and make them grow with bone meal +feature.quests.save_the_earth.description=Plant %1$s trees and make them grow with bone meal feature.quests.smelt_iron.name=Hot in front! -feature.quests.smelt_iron.description=Melt [target] iron ingots +feature.quests.smelt_iron.description=Melt %1$s iron ingots feature.quests.walk.name=The hiker -feature.quests.walk.description=Walk [target] blocks +feature.quests.walk.description=Walk %1$s blocks feature.quests.win_contest.name=Choose your side -feature.quests.win_contest.description=Win [target] contest +feature.quests.win_contest.description=Win %1$s contest diff --git a/src/main/resources/translations/en_US/quests.properties b/src/main/resources/translations/en_US/quests.properties index 309f0d99e..ecd90d813 100644 --- a/src/main/resources/translations/en_US/quests.properties +++ b/src/main/resources/translations/en_US/quests.properties @@ -28,19 +28,19 @@ feature.quests.message.step_completed=✓ Step %1$s of %2$s validated! feature.quests.break_log.lore.line=%1$s : %2$s points feature.quests.break_diamond.name=Richou -feature.quests.break_diamond.description=Break diamond [target] ore[s] +feature.quests.break_diamond.description=Break diamond %1$s ore%2$s feature.quests.break_log.name=Extreme lumberjack -feature.quests.break_log.description=Break [target] logs +feature.quests.break_log.description=Break %1$s logs feature.quests.break_stone.name=Stone Breaker -feature.quests.break_stone.description=Mine [target] stone blocks +feature.quests.break_stone.description=Mine %1$s stone blocks feature.quests.break_wheat.name=Dedicated farmer -feature.quests.break_wheat.description=Harvest [target] wheat +feature.quests.break_wheat.description=Harvest %1$s wheat feature.quests.chicken_thrower.name=Chicken thrower -feature.quests.chicken_thrower.description=Throw [target] eggs +feature.quests.chicken_thrower.description=Throw %1$s eggs feature.quests.consume_kebab.name=Yum yum -feature.quests.consume_kebab.description=Eat [target] kebab[s] +feature.quests.consume_kebab.description=Eat %1$s kebab%2$s feature.quests.craft_cake.name=The pastry chef -feature.quests.craft_cake.description=Craft [target] cakes +feature.quests.craft_cake.description=Craft %1$s cakes feature.quests.craft_diamond_armor.name=Precious armor feature.quests.craft_diamond_armor.description=Craft Full Diamond Armor feature.quests.craft_diamond_armor.step.helmet=Diamond Helmet @@ -48,25 +48,25 @@ feature.quests.craft_diamond_armor.step.chestplate=Diamond breastplate feature.quests.craft_diamond_armor.step.leggings=Diamond pants feature.quests.craft_diamond_armor.step.boots=Diamond Boots feature.quests.craft_the_mixture.name=The Mixture -feature.quests.craft_the_mixture.description=Make [target] The Mixture[s] +feature.quests.craft_the_mixture.description=Make %1$s The Mixture%2$s feature.quests.enchant_first_item.name=Abracadabra feature.quests.enchant_first_item.description=Enchant an item for the first time feature.quests.fishing.name=Experienced fisherman -feature.quests.fishing.description=Catch [target] fish +feature.quests.fishing.description=Catch %1$s fish feature.quests.kill_players.name=Hitman -feature.quests.kill_players.description=Kill [target] players +feature.quests.kill_players.description=Kill %1$s players feature.quests.kill_super_creeper.name=The creeper boss -feature.quests.kill_super_creeper.description=Kill [target] Super Charged Creepers +feature.quests.kill_super_creeper.description=Kill %1$s Super Charged Creepers feature.quests.kill_zombie.name=Zombie Apocalypse? -feature.quests.kill_zombie.description=Kill [target] zombies +feature.quests.kill_zombie.description=Kill %1$s zombies feature.quests.mine_aywenite.name=Ohhh... is that precious? -feature.quests.mine_aywenite.description=Mine [target] Aywenite[s] +feature.quests.mine_aywenite.description=Mine %1$s Aywenite%2$s feature.quests.save_the_earth.name=Let's save the planet -feature.quests.save_the_earth.description=Plant [target] trees and make them grow with bone meal +feature.quests.save_the_earth.description=Plant %1$s trees and make them grow with bone meal feature.quests.smelt_iron.name=Hot in front! -feature.quests.smelt_iron.description=Melt [target] iron ingots +feature.quests.smelt_iron.description=Melt %1$s iron ingots feature.quests.walk.name=The hiker -feature.quests.walk.description=Walk [target] blocks +feature.quests.walk.description=Walk %1$s blocks feature.quests.win_contest.name=Choose your side -feature.quests.win_contest.description=Win [target] contest +feature.quests.win_contest.description=Win %1$s contest From 962dea8e74d41d5d82f80c7d6875d207b6310354 Mon Sep 17 00:00:00 2001 From: iambibi <89582596+iambibi@users.noreply.github.com> Date: Thu, 1 Oct 2026 21:00:09 +0200 Subject: [PATCH 10/10] apply getNameWithHead in TPA, economy --- .../openmc/api/omcplayer/OMCPlayerImpl.java | 5 ++- .../features/bits/commands/BitsCommands.java | 24 +++++++++----- .../core/features/economy/commands/Money.java | 28 +++++++++++------ .../core/features/economy/commands/Pay.java | 4 +-- .../openmc/core/features/tpa/TPAManager.java | 31 ++++++++++--------- .../tpa/commands/TPACancelCommand.java | 17 +++++----- .../features/tpa/commands/TPACommand.java | 19 ++++++------ .../features/tpa/commands/TPADenyCommand.java | 21 +++++++------ .../tpa/commands/TPAcceptCommand.java | 23 +++++++------- .../autocomplete/TpaPendingAutoComplete.java | 3 +- .../listeners/JoinQuitMessageListener.java | 13 +++++--- 11 files changed, 108 insertions(+), 80 deletions(-) diff --git a/src/main/java/fr/openmc/api/omcplayer/OMCPlayerImpl.java b/src/main/java/fr/openmc/api/omcplayer/OMCPlayerImpl.java index 57f1469d2..fa236c49f 100644 --- a/src/main/java/fr/openmc/api/omcplayer/OMCPlayerImpl.java +++ b/src/main/java/fr/openmc/api/omcplayer/OMCPlayerImpl.java @@ -44,7 +44,10 @@ static OMCPlayer of(Player player) { Player cachedBukkitPlayer = cachedPlayer.getPlayer(); - if (cachedBukkitPlayer == null) return new OMCPlayerImpl(player); + if (cachedBukkitPlayer == null + || !cachedBukkitPlayer.isOnline() + || !cachedBukkitPlayer.equals(player)) + return new OMCPlayerImpl(player); return cachedPlayer; }); diff --git a/src/main/java/fr/openmc/core/features/bits/commands/BitsCommands.java b/src/main/java/fr/openmc/core/features/bits/commands/BitsCommands.java index e8df1b4b0..897ece9d7 100644 --- a/src/main/java/fr/openmc/core/features/bits/commands/BitsCommands.java +++ b/src/main/java/fr/openmc/core/features/bits/commands/BitsCommands.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.bits.commands; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; import fr.openmc.core.commands.autocomplete.OnlinePlayerAutoComplete; import fr.openmc.core.features.bits.BitsManager; import fr.openmc.core.features.bits.menu.BitsMenu; @@ -33,12 +34,14 @@ public void getBits( @Subcommand("set") @Description("Permet de définir les bits d'un joueur") @CommandPermission("omc.admin.commands.bits.set") - public void setBits(CommandSender sender, @SuggestWith(OnlinePlayerAutoComplete.class) OfflinePlayer target, @Range(min = 1E-10) double amount) { + public void setBits(CommandSender sender, + @SuggestWith(OnlinePlayerAutoComplete.class) OMCOfflinePlayer target, + @Range(min = 1E-10) double amount) { BitsManager.setBits(target.getUniqueId(), amount); MessagesManager.sendMessage(sender, TranslationManager.translation( "feature.economy.bits.set.success", - Component.text(target.getName()).color(NamedTextColor.YELLOW), + target.getNameWithHead().color(NamedTextColor.YELLOW), Component.text(BitsManager.getFormattedBits(target.getUniqueId())).color(NamedTextColor.YELLOW) ), Prefix.OPENMC, MessageType.SUCCESS, true); @@ -55,13 +58,15 @@ public void setBits(CommandSender sender, @SuggestWith(OnlinePlayerAutoComplete. @Subcommand("add") @Description("Permet d'ajouter des bits à un joueur") @CommandPermission("omc.admin.commands.bits.add") - public void addBits(CommandSender player, @SuggestWith(OnlinePlayerAutoComplete.class) OfflinePlayer target, @Range(min = 1E-10) double amount) { + public void addBits(CommandSender player, + @SuggestWith(OnlinePlayerAutoComplete.class) OMCOfflinePlayer target, + @Range(min = 1E-10) double amount) { BitsManager.addBits(target.getUniqueId(), amount); MessagesManager.sendMessage(player, TranslationManager.translation( "feature.economy.bits.add.success", Component.text(BitsManager.getFormattedBits(target.getUniqueId())).color(NamedTextColor.YELLOW), - Component.text(target.getName()).color(NamedTextColor.YELLOW) + target.getNameWithHead().color(NamedTextColor.YELLOW) ), Prefix.OPENMC, MessageType.SUCCESS, true); if (target.isOnline()) { @@ -77,13 +82,15 @@ public void addBits(CommandSender player, @SuggestWith(OnlinePlayerAutoComplete. @Subcommand("remove") @Description("Permet de retirer des bits à un joueur") @CommandPermission("omc.admin.commands.bits.remove") - public void removeBits(CommandSender player, @SuggestWith(OnlinePlayerAutoComplete.class) OfflinePlayer target, @Range(min = 1E-10) double amount) { + public void removeBits(CommandSender player, + @SuggestWith(OnlinePlayerAutoComplete.class) OMCOfflinePlayer target, + @Range(min = 1E-10) double amount) { if (BitsManager.withdrawBits(target.getUniqueId(), amount)) { MessagesManager.sendMessage(player, TranslationManager.translation( "feature.economy.bits.remove.success", Component.text(BitsManager.getFormattedBits(target.getUniqueId())).color(NamedTextColor.YELLOW), - Component.text(target.getName()).color(NamedTextColor.YELLOW) + target.getNameWithHead().color(NamedTextColor.YELLOW) ), Prefix.OPENMC, MessageType.SUCCESS, true); if (target.isOnline()) { @@ -102,12 +109,13 @@ public void removeBits(CommandSender player, @SuggestWith(OnlinePlayerAutoComple @Subcommand("reset") @Description("Permet de réinitialiser les bits d'un joueur") @CommandPermission("omc.admin.commands.bits.reset") - public void resetBits(CommandSender player, @SuggestWith(OnlinePlayerAutoComplete.class) OfflinePlayer target) { + public void resetBits(CommandSender player, + @SuggestWith(OnlinePlayerAutoComplete.class) OMCOfflinePlayer target) { BitsManager.setBits(target.getUniqueId(), 0); MessagesManager.sendMessage(player, TranslationManager.translation( "feature.economy.bits.reset.success", - Component.text(target.getName()).color(NamedTextColor.YELLOW), + target.getNameWithHead().color(NamedTextColor.YELLOW), Component.text(EconomyManager.getFormattedNumber(0)).color(NamedTextColor.YELLOW) ), Prefix.OPENMC, MessageType.SUCCESS, true); diff --git a/src/main/java/fr/openmc/core/features/economy/commands/Money.java b/src/main/java/fr/openmc/core/features/economy/commands/Money.java index fb960c12b..f09c80f3f 100644 --- a/src/main/java/fr/openmc/core/features/economy/commands/Money.java +++ b/src/main/java/fr/openmc/core/features/economy/commands/Money.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.economy.commands; +import fr.openmc.api.omcplayer.OMCOfflinePlayer; import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.commands.autocomplete.OnlinePlayerAutoComplete; import fr.openmc.core.features.economy.EconomyManager; @@ -23,7 +24,7 @@ public class Money { @CommandPlaceholder() public void getMoney( CommandSender sender, - @Named("joueur") @Optional @SuggestWith(OnlinePlayerAutoComplete.class) @Default("me") OfflinePlayer target + @Named("joueur") @Optional @SuggestWith(OnlinePlayerAutoComplete.class) @Default("me") OMCOfflinePlayer target ) { if (sender instanceof OMCPlayer player && target == null) { player.message().sendInfo(TranslationManager.translation( @@ -39,7 +40,7 @@ public void getMoney( MessagesManager.sendMessage(sender, TranslationManager.translation( "feature.economy.money.others", - Component.text(target.getName()).color(NamedTextColor.YELLOW), + target.getNameWithHead().color(NamedTextColor.YELLOW), Component.text(EconomyManager.getFormattedBalance(target.getUniqueId())).color(NamedTextColor.YELLOW) ), Prefix.OPENMC, MessageType.INFO, true); @@ -52,12 +53,14 @@ public void getMoney( @Subcommand("set") @Description("Permet de définir l'argent d'un joueur") @CommandPermission("omc.admin.commands.money.set") - public void setMoney(CommandSender player, @SuggestWith(OnlinePlayerAutoComplete.class) OfflinePlayer target, @Range(min = 1E-10) double amount) { + public void setMoney(CommandSender player, + @SuggestWith(OnlinePlayerAutoComplete.class) OMCOfflinePlayer target, + @Range(min = 1E-10) double amount) { EconomyManager.setBalance(target.getUniqueId(), amount); MessagesManager.sendMessage(player, TranslationManager.translation( "feature.economy.money.set.success", - Component.text(target.getName()).color(NamedTextColor.YELLOW), + target.getNameWithHead().color(NamedTextColor.YELLOW), Component.text(EconomyManager.getFormattedNumber(amount)).color(NamedTextColor.YELLOW) ), Prefix.OPENMC, MessageType.SUCCESS, true); @@ -74,13 +77,15 @@ public void setMoney(CommandSender player, @SuggestWith(OnlinePlayerAutoComplete @Subcommand("add") @Description("Permet d'ajouter de l'argent à un joueur") @CommandPermission("omc.admin.commands.money.add") - public void addMoney(CommandSender player, @SuggestWith(OnlinePlayerAutoComplete.class) OfflinePlayer target, @Range(min = 1E-10) double amount) { + public void addMoney(CommandSender player, + @SuggestWith(OnlinePlayerAutoComplete.class) OMCOfflinePlayer target, + @Range(min = 1E-10) double amount) { EconomyManager.addBalance(target.getUniqueId(), amount, "Admin - Ajout par " + player == null ? "Console" : player.getName()); MessagesManager.sendMessage(player, TranslationManager.translation( "feature.economy.money.add.success", Component.text(EconomyManager.getFormattedNumber(amount)).color(NamedTextColor.YELLOW), - Component.text(target.getName()).color(NamedTextColor.YELLOW) + target.getNameWithHead().color(NamedTextColor.YELLOW) ), Prefix.OPENMC, MessageType.SUCCESS, true); if (target.isOnline()) { @@ -96,13 +101,15 @@ public void addMoney(CommandSender player, @SuggestWith(OnlinePlayerAutoComplete @Subcommand("remove") @Description("Permet de retirer de l'argent à un joueur") @CommandPermission("omc.admin.commands.money.remove") - public void removeMoney(CommandSender player, @SuggestWith(OnlinePlayerAutoComplete.class) OfflinePlayer target, @Range(min = 1E-10) double amount) { + public void removeMoney(CommandSender player, + @SuggestWith(OnlinePlayerAutoComplete.class) OMCOfflinePlayer target, + @Range(min = 1E-10) double amount) { if (EconomyManager.withdrawBalance(target.getUniqueId(), amount, "Admin - Retirer par " + player == null ? "Console" : player.getName())) { MessagesManager.sendMessage(player, TranslationManager.translation( "feature.economy.money.remove.success", Component.text(EconomyManager.getFormattedNumber(amount)).color(NamedTextColor.YELLOW), - Component.text(target.getName()).color(NamedTextColor.YELLOW) + target.getNameWithHead().color(NamedTextColor.YELLOW) ), Prefix.OPENMC, MessageType.SUCCESS, true); if (target.isOnline()) { @@ -121,12 +128,13 @@ public void removeMoney(CommandSender player, @SuggestWith(OnlinePlayerAutoCompl @Subcommand("reset") @Description("Permet de réinitialiser l'argent d'un joueur") @CommandPermission("omc.admin.commands.money.reset") - public void resetMoney(CommandSender player, @SuggestWith(OnlinePlayerAutoComplete.class) OfflinePlayer target) { + public void resetMoney(CommandSender player, + @SuggestWith(OnlinePlayerAutoComplete.class) OMCOfflinePlayer target) { EconomyManager.setBalance(target.getUniqueId(), 0); MessagesManager.sendMessage(player, TranslationManager.translation( "feature.economy.money.reset.success", - Component.text(target.getName()).color(NamedTextColor.YELLOW), + target.getNameWithHead().color(NamedTextColor.YELLOW), Component.text(EconomyManager.getFormattedNumber(0)).color(NamedTextColor.YELLOW) ), Prefix.OPENMC, MessageType.SUCCESS, true); diff --git a/src/main/java/fr/openmc/core/features/economy/commands/Pay.java b/src/main/java/fr/openmc/core/features/economy/commands/Pay.java index f5a9747eb..92e063a95 100644 --- a/src/main/java/fr/openmc/core/features/economy/commands/Pay.java +++ b/src/main/java/fr/openmc/core/features/economy/commands/Pay.java @@ -26,13 +26,13 @@ public void pay( if (player.economy().pay(target.getUniqueId(), amount, String.format("Paiement de %s à %s", player.getName(), target.getName()))) { player.message().sendSuccess(TranslationManager.translation( "feature.economy.pay.success", - Component.text(target.getName()).color(NamedTextColor.YELLOW), + target.getNameWithHead().color(NamedTextColor.YELLOW), Component.text(EconomyManager.getFormattedNumber(amount)).color(NamedTextColor.YELLOW) )); target.message().sendInfo(TranslationManager.translation( "feature.economy.pay.received", Component.text(EconomyManager.getFormattedNumber(amount)).color(NamedTextColor.YELLOW), - Component.text(player.getName()).color(NamedTextColor.YELLOW) + player.getNameWithHead().color(NamedTextColor.YELLOW) )); } else { player.message().sendError(TranslationManager.translation("feature.economy.pay.not_enough")); diff --git a/src/main/java/fr/openmc/core/features/tpa/TPAManager.java b/src/main/java/fr/openmc/core/features/tpa/TPAManager.java index 32e1a3e17..e056cd47d 100644 --- a/src/main/java/fr/openmc/core/features/tpa/TPAManager.java +++ b/src/main/java/fr/openmc/core/features/tpa/TPAManager.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.tpa; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.bootstrap.features.Feature; import fr.openmc.core.bootstrap.features.annotations.Credit; import fr.openmc.core.bootstrap.features.types.HasCommands; @@ -47,7 +48,7 @@ public Set getCommands() { * @param target The player to check * @return true if the player has a pending request, false otherwise */ - public static boolean hasPendingRequest(Player target) { + public static boolean hasPendingRequest(OMCPlayer target) { return tpaRequests.get(target.getUniqueId()) != null && !tpaRequests.get(target.getUniqueId()).isEmpty(); } @@ -56,7 +57,7 @@ public static boolean hasPendingRequest(Player target) { * @param player The player to check * @return true if the requester has a pending request, false otherwise */ - public static boolean requesterHasPendingRequest(Player player) { + public static boolean requesterHasPendingRequest(OMCPlayer player) { for (List requesters : tpaRequests.values()) { if (requesters.contains(player.getUniqueId())) { return true; @@ -70,7 +71,7 @@ public static boolean requesterHasPendingRequest(Player player) { * @param target The target player * @return true if the target has multiple requests, false otherwise */ - public static boolean hasMultipleRequests(Player target) { + public static boolean hasMultipleRequests(OMCPlayer target) { List requesters = tpaRequests.get(target.getUniqueId()); return requesters != null && requesters.size() > 1; } @@ -80,7 +81,7 @@ public static boolean hasMultipleRequests(Player target) { * @param player The player who sent the request * @param target The target player */ - public static void addRequest(Player player, Player target) { + public static void addRequest(OMCPlayer player, OMCPlayer target) { tpaRequests.computeIfAbsent(target.getUniqueId(), k -> new ArrayList<>()).add(player.getUniqueId()); tpaRequestTime.put(player.getUniqueId(), System.currentTimeMillis()); } @@ -90,18 +91,18 @@ public static void addRequest(Player player, Player target) { * @param player The player who sent the request * @param target The target player */ - public static void expireRequest(Player player, Player target) { + public static void expireRequest(OMCPlayer player, OMCPlayer target) { if (tpaRequests.containsKey(target.getUniqueId())) { if (tpaRequests.get(target.getUniqueId()).contains(player.getUniqueId())) { long requestTime = tpaRequestTime.get(player.getUniqueId()); if (System.currentTimeMillis() - requestTime >= 30000) { - MessagesManager.sendMessage(player, TranslationManager.translation( + player.message().send(TranslationManager.translation( "feature.tpa.expire.sender", - Component.text(target.getName()).color(NamedTextColor.GOLD) + target.getNameWithHead().color(NamedTextColor.GOLD) ), Prefix.OPENMC, MessageType.WARNING, true); - MessagesManager.sendMessage(target, TranslationManager.translation( + target.message().send(TranslationManager.translation( "feature.tpa.expire.target", - Component.text(player.getName()).color(NamedTextColor.GOLD) + player.getNameWithHead().color(NamedTextColor.GOLD) ), Prefix.OPENMC, MessageType.INFO, true); removeRequest(player, target); @@ -115,10 +116,10 @@ public static void expireRequest(Player player, Player target) { * @param target The target player * @return List of players who sent requests to the target player, or null if none */ - public static List getRequesters(Player target) { - List requesters = new ArrayList<>(); + public static List getRequesters(OMCPlayer target) { + List requesters = new ArrayList<>(); for (UUID playerUUID : tpaRequests.get(target.getUniqueId())) { - requesters.add(Bukkit.getServer().getPlayer(playerUUID)); + requesters.add(OMCPlayer.of(playerUUID)); } return requesters; } @@ -128,7 +129,7 @@ public static List getRequesters(Player target) { * @param player The player who sent the request * @param target The target player */ - public static void removeRequest(Player player, Player target) { + public static void removeRequest(OMCPlayer player, OMCPlayer target) { tpaRequests.compute(target.getUniqueId(), (key, requesters) -> { if (requesters != null) { requesters.remove(player.getUniqueId()); @@ -145,10 +146,10 @@ public static void removeRequest(Player player, Player target) { * @param requester The requester player * @return The target player, or null if not found */ - public static Player getTargetByRequester(Player requester) { + public static OMCPlayer getTargetByRequester(OMCPlayer requester) { for (UUID targetUUID : tpaRequests.keySet()) { if (tpaRequests.get(targetUUID).contains(requester.getUniqueId())) { - return Bukkit.getServer().getPlayer(targetUUID); + return OMCPlayer.of(targetUUID); } } return null; diff --git a/src/main/java/fr/openmc/core/features/tpa/commands/TPACancelCommand.java b/src/main/java/fr/openmc/core/features/tpa/commands/TPACancelCommand.java index 0c8c95e00..ea9d716a5 100644 --- a/src/main/java/fr/openmc/core/features/tpa/commands/TPACancelCommand.java +++ b/src/main/java/fr/openmc/core/features/tpa/commands/TPACancelCommand.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.tpa.commands; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.features.tpa.TPAManager; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.MessagesManager; @@ -19,27 +20,27 @@ public class TPACancelCommand { */ @Command("tpacancel") @CommandPermission("omc.commands.tpa") - public void tpaCancel(Player player) { + public void tpaCancel(OMCPlayer player) { if (!TPAManager.requesterHasPendingRequest(player)) { - MessagesManager.sendMessage(player, TranslationManager.translation("feature.tpa.cancel.no_pending"), Prefix.OPENMC, MessageType.ERROR, false); + player.message().send(TranslationManager.translation("feature.tpa.cancel.no_pending"), Prefix.OPENMC, MessageType.ERROR, false); return; } - Player target = TPAManager.getTargetByRequester(player); + OMCPlayer target = TPAManager.getTargetByRequester(player); if (target == null) { - MessagesManager.sendMessage(player, TranslationManager.translation("feature.tpa.cancel.player_not_online"), Prefix.OPENMC, MessageType.ERROR, true); + player.message().send(TranslationManager.translation("feature.tpa.cancel.player_not_online"), Prefix.OPENMC, MessageType.ERROR, true); return; } TPAManager.removeRequest(player, target); - MessagesManager.sendMessage(player, TranslationManager.translation( + player.message().send(TranslationManager.translation( "feature.tpa.cancel.success", - Component.text(target.getName()).color(NamedTextColor.GOLD) + target.getNameWithHead().color(NamedTextColor.GOLD) ), Prefix.OPENMC, MessageType.SUCCESS, true); - MessagesManager.sendMessage(target, TranslationManager.translation( + target.message().send(TranslationManager.translation( "feature.tpa.cancel.cancelled", - Component.text(player.getName()).color(NamedTextColor.DARK_RED) + player.getNameWithHead().color(NamedTextColor.DARK_RED) ), Prefix.OPENMC, MessageType.INFO, true); } diff --git a/src/main/java/fr/openmc/core/features/tpa/commands/TPACommand.java b/src/main/java/fr/openmc/core/features/tpa/commands/TPACommand.java index 058a97e22..4d5fb50dc 100644 --- a/src/main/java/fr/openmc/core/features/tpa/commands/TPACommand.java +++ b/src/main/java/fr/openmc/core/features/tpa/commands/TPACommand.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.tpa.commands; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.OMCPlugin; import fr.openmc.core.commands.autocomplete.OnlinePlayerAutoComplete; import fr.openmc.core.features.tpa.TPAManager; @@ -28,11 +29,11 @@ public class TPACommand { @Command({"tpa", "tpask"}) @CommandPermission("omc.commands.tpa") public void tpaAsk( - Player player, - @Named("player") @SuggestWith(OnlinePlayerAutoComplete.class) Player target + OMCPlayer player, + @Named("player") @SuggestWith(OnlinePlayerAutoComplete.class) OMCPlayer target ) { if (TPAManager.requesterHasPendingRequest(player)) { - MessagesManager.sendMessage(player, + player.message().send( TranslationManager.translation("feature.tpa.already_pending") .append(Component.text("\n")) .append(TranslationManager.translation("feature.tpa.already_pending_usage") @@ -42,27 +43,27 @@ public void tpaAsk( return; } if (target == null) { - MessagesManager.sendMessage(player, TranslationManager.translation("feature.tpa.player_not_found"), Prefix.OPENMC, MessageType.ERROR, false); + player.message().send(TranslationManager.translation("feature.tpa.player_not_found"), Prefix.OPENMC, MessageType.ERROR, false); return; } if (player == target) { - MessagesManager.sendMessage(player, TranslationManager.translation("feature.tpa.cannot_tp_yourself"), Prefix.OPENMC, MessageType.ERROR, false); + player.message().send(TranslationManager.translation("feature.tpa.cannot_tp_yourself"), Prefix.OPENMC, MessageType.ERROR, false); return; } if (TPAManager.hasPendingRequest(player)) { - MessagesManager.sendMessage(player, TranslationManager.translation("feature.tpa.already_have_pending"), Prefix.OPENMC, MessageType.ERROR, true); + player.message().send(TranslationManager.translation("feature.tpa.already_have_pending"), Prefix.OPENMC, MessageType.ERROR, true); return; } sendTPARequest(player, target); } - private void sendTPARequest(Player player, Player target) { + private void sendTPARequest(OMCPlayer player, OMCPlayer target) { TPAManager.addRequest(player, target); - MessagesManager.sendMessage(target, + target.message().send( TranslationManager.translation("feature.tpa.request.target_message", Component.text(player.getName()).color(NamedTextColor.GOLD)) .append(Component.text("\n")) .append(TranslationManager.translation("feature.tpa.request.target_accept") @@ -73,7 +74,7 @@ private void sendTPARequest(Player player, Player target) { .clickEvent(ClickEvent.runCommand("/tpadeny")) .hoverEvent(HoverEvent.showText(TranslationManager.translation("feature.tpa.request.hover.deny")))) , Prefix.OPENMC, MessageType.INFO, true); - MessagesManager.sendMessage(player, + player.message().send( TranslationManager.translation("feature.tpa.request.sender_message", Component.text(target.getName()).color(NamedTextColor.GOLD)) .append(Component.text("\n")) .append(TranslationManager.translation("feature.tpa.request.sender_cancel") diff --git a/src/main/java/fr/openmc/core/features/tpa/commands/TPADenyCommand.java b/src/main/java/fr/openmc/core/features/tpa/commands/TPADenyCommand.java index a55ed686a..28c02b410 100644 --- a/src/main/java/fr/openmc/core/features/tpa/commands/TPADenyCommand.java +++ b/src/main/java/fr/openmc/core/features/tpa/commands/TPADenyCommand.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.tpa.commands; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.features.tpa.TPAManager; import fr.openmc.core.features.tpa.commands.autocomplete.TpaPendingAutoComplete; import fr.openmc.core.utils.text.messages.MessageType; @@ -25,25 +26,25 @@ public class TPADenyCommand { @Command("tpadeny") @CommandPermission("omc.commands.tpa") public void tpaDeny( - Player target, + OMCPlayer target, @Optional @SuggestWith(TpaPendingAutoComplete.class) @Named("player") - Player player + OMCPlayer player ) { if (!TPAManager.hasPendingRequest(target)) { - MessagesManager.sendMessage(target, TranslationManager.translation("feature.tpa.deny.no_pending"), Prefix.OPENMC, MessageType.ERROR, false); + target.message().send(TranslationManager.translation("feature.tpa.deny.no_pending"), Prefix.OPENMC, MessageType.ERROR, false); return; } if (TPAManager.hasMultipleRequests(target)) { if (player == null) { - MessagesManager.sendMessage(target, TranslationManager.translation("feature.tpa.deny.multiple_requests"), Prefix.OPENMC, MessageType.ERROR, false); + target.message().send(TranslationManager.translation("feature.tpa.deny.multiple_requests"), Prefix.OPENMC, MessageType.ERROR, false); return; } if (!TPAManager.getRequesters(target).contains(player)) { - MessagesManager.sendMessage(target, TranslationManager.translation( + player.message().send(TranslationManager.translation( "feature.tpa.deny.no_request_from", - Component.text(player.getName()).color(NamedTextColor.GOLD) + player.getNameWithHead().color(NamedTextColor.GOLD) ), Prefix.OPENMC, MessageType.ERROR, false); return; } @@ -51,13 +52,13 @@ public void tpaDeny( player = TPAManager.getRequesters(target).getFirst(); } - MessagesManager.sendMessage(target, TranslationManager.translation( + target.message().send(TranslationManager.translation( "feature.tpa.deny.success", - Component.text(player.getName()).color(NamedTextColor.GOLD) + player.getNameWithHead().color(NamedTextColor.GOLD) ), Prefix.OPENMC, MessageType.SUCCESS, false); - MessagesManager.sendMessage(player, TranslationManager.translation( + player.message().send(TranslationManager.translation( "feature.tpa.deny.denied", - Component.text(target.getName()).color(NamedTextColor.GOLD) + target.getNameWithHead().color(NamedTextColor.GOLD) ), Prefix.OPENMC, MessageType.ERROR, false); TPAManager.removeRequest(player, target); diff --git a/src/main/java/fr/openmc/core/features/tpa/commands/TPAcceptCommand.java b/src/main/java/fr/openmc/core/features/tpa/commands/TPAcceptCommand.java index 36d1167b1..6f47f7fdb 100644 --- a/src/main/java/fr/openmc/core/features/tpa/commands/TPAcceptCommand.java +++ b/src/main/java/fr/openmc/core/features/tpa/commands/TPAcceptCommand.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.tpa.commands; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.features.tpa.TPAManager; import fr.openmc.core.features.tpa.commands.autocomplete.TpaPendingAutoComplete; import fr.openmc.core.utils.bukkit.PlayerUtils; @@ -30,8 +31,8 @@ public class TPAcceptCommand { @Command("tpaccept") @CommandPermission("omc.commands.tpa") public void tpAccept( - Player target, - @Optional @SuggestWith(TpaPendingAutoComplete.class) @Named("player") Player player + OMCPlayer target, + @Optional @SuggestWith(TpaPendingAutoComplete.class) @Named("player") OMCPlayer player ) { if (!TPAManager.hasPendingRequest(target)) { MessagesManager.sendMessage(target, TranslationManager.translation("feature.tpa.accept.no_pending"), Prefix.OPENMC, MessageType.ERROR, false); @@ -40,14 +41,14 @@ public void tpAccept( if (TPAManager.hasMultipleRequests(target)) { if (player == null) { - MessagesManager.sendMessage(target, TranslationManager.translation("feature.tpa.accept.multiple_requests"), Prefix.OPENMC, MessageType.ERROR, false); + target.message().send(TranslationManager.translation("feature.tpa.accept.multiple_requests"), Prefix.OPENMC, MessageType.ERROR, false); return; } if (!TPAManager.getRequesters(target).contains(player)) { - MessagesManager.sendMessage(target, TranslationManager.translation( + target.message().send(TranslationManager.translation( "feature.tpa.accept.no_request_from", - Component.text(player.getName()).color(NamedTextColor.GOLD) + player.getNameWithHead().color(NamedTextColor.GOLD) ), Prefix.OPENMC, MessageType.ERROR, false); return; } @@ -56,13 +57,13 @@ public void tpAccept( } if (target.getFallDistance() > 0) { - MessagesManager.sendMessage(target, TranslationManager.translation("feature.tpa.accept.falling"), Prefix.OPENMC, MessageType.ERROR, true); - MessagesManager.sendMessage(player, TranslationManager.translation("feature.tpa.accept.you_falling"), Prefix.OPENMC, MessageType.ERROR, true); + target.message().send(TranslationManager.translation("feature.tpa.accept.falling"), Prefix.OPENMC, MessageType.ERROR, true); + player.message().send(TranslationManager.translation("feature.tpa.accept.you_falling"), Prefix.OPENMC, MessageType.ERROR, true); return; } if (!player.isOnline()) { - MessagesManager.sendMessage(target, TranslationManager.translation("feature.tpa.accept.player_not_online"), Prefix.OPENMC, MessageType.ERROR, true); + target.message().send(TranslationManager.translation("feature.tpa.accept.player_not_online"), Prefix.OPENMC, MessageType.ERROR, true); return; } @@ -71,11 +72,11 @@ public void tpAccept( } } - private void teleport(Player requester, Player target) { + private void teleport(OMCPlayer requester, OMCPlayer target) { Location loc = target.getLocation(); PlayerUtils.sendFadeTitleTeleport(requester, loc); - MessagesManager.sendMessage(target, TranslationManager.translation("feature.tpa.accept.success"), Prefix.OPENMC, MessageType.SUCCESS, true); - MessagesManager.sendMessage(requester, TranslationManager.translation("feature.tpa.accept.success"), Prefix.OPENMC, MessageType.SUCCESS, true); + target.message().send(TranslationManager.translation("feature.tpa.accept.success"), Prefix.OPENMC, MessageType.SUCCESS, true); + requester.message().send(TranslationManager.translation("feature.tpa.accept.success"), Prefix.OPENMC, MessageType.SUCCESS, true); TPAManager.removeRequest(requester, target); } } diff --git a/src/main/java/fr/openmc/core/features/tpa/commands/autocomplete/TpaPendingAutoComplete.java b/src/main/java/fr/openmc/core/features/tpa/commands/autocomplete/TpaPendingAutoComplete.java index 0409245f9..389e7885b 100644 --- a/src/main/java/fr/openmc/core/features/tpa/commands/autocomplete/TpaPendingAutoComplete.java +++ b/src/main/java/fr/openmc/core/features/tpa/commands/autocomplete/TpaPendingAutoComplete.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.tpa.commands.autocomplete; +import fr.openmc.api.omcplayer.OMCPlayer; import fr.openmc.core.features.tpa.TPAManager; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @@ -13,7 +14,7 @@ public class TpaPendingAutoComplete implements SuggestionProvider getSuggestions(@NotNull ExecutionContext context) { - return TPAManager.getRequesters(context.actor().requirePlayer()).stream() + return TPAManager.getRequesters(OMCPlayer.of(context.actor().requirePlayer())).stream() .map(Player::getName) .toList(); } diff --git a/src/main/java/fr/openmc/core/listeners/JoinQuitMessageListener.java b/src/main/java/fr/openmc/core/listeners/JoinQuitMessageListener.java index 433cb263a..b4fbcbdfb 100644 --- a/src/main/java/fr/openmc/core/listeners/JoinQuitMessageListener.java +++ b/src/main/java/fr/openmc/core/listeners/JoinQuitMessageListener.java @@ -123,7 +123,9 @@ public void onPlayerQuit(PlayerQuitEvent event) { if (friend != null && friend.isOnline() && !friend.hasMetadata(OMCPlugin.VANISH_META_KEY)) { MessagesManager.sendMessage(friend, TranslationManager.translation( "core.player.quit.friend_offline", - Component.text(LuckPermsHook.getFormattedPAPIPrefix(player) + player.getName()).color(NamedTextColor.YELLOW) + Component.object(ObjectContents.playerHead(player.getUniqueId())).color(NamedTextColor.WHITE) + .appendSpace() + .append(Component.text(LuckPermsHook.getFormattedPAPIPrefix(player) + player.getName())).color(NamedTextColor.YELLOW) ), Prefix.FRIEND, MessageType.NONE, true); } } @@ -133,18 +135,19 @@ public void onPlayerQuit(PlayerQuitEvent event) { }); if (TPAManager.requesterHasPendingRequest(player)) { - Player targetTPA = TPAManager.getTargetByRequester(player); + OMCPlayer targetTPA = TPAManager.getTargetByRequester(player); + if (targetTPA == null) return; TPAManager.removeRequest(player, targetTPA); MessagesManager.sendMessage(targetTPA, TranslationManager.translation( "core.player.tpa.expired_target", - Component.text(player.getName()).color(NamedTextColor.GOLD) + targetTPA.getNameWithHead().color(NamedTextColor.GOLD) ), Prefix.OPENMC, MessageType.INFO, true); } else if (TPAManager.hasPendingRequest(player)) { - for (Player requester : TPAManager.getRequesters(player)) { + for (OMCPlayer requester : TPAManager.getRequesters(player)) { TPAManager.removeRequest(requester, player); MessagesManager.sendMessage(requester, TranslationManager.translation( "core.player.tpa.expired_requester", - Component.text(player.getName()).color(NamedTextColor.GOLD) + requester.getNameWithHead().color(NamedTextColor.GOLD) ), Prefix.OPENMC, MessageType.WARNING, true); } }