From 6de8d07e340936ef9a3555c0ca48fdec37735238 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Sun, 24 Sep 2023 05:07:34 +0200 Subject: [PATCH] Fixed upgrading enchantments --- .../com/alttd/fishingevent/config/Config.java | 22 +++++---- .../alttd/fishingevent/config/Messages.java | 8 +++- .../gui/windows/UpgradeWindow.java | 47 ++++++++++++++----- 3 files changed, 55 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/alttd/fishingevent/config/Config.java b/src/main/java/com/alttd/fishingevent/config/Config.java index 4a1310a..a546eda 100644 --- a/src/main/java/com/alttd/fishingevent/config/Config.java +++ b/src/main/java/com/alttd/fishingevent/config/Config.java @@ -170,21 +170,25 @@ public class Config extends AbstractConfig { Int2ObjectOpenHashMap enchantmentDataMap = new Int2ObjectOpenHashMap<>(); String enchantPrefix = npcPrefix + "enchants." + trackKey + "."; - ConfigurationSection secSection = config.getConfigurationSection(enchantPrefix + "enchants"); - if (secSection == null) { + ConfigurationSection trackSection = config.getConfigurationSection(enchantPrefix + "track-enchants"); + if (trackSection == null) { config.logger.warning("Invalid section for enchant track [%]", trackKey); continue; } - for (String enchantmentKey : secSection.getKeys(false)) { - String enchantString = config.getString(enchantPrefix + enchantmentKey + ".", "type", Enchantment.LUCK.getName()); + for (String enchantmentKey : trackSection.getKeys(false)) { + String trackPrefix = enchantPrefix + "track-enchants." + enchantmentKey + "."; + String enchantString = config.getString(trackPrefix, "type", Enchantment.LUCK.getName()); Enchantment enchantment = Enchantment.getByName(enchantString); if (enchantment == null) { config.logger.warning("Found invalid enchant [%]", enchantString); continue; } - new EnchantmentData(enchantment, - config.getInt(enchantPrefix + enchantmentKey + ".", "level", 1), - config.getInt(enchantPrefix + enchantmentKey + ".", "price", 1)); + enchantmentDataMap.put( + config.getInt(trackPrefix, "position", 1), + new EnchantmentData(enchantment, + config.getInt(trackPrefix, "level", 1), + config.getInt(trackPrefix, "price", 1)) + ); } enchantmentTracks.add(new EnchantmentTrack(config.getString(enchantPrefix, "internal-name", "ex1"), MiniMessage.miniMessage().deserialize(config.getString(enchantPrefix, "display-name", "Ex1")), @@ -236,8 +240,8 @@ public class Config extends AbstractConfig { itemStack, config.getString(prefix, "command", "example command for "), config.getString(prefix, "permission", "example.permission"), - config.getString(prefix, "prize-name", "Prize Name"), - config.getInt(prefix, "prize-price", 1)) + config.getString(prefix, "name", "Prize Name"), + config.getInt(prefix, "price", 1)) ); } return Optional.of(prizes); diff --git a/src/main/java/com/alttd/fishingevent/config/Messages.java b/src/main/java/com/alttd/fishingevent/config/Messages.java index 37deebb..1c2ecf5 100644 --- a/src/main/java/com/alttd/fishingevent/config/Messages.java +++ b/src/main/java/com/alttd/fishingevent/config/Messages.java @@ -57,7 +57,8 @@ public class Messages extends AbstractConfig { public static String EARNED_POINTS = "You earned points from this sale, you are now at points!"; public static String NOT_ENOUGH_POINTS = "You do not have enough points to purchase this, it costs and you only have points"; public static String PURCHASED = "You purchased the prize. You have points remaining."; - public static String ALREADY_PURCHASED = "You already purchased the prize."; + public static String ALREADY_PURCHASED_PRIZE = "You already purchased the prize."; + public static String MAX_UPGRADED = "You fully upgraded the track"; @SuppressWarnings("unused") private static void load() { @@ -69,7 +70,8 @@ public class Messages extends AbstractConfig { EARNED_POINTS = config.getString(prefix, "earned-points", EARNED_POINTS); NOT_ENOUGH_POINTS = config.getString(prefix, "not-enough-points", NOT_ENOUGH_POINTS); PURCHASED = config.getString(prefix, "purchased", PURCHASED); - ALREADY_PURCHASED = config.getString(prefix, "already-purchased", ALREADY_PURCHASED); + ALREADY_PURCHASED_PRIZE = config.getString(prefix, "already-purchased-prize", ALREADY_PURCHASED_PRIZE); + MAX_UPGRADED = config.getString(prefix, "max-upgraded", MAX_UPGRADED); } } @@ -113,11 +115,13 @@ public class Messages extends AbstractConfig { private static final String prefix = "other-errors."; public static String UNABLE_TO_CREATE_FISH = "Unable to create fish, please contact a staff member"; public static String UNABLE_TO_SELL_ITEMS = "Unable to sell items, please contact a staff member"; + public static String UNABLE_TO_UPDATE_ENCHANTMENT = "Unable to update the enchantments, your points have been refunded, please contact a staff member"; @SuppressWarnings("unused") private static void load() { UNABLE_TO_CREATE_FISH = config.getString(prefix, "unable-to-create-fish", UNABLE_TO_CREATE_FISH); UNABLE_TO_SELL_ITEMS = config.getString(prefix, "unable-to-sell-items", UNABLE_TO_SELL_ITEMS); + UNABLE_TO_UPDATE_ENCHANTMENT = config.getString(prefix, "unable-to-update-enchantment", UNABLE_TO_UPDATE_ENCHANTMENT); } } } diff --git a/src/main/java/com/alttd/fishingevent/gui/windows/UpgradeWindow.java b/src/main/java/com/alttd/fishingevent/gui/windows/UpgradeWindow.java index a1c0ab8..9d0bfb3 100644 --- a/src/main/java/com/alttd/fishingevent/gui/windows/UpgradeWindow.java +++ b/src/main/java/com/alttd/fishingevent/gui/windows/UpgradeWindow.java @@ -8,6 +8,8 @@ import com.alttd.fishingevent.objects.EnchantmentTrack; import com.alttd.fishingevent.points.PointsManagement; import com.alttd.fishingevent.util.Logger; import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; +import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; @@ -29,27 +31,40 @@ public class UpgradeWindow extends GUI { private final Logger logger; private boolean canOpen = false; private final FishingEvent fishingEvent; + private final ItemStack maxUpgraded = new ItemStack(Material.BARRIER, 1); //TODO itemlore/name + private final Player player; + private final List enchantmentTracks; public UpgradeWindow(FishingEvent fishingEvent, Player player, Logger logger, List enchantmentTracks) { super(InventoryType.CHEST, MiniMessage.miniMessage().deserialize(Messages.GUI.UPGRADE_GUI_NAME)); this.fishingEvent = fishingEvent; this.logger = logger; - int i = 0; + this.player = player; + this.enchantmentTracks = enchantmentTracks; + updateGUI(); + canOpen = true; + } + + private void updateGUI() { Optional optionalFishingRod = getFishingRod(player); if (optionalFishingRod.isEmpty()) { player.sendMiniMessage(Messages.GUI.NO_FISHING_ROD, null); return; } ItemStack fishingRod = optionalFishingRod.get(); + int i = 0; for (EnchantmentTrack enchantmentTrack : enchantmentTracks) { int trackLevel = getTrackLevel(enchantmentTrack, fishingRod); Optional optionalEnchantmentItem = getEnchantmentItem(enchantmentTrack, trackLevel); if (optionalEnchantmentItem.isEmpty()) - continue; - setItem(i, optionalEnchantmentItem.get(), clickingPlayer -> upgrade(clickingPlayer, enchantmentTrack, trackLevel)); + setItem(i, maxUpgraded, clickingPlayer -> { + clickingPlayer.sendMiniMessage(Messages.GUI.MAX_UPGRADED, TagResolver.resolver( + Placeholder.parsed("track", enchantmentTrack.getInternalName()))); + }); + else + setItem(i, optionalEnchantmentItem.get(), clickingPlayer -> upgrade(clickingPlayer, enchantmentTrack, trackLevel)); i++; } - canOpen = true; } private int getTrackLevel(EnchantmentTrack enchantmentTrack, ItemStack fishingRod) { @@ -71,15 +86,18 @@ public class UpgradeWindow extends GUI { } private Optional getEnchantmentItem(EnchantmentTrack enchantmentTrack, int trackLevel) { - if (enchantmentTrack.getMaxLevel() == trackLevel) { + if (enchantmentTrack.getMaxLevel() == trackLevel) { //TODO fix this won't work if there are 2+ enchantments in a track and the second has more levels + logger.debug("Player got maxed out track"); return Optional.empty(); } ItemStack itemStack = new ItemStack(Material.ENCHANTED_BOOK, 1); Optional optionalEnchantmentData = enchantmentTrack.nextEnchantment(trackLevel); - if (optionalEnchantmentData.isEmpty()) + if (optionalEnchantmentData.isEmpty()) { + logger.debug("Player was unable to get next enchant"); return Optional.empty(); + } EnchantmentData enchantmentData = optionalEnchantmentData.get(); - itemStack.addEnchantment(enchantmentData.enchantment(), enchantmentData.level()); + itemStack.addUnsafeEnchantment(enchantmentData.enchantment(), enchantmentData.level()); return Optional.of(itemStack); } @@ -106,7 +124,10 @@ public class UpgradeWindow extends GUI { EnchantmentData enchantmentData = optionalEnchantmentData.get(); if (playerPoints < enchantmentData.price()) { - //TODO tell player not enough points + player.sendMiniMessage(Messages.GUI.NOT_ENOUGH_POINTS, TagResolver.resolver( + Placeholder.parsed("price", String.valueOf(enchantmentData.price())), + Placeholder.parsed("points", String.valueOf(playerPoints)) + )); return; } @@ -121,22 +142,26 @@ public class UpgradeWindow extends GUI { try { PointsManagement.getInstance().removePoints(player.getUniqueId(), enchantmentData.price()); } catch (IllegalArgumentException e) { - //TODO tell player not enough points + player.sendMiniMessage(Messages.GUI.NOT_ENOUGH_POINTS, TagResolver.resolver( + Placeholder.parsed("price", String.valueOf(enchantmentData.price())), + Placeholder.parsed("points", String.valueOf(playerPoints)) + )); return; } if (!updateEnchantment(fishingRod, enchantmentData, enchantmentTrack, trackLevel + 1)) { PointsManagement.getInstance().addPoints(player.getUniqueId(), enchantmentData.price()); - //TODO error + player.sendMiniMessage(Messages.OTHER_ERRORS.UNABLE_TO_UPDATE_ENCHANTMENT, null); return; } inventory.setItem(fishingRodSlot, fishingRod); + updateGUI(); player.updateInventory(); } private boolean updateEnchantment(ItemStack fishingRod, EnchantmentData enchantmentData, EnchantmentTrack enchantmentTrack, int newTrackLevel) { - fishingRod.addEnchantment(enchantmentData.enchantment(), enchantmentData.level()); + fishingRod.addUnsafeEnchantment(enchantmentData.enchantment(), enchantmentData.level()); ItemMeta itemMeta = fishingRod.getItemMeta(); PersistentDataContainer persistentDataContainer = itemMeta.getPersistentDataContainer(); Optional namespacedKey = getNamespacedKey(fishingEvent, enchantmentTrack.getInternalName());