diff --git a/src/main/java/fr/openmc/core/features/city/City.java b/src/main/java/fr/openmc/core/features/city/City.java index a3e349de1..2a862c2f9 100644 --- a/src/main/java/fr/openmc/core/features/city/City.java +++ b/src/main/java/fr/openmc/core/features/city/City.java @@ -19,7 +19,7 @@ import fr.openmc.core.features.city.sub.war.War; import fr.openmc.core.features.city.sub.war.WarManager; import fr.openmc.core.utils.cache.CacheOfflinePlayer; -import fr.openmc.core.utils.cache.PlayerNameCache; +import fr.openmc.core.utils.cache.CachePlayerName; import fr.openmc.core.utils.text.DateUtils; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.MessagesManager; @@ -805,7 +805,7 @@ public void changeRank(Player sender, UUID playerUUID, DBCityRank newRank) { MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.grade.remove_grade", Component.text(currentRank.getName()).color(NamedTextColor.YELLOW), - PlayerNameCache.name(playerUUID).color(NamedTextColor.GOLD)), + CachePlayerName.name(playerUUID).color(NamedTextColor.GOLD)), Prefix.CITY, MessageType.SUCCESS, true); } @@ -817,7 +817,7 @@ public void changeRank(Player sender, UUID playerUUID, DBCityRank newRank) { MessagesManager.sendMessage(sender, TranslationManager.translation("feature.city.grade.assign_grade", Component.text(newRank.getName()).color(NamedTextColor.YELLOW), - PlayerNameCache.name(playerUUID).color(NamedTextColor.GOLD) + CachePlayerName.name(playerUUID).color(NamedTextColor.GOLD) ), Prefix.CITY, MessageType.SUCCESS, true); } diff --git a/src/main/java/fr/openmc/core/features/city/actions/CityKickAction.java b/src/main/java/fr/openmc/core/features/city/actions/CityKickAction.java index 62633901a..af3424777 100644 --- a/src/main/java/fr/openmc/core/features/city/actions/CityKickAction.java +++ b/src/main/java/fr/openmc/core/features/city/actions/CityKickAction.java @@ -3,7 +3,7 @@ import fr.openmc.core.features.city.City; import fr.openmc.core.features.city.CityManager; import fr.openmc.core.features.city.conditions.CityKickCondition; -import fr.openmc.core.utils.cache.PlayerNameCache; +import fr.openmc.core.utils.cache.CachePlayerName; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.MessagesManager; import fr.openmc.core.utils.text.messages.Prefix; @@ -25,7 +25,7 @@ public static void startKick(Player sender, OfflinePlayer playerKick) { MessagesManager.sendMessage(sender, TranslationManager.translation( "feature.city.kick.success", - PlayerNameCache.name(playerKick.getUniqueId()), + CachePlayerName.name(playerKick.getUniqueId()), Component.text(city.getName()) ), Prefix.CITY, 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 94eade261..feb885ea7 100644 --- a/src/main/java/fr/openmc/core/features/city/commands/CityPermsCommands.java +++ b/src/main/java/fr/openmc/core/features/city/commands/CityPermsCommands.java @@ -7,7 +7,7 @@ import fr.openmc.core.features.city.commands.autocomplete.CityPermissionsAutoComplete; import fr.openmc.core.features.city.conditions.CityPermsConditions; import fr.openmc.core.features.city.menu.CityPermsMenu; -import fr.openmc.core.utils.cache.PlayerNameCache; +import fr.openmc.core.utils.cache.CachePlayerName; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.MessagesManager; import fr.openmc.core.utils.text.messages.Prefix; @@ -43,14 +43,14 @@ public static void swap(Player sender, @SuggestWith(CityMembersAutoComplete.clas city.removePermission(player.getUniqueId(), permission); MessagesManager.sendMessage(sender, TranslationManager.translation( "feature.city.perms.commands.switch.removed", - PlayerNameCache.name(player.getUniqueId()), + CachePlayerName.name(player.getUniqueId()), Component.text(permission.toString()) ), Prefix.CITY, MessageType.SUCCESS, false); } else { city.addPermission(player.getUniqueId(), permission); MessagesManager.sendMessage(sender, TranslationManager.translation( "feature.city.perms.commands.switch.added", - PlayerNameCache.name(player.getUniqueId()), + CachePlayerName.name(player.getUniqueId()), permission.getDisplayName() ), Prefix.CITY, MessageType.SUCCESS, false); } @@ -82,7 +82,7 @@ void add( if (city.hasPermission(player.getUniqueId(), permission)) { MessagesManager.sendMessage(sender, TranslationManager.translation( "feature.city.perms.commands.add.already_has", - PlayerNameCache.name(player.getUniqueId()) + CachePlayerName.name(player.getUniqueId()) ), Prefix.CITY, MessageType.ERROR, false); return; } @@ -90,7 +90,7 @@ void add( city.addPermission(player.getUniqueId(), permission); MessagesManager.sendMessage(sender, TranslationManager.translation( "feature.city.perms.commands.modified", - PlayerNameCache.name(player.getUniqueId()) + CachePlayerName.name(player.getUniqueId()) ), Prefix.CITY, MessageType.SUCCESS, false); } @@ -120,7 +120,7 @@ void remove( if (!city.hasPermission(player.getUniqueId(), permission)) { MessagesManager.sendMessage(sender, TranslationManager.translation( "feature.city.perms.commands.remove.does_not_have", - PlayerNameCache.name(player.getUniqueId()) + CachePlayerName.name(player.getUniqueId()) ), Prefix.CITY, MessageType.ERROR, false); return; } @@ -128,7 +128,7 @@ void remove( city.removePermission(player.getUniqueId(), permission); MessagesManager.sendMessage(sender, TranslationManager.translation( "feature.city.perms.commands.modified", - PlayerNameCache.name(player.getUniqueId()) + CachePlayerName.name(player.getUniqueId()) ), Prefix.CITY, MessageType.SUCCESS, false); } 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 78e7936c7..f037be95b 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 @@ -12,7 +12,7 @@ import fr.openmc.core.features.economy.EconomyManager; import fr.openmc.core.features.leaderboards.LeaderboardManager; import fr.openmc.core.utils.bukkit.SkullUtils; -import fr.openmc.core.utils.cache.PlayerNameCache; +import fr.openmc.core.utils.cache.CachePlayerName; import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; @@ -85,7 +85,7 @@ public List getItems() { if (ownerUUID != null) { List cityLore = new ArrayList<>(); - Component ownerComponent = PlayerNameCache.name(ownerUUID).color(NamedTextColor.GRAY); + Component ownerComponent = CachePlayerName.name(ownerUUID).color(NamedTextColor.GRAY); Component levelComponent = Component.text(city.getLevel()).color(NamedTextColor.DARK_AQUA); Component membersCurrent = Component.text(city.getMembers().size()).color(NamedTextColor.GREEN); Component membersLimit = Component.text(MemberLimitRewards.getMemberLimit(city.getLevel())).color(NamedTextColor.GREEN); diff --git a/src/main/java/fr/openmc/core/features/city/menu/list/CityListDetailsMenu.java b/src/main/java/fr/openmc/core/features/city/menu/list/CityListDetailsMenu.java index 3bfcb9668..ea01d3e67 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/list/CityListDetailsMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/list/CityListDetailsMenu.java @@ -17,7 +17,7 @@ import fr.openmc.core.features.city.sub.milestone.rewards.MemberLimitRewards; import fr.openmc.core.features.economy.EconomyManager; import fr.openmc.core.utils.bukkit.SkullUtils; -import fr.openmc.core.utils.cache.PlayerNameCache; +import fr.openmc.core.utils.cache.CachePlayerName; import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; @@ -106,7 +106,7 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { itemMeta -> { itemMeta.displayName(TranslationManager.translation( "feature.city.menus.list.details.owner", - PlayerNameCache.name(ownerUUID).color(NamedTextColor.GRAY) + CachePlayerName.name(ownerUUID).color(NamedTextColor.GRAY) )); itemMeta.lore(loreOwner); }).hide(ItemUtils.getDataComponentType()) @@ -140,7 +140,7 @@ public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { map.put(13, new ItemMenuBuilder(this, SkullUtils.getPlayerSkull(this.city.getPlayerWithPermission(CityPermission.OWNER)), itemMeta -> itemMeta.displayName(TranslationManager.translation( "feature.city.menus.list.details.owner", - PlayerNameCache.name(this.city.getPlayerWithPermission(CityPermission.OWNER)).color(NamedTextColor.GRAY) + CachePlayerName.name(this.city.getPlayerWithPermission(CityPermission.OWNER)).color(NamedTextColor.GRAY) ))) ); } 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 427f9b7af..d73b43143 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 @@ -15,7 +15,7 @@ import fr.openmc.core.features.city.sub.milestone.rewards.MemberLimitRewards; import fr.openmc.core.features.economy.EconomyManager; import fr.openmc.core.utils.bukkit.SkullUtils; -import fr.openmc.core.utils.cache.PlayerNameCache; +import fr.openmc.core.utils.cache.CachePlayerName; import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; @@ -81,7 +81,7 @@ public List getItems() { List cityLore = new ArrayList<>(); - Component ownerComponent = PlayerNameCache.name(ownerUUID).color(NamedTextColor.GRAY); + Component ownerComponent = CachePlayerName.name(ownerUUID).color(NamedTextColor.GRAY); Component levelComponent = Component.text(city.getLevel()).color(NamedTextColor.DARK_AQUA); Component membersCurrent = Component.text(city.getMembers().size()).color(NamedTextColor.GREEN); Component membersLimit = Component.text(MemberLimitRewards.getMemberLimit(city.getLevel())).color(NamedTextColor.GREEN); 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 6b557deb0..c13b036fc 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ChestButton.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ChestButton.java @@ -9,7 +9,7 @@ import fr.openmc.core.features.city.conditions.CityChestConditions; import fr.openmc.core.features.city.menu.CityChestMenu; import fr.openmc.core.features.city.sub.milestone.rewards.FeaturesRewards; -import fr.openmc.core.utils.cache.PlayerNameCache; +import fr.openmc.core.utils.cache.CachePlayerName; import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; @@ -53,7 +53,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(PlayerNameCache.getName(city.getChestWatcher())).color(NamedTextColor.RED) + Component.text(CachePlayerName.getName(city.getChestWatcher())).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 669af4561..ad2473533 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ManageButton.java +++ b/src/main/java/fr/openmc/core/features/city/menu/main/buttons/ManageButton.java @@ -7,7 +7,7 @@ import fr.openmc.core.features.city.CityPermission; import fr.openmc.core.features.city.menu.CityModifyMenu; import fr.openmc.core.features.city.sub.milestone.rewards.MemberLimitRewards; -import fr.openmc.core.utils.cache.PlayerNameCache; +import fr.openmc.core.utils.cache.CachePlayerName; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.MessagesManager; import fr.openmc.core.utils.text.messages.Prefix; @@ -62,7 +62,7 @@ private static List getDynamicLore(City city, Player player) { if (hasPermissionRenameCity || hasPermissionOwner) { lore = TranslationManager.translationLore( "feature.city.menus.main.manage.lore.edit", - PlayerNameCache.name(ownerUUID).color(NamedTextColor.GRAY), + CachePlayerName.name(ownerUUID).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 +70,7 @@ private static List getDynamicLore(City city, Player player) { } else { lore = TranslationManager.translationLore( "feature.city.menus.main.manage.lore.view", - PlayerNameCache.name(ownerUUID).color(NamedTextColor.GRAY), + CachePlayerName.name(ownerUUID).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/playerlist/CityPlayerGestionMenu.java b/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerGestionMenu.java index bd409aa69..2f94e8d7a 100644 --- a/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerGestionMenu.java +++ b/src/main/java/fr/openmc/core/features/city/menu/playerlist/CityPlayerGestionMenu.java @@ -11,7 +11,7 @@ import fr.openmc.core.features.city.conditions.CityKickCondition; import fr.openmc.core.features.city.menu.CityPermsMenu; import fr.openmc.core.utils.bukkit.SkullUtils; -import fr.openmc.core.utils.cache.PlayerNameCache; +import fr.openmc.core.utils.cache.CachePlayerName; import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; @@ -76,7 +76,7 @@ public void onInventoryClick(InventoryClickEvent click) { } else { loreKick = TranslationManager.translationLore( "feature.city.menus.members.manage.kick.info", - PlayerNameCache.name(playerTarget.getUniqueId()).color(NamedTextColor.GRAY) + CachePlayerName.name(playerTarget.getUniqueId()).color(NamedTextColor.GRAY) ); } } else { 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 c2612ea85..d80364bf5 100644 --- a/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/MainWarMenu.java +++ b/src/main/java/fr/openmc/core/features/city/sub/war/menu/main/MainWarMenu.java @@ -20,7 +20,7 @@ import fr.openmc.core.features.city.sub.war.menu.MoreInfoMenu; import fr.openmc.core.features.economy.EconomyManager; import fr.openmc.core.utils.bukkit.SkullUtils; -import fr.openmc.core.utils.cache.PlayerNameCache; +import fr.openmc.core.utils.cache.CachePlayerName; import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; @@ -95,7 +95,7 @@ public List getItems() { Component.empty(), TranslationManager.translation( "feature.city.war.menu.main.owner", - Component.text(PlainTextComponentSerializer.plainText().serialize(PlayerNameCache.name(player.getUniqueId()))) + Component.text(PlainTextComponentSerializer.plainText().serialize(CachePlayerName.name(player.getUniqueId()))) .color(NamedTextColor.LIGHT_PURPLE) ).color(NamedTextColor.GRAY), TranslationManager.translation( diff --git a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/contents/bloodynight/contents/mobs/vampire/VampireBossLootManager.java b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/contents/bloodynight/contents/mobs/vampire/VampireBossLootManager.java index f4612fadc..c5dfff540 100644 --- a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/contents/bloodynight/contents/mobs/vampire/VampireBossLootManager.java +++ b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/contents/bloodynight/contents/mobs/vampire/VampireBossLootManager.java @@ -10,7 +10,7 @@ import fr.openmc.core.registry.loottable.loots.MoneyLoot; import fr.openmc.core.registry.mobs.CustomMob; import fr.openmc.core.utils.cache.CacheOfflinePlayer; -import fr.openmc.core.utils.cache.PlayerNameCache; +import fr.openmc.core.utils.cache.CachePlayerName; import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.event.ClickEvent; @@ -69,7 +69,7 @@ public static void giveContributions(CustomMob mob) { broadcastToWorld(world, TranslationManager.translation( "feature.dailyevents.bloody_night.vampire_boss.defeated.rank", Component.text("#"+ (rankInt + 1), LeaderboardManager.getRankColor(rankInt + 1)), - PlayerNameCache.name(entry.getKey()).color(NamedTextColor.GOLD), + CachePlayerName.name(entry.getKey()).color(NamedTextColor.GOLD), Component.text(String.format("%.1f", entry.getValue()), NamedTextColor.RED) )); } @@ -82,7 +82,7 @@ public static void giveContributions(CustomMob mob) { player.sendMessage(TranslationManager.translation( "feature.dailyevents.bloody_night.vampire_boss.defeated.midle", Component.text((rankInt + 1), LeaderboardManager.getRankColor(rankInt + 1)), - PlayerNameCache.name(entry.getKey()).color(NamedTextColor.GOLD), + CachePlayerName.name(entry.getKey()).color(NamedTextColor.GOLD), Component.text(String.format("%.1f", entry.getValue()), NamedTextColor.RED) )); } diff --git a/src/main/java/fr/openmc/core/features/leaderboards/LeaderboardManager.java b/src/main/java/fr/openmc/core/features/leaderboards/LeaderboardManager.java index 1547ba91b..e570a856d 100644 --- a/src/main/java/fr/openmc/core/features/leaderboards/LeaderboardManager.java +++ b/src/main/java/fr/openmc/core/features/leaderboards/LeaderboardManager.java @@ -16,7 +16,8 @@ import fr.openmc.core.features.leaderboards.commands.LeaderboardCommands; import fr.openmc.core.hooks.github.GitHubHook; import fr.openmc.core.hooks.github.models.ContributorStats; -import fr.openmc.core.utils.cache.PlayerNameCache; +import fr.openmc.core.utils.cache.CachePlayerName; +import fr.openmc.core.utils.cache.CachePlaytime; import fr.openmc.core.utils.text.DateUtils; import fr.openmc.core.utils.text.messages.TranslationManager; import fr.openmc.core.utils.world.entities.TextDisplay; @@ -29,7 +30,6 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.OfflinePlayer; -import org.bukkit.Statistic; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.scheduler.BukkitRunnable; @@ -487,7 +487,7 @@ public static void updatePlayerMoneyMap() { .sorted((entry1, entry2) -> Double.compare(entry2.getValue(), entry1.getValue())) .limit(10) .toList()) { - String playerName = PlayerNameCache.getName(entry.getKey()); + String playerName = CachePlayerName.getName(entry.getKey()); String formattedBalance = EconomyManager.getFormattedSimplifiedNumber(entry.getValue()); newMap.put(rank++, new AbstractMap.SimpleEntry<>(playerName, formattedBalance)); } @@ -516,36 +516,23 @@ public static void updateCityMoneyMap() { * Updates the playtime leaderboard map by sorting and formatting player playtime. */ public static void updatePlayTimeMap() { - Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> { - Map playtimes = new HashMap<>(); - - for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { - long playtime = player.getStatistic(Statistic.PLAY_ONE_MINUTE); - playtimes.put(player.getUniqueId(), playtime); - } - - List> sorted = playtimes.entrySet().stream() - .sorted(Map.Entry.comparingByKey().reversed()) - .limit(10) - .toList(); - - Map> newMap = new TreeMap<>(); - int rank = 1; - - for (Map.Entry entry : sorted) { - OfflinePlayer player = Bukkit.getOfflinePlayer(entry.getKey()); + Map> newMap = new TreeMap<>(); + int rank = 1; - String playerName = player.getName(); - String playTime = DateUtils.convertTime(entry.getValue()); + List> sorted = Arrays.stream(Bukkit.getOfflinePlayers()) + .filter(p -> p.getName() != null) + .map(p -> Map.entry(p, CachePlaytime.getPlaytime(p))) + .sorted(Map.Entry.comparingByValue().reversed()) + .limit(10) + .toList(); - newMap.put( - rank++, - new AbstractMap.SimpleEntry<>(playerName, playTime) - ); - } + for (var entry : sorted) { + String playerName = entry.getKey().getName(); + String playTime = DateUtils.convertTime(entry.getValue()); + newMap.put(rank++, new AbstractMap.SimpleEntry<>(playerName, playTime)); + } - playTimeMap = newMap; - }); + playTimeMap = newMap; } public static void updatePumpkinCountMap() { @@ -557,7 +544,7 @@ public static void updatePumpkinCountMap() { .sorted((entry1, entry2) -> Double.compare(entry2.getValue().getPumpkinCount(), entry1.getValue().getPumpkinCount())) .limit(10) .toList()) { - String playerName = PlayerNameCache.getName(entry.getKey()); + String playerName = CachePlayerName.getName(entry.getKey()); String formattedPumpkinCount = EconomyManager.getFormattedSimplifiedNumber(entry.getValue().getPumpkinCount()); newMap.put(rank++, new AbstractMap.SimpleEntry<>(playerName, formattedPumpkinCount)); } 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 daee4ab63..6263395bb 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 @@ -14,7 +14,7 @@ import fr.openmc.core.features.toor.DiscordLinkManager; import fr.openmc.core.hooks.github.GitHubHook; import fr.openmc.core.utils.bukkit.ItemUtils; -import fr.openmc.core.utils.cache.PlayerNameCache; +import fr.openmc.core.utils.cache.CachePlayerName; import fr.openmc.core.utils.text.DateUtils; import fr.openmc.core.utils.text.messages.TranslationManager; import io.papermc.paper.datacomponent.DataComponentTypes; @@ -51,7 +51,7 @@ public ProfileMenu(Player owner, OfflinePlayer target) { public @NotNull Component getName() { return TranslationManager.translation( "feature.profile.menu.title", - PlayerNameCache.name(target.getUniqueId()).color(NamedTextColor.GOLD) + CachePlayerName.name(target.getUniqueId()).color(NamedTextColor.GOLD) ); } @@ -120,7 +120,7 @@ private void addIdentityItem(Map inventory) { meta -> { meta.displayName(TranslationManager.translation( "feature.profile.item.identity.name", - PlayerNameCache.name(target.getUniqueId()).color(NamedTextColor.GOLD) + CachePlayerName.name(target.getUniqueId()).color(NamedTextColor.GOLD) )); meta.lore(lore); } @@ -167,7 +167,7 @@ private Component getFriendsLore(boolean selfProfile, boolean friends) { : "feature.profile.item.friends.add_lore"; return TranslationManager.translation( translationKey, - PlayerNameCache.name(target.getUniqueId()).color(NamedTextColor.GOLD) + CachePlayerName.name(target.getUniqueId()).color(NamedTextColor.GOLD) ); } @@ -176,7 +176,7 @@ private void openFriends(boolean selfProfile, boolean friends) { runCommand("friends list"); return; } - runCommand("friends add " + PlayerNameCache.getName(target.getUniqueId())); + runCommand("friends add " + CachePlayerName.getName(target.getUniqueId())); } private void addMailboxItem(Map inventory) { @@ -197,7 +197,7 @@ private Component getMailboxLore(boolean selfProfile) { } return TranslationManager.translation( "feature.profile.item.mailbox.send_lore", - PlayerNameCache.name(target.getUniqueId()).color(NamedTextColor.GOLD) + CachePlayerName.name(target.getUniqueId()).color(NamedTextColor.GOLD) ); } diff --git a/src/main/java/fr/openmc/core/features/shops/menus/ShopMenu.java b/src/main/java/fr/openmc/core/features/shops/menus/ShopMenu.java index 2054335c4..83ec272ef 100644 --- a/src/main/java/fr/openmc/core/features/shops/menus/ShopMenu.java +++ b/src/main/java/fr/openmc/core/features/shops/menus/ShopMenu.java @@ -10,7 +10,7 @@ import fr.openmc.core.features.shops.managers.PlayerShopManager; import fr.openmc.core.features.shops.models.Shop; import fr.openmc.core.features.shops.models.ShopItem; -import fr.openmc.core.utils.cache.PlayerNameCache; +import fr.openmc.core.utils.cache.CachePlayerName; import fr.openmc.core.utils.text.InputUtils; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.MessagesManager; @@ -55,7 +55,7 @@ public ShopMenu(Player owner, Shop shop, int amountToBuy) { @Override public @NotNull Component getName() { - return TranslationManager.translation("feature.shop.menu.main.title", PlayerNameCache.name(getOwner().getUniqueId())); + return TranslationManager.translation("feature.shop.menu.main.title", CachePlayerName.name(getOwner().getUniqueId())); } @Override diff --git a/src/main/java/fr/openmc/core/features/shops/menus/ShopSalesMenu.java b/src/main/java/fr/openmc/core/features/shops/menus/ShopSalesMenu.java index 66ad4d9a6..1a3b72348 100644 --- a/src/main/java/fr/openmc/core/features/shops/menus/ShopSalesMenu.java +++ b/src/main/java/fr/openmc/core/features/shops/menus/ShopSalesMenu.java @@ -8,7 +8,7 @@ import fr.openmc.core.features.economy.EconomyManager; import fr.openmc.core.features.shops.models.Shop; import fr.openmc.core.features.shops.models.ShopSale; -import fr.openmc.core.utils.cache.PlayerNameCache; +import fr.openmc.core.utils.cache.CachePlayerName; import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; @@ -64,7 +64,7 @@ public List getItems() { sales.forEach(s -> { ItemStack item = s.getItem().getItemStack().clone(); item.editMeta(itemMeta -> { - itemMeta.displayName(TranslationManager.translation("feature.shop.menu.sales.item.name", PlayerNameCache.name(s.getBuyerUUID()).color(NamedTextColor.LIGHT_PURPLE))); + itemMeta.displayName(TranslationManager.translation("feature.shop.menu.sales.item.name", CachePlayerName.name(s.getBuyerUUID()).color(NamedTextColor.LIGHT_PURPLE))); itemMeta.lore(TranslationManager.translationLore("feature.shop.menu.sales.item.lore", Component.text(s.getDate().toLocalDateTime().format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM))).color(NamedTextColor.GREEN), Component.text(s.getAmount()).color(NamedTextColor.GOLD), diff --git a/src/main/java/fr/openmc/core/features/shops/models/Shop.java b/src/main/java/fr/openmc/core/features/shops/models/Shop.java index ea7079545..d279663df 100644 --- a/src/main/java/fr/openmc/core/features/shops/models/Shop.java +++ b/src/main/java/fr/openmc/core/features/shops/models/Shop.java @@ -7,7 +7,7 @@ import fr.openmc.core.features.shops.managers.ShopManager; import fr.openmc.core.utils.bukkit.ItemUtils; import fr.openmc.core.utils.cache.CacheOfflinePlayer; -import fr.openmc.core.utils.cache.PlayerNameCache; +import fr.openmc.core.utils.cache.CachePlayerName; import fr.openmc.core.utils.text.messages.MessageType; import fr.openmc.core.utils.text.messages.MessagesManager; import fr.openmc.core.utils.text.messages.Prefix; @@ -87,7 +87,7 @@ public OfflinePlayer getOwner() { * @return the name of the shop in the format "'s Shop" */ public String getName() { - return PlayerNameCache.getName(getOwnerUUID()) + "'s Shop"; + return CachePlayerName.getName(getOwnerUUID()) + "'s Shop"; } /** diff --git a/src/main/java/fr/openmc/core/hooks/github/models/DBGithubMinecraft.java b/src/main/java/fr/openmc/core/hooks/github/models/DBGithubMinecraft.java index 6d04eb087..c829b0385 100644 --- a/src/main/java/fr/openmc/core/hooks/github/models/DBGithubMinecraft.java +++ b/src/main/java/fr/openmc/core/hooks/github/models/DBGithubMinecraft.java @@ -3,7 +3,7 @@ import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; import fr.openmc.core.utils.cache.CacheOfflinePlayer; -import fr.openmc.core.utils.cache.PlayerNameCache; +import fr.openmc.core.utils.cache.CachePlayerName; import lombok.Getter; import lombok.Setter; import org.bukkit.OfflinePlayer; @@ -39,6 +39,6 @@ public OfflinePlayer getPlayer() { } public String getPlayerName() { - return PlayerNameCache.getName(playerUUID); + return CachePlayerName.getName(playerUUID); } } \ No newline at end of file diff --git a/src/main/java/fr/openmc/core/utils/cache/PlayerNameCache.java b/src/main/java/fr/openmc/core/utils/cache/CachePlayerName.java similarity index 95% rename from src/main/java/fr/openmc/core/utils/cache/PlayerNameCache.java rename to src/main/java/fr/openmc/core/utils/cache/CachePlayerName.java index 154bf1fbd..0f9581b14 100644 --- a/src/main/java/fr/openmc/core/utils/cache/PlayerNameCache.java +++ b/src/main/java/fr/openmc/core/utils/cache/CachePlayerName.java @@ -7,7 +7,7 @@ import java.util.UUID; -public class PlayerNameCache { +public class CachePlayerName { private static final Object2ObjectMap nameCache = new Object2ObjectOpenHashMap<>(); public static Component name(UUID uuid) { diff --git a/src/main/java/fr/openmc/core/utils/cache/CachePlaytime.java b/src/main/java/fr/openmc/core/utils/cache/CachePlaytime.java new file mode 100644 index 000000000..d1233877e --- /dev/null +++ b/src/main/java/fr/openmc/core/utils/cache/CachePlaytime.java @@ -0,0 +1,27 @@ +package fr.openmc.core.utils.cache; + +import org.bukkit.OfflinePlayer; +import org.bukkit.Statistic; + +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +public class CachePlaytime { + + private static final TtlCache cache = new TtlCache<>(5, TimeUnit.MINUTES); + + public static long getPlaytime(OfflinePlayer player) { + return cache.getOrCompute( + player.getUniqueId(), + _ -> (long) player.getStatistic(Statistic.PLAY_ONE_MINUTE) + ); + } + + public static void refresh(OfflinePlayer player) { + cache.put(player.getUniqueId(), (long) player.getStatistic(Statistic.PLAY_ONE_MINUTE)); + } + + public static void invalidate(UUID uuid) { + cache.invalidate(uuid); + } +}