mirror of
https://github.com/KAMKEEL/CustomNPC-Plus.git
synced 2026-11-12 02:37:27 +00:00
Player events and Forge events run in their own separate buses without redundant registering.
This commit is contained in:
1 parent
03ee733620
commit
d46d0aba7e
3 files changed
+129
-99
No files matched your search
@@ -362,102 +362,4 @@ public class ScriptPlayerEventHandler {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ScriptPlayerEventHandler registerForgeEvents() {
|
||||
ScriptPlayerEventHandler.ForgeEventHandler handler = new ScriptPlayerEventHandler.ForgeEventHandler();
|
||||
|
||||
try {
|
||||
Method e = handler.getClass().getMethod("forgeEntity", new Class[]{Event.class});
|
||||
Method register = FMLCommonHandler.instance().bus().getClass().getDeclaredMethod("register", new Class[]{Class.class, Object.class, Method.class, ModContainer.class});
|
||||
register.setAccessible(true);
|
||||
ArrayList list = new ArrayList();
|
||||
list.addAll(ClassPath.from(this.getClass().getClassLoader()).getTopLevelClassesRecursive("cpw.mods.fml.common.gameevent"));
|
||||
list.addAll(ClassPath.from(this.getClass().getClassLoader()).getTopLevelClassesRecursive("net.minecraftforge.event"));
|
||||
list.removeAll(ClassPath.from(this.getClass().getClassLoader()).getTopLevelClassesRecursive("net.minecraftforge.event.terraingen"));
|
||||
Iterator e1 = list.iterator();
|
||||
|
||||
while(true) {
|
||||
ClassInfo classLoader;
|
||||
String classes;
|
||||
do {
|
||||
if(!e1.hasNext()) {
|
||||
if(PixelmonHelper.Enabled) {
|
||||
try {
|
||||
Field e2 = ClassLoader.class.getDeclaredField("classes");
|
||||
e2.setAccessible(true);
|
||||
ClassLoader classLoader1 = Thread.currentThread().getContextClassLoader();
|
||||
ArrayList classes1 = new ArrayList((Vector)e2.get(classLoader1));
|
||||
Iterator infoClass1 = classes1.iterator();
|
||||
|
||||
while(infoClass1.hasNext()) {
|
||||
Class c2 = (Class)infoClass1.next();
|
||||
}
|
||||
} catch (Exception var12) {
|
||||
var12.printStackTrace();
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
classLoader = (ClassInfo)e1.next();
|
||||
classes = classLoader.getName();
|
||||
} while(classes.startsWith("net.minecraftforge.event.terraingen"));
|
||||
|
||||
Class infoClass = classLoader.load();
|
||||
ArrayList c = new ArrayList(Arrays.asList(infoClass.getDeclaredClasses()));
|
||||
if(c.isEmpty()) {
|
||||
c.add(infoClass);
|
||||
}
|
||||
|
||||
Iterator var10 = c.iterator();
|
||||
while(var10.hasNext()) {
|
||||
Class c1 = (Class)var10.next();
|
||||
if(!EntityConstructing.class.isAssignableFrom(c1) && !PotentialSpawns.class.isAssignableFrom(c1) && !TickEvent.RenderTickEvent.class.isAssignableFrom(c1) && !TickEvent.ClientTickEvent.class.isAssignableFrom(c1) && !FMLNetworkEvent.ClientCustomPacketEvent.class.isAssignableFrom(c1) && !ItemTooltipEvent.class.isAssignableFrom(c1) && Event.class.isAssignableFrom(c1) && !Modifier.isAbstract(c1.getModifiers()) && Modifier.isPublic(c1.getModifiers()) && !ChunkEvent.class.isAssignableFrom(c1) && !ChunkWatchEvent.class.isAssignableFrom(c1) && !ChunkDataEvent.class.isAssignableFrom(c1)) {
|
||||
register.invoke(FMLCommonHandler.instance().bus(), new Object[]{c1, handler, e, Loader.instance().activeModContainer()});
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception var13) {
|
||||
var13.printStackTrace();
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
public class ForgeEventHandler {
|
||||
public ForgeEventHandler() {
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void forgeEntity(Event event) {
|
||||
if(CustomNpcs.getServer() != null && ScriptController.Instance.forgeScripts.isEnabled()) {
|
||||
if(event instanceof TickEvent && !(((TickEvent)event).side == Side.SERVER && ((TickEvent)event).phase == TickEvent.Phase.START)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(event instanceof EntityEvent) {
|
||||
EntityEvent ev2 = (EntityEvent)event;
|
||||
if(ev2.entity != null && ev2.entity.worldObj instanceof WorldServer) {
|
||||
EventHooks.onForgeEntityEvent(ev2);
|
||||
}
|
||||
} else if(event instanceof WorldEvent) {
|
||||
WorldEvent ev1 = (WorldEvent)event;
|
||||
if(ev1.world instanceof WorldServer) {
|
||||
EventHooks.onForgeWorldEvent(ev1);
|
||||
}
|
||||
} else if(!(event instanceof TickEvent) || ((TickEvent)event).side != Side.CLIENT) {
|
||||
if (event instanceof PlayerEvent) {
|
||||
PlayerEvent ev = (PlayerEvent) event;
|
||||
if (!(ev.player.worldObj instanceof WorldServer)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
EventHooks.onForgeEvent(new ForgeEvent(event), event);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user