Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем EnderBro3D, 3 окт 2016.

Статус темы:
Закрыта.
  1. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    И тогда он перезапишет config.yml, емнип.
    Хотя даже специально пересмотрел реализацию конфигов. Нету там таких методов.

    Прекращайте давать вредные советы.
     
    Последнее редактирование: 4 окт 2016
  2. Хостинг MineCraft
    <
  3. Автор темы
    EnderBro3D

    EnderBro3D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Всё, опять доделываю плагин. Но возникает ошибка в 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:
    Код:
     users.save("users.yml");
    Как я понял ошибка возникает в сохранении конфига.
    Я пытался сделать так:
    Код:
       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);
        }
    и пробовал так:
    Код:
        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);
        }
     
  4. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    users == null
     
  5. Автор темы
    EnderBro3D

    EnderBro3D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    По подробнее. Я чайник. Я умею только издавать звуки. ТЮХ ТЮХ
     
  6. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Без кода я могу только залить в тебя воду и поставить кипятиться.
     
  7. Автор темы
    EnderBro3D

    EnderBro3D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    @Dereku

    Полностью код:
    Код:
    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;
        }
    }
     
  8. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Код:
    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;
        }
    }
     
  9. Автор темы
    EnderBro3D

    EnderBro3D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    спасибо, надеюсь поможет.
    Можно последний вопрос задать? Вот например у меня много строк
    и мне надо заменить знак & на цвет
    я не могу засорять код этим:

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

    т.к займёт это всё 20 строк.
    есть что-то на подобии этого только короче?
     
  10. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    ChatColor.translateAlternateColorCodes(char, String)
     
  11. Автор темы
    EnderBro3D

    EnderBro3D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Например: sender.sendmessage(ChatColor.translateAlternateColorCodes("&", test.getString("fortest"))); ?[DOUBLEPOST=1475945908,1475945627][/DOUBLEPOST]Ладно всем спасибо за вашу помощь. Закрываю тему
     
Статус темы:
Закрыта.

Поделиться этой страницей