Minecraft Wiki

除另有声明,转载时均必须注明出处若簡繁轉換出錯,請以遊戲內為準请勇于扩充与修正内容有兴趣逛逛我们的微博沟通交流,欢迎到社区专页需要协助,请在告示板留言

了解更多

Minecraft Wiki
注册
Advertisement
Information icon
此特性为Java版独有。

data
需要的权限等级

2

限制条件

/data命令允许执行者获取、合并、修改或是移除方块实体命令存储NBT数据

语法[]

/data有四个子命令(getmergemodifyremove)。

data ...
... get (block <targetPos>|entity <target>|storage <target>) [<path>] [<scale>]
获取指定NBT的值。
... merge (block <targetPos>|entity <target>|storage <target>) <nbt>
将指定NBT与<nbt>合并。
... modify (block <targetPos>|entity <target>|storage <target>) <targetPath> ...
修改指定NBT ...
... append ...
...在列表最后插入一个值...
... insert <index> ...
...在列表指定位置插入一个值...
... merge ...
...将指定的复合NBT与另一个值合并...
... prepend ...
...在列表最前面插入一个值...
... set ...
...将NBT覆盖为新的值...
... from (block <sourcePos>|entity <source>|storage <source>) [<sourcePath>]
...使用特定方块、实体或存储的指定NBT。
... string (block <sourcePos>|entity <source>|storage <source>) [<sourcePath>] [<start>] [<end>]
...使用特定方块、实体或存储的指定NBT中的子字符串。
... value <value>
...使用<value>
... remove (block <targetPos>|entity <target>|storage <target>) <path>
删除指定NBT。
以多种方式展示语法

参数[]

<targetPos>block_pos

指定需要改变NBT标签的方块的坐标。
必须为方块坐标,包括<X>、<Y>和<Z>,每个值都必须是整数或者含有波浪号与脱字号标记

<target>entity(仅entity <target>模式)

指定需要改变NBT标签的实体。
必须为玩家名、目标选择器或UUID。且目标选择器只允许1个实体。

<target>resource_location(仅storage <target>模式)

指定需要改变NBT标签的存储。
必须为命名空间ID

<path>nbt_path

指定NBT的路径。
必须为NBT路径

<scale>double

NBT具体数值的缩放倍率。
必须为双精度浮点数

<nbt>nbt_compound_tag

指定要合并的复合标签。
必须为SNBT格式的复合类型NBT

<targetPath>nbt_path

指定的NBT的合法路径。
必须为NBT路径

<index>integer

指定一个列表中的元素位置。
必须为32位整型数值。且必须在-2147483648和2147483647(含)之间。

<sourcePos>block_pos

需要使用其NBT标签的方块坐标。
必须为方块坐标,包括<X>、<Y>和<Z>,每个值都必须是整数或者含有波浪号与脱字号标记

<source>entity(仅entity <source>模式)

需要使用其NBT标签的实体。
必须为玩家名、目标选择器或UUID。且目标选择器只允许1个实体。

<source>resource_location(仅storage <source>模式)

需要使用其NBT标签的存储。
必须为命名空间ID

<sourcePath>nbt_path

使用NBT的合法路径名。
必须为NBT路径

<start>integer

提取子字符串时需要从源字符串中包含的首个字符的索引值(从0开始)。
必须为32位整型数值。且必须在0和2147483647(含)之间。

<end>

提取子字符串时需要从源字符串中排除的首个字符的索引值(从0开始)。
必须为32位整型数值。且必须在0和2147483647(含)之间。

<value>nbt_tag

修改目标NBT要使用的值。必须符合数据类型。
必须为SNBT格式的任意类型NBT

效果[]

命令触发条件Java版
任意参数不正确 无法解析
<targetPos>位于世界外或未被加载 执行失败
位于<targetPos>的方块不是方块实体
<target>无法解析为单个实体(指定的玩家必须在线)
/data get ...获取到了多个标签
/data get ... <path><path>不存在
/data get ... <path> <scale>指定的不是数字类标签
/data merge ...
/data remove ...
/data modify ...
未更改任何NBT
尝试更改玩家的NBT
/data remove ...
/data modify ... set ...
<path>指定了根标签
/data modify ... (from|string) block ...<sourcePos>位于世界外或未被加载
位于<sourcePos>的方块不是方块实体
/data modify ... (from|string) entity ...<source>无法解析为单个实体(指定的玩家必须在线)
/data modify ... (from|string) ... <sourcePath><sourcePath>不存在
/data modify ... string ... <sourcePath> <start> <end><sourcePath>的值不是字符串且无法转换为字符串
<start><end>超出范围(0 ~ 231-1)
<start>大于<end>
<end>超出源字符串最大索引值
/data modify ... append ...
/data modify ... insert <index> ...
/data modify ... prepend ...
指定的标签不是数组或列表
源数据的类型不适用于列表
/data modify ... insert <index> ...指定的索引无效
/data modify ... merge ...指定的NBT不是复合标签
来源NBT不是复合标签
任意执行成功时读取、合并、修改或删除指定NBT。
详见下:

若成功:

/data get
/data get ...
返回目标方块或实体的NBT数据,并且带有语法高亮。
若适用,成功时的返回值为1。
/data get ... <path>
返回目标方块或实体的一部分NBT数据,也带有语法高亮。
返回值取决于获取的NBT元素的类型。
  • 获取一个数字,则返回值为数字。
  • 获取一个字符串,则返回该字符串的长度。
  • 获取一个列表会返回该列表中元素的个数。
  • 获取一个复合标签会返回该标签下一级子元素(不包括子元素的子元素)的数量。
/data get ... <path> <scale>
返回该标签的值并乘以<scale>
此时<path>需要指向一个数字类型的标签,即该标签的类型可以为TAG_byteTAG_shortTAG_intTAG_longTAG_floatTAG_double
/data merge
将目标方块或实体的特定NBT数据与指定的<nbt>数据合并。
/data modify
append
在指定列表的末尾增加一个元素。
<targetPath>必须指定一个TAG_list类型的元素,源数据应该适用于作为列表中的一个元素。
insert <index>
将数据以第<index>个元素插入指定列表,其后的元素的编号自动加一。
<targetPath>必须指定一个TAG_list类型的元素,源数据应该适用于作为列表中的一个元素。
merge
将源数据与指定的对象合并。
<targetPath>必须指定一个TAG_compound类型的元素,源数据必须是TAG_compound类型。
prepend
在指定列表的开头增加一个元素。
<targetPath>必须指定一个TAG_list类型的元素,源数据应该适用于作为列表中的一个元素。
set
<targetPath>指定的标签设定为源数据。
若适用,成功时的返回值为1。
/data remove
移除指定方块或实体的<path>指向的NBT数据。无法移除玩家的NBT数据。
若适用,成功时的返回值为1。

输出[]

命令版本条件成功次数/execute store success .../execute store result ...
任意Java版执行失败000
/data get ...执行成功111
/data get ... <path>取得数字类标签11向下取整后取得的值[1]
取得列表或数组标签11此列表或数组含有的元素数量
取得字符串标签11字符串的长度
取得复合标签11此复合标签含有的一级子标签的数量
/data get ... <path> <scale>执行成功11取得的值乘以<scale>后向下取整[2]
/data merge ...执行成功111
/data remove ...执行成功111
/data modify ... append ...
/data modify ... insert <index> ...
/data modify ... prepend ...
执行成功11被加入新元素的列表或数组的数量
/data modify ... set ...执行成功11成功更改的目标标签的数量
/data modify ... merge ...执行成功11成功更改的目标复合标签的数量

NBT路径[]

主条目:NBT路径格式

存储[]

使用NBT数据保存的命令存储是访问或储存NBT数据的有效方法,且其无需通过方块实体实体读取或写入NBT数据。

每个命令存储都保存着通用的键值对。命令存储使用命名空间ID进行区分。

/data get/data modify可以读取存储,而/data merge/data modify/data remove/execute store可以写入存储。

命令存储也可以通过原始JSON文本读取。

示例[]

  • 获取执行者的饱和度:
    /data get entity @s foodSaturationLevel
    
  • 使10格内最近的物品无法被玩家捡起:
    /data modify entity @e[type=item,distance=..10,limit=1,sort=nearest] PickupDelay set value -1
    
  • 获取随机物品的Y轴位置:
    /data get entity @e[type=item,limit=1,sort=random] Pos[1]
    
  • 获取最近玩家快捷栏第一格物品的命名空间ID
    /data get entity @p Inventory[{Slot:0b}].id
    
  • 将距离坐标(0, 64, 0)最近的海豚的护甲属性设置为20:
    /data modify entity @e[x=0,y=64,z=0,type=dolphin,limit=1] Attributes[{Name:"minecraft:generic.armor"}].Base set value 20
    
  • 将位于(1, 64, 1)处容器内的第一个物品设置为钻石(保留原有的其他NBT):
    /data modify block 1 64 1 Items[0].id set value "minecraft:diamond_block"
    
  • 将最近的僵尸副手物品的掉落概率调整为80%,主手物品的掉落概率调整为0%:
    /data merge entity @e[type=zombie,limit=1,sort=nearest] {HandDropChances: [0f, 0.8f]}
    

历史[]

Java版
1.1317w45b加入了/data
18w03a带有路径的/data get现在适用于非数字的值。
1.1418w43a加入了/data modify
1.1519w38a加入了命令存储
加入了storage <命名空间ID>作为来源或目标。
19w39a为NBT storage加入了聊天组件
1.19.423w03a加入了string数据源。

注释[]

  1. double n = (double)value;
    int output = n < (int)n ? (int)n - 1 :(int)n;
  2. double n = (double)value * scale;
    int output = n < (int)n ? (int)n - 1 :(int)n;

语言

Advertisement