マルチプレイなら『シン・VPS』がおすすめ!

【デタパ】好きなブロックをグループ化できるブロックタグ【マイクラ】

【デタパ】好きなブロックをグループ化できるブロックタグ【マイクラ】

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

ブロックの指定に悩むマインクラフター
「自分が選んだブロックだけをまとめて指示したいんだけど、何か良い方法はないかな? できるんだったら、どうやってコマンドで使うのかも教えて欲しいな」

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

本記事の内容
  • 好きなブロックをグループ化できるブロックタグ
  • 作成したブロックタグを使用するコマンド例

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

なつめ

2016年3月からマイクラをプレイしています!
最近はコマンドやデータパックなどの技術的なものを勉強しています。

この記事では、ブロックタグを作成して本来まとまりのないブロックを一括で指定する方法について解説します。

ブロックタグはデータパック内のjsonファイルによって定義でき、幾つものブロックIDを指示しなくて済むようになるものです。

あまり知名度の高いものではないですが、便利なものですのでぜひ習得してくださいね。
それでは、さっそく見ていきましょう。



好きなブロックをグループ化できるブロックタグ

ブロックタグを作成することで、好きなブロックをグループ化できます。

具体的には、jsonファイルを適切に作成することで、指定したブロックだけが含まれるIDを作成することが可能です。
この時作成するIDは#のついたIDとなります。

元々存在している#のついたIDについては【コマンド】#がついているアイテムIDは複数のアイテムを指す【マイクラ】で解説しています。

ブロックタグを作成する(#のついたIDを作成する)

さて、ここからは実際にブロックタグを作成していきます。

データパックにブロックタグに関するjsonファイルを格納する必要があるので、データパックを作成していけばOKです。

データパックの構造

以下のように、フォルダやファイルを作成する必要があります。

  • データパック名
    • data
      • フォルダ名(自分で命名できる)
        • tags
          • blocks
            • jsonファイル
              (拡張子が.jsonならば、名前部分はお好みで命名できる)
    • pack.mcmeta

必要最低限のものだけを記載しています。
jsonファイル、pack.mcmeta以外は全てフォルダとなっています。

作成したIDは「#フォルダ名:jsonファイル」となりますので、候補から探す際などはフォルダ名、jsonファイルの名前を参考にしましょう。
例えば「test」というフォルダと「00_check」というjsonファイルだった場合は、「#test:00_check」というID名になります。

jsonファイルの中身

jsonファイルの中身は以下のように書き込みます。

{
    "replace":true,
    "values": [
        "minecraft:oak_planks",
        "minecraft:stone",
        "minecraft:cracked_stone_bricks",
        "#test:00_check"
    ]
}

項目としては、replaceとvaluesの2つがあります。

replaceはtrueかfalseで指定します。
この項目では、別のデータパック内で同名のIDが存在する場合に優先するかどうかとなっています。
デフォルトではfalseで優先しないようになっていますが、重複することはほぼないので適当に指定してしまってもよいです。

valuesは既存のアイテムIDや作成済みのブロックタグなどを指定することができます。
要するに、この部分でどのブロックを含めたいかを指示します。

上記の場合は、オークの板材、石、ひび割れた石レンガ、そして#test:00_checkに含まれているものを指定しています。
もし#test:00_checkにエメラルドブロック、ダイヤモンドブロックが指定されていたら、計5種類のブロックが含まれていることになります。

作成したブロックタグを使用するコマンド例

ブロックタグを使用するコマンド例として、足元に指定したブロックタグに含まれているブロックがあるとコマンドが実行されるというものを紹介します。

あまり難しいことはなく、executeコマンドのif blockを使用すればOKです。

execute at @a if block ~ ~-1 ~ #test:00_check run give @a diamond 1

このコマンドをリピートしておけば、#test:00_checkに含まれているブロックが足元にある間、常にダイヤモンドを全てのプレイヤーに付与できます。

もちろんrun以降を実行したいコマンドに変更しても良いですし、ブロックの座標指定を変更すれば足元でなくとも検知することが可能です。

まとめ

というわけで、今回のまとめです。

今回使ったコマンドはこちら。

今回使ったコマンド
  • #test:00_checkに含まれているブロックが足元にあると、全てのプレイヤーにダイヤモンドを付与するコマンド
execute at @a if block ~ ~-1 ~ #test:00_check run give @a diamond 1
ポイント
  • アイテムIDなどを書き込んだjsonファイルをデータパック内に適切に配置することで、#のついたIDを作成できる。

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

  • 【まとめ】functionコマンドの基本から応用【マイクラ】
  • 【まとめ】カスタムストラクチャーの実装・カスタム方法【マイクラ】
  • 【一覧】夏メの制作物【マップ・データパック配布】