1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Опять не работает конфиг. (set)

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Дело в том что опять не работает конфиг, теперь проверял через
    Код:
    if(config == null) {
    //Тут код
    return false;
    }
    P.S В методе onCommand
    проходит проверку, конфиг не null.
    Но, когда я пишу /atl (adminToLoc) create <locName> (например 1)
    то пишет что локация создалась, кто не понял это плагин для телепортации на локацию (как /warp)
    и в итоге у меня после /toLoc <locName> (например опять-же 1) выдаёт ошибку
    если написать /toLoc <несуществующаяЛокация>, то напишет: этой локации нету
    список локаций... и в списке нету локации которую мы ранее создали.
    Полный код http://pastebin.com/acSwjBgK
    P.S Я новичёк в создании плагинов, если я сильно накосячил - скажите где.
     
  2. IcedwinterZ

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    На условие посмотри, если конфиг нулл то у тебя выполняется код сделай условие такое config != null
     
  3. Автор темы
    EnderBro3D

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

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Код который выполняется:

    Код:
                    if(config == null) {
                        s.sendMessage(">> \u00a7cОшибка с конфигурацией, config = null");
                        return false;
                    }
     
  4. IcedwinterZ

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Тфу блин :D
    В консоли ошибку скинь
     
  5. Автор темы
    EnderBro3D

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

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Окей, вот: http://pastebin.com/RPrkvshr
    Код:
                double x = config.getDouble("Locations." + args[0] + ".x");
                int y = config.getInt("Locations." + args[0] + ".y");
                double z = config.getDouble("Locations." + args[0] + ".z");
                World world = Bukkit.getServer().getWorld(config.getString("Locations." + args[0] + ".world"));
                Location loc = new Location(world, x, y, z);
                Player sender = (Player) s;
                sender.teleport(loc); //82

    Как я понял, после создания локация не записывается, и взять координату из конфига не возможно
     
  6. IcedwinterZ

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Проверяй именно кординату в конфиге, после ввода команды
     
  7. Автор темы
    EnderBro3D

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

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Прости но я говорю что я новичёк, как проверять? config.<что тут?>
    config.isConfigurationSection()?
    config.isSet()?
     
  8. IcedwinterZ

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Проверяй строку которая тебе нужна на нулл
     
  9. Автор темы
    EnderBro3D

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

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Код:
                double x = config.getDouble("Locations." + args[0] + ".x");
                double y = config.getDouble("Locations." + args[0] + ".y");
                double z = config.getDouble("Locations." + args[0] + ".z");
                World world = Bukkit.getServer().getWorld(config.getString("Locations." + args[0] + ".world"));
                if(x == 0 || y == 0 || z == 0 || world == null) {
                   
                }
    ?
    Окей, сделал так, выводит 2016-11-29_22.46.35.png
     
  10. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    А сохранить конфиг после занесения туда новых данных не судьба?

    plugin.getConfig().save(путь до файла);
     
  11. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Он же в хеше, не обязательно сейвить в файл на каждом ходу.
     
  12. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    Не факт. До тех пор пока я не угнался за оптимизацией, у меня файлы погружались в требуемых мне событиях а не в onEnable. Так что кто его знает
     
  13. Автор темы
    EnderBro3D

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

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Проверю способ Fenix'а
    Эх, опять не работает, пробывал .save'ть. Не помогло, пишет ошибку (в чат).
    Потом попробовал .save'ть и перезапускать конфиг, тоже-самое, только теперь пишет что локации нету
     
  14. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    напиши код которым сейвил. скорее всего в адресе файла ошибка
     
  15. Автор темы
    EnderBro3D

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

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Код:
                    config.set("Locations." + newLoc + ".world", sender.getLocation().getWorld().toString());
                   config.save("config.yml");
                    s.sendMessage(">> \u00a7aЛокация \u00a73" + newLoc + ", \u00a7aуспешно установлена.");
                    return true;
     
  16. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    Ну ты конечно молодец.
    Адрес конфига указан не верно, отсюда и вся проблема.

    нужно использовать config.save (getDataFolder()+ File.separator + "Файл.yml")

    getDataFolder() - указывает путь до папки плагина.
    File.separator - тот слеш между названиями папок, использовать лучше именно его а не просто символ, т.к. в разных системах этот знак разный.
    Если у тебя есть какие-то подпапки в главной папке конфига то config.save(getDataFolder()+ File.separator + "папка" + File.separator + "Файл.yml")

    Если твой config задан методами defaultconfig, то можно просто saveDefaultConfig();
     
  17. Автор темы
    EnderBro3D

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

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Эхххх, почему вы никогда не читаете это: http://pastebin.com/acSwjBgK
    Код:
    protected static YamlConfiguration config;
     
        public static YamlConfiguration getConfig(JavaPlugin pl, String configName) {
            File file = new File(pl.getDataFolder(), configName);
            if (file.isDirectory()) {
                file.delete();
            }
            if (!file.exists()) {
                try (InputStream i = pl.getClass().getClassLoader().getResourceAsStream(configName)) {
                    FileUtils.copyInputStreamToFile(i, file);
                } catch (IOException e) {
                     pl.getLogger().log(Level.WARNING, "Ошибка при создании файла " + configName);
                }
                return new YamlConfiguration();
            }
            return YamlConfiguration.loadConfiguration(file);
        }

    Стоп... Кажется я понял, getConfig() реализовывает только то чтобы подключить конфиг, он не реализовывает config.save. Получается мне надо писать config.save(getDataFolder() + File.separator + "config.yml");
    Код:
        public static void save(JavaPlugin pl, YamlConfiguration conf, String configName) throws IOException {
            File file = new File(pl.getDataFolder() + File.separator + configName);
                try {
                    conf.save(file);
                } catch (IOException ex) {
                    pl.getLogger().log(Level.WARNING, "Ошибка при сохранении файла " + configName);
                }
        }
    ?
     
  18. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    ага
     
  19. Автор темы
    EnderBro3D

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

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Спасибо, помогло
    И ещё 1 вопрос, как мне перезагружать конфиг если config.reload - нету?
     
  20. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    заново вызвать config.load
    У меня довольно много конфигов и чтобы с этим не мучатся я просто вызываю методы
    Код:
    OnDisable();
    OnEnable();
    Но это будет работать только если вызов всех конфигов происходит оттуда
     
Статус темы:
Закрыта.

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