第143章生物的共通NBT-1
在第一百一十二章到一百一十三章这两章里,我详细地介绍了实体的通用nbt,或者说是实体的基础nbt。在此基础上,mojang又添加了一些新的nbt,这些新的nbt加上原来的实体nbt,就变成了:
生物的共通nbt
生物的共通nbt的内容相较于实体基础nbt增加了很多,以至于要用更多的篇幅去讲述它。当然这些并不一定要背下来,稍微了解个大概,需要用的时候过来看就行了。有时候用着用着说不定就记下来了呢!(当然,荒废一段时间还是会还回去的)
那么这些共通的nbt到底是什么呢?
我们知道,一个生物,最基础的就是血量,所以共通nbt自然而然就有血量:
health(值:数值)
这个health就是生物的血量值。但如果你玩过游戏,应该就会知道一个生物的血量至少要有两个变量:
1.当前的血量
2.血量最大值
而这个health就是指当前的血量,比如现在有一只猪它有1滴血,它的nbt就是:
{health:1}
但实际上,很多时候这个health并不是个整数,而是个小数(准确的来说是“浮点数”)。比如你徒手去攻击一位全是钻石套的大佬,你别看它的心数没变,就认为你的攻击没起到作用,实际上是因为伤害过小被约没了而已,因为这个大佬在受伤后的的health是:
{health:19.927367235714243}
你给这位大佬造成了0.072632764285757滴血的伤害,相当于这位大佬血量的3.631638214288‰
嗯,确实够小的。
而有时候,health也可以达到负数,比如你一击就秒了对方,那么对方在临终前的血量就是:
{health:-623.5}
嗯,这伤害都够同时秒末影龙和一只java版的凋零了。
而如果这个health的值超过了所允许的最大值,比如你通过修改器把自己的血量修改成了2147483647会怎么样?
答案是你进入游戏后就会拥有2147483647滴血,只不过这并没有什么卵用,因为当你遭受到了伤害,就算是一点点,游戏也会:
本次攻击共造成了0.00635滴血的伤害,正在扣除中
我靠,这家伙的血量怎么超过了这个生物属性里的generic.maxhealth*数值!
(*关于generic.maxhealth早在第一百零五章时就讲到了,当时就已经讲到了生物的属性,建议忘记的同学赶紧回去复习一下)
不行,这家伙绝对开挂了!必须要干点什么。
也不知道这家伙在修改之前的生命值是多少。算了,直接改成允许的最大值吧!
——health的值从2147483647变成了20
——health的值从20变成了19.99365
恭喜你,你的血量一夜回到了解放前!
所以说以后改血量的时候最好先把最大值改了,不然改个毛线。
上面说过,要弄血量至少需要两个变量。但mc作为一个十多年还在焕发活力的老游戏,只有两个血量的变量,未免有些奇怪。所以mc不只两个血量变量,而是还有:
absorptionamount(值:数值)
(哎作者,最大值还没讲呢!)
呃,其实早就讲过了,最大值其实就是一个属性,在第一百零五章时就讲过了。
absorptionamount的作用是指通过伤害吸收效果所获得的额外生命值,就是那个吃了金苹果生命值多了的那个黄色小心心。
为什么mojang要单独添加这个属性呢?
因为minecraft还有一个和伤害吸收作用很相似的效果:生命提升
但这只是表面相似,实际上生命提升是直接提升generic.maxhealth生命最大值,所以显示出来的是红心,而且掉了还可以回。伤害吸收就不一样了,那黄色生命是一次性的,生命最大值还是最大值,提升的实际上并不是生命,而是添加了类似于盾牌的效果,只不过抵挡的生命值是可以直观显示的。
所以,absorptionamount这个属性的作用是指能抵消的伤害量,并不是指提升的血量。
比如:
{health:20,absorptionamount:4}
这样子显示成心的话将会是10颗红心+2颗黄心。
.......一个并不华丽的分割线......
“......看,红队那名玩家刚刚挖了蓝队的床,蓝队的那些成员都围在那红队的旁边。可以看到有一名胆小的蓝队跑了,虽然这看起来有些背叛其他人,但接下来那名红队玩家以一挡五,使用了单身起码15年的手速迅速地先干掉两名离他最近的蓝队,将其打下虚空。剩下那3名蓝队竟然没有溃逃,而是团结在了一起,重新像那红队发起进攻。红队那名玩家看动作应该是打算先虚张声势一下,趁蓝队恍惚间逃走,但没想到蓝队反应速度之快,将其打个措手不及,死亡......”
相信你一定玩过起床战争,就算没玩过也起码干过pvp或pve。在攻击敌方时,敌方受到攻击都会发红,这点在羊身上特别明显,一白一红的强烈反差述说着那羊的痛苦,以及引出了一个新的问题:
这个发红的时间是否有跟生物本身的nbt有关?
确实有关。
在生物的共通nbt里,有这么一个标签:
hurttime
这个英文简直是太简单了,按照现在的神童标准出生不到一分钟就可以翻译了:
疼痛时间