【问题标题】:Bukkit - How to reload custom yaml-configurationBukkit - 如何重新加载自定义 yaml 配置
【发布时间】:2018-09-13 16:16:13
【问题描述】:

好的,所以我正在尝试制作一个可切换的功能,无论他们是否启用/禁用它都存储在“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;
            }
        }
    }
}

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

【问题讨论】:

    标签: yaml config bukkit reloading


    【解决方案1】:

    问题是插件在 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() 从任何地方访问配置

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-10
      • 2017-04-07
      • 2018-05-03
      • 2010-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多