このウェブページには広告が含まれています。

MOD 作り入門・マイクラJava版

マインクラフト

マインクラフト(マイクラ)をプレイしていて、こんなアイテムや機能があったらいいのに、といったアイデアが浮かぶことはないでしょうか? そのような、元々のゲームのルールや機能を変更するプログラムが MOD です。

マイクラ Java版では、ForgeFabric といった 前提MOD が提供する API を使うことで、比較的簡単に自分のアイデアを MOD として実装できます。これらの前提 MOD では、どちらかと言うと Fabric のほうがアプリ開発に対する考え方が新しく、より少ない労力で MOD の開発ができるように思います。

Fabric を用いた MOD 作りを始める場合は、まず、Fabric Wiki に書かれている開発者向けのチュートリアルを熟読する必要があります。しかし、どんな物事でも初めて手掛けるときは、ささいなことが分からずに時間だけがかかってしまったりするものです。

そこでこの記事では、今までマイクラの MOD を作ったことがない、という人に向けて、Java の開発環境を用意するところから始めて、Fabric を使った非常に単純な MOD を作り、実際のゲームプレイ環境で動かすところまでを解説します。Fabric版の Hello world! を作る解説、といったところです。

この記事の内容は、主に Windows 上で Fabric を前提としたマイクラ Java版 1.21.3 の MOD を開発することを想定しています。しかし、他の OS 上で MOD を開発する場合でも、ある程度参考になると思います。

なお、実際の MOD 作りに役立ちそうな小技を下の記事にまとめています。

必要なもの

まず、Java での開発を行うには、それなりのスペックの PC が必要になります。しかし、MOD を作りたい、と思うほどのゲーム好きであれば、これは恐らく問題にはならないでしょう。

次に必要になるのは、Minecraft のライセンスです。実は、MOD を開発する段階ではマイクラの製品を購入している必要はありません。しかし、作った MOD を実際のゲームプレイ環境で動かすには、当然のことながら、マイクラのライセンスが必要になります。

これも、マイクラの MOD を作りたい、と思う人であれば、とっくの昔に購入しているはずです。

マイクラの MOD を作る上で最大の問題となるのはプログラミングの知識と経験です。

マイクラは、2024年11月現在、世界で最も売れたゲームであり、今でも毎年のように新しいコンテンツが追加されています。そのコードは高い技術力にもとづいて書かれています。それを読みこなし改変を加えるには、プログラミングに関する高い見識が必要です。

マイクラのコードは、Java では当然のように使われる オブジェクト指向プログラミングイベント処理ラムダ式、といったプログラミング技法の理解なしには読むことができません。1ページ程度の手続型のコードが書ける、といったレベルの経験では恐らく無理でしょう。

しかし、Java についての知識があまりなくても、C++ や C# など、他のプログラミング言語を使ったオブジェクト指向プログラミングの技術があり、何らかの GUI を自分で作った経験があれば、どうにか MOD を作れてしまいます。

大切なのは、Java そのものについて知っている、ということよりも、オブジェクト指向というプログラミングに対する考え方をよく理解している、ということなのだと思います。

開発環境を作る

JDK の導入

まず、マイクラ Java版用の MOD の開発を行うのですから Java の開発環境が必要になります。現在のマイクラは JDK 21 で開発されています。JDK の最新版は JDK 23 ですが、ここでは JDK 21 をインストールします。

JDK 21 をダウンロードするには次のリンクから Oracle のウェブサイトに行きます。

表示されたウェブページで JDK 21 のタブを選び、さらに OS のタブを選びます。Windows のタブを選んだ場合は、zip アーカイブと exe、msi の2種類のインストーラが示されるので、好みのものをダウンロードします。

インストーラーを使った場合は、起動して指示に従うだけで JDK 21 のインストールが完了します。

統合開発環境の導入と設定

Java の開発環境が整ったとしても、テキストエディターとコマンドラインを使って開発を進める、などということはあまりしないでしょう。現在では何らかの 統合開発環境(IDE)を使うのが一般的です。

Java での開発を行える IDE はいくつかありますが、既に使い慣れた他の IDE がある、ということでなければ、IntelliJ IDEA を使うのがお勧めです。

この IDE は無料で使うことができます。また、マイクラの MOD 開発のコミュニティーでは標準的に使われているようで、Fabric Wiki の内容もそれに沿って書かれています。

IntelliJ IDEA をダウンロードするには次のリンクから JetBrains のウェブサイトに行きます。

ウェブページにある Download ボタンを押すと、ダウンロードページに行くので、ページのいちばん上にあるタブで開発を行う OS を選びます。Windows のタブを選んだ場合は、exe 形式のファイルをダウンロードできる状態になります。

IntelliJ IDEA には IntelliJ IDEA Ultimate という 有料版IntelliJ IDEA Community Edition という 無料版 があります。この記事で使うのは無料版です。ウェブページの背景が白い部分に有料版、その下の背景が黒い部分に無料版のダウンロードボタンがあるので、間違えないようにしてください。

Download ボタンを押すと、exe 形式ファイル、zip アーカイブ、ARM64用 exe 形式ファイルの3つの選択肢が示されます。Intel 製のプロセッサーを使っている場合は、exe 形式のインストーラーを使うのが便利だと思います。インストーラーを起動して指示に従えばインストールが完了します。

IntelliJ IDEA を起動すると、初回では、言語設定、使用許諾契約、データ共有についての画面が現れます。これらの画面を通過すると、Welcome to IntelliJ IDEA という初期画面が現れます。

この状態で、マイクラの MOD を開発するためのプラグインを導入しておきます。これは、後から設定画面で行うこともできます。初期画面には表示されていませんが、開発中に設定画面に行くには、ウィンドウの上部にある歯車のマークを押します。

初期画面左の Plugins の項目か、または、歯車のメニューで Plugins の項目を選びます。Marketplace のタブを選んで Minecraft を検索すると Minecraft Development というプラグインが現れるので、これをインストールします。IDE を再起動するとプラグインが導入されます。

この IntelliJ IDEA は、全体としては使いやすい IDE なのですが、細かい点で使う人を戸惑わせる動作をすることがあります。

例えば、新しいプラグインを導入する、新しいプロジェクトを開く、など、開発に関係する条件を変化させた場合、その変化が IDE に反映されないことがあります。そのような場合は、プロジェクト閉じて開き直す、IDE を終了して起動し直す、といった操作をすると改善します。何らかの問題が起きた場合は試してみてください。

テンプレートを作る

Fabric を前提とした MOD 開発では、開発者の便宜のために提供される MOD のテンプレートを利用することができます。

このテンプレートにはほとんど何の機能もなく、ただマイクラが起動したときに読み込まれ、マイクラの終了と共に終了します。MOD の開発者は、このテンプレートに独自の機能を追加することで開発を進めることができます。

この記事では、このテンプレートに簡単な機能を追加してみます。

テンプレートを作るには、開発者の名前 MOD の名前 を決めておく必要があります。

ここで特に、開発者の名前を決める際には注意が必要です。このテンプレート作成のウェブページで入力する開発者の名前は Java のパッケージ名で許される形式でなければなりません。

もちろん、開発者として普段、どのように名乗るかは自由なのですが、このウェブページで入力する時には、英字の大文字やハイフン(-)が使えません。そしてどうやら習慣として、CurseForge のような MOD を公開するウェブサイトでは、皆この形式の名前を使っているようなのです。

例えば、私は いったんもめん と名乗っていて、ウェブサイトのドメインネームは ittan-momen.net なのですが、MOD の開発者としては ittan_momen としています。

もし将来、作った MOD を広く公開する予定があるのであれば、開発者の名前としてパッケージの名前が使われるかもしれない、ということを考慮してください。MOD を公開する場所で、他の開発者と名前がかぶらないことを確認する必要もあります。

MOD のテンプレートを作るには、次のウェブサイトに行きます。

この記事では、開発者の名前を fabric_beginner、MOD の名前を My First MOD としましょう。

Mod Name: My First MOD
Package Name: fabric_beginner.my_first_mod

のように入力し、開発を行いたいマイクラのバージョンを選びます。この記事の内容は JE 1.21.3 を想定しています。

次の Advanced Options の 項目では Split client and common sources にチェックが入っていることを確認してください。

これについて少し説明しておきます。マイクラはサーバーとクライアントのふたつの部分に分かれています。マルチプレイではクライアントは PC からネットを経由して外部のサーバーに接続されているのですが、シングルプレイの場合でも、PC 上でローカルなサーバーが動いています。

新しいアイテムを追加するなど、ゲームルールの変更を伴う MOD を作る場合は、サーバーとクライアント双方の動作を変えなければなりません。その一方、HUD に表示する情報を追加する、といった変更は、クライアントの動作のみを変えることで実現できます。

Split client and common sources にチェックを入れると、サーバーとクライアント双方に変更を加えるコードを main、クライアントのみに変更を加えるコードを client のフォルダーに分けて管理することができます。よほど特別なことをしない限り、分けておいたほうが分かりやすいと思います。

最後に、Download Template (.zip) と書かれた青いボタンを押すと、テンプレートが作成されてダウンロードされます。

ダウンロードされた zip 形式のアーカイブを作業用のフォルダーに移して すべて展開 すると、my-first-mod-template-1.21.3 といった名前のフォルダーができます。これで、開発に取り掛かる準備ができました。

テンプレートを動かす

IntelliJ IDEA を起動し、左側の欄から Projects を選んで、さらに Open を選びます。フォルダー構造のツリーが現れるので、先ほど作られた my-first-mod-template-1.21.3 のフォルダーを選びます。OK を押すと、このプロジェクトを信用して開くか、という趣旨の警告がでます。

これは、プロジェクト内に悪意のあるコードが含まれていた場合、開発の過程でそれが実行されてしまう可能性があるからです。ここは Fabric の開発者を信用するしかないので、Trust Project を押します。

ここで、Trust Project のボタンを押してから数分程度、IntelliJ IDEA の操作を何もしないでください。ボタンを押してからしばらくの間、IntelliJ IDEA のウィンドウの右下で見られるように、パッケージをインポートしたりビルドしたり、といった作業が行われます。これを中断すると、プロジェクトを最初から読み込み直さなければならなくなることがあります。

右下のプログレスバーの表示がなくなったら、左側の my-first-mod-template-1.21.3 と名前のついたフォルダーのアイコンを開きます。そこにある、.gradlebuild のフォルダーの部分が黄色くなっていれば、プロジェクトの読み込みは成功しています。

次に、IntelliJ IDEA の最近のバージョンでは問題がないようなのですが、一応、ビルドツールについての確認を行います。

ウィンドウの上にある歯車のアイコンを押し Settings を選びます。新たに開いたウィンドウの左側で、Build, Execution, DeploymentBuild ToolsGradle と進み、右側の Build and run usingRun tests using の部分で Gradle が選択されていることを確認してください。

以前は、ここが勝手に IntelliJ IDEA に変わる、という症状が見られたようで、それがマイクラの MOD の開発の場合には問題を起こすことがあったようです。問題がなければ Cancel するなどして元の画面に戻ってください。

ここで画面の上部を見ると、右向きの三角形▶のアイコンと昆虫のアイコンが灰色で表示されていると思います。このままではデバッグができないので、いちどプロジェクトを閉じもういちど開きます。ウィンドウ左上の横線4本のアイコンメニューを開くボタンです。

プロジェクトを開き直すと、三角形と昆虫のアイコンが緑色になります。アイコンの左側には Minecraft Client と表示されているはずです。これで、クライアント側の MOD をデバッグできる状態になりました。この記事ではサーバー側の変更は行ないません。

ここで、緑色になった三角形▶のアイコンを押してみてください。ここまでがうまく行っていれば、IntelliJ IDEA のウィンドウの下部に実行時のコンソール出力が表示され、マイクラが立ち上がるはずです。コンソール出力を上にスクロールすると、(my-first-mod) Hello Fabric World! という出力があると思います。さらに上にいくと my-first-mod 1.0.0 という MOD が読み込まれている部分があります。これらが確認ができたら、言語や音量などを設定して、マイクラを終了します。

これでテンプレート MOD の動作の確認ができました。

MOD の開発を続けていると、何らかの原因でインポートしているパッケージへの参照が切れ、デバッグ環境のマイクラが実行できなくなることがあります。その場合は IntelliJ IDEA のウィンドウの右端上部にあるゾウのようなアイコンから Gradle タブを開き、更新🔄のアイコンを押してみてください。更新には数分かかります。

MOD に機能を付け加える

ここで、テンプレート MOD にちょっとした機能を付け加えてみます。

まず、テンプレートのコードについて確認をしておきます。IntelliJ IDEA のウィンドウの左側にある src というフォルダーにソースコードがあります。srcmainjavafabric_beginner.my_first_mod の中に MyFirstMOD というクラスがあります。これは ModInitializer クラスを継承しています。Fabric は MOD の存在を検知すると、まず、このクラスを呼び出して初期化します。

MyFirstMOD の内容を読むと、次のような行があります。

public static final String MOD_ID = "my-first-mod";
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
Logger.info("Hello Fabric world!");

1行目で MOD_ID を定義し、2行目では、この MOD_ID を使ってログを書き込むための LOGGER を得ています。そして、MOD の初期化時に呼び出される onInitialize の中で、このログに Hello Fabric world! と書き出しています。

この記事では、main の機能には変更を加えないので、

Hello Fabric world! → [My First MOD] Main initialized

とでも変えておいて、クライアントの変更に取りかかります。

srcclientjavafabric_beginner.my_first_mod の中に MyFirstMODClient というクラスがあります。これは、ClientModInitializer クラスを継承していて、main が初期化された後で呼び出されます。

まず、main の真似をして、この MyFirstMODClient にログの機能を付け加えます。次のようにコードを書き足します。

public class MyFirstMODClient implements ClientModInitializer {
public static final Logger LOGGER = LoggerFactory.getLogger("My First MOD");
@Override
public void onInitializeClient() {
LOGGER.info("[My First MOD] Initializing client");
LOGGER.info("[My First MOD] Client initialized");

}
}

最初の行を入力すると、Logger の部分が赤字になりますが、これは必要なパッケージが参照されていないことを表します。Logger の部分をクリックするかマウスオーバーすると、Import class という表示が出るので、これをクリックすると、コードの import の部分に参照が追加されます。

このように IntelliJ IDEA では、開発に必要なパッケージをある程度自動的に参照してくれます。Logger の赤字が解消しない場合は、main の MyFirstMOD のコードを参考にして、手動で import の記述をしてください。

コードを書き足したら 三角形▶ のアイコンを押して実行してみます。コンソール出力に書き加えた行が出力されることを確認してください。

これだけではあまり面白くないので、もう少し機能を付け加えてみましょう。

少し長いので、次のテキストをコピペするなどして MyFirstMODClient クラスの内容を置き換えます。

package fabric_beginner.my_first_mod;

import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderTickCounter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyFirstMODClient implements ClientModInitializer {

public static final Logger LOGGER = LoggerFactory.getLogger("My First MOD");

@Override
public void onInitializeClient() {
LOGGER.info("[My First MOD] Initializing client");
HudRenderCallback.EVENT.register(this::render);
LOGGER.info("[My First MOD] Client initialized");
}

private void render(DrawContext drawContext, RenderTickCounter renderTickCounter) {
try {
TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
String string = MinecraftClient.getInstance().player.getBlockPos().toString();
drawContext.drawText(textRenderer, string, 0, 0, 0xFFFFFFFF, false);
} catch (Exception e) {
return;
}
}
}

パッケージを参照させるなどしたうえで、マイクラを走らせ、新しいワールドに入ってみてください。あまりカッコよくはないですが、画面の左上にプレイヤーの座標が表示されます。

あとはアイデア次第で、画面の見た目を分かりやすくしたり、美しくしたりするだけです。

実際のゲームプレイ環境で MOD を動かす

MOD の開発が終わりに近づいたり、開発が終わって実用段階に入ったら、実際のゲームプレイ環境で MOD をテストしたり、MOD の配布用のパッケージを作ったりしなければなりません。

これまでに作った MOD を実際のゲームプレイ環境で動かしてみましょう。

マイクラの MOD は jar 形式 のパッケージファイルで配布されます。このファイルはコマンドラインでビルドを行って作ります。

IntelliJ IDEA のウィンドウから行う場合は、左端の下のほうに Terminal のアイコンがあるので、これを押してコンソールを開きます。Windows のエクスプローラーから my-first-mod-template-1.21.3 のフォルダーでコンソールを開いてもビルドができます。

コンソールが開いたら、次のコマンドを実行します。

./gradlew build

デバッグでエラーが出ていなければ、問題なくビルドされるはずです。ビルドされた結果は buildlibs の中に my-first-mod-1.0.0.jar という名前のファイルで出力されます。

こうしてできた jar ファイルを MOD としてマイクラに導入する方法は、ほかの MOD と同じです。

まず、マイクラに Fabric を導入します。Fabric 導入済みのマイクラでは .minecraftmods フォルダー に MOD の jar ファイルを置くことで、マイクラの起動時に MOD が読み込まれます。この mods フォルダーにビルドで出力された jar ファイルと Fabric API の jar ファイルを置き、マイクラを起動します。

Fabric のインストーラーと Fabric API は次のリンクからダウンロードできます。

マイクラを起動して、適当なワールドに入ると、画面の左上にプレイヤーの座標が表示されます。また、.minecraftlogs フォルダー の中にある latest.log に、開発した MOD の ログが残ります。これらを確認してください。

配布の準備

制作した MOD を配布する場合は、バージョン番号やライセンスなどを決め、マイクラや Fabric で参照したり、表示したりできるようにしなければなりません。

まず、my-first-mod-template-1.21.3 フォルダーsrcmainresources フォルダー にある fabric.mod.json ファイルを編集します。以下の項目について編集しておけば、だいたい形になります。

“description”: MOD の説明を書きます。
“authors”: 製作者の名前です。
“contact”: MOD やソースコードを配布するウェブページを記述します。
“license”: MOD のライセンスを記述します。デフォルトでは CC0-1.0 になっています。

MOD のバージョン番号は my-first-mod-template-1.21.3 フォルダー にある gradle.properties ファイル で変更します。デフォルトで mod_version=1.0.0 となっている行があるので、ここに MOD のバージョン番号を記述します。

バージョン番号の振り方は、開発者によって揺れがあるのですが、1.0.0+mc1.21.3 というように、MOD のバージョン番号とマイクラのバージョン番号を + で繋ぐ記法を使っている人が多いようです。

ライセンスに関する文書や README ファイルjar ファイル に含める場合は、my-first-mod-template-1.21.3 フォルダー にある build.gradle ファイルの jar の項目に指示を書き込みます。例えば、

jar {
from("LICENSE") {
rename { "${it}_${project.base.archivesName.get()}"}
}
from("README") {
include { "README"}
}
}

とすれば、テンプレートに付いてきた LICENCE ファイルと共に README ファイルを jar に含めることができます。

最後に、MOD のアイコン画像を my-first-mod-template-1.21.3 フォルダーsrcmainresourcesassetsmy-first-mod フォルダー の中に PNG 形式で icon.png という名前をつけて保存します。画像のサイズは 500×500 ピクセル程度で十分です。

以上の変更を行ったうえでビルドをやり直すと、公開用の jar パッケージファイルを作ることができます。

PeaZip のようなアーカイバーを使えば、作成した jar パッケージの中に必要なファイルが含まれていることを確認できます。

また、作成した MOD と Fabric API に加えて、次のリンク先のウェブページでダウンロードできる Mod Menu という MOD を導入すると、アイコン画像や fabric.mod.json で編集した内容を確認できます。