第一百三十四章 生物的共通NBT-4
上一章讲到生物的共通NBT的最后一个:
Brain
而这个Brain里面的memories就是存储记忆的地方。记忆有这么几个:
minecraft:meeting_br /oint——这个村民聚会的位置
minecraft:home——这个村民床的位置
minecraft:job_site——这个村民工作的地方(就是这个村民的工作站坐标)
minecraft:last_slebr /t——这个村民已经睡觉多长时间了
minecraft:last_woken——这个村民已经多久没睡觉了
minecraft:last_worked_at_br /oi——这个村民多久没工作了
minecraft:angry_at——这个猪灵的目标
minecraft:admiring_item——这个猪灵端详物品的状态
minecraft:admiring_disabled——这个猪灵拿起物品端详这个技能的冷却状态
minecraft:hunted_recently——这个猪灵追猎这个技能的冷却状态
这些记忆都带有“minecraft:”,说明mod也可以对记忆进行增加。
其中,6项都是村民的,剩下4项都是猪灵的。
现在我们来看第一项记忆:
minecraft:meeting_br /oint——这个村民聚会的位置
这个记忆是个复合标签({}),实际上所有记忆都是复合标签:
{Brain:{memories:{minecraft:meeting_br /oint:{}}}}
里面只有一个标签value(值:复合标签):
{......:{minecraft:meeting_br /oint:{value:{}}}}}
(老套复合标签了啊)
value里有这么几个参数:
br /os(值:列表)——聚会地点的X、Y、Z坐标
dimension(值:字符串)——聚会地点的纬度id
{......:{minecraft:meeting_br /oint:{value:{br /os:[X,Y,Z],dimension:“纬度id“}}}}}
现在我们举个例子,比如这个村民它的聚会场所是在主世界的X=45,Y=77,Z=1862的地方,那么它的这项记忆就将是:
{......:{minecraft:meeting_br /oint:{value:{br /os:[45,77,1862],dimension:“0“}}}}}
是不是很简单?对了,这里的纬度id也就是世界id,主世界的世界id是0,下界是-1,末地是1(好像讲过了哎)。
minecraft:home(这个村民床的位置)的格式和minecraft:meeting_br /oint几乎一样,都是:
{......:{minecraft:home:{value:{br /os:[床的X,床的Y,床的Z],dimension:“床的纬度“}}}}}
比如一个村民的床在下界的X=45,Y=87,Z=106的位置,那么:
{......:{minecraft:home:{value:{br /os:[45,87,106],dimension:“-1“}}}}}
嗯。对哦,村民在下界睡觉床不会爆炸吗?
还真的不会爆炸(奇怪的知识增加了!)。
既然minecraft:home的格式和minecraft:meeting_br /oint几乎一样,而minecraft:job_site(这个村民工作的地方)也是记录着坐标,所以minecraft:job_site实际上格式也和前面两个一样:
{......:{minecraft:home:{value:{br /os:[工作方块X,工作方块Y,工作方块Z],dimension:“工作方块的纬度“}}}}}
举例子就不用举了,都懂。
然鹅接下来这三个就不一样了:
minecraft:last_slebr /t——这个村民已经睡觉多长时间了
minecraft:last_woken——这个村民已经多久没睡觉了
minecraft:last_worked_at_br /oi——这个村民多久没工作了
它们都是存储时间的,所以格式就和之前三个存储坐标的不一样。但既然它们都是存储时间的,所以它们的格式.......
没错!它们三的格式也是完全一样的。比如minecraft:last_slebr /t(这个村民已经睡觉多长时间了)的格式是这样的:
{......:{minecraft:last_slebr /t:{value:时间(单位:刻)}}}}
举个例子,假设这个村民已经睡了2个小时了(村民:?),那么这个村民的这个记忆的值就是:
{......:{minecraft:last_slebr /t:{value:144000}}}}
代表着这个村民已经睡了144000刻了,也就是120分钟,即两小时。
而我们已经知道了minecraft:last_woken(这个村民已经多久没睡觉了)和minecraft:last_worked_at_br /oi(这个村民多久没工作了)格式都和minecraft:last_slebr /t一样,所以:
minecraft:last_woken格式——
{......:{minecraft:last_woken:{value:这个村民没睡觉的时间(单位:刻)}}}}
minecraft:last_worked_at_br /oi格式——
{......:{minecraft:last_worked_at_br /oi:{value:这个村民没工作的时间(单位:刻)}}}}
至于举例子嘛......这么简单就不用举了,况且格式都一样。
接下来就是猪灵了。猪灵一共有4个记忆,即:
minecraft:angry_at——这个猪灵的目标
minecraft:admiring_item——这个猪灵端详物品的状态
minecraft:admiring_disabled——这个猪灵拿起物品端详这个技能的冷却状态
minecraft:hunted_recently——这个猪灵追猎这个技能的冷却状态
这四个标签的内容,都有一个“ttl”标签。这个标签的值是数值,实际作用就是:
这项记忆还有多久消失(单位:刻)
又或者可以说是:
猪灵的技能冷却剩下时间(单位:刻)
当然,具体的作用会根据不同的记忆会出现一些出入。
第一个minecraft:angry_at(这个猪灵的目标),它的值有两个:
value(值:UUID整形数组)
ttl(值:数值)
ttl刚才说过了。这个value存储着UUID,再联系一下“目标”,你想到了什么?
这个value填的就是猪灵的目标实体的UUID!
嗯,没错。现在我们举个例子,假设这个猪灵已经锁定了一个UUID为[I;-478658285,1942176603,-2057916122,-1995913697]的凋零骷髅,而且距离这个猪灵忘记这个凋零骷髅的时间还有1分57秒,那么其这项记忆就是:
{......:{minecraft:angry_at:{value:[I;-478658285,1942176603,-2057916122,-1995913697],ttl:2340}}}}
嗯,除了UUID有点长之外,其他都挺简单的。
然后是minecraft:admiring_item(这个猪灵端详物品的状态)。其值也有两个:
value(值:布尔值)
ttl(值:数值)
这里的value是布尔值,也就是true和false。如果是true,那么就代表着这个猪灵在端详物品。false则不是。
ttl在这里的作用是:端详还剩下的时间(单位:刻)
举个例子,比如一个猪灵它正在端详,且剩下的端详时间还有7秒,那么其这项记忆就是:
{......:{minecraft:angry_at:{value:“true“,ttl:140}}
接着是minecraft:admiring_disabled(这个猪灵拿起物品端详这个技能的冷却状态)。其值仍然有两个:
value(值:布尔值)
ttl(值:数值)
既然是冷却状态,我们就得了解一下“猪灵”其“端详”这个技能的冷却会因为什么而触发。一共有3种触发方式:
1.正在转化成僵尸猪灵
2.受到伤害
3.使用完了”端详”这个技能
当上面3个条件的任意一项达成时,“端详”技能将会进入冷却。同时,该记忆也将会改变。
value在这条记忆里的作用是:
当值为true,代表“端详”技能处于冷却状态。当值为false,代表“端详”技能可以使用。
ttl在这条记忆里的作用是:
“端详”技能的剩余冷却时间(单位:刻)
举个粒子。假设一个猪灵刚刚端详完成,其“端详”技能已经进入冷却状态,冷却时间为8.4s,那么这个记忆就将是:
{......:{minecraft:admiring_disabled:{value:“true“,ttl:168}}
懂了吧?懂了就下一个:minecraft:hunted_recently(这个猪灵追猎这个技能的冷却状态)
和minecraft:admiring_disabled一样,这也是技能的冷却。但这次的技能是“追猎”。
首先,minecraft:hunted_recently仍然有这几个值:
value(值:布尔值)
ttl(值:数值)
然后,“追猎”技能会在出现以下任何一种情况都会冷却:
1.使用完“追猎”技能
最后,这里的value当为true时,就代表着“追猎”技能正在冷却。为false,就是可以正常使用。ttl跟minecraft:admiring_disabled一样,也是技能冷却的剩余时间。
举个栗子:假设一只猪灵刚刚追猎完成,其“追猎”技能已经进入冷却状态,冷却时间为1m24s,那么这个记忆就将是:
{......:{minecraft:hunted_recently:{value:“true“,ttl:1680}}
是不是简洁明了?
所以,这就是原版Brain的全部内容。
太棒了!生物共通NBT终于完了!
......
——生物共通NBT:
包含所有实体共通NBT
Health——生物当前生命值。值:浮点数
Absorbr /tionAmount——生物可抵消攻击的值。值:浮点数
HurtTime——生物已经发红的时间,单位刻。值:整数
HurtByTimestambr /——生物距上次受到伤害的时间值,或是距生成的时间值,单位刻。值:整数
DeathTime——距生物死亡的时间刻数。值:整数
FallFlying——生物是否滑翔。值:布尔值(1 or 0)
Sleebr /ingX——生物正在睡的床X坐标。值:整数
Sleebr /ingY——生物正在睡的床Y坐标。值:整数
Sleebr /ingZ——生物正在睡的床Z坐标。值:整数
Brain——生物的记忆。值:复合标签({})
——memories——值:复合标签({})
Attributes——生物的属性。值:列表([])
——一个属性——值:复合标签({})
————Name——属性名称id。值:字符串
————Base——属性基础值。值:浮点数
————Modifiers——属性修饰符。值:列表([])
——————一个属性修饰符——值:复合标签({})
————————Name——修饰符的名称,可随便。值:字符串
————————Amount——修饰符调整属性基础值的数值。值:浮点数
————————Obr /eration——修饰符对属性修饰符调整的基础算法。值:整数
————————UUID[1.16版本及以上]——修饰符的UUID,用于区分修饰符。值:整形数组([I;1,2,3,4])
————————UUIDMost[1.16以下]——修饰符的UUID高位,用于区分修饰符。值:整数
————————UUIDLeast[1.16以下]——修饰符的UUID低位,用于区分修饰符。值:整数
ActiveEffects——生物所有的状态效果。值:列表([])
——一项状态效果——值:复合标签({})
————状态效果NBT(见第一百三十三章)
HandItems——生物手持的物品。值:列表([])
——主手手持物品——值:复合标签({})
————物品共通NBT(见第一百零八章)
——副手手持物品——值:复合标签({})
————物品共通NBT(见第一百零八章)
ArmorItems——生物穿在身上的物品。值:列表([])
——脚上穿的物品——值:复合标签
————物品共通NBT(见第一百零八章)
——腿上穿的物品——值:复合标签
————物品共通NBT(见第一百零八章)
——胸前穿的物品——值:复合标签
————物品共通NBT(见第一百零八章)
——头上戴的物品——值:复合标签
————物品共通NBT(见第一百零八章)
HandDrobr /Chances——手持物品掉落几率。值:列表([])
——主手物品掉落几率。值:浮点数
——副手物品掉落几率。值:浮点数
ArmorDrobr /Chances——盔甲掉落几率。值:列表([])
——靴子栏物品掉落几率。值:浮点数
——护腿栏物品掉落几率。值:浮点数
——胸甲栏物品掉落几率。值:浮点数
——头盔栏物品掉落几率。值:浮点数
DeathLootTable——生物战利品表。值:字符串
DeathLootTableSeed——生成战利品表的种子。值:整数
CanPickUbr /Loot——生物是否可捡起战利品。值:布尔值(true|false)
NoAI——生物是否没有AI。值:布尔值(true|false)
PersistenceRequired——生物是否不会自然消失。值:布尔值(true|false)
LeftHanded——生物是否渲染时的主手为左手。值:布尔值(true|false)
Leashed——生物是否被拴住。值:布尔值(true|false)
Team——生物要加入的队伍,这实际上不是生物的NBT。值:字符串
Leash——这里说不清楚,具体见第一百三十三章。值:复合标签
——UUID[1.16及以上]——被拴住的生物的UUID。值:整形数组
——UUIDMost[1.16以下]——被拴住的生物的UUID高位。值:整数
——UUIDLeast[1.16以下]——被拴住的生物的UUID低位。值:整数
——X——拴绳的位置的X坐标。值:整数
——Y——拴绳的位置的Y坐标。值:整数
——Z——拴绳的位置的Z坐标。值:整数