Hello everyone, I am currently working on a mod that will allow you to load a plugin for it. In order to do this, I load Hub.class from and external plugin jar and register it in the event bus. This allows the plugin to listen for events and do whatever I need it to do. Here is how I load Hub.class:
@Mod(modid="Example", name="Example", version="0.1")
public class Example
{
@Mod.EventHandler
public void preInit(FMLPreInitializationEvent event)
{
loadClass();
}
private void loadClass()
{
try
{
URL[] jarFile = new URL[] { new URL("file:///C:/LC/lc.jar") }; // This is the path to my jar file containing Hub.class
URLClassLoader loader = new URLClassLoader(jarFile, this.getClass().getClassLoader()); // Create a URLClassLoader
Class<?> classToLoad = Class.forName ("net.canelex.lc.Hub", false, loader); // Find the class Hub.class (package is correct)
Object object = classToLoad.getConstructor().newInstance(); // Create a new instance of it.
classToLoad.getDeclaredMethod("init").invoke(object); // Run method 'init'
} catch (Exception e)
{
e.printStackTrace();
}
}
}
Here is the class Hub inside of an external plugin jar:
public class Hub
{
public void init()
{
FMLCommonHandler.instance().bus().register(this); // Register itself into event bus.
MinecraftForge.EVENT_BUS.register(this);
System.out.println("Registered.");
}
@SubscribeEvent
public void onKey(InputEvent.KeyInputEvent event)
{
System.out.println("Key Pressed!");
}
}
So currently, the mod registers the Hub class to the event bus and prints "Registered" into the console. However, as soon as the player presses a key, NoClassDefFoundError is thrown and the game crashes. Because of this, I know that an instance of Hub.class was registered in the event bus, but when the event is called something goes wrong. Can anyone please help me fix this error / point out what I am doing wrong? Thanks!
java.lang.NoClassDefFoundError: net/canelex/lc/Hub
at cpw.mods.fml.common.eventhandler.ASMEventHandler_6_Hub_onKey_KeyInputEvent.invoke(.dynamic) ~[?:?]
at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:54) ~[ASMEventHandler.class:?]
at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:140) [EventBus.class:?]
at cpw.mods.fml.common.FMLCommonHandler.fireKeyInput(FMLCommonHandler.java:540) [FMLCommonHandler.class:?]
at net.minecraft.client.Minecraft.func_71407_l(Minecraft.java:1873) [bao.class:?]
at net.minecraft.client.Minecraft.func_71411_J(Minecraft.java:973) [bao.class:?]
at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:898) [bao.class:?]
at net.minecraft.client.main.Main.main(SourceFile:148) [Main.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_25]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_25]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_25]
at java.lang.reflect.Method.invoke(Method.java:483) ~[?:1.8.0_25]
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
Caused by: java.lang.ClassNotFoundException: net.canelex.lc.Hub
at java.lang.ClassLoader.findClass(ClassLoader.java:530) ~[?:1.8.0_25]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_25]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_25]
... 14 more