第189章 ,/.

Minecraft指令手册 你好MC 2465 字 17小时前

我们都知道实体有实体共通标签,实体中的弹射物有弹射物共通标签。箭属于弹射物,它像矿车一样,拥有许多种类(额......实际上,除了光灵箭以外,其他的箭只是药水效果不同而已)。既然矿车拥有自己的共通标签,那箭呢?

Let us open Minecraft and have a look.

我们打开1.12.2版本,一进游戏就先往天空射一发,然后在箭落地之前快速敲下“/entitydata @e[type=arrow]{have_a_look:1b}”,然后这支箭的NBT标签就多了一个:

have_a_look:1b

的标签,同时我们也获得了这支箭的NBT标签:

{Motion:[-0.0d,1.d,-0.01 d],damage:2.0d,shake:0b,xTile:-1,UUIDLeast:-85 L,inGround:0b,pickup:2b,Invulnerable:0b,Air:300s,OnGround:0b,Dimension:0,PortalCooldown:0,Rotation:[-135.f,89.0f],life:0s,FallDistance:0.0f,inTile:“minecraft:air“,UUIDMost:-L,inData:0b,crit:1b,Pos:[651.d,57.0d,41.00d],have _a_ look:1b,zTile:-1,Fire:0s,yTile:-1}

看着有点晕是吧?好,那我们归纳一下。

在这串NBT内,除了我们的have_a_look标签,其他的标签一共有24个。分类一下,可以得到:

Tags mon to all entities={Motion,UUIDLeast,Invulnerable,Air,OnGround,Dimension,PortalCooldown,Rotation,FallDistance,UUIDMost,inData,crit,Pos,Fire}

Unknow tags={damage,shake,inGround,pickup,inTile,inData,crit,yTile,zTile,xTile}

这些标签中一共有10个我们还不知道是个啥,那今天我们就来仔细研究研究。

“damage”这个单词是“损坏”的意思,可作为名词或动词。但实际上按照这个标签的用途来说,它在这应该是个使动用法的谓语动词(????):使......损坏。再看看上面这串NBT,它的值是“2.0d”,最后的这个“d”,说明damage的值是双精度浮点数。

这标签的用途到底是什么?我们来个反向思维,damage的主语在这边应该是箭,即:

Arrows damage ......(箭使.......损坏了)

箭会使什么东西损坏?肯定是射中的实体啦!所以damage的作用就是:

设定箭将造成的伤害。

上面NBT中damage的值是2.0d,就代表着这个箭射中实体将造成2滴血(1颗心)的伤害。由于是双精度浮点数的值,所以这不一定是个整数。这个值会随着发射该箭的武器所有的力量附魔等级而变化,具体是力量附魔每高一级,就会增加0.5的值。假设你用一个附魔了级力量的弓发射这支箭,那么该值将会是:

.0d(×0.5+2.0)

等等,实际上还要再加一个0.5,因为只要一把弓附魔了力量,不管是多少级,都会额外加上0.5,然后再加上(0.5×力量等级)。所以,实际上的值应该是:

.5d

实际上箭造成的伤害不会那么低。箭的伤害还有被箭的速度影响,具体公式如下:

V箭×damage+暴击伤害=真实伤害

但还有一些情况伤害是个定值,如发射器射出的箭伤害一定是3滴血。

damage是这样,那接下来的shake又是何物?

shake的意思是“摇”,这个比较难猜,就直接上答案:

当箭击中方块时,shake将会设定为7(单位为游戏刻)。在shake还未降为0时,就是箭的“抖动状态”,玩家此时不能捡起箭,需待shake为0时,方可捡起。

上面NBT中的shake值为0b,b就说明这是字节型数值。这个0,说明这支箭可能还在飞行,也可能已经落地超过0.35秒了。

那该如何判断一支箭是否落地了呢?

ground的意思是“地面”,作为动词时有“着陆”的意思。上面,我们归纳出的第三个我们还不知道是干啥的NBT标签是“inGround”。in the ground是一个短语,和on the ground意思差不多,都是“在地面”的意思,只不过前者更注重于强调“接触”。

小主,

那“inGround”的作用大家应该猜到了吧?即:

箭是否接触地面。

上面的NBT标签中,inGround的值是:

0b

说明inGround的数值类型为Byte(字节型),同时这个0(false)也说明了这支箭还在飞。如果这里的值不是0,而是1(true),那就是接触地面了。

当一支箭接触到地面,就代表玩家可以捡起它。但,众所周知,小白射出的箭玩家是不能白嫖的,你知道这是为什么吗?