Помогите Не создаётся конфиг и не записываются данные

Статус
Закрыто для дальнейших ответов.
YMLConfiguration user;

user.saveConfig();
И тогда он перезапишет config.yml, емнип.
Хотя даже специально пересмотрел реализацию конфигов. Нету там таких методов.

Прекращайте давать вредные советы.
 
Последнее редактирование:
Всё, опять доделываю плагин. Но возникает ошибка в public onDisable()

Код:
java.lang.NullPointerException
        at ru.EnderBro3D.AntiAcc.MainClass.onDisable(MainClass.java:64) ~[?:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:294) ~[spigot-1.9-R0.1-SNAPSHOT.jar:git-Spigot-2038f4a-15222c8]
        at org.bukkit.plugin.java.JavaPluginLoader.disablePlugin(JavaPluginLoader.java:364) [spigot-1.9-R0.1-SNAPSHOT.jar:git-Spigot-2038f4a-15222c8]
        at org.bukkit.plugin.SimplePluginManager.disablePlugin(SimplePluginManager.java:424) [spigot-1.9-R0.1-SNAPSHOT.jar:git-Spigot-2038f4a-15222c8]
        at org.bukkit.plugin.SimplePluginManager.disablePlugins(SimplePluginManager.java:417) [spigot-1.9-R0.1-SNAPSHOT.jar:git-Spigot-2038f4a-15222c8]
        at org.bukkit.plugin.SimplePluginManager.clearPlugins(SimplePluginManager.java:458) [spigot-1.9-R0.1-SNAPSHOT.jar:git-Spigot-2038f4a-15222c8]
        at org.bukkit.craftbukkit.v1_9_R1.CraftServer.reload(CraftServer.java:712) [spigot-1.9-R0.1-SNAPSHOT.jar:git-Spigot-2038f4a-15222c8]
        at org.bukkit.Bukkit.reload(Bukkit.java:539) [spigot-1.9-R0.1-SNAPSHOT.jar:git-Spigot-2038f4a-15222c8]
        at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:25) [spigot-1.9-R0.1-SNAPSHOT.jar:git-Spigot-2038f4a-15222c8]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) [spigot-1.9-R0.1-SNAPSHOT.jar:git-Spigot-2038f4a-15222c8]
        at org.bukkit.craftbukkit.v1_9_R1.CraftServer.dispatchCommand(CraftServer.java:645) [spigot-1.9-R0.1-SNAPSHOT.jar:git-Spigot-2038f4a-15222c8]
        at org.bukkit.craftbukkit.v1_9_R1.CraftServer.dispatchServerCommand(CraftServer.java:631) [spigot-1.9-R0.1-SNAPSHOT.jar:git-Spigot-2038f4a-15222c8]
        at net.minecraft.server.v1_9_R1.DedicatedServer.aL(DedicatedServer.java:438) [spigot-1.9-R0.1-SNAPSHOT.jar:git-Spigot-2038f4a-15222c8]
        at net.minecraft.server.v1_9_R1.DedicatedServer.D(DedicatedServer.java:401) [spigot-1.9-R0.1-SNAPSHOT.jar:git-Spigot-2038f4a-15222c8]
        at net.minecraft.server.v1_9_R1.MinecraftServer.C(MinecraftServer.java:660) [spigot-1.9-R0.1-SNAPSHOT.jar:git-Spigot-2038f4a-15222c8]
        at net.minecraft.server.v1_9_R1.MinecraftServer.run(MinecraftServer.java:559) [spigot-1.9-R0.1-SNAPSHOT.jar:git-Spigot-2038f4a-15222c8]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_101]

На строке 64:
Java:
 users.save("users.yml");
Как я понял ошибка возникает в сохранении конфига.
Я пытался сделать так:
Java:
   public static YamlConfiguration getConfig(JavaPlugin plugin, String configName) {
        File file = new File(plugin.getDataFolder(), configName);
        if (file.isDirectory()) {
            file.delete();
        }
        if (!file.exists()) {
            /* try {
                file.getParentFile().mkdirs();
                file.createNewFile();
            } catch (IOException ex) {
                plugin.getLogger().log(Level.WARNING, "Ошибка при создании файла " + configName, ex);
            }  */
           
            try (InputStream i = plugin.getClass().getClassLoader().getResourceAsStream(configName)) {
                FileUtils.copyInputStreamToFile(i, file);
            } catch (IOException e) {
                 plugin.getLogger().log(Level.WARNING, "Ошибка при создании файла " + configName);
            }
            return new YamlConfiguration();
        }
        return YamlConfiguration.loadConfiguration(file);
    }
и пробовал так:
Java:
    public static YamlConfiguration getConfig(JavaPlugin plugin, String configName) {
        File file = new File(plugin.getDataFolder(), configName);
        if (file.isDirectory()) {
            file.delete();
        }
        if (!file.exists()) {
             try {
                file.getParentFile().mkdirs();
                file.createNewFile();
            } catch (IOException ex) {
                plugin.getLogger().log(Level.WARNING, "Ошибка при создании файла " + configName, ex);
            }
           
            /* try (InputStream i = plugin.getClass().getClassLoader().getResourceAsStream(configName)) {
                FileUtils.copyInputStreamToFile(i, file);
            } catch (IOException e) {
                 plugin.getLogger().log(Level.WARNING, "Ошибка при создании файла " + configName);
            }  */
            return new YamlConfiguration();
        }
        return YamlConfiguration.loadConfiguration(file);
    }
 
@Dereku

Полностью код:
Java:
package ru.EnderBro3D.AntiAcc;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;

import org.apache.commons.io.FileUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;


public class MainClass extends JavaPlugin implements Listener {
 
    //Configuration
    private YamlConfiguration users;
    private YamlConfiguration config;
    private YamlConfiguration messages;
  
    public static YamlConfiguration getConfig(JavaPlugin plugin, String configName) {
        File file = new File(plugin.getDataFolder(), configName);
        if (file.isDirectory()) {
            file.delete();
        }
        if (!file.exists()) {
            /* try {
                file.getParentFile().mkdirs();
                file.createNewFile();
            } catch (IOException ex) {
                plugin.getLogger().log(Level.WARNING, "Ошибка при создании файла " + configName, ex);
            }  */
         
            try (InputStream i = plugin.getClass().getClassLoader().getResourceAsStream(configName)) {
                FileUtils.copyInputStreamToFile(i, file);
            } catch (IOException e) {
                 plugin.getLogger().log(Level.WARNING, "Ошибка при создании файла " + configName);
            }
            return new YamlConfiguration();
        }
        return YamlConfiguration.loadConfiguration(file);
    }
 

    @SuppressWarnings("unused")
    @Override
    public void onEnable() {
        Bukkit.getServer().getPluginManager().registerEvents(this, this);
        YamlConfiguration config = getConfig(this, "config.yml");
        YamlConfiguration users = getConfig(this, "users.yml");
        YamlConfiguration messages = getConfig(this, "messages.yml");
    }

    @Override
    public void onDisable() {
        try {
            users.save("users.yml");
            config.save("config.yml");
            messages.save("messages.yml");
       } catch (IOException ex) {
            this.getLogger().log(Level.WARNING, "Ошибка при сохранении конфигов", ex);
       }
    }
 
    private void executeCommand (Player p, boolean console, String cmd) {
        CommandSender sender = console ? getServer().getConsoleSender() : p;
        getServer().dispatchCommand(sender, ChatColor.translateAlternateColorCodes('&', cmd.replaceAll("%player%", p.getName())));
    }
 
    @EventHandler
    public void onJoin(PlayerJoinEvent event) {
        Player p = event.getPlayer();
        String pname = p.getName();
        String GetPlayerIP = p.getAddress().getHostName();
        if(users.getConfigurationSection("users").isConfigurationSection(GetPlayerIP)) {
            String owner = users.getString("users."+GetPlayerIP+".ownerIP");
            if(owner == pname) {
                p.sendMessage(">> \u00a7cAntiAcc\u00a7f] \u00a7eТы проверен на мульти акк. Результат = \u00a7aTRUE");
            } else {
                String cmd = config.getString("defaultCommand");
                String time = config.getString("defaultTime");
                String reason = config.getString("defaultReason");
                cmd = cmd.replace("<time>", time);
                cmd = cmd.replace("<reason>", reason);
                cmd = cmd.replace("<player>", p.getName());
                executeCommand(p, true, cmd);
            }
        } else {
            users.set("users."+GetPlayerIP+".OwnerIP", pname);
            p.sendMessage(">> \u00a7cAntiAcc\u00a7f] \u00a7eТы новый пользователь, твои данные записаны.");
        }
    }
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if(cmd.getName().equalsIgnoreCase("antiacc")) {
            String noperms = messages.getString("noperms");
            noperms = noperms.replace("&", "\u00a7");
            if(args.length < 2) {
                if(!sender.hasPermission("AntiAcc.cmd.main")) {
                    sender.sendMessage(">\0aa7cУ тебя недостаточно прав!");
                    return false;
                }
                sender.sendMessage("<<<\u00a73AUTHOR: ENDERBRO3D\u00a7f>>>");
                sender.sendMessage(">\u00a7c/antiacc protect <\u00a7fenable/disable/status\u00a7c> \u00a7f- \u00a7eвключить/отключить/узнать статус защиты");
                return true;
            }
            if(args[0].equalsIgnoreCase("protect")) {
                if(args[1].equalsIgnoreCase("enable")) {
                    if(!sender.hasPermission("AntiAcc.protection.enable")) {
                        sender.sendMessage(">\0aa7cУ тебя недостаточно прав!");
                        return false;
                    }
                    config.set("enabled", true);
                    reloadConfig();
                    return true;
                }
                if(args[1].equalsIgnoreCase("disable")) {
                    if(!sender.hasPermission("AntiAcc.protection.disable")) {
                        sender.sendMessage(">\0aa7cУ тебя недостаточно прав!");
                        return false;
                    }
                    config.set("enabled", false);
                    reloadConfig();
                    return true;
                }
                if(args[1].equalsIgnoreCase("status")) {
                    if(!sender.hasPermission("AntiAcc.protection.status")) {
                        sender.sendMessage(">\0aa7cУ тебя недостаточно прав!");
                        return false;
                    }
                    boolean status = config.getBoolean("enabled");
                    String StatusStr = (status ? "aВключена" : "cВыключена");
                    sender.sendMessage(">> \u00a7eЗащита " + StatusStr);
                    return true;
                }
            }
            return true;
        }
        return false;
    }
}
 
Java:
package ru.EnderBro3D.AntiAcc;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;

import org.apache.commons.io.FileUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;


public class MainClass extends JavaPlugin implements Listener {

    //Configuration
    private YamlConfiguration users;
    private YamlConfiguration config;
    private YamlConfiguration messages;
 
    public static YamlConfiguration getConfig(JavaPlugin plugin, String configName) {
        File file = new File(plugin.getDataFolder(), configName);
        if (file.isDirectory()) {
            file.delete();
        }
        if (!file.exists()) {
            /* try {
                file.getParentFile().mkdirs();
                file.createNewFile();
            } catch (IOException ex) {
                plugin.getLogger().log(Level.WARNING, "Ошибка при создании файла " + configName, ex);
            }  */
        
            try (InputStream i = plugin.getClass().getClassLoader().getResourceAsStream(configName)) {
                FileUtils.copyInputStreamToFile(i, file);
            } catch (IOException e) {
                 plugin.getLogger().log(Level.WARNING, "Ошибка при создании файла " + configName);
            }
            return new YamlConfiguration();
        }
        return YamlConfiguration.loadConfiguration(file);
    }


    @SuppressWarnings("unused")
    @Override
    public void onEnable() {
        Bukkit.getServer().getPluginManager().registerEvents(this, this);
        config = getConfig(this, "config.yml");
        users = getConfig(this, "users.yml");
        messages = getConfig(this, "messages.yml");
    }

    @Override
    public void onDisable() {
        try {
            users.save("users.yml");
            config.save("config.yml");
            messages.save("messages.yml");
       } catch (IOException ex) {
            this.getLogger().log(Level.WARNING, "Ошибка при сохранении конфигов", ex);
       }
    }

    private void executeCommand (Player p, boolean console, String cmd) {
        CommandSender sender = console ? getServer().getConsoleSender() : p;
        getServer().dispatchCommand(sender, ChatColor.translateAlternateColorCodes('&', cmd.replaceAll("%player%", p.getName())));
    }

    @EventHandler
    public void onJoin(PlayerJoinEvent event) {
        Player p = event.getPlayer();
        String pname = p.getName();
        String GetPlayerIP = p.getAddress().getHostName();
        if(users.getConfigurationSection("users").isConfigurationSection(GetPlayerIP)) {
            String owner = users.getString("users."+GetPlayerIP+".ownerIP");
            if(owner == pname) {
                p.sendMessage(">> \u00a7cAntiAcc\u00a7f] \u00a7eТы проверен на мульти акк. Результат = \u00a7aTRUE");
            } else {
                String cmd = config.getString("defaultCommand");
                String time = config.getString("defaultTime");
                String reason = config.getString("defaultReason");
                cmd = cmd.replace("<time>", time);
                cmd = cmd.replace("<reason>", reason);
                cmd = cmd.replace("<player>", p.getName());
                executeCommand(p, true, cmd);
            }
        } else {
            users.set("users."+GetPlayerIP+".OwnerIP", pname);
            p.sendMessage(">> \u00a7cAntiAcc\u00a7f] \u00a7eТы новый пользователь, твои данные записаны.");
        }
    }
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if(cmd.getName().equalsIgnoreCase("antiacc")) {
            String noperms = messages.getString("noperms");
            noperms = noperms.replace("&", "\u00a7");
            if(args.length < 2) {
                if(!sender.hasPermission("AntiAcc.cmd.main")) {
                    sender.sendMessage(">\0aa7cУ тебя недостаточно прав!");
                    return false;
                }
                sender.sendMessage("<<<\u00a73AUTHOR: ENDERBRO3D\u00a7f>>>");
                sender.sendMessage(">\u00a7c/antiacc protect <\u00a7fenable/disable/status\u00a7c> \u00a7f- \u00a7eвключить/отключить/узнать статус защиты");
                return true;
            }
            if(args[0].equalsIgnoreCase("protect")) {
                if(args[1].equalsIgnoreCase("enable")) {
                    if(!sender.hasPermission("AntiAcc.protection.enable")) {
                        sender.sendMessage(">\0aa7cУ тебя недостаточно прав!");
                        return false;
                    }
                    config.set("enabled", true);
                    reloadConfig();
                    return true;
                }
                if(args[1].equalsIgnoreCase("disable")) {
                    if(!sender.hasPermission("AntiAcc.protection.disable")) {
                        sender.sendMessage(">\0aa7cУ тебя недостаточно прав!");
                        return false;
                    }
                    config.set("enabled", false);
                    reloadConfig();
                    return true;
                }
                if(args[1].equalsIgnoreCase("status")) {
                    if(!sender.hasPermission("AntiAcc.protection.status")) {
                        sender.sendMessage(">\0aa7cУ тебя недостаточно прав!");
                        return false;
                    }
                    boolean status = config.getBoolean("enabled");
                    String StatusStr = (status ? "aВключена" : "cВыключена");
                    sender.sendMessage(">> \u00a7eЗащита " + StatusStr);
                    return true;
                }
            }
            return true;
        }
        return false;
    }
}
 
Java:
package ru.EnderBro3D.AntiAcc;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;

import org.apache.commons.io.FileUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;


public class MainClass extends JavaPlugin implements Listener {

    //Configuration
    private YamlConfiguration users;
    private YamlConfiguration config;
    private YamlConfiguration messages;

    public static YamlConfiguration getConfig(JavaPlugin plugin, String configName) {
        File file = new File(plugin.getDataFolder(), configName);
        if (file.isDirectory()) {
            file.delete();
        }
        if (!file.exists()) {
            /* try {
                file.getParentFile().mkdirs();
                file.createNewFile();
            } catch (IOException ex) {
                plugin.getLogger().log(Level.WARNING, "Ошибка при создании файла " + configName, ex);
            }  */
       
            try (InputStream i = plugin.getClass().getClassLoader().getResourceAsStream(configName)) {
                FileUtils.copyInputStreamToFile(i, file);
            } catch (IOException e) {
                 plugin.getLogger().log(Level.WARNING, "Ошибка при создании файла " + configName);
            }
            return new YamlConfiguration();
        }
        return YamlConfiguration.loadConfiguration(file);
    }


    @SuppressWarnings("unused")
    @Override
    public void onEnable() {
        Bukkit.getServer().getPluginManager().registerEvents(this, this);
        config = getConfig(this, "config.yml");
        users = getConfig(this, "users.yml");
        messages = getConfig(this, "messages.yml");
    }

    @Override
    public void onDisable() {
        try {
            users.save("users.yml");
            config.save("config.yml");
            messages.save("messages.yml");
       } catch (IOException ex) {
            this.getLogger().log(Level.WARNING, "Ошибка при сохранении конфигов", ex);
       }
    }

    private void executeCommand (Player p, boolean console, String cmd) {
        CommandSender sender = console ? getServer().getConsoleSender() : p;
        getServer().dispatchCommand(sender, ChatColor.translateAlternateColorCodes('&', cmd.replaceAll("%player%", p.getName())));
    }

    @EventHandler
    public void onJoin(PlayerJoinEvent event) {
        Player p = event.getPlayer();
        String pname = p.getName();
        String GetPlayerIP = p.getAddress().getHostName();
        if(users.getConfigurationSection("users").isConfigurationSection(GetPlayerIP)) {
            String owner = users.getString("users."+GetPlayerIP+".ownerIP");
            if(owner == pname) {
                p.sendMessage(">> \u00a7cAntiAcc\u00a7f] \u00a7eТы проверен на мульти акк. Результат = \u00a7aTRUE");
            } else {
                String cmd = config.getString("defaultCommand");
                String time = config.getString("defaultTime");
                String reason = config.getString("defaultReason");
                cmd = cmd.replace("<time>", time);
                cmd = cmd.replace("<reason>", reason);
                cmd = cmd.replace("<player>", p.getName());
                executeCommand(p, true, cmd);
            }
        } else {
            users.set("users."+GetPlayerIP+".OwnerIP", pname);
            p.sendMessage(">> \u00a7cAntiAcc\u00a7f] \u00a7eТы новый пользователь, твои данные записаны.");
        }
    }
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if(cmd.getName().equalsIgnoreCase("antiacc")) {
            String noperms = messages.getString("noperms");
            noperms = noperms.replace("&", "\u00a7");
            if(args.length < 2) {
                if(!sender.hasPermission("AntiAcc.cmd.main")) {
                    sender.sendMessage(">\0aa7cУ тебя недостаточно прав!");
                    return false;
                }
                sender.sendMessage("<<<\u00a73AUTHOR: ENDERBRO3D\u00a7f>>>");
                sender.sendMessage(">\u00a7c/antiacc protect <\u00a7fenable/disable/status\u00a7c> \u00a7f- \u00a7eвключить/отключить/узнать статус защиты");
                return true;
            }
            if(args[0].equalsIgnoreCase("protect")) {
                if(args[1].equalsIgnoreCase("enable")) {
                    if(!sender.hasPermission("AntiAcc.protection.enable")) {
                        sender.sendMessage(">\0aa7cУ тебя недостаточно прав!");
                        return false;
                    }
                    config.set("enabled", true);
                    reloadConfig();
                    return true;
                }
                if(args[1].equalsIgnoreCase("disable")) {
                    if(!sender.hasPermission("AntiAcc.protection.disable")) {
                        sender.sendMessage(">\0aa7cУ тебя недостаточно прав!");
                        return false;
                    }
                    config.set("enabled", false);
                    reloadConfig();
                    return true;
                }
                if(args[1].equalsIgnoreCase("status")) {
                    if(!sender.hasPermission("AntiAcc.protection.status")) {
                        sender.sendMessage(">\0aa7cУ тебя недостаточно прав!");
                        return false;
                    }
                    boolean status = config.getBoolean("enabled");
                    String StatusStr = (status ? "aВключена" : "cВыключена");
                    sender.sendMessage(">> \u00a7eЗащита " + StatusStr);
                    return true;
                }
            }
            return true;
        }
        return false;
    }
}
спасибо, надеюсь поможет.
Можно последний вопрос задать? Вот например у меня много строк
и мне надо заменить знак & на цвет
я не могу засорять код этим:

String noperms = messages.getString("noperms");
noperms = noperms.replace("&", "\u00a7");

т.к займёт это всё 20 строк.
есть что-то на подобии этого только короче?
 
ChatColor.translateAlternateColorCodes(char, String)
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх