Bukkit - как перезагрузить пользовательскую yaml-конфигурацию

Хорошо, поэтому я пытаюсь сделать переключаемую функцию, независимо от того, включена ли она / отключена, хранится в файле data.yml. Проблема, с которой я столкнулся, заключается в том, что файл действительно обновляется (Asin, он меняется с true на false и наоборот), но на самом деле он не применяет изменения в игре.

Метод перезагрузки файла:

public static void reloadConfig(File file, FileConfiguration conf) {
    try {
        conf.save(file);
    } catch (Exception e) {
    }
    conf = YamlConfiguration.loadConfiguration(file);
}

Команда переключения:

if (args[0].equalsIgnoreCase("toggle")) {
    File file = new File("plugins/StatTrack", "data.yml");
    if (file.exists()) {
        FileConfiguration conf = YamlConfiguration.loadConfiguration(file);
        if (conf.getBoolean("Users." + player.getName() + ".OreTracker") == true) {
            conf.set("Users." + player.getName() + ".OreTracker", false);
            try {
                Main.reloadConfig(file, conf);
                Main.message(player, "&cDisabled&f the Ore&8-&fTracker");
                return true;
            } catch (Exception e) {
                Main.message(player, "&cSome fatal error occored");
                return true;
            }
        } else if (conf.getBoolean("Users." + player.getName() + ".OreTracker") == false) {
            conf.set("Users." + player.getName() + ".OreTracker", true);
            try {
                Main.reloadConfig(file, conf);
                Main.message(player, "&aEnabled&f the Ore&8-&fTracker");
                return true;
            } catch (Exception e) {
                Main.message(player, "&cSome fatal error occored");
                return true;
            }
        }
    }
}

Если вам нужен еще код или у вас есть вопросы, я с радостью предоставлю код / ​​ответ. Заранее спасибо.

0
0
1 622
1

Ответы 1

Проблема в том, что плагин сохраняет конфигурацию в методе перезагрузки. Я также не рекомендовал бы использовать статический метод в этом случае, если класс метода не является синглтоном.

Итак, давайте создадим новый класс, являющийся синглтоном. Шаблон Singleton описывает класс, у которого есть только один экземпляр, доступный через статические методы.

public class PluginConfig {

    private static PluginConfig instance; // Static (global) reference to the instance

    File confFile;
    YamlConfiguration conf;

    public PluginConfig(File confFile) {
        this.confFile = confFile;
        loadConfig();
    }

    public static YamlConfiguration getConfig() {
        return instance.conf;
    }

    public static void loadConfig() {
        instance.conf = YamlConfiguration.loadConfiguration(confFile);
    }

    // Extra method for another implementation, if potentially needed in the future
    public static void reloadConfig() {
        loadConfig();
    }

}

Используя этот класс, вы можете получить доступ к конфигурации отовсюду с помощью PluginConfig.getConfig().

Другие вопросы по теме