2015-06-07 53 views
1

我正在試圖製作一個用YML文件存儲用戶數據的Bukkit/Spigot插件,並且我無法在用戶創建文件時創建一個列表連接。我正在使用內置的解析器。正在創建文件,但FileConfiguration沒有在其中添加文本

驗證碼:

@EventHandler 
public void onPlayerJoin(PlayerJoinEvent e) { 

    Player p = e.getPlayer(); 
    File f; 
    f = new File(getDataFolder(), "UserData/" + p.getUniqueId() + ".yml"); 
    if (!f.exists()) { 

     try { 
      f.createNewFile(); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
     FileConfiguration mapconfig = YamlConfiguration.loadConfiguration(new File(getDataFolder() + "UserData/" + p.getUniqueId() + ".yml")); 
     mapconfig.createSection("Mobs"); 
     mapconfig.set("Mobs", "mob1"); 
     Bukkit.getServer().getLogger().info("[Morph] Creating new user file " + p.getUniqueId() + "for user " + p.getName()); 
    } 

} 

中的文件被創建,但都是空的。

Mobs: 
    - mob1 

我需要該部分爲空。我究竟做錯了什麼?

更新代碼--------------------

@EventHandler 
public void onPlayerJoin(PlayerJoinEvent e) { 

    Player p = e.getPlayer(); 
    File f; 
    f = new File(getDataFolder(), "UserData/" + p.getUniqueId() + ".yml"); 
    if (!f.exists()) { 

     try { 
      f.createNewFile(); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
     FileConfiguration mapconfig = YamlConfiguration.loadConfiguration(new File(getDataFolder() + "UserData/" + p.getUniqueId() + ".yml")); 
     mapconfig.createSection("Mobs"); 
     List<String> ListOfStrings = Arrays.asList("mob1"); 
     mapconfig.set("Mobs", ListOfStrings); 
     try { 
      mapconfig.save(getDataFolder() + "UserData/" + p.getUniqueId() + ".yml"); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
     Bukkit.getServer().getLogger().info("[Morph] Creating new user file " + p.getUniqueId() + "for user " + p.getName()); 
    } 

} 

回答

1

你需要通過在使用mapconfig.save(file)保存編輯YAML配置玩家的文件在添加完所有節點後嘗試阻止等。

如果您希望列表「Mobs」最初爲空,請忽略mapconfig.set("Mobs", "mob1");行。

要添加元素到「Mobs」列表中,您需要創建一個要添加的字符串列表。據我所知,每次你想通過刪除或添加另一個字符串來更新列表,你需要先使用mapconfig.load(file)加載YAML文件(創建配置後的額外步驟),然後獲取當前值(字符串)該列表使用mapconfig.getStringList("Mobs"),根據需要更新列表,將其重新設置爲「Mobs」節點並再次保存該文件(如下所示)。

//Initial strings when file does not exist 
List<String> listOfStrings = Arrays.asList("mob1", "foo", "bar"); 
mapconfig.set("Mobs", listOfStrings); 
//Save config to file (in try block) 

並且如果文件已經存在,例如通過添加新的字符串來更新列表。

//After creating the file configuration 
//Load file (in try block) 
List<String> stringList = mapconfig.getStringList("Mobs"); 
stringList.add("mob4"); 
mapconfig.set("Mobs", stringList); 
//Save config to file (in try block) 

如果仍然無法正常工作,這裏是我的代碼略有清理的版本,這對我很有用。

@EventHandler 
public void onPlayerJoin(PlayerJoinEvent event) { 
    Player player = event.getPlayer(); 
    File file = new File(getDataFolder() + "/UserData/" + player.getUniqueId() + ".yml"); //Assuming all required directories exist 
    if (!file.exists()) { 
     try { 
      file.createNewFile(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
     Bukkit.getServer().getLogger().info("[Morph] Creating new user file " + player.getUniqueId() + "for user " + player.getName()); 
     FileConfiguration fileConfig = YamlConfiguration.loadConfiguration(file); 
     fileConfig.createSection("Mobs"); 
     List<String> ListOfStrings = Arrays.asList("mob1", "mob2", "mob3"); 
     fileConfig.set("Mobs", ListOfStrings); 
     try { 
      fileConfig.save(file); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 
+0

我已經用我現在的代碼更新了主題。它仍然不起作用,它只是創建文件,沒有任何內容,甚至沒有列表的開始。我究竟做錯了什麼? – BumbleBee

+0

您是否在運行之間刪除了該文件,該代碼僅在該文件不存在時才運行。 – JimW

+0

是的,在測試之前每次都將其移除 – BumbleBee

相關問題