Java Bukkit/Spigot 每个播放器配置文件

Java Bukkit/Spigot per player configuration files

我一直在开发一个 Bukkit/Spigot 插件,它使用单独的配置文件,但经过研究和对其他人的答案进行多次测试后,我还没有找到适合我的解决方案。我已经尝试 并根据我的需要对其进行了调整,但它没有用。这是我拥有的:

private final String name;
private FileConfiguration config = null;
private final Plugin plugin;

public Files(Plugin plugin, String name) {
    this.name = name;
    this.plugin = plugin;
    config = YamlConfiguration.loadConfiguration(new File(name));
}

public void create() {
    cfile = new File(plugin.getDataFolder() + File.separator + path, name + ".yml");
    if (!plugin.getDataFolder().exists()) plugin.getDataFolder().mkdir();
    if (!cfile.exists()) {
        try {
            cfile.createNewFile();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    config = YamlConfiguration.loadConfiguration(cfile);
}

... set, get, etc methods

如果我尝试用

实例化
 Files f = new Files(plugin, "config");

我在尝试 get/set/etc 时遇到错误,或者我最终没有错误也没有任何结果。任何人都可以帮我解决这个问题吗?将不胜感激。

让我们从头说起:

config = YamlConfiguration.loadConfiguration(new File(name));

这会尝试从 Bukkit 主文件夹而不是插件文件夹加载配置 没有 扩展名。如果您想稍后创建配置,您应该将 config 保留为空值。

cfile = new File(plugin.getDataFolder() + File.separator + path, name + ".yml");
if (!plugin.getDataFolder().exists()) plugin.getDataFolder().mkdir();

您已使用来自 path 变量的附加文件夹创建了一个文件到您的 DataFolder。但是您没有在 DataFolder 中创建文件夹。 我会建议:

File cfgFolder = new File(plugin.getDataFolder(), path);
cfgFolder.mkdirs();
cfile = new File(cfgFolder, name + ".yml");

您丢失的结果也可能是由于未将配置保存到磁盘造成的:

config.save(cfile);