首页 > 解决方案 > Bukkit - 如何重新加载自定义 yaml 配置

问题描述

好的,所以我正在尝试制作一个可切换的功能,无论他们是否启用/禁用它都存储在“data.yml”中。我遇到的问题是文件确实得到了更新(Asin,它确实从真变为假,反之亦然),但它实际上并没有在游戏中应用这些更改。

重新加载文件的方法:

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

如果您需要更多代码或有任何问题,我会很乐意提供代码/答案。提前致谢。

标签: yamlconfigbukkitreloading

解决方案


问题是插件将配置保存在 reload 方法中。我也不建议在这种情况下使用静态方法,除非该方法的类是单例。

所以让我们创建一个新类作为单例。单例模式描述了一个类,它只有一个可通过静态方法访问的实例。

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()


推荐阅读