Redid kit give system and added proper economy handler

This commit is contained in:
Brianna 2019-06-10 20:51:51 -04:00
parent d2ac2ea5da
commit 4ae24c1d04
7 changed files with 144 additions and 115 deletions

View File

@ -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
*

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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();
}
}

View File

@ -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();
}));

View File

@ -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<KitItem> 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<KitItem> 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<Economy> 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;

View File

@ -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);