2015-09-25 45 views
-1

我一直在研究Bukkit/Spigot插件,它使用单独的配置文件,但是通过研究和其他人的答案的许多测试,我还没有找到想要的解决方案为我工作。我尝试过Minecraft One Player Per Config并根据需要进行调整,但无法使用。下面是我有:每个玩家配置文件的Java 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"); 

我试图让/套/等时结束了错误的实例或者我最终没有错误,也没有任何结果。任何人都可以帮我一个忙吗?将不胜感激。

回答

0

让我们从头开始:

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

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

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

你丢失的结果也可以通过不保存配置到磁盘引起的:

config.save(cfile); 
+0

感谢您给我们!谢谢你指出我可能试图加载一个不存在的文件。我只需要制作一个方法将文件加载到内存中,并且还帮助我解决了目录问题。 – Ally