データパックのタグ付け備忘録

タグ付けとは

コマンドの/tagではなく、データパック内に作ることができるタグの備忘録です。

簡潔に言うと、複数のブロック、アイテム、エンティティ、ファンクションなどを1つにまとめてしまおうという機能です。

例えばブロックだと、下のようなチェックが

# 0 60 0にあるブロックが石か砂か土ならtestという
execute if block 0 60 0 stone run say test
execute if block 0 60 0 sand run say test
execute if block 0 60 0 dirt run say test

こういうふうにできます。

execute if block 0 60 0 #x:test run say test

どうやってタグ付けするの?

データパック内にフォルダを作る

まずは以下のようにフォルダを作りましょう。

<セーブデータ>/datapacks/data/<パック名>/tags

もちろんデータパックなので、pack.mcmetaも用意しておいてくださいね。

種類でフォルダを分ける

次にtagsの下に何のタグを付けるか決めます。

種類によってフォルダ名が決まっているので注意しましょう。

# ブロックをタグ付けする
<セーブデータ>/datapacks/data/<パック名>/tags/blocks/<タグ>.json

# アイテムをタグ付けする
<セーブデータ>/datapacks/data/<パック名>/tags/items/<タグ>.json

# ファンクションをタグ付けする
<セーブデータ>/datapacks/data/<パック名>/tags/functions/<タグ>.json

# エンティティをタグ付けする
<セーブデータ>/datapacks/data/<パック名>/tags/entity_types/<タグ>.json

タグをつけたい項目を入れていく

それでは、<タグ>.jsonの中身を書いていきましょう。例えば上で説明したブロックのタグ付ならばこんな感じになります。

{
    "values": [
        "minecraft:stone",
        "minecraft:sand",
        "minecraft:dirt"
    ]
}

構造はシンプル!ただ並べるだけ!

他のアイテムやファンクション、エンティティも同じかんじでタグ付けできます。

どうやって使うの?

タグ付けしたものは、#<パック名>:<タグ>という形で指定できます。

例えば、

<セーブデータ>/datapacks/data/x/tags/blocks/test.json

とならば、

execute if block 0 60 0 #x:test run say test

という感じで使えるようになります。

使えるコマンドは限られている

基本的にタグ付けで使えるコマンドはチェックする対象を調べる時がほとんどです。

ブロックなら上でも説明したような感じですね。

エンティティならば、こんな感じでエンティティのtypeに指定できます。

replaceitem entity @e[type=#x:mob] armor.head stone

アイテムならば、Predicateで下みたいに書くとそのアイテムのどれかを右手で持っていたらってことができます。

{
    "condition": "minecraft:entity_properties",
    "entity": "this",
    "predicate": {
        "equipment": {
            "mainhand": {
                "tag": "x:super_items"
            }
        }
    }
}

(PredicateやLoot Tableなどの上記の場合は、#は不要です)

ちなみに、クリエイティブのインベントリの検索欄にもタグは使えます。

ファンクションのタグ付けの呼び出しルール

ファンクションは単純にこういう形で呼び出せます。

{
    "values": [
        "x:aaa",
        "x:bbb",
        "x:ccc"
    ]
}
function #x:call

さて、この場合は、x:aaa x:bbb x:cccはどういう順番で呼び出されるのか。

実は上から順番に1回ずつ呼び出されます。前後関係が重要な場合など使えるかもですね。

特殊なタグ付け

<パック名>をデフォルトのminecraftにすることで、ちょっと特殊なタグを付けることができます。

minecraft/tags/functions/load.json

ここに同じようにタグを付けると、ゲームのロード時やサーバーのリロード時に、ここでタグ付けされたファンクションが必ず呼び出されるようになります。

データパック配布する人とかは常用しているのでは?

minecraft/tags/functions/tick.json

ここに同じようにタグを付けると、1tickごと、tick開始時に、ここでタグ付けされたファンクションが必ず呼び出されるようになります。

常時実行しておきたいコマンドとかはここでタグ付けしておくと便利ですね。

タグ付けのタグ付け

さて、ここまでタグ付け方法などを書いてきましたが、実はタグ付けしたものを更にタグ付けできます。

{
    "values": [
        "#x:test",
        "minecraft:glass"
    ]
}

こんな感じですね。

デフォルトでも結構、タグが多く登録されているので、使えるものは使っちゃいましょう。

サブフォルダ内に置くこともできる

タグはフォルダの階層をさらに掘ることができます。例えば、

<セーブデータ>/datapacks/data/x/tags/blocks/aaa/bbb/ccc/test.json

という感じであれば、

#x:aaa/bbb/ccc/test

というふうに利用することができます。