当前位置: 我的世界 > 游戏攻略 > 正文

我的世界NBT教程 NBT详解

小编:3F时间:2015-08-26 08:57回到游戏园首页

  我的世界NBT教程 NBT详解。那今天给大家带来的是关于我的世界NBT的教程,下面就给大家详细的介绍一下什么是NBT、NBT标签的类型、自定义NBT、检测NBT等等内容吧!

  NBT的简介:

  什么是NBT呢?

  NBT是个文件格式 全称Named Binary Tag

  就是用作指定实体/某些方块的特性

  比如实体的血量

  NBT就是一堆标签,每个标签的格式如下

  标签名称:数值

  每个标签之间用逗号(,)相隔,比如

  {NoGravity:1b,Invisible:1b}

  NoGravity:1b就是一个标签,而NoGravity就是标签的名称,1b就是其数值

  Invisible:1b就是另一个标签,Invisible就是标签的名称,1b就是其数值

  如何获得比较详细的NBT资料

  我们在wiki里可以找到详细的NBT列表

  分别可以在http://minecraft.gamepedia.com/Chunk_format和http://minecraft.gamepedia.com/Player.dat_format找到

  这两个是英文版的

  chunk_format就是实体的NBT还有一些方块的NBT

  而player.dat format就是一些关于玩家的NBT

  比如物品的格式等

  如果需要研究某个实体/实体方块的NBT(非玩家)

  对实体,我们可以透过entitydata 指定的实体 {}来得到那个实体的NBT

  比如entitydata @e[c=1,type=!Player] {}

  如果是方块,我们可以透过blockdata 方块的坐标 {}来得到其NBT

  比如blockdata ~ ~-1 ~ {}

  那个输出会有一行"The data tag did not change:",然后就是那些NBT

  当然,在聊天栏看是比较辛苦的,我们可以把这个命令放在命令方块里激活,然后ctrl a 那个输出栏,然后再ctrl c复制那个输出,之后放在一个你觉得方便的文字编辑器那里,比如记事本等

  NBT标签的类型

  数值类

  TAG_Byte 例子:Count:1b

  这个是代表什么呢?这个是用作储存数值用的。它能够储存的数值范围为-128 至 127。这个除了能够储存数值之外,它也能够储存Boolean值(True/False),这个时候它的范围为0 (False)和1 (True)。

  使用的时候需要注意一点,当你用在检测的指令上(比如testfor和scoreboard),数值后需要补上b字来指明它那个数值是Byte

  TAG_Short 例子:Damage:1s

  这个也是储存数值用,数值的范围为-32,768 至 32,767。使用的时候需要注意一点,当你用在检测的指令上(比如testfor和scoreboard),数值后需要补上s字来指明它那个数值是Short

  TAG_Int 例子:Lifetime:1

  这个也是储存数值用,数值的范围为-2,147,483,648 至 2,147,483,647。使用的时候需要注意一点,就是数值后不能补上i字

  TAG_Long 例子:UUIDMost:0l

  这个也是储存数值用,数值的范围为-9,223,372,036,854,775,808 至 9,223,372,036,854,775,807。使用的时候需要注意一点,当你用在检测的指令上(比如testfor和scoreboard),数值后需要补上l字来指明它那个数值是Long

  TAG_Float 例子:HealF:1.0f

  只有这个和Double可以储存小数。其最大值也比long大得多,然而它的精确度会随着数值的大小而变化(绝对值越大,它的精确度就越小)。数值后需要补上f字来指明它那个数值是float

  TAG_Double 例子:Base:1d

  只有这个和Float可以储存小数。其最大值也比long大得多,然而它的精确度会随着数值的大小而变化(绝对值越大,它的精确度就越小)。如果你的数值里有小数点,那么就默认为double,可以不写d字在数值之后,然而如果没有小数点,就需要写d在数值后面以标明是double。当你用在检测的指令上(比如testfor和scoreboard),数值后需要补上d字来指明它那个数值是double

  TAG_Boolean 例子:OnGround:1b

  这个类型比较特别,它的数值只有两个,一是True(1b),二是False(0b)。它可以用两种方式表达同一个数值,可以是True/False和1b/0b。检测的时候也可以用True/False和1b/0b两种方式检测。比如说,TagA:1b和TagA:True是一样的。

  字符

  TAG_String 例子:id:"ArmorStand"

  这个类型可以储存字串,然而要小心,如果字串内有逗号/"号就需要用"把整个字串括住(也有一个例外情况,比如是command:entitydata @e {Fire:20b,Air:20s},这样便不用""括住,因为那个逗号是在另外一个{}里面),比如说"123,456"。如果字串里面需要用到"符号,就必须用""括住整个字串并且中间那个"需要转义。

  如果你需要用到符号,那么也需要把它转义,否则会出错,因为它是用来标明转义的。转义方法为前加上一个

  转义的方法是:每个符号前方要加上一个符号,每个"符号前方也要加上一个符号。所以"转义后会变 成",再转义会变成",再转义就会变成"

  母标签类

  TAG_List 例子:Motion:[0.1d,0.1d,0.1d]

  这个是一个母标签的类型,它的子标签的类型全部都是相同的丶没有标签名称并且会被一个[]括住。例子:Items:[{id:"minecraft:stone",Count:1b},{id:"minecraft:glass",Count:1b}],Items就是一个List类型的NBT,而{id:"minecraft:stone",Count:1b}和{id:"minecraft:glass",Count:1b}就是其子标签(id并不算是其子标签!!!),在这个例子里,其子标签的类型就是Compound。

  这个类型相当特别,你可以检测其中的一个子标签,比如你检测Items:[{id:"minecraft:glass",Count:1b}],它的输出是成功的。然而,当你更改List的子标签时,它会把所有的子标签更新。比如说你用blockdata把那个箱子的NBT更改为Items:[{id:"minecraft:glass",Count:2b}],那个箱子里的石头会被删除。(如果你用entitydata得到他的NBT,你应该会看见类似的东西: TagName:[0:数值1,1:数值2,2:数值3]之类的东西,其实那个0/1/2就是个编号,大可以忽略它,因为你不能只改变某个编号的数值,也不能只探测某个编号的数值)

  TAG_Compound 例子:Riding:{id:"ArmorStand"}

  这个也是一个母标签的类型,其子标签需要用{}括住,并且需要有标签名称。比如Riding:{id:"ArmorStand",CustomName:"AS1",Riding:{id:"ArmorStand",CustomName:"AS2"}}。Compound可以互相堆叠,然而堆叠层数不能超过512。

  Compound和List的最大分别(在NBT里)是List无法透过命令独立变更其中的子标签的数值,而Compound则可以。

  TAG_Int_Array 例子:Colors:[123,456]

  这个看上去和TAG_List相近,然而它们之间的分别挺大的。

  首先,Int_Array只能储存Int,不能储存其他数值

  第二,Int_Array检测的时候是检测整个数值的,而List检测的时候可以只检测某个子标签,比如玩家手上有一个烟花,这个时候玩家的NBT应该是{SelectedItem:{tag:{Fireworks:{Explosions:[{Type:1b,Colors:[7599255,62976]}]}}}}(Colors就是一个Int_Array)

  如果我们只是把Colors:[7599255,62976]换为Colors:[7599255]

  它的结果是不符合的(因为Colors括号里的是其数值而不是其子标签)

分享到:更多

游戏信息

我的世界
我的世界类型:休闲娱乐平台:PC,iOS,安卓电脑版下载
  • 游戏大礼包
  • 手游开测表