在上一章,你应该已经理解了什么叫作NBT树,但理解不代表会运用。要真正搞懂NBT树的理念,我们得投入实践,学会阅读NBT树甚至表示出一个NBT树。
NBT数据树常常会表示成下面这样的格式:
<数据类型>[root或其他具体名称]:根、父级标签或其他具体的名称或描述
│
├<数据类型>[名称]:值或描述
......
└<数据类型>[名称]:值或描述
注:在上面的格式中,<>代表必定会出现,[]代表可能会出现(含义跟指令格式中的一样)。
许多网站和程序,比如Minecraft Wiki、常用的Java版NBT编辑器NBTExplorer,都采用了上述格式来表示NBT。
举个简单的例子,在Minecraft Wiki上,Java版书与笔的物品NBT是这么表示出来的:
? tag:父级标签
└? pages:书与笔的各个页面。
空└?:一个单页。每一页是一个字符串,不能超过个字符。
在上面的这个例子中,由于Minecraft Wiki使用一个图片标识来表示数据类型,所以这里用一些特殊符号来代替:
?——Compound复合标签
?——List列表
?——String字符串
仔细观察Minecraft Wiki给出的NBT树,结合我们前面所学的知识,你应该不难得出上面这个例子所表示的意思:
『对于物品书与笔,在其物品NBT标签中的tag复合标签下,有一个名为pages的列表型标签。这个pages列表是一个由多个字符串类型的值组成的列表,每个值都代表着书与笔中的一页,且每个值都不得拥有超过个字符。』
什么?你很难理解?或许我们需要睁大眼睛,逐行研究上面的例子。
第一行:? tag:父级标签
根据上面的格式『<数据类型>[root或其他具体名称]:根、父级标签或其他具体的名称或描述』,我们不难知道这在表示一个名为tag的复合标签。同时,它被解释为『父级标签』,说明Minecraft Wiki在这里给出的NBT树是在描述这个标签的孩子(也就是值)。
等等,为什么Minecraft Wiki不直接从根开始,而是从这个tag标签开始呢?