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

指令/data

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

管理員

加入版本

1.1317w45a

允許玩家獲取、修改、合併或是移除實體方塊數據標籤。其中,修改數據標籤可以是將一個標籤的值設為和另一個方塊或實體的某個標籤的值相同,或者在一個列表中插入值,或者直接修改為一個具體的數值。

語法

/data有四個子指令(getmergemodifyremove),每個子指令提及的目標或源都是block <目标方块坐标>entity <目标>

data get block <目标方块坐标> [<路径>] [<倍率>]
data get entity <目标实体> [<路径>] [<倍率>]
data merge block <目标方块坐标> <nbt>
data merge entity <目标实体> <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) 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 remove block <目标方块坐标> <目标路径>
data remove entity <目标实体> <路径>
語法樹狀圖
參數
(block <目标方块坐标>|entity <目标实体>):
  • <目标方块坐标>—指定需要獲取、修改、合併或移除數據標籤的方塊的<x> <y> <z>坐標。
  • <目标实体>—指定需要獲取、修改、合併或移除數據標籤的目標實體,可以是一個合法的UUID或目標選擇器
get . . . [<路径>] [<倍率>]:
  • <路径>—指定檢索特定NBT的合法的路徑名。
  • <倍率>—縮放獲得的NBT具體數值。
merge . . . <nbt>:
  • <nbt>—Compound標籤。最簡單的合法輸入是{}
modify . . . <目标路径> (append|insert <索引>|merge|prepend|set):
  • <目标路径>—指定修改特定NBT的合法的路徑名。
  • <索引>—指定列表中元素的索引的有效整數。
… from (block <源方块坐标>|entity <源实体>) <源路径>:
  • <源方块坐标>—指定需要獲取、修改、合併或移除數據標籤的方塊的<x> <y> <z>坐標。
  • <源实体>—指定需要獲取、修改、合併或移除數據標籤的作為NBT來源的實體,可以是一個合法的UUID,玩家名或目標選擇器
  • <源路径>—指定修改特定NBT的來源的合法的路徑名。
… value <>:
  • <>—一般是修改目標NBT要使用的數值。必須符合數據類型。
remove . . . <路径>:
  • <路径>—指定刪除NBT的合法的路徑名。
§NBT路徑


效果
當參數沒有被正確指定時失敗。(若目標實體的選擇器沒有規定實體數量為1,則是指令語法錯誤而非執行失敗。)
若成功:
/data get
/data get . . .
返回指定位置的方塊或單個目標實體的NBT數據,並且帶有語法高亮。
若適用,成功時的返回值為1。
/data get . . . <路径>
返回指定位置的方塊或單個目標實體的一部分NBT數據,並且不帶有語法高亮。
返回值取決於請求的NBT元素的類型。
  • 請求一個數字,則返回值為數字。
  • 請求一個字符串,則返回該字符串的長度。
  • 請求一個列表會返回該列表中元素的個數。
  • 請求一個Compound標籤會返回該標籤下一級子元素(不包括子元素的子元素)的數量。
/data get . . . <路径> <倍率>
返回該標籤的數值並乘<倍率>。
此時<路徑>需要指向一個數字類型的標籤,即該標籤的類型可以為TAG_byte,TAG_short,TAG_int,TAG_long,TAG_float或TAG_double。
/data merge
將從源方塊坐標或源實體的特定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數據樹中特定任意元素。一個路徑通常以superTag.childTag.childTag……parentTag.tag的形式存在。此處tag是被指定的標籤,superTag是其中一個最外層的標籤。

每個鍵之後可以給出一個NBT對象來與那個標籤的值比較。標籤僅當比較存在正的結果時被路徑作為對象。

當從列表中定義一個元素時,方括號被用在列表後的鍵。方括號內的內容可以是以下三種的任意一種:

  • 什麼都不填—將會返回列表中的每一個元素。[note 1]
  • 一個索引數字—對於一個非負索引n,會返回列表中的第(n+1)個元素。對於一個負的索引n,會從列表結尾開始,往前取第n個元素。
  • 一個NBT複合標籤—會返回所有含有方括號內NBT標籤的對象。

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

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

  • 獲取所有生物的所有數據:execute as @e run data get entity @s
  • 獲取自己的物品欄中的第一個物品數據:data get entity @s Inventory[0]
  • 獲取隨機一個骷髏的裝備數據:data get entity @e[type=skeleton,sort=random,limit=1] ArmorItems
  • 將所有的羊染成白色:execute as @e[type=sheep] run data merge entity @s {Color:0b}或者execute as @e[type=sheep] run data modify entity @s Color set value 0b
  • 將除玩家之外的所有生物設為不可摧毀(被創造模式玩家摧毀除外):execute as @e run data merge entity @s {Invulnerable:1b}execute as @e run data modify entity @s Invulnerable set value 1b,由於不能修改玩家的數據,所以玩家會被自動過濾掉,故選擇器無需再添加type=!player。

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

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

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

  • foo — 選取名為「foo」的頂級元素。
  • foo.bar — 選取foo的、名為「bar」子元素(假設foo是一個列表)。
  • foo.bar[-1] — 選取列表「bar」的最後一個元素。
  • foo.bar[0] — 選取列表「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 — 選取列表「baz」中所有名為「bar」的子元素。
  • foo.bar[{baz:5b}] — 選取所有列表「bar」中、「baz」標籤被設為5b的元素。
  • {} — 選取當前實體或方塊的根標籤。
  • {foo:4.0f} — 如果「foo」標籤被設為4.0f,那麼選取當前實體或方塊的根標籤。
  • foo{bar:"baz"} — 如果「foo」標籤的子標籤「bar」的值為"baz",則選取「foo」。
  • foo{bar:"baz"}.bar — 如果「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.13 17w45b 加入了/data,取代了/blockdata/entitydata
1.14 18w43a 加入了/data modify
1.15 19w38a 加入了指令存儲
加入了storage <命名空间ID>作為來源或目標。

注釋[編輯 | 編輯原始碼]

  1. 譯註:get子指令由於只能接受單個NBT,並不適用