第138章真正深入了解NBT-4

在前三章,我已经讲完了字符和数值类型的数据类型,现在我们再来看看下表:

[字符

字符串(String)

[数值

{整形}

字节型(Byte:B)

短整型(Short:S)

整型(Int:I)

长整型(Long:L)

{浮点型(小数)}

单精度浮点型(Float:F)

双精度浮点型(Double:D)

[数据

复合标签(pound)

列表(List)

[数组

字节型数组(Byte A

ay:

整型数组(Int A

ay:[I])

长整型数组(Long A

ay:[L])

按照顺序,接下来就应该到了[数据]这个数据类型了。而里面的这两个:

复合标签(pound)

列表(List)

都是我们已经非常熟悉的数据类型了,因为这两个数据类型特别常见。但神奇的是,它们也经常被忽略。

为何?

因为它们说到底,就是两种符号:

{}——复合标签(pound)

——列表(List)

数据可以套娃在它们里面,而多个数据需要用英文半角逗号分割。

只不过,它们两的差别,是不是只有符号和名字的差别呢?

当然不是。

实际上,它们两绝对不是你想的那么简单。

首先,它们两的作用准确的来说是:

复合标签(pound):包含一段独立的NBT标签。如{killname:“MNG“,killtime:6000}zuqi.org 葡萄小说网

列表(List):存储多个类型相同的数据。如{time:[2020,12,21]}。

看起来似乎也没什么不同的地方对吧?

我们知道,一个NBT最外层就是由{}来包裹着的,而里面存储着各个标签,每个标签用英文半角逗号分割。而复合标签也是这样子的,所以,复合标签的作用才这样说:包含一段独立的NBT标签。

如果你看不懂,那也没关系,我们可以通过名字理解。“复合标签”这个名字是由“复合”和“标签”。

“标签”这个词的意思相信大家都知道。那么“复合”又是什么意思呢?

答案很简单:指物体等因某种原因而结合起来

理解了“复合”的意思,再来看看“复合标签”,我们很快就可以理解这个词:

指多个标签结合起来

不得不说,汉语真是博大精深。那么接下来,我们再来看看列表。

上面已经说了,列表的作用就是:存储多个类型相同的数据。翻译这个为人话就是:把多个同样类型的东西统一存储起来。

这就说明了什么?这就说明了列表的“

”包含的只能是指定类型的数据,实际上还属于值的范围。而{}包含的就不是指定类型的数据了,而是标签!这就是两种数据类型的不同之处。

所以在列表中才不用写数据类型,因为大家都一样。这就像是乘法分配律,把公因数都提取出来,进行简化算式。

现在搞懂这两个的区别了吧?我相信你已经搞懂了。

如果你还不懂,看看上面的两个例子。

好了,相信各位都已经准备好了,那么接下来我们就进入下一阶段。

我们知道,列表可以存储多个类型相同的数据。那么当数据是复合标签时,该怎么办?

很简单,其实这种情况我们已经遇见过很多次了,比如我们最了解的Enchantments(/?n?t??ntm?nts/)标签,我们都知道它的格式是这样的:

{Enchantments:[{id:魔咒id:String字符串,lvl:级数:Int整形}]}

可以发现,这里就出现了[{}]这种组合。如果你细心观察,你就会发现:列表里每项复合标签里的标签名称、格式都是完全一样的。

这说明了什么?这就说明了如果列表的项是复合标签,那么每个复合标签里的格式、标签名称都是完全一样的。

这很简单对吧?

实际上到此为止,关于复合标签和列表这两项数据类型就已经讲完了。

........

但此时,仍然有一个未解之谜:

我们知道,列表的项可以有很多。那么列表的项数到底有没有上限呢?

答案很简单:在没有明确规定列表的格式时,列表的项数理论上是无上限的。(明确规定列表格式的,比如在第一百三十二章讲到的ArmorDropChances)

只不过在实际操作过程中,列表还是有上限的:硬件。

嗯.......这可真是对了那句话:硬件决定上限,软件决定下限。

OK那么这一章就到这里了,我们下一章再见。

上一章目录+书架下一章