前十二章,我们详细地了解了生物的共通NBT以及NBT格式。但别忘了,本卷的名字叫做:
实体与NBT
所以接下来,我们就要回归正题。
——第一节:关于下落的方块这个大类只有一种实体这档事
在第一百二十九章里,我们知道了很多关于实体的东东。比如:下落的方块是个实体。
但有没有人想过这么一个问题:
我在对下落的方块这种实体举例子的时候,为什么举了一个“下落的方块”实体的例子?
深入思考的话,我们就会得出一个神奇的结论:下落的方块这种实体只有一个实体——下落的方块(FallingSand[1.13之前]、falling_block[1.13及之后])
所以这就可以解释你在用kill清除实体时,就不会跳出来“下落的沙子”了,更不会跳出来“沙子”(因为这名字已经被掉落物占了),而是统一“下落的方块”。因为人家变成实体之后就统一成了一个实体。
再深入思考,我们又会得到一个问题:
统一成一个实体后,下落的方块是如何确定自身到底是什么方块的?
为了解决这个问题,我们可以回顾一下第一百零八章到第一百零九章对掉落物的介绍,就会得出一个对掉落物确定自己到底是什么物品的方法的结论:
用NBT存储物品的信息
按理来说,用实验法来研究生物,得出结论后也就差不多了。但我们不是在进行一个生物实验,而是在学习NBT。况且,就算我们这是一本生物书,生物学它本身也是一个:
...→观察并思考→提出问题→收集资料→作出假设→制定实验计划→实施实验并记录→得出结果→研究并思考→提出新的问题→...
所以我们可以研究这个结论,并提出一个新的问题:
为什么掉落物要用NBT来存储物品的信息呢,而不用item_<物品ID>这样子每个物品的掉落物都有一个对应的单独实体?
答案很简单:
①Mojang这个喜欢3的家伙很懒(主要原因)
②如果这样子做的话虽然也能达到目的,但游戏会更大
深入思考,我们还会得出一个震惊的结论:
这样子的话,那么掉落物这个大类也只有一个实体唉:掉落物
实际上还真是这样的,掉落物确实只有一个实体:minecraft:item
(注意!minecraft:item_frame这个实体实际上是物品展示框,而不是掉落物)
得出了这些结论,我们再来看看下落的方块。刚才我们发现下落的方块只有一个实体:下落的方块。这说明了什么?
下落的方块也是使用NBT来存储方块的信息。
这就是上面那个问题的答案。
——第二节:下落的方块的NBT
下落的方块中存储着方块信息的NBT是:
BlockState(复合标签)
意思是:Block(方块)State(状态)
这个复合标签里有两个重要的东西:
Name(字符串):这个正在下落的方块的ID
Properties(复合标签):可选,这个正在下落的方块的方块状态
举个例子。比如,现在这里有一个沙子被炸飞了,那么它的BlockState很有可能是:
{BlockState:{Name:“minecraft:sand“}}
Properties这个先不管,方块状态等我们以后讲到你就立马会了。
我们可以使用/summon minecraft:falling_block(1.11及之后,之前为/summon minecraft:FallingSand)来生成一个下落的方块。按照生成掉落物的经验,我们就可以搞出一些神奇的东西,比如:
/summon minecraft:falling_block ~~~{BlockState:{Name:“minecraft:diamond_block“}}
执行它,你的下半身就会立马被一个钻石块包裹。然后这个钻石块开始下落,接着就消失了!
如果你用循环命令方块来执行,建议你稍微改一下指令:
/summon minecraft:falling_block ~~2 ~{BlockState:{Name:“minecraft:diamond_block“}}
开启!你就会发现你搞出来了一个不断在空中振动(???)的没有碰撞箱(???)的钻石块(???)。