<本站文本内容除另有声明外,转载时均必须注明出处。(详情…中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!Minecraft中文Wiki微博正在更新!或许有兴趣去看看想与其他用户进行编辑上的沟通?社区专页正是为此创建的。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。需要管理员的协助?在管理员告示板留言也许可以帮到您。>

命令/data

出自Minecraft Wiki
前往: 導覽搜尋
Information icon.svg
此特性為Java版獨有。

data
限制條件

管理員

加入版本

1.1317w45a

/data命令允許執行者獲取、合併、修改或是移除方塊實體指令容器NBT數據

語法[編輯 | 編輯原始碼]

/data有四個子命令(getmergemodifyremove),子命令使用的目標/來源是block <目标方块坐标>entity <目标>storage <目标>

data get block <目标方块坐标> [<路径>] [<倍率>]
data get entity <目标实体> [<路径>] [<倍率>]
data get storage <目标> [<路径>] [<倍率>]
data merge block <目标方块坐标> <nbt>
data merge entity <目标实体> <nbt>
data merge storage <目标> <nbt>
data modify block <目标方块坐标> <目标路径> (append|insert <索引>|merge|prepend|set) from block <来源方块坐标> <来源路径>
data modify block <目标方块坐标> <目标路径> (append|insert <索引>|merge|prepend|set) from entity <来源实体> <来源路径>
data modify block <目标方块坐标> <目标路径> (append|insert <索引>|merge|prepend|set) from storage <来源> <来源路径>
data modify block <目标方块坐标> <目标路径> (append|insert <索引>|merge|prepend|set) value <nbt>
data modify entity <目标实体> <目标路径> (append|insert <索引>|merge|prepend|set) from block <来源方块坐标> <来源路径>
data modify entity <目标实体> <目标路径> (append|insert <索引>|merge|prepend|set) from entity <来源实体> <来源路径>
data modify entity <目标实体> <目标路径> (append|insert <索引>|merge|prepend|set) value <>
data modify storage <目标储存> <目标路径> (append|insert <索引>|merge|prepend|set) from block <来源方块坐标> <来源路径>
data modify storage <目标储存> <目标路径> (append|insert <索引>|merge|prepend|set) from entity <来源> <来源路径>
data modify storage <目标储存> <目标路径> (append|insert <索引>|merge|prepend|set) from storage <来源> <来源路径>
data modify storage <目标储存> <目标路径> (append|insert <索引>|merge|prepend|set) value <>
data remove block <目标方块坐标> <目标路径>
data remove entity <目标实体> <路径>
data remove storage <目标储存> <目标路径>
以多種方式展示語法

參數[編輯 | 編輯原始碼]

(block <目标方块坐标>|entity <目标实体>|storage <目标存储>):
  • <目标方块坐标>—指定需要改變數據標籤的方塊的<x> <y> <z>坐標。
  • <目标实体>—指定需要改變數據標籤的實體的有效UUID或目標選擇器
  • <target>—指定需要改變數據標籤的存儲的命名空間ID
get ... [<路径>] [<倍率>]:
  • <路径>—指定檢索特定NBT的合法的路徑名。
  • <倍率>—縮放獲得的NBT具體數值。
merge ... <nbt>:
  • <nbt>—複合標籤。最簡單的合法輸入是{}
modify ... <目标路径> (append|insert <索引>|merge|prepend|set):
  • <目标路径>—指定修改特定NBT的合法的路徑名。
  • <索引>—指定列表中一個元素的索引,為一個有效整數。
... from (block <来源方块坐标>|entity <来源实体>|storage <来源储存>) <来源路径>:
  • <来源方块坐标>—指定需要使用其數據標籤的方塊的<x> <y> <z>坐標。
  • <来源实体>—指定需要使用其數據標籤的實體的有效玩家名、UUID或目標選擇器
  • <来源储存>—指定需要使用其數據標籤的存儲的命名空間ID
  • <来源路径>—指定使用特定NBT的合法的路徑名。
... value <>:
  • <>—一般是修改目標NBT要使用的值。必須符合數據類型。
remove ... <路径>:
  • <路径>—指定移除特定NBT的合法的路徑名,見§NBT路徑

效果[編輯 | 編輯原始碼]

當參數沒有被正確指定時失敗。(若目標實體的選擇器沒有規定實體數量為1,則是命令語法錯誤而非執行失敗。)

若成功:

/data get
/data get ...
返回目標方塊或實體的NBT數據,並且帶有語法高亮。
若適用,成功時的返回值為1。
/data get ... <路径>
返回目標方塊或實體的一部分NBT數據,不帶有語法高亮。
返回值取決於獲取的NBT元素的類型。
  • 獲取一個數字,則返回值為數字。
  • 獲取一個字符串,則返回該字符串的長度。
  • 獲取一個列表會返回該列表中元素的個數。
  • 獲取一個複合標籤會返回該標籤下一級子元素(不包括子元素的子元素)的數量。
/data get ... <路径> <倍率>
返回該標籤的值並乘以<倍率>。
此時<路徑>需要指向一個數字類型的標籤,即該標籤的類型可以為TAG_byte,TAG_short,TAG_int,TAG_long,TAG_float或TAG_double。
/data merge
將目標方塊或實體的特定NBT數據與指定的<nbt>數據合併。
若適用,成功時的返回值為1。
/data modify
append
在指定列表的末尾增加一個元素。
<目标路径>必須指定一個TAG_list類型的元素,源數據應該適用於作為列表中的一個元素。
insert <索引>
將數據以第<索引>個元素插入指定列表,其後的元素的編號自動加一。
<目标路径>必須指定一個TAG_list類型的元素,源數據應該適用於作為列表中的一個元素。
merge
將源數據與指定的對象合併。
<目标路径>必須指定一個TAG_list類型的元素,源數據必須是TAG_compound類型。
prepend
在指定列表的開頭增加一個元素。
<目标路径>必須指定一個TAG_list類型的元素,源數據應該適用於作為列表中的一個元素。
set
<目标路径>指定的標籤設定為源數據。
/data remove
移除指定方塊或實體的<路徑>指向的NBT數據。無法移除玩家的NBT數據。
若適用,成功時的返回值為1。

NBT路徑[編輯 | 編輯原始碼]

NBT路徑是用於從一個NBT數據樹中指定特定元素集合的標籤。路徑通常以node.…….node的形式存在。此處node可以聲明從先前的標籤中選擇什么子元素。

節點[編輯 | 編輯原始碼]

一共有6種節點可用。

標籤集合從僅有的一個元素(即為根標籤)開始,並隨路徑上的節點進行更改。NBT路徑會在最後一個標籤集合生效。

名稱 格式 描述 選擇結果 示例 示例描述
帶有對象的根節點 {标签}標籤是複合標籤內的內容。 僅在與給定的標籤匹配時才選擇起始標籤。
僅適用於路徑中的第一個元素。
起始標籤。若失敗則為空。 {Invisible:1b} 如果根標籤含有值為1 Invisible,則選擇根標籤。
命名節點 名称名稱是純文本或轉義後的字符串。 在上個標籤中選擇名為名稱的子標籤。 A collection of tags; no more elements than the previous tag collection. May be nothing. VillagerData 選擇子標籤VillagerData
"A cool name[]" 選擇子標籤A cool name[]
帶有對象的命名節點 名称{标签}名稱是純文本或轉義後的字符串,標籤是複合標籤內的內容。 在上個標籤中選擇在名稱中匹配給定複合標籤的子標籤。 A collection of tags; no more elements than the previous tag collection. May be nothing. VillagerData{profession:"minecraft:nitwit"} 如果只有 VillagerData含有值為minecraft:nitwit profession標籤,則選擇標籤 VillagerData
已索引列表節點 名称[索引]名稱是純文本或轉義後的字符串,索引是一個整數。 在上個標籤中選擇子列表名稱中位於索引(若索引為負數,則為列表元素数 + 索引)的元素。 A collection of tags; no more elements than the previous tag collection. May be nothing. Pos[0] 在子列表 Pos中選擇第一個子標籤。
Inventory[-1] 在子列表 Inventory中選擇最後一個子標籤。
列表節點 名称[] 在上個標籤中選擇子列表名稱中的所有元素。 A collection of tags; may have more elements than the previous tag collection. May be nothing. ActiveEffects[] 選擇子標籤 ActiveEffects中的所有元素。
帶有對象的標籤節點 名称[{标签}]名稱是純文本或轉義後的字符串,標籤是複合標籤內的內容。 在上個標籤中選擇子列表名稱中匹配給定複合標籤的元素。 A collection of tags; may have more elements than the previous tag collection. May be nothing. Inventory[{Count:25b}] 在標籤 Inventory中選擇含有值為25 Count標籤的元素。

在路徑中使用.字符分開各個節點。節點可以任意混合及匹配,除了帶有對象的根節點:若其存在,則必須是路徑中的第一個節點。

名稱轉義[編輯 | 編輯原始碼]

一個路徑的合法的字符集似乎是所有的非空字符,只要所有的未閉合的方括號和花括號([{)被正確閉合,並位於每一項的結尾即可。(即其後只有一個句點或路徑的結尾—. )。也就是說,定義一個數據標籤的合理的字符集a-z A-Z 0-9 _ . [ ] { }(用正則表達式表示就是[][}{a-zA-Z0-9.]*)。

如果一個鍵的名字中存在需要轉義的字符,可以用雙引號括起來。

示例[編輯 | 編輯原始碼]

Foo bar示例[編輯 | 編輯原始碼]

/data get entity @p foo.bar[0]."A [crazy name]!".baz

為了演示目的,上述NBT路徑是隨意編寫出來的。

  • foo — 選取名為「foo」的頂級元素。
  • foo.bar — 選取foo中名為「bar」子元素。現在假設foo是一個列表。
  • foo.bar[0] — 選取列表「bar」的首個元素。
  • foo.bar[-1] — 選取列表「bar」的最後一個元素。
  • foo.bar[0]."A [crazy name]!" — 選取上述首個元素中名為「A [crazy name]!」的子元素。
  • foo.bar[0]."A [crazy name]!".baz — 選取上述「A [crazy name]!」元素中名為「baz」的子元素。
  • foo.bar[] — 選取列表「bar」的全部元素。
  • foo.bar[].baz — 選取列表「bar」中所有名為「baz」的子元素。
  • foo.bar[{baz:5b}] — 選取列表「bar」中「baz」標籤被設為5b的所有元素。
  • {} — 選取目標的根標籤。
  • {foo:4.0f} — 如果「foo」標籤被設為4.0f,那麼選取目標的根標籤。
  • foo{bar:"baz"} — 如果「foo」標籤的子標籤「bar」的值為"baz",則選取「foo」。
  • foo{bar:"baz"}.bar — 如果「foo」標籤中「bar」的值為"baz",則選取「bar」。

箱中書[編輯 | 編輯原始碼]

/data get block ~ ~ ~ Items[1].tag.pages[3]

某玩家寫了一本書,將其放在了腳下的箱子裡。她要一步步嘗試拆解這條命令,最終運行上述命令。

容器[編輯 | 編輯原始碼]

參見:指令容器格式

使用NBT數據保存的指令容器是訪問或儲存NBT數據的有效方法,且其無需通過方塊實體實體讀取或寫入NBT數據。

每個指令容器都保存著通用的鍵值對。指令容器使用命名空間ID進行區分。

/data get/data modify可以讀取容器,而/data merge/data modify/data remove/execute store可以寫入容器。

指令容器也可以通過原始JSON文本讀取。

歷史[編輯 | 編輯原始碼]

Java版
1.1317w45b加入了/data
18w03a帶有路徑的/data get現在適用於非數字的值。
1.1418w43a加入了/data modify
1.1519w38a加入了指令容器
加入了storage <命名空间ID>作為來源或目標。
19w39a為NBT storage加入了聊天組件