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 0f796bda9..089fc092a 100644 --- a/src/main/java/fr/openmc/core/features/homes/HomeUpgradeManager.java +++ b/src/main/java/fr/openmc/core/features/homes/HomeUpgradeManager.java @@ -17,7 +17,7 @@ public class HomeUpgradeManager { public static HomeLimits getCurrentUpgrade(Player player) { - int currentLimit = HomesManager.getHomeLimit(player.getUniqueId()); + int currentLimit = HomesManager.getHomeLimit(player.getUniqueId()).getLimit(); for (HomeLimits upgrade : HomeLimits.values()) { if (upgrade.getLimit() == currentLimit) { return upgrade; @@ -27,12 +27,20 @@ public static HomeLimits getCurrentUpgrade(Player player) { } public static HomeLimits getNextUpgrade(HomeLimits current) { - return HomeLimits.values()[current.ordinal() + 1]; + if (current == null) + return null; + + HomeLimits[] values = HomeLimits.values(); + int nextIndex = current.ordinal() + 1; + if (nextIndex >= values.length) + return null; + + return values[nextIndex]; } public static void upgradeHome(Player player) { int currentHomes = HomesManager.getHomes(player.getUniqueId()).size(); - int currentUpgrade = HomesManager.getHomeLimit(player.getUniqueId()); + int currentUpgrade = HomesManager.getHomeLimit(player.getUniqueId()).getLimit(); HomeLimits nextUpgrade = getNextUpgrade(getCurrentUpgrade(player)); if(nextUpgrade != null) { int price = nextUpgrade.getPrice(); @@ -83,7 +91,7 @@ public static void upgradeHome(Player player) { HomesManager.updateHomeLimit(player.getUniqueId()); - int updatedHomesLimit = HomesManager.getHomeLimit(player.getUniqueId()); + int updatedHomesLimit = HomesManager.getHomeLimit(player.getUniqueId()).getLimit(); Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> { Bukkit.getPluginManager().callEvent(new HomeUpgradeEvent(player)); diff --git a/src/main/java/fr/openmc/core/features/homes/HomesManager.java b/src/main/java/fr/openmc/core/features/homes/HomesManager.java index 58b62f688..fff9f9207 100644 --- a/src/main/java/fr/openmc/core/features/homes/HomesManager.java +++ b/src/main/java/fr/openmc/core/features/homes/HomesManager.java @@ -86,7 +86,7 @@ public static List getHomesNames(UUID playerUUID) { .toList(); } - public static int getHomeLimit(UUID playerUUID) { + public static HomeLimits getHomeLimit(UUID playerUUID) { HomeLimit homeLimit = homeLimits.stream() .filter(hl -> hl.getPlayerUUID().equals(playerUUID)) .findFirst() @@ -97,7 +97,7 @@ public static int getHomeLimit(UUID playerUUID) { homeLimits.add(homeLimit); } - return homeLimit.getLimit(); + return homeLimit.getHomeLimit(); } public static void updateHomeLimit(UUID playerUUID) { 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 99cdc7cea..c8c378abd 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 @@ -104,7 +104,7 @@ public void setHome( } int currentHome = HomesManager.getHomes(player.getUniqueId()).size(); - int homesLimit = HomesManager.getHomeLimit(player.getUniqueId()); + int homesLimit = HomesManager.getHomeLimit(player.getUniqueId()).getLimit(); if(currentHome >= homesLimit) { MessagesManager.sendMessage(player, TranslationManager.translation("feature.homes.command.home_limit_reached"), Prefix.HOME, MessageType.ERROR, true); 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 9da50aa7b..c16db82ba 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 @@ -9,7 +9,6 @@ import fr.openmc.core.features.homes.HomeLimits; import fr.openmc.core.features.homes.HomeUpgradeManager; import fr.openmc.core.features.homes.HomesManager; -import fr.openmc.core.registry.items.CustomItemRegistry; import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; @@ -44,36 +43,31 @@ public String getTexture() { public @NotNull Map getContent() { Map items = new HashMap<>(); - int currentHome = HomesManager.getHomeLimit(getOwner().getUniqueId()); - - int homeMaxLimit = HomeLimits.values().length - 1; - - HomeLimits lastUpgrade = HomeLimits.valueOf("LIMIT_" + homeMaxLimit); - HomeLimits nextUpgrade = HomeUpgradeManager.getNextUpgrade(HomeUpgradeManager.getCurrentUpgrade(getOwner())) != null - ? HomeUpgradeManager.getNextUpgrade(HomeUpgradeManager.getCurrentUpgrade(getOwner())) - : lastUpgrade; - - items.put(4, new ItemBuilder(this, Objects.requireNonNull(OMCRegistry.CUSTOM_ITEMS.get("omc_homes:omc_homes_icon_upgrade")).getBest(), itemMeta -> { - itemMeta.displayName(TranslationManager.translation("feature.homes.upgrade.item.name")); - if (nextUpgrade.getLimit() >= lastUpgrade.getLimit()) { - itemMeta.lore(TranslationManager.translationLore( - "feature.homes.upgrade.lore.max", - Component.text(currentHome).color(NamedTextColor.YELLOW) - )); - } else { - itemMeta.lore(TranslationManager.translationLore( - "feature.homes.upgrade.lore.available", - Component.text(currentHome).color(NamedTextColor.YELLOW), - Component.text(nextUpgrade.getPrice()).color(NamedTextColor.GREEN), - Component.text(EconomyManager.getEconomyIcon()).decoration(TextDecoration.ITALIC, false), - Component.text(nextUpgrade.getAyweniteCost()).color(NamedTextColor.LIGHT_PURPLE), - Component.text(nextUpgrade.getLimit()).color(NamedTextColor.YELLOW) - )); - } - }).setOnClick(event -> { - HomeUpgradeManager.upgradeHome(getOwner()); - getOwner().closeInventory(); - })); + int currentHome = HomesManager.getHomeLimit(getOwner().getUniqueId()).getLimit(); + + HomeLimits nextUpgrade = HomeUpgradeManager.getNextUpgrade(HomeUpgradeManager.getCurrentUpgrade(getOwner())); + + items.put(4, new ItemBuilder(this, Objects.requireNonNull(OMCRegistry.CUSTOM_ITEMS.get("omc_homes:omc_homes_icon_upgrade")).getBest(), itemMeta -> { + itemMeta.displayName(TranslationManager.translation("feature.homes.upgrade.item.name")); + if (nextUpgrade == null) { + itemMeta.lore(TranslationManager.translationLore( + "feature.homes.upgrade.lore.max", + Component.text(currentHome).color(NamedTextColor.YELLOW) + )); + } else { + itemMeta.lore(TranslationManager.translationLore( + "feature.homes.upgrade.lore.available", + Component.text(currentHome).color(NamedTextColor.YELLOW), + Component.text(nextUpgrade.getPrice()).color(NamedTextColor.GREEN), + Component.text(EconomyManager.getEconomyIcon()).decoration(TextDecoration.ITALIC, false), + Component.text(nextUpgrade.getAyweniteCost()).color(NamedTextColor.LIGHT_PURPLE), + Component.text(nextUpgrade.getLimit()).color(NamedTextColor.YELLOW) + )); + } + }).setOnClick(event -> { + HomeUpgradeManager.upgradeHome(getOwner()); + getOwner().closeInventory(); + })); return items; } diff --git a/src/main/java/fr/openmc/core/features/homes/models/HomeLimit.java b/src/main/java/fr/openmc/core/features/homes/models/HomeLimit.java index 58cd8f62d..c9548e764 100644 --- a/src/main/java/fr/openmc/core/features/homes/models/HomeLimit.java +++ b/src/main/java/fr/openmc/core/features/homes/models/HomeLimit.java @@ -1,14 +1,13 @@ package fr.openmc.core.features.homes.models; -import java.util.UUID; - import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; - import fr.openmc.core.features.homes.HomeLimits; import lombok.Getter; import lombok.Setter; +import java.util.UUID; + @Getter @DatabaseTable(tableName = "home_limits") public class HomeLimit { @@ -34,11 +33,16 @@ public HomeLimit(UUID playerUUID, HomeLimits limit) { } public HomeLimits getHomeLimit() { + HomeLimits minHomeLimit = HomeLimits.LIMIT_0; for (HomeLimits value : HomeLimits.values()) { if (value.getLimit() == this.limit) { return value; } + if (value.getLimit() < this.limit) { + minHomeLimit = value; + } } - return null; + + return minHomeLimit; } }