2013-07-21 52 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

相关问题