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

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

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 Я новичёк в создании плагинов, если я сильно накосячил - скажите где.
 
На условие посмотри, если конфиг нулл то у тебя выполняется код сделай условие такое config != null
 
На условие посмотри, если конфиг нулл то у тебя выполняется код сделай условие такое config != null
Код который выполняется:

Java:
                if(config == null) {
                    s.sendMessage(">> \u00a7cОшибка с конфигурацией, config = null");
                    return false;
                }
 
Окей, вот: http://pastebin.com/RPrkvshr
Java:
            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

Как я понял, после создания локация не записывается, и взять координату из конфига не возможно
 
Окей, вот: http://pastebin.com/RPrkvshr
Java:
            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

Как я понял, после создания локация не записывается, и взять координату из конфига не возможно
Проверяй именно кординату в конфиге, после ввода команды
 
Проверяй строку которая тебе нужна на нулл
 
Код:
            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
 
А сохранить конфиг после занесения туда новых данных не судьба?

plugin.getConfig().save(путь до файла);
 
Он же в хеше, не обязательно сейвить в файл на каждом ходу.
А сохранить конфиг после занесения туда новых данных не судьба?

plugin.getConfig().save(путь до файла);
Проверю способ Fenix'а
Эх, опять не работает, пробывал .save'ть. Не помогло, пишет ошибку (в чат).
Потом попробовал .save'ть и перезапускать конфиг, тоже-самое, только теперь пишет что локации нету
 
напиши код которым сейвил. скорее всего в адресе файла ошибка
Код:
                config.set("Locations." + newLoc + ".world", sender.getLocation().getWorld().toString());
               config.save("config.yml");
                s.sendMessage(">> \u00a7aЛокация \u00a73" + newLoc + ", \u00a7aуспешно установлена.");
                return true;
 
Код:
                config.set("Locations." + newLoc + ".world", sender.getLocation().getWorld().toString());
               config.save("config.yml");
                s.sendMessage(">> \u00a7aЛокация \u00a73" + newLoc + ", \u00a7aуспешно установлена.");
                return true;
Ну ты конечно молодец.
Адрес конфига указан не верно, отсюда и вся проблема.

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

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

Если твой config задан методами defaultconfig, то можно просто saveDefaultConfig();
 
Ну ты конечно молодец.
Адрес конфига указан не верно, отсюда и вся проблема.

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

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

Если твой config задан методами defaultconfig, то можно просто saveDefaultConfig();
Эхххх, почему вы никогда не читаете это: 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);
            }
    }
?
 
Стоп... Кажется я понял, 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);
            }
    }
?
ага
 
Спасибо, помогло
И ещё 1 вопрос, как мне перезагружать конфиг если config.reload - нету?
 
Спасибо, помогло
И ещё 1 вопрос, как мне перезагружать конфиг если config.reload - нету?
заново вызвать config.load
У меня довольно много конфигов и чтобы с этим не мучатся я просто вызываю методы
Код:
OnDisable();
OnEnable();
Но это будет работать только если вызов всех конфигов происходит оттуда
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх