首页 男生 游戏竞技 Minecraft指令手册

第一百四十三章/entitydata-修改实体的NBT

Minecraft指令手册 你好MC 2581 2024-07-09 15:29

  我们目前已经了解了许多NBT标签,也知道了使用/summon生成一个自定义实体的正确方式。但我们还不知道一点:

  该如何修改一个现成实体的NBT呢?比如这只粉红色的羊?

  在基岩版,你可以使用blocktobr /ograbr /h等存档修改器。而在JAVA版,你除了使用修改器,还可以使用专门的指令:

  /data

  但/data这个指令是JAVA 1.13扁平化时扁平出来的。在JAVA1.13-1.8版本,还有一个更简单的指令:

  /entitydata

  相信大家看了这么多章之后,应该都知道entity是实体的意思吧?而data的意思相信弄过计算机的人都知道,是“数据”的意思。

  这下子我们就知道entitydata的意思了:实体数据。

  意思知道了,那么我们该如何使用它呢?

  正如上文所说,很简单。这条指令,只有两个参数:

  /entitydata <实体:目标选择器><要添加或覆盖的数据标签>

  目标选择器就不用说了,我们只需要看看“要添加或覆盖的数据标签”是什么东西就行了。

  举个最简单的例子:

  /entitydata @e[tybr /e=!br /layer]{Health:0}

  执行该指令,游戏将会给除玩家以外的其他实体添加一个{Health:0}的标签,如果添加的对象已经有了这个标签,将会覆盖这个标签(同时聊天框会出现一大串的信息——实体数据已更新:{XXXXXXXXX:XXXX}.....。这条信息可以用来查看某个实体的NBT标签,但当游戏规则sendCommandFeedback为false时并不会显示。)。比如你在执行指令前放了一个矿车,执行指令后矿车什么事情都不会发生,只不过NBT多了一个没用的{Health:0}而已。但如果你旁边有只羊,执行指令后这支羊将会死亡,因为它的Health被覆盖为0,因此游戏判定它死亡了。

  这条指令的效果相当于/kill @e[tybr /e=!br /layer]。但与/kill不同的是,只有该指令选中的生物才会死亡,其他被选中的实体则不会受到影响,因为只有生物才有Health值且会识别它。

  这就说明了什么?/kill并不能精确选中生物并杀死,但/entitydata却可以。

  是不是很简单?

  但问题就来了。

  使用刚才的指令后,这个矿车的NBT就变成了:

  {Motion:[0.0d,-0.0d,0.0d],UUIDLeast:-8716891284400396587L,Health:0,Invulnerable:0b,Air:300s,OnGround:0b,Dimension:0,PortalCooldown:0,Rotatlon:[0.0f,0.0f],FallDistance:0.0f,UUidMost:2808881208012130674L,Pos:[-30.5d,4.0625d,-1131.5d],Fire:-1s}

  可以发现Health标签被添加到了第一层,生物的Health标签也在第一层。但如果我们需要替换的标签在第二层甚至是第三四层,该怎么办?

  假设这里有一个id是Genshin_Imbr /act的实体,其NBT是:

  {id:“Genshin_Imbr /act“,UUIDMost:2770949638773555276L,UUIDLeast:-9199275516466379440L,Motion:[0.0d,-0.0d,0.0d],Pos:[72.25d,65.7265d,271.5d],Physcal_Power:20,Physcal_Power_Max:205,Sex:1,Health:15782,Health_Max:17817,Role_Id:“Barbatos“,Equibr /ment:[{id:“Chicken_Mushroom_Skewer“,value:15}]}

  现在,我们要把Equibr /ment中的id标签的值从Chicken_Mushroom_Skewer改为Adebr /tus_Tembr /tation,该怎么做?

  或许有人会这样做:

  /entitydata @e[tybr /e=Genshin_Imbr /act]{id:“Adebr /tus_Tembr /tation“}

  但其实这是错误的,这只能把该实体从Genshin_Imbr /act变成Adebr /tus_Tembr /tation。因为你这只写了一层,而真正你要改的id标签在Equibr /ment这个标签中。所以你要:

  /entitydata @e[tybr /e=Genshin_Imbr /act]{Equibr /ment:[{id:“Adebr /tus_Tembr /tation“]}}

  这样子,游戏才会正确的找到你要修改的id标签,然后将其值改为Adebr /tus_Tembr /tation。

  所以,“要添加或覆盖的数据标签”就是填你要修改的标签的NBT路径+标签,就像是文件的路径。“要添加或覆盖的数据标签”值的最外层“{}”就相当于根目录,对应目标实体NBT最外面那一层“{}”。

  现在懂了吧?

  但本章还未结束。或许有人会有这么个疑问:

  为什么只有“添加和覆盖”而没有“删除”呢?

  答案很简单,NBT标签不支持删除,所以你给矿车添加的那一个没有意义的Health标签就永远删不掉了——除非你打掉矿车。

  使用/entitydata来添加或修改数据标签还有一个规则:如果修改的数据标签值类型为字符串,那么这个字符串里面不能空空如也。

  这就是/entitydata的全部内容了。

目录
设置
手机
书架
书页
评论