diff --git a/src/main/java/com/songoda/ultimatekits/UltimateKits.java b/src/main/java/com/songoda/ultimatekits/UltimateKits.java index 56943e6..21db472 100644 --- a/src/main/java/com/songoda/ultimatekits/UltimateKits.java +++ b/src/main/java/com/songoda/ultimatekits/UltimateKits.java @@ -2,6 +2,8 @@ package com.songoda.ultimatekits; import com.songoda.ultimatekits.command.CommandManager; import com.songoda.ultimatekits.conversion.Convert; +import com.songoda.ultimatekits.economy.Economy; +import com.songoda.ultimatekits.economy.VaultEconomy; import com.songoda.ultimatekits.handlers.DisplayItemHandler; import com.songoda.ultimatekits.handlers.ParticleHandler; import com.songoda.ultimatekits.hologram.Hologram; @@ -49,6 +51,7 @@ public class UltimateKits extends JavaPlugin { private KeyManager keyManager; private DisplayItemHandler displayItemHandler; private Hologram hologram; + private Economy economy; private ItemSerializer itemSerializer; @@ -105,6 +108,9 @@ public class UltimateKits extends JavaPlugin { this.keyManager = new KeyManager(); this.commandManager = new CommandManager(this); + if (getServer().getPluginManager().getPlugin("Vault") != null) + this.economy = new VaultEconomy(this); + PluginManager pluginManager = getServer().getPluginManager(); // Register Hologram Plugin @@ -373,6 +379,11 @@ public class UltimateKits extends JavaPlugin { return hologram; } + + public Economy getEconomy() { + return economy; + } + /** * Grab instance of the item serializer * diff --git a/src/main/java/com/songoda/ultimatekits/command/commands/CommandKit.java b/src/main/java/com/songoda/ultimatekits/command/commands/CommandKit.java index 4562826..0cabb40 100644 --- a/src/main/java/com/songoda/ultimatekits/command/commands/CommandKit.java +++ b/src/main/java/com/songoda/ultimatekits/command/commands/CommandKit.java @@ -37,7 +37,7 @@ public class CommandKit extends AbstractCommand { } Kit kit = instance.getKitManager().getKit(kitName); if (sender.hasPermission("ultimatekits.admin")) { - kit.give(player, false, false, true); + kit.processGenericUse(player, true); } else { kit.buy(player); } @@ -63,7 +63,7 @@ public class CommandKit extends AbstractCommand { } } Kit kit = instance.getKitManager().getKit(kitName); - kit.give(player2, false, false, true); + kit.processGenericUse(player2, true); sender.sendMessage(instance.getReferences().getPrefix() + Methods.formatText("&7You gave &9" + player2.getDisplayName() + "&7 kit &9" + kit.getShowableName() + "&7.")); return ReturnType.SUCCESS; } diff --git a/src/main/java/com/songoda/ultimatekits/economy/Economy.java b/src/main/java/com/songoda/ultimatekits/economy/Economy.java new file mode 100644 index 0000000..99dd2fa --- /dev/null +++ b/src/main/java/com/songoda/ultimatekits/economy/Economy.java @@ -0,0 +1,12 @@ +package com.songoda.ultimatekits.economy; + +import org.bukkit.entity.Player; + +public interface Economy { + + boolean AddToBalance(Player player, double amount); + + boolean hasBalance(Player player, double cost); + + boolean withdrawBalance(Player player, double cost); +} diff --git a/src/main/java/com/songoda/ultimatekits/economy/VaultEconomy.java b/src/main/java/com/songoda/ultimatekits/economy/VaultEconomy.java new file mode 100644 index 0000000..f7cb0f4 --- /dev/null +++ b/src/main/java/com/songoda/ultimatekits/economy/VaultEconomy.java @@ -0,0 +1,33 @@ +package com.songoda.ultimatekits.economy; + +import com.songoda.ultimatekits.UltimateKits; +import org.bukkit.entity.Player; + +public class VaultEconomy implements Economy { + + private final UltimateKits plugin; + + private final net.milkbowl.vault.economy.Economy vault; + + public VaultEconomy(UltimateKits plugin) { + this.plugin = plugin; + + this.vault = plugin.getServer().getServicesManager(). + getRegistration(net.milkbowl.vault.economy.Economy.class).getProvider(); + } + + @Override + public boolean AddToBalance(Player player, double amount) { + return vault.depositPlayer(player, amount).transactionSuccess(); + } + + @Override + public boolean hasBalance(Player player, double cost) { + return vault.has(player, cost); + } + + @Override + public boolean withdrawBalance(Player player, double cost) { + return vault.withdrawPlayer(player, cost).transactionSuccess(); + } +} diff --git a/src/main/java/com/songoda/ultimatekits/gui/GUIConfirmBuy.java b/src/main/java/com/songoda/ultimatekits/gui/GUIConfirmBuy.java index 7c0b0d3..8748d23 100644 --- a/src/main/java/com/songoda/ultimatekits/gui/GUIConfirmBuy.java +++ b/src/main/java/com/songoda/ultimatekits/gui/GUIConfirmBuy.java @@ -82,7 +82,7 @@ public class GUIConfirmBuy extends AbstractGUI { @Override protected void registerClickables() { registerClickable(11, ((player1, inventory1, cursor, slot, type) -> { - kit.buyWithEconomy(player); + kit.processPurchaseUse(player); player.closeInventory(); })); diff --git a/src/main/java/com/songoda/ultimatekits/kit/Kit.java b/src/main/java/com/songoda/ultimatekits/kit/Kit.java index 3e0ff5a..40f43bc 100644 --- a/src/main/java/com/songoda/ultimatekits/kit/Kit.java +++ b/src/main/java/com/songoda/ultimatekits/kit/Kit.java @@ -13,7 +13,6 @@ import com.songoda.ultimatekits.utils.Methods; import com.songoda.ultimatekits.utils.ServerVersion; import com.songoda.ultimatekits.utils.gui.AbstractGUI; import me.clip.placeholderapi.PlaceholderAPI; -import net.milkbowl.vault.economy.Economy; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; @@ -22,7 +21,6 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.plugin.RegisteredServiceProvider; import java.util.*; @@ -62,7 +60,7 @@ public class Kit { public void buy(Player player) { try { if (hasPermission(player) && plugin.getConfig().getBoolean("Main.Allow Players To Receive Kits For Free If They Have Permission")) { - give(player, false, false, false); + processGenericUse(player, false); return; } @@ -95,10 +93,10 @@ public class Kit { return items; } - private boolean hasRoom(Player p, boolean useKey) { + private boolean hasRoom(Player player) { int space = 0; - for (ItemStack content : p.getInventory().getContents()) { + for (ItemStack content : player.getInventory().getContents()) { if (content == null) { space++; } @@ -106,73 +104,75 @@ public class Kit { int spaceNeeded = getItemContents().size(); - - if (useKey) { - Key key = plugin.getKeyManager().getKey(ChatColor.stripColor(p.getItemInHand().getItemMeta().getLore().get(0)).replace(" Key", "")); - if (key.getAmt() != -1) - spaceNeeded = key.getAmt(); - } - return space >= spaceNeeded; } - public void give(Player player, boolean useKey, boolean economy, boolean console) { - try { - if (plugin.getConfig().getBoolean("Main.Prevent The Redeeming of a Kit When Inventory Is Full") && !hasRoom(player, useKey)) { - player.sendMessage(plugin.getReferences().getPrefix() + plugin.getLocale().getMessage("event.claim.full")); - return; - } - if (plugin.getConfig().getBoolean("Main.Sounds Enabled") && kitAnimation == KitAnimation.NONE) { - if (UltimateKits.getInstance().isServerVersionAtLeast(ServerVersion.V1_12)) - player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.6F, 15.0F); - } - if (useKey) { - if (player.getItemInHand().getType() != Material.TRIPWIRE_HOOK || !player.getItemInHand().hasItemMeta()) { - return; - } - - Key key = plugin.getKeyManager().getKey(ChatColor.stripColor(player.getItemInHand().getItemMeta().getLore().get(0)).replace(" Key", "")); - - if (!player.getItemInHand().getItemMeta().getDisplayName().equals(plugin.getLocale().getMessage("interface.key.title", showableName)) - && !player.getItemInHand().getItemMeta().getDisplayName().equals(plugin.getLocale().getMessage("interface.key.title", "Any"))) { - player.sendMessage(Methods.formatText(plugin.getReferences().getPrefix() + plugin.getLocale().getMessage("event.crate.wrongkey"))); - return; - } - for (int i = 0; i < key.getKitAmount(); i++) { - if (givePartKit(player, key)) - return; - } - player.sendMessage(plugin.getReferences().getPrefix() + plugin.getLocale().getMessage("event.key.success", showableName)); - if (player.getInventory().getItemInHand().getAmount() != 1) { - ItemStack is = player.getItemInHand(); - is.setAmount(is.getAmount() - 1); - player.setItemInHand(is); - } else { - player.setItemInHand(null); - } - return; - } - - if (getNextUse(player) == -1 && !economy && !console) { - player.sendMessage(plugin.getReferences().getPrefix() + plugin.getLocale().getMessage("event.claim.nottwice")); - } else if (getNextUse(player) <= 0 || economy || console) { - giveKit(player); - if (economy) { - player.sendMessage(plugin.getReferences().getPrefix() + plugin.getLocale().getMessage("event.claim.purchasesuccess", showableName)); - } else { - updateDelay(player); - if (kitAnimation == KitAnimation.NONE) { - player.sendMessage(plugin.getReferences().getPrefix() + plugin.getLocale().getMessage("event.claim.givesuccess", showableName)); - } - } - } else { - player.sendMessage(plugin.getReferences().getPrefix() + plugin.getLocale().getMessage("event.claim.delay", Methods.makeReadable(getNextUse(player)))); - } - - } catch (Exception ex) { - Debugger.runReport(ex); + public void processKeyUse(Player player) { + ItemStack item = player.getItemInHand(); + if (item.getType() != Material.TRIPWIRE_HOOK || !item.hasItemMeta()) { + return; } + Key key = plugin.getKeyManager().getKey(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace(" Key", "")); + if (!item.getItemMeta().getDisplayName().equals(plugin.getLocale().getMessage("interface.key.title", showableName)) + && !item.getItemMeta().getDisplayName().equals(plugin.getLocale().getMessage("interface.key.title", "Any"))) { + player.sendMessage(Methods.formatText(plugin.getReferences().getPrefix() + plugin.getLocale().getMessage("event.crate.wrongkey"))); + return; + } + for (int i = 0; i < key.getKitAmount(); i++) { + if (!giveKit(player, key)) + return; + } + player.sendMessage(plugin.getReferences().getPrefix() + plugin.getLocale().getMessage("event.key.success", showableName)); + if (player.getInventory().getItemInHand().getAmount() != 1) { + ItemStack is = item; + is.setAmount(is.getAmount() - 1); + player.setItemInHand(is); + } else { + player.setItemInHand(null); + } + } + + public void processPurchaseUse(Player player) { + if (plugin.getEconomy() == null) return; + + if (!hasPermission(player)) { + player.sendMessage(plugin.getReferences().getPrefix() + Methods.formatText(plugin.getLocale() + .getMessage(plugin.getLocale().getMessage("command.general.noperms")))); + return; + } else if (!plugin.getEconomy().hasBalance(player, price)) { + player.sendMessage(plugin.getReferences().getPrefix() + Methods.formatText(plugin.getLocale().getMessage("event.claim.cannotafford", showableName))); + return; + } + if (this.delay > 0) { + if (getNextUse(player) == -1) { + player.sendMessage(plugin.getReferences().getPrefix() + Methods.formatText(plugin.getLocale().getMessage("event.claim.nottwice"))); + } else if (getNextUse(player) != 0) { + player.sendMessage(plugin.getReferences().getPrefix() + plugin.getLocale().getMessage("event.claim.delay", Methods.makeReadable(getNextUse(player)))); + return; + } + } + if (delay != 0) { + updateDelay(player); //updates delay on buy + } + plugin.getEconomy().withdrawBalance(player, price); + + giveKit(player); + player.sendMessage(plugin.getReferences().getPrefix() + plugin.getLocale().getMessage("event.claim.purchasesuccess", showableName)); + } + + public void processGenericUse(Player player, boolean forced) { + if (getNextUse(player) == -1 && !forced) { + player.sendMessage(plugin.getReferences().getPrefix() + plugin.getLocale().getMessage("event.claim.nottwice")); + } else if (getNextUse(player) <= 0 || forced) { + giveKit(player); + updateDelay(player); + if (kitAnimation == KitAnimation.NONE) { + player.sendMessage(plugin.getReferences().getPrefix() + plugin.getLocale().getMessage("event.claim.givesuccess", showableName)); + } + } else { + player.sendMessage(plugin.getReferences().getPrefix() + plugin.getLocale().getMessage("event.claim.delay", Methods.makeReadable(getNextUse(player)))); + } } @SuppressWarnings("Duplicates") @@ -202,7 +202,7 @@ public class Kit { try { List list = new ArrayList<>(); for (ItemStack is : items) { - if (is != null && is.getType() != null && is.getType() != Material.AIR) { + if (is != null && is.getType() != Material.AIR) { if (is.getItemMeta().hasLore()) { ItemMeta meta = is.getItemMeta(); @@ -264,16 +264,21 @@ public class Kit { return stacks; } - public void giveKit(Player player) { - try { - givePartKit(player, null); - } catch (Exception e) { - Debugger.runReport(e); - } + private boolean giveKit(Player player) { + return giveKit(player, null); } - private boolean givePartKit(Player player, Key key) { + private boolean giveKit(Player player, Key key) { try { + if (plugin.getConfig().getBoolean("Main.Prevent The Redeeming of a Kit When Inventory Is Full") && !hasRoom(player)) { + player.sendMessage(plugin.getReferences().getPrefix() + plugin.getLocale().getMessage("event.claim.full")); + return false; + } + if (plugin.getConfig().getBoolean("Main.Sounds Enabled") + && kitAnimation == KitAnimation.NONE + && UltimateKits.getInstance().isServerVersionAtLeast(ServerVersion.V1_12)) + player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.6F, 15.0F); + List innerContents = new ArrayList<>(getContents()); int amt = innerContents.size(); int amtToGive = key == null ? amt : key.getAmt(); @@ -347,40 +352,6 @@ public class Kit { return (last + delay) >= System.currentTimeMillis() ? (last + delay) - System.currentTimeMillis() : 0L; } - public void buyWithEconomy(Player player) { - try { - if (plugin.getServer().getPluginManager().getPlugin("Vault") == null) return; - RegisteredServiceProvider rsp = plugin.getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class); - net.milkbowl.vault.economy.Economy econ = rsp.getProvider(); - - if (!hasPermission(player)) { - player.sendMessage(plugin.getReferences().getPrefix() + Methods.formatText(UltimateKits.getInstance().getLocale().getMessage(UltimateKits.getInstance().getLocale().getMessage("command.general.noperms")))); - return; - } else if (!econ.has(player, price)) { - player.sendMessage(plugin.getReferences().getPrefix() + Methods.formatText(plugin.getLocale().getMessage("event.claim.cannotafford", showableName))); - return; - } - if (this.delay > 0) { - - if (getNextUse(player) == -1) { - player.sendMessage(plugin.getReferences().getPrefix() + Methods.formatText(plugin.getLocale().getMessage("event.claim.nottwice"))); - } else if (getNextUse(player) != 0) { - player.sendMessage(plugin.getReferences().getPrefix() + plugin.getLocale().getMessage("event.claim.delay", Methods.makeReadable(getNextUse(player)))); - return; - } - } - if (delay != 0) { - updateDelay(player); //updates delay on buy - } - econ.withdrawPlayer(player, price); - give(player, false, true, false); - - } catch (Exception ex) { - Debugger.runReport(ex); - } - - } - public boolean hasPermission(Player player) { try { if (player.hasPermission("uc.kit." + name.toLowerCase())) return true; diff --git a/src/main/java/com/songoda/ultimatekits/listeners/InteractListeners.java b/src/main/java/com/songoda/ultimatekits/listeners/InteractListeners.java index 155f667..d032e82 100644 --- a/src/main/java/com/songoda/ultimatekits/listeners/InteractListeners.java +++ b/src/main/java/com/songoda/ultimatekits/listeners/InteractListeners.java @@ -38,7 +38,9 @@ public class InteractListeners implements Listener { if (event.getClickedBlock() == null) return; KitBlockData kitBlockData = plugin.getKitManager().getKit(block.getLocation()); + if (kitBlockData == null) return; + Kit kit = kitBlockData.getKit(); Player player = event.getPlayer(); @@ -49,7 +51,7 @@ public class InteractListeners implements Listener { if (player.getItemInHand().getType() == Material.TRIPWIRE_HOOK) { event.setCancelled(true); - kit.give(player, true, false, false); + kit.processKeyUse(player); return; } @@ -59,7 +61,7 @@ public class InteractListeners implements Listener { return; } if (kit.getNextUse(player) <= 0) { - kit.give(player, false, false, false); + kit.processGenericUse(player, false); kit.updateDelay(player); } else { long time = kit.getNextUse(player); @@ -81,7 +83,7 @@ public class InteractListeners implements Listener { } if (player.getItemInHand().getType() == Material.TRIPWIRE_HOOK) { event.setCancelled(true); - kit.give(player, true, false, false); + kit.processKeyUse(player); return; } kit.display(player, null);