Fix issue with a class listening to an event more then once.
This commit is contained in:
parent
4e28df467f
commit
f948999f10
|
@ -1,10 +1,12 @@
|
||||||
package appeng.me;
|
package appeng.me;
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import appeng.api.networking.IGridHost;
|
||||||
import appeng.api.networking.IGridNode;
|
import appeng.api.networking.IGridNode;
|
||||||
import appeng.api.networking.events.MENetworkEvent;
|
import appeng.api.networking.events.MENetworkEvent;
|
||||||
import appeng.api.networking.events.MENetworkEventSubscribe;
|
import appeng.api.networking.events.MENetworkEventSubscribe;
|
||||||
|
@ -20,14 +22,14 @@ public class NetworkEventBus
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class MENetworkEventInfo
|
class EventMethod
|
||||||
{
|
{
|
||||||
|
|
||||||
public final Class objClass;
|
public final Class objClass;
|
||||||
public final Method objMethod;
|
public final Method objMethod;
|
||||||
public final Class objEvent;
|
public final Class objEvent;
|
||||||
|
|
||||||
public MENetworkEventInfo(Class Event, Class ObjClass, Method ObjMethod) {
|
public EventMethod(Class Event, Class ObjClass, Method ObjMethod) {
|
||||||
this.objClass = ObjClass;
|
this.objClass = ObjClass;
|
||||||
this.objMethod = ObjMethod;
|
this.objMethod = ObjMethod;
|
||||||
this.objEvent = Event;
|
this.objEvent = Event;
|
||||||
|
@ -53,6 +55,23 @@ public class NetworkEventBus
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class MENetworkEventInfo
|
||||||
|
{
|
||||||
|
|
||||||
|
private ArrayList<EventMethod> methods = new ArrayList();
|
||||||
|
|
||||||
|
public void Add(Class Event, Class ObjClass, Method ObjMethod)
|
||||||
|
{
|
||||||
|
methods.add( new EventMethod( Event, ObjClass, ObjMethod ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void invoke(Object obj, MENetworkEvent e) throws NetworkEventDone
|
||||||
|
{
|
||||||
|
for (EventMethod em : methods)
|
||||||
|
em.invoke( obj, e );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
private static Set<Class> readClasses = new HashSet();
|
private static Set<Class> readClasses = new HashSet();
|
||||||
private static Hashtable<Class<? extends MENetworkEvent>, Hashtable<Class, MENetworkEventInfo>> events = new Hashtable();
|
private static Hashtable<Class<? extends MENetworkEvent>, Hashtable<Class, MENetworkEventInfo>> events = new Hashtable();
|
||||||
|
|
||||||
|
@ -77,7 +96,13 @@ public class NetworkEventBus
|
||||||
if ( classEvents == null )
|
if ( classEvents == null )
|
||||||
events.put( types[0], classEvents = new Hashtable() );
|
events.put( types[0], classEvents = new Hashtable() );
|
||||||
|
|
||||||
classEvents.put( listAs, new MENetworkEventInfo( types[0], c, m ) );
|
MENetworkEventInfo thisEvent = classEvents.get( listAs );
|
||||||
|
if ( thisEvent == null )
|
||||||
|
thisEvent = new MENetworkEventInfo();
|
||||||
|
|
||||||
|
thisEvent.Add( types[0], c, m );
|
||||||
|
|
||||||
|
classEvents.put( listAs, thisEvent );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
throw new RuntimeException( "Invalid ME Network Event Subscriber, " + m.getName() + "s Parameter must extend MENetworkEvent." );
|
throw new RuntimeException( "Invalid ME Network Event Subscriber, " + m.getName() + "s Parameter must extend MENetworkEvent." );
|
||||||
|
|
Loading…
Reference in a new issue