Minecraft Wiki

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

了解更多

Minecraft Wiki
Advertisement
Information icon
此特性為Java版獨有。

命令/infobox

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

語法

/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.bar[0]—指定列表「bar」的第一個元素。
  • foo.bar[0]."A [crazy name]!"—指定這個列表中第一個元素下的子元素,名為「A [crazy name]!」。
  • foo.bar[0]."A [crazy name]!".baz—指定上述意義不明的元素下的子元素「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{bar:"baz"}.bar—指定標籤「bar」,如果其值為"baz"

箱中書

/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,取代了/blockdata/entitydata
1.1418w43a加入了/data modify
1.1519w38a加入了命令儲存
加入了storage <命名空间ID>作為來源或目標。

注釋


引用錯誤:使用群組名稱 "note" 的 <ref> 標籤已存在,但查無對應的 <references group="note"/> 標籤

Advertisement