dataコマンドについてのざっくり?解説

dataコマンドとは

エンティティ、ブロック、ストレージなどのNBTデータを書き換えるコマンドです。

NBTデータってなに?って人はWikiを見てね。

NBTフォーマット - Minecraft 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
}

もともとあったデータ同士で合体するのです!

ストレージに関しては過去のブログで詳しく書いてるので、気になる方はそちらを見てね。

keiduki.hatenablog.com

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コマンドは複雑で難しい!!!