CustomConfig Instance Problem

Discussion in 'Plugin Development' started by jarnoboy404, Feb 13, 2018.

Thread Status:
Not open for further replies.
  1. Offline

    jarnoboy404

    Hello, i have a problem with my custom config in a diffrent class. I want to have the config in the configmanager. So that i can get the configmanager config in a diffrent class. But i get a error from this code. Can anyone please help me?

    Main (open)

    Code:
    package me.jarnoboy404.TestConfig;
    
    import org.bukkit.Bukkit;
    import org.bukkit.plugin.PluginManager;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Main extends JavaPlugin {
        private ConfigurationManager config;
        public Main(ConfigurationManager config) {
            this.config = config;
        }
        public void onEnable() {
            PluginManager pm = Bukkit.getPluginManager();
            pm.registerEvents(new Tracker(config), this);
            config.loadFiles();
            config.testdata.options().copyDefaults(true);
            config.testdata.addDefault("Test", true);
        }
    
    }
    

    ConfigManager (open)

    Code:
    package me.jarnoboy404.TestConfig;
    
    import java.io.File;
    import java.io.IOException;
    
    import org.bukkit.configuration.InvalidConfigurationException;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.configuration.file.YamlConfiguration;
    
    public class ConfigurationManager {
        private Main main;
        public ConfigurationManager(Main main) {
            this.main = main;
        }
        public File Test = new File(main.getDataFolder() + "/Test.yml");
        public FileConfiguration testdata = YamlConfiguration.loadConfiguration(Test);
      
        public void saveFiles(){
            try {
                testdata.save(Test);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
      
        public void loadFiles(){
           //AutomaticTrains Settings Config
           if(Test.exists()){
           try {
               testdata.load(Test);
           } catch (IOException | InvalidConfigurationException e) {
               e.printStackTrace();
           }
         }else{
               try {
                   testdata.options().copyDefaults(true);
                   testdata.save(Test);
               } catch (IOException e) {
                   e.printStackTrace();
                 }
         }
        }
    }
    

    Tracker (open)

    Code:
    package me.jarnoboy404.TestConfig;
    
    import org.bukkit.Bukkit;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerMoveEvent;
    
    public class Tracker implements Listener {
        private ConfigurationManager config;
        public Tracker(ConfigurationManager config) {
            this.config = config;
        }
        @EventHandler
        public void on(PlayerMoveEvent e) {
            if(config.testdata.contains("Test")) {
                Bukkit.broadcastMessage("Yeahh");
            }
        }
    
    }
    

    Error (open)

    Code:
    [17:41:17 ERROR]: Could not load 'plugins\JarnoPlugin.jar' in folder 'plugins'
    org.bukkit.plugin.InvalidPluginException: Abnormal plugin type
            at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.jav
    a:80) ~[spigot.jar:git-Spigot-3d850ec-809c399]
            at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.j
    ava:129) ~[spigot.jar:git-Spigot-3d850ec-809c399]
            at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.
    java:327) ~[spigot.jar:git-Spigot-3d850ec-809c399]
            at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager
    .java:248) [spigot.jar:git-Spigot-3d850ec-809c399]
            at org.bukkit.craftbukkit.v1_12_R1.CraftServer.loadPlugins(CraftServer.j
    ava:306) [spigot.jar:git-Spigot-3d850ec-809c399]
            at org.bukkit.craftbukkit.v1_12_R1.CraftServer.reload(CraftServer.java:7
    51) [spigot.jar:git-Spigot-3d850ec-809c399]
            at org.bukkit.Bukkit.reload(Bukkit.java:525) [spigot.jar:git-Spigot-3d85
    0ec-809c399]
            at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:
    27) [spigot.jar:git-Spigot-3d850ec-809c399]
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:14
    1) [spigot.jar:git-Spigot-3d850ec-809c399]
            at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServ
    er.java:649) [spigot.jar:git-Spigot-3d850ec-809c399]
            at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchServerCommand(Cra
    ftServer.java:635) [spigot.jar:git-Spigot-3d850ec-809c399]
            at net.minecraft.server.v1_12_R1.DedicatedServer.aP(DedicatedServer.java
    :444) [spigot.jar:git-Spigot-3d850ec-809c399]
            at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:
    407) [spigot.jar:git-Spigot-3d850ec-809c399]
            at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:
    679) [spigot.jar:git-Spigot-3d850ec-809c399]
            at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.jav
    a:577) [spigot.jar:git-Spigot-3d850ec-809c399]
            at java.lang.Thread.run(Unknown Source) [?:1.8.0_161]
    Caused by: java.lang.InstantiationException: me.jarnoboy404.TestConfig.Main
            at java.lang.Class.newInstance(Unknown Source) ~[?:1.8.0_161]
            at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.jav
    a:76) ~[spigot.jar:git-Spigot-3d850ec-809c399]
            ... 15 more
    Caused by: java.lang.NoSuchMethodException: me.jarnoboy404.TestConfig.Main.<init
    >()
            at java.lang.Class.getConstructor0(Unknown Source) ~[?:1.8.0_161]
            at java.lang.Class.newInstance(Unknown Source) ~[?:1.8.0_161]
            at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.jav
    a:76) ~[spigot.jar:git-Spigot-3d850ec-809c399]
            ... 15 more
     
  2. Online

    timtower Administrator Administrator Moderator

  3. Offline

    jarnoboy404

    How do i need to do it then?
     
  4. Online

    timtower Administrator Administrator Moderator

    Make an instance of the configmanager in the onEnable
     
  5. Offline

    jarnoboy404

    Like this in the onEnable:

    ConfigurationManager config = new ConfigurationManager(this);

    ?
     
  6. Offline

    CrazyLukeHD

    Add this to your main:
    Code:
    private static Main instance;
    
    public Main() {
        instance = this;
    }
    
    public static Main getInstance() {
        return this;
    }
    
    Use Main.getInstance() to get "this" in a different class.
     
  7. Offline

    jarnoboy404

    Yes and then?
    How do i get the configurationmanager class?
     
  8. Offline

    CrazyLukeHD

    I think you can only get "this" from the main class.

    EDIT:
    Your main throws a NoSuchMethodException and I think this has something to do with it. Can you explain what it's supposed to do?
     
  9. Offline

    jarnoboy404

    I want a custom config in a diffrent class then the Main class for a organized Main class
     
  10. Online

    timtower Administrator Administrator Moderator

    You make a getter for it.
     
  11. Offline

    CrazyLukeHD

    Try taking that out then add what I gave you earlier. Replace "main.getDataFolder()" in ConfigManager with "Main.getInstance().getDataFolder()", then get rid of ConfigurationManager(Main main) in ConfigManager and main(ConfigurationManager config) in Main.
     
    Last edited: Feb 13, 2018
  12. Offline

    jarnoboy404

    It gives me a error at: return this;
    Error: Cannot use this in a static context
     

    Attached Files:

  13. Online

    timtower Administrator Administrator Moderator

    @jarnoboy404 Remove that constructor!
    Remove the static.

    @CrazyLukeHD Please don't suggest static, it is never needed in Bukkit
     
  14. Offline

    jarnoboy404

    But then i can't get the Main class instance in the ConfigurationManager
     
  15. Online

    timtower Administrator Administrator Moderator

    And why not?
    ConfigurationManager manager = new ConfigurationManager(this);
     
  16. Offline

    jarnoboy404

    Doesn't work i get this error in the console:

    Error (open)

    Code:
    [16:08:45 ERROR]: Error occurred while enabling Test v1.0 (Is it up to date?)
    java.lang.NullPointerException: null
            at me.jarnoboy404.TestConfig.ConfigurationManager.<init>(ConfigurationMa
    nager.java:15) ~[?:?]
            at me.jarnoboy404.TestConfig.Main.onEnable(Main.java:17) ~[?:?]
            at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) ~[s
    pigot.jar:git-Spigot-3d850ec-809c399]
            at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader
    .java:337) [spigot.jar:git-Spigot-3d850ec-809c399]
            at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManage
    r.java:403) [spigot.jar:git-Spigot-3d850ec-809c399]
            at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugin(CraftServer.
    java:382) [spigot.jar:git-Spigot-3d850ec-809c399]
            at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugins(CraftServer
    .java:331) [spigot.jar:git-Spigot-3d850ec-809c399]
            at net.minecraft.server.v1_12_R1.MinecraftServer.t(MinecraftServer.java:
    422) [spigot.jar:git-Spigot-3d850ec-809c399]
            at net.minecraft.server.v1_12_R1.MinecraftServer.l(MinecraftServer.java:
    383) [spigot.jar:git-Spigot-3d850ec-809c399]
            at net.minecraft.server.v1_12_R1.MinecraftServer.a(MinecraftServer.java:
    338) [spigot.jar:git-Spigot-3d850ec-809c399]
            at net.minecraft.server.v1_12_R1.DedicatedServer.init(DedicatedServer.ja
    va:272) [spigot.jar:git-Spigot-3d850ec-809c399]
            at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.jav
    a:545) [spigot.jar:git-Spigot-3d850ec-809c399]


    This is line 15 of ConfigurationManager class: public File Test = new File(main.getDataFolder() + "/Test.yml");

    And line 17 in Main class is this: ConfigurationManager config = new ConfigurationManager(this);
     
  17. Online

    timtower Administrator Administrator Moderator

    @jarnoboy404 Because it should be initialized in the constructor, not before the constructor is running.
     
  18. Offline

    jarnoboy404

    And how do i do that?
     
  19. Online

    timtower Administrator Administrator Moderator

    Same way as you are doing with the main itself, you declare it outside the constructor, you set the value inside the constructor.
     
  20. Offline

    jarnoboy404

    @timtower I have now created this: File dataFolder = ((Main)Bukkit.getPluginManager().getPlugin("Test")).getDataFolder();

    And that works. But is there a simpler way to get the DataFolder outside the main?
     
  21. Online

    timtower Administrator Administrator Moderator

    @jarnoboy404 I never said that you should do that.
    I said to do it the same way as you did with main.
     
  22. Offline

    jarnoboy404

    You mean like this: Main main = new Main();?
    in the ConfigurationManager class
     
  23. Online

    timtower Administrator Administrator Moderator

    @jarnoboy404 No. Never make a new instance of the main class.
    How long have you been programming in Java?
     
  24. Offline

    jarnoboy404

    Already 2 years but i learned it out of my self so i don't know the tips and tricks in Java

    @timtower i only need the getDataFolder in the ConfigurationManager class, but how?

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Feb 14, 2018
  25. Online

    timtower Administrator Administrator Moderator

    You call it from within the constructor.
    These aren't tips and tricks, the issues that you are having are purely call order.
     
  26. Offline

    jarnoboy404

    Which contructor?

    @timtower Can you give me a example?

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Feb 14, 2018
  27. Online

    timtower Administrator Administrator Moderator

    The one from the CustomConfig
    Code:
    CustomConfig(Main main){
      this.main = main;
      this.Test = new File(main.getDataFolder());
    }
     
  28. Offline

    jarnoboy404

    It doesn't work. It gives me errors in this whole thing :/
     
  29. Online

    timtower Administrator Administrator Moderator

    I can't tell what is wrong as you didn't provide the errors or the updated code.
     
  30. Offline

    jarnoboy404

    This is the error on "this.main = main": main cannot be resolved or is not a field
    And this is the error on "this.Test = new File(this.Test, main.getDataFolder());": The constructor File(File, File) is undefined
     
Thread Status:
Not open for further replies.

Share This Page