package net.aufdemrand.denizen.scripts.commands.player; import net.aufdemrand.denizen.BukkitScriptEntryData; import net.aufdemrand.denizen.objects.dPlayer; import net.aufdemrand.denizen.utilities.depends.Depends; import net.aufdemrand.denizencore.exceptions.CommandExecutionException; import net.aufdemrand.denizencore.exceptions.InvalidArgumentsException; import net.aufdemrand.denizencore.objects.Element; import net.aufdemrand.denizencore.objects.aH; import net.aufdemrand.denizencore.objects.dList; import net.aufdemrand.denizencore.scripts.ScriptEntry; import net.aufdemrand.denizencore.scripts.commands.AbstractCommand; import net.aufdemrand.denizencore.utilities.debugging.dB; import net.milkbowl.vault.economy.Economy; import java.util.Arrays; import java.util.List; public class MoneyCommand extends AbstractCommand { enum Action { GIVE, TAKE, SET } @Override public void parseArgs(ScriptEntry scriptEntry) throws InvalidArgumentsException { for (aH.Argument arg : aH.interpret(scriptEntry.getArguments())) { if (!scriptEntry.hasObject("action") && arg.matchesEnum(Action.values())) { scriptEntry.addObject("action", arg.asElement()); } else if (!scriptEntry.hasObject("quantity") && arg.matchesPrefix("quantity", "qty", "q") && arg.matchesPrimitive(aH.PrimitiveType.Double)) { scriptEntry.addObject("quantity", arg.asElement()); } else if (!scriptEntry.hasObject("players") && arg.matchesPrefix("to", "from", "players", "player") && arg.matchesArgumentList(dPlayer.class)) { scriptEntry.addObject("players", arg.asType(dList.class).filter(dPlayer.class)); } else { arg.reportUnhandled(); } } scriptEntry.defaultObject("quantity", new Element(1)); if (!scriptEntry.hasObject("players")) { if (!((BukkitScriptEntryData) scriptEntry.entryData).hasPlayer()) { throw new InvalidArgumentsException("This command must have a player attached!"); } else { scriptEntry.addObject("players", Arrays.asList(((BukkitScriptEntryData) scriptEntry.entryData).getPlayer())); } } else if (!scriptEntry.hasObject("action")) { throw new InvalidArgumentsException("Must specify a valid action!"); } } @Override public void execute(ScriptEntry scriptEntry) throws CommandExecutionException { Element action = scriptEntry.getElement("action"); Element quantity = scriptEntry.getElement("quantity"); List<dPlayer> players = (List<dPlayer>) scriptEntry.getObject("players"); dB.report(scriptEntry, getName(), aH.debugList("Player(s)", players) + action.debug() + quantity.debug()); Economy eco = Depends.economy; double amt = quantity.asDouble(); switch (Action.valueOf(action.asString().toUpperCase())) { case GIVE: for (dPlayer player : players) { eco.depositPlayer(player.getOfflinePlayer(), amt); } break; case TAKE: for (dPlayer player : players) { eco.withdrawPlayer(player.getOfflinePlayer(), amt); } break; case SET: for (dPlayer player : players) { double balance = eco.getBalance(player.getOfflinePlayer()); if (amt > balance) { eco.depositPlayer(player.getOfflinePlayer(), amt - balance); } else { eco.withdrawPlayer(player.getOfflinePlayer(), balance - amt); } } } } }