/
TaskScriptContainer.java
103 lines (87 loc) · 4.03 KB
/
TaskScriptContainer.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
package net.aufdemrand.denizencore.scripts.containers.core;
import net.aufdemrand.denizencore.DenizenCore;
import net.aufdemrand.denizencore.scripts.ScriptBuilder;
import net.aufdemrand.denizencore.scripts.ScriptEntry;
import net.aufdemrand.denizencore.scripts.ScriptEntryData;
import net.aufdemrand.denizencore.scripts.queues.ScriptQueue;
import net.aufdemrand.denizencore.scripts.containers.ScriptContainer;
import net.aufdemrand.denizencore.objects.Duration;
import net.aufdemrand.denizencore.scripts.queues.core.InstantQueue;
import net.aufdemrand.denizencore.scripts.queues.core.TimedQueue;
import net.aufdemrand.denizencore.utilities.YamlConfiguration;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TaskScriptContainer extends ScriptContainer {
public TaskScriptContainer(YamlConfiguration configurationSection, String scriptContainerName) {
super(configurationSection, scriptContainerName);
}
public Duration getSpeed() {
Duration speed;
if (contains("SPEED")) {
if (getString("SPEED", "0").toUpperCase().equals("INSTANT"))
speed = Duration.valueOf("0t");
else
speed = Duration.valueOf(getString("SPEED", "0t"));
} else
// TODO: Settings = read dImplementation
speed = new Duration(Duration.valueOf(DenizenCore.getImplementation().scriptQueueSpeed()).getSeconds());
return speed;
}
public TaskScriptContainer setSpeed(Duration speed) {
// TODO: Remove with RunTask
set("SPEED", speed.getSeconds());
return this;
}
// TODO: use a context object
public ScriptQueue runTaskScript(ScriptEntryData data, Map<String, String> context) {
return runTaskScript(ScriptQueue.getNextId(getName()), data, context);
}
public ScriptQueue runTaskScript(String queueId, ScriptEntryData data, Map<String, String> context) {
ScriptQueue queue;
if (getSpeed().getSeconds() == 0)
queue = InstantQueue.getQueue(queueId);
else queue = TimedQueue.getQueue(queueId).setSpeed(getSpeed().getTicks());
List<ScriptEntry> listOfEntries = getBaseEntries(data);
if (context != null)
ScriptBuilder.addObjectToEntries(listOfEntries, "context", context);
queue.addEntries(listOfEntries);
queue.start();
return queue;
}
public Map<String, Integer> getContextMap() {
if (contains("CONTEXT")) {
Map<String, Integer> context = new HashMap<String, Integer>();
int x = 1;
for (String name : getString("CONTEXT").split("\\|")) {
context.put(name.toUpperCase(), x);
x++;
}
return context;
}
return Collections.emptyMap();
}
public ScriptQueue runTaskScriptWithDelay(String queueId, ScriptEntryData data, Map<String, String> context, Duration delay) {
ScriptQueue queue;
if (getSpeed().getSeconds() == 0)
queue = InstantQueue.getQueue(queueId);
else queue = TimedQueue.getQueue(queueId).setSpeed(getSpeed().getTicks());
List<ScriptEntry> listOfEntries = getBaseEntries(data);
if (context != null)
ScriptBuilder.addObjectToEntries(listOfEntries, "context", context);
queue.addEntries(listOfEntries);
queue.delayUntil(System.currentTimeMillis() + (long) (delay.getSeconds() * 1000));
queue.start();
return queue;
}
public ScriptQueue injectTaskScript(String queueId, ScriptEntryData data, Map<String, String> context) {
ScriptQueue queue = ScriptQueue._getExistingQueue(queueId);
List<ScriptEntry> listOfEntries = getBaseEntries(data);
if (context != null)
ScriptBuilder.addObjectToEntries(listOfEntries, "context", context);
queue.injectEntries(listOfEntries, 0);
queue.start();
return queue;
}
}