How do I give a class as perameter into a extenal jar?

Discussion in 'Plugin Development' started by lgplay, Jul 18, 2017.

Thread Status:
Not open for further replies.
  1. How do I give my Class wich extends JavaPlugin into a external jar. I need this load Modules.
    Here is my Modules Loader Code:

    PHP:
    @SuppressWarnings("rawtypes")
        @
    Override
        
    public void onEnable() {

            
    File folder = new File(this.getDataFolder()+"/module");
           
            if(!
    folder.exists())
                
    folder.mkdirs();
           
            
    Bukkit.getConsoleSender().sendMessage("§a-------Module Loader-----");
           
            if (
    folder.listFiles().length == 0) {
                
    Bukkit.getConsoleSender().sendMessage("§4 - Es sind keine Module vorhanden");
                
    Bukkit.getConsoleSender().sendMessage("§a-------Module Loader-----");
                return;
            }

            for (
    File f folder.listFiles()) {
                if (!
    f.getName().endsWith(".jar"))
                    continue;

                
    URLClassLoader clazzLoader null;

                try {
                    
    clazzLoader URLClassLoader.newInstance(new URL[] { f.toURI().toURL() });
                } catch (
    MalformedURLException e2) {
                    
    e2.printStackTrace();
                }

                
    JarFile jarFile null;

                try {
                    
    jarFile = new JarFile(f);
                } catch (
    IOException e1) {
                    
    e1.printStackTrace();
                }

                
    Enumeration<JarEntryentries jarFile.entries();

                while (
    entries.hasMoreElements()) {
                    
    JarEntry element entries.nextElement();
                    if (
    element.getName().equalsIgnoreCase("ModuleMain")) {
                        try {
                            Class 
    clazzLoader
                                    
    .loadClass(element.getName().replaceAll(".class""").replaceAll("/""."));
                            
    c.newInstance();
                        } catch (
    Exception e) {
                            
    e.printStackTrace();
                        }
                    }
                }
            }
            
    Bukkit.getConsoleSender().sendMessage("§a-------Module Loader-----");
           
            
    super.onEnable();
        }
    Here is a sample of a Module Code:
    PHP:
    public ModuleMain(main pl) {
            
    Bukkit.getConsoleSender().sendMessage("§4 - SoundAPI wurde geladen");
        }
    How do I get main pl?
     
  2. Offline

    xXkguyXx

    You pass it through the plugin that is loading the module?... I did a plugin like this a while ago. What I did was made the main class of the module extend like Module and in the Module class I had a method called getMain() or whatever, and that gave it access to the main.
     
  3. Offline

    Machine Maker

    @xXkguyXx @lgplay

    I'm pretty sure that's not the way to do it. What you want to do is add the Jar to the build path for the plugin. Then you can access all the methods if they are static. Be sure to make sure the plugin is installed before using the methods
     
  4. Offline

    xXkguyXx

    That is the way to do it ;).
    Its better to stay from static, and yes you would add the jar to the build path of the 'module' you would be creating.

    I think your a bit confused, Hes wanting to make his plugin load the modules.
     
  5. @xXkguyXx how do I give the Module acces to the main?

    @xXkguyXx when you mean it like this:
    PHP:
    package ga.lgplay.ModuleLoader;

    public class 
    Module {

        
    main pl;

        public 
    main getMain(){
            return 
    pl;
        }
      
    }
    it gives me this exeption:
    Code:
    [18:50:10 ERROR]: Error occurred while enabling nonameModuleLoader v1.0 (Is it up to date?)
    java.lang.NoClassDefFoundError: ga/lgplay/ModuleLoader/Module
            at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_131]
            at java.lang.ClassLoader.defineClass(Unknown Source) ~[?:1.8.0_131]
            at java.security.SecureClassLoader.defineClass(Unknown Source) ~[?:1.8.0_131]
            at java.net.URLClassLoader.defineClass(Unknown Source) ~[?:1.8.0_131]
            at java.net.URLClassLoader.access$100(Unknown Source) ~[?:1.8.0_131]
            at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_131]
            at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_131]
            at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_131]
            at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_131]
            at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_131]
            at java.net.FactoryURLClassLoader.loadClass(Unknown Source) ~[?:1.8.0_131]
            at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_131]
            at ga.lgplay.ModuleLoader.main.onEnable(main.java:61) ~[?:?]
            at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321) ~[spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:340) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugin(CraftServer.java:357) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.enablePlugins(CraftServer.java:317) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.reload(CraftServer.java:741) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.Bukkit.reload(Bukkit.java:535) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:25) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(CraftServer.java:627) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.DedicatedServer.aO(DedicatedServer.java:412) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:375) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at java.lang.Thread.run(Unknown Source) [?:1.8.0_131]
    Caused by: java.lang.ClassNotFoundException: ga.lgplay.ModuleLoader.Module
            at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_131]
            at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_131]
            at java.net.FactoryURLClassLoader.loadClass(Unknown Source) ~[?:1.8.0_131]
            at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_131]
            ... 29 more
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jul 26, 2017
  6. Offline

    SrNicks_

    @lgplay
    You didn´t put main in your Module.
    try this:

    Code:
    package ga.lgplay.ModuleLoader;
    
    public class Module {
    
    private main pl = null;
    
    public Module(main m){
    this.pl = m;
    }
    public static main getMain(){
    return pl;
    }
    
    }
    
    @EDIT you have to call Module mod = new Module(this); in your main to pass the parameter, after that you just use Module.getMain()
     
    Last edited: Jul 18, 2017
  7. @SrNicks_ no same Problem maybe its becouse the module is in another file than the plugin

    @xXkguyXx Can You Make me an example?

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jul 26, 2017
  8. Offline

    xXkguyXx

    Could you post your code.
     
  9. Offline

    xXkguyXx

    In your main class have a method to get the instance, and then in your module class instead of returning pl, return main.getInstance(), Also you need to get the main class in your module jar.
     
  10. @xXkguyXx
    then this error comes
    Code:
    [15:49:30 INFO]: [nonameModuleLoader] Enabling nonameModuleLoader v1.0
    [15:49:30 INFO]: -------Module Loader-----
    [15:49:30 ERROR]: Error occurred while enabling nonameModuleLoader v1.0 (Is it up to date?)
    java.lang.NoClassDefFoundError: ga/lgplay/ModuleLoader/Module
            at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_131]
            at java.lang.ClassLoader.defineClass(Unknown Source) ~[?:1.8.0_131]
            at java.security.SecureClassLoader.defineClass(Unknown Source) ~[?:1.8.0_131]
            at java.net.URLClassLoader.defineClass(Unknown Source) ~[?:1.8.0_131]
            at java.net.URLClassLoader.access$100(Unknown Source) ~[?:1.8.0_131]
            at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_131]
            at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_131]
            at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_131]
            at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_131]
            at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_131]
            at java.net.FactoryURLClassLoader.loadClass(Unknown Source) ~[?:1.8.0_131]
            at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_131]
            at ga.lgplay.ModuleLoader.main.onEnable(main.java:67) ~[?:?]
            at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321) ~[spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:340) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugin(CraftServer.java:357) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.enablePlugins(CraftServer.java:317) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.reload(CraftServer.java:741) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.Bukkit.reload(Bukkit.java:535) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:25) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(CraftServer.java:627) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.DedicatedServer.aO(DedicatedServer.java:412) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:375) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at java.lang.Thread.run(Unknown Source) [?:1.8.0_131]
    Caused by: java.lang.ClassNotFoundException: ga.lgplay.ModuleLoader.Module
            at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_131]
            at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_131]
            at java.net.FactoryURLClassLoader.loadClass(Unknown Source) ~[?:1.8.0_131]
            at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_131]
            ... 29 more
     
  11. Offline

    xXkguyXx

    Send a screenshot of your module package and class.
     
  12. Offline

    xXkguyXx

  13. @xXkguyXx I load the main class in it
     
  14. Offline

    xXkguyXx

    If the class is not found that means the jar file isn't loaded.
     
  15. But when I remove the extends Module and the Getmain it Prints - SoundAPI geladen
     
  16. Offline

    xXkguyXx

    Okay, then forget the extends Moudle and in the module just do main.getInstance()
     
  17. @xXkguyXx same error but with the main class

    Code:
    [16:52:03 ERROR]: Error occurred while enabling nonameModuleLoader v1.0 (Is it up to date?)
    java.lang.NoClassDefFoundError: ga/lgplay/ModuleLoader/main
            at ga.lgplay.SoundAPI.ModuleMain.<init>(ModuleMain.java:13) ~[?:?]
            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_131]
            at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_131]
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_131]
            at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:1.8.0_131]
            at java.lang.Class.newInstance(Unknown Source) ~[?:1.8.0_131]
            at ga.lgplay.ModuleLoader.main.onEnable(main.java:66) ~[?:?]
            at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321) ~[spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:340) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugin(CraftServer.java:357) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.enablePlugins(CraftServer.java:317) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.reload(CraftServer.java:741) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.Bukkit.reload(Bukkit.java:535) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:25) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(CraftServer.java:627) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.DedicatedServer.aO(DedicatedServer.java:412) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:375) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot188.jar:git-Spigot-db6de12-18fbb24]
            at java.lang.Thread.run(Unknown Source) [?:1.8.0_131]
    Caused by: java.lang.ClassNotFoundException: ga.lgplay.ModuleLoader.main
            at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_131]
            at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_131]
            at java.net.FactoryURLClassLoader.loadClass(Unknown Source) ~[?:1.8.0_131]
            at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_131]
            ... 23 more
     
Thread Status:
Not open for further replies.

Share This Page