这儿有一只土猪,它的梦想是那颗白菜。
但今天我们并不是要研究这只土猪,而是在minecraft中的猪。minecraft中可没有白菜。
在生存前期,粮食紧缺,玩家们一般会直接把这只猪杀死;在生存后期,粮食的获取是长期的事情,因此玩家们经常种田,也就有了各种自动化红石机械。
但种田获得的是素食,长期吃素会导致营养不良,所以玩家们还需要一种肉食来源。这时,他们就会另找来一头猪,拉到这只猪旁边,然后喂几根胡萝卜。几秒下来,就多了一只小猪。
这个过程,我们称之为“繁殖”。
在minecraft中,可繁殖的生物不只有猪一种。据“成双成对”成就统计,截至2021年7月6日,minecraft中一共有19种可繁殖的生物,它们是——鸡、牛、哞菇、猪、兔子、羊、海龟、马(已驯服)、驴(已驯服)、骡(已驯服)、羊驼(已驯服)、豹猫、狼(已驯服)、猫(已驯服)、狐狸、熊猫、蜜蜂、疣猪兽、炽足兽。
既然有这么多生物可以繁殖,那么它们的Nbt是否也有共通之处呢?
有的!
看看这只1.12.2版本的猪,在使用了entitydata给它添加了一个have_a_look标签后,我们获取到了它的Nbt数据:
{hurtbytimestamp:0,Attributes:[{base:10.0d,Name:“generic.maxhealth“},{base:0.0d,Name:“generic.knockbackResistance“},{base:0.25d,Name:“generic.movementSpeed“},{base:0.0d,Name:“generic.armor“},{base:0.0d,Name:“generic.armortoughness“},{base:1.0d,Name:“forge.swimSpeed“},{base:16.0d,modifiers:[{UUIdmost:L,UUIdLeast:-L,Amount:0.0d,operation:1,Name:“Random spawnbonus“}],Name:“generic.followRange“}],Invulnerable:0b,FallFlying:0b,ForcedAge:0,portalcooldown:0,AbsorptionAmount:0.0f,Saddle:0b,Falldistance:0.0f,InLove:0,deathtime:0s,handdropchances:[0.085f,0.085f],persistenceRequired:0b,Age:0,motion:[0.0d,-0.0d,0.0d],Leashed:0b,UUIdLeast:-L,health:10.0f,Lefthanded:0b,Air:300s,onGround:1b,dimension:0,Rotation:[267.f,0.0f],Updateblocked:0b,handItems:[{},{}],Armordropchances:[0.085f,0.085f,0.085f,0.085f],UUIdmost:-L,pos:[618.d,4.0d,47.d],have_a_look:1b,Fire:-1s,ArmorItems:[{},{},{},{}],canpickUpLoot:0b,hurttime:0s}
看着很晕是吧?我们简化一下,删去已知的Nbt标签,剩下了这么几个:
{ForcedAge:0,Saddle:0b,InLove:0,Age:0}
其中,除了Saddle以外,其他都是属于“可繁殖的生物共通标签”。
Saddle(布尔值)的作用是确定这猪背上是否放了个鞍,有鞍为1,没鞍为0.
不难发现,在这“可繁殖的生物共通标签”中,有两个Nbt标签(ForcedAge和Age)其标签名中都有单词“age”。age这个单词的意思大家都知道,是年龄的意思,那这两个Nbt标签有啥用呢?
看,那儿有两只猪正在村民种的土豆菜地里晃悠。赶紧过去收割一些成熟的土豆,然后喂给这两只猪吃。很快啊!不到几秒就出现了一只小猪,让我们看看这只可爱的小猪的Nbt吧!
{ForcedAge:0,InLove:0,Age:-}
这只刚生出来的小猪,其Age值为-。在《minecraftwiki:母猪的产后护理》一书中(实际上没有这本书啦),明确的写到:“幼年猪在没有食用任何食物的情况下,需要花费一整天时间长大。可以通过喂食来加快速度,一次喂食加快10%。”
minecraft中的一天为20分钟,换算成游戏刻即20x60x20=刻,而Age的值是-,所以Age的作用是?
Age(Int整形)的功能是表示该生物的年龄,幼年时为负值,并随时间流逝不断增加直到0。当该生物Age值达到0时,判定该生物成年,并停止增加。
幼年猪要长大需要刻,即Age初始值为-。这只小猪的Age值为-,说明它已经20.7秒大了。
那ForcedAge有啥用?
刚刚引用的那段话最后两句讲到喂食可以加快生长速度,让我们试一试。
作者喂给这只小猪两个土豆,Nbt就变成了:
{ForcedAge:4400,Saddle:0b,InLove:0,Age:-}
刚刚花去的时间不到二十秒,这只猪的Age值就增长了4733(236.65秒),ForcedAge值也变成了4400,这说明给小猪喂土豆是可以加快生长速度的,这加快的值被ForcedAge统计了,并且也加到了Age里面。
但一次喂食是加快10%,两次喂食岂不是加快了20%或19%,即4800或4560。但这儿却只加快了4400,稍微有些偏差,这是怎么一回事?
经过作者的多次试验,发现每次喂食并不是一定加快10%,而是有一个小幅度的浮动,所以这本《minecraftwiki:母猪的产后护理》并不一定完全准确。
那InLove又有何用?
作者写着写着,这只小猪长大了。此时作者给了它一个土豆,然后就发现它的Nbt标签变成了:
{ForcedAge:4400,Saddle:0b,InLove:577,Age:0}
“If you hold food in your hand, they follow you around. If you feed them, they enter “love mode“. two animals in love mode = babies.(只要你手上有食物,它们就会跟着你。如果你喂它们,它们就会进入“求爱模式”。两只求爱的动物=下崽。)”——Notch
Notch的这番话中提到了一个“love mode(求爱模式)”,这个求爱模式是在喂食之后进入的,InLove也是在喂食之后变化的。而且,InLove直译是“在爱里”,意思类似“求爱模式”,难不成?
没错,InLove就是Notch文中提到的求爱模式在Nbt标签中的具体表现,这个“求爱模式”时长2分钟,即600游戏刻。进入“求爱模式”后,再次喂食不能将InLove值重置为600。在“求爱模式”中,生物会持续散发红色粒子。当两只进入求爱模式且类型相同的生物相距8格,它们便会靠近,然后的事大家都知道,最终求爱模式结束。
InLove值随时间减少到0时,求爱模式也会结束。
这只进入求爱模式的猪,多了两个我们未曾相识的Nbt标签:
{LovecauseLeast:-L,Lovecausemost:
0L}
唉,这Least,这most,这一长串的Long长整型值——这不就是UUId吗?
没错,这就是UUId,那这UUId是谁的?
是这只猪的爱人的UUId。
?不对啊,这世界的“生物自然生成”已经被关了,猪只有它一个人,那它爱着谁?
作者寻找了一下这个UUId的所有者,结果发现这是个空号。
嘶——细思极恐啊。
现在,我们已经了解了Age、ForcedAge、InLove和LovecauseLeast、Lovecausemost这五个Nbt标签,这些标签就是“可繁殖的生物共通标签”的全部内容。众所周知,1.16版本UUIdLeast和UUIdmost合并了,所以在minecraft Java1.16及以上版本,LovecauseLeast和Lovecausemost被合并成了Lovecause标签(整形数组)。
我们按照minecraft生物一生的发展来对这些标签进行分类,可以分出:
幼年(20min)——Age、ForcedAge
成年——Age:0
单身——InLove
结婚——LovecauseLeast、Lovecausemost(<Java1.16)|Lovecause(≥Java1.16)
生子——???
可以发现,生物繁殖之后所用的Nbt标签我们还不知道,但“可繁殖的生物共通标签”就五个标签,所以生物繁殖之后所用的Nbt就在这五个标签之中。
当然,也可能根本就没有用到。只不过,在下结论前,请最后看一遍《minecraftwiki:母猪的产后护理》,其中有这么一段话:“猪繁殖过后,两只猪都会进入繁殖冷却期,期间通过喂食将无法进入求爱模式。繁殖冷却期长达五分钟,五分钟过后将会自动回到正常期,可以再次进入求爱模式。”
嗯,按mojang的尿性,这五分钟绝对有Nbt标签存着。让我们动手看一看究竟是哪个Nbt存着这繁殖冷却期的剩余时间。
作者又弄出一只猪,让这两只猪繁殖了一下,然后拉开其中一头,仔细看它的Nbt:
{ForcedAge:0,Age:5416,InLove:0,LovecauseLeast:-L,Lovecausemost:L}
哦吼,发现没有!Age的值是5416!我们知道,5分钟换算成游戏刻是5x60x20=6000刻。所以,Age还有一个用处:
当生物与另一只同种生物进行繁殖过程后,Age的值将会变为6000,并随时间减少,为0时停止。Age值减少期间,将是该生物的“繁殖冷却期”。
到这儿,“可繁殖的生物共通标签”才算全部讲完。哦老天爷,终于更了一章啊。
.......
.......
.......
.......
.......
.......
.......
.......
minecraft文言文版本真棒!
.......
.......
.......
.......
.......
.......
we know how to use the tag “Lovecause“,but when we fill the tag from the other kind of mobs' UUId,what will happen?
I experimented,but nothing happen.
.......