/
ReduxEventDispatcher.java
69 lines (61 loc) · 3.39 KB
/
ReduxEventDispatcher.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
package mods.quiddity.redux;
import mods.quiddity.redux.json.model.Pack;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.common.eventhandler.Event;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import javax.script.ScriptException;
/**
* WeakReference event dispatcher. This handles firing all of the events for Redux blocks.
* This only holds weak references to the TileEntity. This should allow it to properly unload.
*
* @author winsock on 2/7/15.
*/
public class ReduxEventDispatcher {
private static ReduxEventDispatcher ourInstance = null;
/* private final Map<Trigger.TriggerEvent, List<WeakReference<ReduxCommandBlockTileEntity.ReduxBlockEventReceiver>>> eventListMap
= new WeakHashMap<Trigger.TriggerEvent, List<WeakReference<ReduxCommandBlockTileEntity.ReduxBlockEventReceiver>>>();*/
public static ReduxEventDispatcher getInstance() {
if (ourInstance == null)
ourInstance = new ReduxEventDispatcher();
return ourInstance;
}
private ReduxEventDispatcher() {
MinecraftForge.EVENT_BUS.register(this);
}
/*
public void registerEventReceiver(ReduxCommandBlockTileEntity.ReduxBlockEventReceiver receiver) {
if (eventListMap.get(receiver.getTriggerScript().getTriggerEvent()) == null)
eventListMap.put(receiver.getTriggerScript().getTriggerEvent(), new ArrayList<WeakReference<ReduxCommandBlockTileEntity.ReduxBlockEventReceiver>>());
eventListMap.get(receiver.getTriggerScript().getTriggerEvent()).add(new WeakReference<ReduxCommandBlockTileEntity.ReduxBlockEventReceiver>(receiver));
}
*/
@SubscribeEvent
public void onEvent(Event event) {
/* if (eventListMap.get(Trigger.TriggerEvent.getTriggerEventFromForgeEvent(event.getClass())) != null) {
List<WeakReference<ReduxCommandBlockTileEntity.ReduxBlockEventReceiver>> weakReferences =
ImmutableList.copyOf(eventListMap.get(Trigger.TriggerEvent.getTriggerEventFromForgeEvent(event.getClass())));
for (WeakReference<ReduxCommandBlockTileEntity.ReduxBlockEventReceiver> eventReceiverWeakReference : weakReferences) {
ReduxCommandBlockTileEntity.ReduxBlockEventReceiver eventReceiver = eventReceiverWeakReference.get();
if (eventReceiver == null) {
eventListMap.get(Trigger.TriggerEvent.getTriggerEventFromForgeEvent(event.getClass())).remove(eventReceiverWeakReference);
continue;
}
eventReceiver.receiveEvent(event);
}
}*/
if (!Redux.proxy.isSinglePlayer()) {
for (Pack p : Redux.instance.getReduxConfiguration().getPacks()) {
if (p.getJsEngine().getEngine().hasMethod(event.getClass().getName())) {
try {
p.getJsEngine().getEngine().callMethod(event.getClass().getName(), event);
} catch (ScriptException e) {
Redux.instance.getLogger().warn("Redux pack inconsistency. A script file in pack: %s has errors.", p.getName());
} catch (NoSuchMethodException e) {
Redux.instance.getLogger().warn("Redux pack inconsistency. A script file in pack: %s has errors.", p.getName());
}
}
}
}
}
}