ルッキーのコマンドメモ

主にマイクラのコマンドやデータパックに関することを書いていきます。

(マイクラ コマンド・データパック)dataコマンドの基本的な使い方

data コマンドの基本的な使い方

今回はデータパックを作る時かなりの頻度で使うことになるdataコマンドの基本的な使い方について紹介していきます。

目次

dataコマンドの種類

dataコマンドには以下の4つが存在します。

  • data getコマンド (データの取得)
    データを取得するコマンドです。
    データパックではnbtやストレージに入っている数値データをスコアに代入したいときやリスト型のデータの要素数を取得したいときに使っています。

  • data mergeコマンド (データの合成)
    データを合成するコマンドです。
    個人的に使い勝手が悪く、data modifyコマンドで代用できることからあまり使っていません。

  • data modifyコマンド (データの編集)
    データを編集するコマンドです。
    できることの幅が広く、dataコマンドを使う時の大半はこのコマンドを使っています。

  • data removeコマンド (データの削除)
    そのまま、データを削除するコマンドです。

それぞれのコマンドの使い方

それぞれのコマンドの使い方を紹介していきます。

data get コマンド

data getコマンドはentityやblock、ストレージのデータの中を見ることができます。 execute store resultコマンドでスコアに結果を格納することで使用することが多いです。

data get コマンドの書き方

data get コマンドは以下のような形で使うことができます

data get (block <対象の座標>/entity <対象>/storage <対象>) <NBTパス> <倍率>

例えば、実行したプレイヤが今持っているアイテムのデータが見たいなら以下のようなコマンドになります。

data get entity @s SelectedItem

以下にdata get コマンドの使用例を紹介していきます。

満腹度が6以下になったプレイヤを調べる

プレイヤの満腹度はfoodLevelというnbtを見ることで確認できます。

foodlevel.mcfunction

  # プレイヤの満腹度をfoodlevelというスコアに代入する
  execute store result score @s foodlevel run data get entity @s foodLevel

  # 代入したスコアが6以下であれば"お腹が減って走れない..."とチャットに表示する
  execute if score @s foodlevel matches ..6 run say お腹が減って走れない...

実行したプレイヤの満腹度が6以下であれば"お腹が減って走れない..."とチャットに表示するコマンドです。

インベントリがいっぱいになったプレイヤを調べる

以前書いたプレイヤのインベントリがいっぱいか調べるでも紹介したものです。

max_inventory.mcfunction

  # インベントリのスロット数をinventoryというスコアに代入する
  execute store result score @s inventory run data get entity @s Inventory

  # 代入したスコアが41であれば、"インベントリがいっぱいだ..."とチャットに表示する
  execute if score @s inventory matches 41 run say インベントリがいっぱいだ...

data get コマンドでインベントリを調べた結果をスコアに代入すると、インベントリの埋まっているスロットの数が取得できます。

そのため、そのスコアが41(インベントリの41スロット+防具欄の4スロット+オフハンドの1スロット)であればインベントリがいっぱいだとみなし、チャットに表示しています。

data merge コマンド

data merge コマンドはデータの合成をすることができるコマンドです。
このコマンドでできることはdata modify コマンドでできるため、自分はあまり利用することはないです。

data merge コマンドの書き方

data merge コマンドは以下のような形で使うことができます

data merge (block <対象の座標>/entity <対象>/storage <対象>) <NBT>

mergeの対象となるデータにそのNBTが存在していなかった場合は追加され、存在していた場合は上書きされます。

例えば、一番近くのゾンビが持っているアイテムをダイヤの剣に変えたいならこのような書き方になります。

data merge entity @e[type=zombie,sort=nearest,limit=1] {HandItems:[{id:"minecraft:diamond_sword",Count:1b}]}

data modify コマンド

data modify コマンドはデータの編集をすることができるコマンドです。 自分がdataコマンドを使う時は大抵このコマンドを使います。

data modify コマンドの書き方

data modify コマンドはできることの幅が広く、それだけにコマンドがとても複雑になります。
このコマンドの書き方は簡単には以下のようになります。

data modify <対象のパス> <操作> <データ>

それぞれに対して解説していきます。

<対象のパス>という部分はdata get コマンドの書き方にあった(block <対象の座標>/entity <対象>/storage <対象>) <NBTパス>と同じです。

<操作>という部分は以下の5つの操作のうちのどれかになります。

  • prepend 対象のリストの最初に指定したデータを追加する
  • insert <番号> 対象のリストの指定した<番号>の位置にデータを挿入する
  • append 対象のリストの最後に指定したデータを追加する
  • merge 対象に指定したデータを合成する
  • set 対象を指定したデータに変更する

最後に<データ>です。指定するデータを表す部分になります。
以下の3つのうちのどれかになります。

  • from (block <取得元の座標>/entity <取得元>/storage <取得元>) <取得元のパス>
    <対象のパス>と同様の書き方です。すでにあるデータを指定する場合にこれを使います。

  • string (block <取得元の座標>/entity <取得元>/storage <取得元>) <取得元のパス> <最初の文字数> <最後の文字数>
    文字列や数値の一部を切り取ってきたい場合に使う操作です。自分は使ったことがないのでよく知りません。

  • value <値>
    直接指定するデータを書き込む操作です。

data modify コマンドを使って、data merge コマンドと同様に、一番近くのゾンビの持っているアイテムをダイヤの剣にするコマンドは以下のようになります。

data modify entity @e[type=zombie,sort=nearest,limit=1] {} merge value {HandItems:[{id:"minecraft:diamond_sword",Count:1b}]}

data modify コマンドはあまりにも使用できる幅が広いので、具体的な使用例などはまた別の記事に書きたいと思います。

data remove コマンド

data remove コマンドは特定のデータを削除することができるコマンドです。

data remove コマンドの使い方

data remove コマンドの書き方は以下のような形になります。

  data remove (block <対象の座標>/entity <対象>/storage <対象>) <NBTパス>

例えば、一番近くのゾンビが持っているアイテムを削除したい場合はこのようにかけます

  data remove entity @e[type=zombie,sort=nearest,limit=1] HandItems[0]

また、足元のブロックの中から石ブロックだけを消したい場合にはこのように書けます

  data remove block ~ ~-1 ~ Items[{id:"minecraft:stone"}]

まとめ

dataコマンドにはget,merge,modify,removeの操作があり、それぞれデータの取得、合成、編集、削除を行うことができます。
このコマンドはできることが非常に多く、それだけに覚えるのは大変ですが少しづつ勉強していきましょう。