Youtubeチャンネルはこちら!コマンド解説を動画で観れます!

【マイクラ】dataコマンドでstorageにデータを追加する

【マイクラ】dataコマンドでstorageにデータを追加する

この記事では、Minecraft Java Edition(バージョン1.19.2)の情報をもとに執筆しています。
そのほかのバージョンや機種などでの動作は保証できません。

storageにデータを追加したいマインクラフター
「storageってやつにデータを追加してみたいんだけど、どうやってやるの? 追加したら何ができるの?」

こんな疑問を解決します!

本記事の内容
  • dataコマンドでstorageにデータを追加する
  • 追加したらできること

こんにちは! マインクラフターのなつめ(@natsume_717b)です。

なつめ

マイクラ歴は5年程で、最近は脱出マップやミニゲームを制作しています!
ダウンロードページ

この記事では、storageにデータを追加する方法について解説していきます。
また、追加したデータを基にコマンドを実行する方法についても触れています。

コマンドの中でも難解なstorageですが、理解して自分のものにしてしまえばかなり出来ることが増えます。
頑張って習得する意義が大きい内容と言えますね。

というわけで、今回は記事が長いですが頑張ってついてきていただけると幸いです。
さっそく見ていきましょう!



dataコマンドでstorageにデータを追加する

dataコマンドを使うことで、storageにデータを追加することができます。
具体的にはmodifyで追加していきます。

merge(追加)でも追加することができますが、今回はmodify(編集)を使ったものを中心に説明していきます。

storageは自由に作ることができ、事前に作成しなくてもstorageにデータを追加するコマンドで自動的に作成されます。

以下のコマンドはnameというstorageの001に該当する箇所に、ブタ一匹のCustomNameのデータを追加するものです。

/data modify storage name 001 set from entity @e[limit=1,type=minecraft:pig] CustomName

対象となったブタの名前が「マルコ」という名前だった場合、nameの001には「マルコ」というデータが格納されるわけですね。

正確には、'{“text”:”マルコ”}’という形でnameの001に格納されます。

上記のコマンドは既に存在しているmob(エンティティ)からデータを得ましたが、参照せずにデータを得ることもできます。
その場合には、fromを使用せず、valueを使用します。

/data modify storage minecraft:name 001 set value "アイス"

このコマンドでは同じくnameの001に”アイス”というデータを追加します。

後述しますが、setは完全に指定したデータの内容に書き換えてしまいます。
データを維持しつつ追加したい場合には、mergeを使う必要があります。

set以外の項目について

ここでset以外の項目についても触れておきます。
上記で使用した2つのコマンドは「set from」、「set value」という文字列でしたが、そもそもset以外にも項目があります。

文字列意味
appendリストの一番後ろにデータを追加する
insertリストの中の指定した位置にデータを追加する
mergeオブジェクトに指定したデータを合わせる
prependリストの一番初めにデータを追加する
setオブジェクトを指定したデータに書き換える

リストというのは、[]で閉じられているものですね。
複数のデータを並べているもので、その順番にも意味があります。

指定した順番の位置にあるデータを参照することなどが可能です。

オブジェクトとは、{}で閉じられているものです。
リストとは違い、順番に意味はありません。

fromとvalueは先述の通り、どこからかデータを参照するのか、はまたま参照せずに直接データを指定するのかといった感じですね。

リストを使ってみた例

せっかくなので、リストの例を挙げておきます。
はじめに以下のコマンドで、nameの001の中身を変更しておきます。

/data modify storage minecraft:name 001 set value ["マルコ","アイス",0Z]

これでnameの001の中身は、0番目に”マルコ”、1番目に”アイス”、2番目に0Zという内容が格納されました。

リストは0番目から数えます。

prependを使ってみる

これに”アリー”というデータを追加してみましょう。
0番目に追加する場合、prependを使います。

/data modify storage minecraft:name 001 prepend value "アリー"

結果としてはこうなりますね。

["アリー","マルコ","アイス","0Z"]

/data get storage minecraft:name 001 というコマンドで、指定したstorageのデータを確認できます。

appendを使ってみる

リストの最後に追加するappendだった場合は以下の通りです。

#prependではなくappendを使った場合#
/data modify storage minecraft:name 001 append value "アリー"
#appendを使った結果#
["マルコ","アイス","0Z","アリー"]
insertを使ってみる

insertの場合は好きな位置に挿入できるので、若干使い方が異なります。
というのも、どの位置に挿入するのかを決める必要があります。

insertを選んだ後に、どの場所にいれるのかを数字で指定します。

今回は、”アイス”と”0Z”の間に入れてみましょう。
アイスは1番目、0Zが2番目となっていますので、指定する位置としては2番目となります。

#2番目の位置に”アリー”を挿入する#
/data modify storage minecraft:name 001 insert 2 value "アリー"
#2番目に追加した結果#
["マルコ","アイス","アリー","0Z"]

追加したらできること

さて、ここまでリストやオブジェクトといったstorageにデータを追加してみました。
これらを活かすコマンドについてお話していきます。

要は「○○なデータがあったら」や「◇◇に格納されているデータを参照する」ということを解説します。

○○なデータがあったら

まずは「○○なデータがあったら」ということを実現するコマンドを紹介。
「だったら~」ということで、executeコマンドのif dataを使っていきます。

似たようなものではif entity やif blockなどがありますね。

【コマンド】ブロック検知にはif blockで判断させる【マイクラ】

というわけで、nameの001に{“ABC”:”DEF”}というデータがあればダイヤモンドを1つ付与するコマンドを組んでみましょう。

execute if data storage minecraft:name 001{"ABC":"DEF"} run give @p minecraft:diamond 1

上記のコマンドを実行すれば、ダイヤモンドが貰えます。
ただし、「nameの001に{“ABC”:”DEF”}というデータがあれば」です。

リストの場合は、その順番にデータがあるかどうかを判定できます。
例えば10番目のデータが存在する場合、以下のコマンドではダイヤモンドを貰えます。
しかし、10番目のデータがない場合にはダイヤモンドを貰えません。

execute if data storage minecraft:name 001[11] run give @p minecraft:diamond 1

0番目から数えるので、[11]と指定することで10番目のデータを指定しています。

◇◇に格納されているデータを参照する

今回はtellrawコマンドに限定してお話してきます。
tellrawコマンドはメッセージを表示させるコマンドですので、要は「○○さん、こんにちは!」の○○の部分を自在に変更できるわけですね。

早速やっていきましょう。
まずは表示させたい名前をstorageに格納しましょう。

/data modify storage minecraft:name 001 set value '{"text":"マルコ"}'

これでnameの001に'{“text”:”マルコ”}’を格納できました。
その上で以下のコマンドを実行します。

/tellraw @p [{"nbt":"001","storage":"name","interpret":true},{"text":"さん、こんにちは!"}]

そうすると、「マルコさん、こんにちは!」というメッセージが表示されるはずです。
なので、'{“text”:”マルコ”}’のマルコの部分を好きな名前に変更すれば、その名前で表示させることができるわけですね。

まとめ

というわけで、今回のまとめです。
使用したコマンドに関しては、ややこしくなると思いますので今回はまとめません。
振り返りたい場合は、改めて記事を読みなおしていただけると幸いです。

ポイント
  • dataコマンドでstorageにデータを追加できる。
  • リストは[]で閉じており順番が重要。
    そして、オブジェクトは{}で閉じており、順番に意味がない。
  • storageにデータを格納すると、そのデータの有無でコマンドを実行できたり、データを抜き出してメッセージに表示させることなどもできる。

この記事は以上になります。