-
-
Notifications
You must be signed in to change notification settings - Fork 103
/
RequirementRegistry.java
126 lines (94 loc) · 4.67 KB
/
RequirementRegistry.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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package net.aufdemrand.denizen.scripts.requirements;
import net.aufdemrand.denizen.Denizen;
import net.aufdemrand.denizen.interfaces.dRegistry;
import net.aufdemrand.denizen.interfaces.RegistrationableInstance;
import net.aufdemrand.denizen.scripts.requirements.core.*;
import net.aufdemrand.denizen.utilities.debugging.dB;
import java.util.HashMap;
import java.util.Map;
public class RequirementRegistry implements dRegistry {
public Denizen denizen;
private Map<String, AbstractRequirement> instances = new HashMap<String, AbstractRequirement>();
private Map<Class<? extends AbstractRequirement>, String> classes = new HashMap<Class<? extends AbstractRequirement>, String>();
public RequirementRegistry(Denizen denizen) {
this.denizen = denizen;
}
@Override
public void disableCoreMembers() {
for (RegistrationableInstance member : instances.values())
try {
member.onDisable();
} catch (Exception e) {
dB.echoError("Unable to disable '" + member.getClass().getName() + "'!");
if (dB.showStackTraces) e.printStackTrace();
}
}
@Override
public <T extends RegistrationableInstance> T get(Class<T> clazz) {
if (classes.containsKey(clazz)) return (T) clazz.cast(instances.get(classes.get(clazz)));
else return null;
}
@Override
public AbstractRequirement get(String requirementName) {
if (instances.containsKey(requirementName.toUpperCase())) return instances.get(requirementName.toUpperCase());
else return null;
}
@Override
public Map<String, AbstractRequirement> list() {
return instances;
}
@Override
public boolean register(String requirementName, RegistrationableInstance requirementClass) {
this.instances.put(requirementName.toUpperCase(), (AbstractRequirement) requirementClass);
this.classes.put(((AbstractRequirement) requirementClass).getClass(), requirementName.toUpperCase());
return true;
}
@Override
public void registerCoreMembers() {
registerCoreMember(EnchantedRequirement.class,
"ENCHANTED", "enchanted (iteminhand)", 1);
registerCoreMember(FlaggedRequirement.class,
"FLAGGED", "(-)flagged [player|npc|global] [name([#])](:value)", 0);
registerCoreMember(HoldingRequirement.class,
"HOLDING", "holding [item] [qty:#] [exact]", 1);
registerCoreMember(InGroupRequirement.class,
"INGROUP", "ingroup (global) [group]", 1);
registerCoreMember(ItemRequirement.class,
"ITEM", "item [item] (qty:#)", 1);
registerCoreMember(LiquidRequirement.class,
"ISLIQUID", "isliquid [location:x,y,z,world]", 1);
registerCoreMember(MoneyRequirement.class,
"MONEY", "money [qty:#]", 1);
registerCoreMember(OpRequirement.class,
"OP", "op (no args)", 0);
registerCoreMember(OwnerRequirement.class,
"OWNER", "owner (no args)", 0);
registerCoreMember(PermissionRequirement.class,
"PERMISSION", "permission (global) [permission]", 1);
registerCoreMember(PoweredRequirement.class,
"ISPOWERED", "ispowered [location:x,y,z,world]", 1);
registerCoreMember(ProcedureRequirement.class,
"PROCEDURE", "procedure [script:procedure_script]", 1);
registerCoreMember(ScriptRequirement.class,
"SCRIPT", "script [finished|failed] [script:name]", 0);
registerCoreMember(SneakingRequirement.class,
"SNEAKING", "sneaking (no args)", 0);
registerCoreMember(StormRequirement.class,
"STORMING", "storm (no args)", 0);
registerCoreMember(SunnyRequirement.class,
"SUNNY", "sunny (no args)", 0);
registerCoreMember(TimeRequirement.class,
"TIME", "time [dawn, day, dush, night]", 1);
registerCoreMember(WorldGuardRegionRequirement.class,
"INREGION", "inregion [name:regionname]", 1);
dB.echoApproval("Loaded core requirements: " + instances.keySet().toString());
}
private <T extends AbstractRequirement> void registerCoreMember(Class<T> requirement, String name, String hint, int args) {
try {
requirement.newInstance().activate().as(name).withOptions("(-)" + hint, args);
} catch(Exception e) {
dB.echoError("Could not register requirement " + name + ": " + e.getMessage());
if (dB.showStackTraces) e.printStackTrace();
}
}
}