How to save custom config file?

Discussion in 'Spigot Plugin Development' started by Fighter2000, Mar 17, 2019 at 11:51 AM.

  1. I try to save custom config file, but doesn't work for me! Please help.
    Code (Java):
    package com.serversystem.Configuration;

    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;

    import com.serversystem.main;

    public class configuration {

        public static File customConfigFile;
        public static FileConfiguration messages;
       
        public static File Messages;
        public static FileConfiguration messages2;
       
        public static void cfg(main main) {
           
            main.reloadConfig();
            main.getConfig().options().copyDefaults(true);
           
           
           
        }
        public static void createCustomConfig(main main) {
            customConfigFile = new File(main.getDataFolder(), "customcommands.yml");
            if (!customConfigFile.exists()) {
               
                System.out.print("[LobbySystems] 'customcommands.yml' not found, creating one...");
               
                customConfigFile.getParentFile().mkdirs();
                main.saveResource("customcommands.yml", false);
             }

            messages= new YamlConfiguration();
            try {
                messages.load(customConfigFile);
            } catch (IOException | InvalidConfigurationException e) {
                e.printStackTrace();
            }
        }
        public static FileConfiguration getCustomConfig() {
            return messages;
        }

       
       
       
       
        //////// new ANimations
        public static void createCustomMessages(main main) {
            Messages = new File(main.getDataFolder(), "messages.yml");
            if (!Messages.exists()) {
               
                System.out.print("[LobbySystems] 'messages.yml' not found, creating one...");
               
                Messages.getParentFile().mkdirs();
                main.saveResource("messages.yml", false);
             }

            messages2= new YamlConfiguration();
            try {
                messages2.load(Messages);
            } catch (IOException | InvalidConfigurationException e) {
                e.printStackTrace();
            }
        }

        public static FileConfiguration getCustomMessages() {
            return messages2;
        }
       
        public static void onReload() {
           
            messages2 = YamlConfiguration.loadConfiguration(Messages);
            messages2.options().copyDefaults(true);
       
            messages = YamlConfiguration.loadConfiguration(customConfigFile);
            messages.options().copyDefaults(true);
           
        }

    }
     
     
  2. use FileConfiguration#save(File)
     
  3. Well I had to deal with this too and I've done it another way

    Code (Java):
    public static final HashMap<String, Object> defaultConfigValues = new HashMap<String, Object>();

    static
        {
            defaultConfigValues.put("Your.Value", false);
             }

    public static void onLoadConfig() throws IOException
        {
            for (String key : defaultConfigValues.keySet())
            {
                yourYaml.addDefault(key, defaultConfigValues.get(key));
            }
            yourYaml.options().copyDefaults(true);
            yourYaml.options().header("Setup here your headline.").copyHeader(true);
            yourYaml.save(teleport);
        }
    Then call the onLoadConfig in your onEnable()
     
  4. :/ Doesn't work for me
    Sorry, i'm sick :c
     
  5. Your File setup is like above mentioned right?

    Code (Java):
    public static File yaml = new File(Main.getPlugin().getDataFolder(), "yourYaml.yml");
        public static YamlConfiguration yYaml = YamlConfiguration.loadConfiguration(yaml);
    Try setting it up this way.
     
  6. Code (Java):
    public static final HashMap<String, Object> defaultConfigValues = new HashMap<String, Object>();
     
        static
        {
            defaultConfigValues.put("messages.yml", false);
             }

    public static void onLoadConfig() throws IOException
        {
            for (String key : defaultConfigValues.keySet())
            {
                customConfig.addDefault(key, defaultConfigValues.get(key));
            }
            customConfig.options().copyDefaults(true);
            customConfig.options().header("Setup here your headline.").copyHeader(true);
            customConfig.save(customConfigFile);
        }
    And i added the onLoadConfig() to onEnable()
    Code (Java):
    try {
                onLoadConfig();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    Code (Java):
    public static File customConfigFile;
         public static FileConfiguration customConfig;
     
  7. Well I've added something to my last post read please :p
     
  8. Show us where your initializing your File objects. Also, don't abuse static. Use dependency injection.
     
  9. I see, and I changed it, but doesn't work :D
    Code (Java):
    public static File customConfigFile = new File("messages.yml");
        public static YamlConfiguration customConfig = YamlConfiguration.loadConfiguration(customConfigFile);

    public static final HashMap<String, Object> defaultConfigValues = new HashMap<String, Object>();
       
        static
        {
            defaultConfigValues.put("messages.yml", false);
             }

    public static void onLoadConfig() throws IOException
        {
            for (String key : defaultConfigValues.keySet())
            {
                customConfig.addDefault(key, defaultConfigValues.get(key));
            }
            customConfig.options().copyDefaults(true);
            customConfig.options().header("Setup here your headline.").copyHeader(true);
            customConfig.save(customConfigFile);
        }
     
  10. Well you're right I always have an extra class for that because of that I'm always using static in your Main you could use private instead of public static
     
  11. Code (Java):
    package com.serversystem;

    import java.io.File;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.List;

    import org.bukkit.Bukkit;
    import org.bukkit.command.ConsoleCommandSender;
    import org.bukkit.configuration.InvalidConfigurationException;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.configuration.file.YamlConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.scheduler.BukkitScheduler;
    import org.bukkit.scoreboard.DisplaySlot;
    import org.bukkit.scoreboard.Objective;
    import org.bukkit.scoreboard.Scoreboard;

    import com.serversystem.Commands.CommandEvents;
    import com.serversystem.Configuration.configuration;
    import com.serversystem.Console.ConsoleMessages;
    import com.serversystem.Placeholders.Placeholders;
    import com.serversystem.RegisteredEvents.RegisteredEvents;
    import com.serversystem.RegisteredEvents.TabTitleSend;

    import me.clip.placeholderapi.PlaceholderAPI;

    public class main extends JavaPlugin {

        public ConsoleCommandSender sender = Bukkit.getServer().getConsoleSender();
       
        public boolean papi = false;
        public static File customConfigFile = new File("messages.yml");
        public static YamlConfiguration customConfig = YamlConfiguration.loadConfiguration(customConfigFile);
       
         public File customCommandsFile;
         public FileConfiguration customCommands;
       
        @Override
        public void onEnable() {
           
          if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
             
            papi = true;
           
          } else {
             
            papi = false;
           
            configuration.cfg(this);
           
            RegisteredEvents.events(this);
           
            ConsoleMessages.onenable(this);
           
            CommandEvents.Commands(this);
           
            createMessages();
           
            createCommands();
           
                try {
                    onLoadConfig();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

           
            for(Player p: Bukkit.getOnlinePlayers()) {
               
            enableScoreboard(p);
           
            updatetablist(p);
           
            }
           
          }
        }
       
        public void updatetablist(final Player p) {
           
           
             BukkitScheduler scheduler = getServer().getScheduler();
                scheduler.scheduleSyncDelayedTask(this, new Runnable() {
                    @Override
                    public void run() {
                       
                        List<String> header2 = getCustomMessage().getStringList("TabList.Header");
                        List<String> footer2 = getCustomMessage().getStringList("TabList.Footer");
                       
                        for(String header: header2) {
                           
                        for(String footer: footer2) {
                           
                           
                           
                            TabTitleSend.sendTabTitle(p,PlaceholderAPI.setPlaceholders(p,Placeholders.pch2(header, p, this)), PlaceholderAPI.setPlaceholders(p,Placeholders.pch2(footer, p, this)));
                       
                        }
                       
                           
                        }
                       
                       
                       
                    }
                }, 20L);
        }
       
        public void enableScoreboard(final Player p) {
           
           
             BukkitScheduler scheduler = getServer().getScheduler();
                scheduler.scheduleSyncDelayedTask(this, new Runnable() {
                    @Override
                    public void run() {
                       
                     final Scoreboard board = Bukkit.getScoreboardManager().getNewScoreboard();
                        final Objective obj = board.registerNewObjective("fighter", "20000");
                       
                        obj.setDisplaySlot(DisplaySlot.SIDEBAR);
                       
                       List<String> displayList = getCustomMessage().getStringList("Scoreboard-DisplayName");
                       for(String line: displayList) {
                         
                       obj.setDisplayName(PlaceholderAPI.setPlaceholders(p,Placeholders.pch2(line, p, this)));      
                         
                       }
                   
                       
                        int board22 = getCustomMessage().getList("Scoreboard").size();
                       
                       
                        for(Object text : getCustomMessage().getList("Scoreboard")){
                           
                         obj.getScore(PlaceholderAPI.setPlaceholders(p, Placeholders.pch2(text.toString(), p, this))).setScore(board22);
                       
                         board22--;
                     }
                       
                        p.setScoreboard(board);
                       
                    }
                }, 20L);
           
        }

        @SuppressWarnings("static-access")
        public FileConfiguration getCustomMessage() {
            return this.customConfig;
        }

        public void createMessages() {
            customConfigFile = new File(getDataFolder(), "messages.yml");
            if (!customConfigFile.exists()) {
                getServer().getConsoleSender().sendMessage("§C[LobbySystems] 'messages.yml' not found, creating one...");
                customConfigFile.getParentFile().mkdirs();
                saveResource("messages.yml", false);
             }

            customConfig= new YamlConfiguration();
            try {
                customConfig.load(customConfigFile);
            } catch (IOException | InvalidConfigurationException e) {
                e.printStackTrace();
            }
        }
        public FileConfiguration getCustomCommands() {
            return this.customCommands;
        }

        public void createCommands() {
            customCommandsFile = new File(getDataFolder(), "customcommands.yml");
            if (!customCommandsFile.exists()) {
                getServer().getConsoleSender().sendMessage("§C[LobbySystems] 'customcommands.yml' not found, creating one...");
                customCommandsFile.getParentFile().mkdirs();
                saveResource("customcommands.yml", false);
             }

            customCommands= new YamlConfiguration();
            try {
                customCommands.load(customCommandsFile);
            } catch (IOException | InvalidConfigurationException e) {
                e.printStackTrace();
            }
           
        }
        public static final HashMap<String, Object> defaultConfigValues = new HashMap<String, Object>();
       
        static
        {
            defaultConfigValues.put("messages.yml", false);
             }

    public static void onLoadConfig() throws IOException
        {
            for (String key : defaultConfigValues.keySet())
            {
                customConfig.addDefault(key, defaultConfigValues.get(key));
            }
            customConfig.options().copyDefaults(true);
            customConfig.options().header("Setup here your headline.").copyHeader(true);
            customConfig.save(customConfigFile);
        }
    }

     
     
  12. You need to refer your plugin Directory e.g. getDataFolder(), "messages.yml"
     
  13. Wait,I change class
     
  14. Why you want to change your class change this

    Code (Java):
    public static File customConfigFile = new File(getDataFolder(), "messages.yml");
     
  15. Code (Java):
    package com.serversystem.Configuration;

    import java.io.File;
    import java.io.IOException;
    import java.util.HashMap;

    import org.bukkit.configuration.InvalidConfigurationException;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.configuration.file.YamlConfiguration;

    import com.serversystem.main;

    public class configuration {

        private static main main;
       
        public configuration(main main) {
           
        }
       
        public static File customConfigFile = new File(main.getDataFolder(), "messages.yml");
        public static YamlConfiguration customConfig = YamlConfiguration.loadConfiguration(customConfigFile);
       
        public static void cfg(com.serversystem.main main2) {
           
            main2.saveDefaultConfig();
            main2.getConfig().options().copyDefaults(true);
            main2.reloadConfig();
           
        }
        @SuppressWarnings("static-access")
        public FileConfiguration getCustomMessage() {
            return this.customConfig;
        }

        public void createMessages() {
            customConfigFile = new File(main.getDataFolder(), "messages.yml");
            if (!customConfigFile.exists()) {
                main.getServer().getConsoleSender().sendMessage("§C[LobbySystems] 'messages.yml' not found, creating one...");
                customConfigFile.getParentFile().mkdirs();
                main.saveResource("messages.yml", false);
             }

            customConfig= new YamlConfiguration();
            try {
                customConfig.load(customConfigFile);
            } catch (IOException | InvalidConfigurationException e) {
                e.printStackTrace();
            }
        }
        public static final HashMap<String, Object> defaultConfigValues = new HashMap<String, Object>();
       
        static
        {
            defaultConfigValues.put("messages.yml", false);
             }

        public static void onLoadConfig() throws IOException
        {
            for (String key : defaultConfigValues.keySet())
            {
                customConfig.addDefault(key, defaultConfigValues.get(key));
            }
            customConfig.options().copyDefaults(true);
            customConfig.options().header("Setup here your headline.").copyHeader(true);
            customConfig.save(customConfigFile);
        }
       

           
    }
     
     
  16. Woow, soo much static abuse o_O
     
    • Agree Agree x 1
  17. But for me it works
     

Share This Page