利用上述原理,突然想到一个问题。一个正在睡觉的村民,若在躺下的时候睡在了船上或者是矿车中,它可以持续睡觉的状态,并且被矿车运送走;甚至是曾经频繁出现过的尸首分离。
那是否意味着,一个村民可以在睡觉的时候,通过修改“SleepingX,SleepingY,SleepingZ”的值,来达不在床上也可以睡觉的目的呢?
我们以Creeper为例,通过命令方块来修改“苦力怕”的NBT标签,看看是否可以让怪物也躺在床上。
- 指令一:用命令方块修改已存在生物的NBT;/data merge entity @e[type=creeper,limit=1] {SleepingX:31,SleepingY:56,SleepingZ:11,NoAI:1}
- 指令二:用指令直接生成一只睡觉的生物;/summon minecraft:zombie ~ ~ ~ {SleepingX:38,SleepingY:56,SleepingZ:3,NoAI:1};
- 注:坐标处一定要有一张床,且为床头的位置;
仅一条指令,就可以跟苦力怕睡觉觉了。NBT标签当中的Sleeping坐标检测到了床的坐标,让苦力怕也成为了一只可以睡觉的生物。并且它在睡觉的时候,拥有和村民相同的“无敌”特性。(例如不能被攻击,不能岩浆灼烧等等)
此时,我们再执行“/tp @e[type=minecraft:creeper,nbt={NoAI:1b}] 31 56 7”就可以让躺下的苦力怕以睡觉的姿势,离开床。
似乎这就是1.14下村民总是出现“睡觉BUG”的真正原因。倘若Mojang给NBT标签中的Sleeping坐标和床的坐标一个范围值判定,也许就不会出现这种所谓的“特性”。
你选谁给你“暖被窝”?