Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов 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. Хостинг MineCraft
    <
  3. IcedwinterZ

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

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

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

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Тфу блин :D[DOUBLEPOST=1480439386,1480439352][/DOUBLEPOST]В консоли ошибку скинь
     
  6. Автор темы
    EnderBro3D

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

    Баллы:
    76
    Имя в Minecraft:
    EnderBro3D
    Окей, вот: http://pastebin.com/RPrkvshr[DOUBLEPOST=1480439537,1480439496][/DOUBLEPOST]
    Код:
                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
    [DOUBLEPOST=1480439573][/DOUBLEPOST]Как я понял, после создания локация не записывается, и взять координату из конфига не возможно
     
  7. IcedwinterZ

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

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

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Проверяй строку которая тебе нужна на нулл
     
  10. Автор темы
    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) {
                   
                }
    ?[DOUBLEPOST=1480441684,1480441444][/DOUBLEPOST]Окей, сделал так, выводит 2016-11-29_22.46.35.png
     
  11. Fenix78563

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

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

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

    alexandrage Администратор

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

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

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

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    напиши код которым сейвил. скорее всего в адресе файла ошибка
     
  16. Автор темы
    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;
     
  17. 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();
     
  18. Автор темы
    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);
        }
    [DOUBLEPOST=1480502679,1480502400][/DOUBLEPOST]Стоп... Кажется я понял, getConfig() реализовывает только то чтобы подключить конфиг, он не реализовывает config.save. Получается мне надо писать config.save(getDataFolder() + File.separator + "config.yml");[DOUBLEPOST=1480502974][/DOUBLEPOST]
    Код:
        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);
                }
        }
    ?
     
  19. Fenix78563

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

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

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

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

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

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

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