-
-
Notifications
You must be signed in to change notification settings - Fork 103
/
ActivityRegistry.java
93 lines (74 loc) · 3.42 KB
/
ActivityRegistry.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
package net.aufdemrand.denizen.npc.activities;
import net.aufdemrand.denizen.Denizen;
import net.aufdemrand.denizen.interfaces.dRegistry;
import net.aufdemrand.denizen.interfaces.RegistrationableInstance;
import net.aufdemrand.denizen.objects.dNPC;
import net.aufdemrand.denizen.npc.activities.core.TaskActivity;
import net.aufdemrand.denizen.npc.activities.core.WanderActivity;
import net.aufdemrand.denizen.utilities.debugging.dB;
import net.citizensnpcs.api.npc.NPC;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
public class ActivityRegistry implements dRegistry {
public final Denizen denizen;
private Map<String, AbstractActivity> instances = new HashMap<String, AbstractActivity>();
private Map<Class<? extends AbstractActivity>, String> classes = new HashMap<Class<? extends AbstractActivity>, String>();
public ActivityRegistry(Denizen denizenPlugin) {
denizen = denizenPlugin;
}
public void addActivity(String activity, dNPC dNPC, String[] args, int priority) {
if (instances.containsKey(activity.toUpperCase()))
instances.get(activity.toUpperCase()).addGoal(dNPC, args, priority);
else denizen.getLogger().log(Level.SEVERE, "'" + activity + "' is an invalid activity!");
}
@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 AbstractActivity get(String activityName) {
if (instances.containsKey(activityName.toUpperCase())) return instances.get(activityName.toUpperCase());
else return null;
}
@Override
public Map<String, AbstractActivity> list() {
return instances;
}
@Override
public boolean register(String activityName, RegistrationableInstance activityClass) {
this.instances.put(activityName.toUpperCase(), (AbstractActivity) activityClass);
this.classes.put(((AbstractActivity) activityClass).getClass(), activityName.toUpperCase());
return true;
}
@Override
public void registerCoreMembers() {
WanderActivity wanderActivity = new WanderActivity();
TaskActivity taskActivity = new TaskActivity();
// Activate Denizen Activities
wanderActivity.activate().as("WANDER");
taskActivity.activate().as("TASK");
dB.echoApproval("Loaded core activities: " + instances.keySet().toString());
}
public void removeActivity(String activity, NPC denizenNPC) {
if (instances.containsKey(activity.toUpperCase()))
instances.get(activity.toUpperCase()).removeGoal(denizen.getNPCRegistry().getDenizen(denizenNPC), true);
else denizen.getLogger().log(Level.SEVERE, "Invalid activity!");
}
public void removeAllActivities(NPC denizenNPC) {
for (AbstractActivity theActivity : instances.values()) {
theActivity.removeGoal(denizen.getNPCRegistry().getDenizen(denizenNPC), false);
}
}
}