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

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

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

Статус темы:
Закрыта.
  1. Автор темы
    EnderBro3D

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

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    После того как я создаю плагин и ввожу туда:
    Код:
        public void onEnable() {
            saveConfig();
            if(!configfile.exists()) {
                try {
                    configfile.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            }
    конфиг не создаётся, но после того как я ввожу
    Код:
            config.options().copyDefaults(true);
    всё проходит гладко. В чём может быть дело? P.S Раньше работало

    Вторая ошибка с записью данных.
    Дело в том что данные не записываются! Я пишу
    Код:
    config.set("test."+player.getName()+".health", player.getHealth());
    P.S Код который выше это пример, у меня же:
    Код:
    config.set("Enabled", true);
    ничего не записывается!

    В консоль ничего не пишет.

    ----------------------------------
    Может пригодится:
    Код:
        FileConfiguration config = this.getConfig();
        File configfile = new File(getDataFolder() + File.separator + "config.yml");
     
  2. Хостинг MineCraft
    <
  3. Derik

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

    Баллы:
    76
    Имя в Minecraft:
    Derik
    saveDefaultConfig() кто то забыл...
     
  4. Автор темы
    EnderBro3D

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

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Окей, у меня в плагине ещё 1 конфиг (users.yml), как мне его сохранить?
     
  5. Exception_Prototype

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

    Баллы:
    46
    Код:
        public void saveConfig(File file, FileConfiguration config) {
            try {
                config.save(file);
                config.load(file);
            } catch (IOException | InvalidConfigurationException e) {
                plugin.getLogger().log(Level.WARNING, "Ошибка при создании файла.", ex);
            }
        }
    
     
    Последнее редактирование: 3 окт 2016
  6. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Один метод, который поможет всем без исключения разобраться как же создавать конфиги, отличный от config.yml
    Код:
    /**
    * Получение любого конфига в рабочей папке плагина. Если файла не
    * существует, он будет создан.
    *
    * @param plugin ссылка на главный класс плагина
    * @param configName название файла (пример: "misc.yml")
    * @return YamlConfiguration файла.
    */
    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.createNewFile();
            } catch (IOException ex) {
                plugin.getLogger().log(Level.WARNING, "Ошибка при создании файла " + configName, ex);
            }
            return new YamlConfiguration();
        }
        return YamlConfiguration.loadConfiguration(file);
    }
    Сохранять же такой конфиг можно с помощью YamlConfiguration#save(String):
    Код:
    YamlConfiguration yc = getConfig(this, "cache.yml");
    yc.save("cache.yml");
    [DOUBLEPOST=1475495691,1475495624][/DOUBLEPOST]
    НЕ используй *.println. Для этого есть логгеры. И e.printStackTrace() тоже не используй.
     
  7. Exception_Prototype

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

    Баллы:
    46
    Да я в курсе, сейчас там тож поправлю, это прост заготовка валялась дет в файлах.
     
  8. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Скопипастить купил, а безпалевность не купил? :D
     
  9. Exception_Prototype

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

    Баллы:
    46
    :D :D :D
     
  10. Автор темы
    EnderBro3D

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

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Спасибо, но что делать с config.set?
     
  11. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    А что с ним не так?
    Сохранять конфиг пробовал?
     
  12. Автор темы
    EnderBro3D

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

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    окей, попробую, я просто подумал что вы помогли с первым вопросом (как сохранять конфиг)
     
  13. Exception_Prototype

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

    Баллы:
    46
    Ну я лично нечего не писал, так как ты не ответил на сообщение Derik и подумал, что ты ещё не пробовал что либо делать.
     
  14. Автор темы
    EnderBro3D

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

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Прошу прощения за нелепый вопрос, в Level.Warning выдаёт ошибку в слове Level, что надо импортировать? Я просто новичёк в создании плагинов.
     
  15. DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    Используй просто log.warn, или не пиши ничего вообще. На крайний случай можно через Bukkit.getConsoleSender()
     
  16. Автор темы
    EnderBro3D

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

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Много тут профессионалов собралось. Я ещё хочу 1 вопрос задать, я сделал ли ошибку в моём плагине?
    Код:
    package ru.EnderBro3D.AntiAcc;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.logging.Level;
    
    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
        public YamlConfiguration users;
        public YamlConfiguration config;
       
        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.createNewFile();
                } catch (IOException ex) {
                    plugin.getLogger().log(Level.WARNING, "Ошибка при создании файла " + configName, ex);
                }
                return new YamlConfiguration();
            }
            return YamlConfiguration.loadConfiguration(file);
        }
       
        private MainClass instance;
       
        public MainClass instance() {
            return instance;
        }
       
       
       
    
        public void onEnable() {
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
            YamlConfiguration config = getConfig(this, "cache.yml");
            YamlConfiguration users = getConfig(this, "users.yml");
            try {
                users.save("users.yml");
                config.save("config.yml");
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
       
        private void executeCommand (Player p, boolean console, String cmd){
            CommandSender sender = p;
            if (console) sender = getServer().getConsoleSender();
            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)) {
                if(users.getConfigurationSection("users."+GetPlayerIP).isConfigurationSection("ownerIP")) {
                    String owner = users.getString("users."+GetPlayerIP+".ownerIP");
                    if(owner == pname) {
                        p.sendMessage(">> \u00a7cAntiAcc\u00a7f] \u00a7eТы проверен на мульти акк. Результат = \u00a7aTRUE");
                    } else {
                        String cmd = config.getString("Command");
                        String time = config.getString("Time");
                        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);
                    }
                }
            }
        }
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if(cmd.getName().equalsIgnoreCase("antiacc")) {
                if(args.length == 0) {
                    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")) {
                        config.set("Enabled", true);
                        reloadConfig();
                        return true;
                    }
                    if(args[1].equalsIgnoreCase("disable")) {
                        config.set("Enabled", false);
                        reloadConfig();
                        return true;
                    }
                    if(args[1].equalsIgnoreCase("status")) {
                        boolean status = config.getBoolean("Enabled");
                        String StatusStr = "\u00a77Неизвестно";
                        if(status == true) {
                            StatusStr = "\u00a7aВключена";
                        }
                        if(status == false) {
                            StatusStr = "\u00a7cВыключена";
                        }
                        sender.sendMessage(">> \u00a7eЗащита " + StatusStr);
                    }
                }
                return true;
            }
            return false;
        }
    }
    
    Смысл плагина: Защитить сервер от мультиакков. P.S Защита плохая но всё-же.
    Если в данном коде ошибки?
     
  17. DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    Вместо private Main instace пиши public static Main instance. Вряд ли это будет хорошей защитой, ибо у многих людей динамический IP, так же это реализовано в AuthMe
     
  18. Автор темы
    EnderBro3D

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

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Я просто тренеруюсь. Вдруг я создам сервер для друзей без плагинов (кроме моего), а они начнут тролить "О СМАРИ КОКОЙТА ЧУВАК ВАШЁЛ!"
     
  19. DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    Еще интересно, как ты заносишь туда нового игрока?
     
  20. Автор темы
    EnderBro3D

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

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Вот так?

    Код:
        public static MainClass instance;
       
        public MainClass instance() {
            return instance;
        }
     
  21. DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    Да, просто лично у меня, когда я не пишу static выдает ошибку
     
Статус темы:
Закрыта.

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