/
QueueCommand.java
112 lines (82 loc) · 3.8 KB
/
QueueCommand.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
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;
import net.aufdemrand.denizen.scripts.ScriptQueue;
import net.aufdemrand.denizen.scripts.commands.AbstractCommand;
import net.aufdemrand.denizen.utilities.arguments.Duration;
import net.aufdemrand.denizen.utilities.arguments.aH;
import net.aufdemrand.denizen.utilities.debugging.dB;
public class QueueCommand extends AbstractCommand {
private enum Action { CLEAR, SET, DELAY, PAUSE, RESUME }
@Override
public void parseArgs(ScriptEntry scriptEntry) throws InvalidArgumentsException {
ScriptQueue queue = scriptEntry.getResidingQueue();
Action action = null;
Duration delay = null;
List<ScriptQueue> queues = new ArrayList<ScriptQueue>();
// 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());
else if (aH.matchesValueArg("DELAY", arg, aH.ArgumentType.Duration)) {
action = Action.DELAY;
delay = aH.getDurationFrom(arg);
}
// queue: argument should be optional in this command
else {
queues.clear();
for (String queueName : aH.getListFrom(arg)) {
try {
queues.add(aH.getQueueFrom(queueName));
} catch (Exception e) {
// must be null, don't add
}
}
}
}
// If no queues have been added, assume 'residing queue'
if (queues.isEmpty()) queues.add(scriptEntry.getResidingQueue());
// Check required args
if (action == null)
throw new InvalidArgumentsException("Must specify an action. Valid: CLEAR, SET, DELAY, PAUSE, RESUME");
if (action == Action.DELAY && delay == null)
throw new InvalidArgumentsException("Must specify a delay.");
// Stash args in ScriptEntry for use in execute()
scriptEntry.addObject("queue", queue)
.addObject("action", action)
.addObject("delay", delay);
}
@SuppressWarnings({ "incomplete-switch", "unchecked" })
@Override
public void execute(ScriptEntry scriptEntry) throws CommandExecutionException {
List<ScriptQueue> queues = (List<ScriptQueue>) scriptEntry.getObject("queues");
Action action = (Action) scriptEntry.getObject("action");
Duration delay = (Duration) scriptEntry.getObject("duration");
// Debugger
dB.report(getName(), aH.debugObj("Queues", queues.toString())
+ aH.debugObj("Action", action.toString())
+ (action != null && action == Action.DELAY ? delay.debug() : ""));
switch (action) {
case CLEAR:
for (ScriptQueue queue : queues)
queue.clear();
return;
case PAUSE:
for (ScriptQueue queue : queues)
queue.setPaused(true);
return;
case RESUME:
for (ScriptQueue queue : queues)
queue.setPaused(false);
return;
case DELAY:
for (ScriptQueue queue : queues)
queue.delayFor(delay.getTicks());
return;
}
}
}