【マイクラ】java版 で advancements 機能を使ってイベントを取得してみる

function 機能 を使う時は、tick を loop で実行することが多いが、

いくつかのイベントが取得できることがわかった。

advancements 【進捗】を利用する。

world / datapacks /【データパック名】/ data/<名前>/advancements/<進捗名>.root.json

root.json

{
    "display": {
        "title": "",
        "description": "",
        "icon": {
            "item": "air"
        }
    },
    "criteria": {
        "<一意の名前その01>": {
            "trigger": "impossible"
        }
    }
}

リンゴを食べた時のイベントを取得する場合。

world / datapacks /【データパック名】/ data/<名前>/advancements/<進捗名>.test.json

test.json

{
    "parent": "【データパック名】:<進捗名>/root",
    "display": {
        "title": "",
        "description": "",
        "icon": {
            "item": "air"
        },
        "show_toast": false,
        "announce_to_chat": false
    },
    "criteria": {
        "<一意の名前その02>": {
            "trigger": "consume_item",
            "conditions": {
                "item": {
                    "item": "apple"
                }
            }
        }
    },
    "rewards": {
        "function": "【ファンクションのパス】"
    }
}

【ファンクションのパス】

advancement revoke @s only 【データパック名】:<進捗名>/test

実行した function【ファンクションのパス】 で、進捗をなかったことにすると、何度も使える。