MemorySection.get 尝试从自定义 YAMLConfiguration 加载项目时出错

MemorySection.get error trying to load item from custom YAMLConfiguration

在 Bukkit 插件中,我有一个自定义 YAML 文件 "locale.yml",其中存储了不同的语言和字符串。当在没有本地文件的情况下加载插件时,会创建它和其他文件,但是当命令获取本地字符串时,会出现内部错误。请注意,这是在重新加载文件时修复的,文件仍然存在。

加载文件的代码如下:

if (!localeFile.exists()) {
    this.saveResource("locale.yml", false);
    InputStream locStream = this.getResource("locale.yml");
    if(locStream != null){
        locale.setDefaults(locale);
    }
}

我知道 locale.setDefaults(locale); 会导致无限递归,但我想不出任何其他解决方案。我试图删除它,删除错误但返回 "null" (因为没有要加载的文件。这是由服务器重新加载修复的 NOT)。

堆栈跟踪(这是重复的):

at org.bukkit.configuration.MemorySection.get(MemorySection.java:198) ...

at org.bukkit.configuration.MemorySection.getDefault(MemorySection.java:705) ...

我该如何解决这个问题?

我自己解决了这个问题,方法是将加载方法替换为:

if (localeFile == null) {
    File localeFile = new File(this.getDataFolder(), "locale.yml");
}
locale = YamlConfiguration.loadConfiguration(localeFile);

// Look for defaults in the jar
Reader localeStream = new InputStreamReader(this.getResource("locale.yml"));
if (localeStream != null) {
    YamlConfiguration loc = YamlConfiguration.loadConfiguration(localeStream);
    locale.setDefaults(loc);
}