コマンド勢はMODを使うなっていうけど、ホントなの？

この記事は、[Minecraft Command Advent Calendar 2023](https://qiita.com/advent-calendar/2023/mccmd) 7日目の記事です。

## この記事は何？
**mcfunction**はプログラミング言語扱いされてるとはいえ、この記事をQiitaに書くのはちょっと違う気もする。

自分で何でも作るコマンド勢の人も、自分では作らず、人が作ったものを遊ぶだけの人も、
**「コマンドやるならMODは使うな！」** 
**「配布マップを遊ぶならMODは使うな！」**
といった話を聞いたことがあると思うのですが、今日はそれに関するお話をします。
…そういう話を聞いたことなくても話します。

## MODを入れるべきではないのはなぜ？
ではまず、MOD入れるべきではない理由から説明します。
何も手を加えていないマイクラ、俗に言う**バニラ**ですね。
基本的にはコマンドをやるならこの状態で開発するべきだとされています。
というのも、コマンドで何か作ってて不具合が起きたとき、それがバニラのマイクラの問題なのか、入れてるMODのせいなのかが分からなくなるからです。

### OptiFineを例にしてみる
使ってる人も多いであろう、有名MODの[**OptiFine**](https://optifine.net/home)ですが、<font color="red">このMODの時点でバグります。</font>

このMODは軽量化MODとして有名なのですが、バニラのソースコードに変更を加えているらしく、バニラのマイクラとはちょっと違う動作を取ることがあります。
チャンク読み込みなんかは何か変更が入っているらしく、<font color="red">本来読み込まれるはずのものが読み込まれなかったりする</font>なんてことが発生します。
これが配布マップなんかだと、本来店にいるはずの店員キャラが出てこなくなって買い物ができなくなるとか、そこにいるはずのボスが出てこなくて話が進まなくなるとか、そういったことが起こるわけです。

### MODが原因のバグはどうなる？
作る側の場合は、バグの修正を頑張ったけど、どうしても直せなかった…でも後からMODを抜いたら簡単に直った、なんてことが起きてしまったら、バグ修正を頑張った時間はまるごと無駄になってしまうわけです。

ユーザー側はバグとして、作者にそれを伝えに来るかもしれません。でも作者は同じMODを入れてるとは限らないので、バグの再現ができず、修正のしようがないバグを伝えられることになります。どちらも得しませんねえ。

### つまり？
MODを入れてると、バニラと全く同じ動きが保証できなくなるのです。
そしてそんな状態でバグ報告されても困るので、コマンド勢はMODを入れるなと言うわけです。
直しようがないものを報告されてもどうしようもないしさ？

## それでも、MODを使いながらコマンドで開発したい
リスクを踏まえた上でMODを使いながらコマンドで開発をしたい人がいるかもしれない…ていうか私自身がそういう人なので、そういう人向けのお話になります。
軽量化MODとか入れてないと重い人とかもいるでしょうしね。

### 基本的なこと
・バグったらとりあえずMOD抜きで確認してみる
・上手くいっても、最後にはMOD抜きで確認してみる
・なんか妙なことが起きても<font color="red">自己責任！</font>

とりあえずバニラでのチェックは大事です。
不安になったらバニラ環境で起動するようにしましょう。
配布マップで遊ぶ際も、バグったらとりあえずバニラで起動してみよう。
あとMODを使って起きた不具合は報告されても困るから<font color="red">自己責任</font>で。

つまり、なんか起きても自分でなんとかできる人向けです。まぁ、MODってそもそもそういうモノな気がする。
### 前提MODによる違い
ある程度検証…というか使い続けた結果、前提Modの1つである[**Fabric**](https://fabricmc.net/)はコマンド関連の挙動を壊すことが少ない、または全くないことが分かりました。問題がなさすぎて怖いくらいです。起動が軽めなのも嬉しい。

現在主流の前提Modである[**Forge**](https://files.minecraftforge.net/net/minecraftforge/forge/)はどうなのかというと、こちらも基本的には問題がありませんでしたが、１つバニラと違う挙動を確認しました。「要塞が存在していないワールドでエンダーアイを使ったときの挙動」がバニラと違うらしく、バニラではアイテムを消費せずに**using_item**の判定を出すのに対し、Forgeでは**using_item**の判定を出さないという挙動になりました。これによって何の問題が起きるというと、エンダーアイの使用判定を使ってるアイテムは全く動かなくなるわけです。そんなアイテムあるのか？って思うかもですが、例を挙げると、私が製作に関わってる配布マップ、[**The Sky Blessing**](https://tsb.scriptarts.jp/)には出てきたりします。
コレ以外にも何か問題はある気がしないでもないですが、とりあえず私のデータパックはForgeでも動かせました。

このことから、コマンドで開発をしたり、配布マップで遊んだりするなら**Fabric**のほうが向いていると言えます。最近はFabric対応のMODも多いですし。

でも、どうしても使いたいMODがFabricに対応していない！俺はデータパックと一緒にForgeのMODを遊びたいんだ！って人は、Forgeでも動かせないことはないです。その場合は、エンダーアイ絡みの問題に気をつけよう。

### どんなMODなら大丈夫なの？
まずはアイテムやモブを追加するMODや、既存の要素を変更するようなMODはダメ、というか開発環境には向かなさそうです。そのMODを入れてることを前提としたデータパックとか配布マップなら話は変わってきそうですが…。

クライアントサイドのMOD、つまりサーバー側に導入する必要がないMODは**大体**問題なさそうです。
こちらで試した感じでは、環境音を追加するMODとか、プレイヤーの見た目を変えるとか、そういったMODは大丈夫でした。

軽量化MODである[**Sodium**](https://modrinth.com/mod/sodium/versions)や、影MODである[**Iris**](https://irisshaders.dev/)なんかは問題ないことを確認しています。こちらはバニラコードへの変更は加えてなさそうです。ただし、MOD側でカスタムされたシェーダーを使っているときは、<font color="red">バニラのコアシェーダーに手を加えるリソースパックは動作しなくなる</font>ことに注意。これはシェーダーの仕様上どうしようもないことです。

ただし前述の通り、**OptiFine**はクライアントサイドのMODですが例外です。多分他にも入れると問題を起こすものがありそう。このことから、クライアントサイドだからって必ず大丈夫というわけでもないのでややこしい。

追記:
妙なことが起きるMODとして[**Replay MOD**](https://www.replaymod.com/)もあることを忘れていたので記述しておきます。アーマースタンドやアイテム表示エンティティなどを重ねて作ったものがどういうわけかバラッバラになったり、ガタガタしだしたりします。最近の配布マップやデータパックはこの辺のエンティティを使うことが多いので、入れるとものすごい事になります。気をつけよう。

サーバー側に入れるだけで動くタイプのMODも問題なさげです。[**WorldEdit**](https://www.curseforge.com/minecraft/mc-mods/worldedit)は大丈夫でした。建築補助が必要なコマンド勢だっているでしょう？

MODを導入した状態でも問題なくバニラサーバーに参加できるかどうかを基準にしてもいいかもしれません。アイテム追加MODとか入れてるとそうはいきませんからね。

### バニラサーバー以外でのコマンドの挙動について
厳密にはMODではありませんが、軽く触れておきます。
拡張プラグインの使用を可能にする、[**Paper**](https://papermc.io/)や[**Bukkit**](https://dev.bukkit.org/)といったマイクラサーバーですが、こういったものとコマンドの相性は、正直なところあまり良くはありません。
Paperで動かしただけでも、防具立てをkillコマンドで消すと、本来は無音で消えるはずなのに、破壊時の音が鳴ったり、負の爆発範囲を持つクリーパーは本来ならノックバックだけを発生させるはずが、全く何も起きなかったりと、妙なことがチラホラと起こります。わたしのデータパックも変な挙動になってしまいました。銃弾が変な方向に飛んでいくとかそんな感じ。

データパックで遊びたいけど、サーバープラグインも扱いたい…っていう需要は、一定数あるのだとは思いますが、こちらでは何もできません。プラグインでデータパックを再現するとか、そんな話になってきちゃうからなあ。

## 今日のまとめ
MODを入れてもコマンドはできる！できるけど、前提MODを使うだけでも仕様が変わったりするので、<font color="red">MODを入れてるときはバニラと違うことが起きてもおかしくない</font>、ということを念頭に置いておこう！

MODを入れてるときに配布マップがバグったり、作ってるものが上手くいかなかったら、とりあえず完全バニラの状態で起動しよう！案外解決することがあるぞ！

公式以外のサーバーと、コマンドの相性は良くないぞ！データパックや配布マップで遊ぶときはバニラサーバーを使おう！

## 最後に
MODを入れまくるのは楽しいし、開発に役に立つものもあります。
ただMODだからダメだ！とは言わずに試してほしい…し、なんならFabricに住んでほしい。流行らせたいMODがあるので。

ただ、他のコマンド勢からすると、コマンド勢としてはそれなりに目立つ立場の私がMODを入れまくってコマンドで遊んでいるというのは、迷惑千万なのではないかと思うことがあります。私のマネしてMOD入れて配布マップバグらせた人とかいそうだしさぁ。