![見出し画像](https://assets.st-note.com/production/uploads/images/142094640/rectangle_large_type_2_018f71898c83552617ede88c6216c8c3.png?width=1200)
【コマンド】コマンドブロックを脱してdatapackにする良さ
こんにちは。かけです。
この記事ではdatapackとコマンドブロックのみの環境と比較して移行するべきなのかを考察していきます。すでにこのnoteでもdatapackへ移行する方法は紹介されていますので、気になる方は以下の記事へ
また、筆者は普段pluginやdiscord botなどの開発を行っているため、ここでの述べる意見はプログラミングに寄ったものになることに注意してください。
datapackの良さ
始めにdatapackの強みを紹介していきます。
1. プログラム開発ツールが使える
プログラミング言語を用いたソフトウェア開発は歴史は短けれど近年非常に発展しており、その中で開発された様々はツールは共同開発やヒューマンエラー回避などいろいろ便利に機能してくれます。
datapackへ移行するとそのようなツールを使えることが非常に大きなメリットになります。例えば以下のようなツールが使えるでしょう。
Visual Studio Code(拡張機能も含む)
Git / Github
Visual Studio Code(vscode)は多くの機能を持ったIDEで、様々な拡張機能の開発が行われています。これが本当に便利で考えてみるだけでも以下のような機能があります。
全てのファイル(.mcfunction)の文字列検索 / 置換機能
LiveShare:一つの開発環境を複数人で同時にコーディング
コードに色を付けてくれる
コマンドの補完機能(マイクラでのTabComplete)
コマンド以外にもコメントが打てる(mcfunctionの機能)
また、Git / Githubでは変更履歴を管理・共有ができるので開発の意図が残せるようになります。当サークルでもGithub Actionでdatapackの自動デプロイ環境を構築しています。
2. 便利なコマンドが使える
1.20になってから非常にmcfunctionに強化が入り、引数ありfunctionやfunctionを途中で打ち切るreturnなど通常マイクラから呼び出せないあるいわ呼び出しても意味がないコマンドが追加されつつあります。
これはかなりプログラミング言語によった仕様になっており、自分としてはかなり直感的に実装できるようになってきたと感じています。
例えば以下のような書き方は面白いです。
execute unless (条件) run\
return fail
これはある条件が成立しなければこの関数を失敗したとして終了させてそれ移行の処理を実行しないようになります。これはかなりプログラミングポイ挙動になっています。
3. advancementなどが使える
advancementではマイクラのデフォルト進捗以外にも自分で進捗をいじれることも一つの強みです。通常コマンドのみでは検知できないイベントへの対応や、コマンドの省略が可能になります。
また、 advancement以外にもloot tableやレシピ、特殊アイテムなど機能を実装することもできます。筆者も網羅的に試せていませんが、かなり大幅な変更も可能になるでしょう。
コマンドブロックにしかない機能
次にコマンドブロックにしかない機能を紹介していきます。
1. 条件付きチェーン
functionのみで条件付きチェーンを選択することはできません。しかし、execute storeを用いれば前回のコマンドが成功したかは判定することができます。
なので、条件付きチェーンが必要でもどうにかfunctionでも実装は可能です。
2. リピートがない
条件付きチェーンと同様にリポートも存在しません。しかし、これもadvancementのminecraft:tickを用いれば実装することは可能です。
なので、条件付きチェーン同様、似た機能は実装可能(むしろ実装しなければならない)ではあります。
3. 全員で共有して作業できる
コマンドブロックはワールド内に配置するブロックなのでマルチプレイ環境では共同で開発できます。が、これもvscodeのLiveShareを用いればほとんど同様の機能を使うことができます。
4. 初心者に向いている
datapackはマイクラ以外にも開発環境が必要になり、/reloadを挟まないと反映がされないなどかなり前提知識が必要です。比較してコマンドブロックは/giveを覚えていればかなり直感的にコマンドをいじれてしまうのは大きなメリットの一つでしょう。
また、巨大な機能を作っていくと大量のコマンドブロックに囲まれることなるためある種の映えにもなるのではないでしょうか。
まとめ
datapackにはコマンドブロックのみでは実現不可能な機能を多く保持しており、上級者には発展的でとても面白い機能になっています。もしコマンドブロックで何か新しい刺激を求めている方がいればぜひdatapackをおすすめしたいです。