这儿有一只土猪,它的梦想是那颗白菜。
但今天我们并不是要研究这只土猪,而是在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分钟,换算成游戏刻即20×60×20=刻,而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里面。