diff --git a/src/main/java/net/aufdemrand/denizen/scripts/commands/core/QueueCommand.java b/src/main/java/net/aufdemrand/denizen/scripts/commands/core/QueueCommand.java index 9cadf5677c..cf83c4dd7c 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/commands/core/QueueCommand.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/commands/core/QueueCommand.java @@ -1,8 +1,5 @@ package net.aufdemrand.denizen.scripts.commands.core; -import java.util.ArrayList; -import java.util.List; - import net.aufdemrand.denizen.exceptions.CommandExecutionException; import net.aufdemrand.denizen.exceptions.InvalidArgumentsException; import net.aufdemrand.denizen.scripts.ScriptEntry; @@ -21,90 +18,66 @@ private enum Action { CLEAR, SET, DELAY, PAUSE, RESUME } @Override public void parseArgs(ScriptEntry scriptEntry) throws InvalidArgumentsException { - Action action = null; - Duration delay = null; - - List queues = new ArrayList(); - - // Use current queue if none specified. - queues.add(scriptEntry.getResidingQueue()); - - for (String arg : scriptEntry.getArguments()) { - - if (aH.matchesArg("CLEAR, SET, PAUSE, RESUME", arg)) - action = Action.valueOf(aH.getStringFrom(arg).toUpperCase()); + for (aH.Argument arg : aH.interpret(scriptEntry.getArguments())) { - else if (aH.matchesValueArg("DELAY", arg, aH.ArgumentType.Duration)) { - action = Action.DELAY; - delay = aH.getDurationFrom(arg); + if (!scriptEntry.hasObject("action") + && arg.matchesEnum(Action.values())) { + scriptEntry.addObject("action", Action.valueOf(arg.getValue().toUpperCase())); + if (scriptEntry.getObject("action") == Action.DELAY + && arg.matchesArgumentType(Duration.class)) + scriptEntry.addObject("delay", arg.asType(Duration.class)); } // queue: argument should be optional in this command - else { - queues.clear(); - for (String queueName : aH.getListFrom(arg)) { - try { - queues.add(ScriptQueue._getExistingQueue(queueName)); - } catch (Exception e) { - // must be null, don't add - } - } - - } + else if (ScriptQueue._getExistingQueue(arg.getValue()) != null) + scriptEntry.addObject("queue", ScriptQueue._getExistingQueue(arg.getValue())); + } // If no queues have been added, assume 'residing queue' - if (queues.isEmpty()) queues.add(scriptEntry.getResidingQueue()); + scriptEntry.defaultObject("queue", scriptEntry.getResidingQueue()); // Check required args - if (action == null) + if (!scriptEntry.hasObject("action")) throw new InvalidArgumentsException("Must specify an action. Valid: CLEAR, SET, DELAY, PAUSE, RESUME"); - if (action == Action.DELAY && delay == null) + if (scriptEntry.getObject("action") == Action.DELAY && !scriptEntry.hasObject("delay")) throw new InvalidArgumentsException("Must specify a delay."); - - // Stash args in ScriptEntry for use in execute() - scriptEntry.addObject("queues", queues) - .addObject("action", action) - .addObject("delay", delay); + } - @SuppressWarnings({ "incomplete-switch", "unchecked" }) + @SuppressWarnings("incomplete-switch") @Override public void execute(ScriptEntry scriptEntry) throws CommandExecutionException { - List queues = (List) scriptEntry.getObject("queues"); + ScriptQueue queue = (ScriptQueue) scriptEntry.getObject("queue"); Action action = (Action) scriptEntry.getObject("action"); - Duration delay = (Duration) scriptEntry.getObject("duration"); + Duration delay = (Duration) scriptEntry.getObject("delay"); // Debugger - dB.report(getName(), aH.debugObj("Queues", queues.toString()) + dB.report(getName(), aH.debugObj("Queue", queue.toString()) + aH.debugObj("Action", action.toString()) + (action != null && action == Action.DELAY ? delay.debug() : "")); switch (action) { case CLEAR: - for (ScriptQueue queue : queues) - queue.clear(); + queue.clear(); return; case PAUSE: - for (ScriptQueue queue : queues) if (queue instanceof TimedQueue) ((TimedQueue) queue).setPaused(true); return; case RESUME: - for (ScriptQueue queue : queues) - if (queue instanceof TimedQueue) - ((TimedQueue) queue).setPaused(false); + if (queue instanceof TimedQueue) + ((TimedQueue) queue).setPaused(false); return; case DELAY: - for (ScriptQueue queue : queues) - if (queue instanceof TimedQueue) - ((TimedQueue) queue).delayFor(delay); + if (queue instanceof TimedQueue) + ((TimedQueue) queue).delayFor(delay); return; }