用Java重新排列对象(例如,用于Minecraft NBT文件)

时间:2014-01-14 11:00:42

标签: java object version config minecraft

这些是针对NBT-Files的转换工具的一些初步分类。这是一种提供嵌套对象的文件格式,你知道Minecraft可能知道这些对象。

所以让我们考虑一下这样的对象:

object.name = String
object.id = int
object.randomInformation = Object
object.storedObjects = Object[]

我想要达到的目的是: 用户应该能够为该对象的不同版本提供配置文件。 这可能如下所示:

Version1.dat:

someCoolObjectName.id = 1

Version2.dat:

someCoolObjectName.id = 2

因此,在从Version1转换为Version2时,程序将读取NBT-File,搜索id为1的任何对象,将其更改为2并将其写入另一个文件。 到目前为止还没什么大不了的。

当涉及到版本的真正变化时,问题就开始了。这包括:

  • 重命名属性
  • 移动了属性
  • 添加/删除属性
  • 包含对象的属性,这些对象必须被视为“正常”对象本身(如果您进入Minecraft,您可能会想到胸部的物品)

我想到了这样的事情:

Version1.dat:

foo:object.id=1
bar:object.randomInformation
*:object.storedObjects

Version2.dat:

foo:object.id=2
bar:object.usefulInformation
blubb:object.(int)addedInformation
*:object.storedObjects

这意味着从1转换为2:

  • 将ID从1更改为
  • 将randomInformation重命名为usefulInformation
  • 添加一个属性addedInformation,这是一个整数
  • 将object.storedObjects中的每个Object转换为普通对象
  • 只复制其他所有财产

这意味着我必须为配置文件实现一个完整的“语言”,并将其转换为必须对每个对象执行的“命令”列表。有没有更简单的方法来做到这一点?或者这已经是个好主意了?

请记住,每个版本中我都会有很多不同的对象,其中大部分只需要更改id。但是对于一些由他们的身份识别的物体,必须进行各种改变。我不想为每个新版本更改程序代码。

1 个答案:

答案 0 :(得分:0)

不是那么难!但是您需要从两个对象编写转换方法,或者如果第二个对象扩展第一个对象,则可以简单地复制第一个对象的字段。如果字段不可见,则可以使用反射来复制它们。

对于Minecraft NBT管理,您可以使用JNBT库。