前々から興味があったマインクラフトのMOD製作だが、ForgeでのMOD製作を調べてはやる気がなくなることの繰り返しだった。
理由はマイクラバージョンごとの差異が激しいこと。過去バージョンのドキュメントが役に立たないこともたびたびあるし、最新バージョン対応も遅い。
ところが最近になってFabricを知った。Fabricはマイクラバージョンごとの差異が少なく、最新バージョン対応も迅速だとのこと。
じゃあFabricでMOD製作練習してみようかなーと思って開発環境構築からサンプルコードのビルドをやってみたので、躓いた点と解決策をメモしておく。
この記事に沿えば、各種解説サイトのサンプルコードをコピペして実行できるようになるはずだ。プログラミング初心者でコピペから始めて動かせなかった人も、きっと動かせるようになる……はず。
開発環境構築
プログラミングにおいて、まず大変なのってここでしょ。
だがJavaの開発環境構築はとても簡単なので安心してほしい。
- JDKをインストールする
- 統合開発環境をインストールする
この二つでほぼ終わる。あとは目的のアプリケーション(今回の場合はマインクラフトMOD)のために微調整するだけ。
参考にしたサイトは、Fabric公式サイトのセットアップ(英語)。
JDKのインストールと環境変数の設定(他サイト参照)
JDKのインストールは詳細な解説が他サイトにあるため、そちらに譲る。環境変数でJAVA_HOMEとbinを設定するところまでやっておこう。
JDKのバージョンはマイクラMODの場合はJava8かJava16だが、今からFabricでMODを作るならマイクラ1.17.1向けかと思うので、Java16でいいのではと思う。そうでない場合は目的のバージョンに合わせよう。
既にJavaのインストールまでは済ませている人なら、こちらのサイトを参照して環境変数を設定するだけでOK。(※Windowsの場合。他OSの場合は自力で検索を)
統合開発環境をインストールする
統合開発環境とは「プログラミングしやすくなるソフト」とでも思っておけばいい。あるのとないのとでは作業効率が雲泥の差なので、ぜひインストールしておこう。なしで開発できるのは相当な玄人である。
Javaの統合開発環境で個人によくおすすめされるのは、無料で入手可能なEclipseかIntelliJ IDEA。
どっちを使うかは好みなのだが、ぼくはIntelliJ IDEAがおすすめ。なぜかってマイクラ関連のプロジェクトが作りやすいからである。
というわけでこちらの公式サイトからダウンロードしてインストールしよう。「Community」とある無料のほうでOK。
なお、UIが英語だが、日本語化はしないほうがいい。理由はたびたび海外のドキュメントを参照することになるため、英語のままのほうがメニューを追いやすいからだ。
Minecraft Developmentプラグインを導入する
IDEAのインストールが終わったら、次にマイクラ関連のプロジェクトを作りやすくするためのプラグイン「Minecraft Development」を導入する。
これがあるとFabric MODの空プロジェクトが簡単に作れるようになる。
ぼくの場合、サンプルMODからリネームする方法では何かを間違うらしくまともに起動するところまでもっていけなかったが、このプラグインのおかげで正常に動作するプロジェクトが作れるようになった。
File→Settings→Pluginsと進み、Marketplaceで「Minecraft」と検索すると以下のような画面になる。

この「Minecraft Development」をインストールしよう。ぼくはインストール済みなのでInstalledと表示されているが、そうでない場合は「Install」というボタンがあるので、それを押せばOK。
エラー文の日本語を読めるようにする
IDEAは初期状態ではコンソールに日本語が表示できない。だが我々の使っているPCは日本語のため、Javaのエラーにも日本語で出力されるものがある。そのため文字化けが発生してしまう。
文字化けを直すためには、Help→Edit Custom VM Options...を選択。出てきた画面で、末尾に「-Dfile.encoding=UTF-8」を付け足す。


これで日本語のエラー文が文字化けしなくなるはず。
サンプルプロジェクトを作る
試しにサンプルコードを実行するプロジェクトを作ろう。方法は2種類ある。
- 公開されているプロジェクトをダウンロードして展開してIDEAで読み込む
- 自力でプロジェクトを作って、コードをコピペする
1→2の順で両方やってみるのがおすすめ。
ダウンロードして読み込む場合
初回はダウンロードして読み込むのが一番手軽だろう。
というわけで、GitHubで公開されているFabric Example Modをダウンロードしてみよう。このプロジェクトは、ログに「Hello Fabric world!」と出力する簡単なプログラムである。
ソースコードは以下のページで公開されている。緑色のCodeボタンから「Download ZIP」を押すとZIP形式でファイルが一括ダウンロードできる。

ZIPファイルを展開したら、File→Openからフォルダを開くと、「Trust and Open Gradle Project?」とダイアログが出るので「Trust Project」を押す。そうするとプロジェクトができる。
Gradleの設定をする
IDEAで初めてGradleプロジェクトを作成すると、IDEAがGradleの設定をする。なのでしばらく待機時間がある。お茶でも飲みながら待っていよう。
Gradleのセットアップが終わったら、一旦プロジェクトを閉じて開き直すこと。これで正常にGradleが使えるようになる。
Fabric公式のおすすめ設定(スキップ可)
追加で、Fabric公式からおすすめされている設定をしておこう。必須ではないのでスキップしても構わない。
GradleタブからGradle Settingsを選択する。スパナみたいなマークを押すと出てくる。

ここで「Build and run using」と「Run tests using」を「IntelliJ IDEA」に変更する。

続いて、File→Project Structureを選択して、出てきたウィンドウでProjectを選び、「Project compiler output」に「$PROJECT_DIR$/out」と書き込む。

Fabric公式のおすすめ設定はここまで。新規プロジェクトを作るたびにこの設定をする必要があることに注意しよう。(スキップ可能ではあるんだけど)
プロジェクトをビルドしてみる
やっとビルドできるようになった。GradleタブからTasks→buildをダブルクリックでプロジェクトをビルドしてみよう。

できたら右上の緑の再生ボタンの隣で「Minecraft Client」を選び、再生ボタンを押せばクライアントが起動して、Fabric環境でModを実行してくれる。
実行してもマインクラフトのゲーム画面では特に何も起きないが、IDEAから参照できるログには「Hello Fabric world!」と出力されているはず。左下のログ画面をスクロールして探してもいいのだが、面倒なのでログ欄でCTRL+Fを押して検索することにする。

Helloで検索したら「Hello Fabric world!」がちゃんとあった。無事出力されていたらしい。
これでFabricでMOD製作をする環境ができたことになる。
プロジェクトを作成してコピペする場合
次にプロジェクトを自力で作成してコピペする方法を説明する。
新規プロジェクトを作る
まずはFile→New→Project...を選択。
そうするとNew Project画面になるので、左側の欄でMinecraftを選び、右側ではFabric Modにチェックを入れる。SDK欄は目的のJDKバージョンを選択する。
全部済んだらNextを押そう。

そうするとプロジェクトに名前をつけることになる。

GroupIdは開発者の名前。ドメイン名を逆順につけるのがおすすめらしいので、ぼくの場合はxyz.sironerikになるが、各自で何か適当なものをつけよう(同じの入力しないでね)。ドメイン名がない方は暫定的にマイクラユーザー名などでいいと思う。
ArtifactIdはプロジェクトの名前。今はとりあえずSampleProjectとしておく。
VersionはModのバージョン。バージョン番号のつけ方はいろんな方式があるらしいが後々調べることにして、今はデフォルトのままNextを押す。
そうするとFabricの設定画面になる。

ここでマインクラフトバージョンや、FabricのYarn、Loader、Loomのバージョンを選択できるが、1.17.1の場合は初期状態でOK。他バージョンにしたいときは適宜調整しよう。
デフォルトでチェックされているUse Mixinsは初心者には無用の長物なのでチェックを外しておく(Mixin周りでよくわからないエラーが多いので)。Mixinの使い方がわかったらここでチェックを入れてプロジェクトを作ろう。後日手作業で付け足すこともできる。
その他はデフォルトのままでOKなので、Nextを押す。

最後にプロジェクトのファイル名をつける。先のほうで入力したものと同じでOK。
Project locationは保存場所。Mod製作専用のフォルダがあると便利なのでぼくはそうしている。
Finishを押すとプロジェクトができあがる。このあとは必要なファイルの作成にしばらく時間がかかるので、のんびりと待とう。
しばらく待つとSampleProject.java(とSampleProjectClient.java)が開く。resourcesにfabric.mod.jsonもあれば準備完了である。

Fabric公式のおすすめ設定をしよう(スキップ可)
先のほうにも書いたが、新規にプロジェクトを作ったので、Fabric公式のおすすめ設定を行う。スキップは可能だがおすすめされている設定なので、ぼくはやっている。
コードをコピペしてみよう
ではMinecraft Modding Wikiのコードをコピペしてみることにする。試しに食料追加をしてみよう。
上記リンク先のコードをSampleProject.javaにコピペするのだが、修正部分を最低限にするため、全文コピーはしない。import行と、public class SampleModの中身だけをコピペしよう。package名やクラス名を修正するの面倒くさいからね……。
ちなみに現時点で公開されているコードは以下の通り。
package com.example.item;
import net.fabricmc.api.ModInitializer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
public class SampleMod implements ModInitializer
{
/**
* ModID文字列
*/
public static final String MOD_ID = "samplemod";
//アイテム作成、食料
public static final Item SAMPLE_ITEM = new Item(new Item.Settings().group(ItemGroup.MISC).food(new FoodComponent.Builder().hunger(3).saturationModifier(6f).statusEffect(new StatusEffectInstance(StatusEffects.SPEED, 20*10), 1).build()));
@Override
public void onInitialize()
{
//アイテム登録
Registry.register(Registry.ITEM, new Identifier(MOD_ID, "sample_item"), SAMPLE_ITEM);
}
}
}
これをコピペするとエラーが発生する。

赤い字の上にカーソルを持っていってクリックしてみると、「FoodComponentなんて知りませんが?」と言われていることがわかった。
エラーの解決方法
青いフキダシで表示されているとおり、Alt+Enterを押してみよう。そうすると自動的にimport行が1つ増える。

これによりFoodComponentは無事インポートされ、解決できた。が、まだエラーが2つある(右上にある赤い!の数)。これらも同様に赤い字の上でAlt+Enterを押していく。
なお今回の場合、StatusEffectInstanceはAlt+Enterを押したときにメニューが表示された。こうなったときは「Import class」を選択する。

サンプルコードをコピペしてエラーが出たときは、このようにして解決できる。
ビルドして実行してみる
ではエラーがなくなったので実行してみることにしよう。手順はコードをダウンロードしたときと同じ。
だが今回はまたエラーが表示され、起動できなかった。

よく読むと「fabric.mod.jsonがおかしいよ」と言われているようだ。(赤い×二つ目)
さらによく読むと「Sが使われています。小文字にしてください。大文字はダメです。Pも同様に不可」と書かれている。(直下の黒丸2つ)

なのでfabric.mod.jsonを見てみると、黄色くハイライトされた部分が確かに大文字になっている。"id"の欄は、全部小文字でないといけない。

なので小文字に直した。ハイライトも消えた。
(ついでにアイコンが無かったのでダウンロードしたサンプルプロジェクトの中からアイコン画像を入れた。画像を用意していない人はassets/SampleProject/icon.pngが赤字になっていると思う)
赤字がなくなったので緑の再生ボタンを押すと、今度は正常起動した。したよね? 起動しなかった人はエラー解決を頑張ろう。あまりに手に負えないときは1からプロジェクトを作り直してみよう。
マインクラフト内で動作を確認する
クリエイティブワールドを作って作成したアイテムを探すとMiscellaneous(その他)の中に入っていた。

こいつは食えるらしい。なのでインベントリに入れて食べてみることにした。

本当に食えるな……。見た目がシュール。

しかもSpeedの効果つきであった。そういえばコードにstatusEffect(new StatusEffectInstance(StatusEffects.SPEED, 20*10), 1)って書いてた。
というわけでサンプルコードをコピペ保存から実行に成功した。
ここまでできれば、サンプルコードの組み合わせでできるものは初心者でも作れる。MOD開発に関して解説しているサイトはいくつかあるので、見ながらいろいろやってみよう。
この先で解説できることはぼくにはまだない。まだいろんなサンプルコードを実行して微調整してみている段階だから……。
おわりに
プログラミング関連って、あんまり素人すぎると解説がないんだよね。メジャーな言語や媒体ならそうでもないのかもしれないが、マイクラでFabricでModを作ろうと思うとそこそこの技術力がある人が対象らしく、ぼくのような初心者はサンプルコードを実行できるようになるまでに時間がかかった。
なので同じぐらいの段階の人の助けになればと思い、記事を残すことにした。
MOD製作に興味がある初心者の皆さん、楽しんでやっていこう。