基本类型
数字类型
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:1b
、IsBaby:0b
这类。
由于其实根本就是byte,所以一般也不会特别介绍。
浮点数格式
<数值><后缀>
数值部分可以是
- 整数,可以有前导零
- 小数,可以有前导零
- 科学记数法,如
1.23e123
或1.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]
只有很少的地方需要用到数组...