From 6684e812d151e6466e9a2f0f75f851f8abbd5853 Mon Sep 17 00:00:00 2001 From: AlexTheCoder Date: Thu, 4 May 2017 18:33:48 -0400 Subject: [PATCH] Implement xp-less and crown kit upgrading and slightly modify kit progression gui --- .../progression/data/KitUpgradeProcessor.java | 60 ++++++++++++------- .../gui/buttons/KitUpgradeDetailsButton.java | 34 ++++++++--- .../gui/buttons/KitUpgradeMenuButton.java | 24 ++++++-- .../progression/gui/guis/KitDisplayMenu.java | 9 ++- .../gui/guis/KitInformationTrackerMenu.java | 26 +++++--- .../core/progression/math/Calculations.java | 54 +++++++++++++++-- 6 files changed, 156 insertions(+), 51 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/progression/data/KitUpgradeProcessor.java b/Plugins/Mineplex.Core/src/mineplex/core/progression/data/KitUpgradeProcessor.java index e8cff97ee..e090dae6b 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/progression/data/KitUpgradeProcessor.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/progression/data/KitUpgradeProcessor.java @@ -1,6 +1,6 @@ package mineplex.core.progression.data; -import mineplex.core.server.util.TransactionResponse; +import java.util.function.Consumer; import org.bukkit.Sound; import org.bukkit.entity.Player; @@ -11,6 +11,7 @@ import mineplex.core.common.util.F; import mineplex.core.progression.KitProgressionManager; import mineplex.core.progression.ProgressiveKit; import mineplex.core.progression.math.Calculations; +import mineplex.core.server.util.TransactionResponse; import mineplex.core.shop.confirmation.ConfirmationCallback; import mineplex.core.shop.confirmation.ConfirmationProcessor; @@ -39,27 +40,40 @@ public class KitUpgradeProcessor implements ConfirmationProcessor { String packageName = _kit.getInternalName() + "." + _upgradeLevel; int cost = Calculations.getGemsCost(_upgradeLevel); + if (!_kit.usesXp()) + { + cost = Calculations.getGemsCostXpLess(_upgradeLevel); + } + + Consumer handler = response -> + { + if (response == TransactionResponse.Success) + { + _kit.upgrade(_upgradeLevel, _player.getUniqueId()); + + _player.playSound(_player.getLocation(), Sound.CAT_MEOW, 5.0f, 1.0f); + _player.sendMessage(F.main("Kit Progression", "Purchased upgrades for " + _kit.getDisplayName() + " level " + _upgradeLevel)); + + callback.resolve("Success! You now own this upgrade!"); + } + else if (response == TransactionResponse.InsufficientFunds) + { + callback.reject("Insufficient funds!"); + } + else + { + callback.reject("There was an error processing your transaction. Try again later"); + } + }; + // Use UnknownPackages for this right now as it handles overspending gems properly - _manager.getDonationManager().purchaseUnknownSalesPackage(_player, packageName, GlobalCurrency.GEM, cost, false, - data -> - { - if (data == TransactionResponse.Success) - { - _kit.upgrade(_upgradeLevel, _player.getUniqueId()); - - _player.playSound(_player.getLocation(), Sound.CAT_MEOW, 5.0f, 1.0f); - _player.sendMessage(F.main("Kit Progression", "Purchased upgrades for " + _kit.getDisplayName() + " level " + _upgradeLevel)); - - callback.resolve("Success! You now own this upgrade!"); - } - else if (data == TransactionResponse.InsufficientFunds) - { - callback.reject("Insufficient funds!"); - } - else - { - callback.reject("There was an error processing your transaction. Try again later"); - } - }); + if (_kit.crownsEnabled()) + { + _manager.getDonationManager().purchaseUnknownSalesPackageCrown(_player, packageName, cost, false, handler); + } + else + { + _manager.getDonationManager().purchaseUnknownSalesPackage(_player, packageName, GlobalCurrency.GEM, cost, false, handler); + } } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/progression/gui/buttons/KitUpgradeDetailsButton.java b/Plugins/Mineplex.Core/src/mineplex/core/progression/gui/buttons/KitUpgradeDetailsButton.java index 911a8087d..11a12c356 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/progression/gui/buttons/KitUpgradeDetailsButton.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/progression/gui/buttons/KitUpgradeDetailsButton.java @@ -1,14 +1,18 @@ package mineplex.core.progression.gui.buttons; +import java.util.List; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + import com.google.common.collect.Lists; + import mineplex.core.common.util.C; import mineplex.core.itemstack.ItemBuilder; import mineplex.core.menu.IconButton; +import mineplex.core.progression.ProgressiveKit; import mineplex.core.progression.math.Calculations; -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; - -import java.util.List; /** * Representing this kits Abilities in a GUI @@ -18,11 +22,13 @@ public class KitUpgradeDetailsButton extends IconButton private ItemStack _item; - public KitUpgradeDetailsButton(int level, List details) + public KitUpgradeDetailsButton(ProgressiveKit kit, Player player, int level, List details) { super(null); - - ItemBuilder builder = new ItemBuilder(Material.SLIME_BALL); + + int current = kit.getUpgradeLevel(player.getUniqueId()); + + ItemBuilder builder = new ItemBuilder(Material.STAINED_CLAY).setData((current >= level) ? (short)5 : (short)14); builder.setTitle(C.cYellow + "Level " + level + " upgrades"); @@ -34,7 +40,19 @@ public class KitUpgradeDetailsButton extends IconButton } lore.add(""); - lore.add(C.cGray + "Unlocks at kit level " + C.cGreen + Calculations.getLevelRequiredFor(level)); + if (kit.usesXp()) + { + lore.add(C.cGray + "Unlocks at kit level " + C.cGreen + Calculations.getLevelRequiredFor(level)); + } + else + { + String currency = C.cGreen + "%cost% Gems"; + if (kit.crownsEnabled()) + { + currency = C.cGold + "%cost% Crowns"; + } + lore.add(C.cGray + "Unlocks with " + currency.replace("%cost%", Calculations.getGemsCostXpLess(level) + "")); + } builder.setLore(lore.toArray(new String[lore.size()])); _item = builder.build(); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/progression/gui/buttons/KitUpgradeMenuButton.java b/Plugins/Mineplex.Core/src/mineplex/core/progression/gui/buttons/KitUpgradeMenuButton.java index 0bd36086c..263f69476 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/progression/gui/buttons/KitUpgradeMenuButton.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/progression/gui/buttons/KitUpgradeMenuButton.java @@ -1,5 +1,6 @@ package mineplex.core.progression.gui.buttons; +import mineplex.core.common.currency.GlobalCurrency; import mineplex.core.common.util.C; import mineplex.core.itemstack.ItemBuilder; import mineplex.core.progression.KitProgressionManager; @@ -47,14 +48,20 @@ public class KitUpgradeMenuButton extends KitButton //The difference between the players current level, and the next upgrade level int diff = nextUpgradeLevelPlayer - level; + int balance = plugin.getDonationManager().Get(player).getBalance(GlobalCurrency.GEM); + if (kit.crownsEnabled()) + { + balance = plugin.getDonationManager().getCrowns(player); + } + //This ONLY flashes if their next upgrade level isn't their same one. - _flash = Calculations.isUpgradeLevelEligible(level) && (nextUpgradeLevel > upgradeLevel); + _flash = (kit.usesXp() ? (Calculations.isUpgradeLevelEligible(level) && (nextUpgradeLevel > upgradeLevel)) : (Calculations.isUpgradeLevelEligibleXpLess(balance) && upgradeLevel < Calculations.getNextUpgradeLevelXpLess(upgradeLevel))); ChatColor color = Calculations.getColor(level, nextUpgradeLevelPlayer); - if(kit.showUpgrades()) + if (kit.showUpgrades()) { - ItemBuilder builder = lore(new ItemBuilder(Material.ENCHANTMENT_TABLE), upgradeLevel, color, diff); + ItemBuilder builder = kit.usesXp() ? lore(new ItemBuilder(Material.ENCHANTMENT_TABLE), upgradeLevel, color, diff) : lore(new ItemBuilder(Material.ENCHANTMENT_TABLE), upgradeLevel); builder.setTitle(C.cYellow + "Upgrade Level " + upgradeLevel); _item = builder.build(); } @@ -138,4 +145,13 @@ public class KitUpgradeMenuButton extends KitButton ChatColor.WHITE + "Click to view Upgrade and XP tracking"); return builder; } -} + + private ItemBuilder lore(ItemBuilder builder, int upgradeLevel) + { + builder.setLore(" ", + ChatColor.WHITE + "Upgrade Level: " + ChatColor.GREEN + upgradeLevel + " out of 5", + "", + ChatColor.WHITE + "Click to view Upgrades"); + return builder; + } +} \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/progression/gui/guis/KitDisplayMenu.java b/Plugins/Mineplex.Core/src/mineplex/core/progression/gui/guis/KitDisplayMenu.java index 2a9d73b67..e32104822 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/progression/gui/guis/KitDisplayMenu.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/progression/gui/guis/KitDisplayMenu.java @@ -63,8 +63,11 @@ public class KitDisplayMenu extends KitMenu */ private void setUpNextMenuButtons(Button[] buttons, Player player) { - buttons[48] = new KitXPButton(getKit(), player, getPlugin()); - buttons[50] = new KitUpgradeMenuButton(getKit(), player, getPlugin()); + if (getKit().usesXp()) + { + buttons[48] = new KitXPButton(getKit(), player, getPlugin()); + } + buttons[getKit().usesXp() ? 50 : 49] = new KitUpgradeMenuButton(getKit(), player, getPlugin()); } /** @@ -90,7 +93,7 @@ public class KitDisplayMenu extends KitMenu int index = 0; for(int i : UPGRADE_SLOTS) { - buttons[i] = new KitUpgradeDetailsButton(index + 1, details.get(index++)); + buttons[i] = new KitUpgradeDetailsButton(getKit(), player, index + 1, details.get(index++)); } return; } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/progression/gui/guis/KitInformationTrackerMenu.java b/Plugins/Mineplex.Core/src/mineplex/core/progression/gui/guis/KitInformationTrackerMenu.java index 42d1aa723..9a61c872f 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/progression/gui/guis/KitInformationTrackerMenu.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/progression/gui/guis/KitInformationTrackerMenu.java @@ -59,11 +59,13 @@ public class KitInformationTrackerMenu extends KitMenu Button[] buttons = new Button[52]; buttons[0] = new BackButton(new KitDisplayMenu(getKit(), getPlugin())); - - setUpXP(buttons, player); - - setUpLevel(buttons, player); - + + if (getKit().usesXp()) + { + setUpXP(buttons, player); + setUpLevel(buttons, player); + } + setUpUpgrade(buttons, player); return buttons; @@ -155,10 +157,10 @@ public class KitInformationTrackerMenu extends KitMenu Map> details = getKit().getUpgradeDetails(); int index = 0; - for(int i : UPGRADE_SLOTS) + for (int i : (getKit().usesXp() ? UPGRADE_SLOTS : LEVEL_SLOTS)) { List list = details.get(index++); - KitUpgradeDetailsButton detailsButton = new KitUpgradeDetailsButton(index, list); + KitUpgradeDetailsButton detailsButton = new KitUpgradeDetailsButton(getKit(), player, index, list); ItemBuilder itemStack = new ItemBuilder(detailsButton.getItemStack()); if (getKit().ownsUpgrade(player.getUniqueId(), index)) @@ -168,12 +170,18 @@ public class KitInformationTrackerMenu extends KitMenu else if (getKit().canPurchaseUpgrade(player.getUniqueId(), index)) { itemStack.setGlow(true); - itemStack.addLore("Costs " + C.cGreen + Calculations.getGemsCost(index) + C.cGray + " gems"); + if (getKit().usesXp()) + { + itemStack.addLore("Costs " + (getKit().crownsEnabled() ? C.cGold : C.cGreen) + Calculations.getGemsCost(index) + C.cGray + (getKit().crownsEnabled() ? " crowns" : " gems")); + } itemStack.addLore(C.cGreen + "Click to purchase this upgrade!"); } else { - itemStack.addLore("Costs " + C.cGreen + Calculations.getGemsCost(index) + C.cGray + " gems"); + if (getKit().usesXp()) + { + itemStack.addLore("Costs " + (getKit().crownsEnabled() ? C.cGold : C.cGreen) + Calculations.getGemsCost(index) + C.cGray + (getKit().crownsEnabled() ? " crowns" : " gems")); + } itemStack.addLore(C.cRed + "You cannot purchase this upgrade!"); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/progression/math/Calculations.java b/Plugins/Mineplex.Core/src/mineplex/core/progression/math/Calculations.java index b4a6ac726..ae9c9013b 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/progression/math/Calculations.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/progression/math/Calculations.java @@ -1,10 +1,12 @@ package mineplex.core.progression.math; -import com.google.common.collect.Maps; -import net.md_5.bungee.api.ChatColor; - +import java.util.HashMap; import java.util.Map; +import com.google.common.collect.Maps; + +import net.md_5.bungee.api.ChatColor; + /** * This class handles all the math and static fields needed for Kit Progressions * You can find some util methods in here as well that relate to numbers @@ -15,6 +17,7 @@ public class Calculations private static final int[] LEVELS = new int[100]; private static final int[] UPGRADE_LEVELS = {5, 10, 30, 75, 100}; private static final Map GEMS_FOR_UPGRADE = Maps.newHashMap(); + private static final Map GEMS_FOR_XPLESS_UPGRADE = new HashMap<>(); static { @@ -23,6 +26,11 @@ public class Calculations { GEMS_FOR_UPGRADE.put(level, level * 1000); } + GEMS_FOR_XPLESS_UPGRADE.put(1, 1000); + GEMS_FOR_XPLESS_UPGRADE.put(2, 5000); + GEMS_FOR_XPLESS_UPGRADE.put(3, 15000); + GEMS_FOR_XPLESS_UPGRADE.put(4, 30000); + GEMS_FOR_XPLESS_UPGRADE.put(5, 60000); } /** @@ -79,6 +87,20 @@ public class Calculations { return GEMS_FOR_UPGRADE.containsKey(currentLevel); } + + public static boolean isUpgradeLevelEligibleXpLess(int gems) + { + boolean afford = false; + + for (int cost : GEMS_FOR_XPLESS_UPGRADE.values()) + { + if (cost <= gems) + { + afford = true; + } + } + return afford; + } /** * Determines if the players current level, and his gems, are what he needs to level up this upgrade @@ -91,6 +113,11 @@ public class Calculations { return GEMS_FOR_UPGRADE.containsKey(currentLevel) && GEMS_FOR_UPGRADE.get(currentLevel) <= gems; } + + public static boolean canUpgradeXpLess(int upgradeLevel, int gems) + { + return GEMS_FOR_XPLESS_UPGRADE.containsKey(upgradeLevel) && GEMS_FOR_XPLESS_UPGRADE.get(upgradeLevel) <= gems; + } /** * Get the XP required for the next level @@ -155,7 +182,7 @@ public class Calculations } /** - * Get the next integer upgrade level based of the players current leve; + * Get the next integer upgrade level based of the players current level * * @param currentLevel The players current level * @return The next upgrade level @@ -169,6 +196,20 @@ public class Calculations } return 5; } + + public static int getNextUpgradeLevelXpLess(int currentLevel) + { + int current = 5; + for (int level : GEMS_FOR_XPLESS_UPGRADE.keySet()) + { + if (level < current && level > currentLevel) + { + current = level; + } + } + + return current; + } /** * Get the next level the player needs to reach to unlock an upgrade @@ -215,4 +256,9 @@ public class Calculations { return GEMS_FOR_UPGRADE.get(getLevelRequiredFor(upgradeLevel)); } + + public static int getGemsCostXpLess(int upgradeLevel) + { + return GEMS_FOR_XPLESS_UPGRADE.get(upgradeLevel); + } }