2013-07-21 48 views
3

我正在製作我的第一個bukkit插件。我想以編程方式創建一個代表HashMap的YAML文件。我如何設置和獲取這個數據結構?如何在YAML配置文件中設置/獲取HashMap?

HashMap參數看起來像<Signature, Location>,其中Signature是我的類存儲4個整數,並且Locationorg.bukkit.Location

我想我會喜歡YAML文件,看起來像這樣,但我不知道,如果這種結構最好是:

MyPlugin: 
    ListOfData: 
     - signature: [1,2,3,4] # this is a unique set of 4 integers 
      location: [122,64,254] # non-unique set of 3 integers 
     - signature: [4,2,1,2] 
      location: [91,62,101] 
     - signature: [3,3,1,3] 
      location: [190,64,321] 

Signature可以根據需要進行修改,並在必要時我可以Location創建一個包裝。

謝謝!

回答

2

這是一個建議的解決方案。我不知道這是否是最好的方法... :) 你可能要考慮這是您的YAML結構:

MyPlugin: 
    ListOfData: 
     '[1,2,3,4]': '[122,64,254]' 
     '[4,2,1,2]': '[91,62,101]' 
     '[3,3,1,3]': '[190,64,321]' 
     anothersignature:anotherlocation 
     ... 

這將讓你在使用普通技術閱讀「ListOfData」從YAMLConfiguration讀取哈希映射(見下文)。

您必須將來自該文件的傳入信息視爲<字符串,字符串>的HashMap,並從那裏進行任何翻譯(例如,將122,64,254轉換爲位置)。

要讀取一個HashMap:

this.getConfig().getConfigurationSection("path.to.map").getValues(false) 

爲了寫一個HashMap(saveconfig的()仍然需要被調用來寫入到磁盤):

this.getConfig().createSection("path.to.map", MyMap) 

有一些細節和微妙之處這裏,其值得仔細閱讀(相同的頁面,但不同的非連續部分):

http://wiki.bukkit.org/Configuration_API_Reference#HashMaps http://wiki.bukkit.org/Configuration_API_Reference#HashMaps_2

+0

我最初的答案在例子YAML中有一個語法錯誤,我忽略了字符串周圍的引號,並且在每個HashMap配對中的冒號(:)後需要空格。我已更正了文字。 – Iain

+0

一些潛在的缺陷:1)因爲你正在存儲位置,所以考慮是否除了座標之外還需要存儲世界名稱(以便與多世界兼容)。 2)如果getConfigurationSection無法找到指定的段路徑,它將返回null,因此如果您不是100%確定該段路徑將存在,則應該單獨執行該步驟並檢查是否爲空。 – Iain

+0

我決定創建一個包裝器並對數據進行序列化(因爲它不是絕對必要的,所以它是文本編輯的),但我會考慮你的未來答案。謝謝! – BLuFeNiX

相關問題