dataコマンドについてのざっくり?解説
- dataコマンドとは
- dataコマンドの形
- data get ~ (データを表示する)
- data merge ~ (データを合体する)
- data modify ~ (データを変更する)
- data remove ~ (データを削除する)
- まとめ
dataコマンドとは
エンティティ、ブロック、ストレージなどのNBTデータを書き換えるコマンドです。
NBTデータってなに?って人はWikiを見てね。
今回はdataコマンドがメインなので、どのエンティティに何のNBTが指定できるかとか、そういうのは無しでやります。
むしろそういうのが知りたいんだよ!って人はここを見てね。(更新されてるのかどうか知らないけども)
コマンド/データタグ - Minecraft Japan Wiki - アットウィキ
そして、dataコマンドの日本語のWikiを見たら、めっちゃ情報が古くてびっくりしたよ。ちょっと今回は詳しめに書いていくので、長くなります。
dataコマンドの形
では、はじめに、dataコマンドを1つにすると下みたいになります。
data <get|merge|modify|remove> <entity|block|storage> <target> <targetPath> (append|insert <index>|merge|prepend|set) <from <entity|block|storage> <target> <targetPath>|value <value>>
まだ逃げないでください!ここから簡単に説明していきますから!
まず、dataコマンドで「やること」は4つに分かれます。
- data get ~
→ 指定した(NBT)データを表示! - data merge ~
→ 指定した(NBT)データと合体! - data modify ~
→ 指定した(NBT)データを変更! - data remove ~
→ 指定した(NBT)データを削除!
ざっくりと説明するとこんな感じです。
さらにその後に下のような感じで「対象」がくっついてきます。
data <やること> entity <対象のエンティティ> ~
→ エンティティの(NBT)データに何かする! (ただし、1人限定なので、@pや[limit=1]を使おう)data <やること> block <対象のブロックの座標> ~
→ ブロックの(NBT)データに何かする! (ただし、ブロックエンティティにしか使えません)data <やること> storage <対象のストレージ名(好きな名前)> ~
→ ストレージの(NBT)データに何かする!
そして「何に対して」操作をするかをくっつけます。
- data <やること> <対象> <このデータ!>
例えば、「自分」の「インベントリ」を全部「表示」したいなら、こんな感じ!
data get entity @p Inventory
基本はこれだけなので、それぞれの「やること」について説明していきましょう。
data get ~ (データを表示する)
まずは何をするにも、どんな風に反映されたか確認したいですよね。というわけで、getから。
※ 必ず /gamerule sendCommandFeedback true にしておいてください。
※ 詳しく知りたい方は、この手順通りに実際にためしてください。
表示するのはシンプルです。
data get <対象> (データ)
ちなみに、全表示したい場合は(データ)は書かなくてもOKです。
例えば、シンプルなチェストとかでやってみましょうか。
data get block <チェストのある座標>
こうすると下みたいな情報が取れましたかね?
{ id: "minecraft:chest", x: -100, y: 60, z: 100, Items: [] }
例えば、idだけほしい!って時は下で取れます。
data get block <看板のある座標> id
さらに詳しく表示してみる
では、チェストの中に石をど真ん中に置いてみましょう。
そして、またgetしてみてください。そうするとItemsが下みたいになってると思います。
{ Items: [ { Slot: 13b, id: "minecraft:stone", Count: 1b } ] }
追加されたみたいです!では、ピンポイントでこの情報だけを取りましょう。
Items[0]を指定するとチェストの左上から数えて0番目(実質1番目)のアイテム情報が取れます。
data get block <看板のある座標> Items[0]
そうすると、下のように取れましたかね?
{ Slot: 13b, id: "minecraft:stone", Count: 1b }
さらにさらに詳しく表示してみる
では、もっと深く、13番目にあるアイテムのidを表示してみましょう。こうします!
data get block <看板のある座標> Items[{Slot:13b}].id
うまく行けば、"minecraft:stone"が表示されたと思います。
ちょっと大雑把に説明するとこういうことができます。
Items ← チェストのアイテムリストをください Items[0] ← チェストの左上から0番目のアイテムをください Items[-1] ← チェストの最後(右下)から1番目のアイテムをください Items[0].id ← チェストの0番目のアイテムのidをください Items[{Slot:13b}] ← チェストの{Slot:13b}と書いているアイテムをください Items[{Slot:13b}].id ← チェストの{Slot:13b}と書いているアイテムのidをください
ここまででなーんとなくふーんってなったらOKです!
data merge ~ (データを合体する)
!! \合体/ !! ということでmergeです。上で説明したチェストを使います。
まずはこうしてみましょう。
data merge block <チェストの座標> {Items:[{id:"minecraft:stone",Count:1b}]}
チェストの左上に石が出現しましたでしょうか?では、続いて。
data merge block <チェストの座標> {Items:[{Slot:8b,id:"minecraft:stone",Count:1b}]}
今度はチェストの右上に石が出現しましたでしょうか?
というわけで、mergeはもともとのデータと合体させるんですけど、他のget, modify, removeと違って、<データ>のところは合体させるNBTを書く必要があるんです。
ただ、mergeはちょっと使いづらいんですよね。全部書き換えちゃうから。
ストレージで効果を発揮するmerge
mergeはストレージを使うと一気に使い始めます。
ストレージは形式さえ守っていれば、自由にかけるので、こういうこともできます。
data merge storage test {id:101,aaa:"わーい",bbb:true}
そうして設定したものに、下のコマンドを実行します。
data merge storage test {aaa:"やーい",ccc:110}
そして、getで全部表示してみると、こんな感じになります。
{ id: 101, aaa: "やーい", bbb: true, ccc: 110 }
もともとあったデータ同士で合体するのです!
ストレージに関しては過去のブログで詳しく書いてるので、気になる方はそちらを見てね。
data modify ~ (データを変更する)
私の中で最も使うdataコマンドmodify。ただし、こいつだけやたらめったら長くなる!
modifyはNBTの後に、さらに下がくっついてきます。
data modify <対象> <データ> prepend ~
→ <データ>がリストなら、リストの一番最初に追加する
data modify <対象> <データ> append ~
→ <データ>がリストなら、リストの一番最後に追加する
data modify <対象> <データ> insert <番号> ~
→ <データ>がリストなら、リストの?番目に追加する(0番目が一番最初です)
data modify <対象> <データ> merge ~
→ <データ>がオブジェクトなら、合体する
data modify <対象> <データ> set ~
→ <データ>を書き換える
変更方法は5種類ありますが、私はsetを使うことがほとんどです。
ちなみにリストは [ ] のことで、オブジェクトは { } のことです。
そして、さらにこれらの後に、どういうデータで変更するのかがくっつきます。
data modify <対象> <データ> <変更内容> from <対象> <データ>
→ fromの後の<対象>の<データ>を追加、もしくは<対象>の<データ>に変更する
data modify <対象> <データ> <変更内容> value <値>
→ valueの後の<値>に変更する
fromの方は他のNBTをコピー!valueの方は好きな内容に変更!って感じです。
modifyを一通り試してみる
ストレージで、実際にやってみます。まずはストレージを用意します。
data merge storage test {aaa:[2,3,4],bbb:{n:10,m:100},ccc:0}
まずは先頭に追加しましょう。aaaは [ ] なので、リストです。なので、prepend, append, insertが使えます。
data modify storage test aaa prepend value 100
そしたらgetで表示してみましょう。[100, 2, 3, 4] が表示されたらOK!
data get storage test aaa
次は最後に追加しましょう。
data modify storage test aaa append value -100
そして、getで表示すると、[100, 2, 3, 4, -100] が表示されるはず!
次は途中に追加しましょう。100が0番目なので、3番目になる位置(3の後)に追加しましょう。
data modify storage test aaa insert 3 value 9999
getで表示すると、[100, 2, 3, 9999, 4, -100] が表示されましたかね?
では、合体を試しましょう。基本はdata mergeと同じです。
最初に用意したストレージのbbbはオブジェクトなので、そこにマージしましょう。
data modify storage test bbb merge value {n:200,abc:"あいう"}
getで表示してみましょう。{n: 200, m: 100, abc: "あいう"} になりましたかね?
data get storage test bbb
最後に、変更を試しましょう。
data modify storage test ccc set value 0
getで表示すると、0 になりましたよね?
data get storage test ccc
ちなみにsetに関しては新規追加もいけるので、下みたいに値を追加できます。
data modify storage test new set value "新しい!"
valueばっかりだったので、fromの方も一つだけ。チェストにアイテムをいれて下のコマンドをやってみよう!
data modify storage test ccc set from block <チェストの座標> Items
getするとチェストのアイテムリストが表示されるはず!
data remove ~ (データを削除する)
ようやく最後のやつです。さっくり流します。remove。
使い方はgetと同じような感じになります。表示する代わりに削除ってことですね。
data remove <対象> <データ>
では、さっきまで使っていたストレージのaaaを削除しましょう。
data remove storage test aaa
getしてみてください。消えましたかね?
まとめ
dataコマンドはNBTデータをアレコレするやつ!
dataコマンドは大きく分けて4種類!
- 表示する get
- 合体する merge
- 変更する modify
- 削除する remove
dataコマンドは複雑で難しい!!!