天才一秒记住【第一中文网】地址:www.dyzww.cc
我们目前已经了解了许多Nbt标签,也知道了使用\/summon生成一个自定义实体的正确方式。但我们还不知道一点:
该如何修改一个现成实体的Nbt呢?比如这只粉红色的羊?
在基岩版,你可以使用blocktopograph等存档修改器。而在JAVA版,你除了使用修改器,还可以使用专门的指令:
\/data
但\/data这个指令是JAVA 1.13扁平化时扁平出来的。在JAVA1.13-1.8版本,还有一个更简单的指令:
\/entitydata
相信大家看了这么多章之后,应该都知道entity是实体的意思吧?而data的意思相信弄过计算机的人都知道,是“数据”的意思。
这下子我们就知道entitydata的意思了:实体数据。
意思知道了,那么我们该如何使用它呢?
正如上文所说,很简单。这条指令,只有两个参数:
\/entitydata <实体:目标选择器><要添加或覆盖的数据标签>
目标选择器就不用说了,我们只需要看看“要添加或覆盖的数据标签”是什么东西就行了。
举个最简单的例子:
\/entitydata @e[type=!player]{health:0}
执行该指令,游戏将会给除玩家以外的其他实体添加一个{health:0}的标签,如果添加的对象已经有了这个标签,将会覆盖这个标签(同时聊天框会出现一大串的信息——实体数据已更新:{xxxxxxxxx:xxxx}.....。这条信息可以用来查看某个实体的Nbt标签,但当游戏规则sendmandFeedback为false时并不会显示。)。比如你在执行指令前放了一个矿车,执行指令后矿车什么事情都不会发生,只不过Nbt多了一个没用的{health:0}而已。但如果你旁边有只羊,执行指令后这支羊将会死亡,因为它的health被覆盖为0,因此游戏判定它死亡了。
这条指令的效果相当于\/kill @e[type=!player]。但与\/kill不同的是,只有该指令选中的生物才会死亡,其他被选中的实体则不会受到影响,因为只有生物才有health值且会识别它。
这就说明了什么?\/kill并不能精确选中生物并杀死,但\/entitydata却可以。
是不是很简单?
但问题就来了。
使用刚才的指令后,这个矿车的Nbt就变成了:
{motion:[0.0d,-0.0d,0.0d],UUIdLeast:-L,health:0,Invulnerable:0b,Air:300s,onGround:0b,dimension:0,portalcooldown:0,Rotatlon:[0.0f,0.0f],Falldistance:0.0f,UUidmost:L,pos:[-30.5d,4.0625d,-1131.5d],Fire:-1s}
可以发现health标签被添加到了第一层,生物的health标签也在第一层。但如果我们需要替换的标签在第二层甚至是第三四层,该怎么办?
假设这里有一个id是Genshin_Impact的实体,其Nbt是:
{id:“Genshin_Impact“,UUIdmost:L,UUIdLeast:-L,motion:[0.0d,-0.0d,0.0d],pos:[72.2
本章未完,请点击下一章继续阅读!若浏览器显示没有新章节了,请尝试点击右上角↗️或右下角↘️的菜单,退出阅读模式即可,谢谢!