基本类型

数字类型

NBT把数字分为两大种,分别为整数及浮点数,然后再细分为不同储存大小、精度的种类。

  • 整数
    • Byte (数值范围为 -128 到 127 )
    • Short (数值范围为 -32,768 到 32,767 )
    • Int (数值范围为 -2,147,483,648 到 2,147,483,647)
    • Long (数值范围为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807)
  • 浮点数(类似科学计数法,能储存小数及很大的数值,然而精度有限,数值越小精度越高,反之亦然)
    • Float (精度较低)
    • Double (精度较高)

整数格式

<数值><后缀>

数值部分必须为纯数字或纯数字且前方有个+/-号。
纯数字不能以0开头,也就是不能有前导零(Leading zeros),除非那个数字就是0。

类型 后缀(大小写皆可)
Byte b
Short s
Int 无后缀
Long l

例子: (前方为+的就是正确,-的就是错误)

+ 123b
+ 123B
+ 123
+ -123b
+ 0
+ +0
+ -0

- 0123b
(前导零)
- 00
(前导零)
- +-123
(只能出现一个`+`/`-`号)
- 1e3
(不支持科学记数法)
- 133b
(超出范围)

命令NBT更改NBT时能够做自动类型变换,只要数值没有超出范围就可以
然而建议全部都写上类型后缀,因为类型变换有时候可能会出问题,而且检测的时候也必须加上类型后缀

布尔值

布尔值是整数格式的一个特殊情况,只储存1 (True)及 0 (False)值。
布尔值使用 Byte储存,比如是 NoAI:1bIsBaby:0b这类。
由于其实根本就是byte,所以一般也不会特别介绍。

浮点数格式

<数值><后缀>

数值部分可以是

  • 整数,可以有前导零
  • 小数,可以有前导零
  • 科学记数法,如1.23e1231.23e-123 格式就是<数值1>e<数值2>,数值就是<数值1>*10^<数值2>
类型 后缀(大小写皆可)
Float f
Double d

例子

123f
123d
1.23e2f
1.23e2d
-1.23e-2d
1.23e-2d

注意,浮点数的数值不太准确,一般到4个位就差不多了
别试图检查浮点数的NBT了...检查不了

字串类型

字串(String)类型,顾名思义就是储存字串(文字)的类型。

数据并不总全是数字,比如物品的名称。为了方便使用,NBT里有字符类型可以储存字符。

格式:

字符
或
"字符"

当字符出现了不属于a-z A-Z 0-9 _ .(空格、中文字符也是不属于这些字符)里的字符,就需要使用第二个格式,也就是以""括住,表示这是一个完整的字串。
或者当该字符可能被当作是其他类型的时候(如纯数字或数字结尾为bsldf等字符(大小写皆可)),也需要使用第二个格式。

如同Compound子标签的名字一样(Compound子标签的名字其实就是一个字串类型),当字串里出现了\"字符时就需要将这两个字符进行转义,方式为在字符前方加上\号。转义方式可以参见之前JSON的介绍,大致一样。

例子:

NBT表示 实际显示
abcd abcd
"abcd" abcd
"123" 123
123 这个不是字符串
"ab cd" ab cd
"say \"hi\"" say "hi"
"中文" 中文
minecraft:stone 这会出错
"minecraft:stone" minecraft:stone
"{\"abcd\":\"{\\\"abc\\\":\\\"第一行\\\\\\\\n第二行\\\"}\"}" {"abcd":"{\"abc\":\"第一行\\n\"}"}

\n\uxxxx\字符都需要转义,因为这两个格式是JSON的而不是NBT的。

注意,部分NBT,如实体ID,在生成时容许使用id:实体id的方式写,比如是id:armor_stand
然而,检测的时候是必须全写,也就是实体id前方得加上minecraft:,如id:"minecraft:armor_stand"

数组类型

数组(Array)类型能储存多个数字,那些数字就是该数组的类型。
和List类似,我们会叫特定类型的数组为 <类型>数组(array of <类型>)。
数组和List最大的分别在于,List是查看子标签里是否存在那些检测的标签,而数组则是检查整个数组看看是否符合指定要求,检查包括该标签所在位置、顺序等等。

目前支持的类型包括:

  • Byte
  • Int
  • Long

格式:

[类型前缀;子标签]

子标签和List类似,都是只有数值的标签,之间以,分隔

类型 字符(必须大写)
Byte B
Int I
Long L

例子:

[I;]
空的Int array

[I;123,456]

[B;12b,13b,14b]

[L;123l,456l,789l]

只有很少的地方需要用到数组...

results matching ""

    No results matching ""