見出し画像

歩いたところがTNTになるデータパック

最初にデータパックを作成する時にどういうものを作ろうかを考えるのが大事なのですが、私は以前ドズル社のおおはらMENさんの誕生日配信でやっていた歩いたところがTNTになるという企画がとても気に入っていたのでこれを作ってみよう!と思いました。
作るものが特に浮かばない人は好きな動画はどうやって作っているのだろう?と考えてみてもいいかもしれません。

必要条件

・歩いたところがTNTに置き換わる
水中や空中、黒曜石、岩盤を除いたブロックがTNTに置き換わる

・モブに攻撃されると着火したTNTが出現する
落下ダメージはトリガーにはならない。敵モブはもちろんゴーレムに殴られた時もトリガーになる。

動画を見ている感じではこのような条件のように思えました。

足元のブロックを置き換える

第一条件の歩いたところがTNTに置き換わるのは前回同様、常時読み込まれているfunctionに記述するだけで大丈夫です。

main.mcfunction

execute as @a at @s unless block ~ ~-1 ~ minecraft:water unless block ~ ~-1 ~ minecraft:bedrock unless block ~ ~-1 ~ minecraft:cave_air unless block ~ ~-1 ~ minecraft:void_air unless block ~ ~-1 ~ minecraft:air unless block ~ ~-1 ~ minecraft:obsidian run setblock ~ ~-1 ~ minecraft:tnt

とりあえずこれで常時足元のブロックがTNTになります。

モブからの攻撃を検知

ただのダメージではなく、モブからの攻撃を検知する必要があります。
executeで書きやすいpredicateを使用したいところなんですが、ダメージ源のプロパティがわかるdamage_source_propertiesというものがどうも正しく動かず・・バグ報告がされているようでしたが未だ変わらないようです(2023/2現在 私調べ)
なので、他の方法からモブの攻撃を検知する必要がありました。
色々調べたところ進捗を利用してモブの攻撃を検知することができるらしいのでやってみることにしました。

フォルダ構成ははじめてのデータパック①の続きで記述していきます。
「test」フォルダの中に「advancements」フォルダを作ります。
その中にオリジナルの進捗「mob_attack」フォルダを作り、進捗用の「root.json」「attack.json」を作ります。
そしてモブから攻撃を受けた時に実行させたいファイル「summon_tnt.mcfunction」を「functions」フォルダ内に作ります。

root.json

ルート進捗の設定

{
    "display": {
        "title": "",
        "description": "",
        "icon": {
            "item": "minecraft:air"
        }
    },
    "criteria": {
        "": {
            "trigger": "minecraft:impossible"
        }
    }
}

この設定は進捗画面だとタブにあたる設定です。
ここでは進捗画面に表示させたくないので記述していませんがオリジナル進捗を作る場合はこのへんを書いていく必要がありそうです。

attack.json

モブからの攻撃を検知

{
    "parent": "test:mob_attack/root",
    "display": {
        "title": "",
        "description": "",
        "icon": {
            "item": "minecraft:air"
        },
        "show_toast": false,
        "announce_to_chat": false
    },
    "criteria": {
        "": {
            "trigger": "minecraft:entity_hurt_player",
            "conditions": {
                "damage": {
                    "source_entity":{
                    },
                    "type": {
                        "is_explosion":false
                    }

                }
            }
        }
    },
    "rewards": {
        "function": "test:summon_tnt"
    }
}

"minecraft:entity_hurt_player"でプレイヤーがエンティティによって受けた攻撃を検知する事ができます。
スケルトンの弓の攻撃のみなど細かく設定ができるようです。
とりあえず爆発からのダメージはトリガーにしないようにis_explosionをfalseにしました。

設定した条件に合致した場合「summon_tnt.mcfunction」を実行してほしいので"rewards"にfunctionを記述しておきます。

summon_tnt.mcfunction

着火したTNTを出現させる

summon minecraft:tnt ~ ~ ~ {Fuse:90}

advancement revoke @s only test:mob_attack/attack

TNTを出現させたあと、進捗を削除しています。
着火したTNTは即爆発もできますが、多少逃げる余裕を持たせたいので”Fuse:90”と記述し普通よりも少し遅延させています。
ここの数字を変えると爆発までの時間を調節できます。

完成!

これで完成です。とりあえずデータパックを入れてテストプレイしてみましょう。
※データパックを入れる手順は前回を参照してください。

歩いたとろこがTNTに変わっていきます
モブに攻撃されたら着火したTNTが出現
(わかりにくくてすみません)
逃げ切れず爆死しました

見事に吹っ飛びましたが動作はOKでした!
試しに落下、サボテン、スイートベリーなどのダメージも確認しましたがこちらはトリガーになっておらず動作的には◎w

テストプレイでなんとかネザー要塞までたどり着く事ができましたがそれ以上はかなり難しかったです😂

私の環境上マルチプレイでのテストができなかったのでマルチプレイでの挙動がどうなるのかわかりませんが・・
こうしたほうがいいとか修正箇所などアドバイスありましたらどうぞお願いします🙏!!!!


※追記

マルチでこのデータパックを遊んでみました。
足元のブロックもモブの攻撃判定もしっかり動いていました!
ただ難易度が高く鬼畜すぎるので盾で防いだ時は除く…とか、なにか攻略方法があってもいいかもしれません…が、この鬼畜がたまらない!ってぐらい楽しかったので是非作って遊んでみてください٩( ᐛ )و


参考URL
【マイクラ鬼畜】超鬼畜企画!?歩いたところがTNTになる世界でエンドラ討伐!
Minecraft Wiki - 進捗/JSONフォーマット
Minecraft Wiki - TNT



この記事が気に入ったらサポートをしてみませんか?