2014-05-25 34 views
2

我有一個bukkit配置文件看起來像這樣:Bukkit的ConfigurationSection getKeys

effected mobs: 
    skeleton: 
    lower hp limit: 0 
    upper hp limit: 0 
    zombie: 
    lower hp limit: 0 
    upper hp limit: 0 
    spider: 
    lower hp limit: 0 
    upper hp limit: 0 

我試圖讓一組包含[骷髏,殭屍,蜘蛛]而且可以通過給被添加任何其他它是關鍵「有效的暴徒」。我已經看過這個類似question 和嘗試下面的代碼:

public class Main extends JavaPlugin implements Listener{ 
    public FileConfiguration config; 
    public Set<String> mobsEffected; 

    public void onEnable(){ 
     config = getConfig(); 
     mobsEffected = config.getConfigurationSection("effected mobs").getKeys(false); 
     Bukkit.getLogger().info(String.valueOf(mobsEffected.size())); 

    } 
} 

但尺寸被記錄爲0,當它應該是3,有何建議?

+0

你確定它可能的最大值和最小值設置爲0 – MrLore

+0

我沒有做這些值做任何事,所以它不應該的問題 – donsavage

+0

一對夫婦的事情。?:嘗試用下劃線代替在配置值的所有空間,請嘗試使用配置= this.getConfig();即使它不應該的問題,還請確保您使用名爲config.yml,也是配置,嘗試記錄所有值以查看顯示的內容 – Jojodmo

回答

3

所以你真正想要得到一套基於你的配置條目字符串。 這應該工作:

public class Main extends JavaPlugin implements Listener { 
    public FileConfiguration config; 
    public Set<String> mobsEffected; 

    public void onEnable() { 
     // you have to initialize your set! 
     mobsEffected = new HashSet<String>(); 
     // this creates the Config 
     File Cfgpath = new File("plugins/yourpluginnamehere"); 
     File Cfg = new File("plugins/yourpluginnamehere/config.yml"); 
     try { 
      Cfg.createNewFile(); 
     } catch (IOException e) { 
      Cfgpath.mkdirs(); 
      try { 
       Cfg.createNewFile(); 
      } catch (IOException e1) { 
       e1.printStackTrace(); 
      } 
     } 

     config = YamlConfiguration.loadConfiguration(Cfg); 
     // Now it loops through all the Keys in the Configuration Section 
     // "effected mobs" and adds every key to your set! 
     for (String key : config.getConfigurationSection("effected mobs").getKeys(false)) { 
      mobsEffected.add(key); 
     } 
     Bukkit.getLogger().info(String.valueOf(mobsEffected.size())); 

    } 
} 

請確保您與您的插件的名稱替換yourpluginnamehere。 你必須採取在兩個地方,你必須替換它的時代相同的字符串(區分大小寫!)。

然後,它會自動在第一次運行一個空白config.yml爲您創建一個配置目錄。

在第一次運行時,你也將獲得一個NullPointerexception因爲的ConfigurationSection還不存在。所以,只需進入你的插件的文件夾,並將你的配置內容插入到新創建的config.yml中。

0
getConfig().getConfigurationSection("effected mobs").getKeys(false).toArray(); 

你應該閱讀維基更仔細的xD

0

嘗試使用下面的代碼,以確保信息是從它得到前文件被創建。確保你的默認config.yml位於主目錄下的plugin.jar文件中。 (如果把它的IDE裏面真的要看,我把它放在主插件目錄,但是這取決於你如何編譯插件,它可能需要在你的src文件夾中去。(我用一個Maven項目,而不是Java項目在Eclipse)

public class Main extends JavaPlugin implements Listener{ 
    public FileConfiguration config; 
    public Set<String> mobsEffected; 

    public void onEnable(){ 
     config = Bukkit.getConfig(); 
     config.saveDefaultConfig(); 
     mobsEffected = config.getConfigurationSection("effected mobs").getKeys(false); 
     Bukkit.getLogger().info(String.valueOf(mobsEffected.size())); 
    } 
}