yaml - 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;
}
}
}
}
如果您需要更多代码或有任何问题,我会很乐意提供代码/答案。提前致谢。
解决方案
问题是插件将配置保存在 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()
推荐阅读
- flutter - Flutter Plugin - 无法解析方法'startActivityForResult'
- python - Airflow 中的 Joblib 和其他并行任务
- netsuite - 执行完成项目时删除工具包中的文章行
- google-chrome-extension - 从 Chrome 扩展播放音频时,如何隐藏/更改在 Chrome 全局媒体控件中显示的站点标题?
- python - 使用 NumPy 从原始数组计算带有位掩码的新数组(用于优化)
- sql - 如何在 PostgreSQL 中迭代使用 INSERT INTO
- typescript - 在 Sinon 中,无法成功 stub/mock 方法返回
- apache-kafka - 适用于 AWS MSK 的 Java 生产者
- kotlin - Kotlin/Native:如何实例化 IntVar?
- python - TCP 连接的解码负载:“utf-8”编解码器无法解码位置 4 中的字节 0x87:无效的起始字节