Bukkit - Как перезагрузить пользовательскую конфигурацию yaml - PullRequest
0 голосов
/ 13 сентября 2018

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

Метод перезагрузкиfile:

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;
            }
        }
    }
}

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

1 Ответ

0 голосов
/ 29 сентября 2018

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

Итак, давайте создадим новый класс, являющийся Singleton.Шаблон 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()

...