はじめに
Minecraft Java版では「Mod」を導入することで、ブロック・アイテム・システムなどを自由に拡張できます。
本記事では Minecraft Forge 1.20.1 を使用し、VSCodeでMod開発環境を構築 → 「/hello」コマンドの実装 までを解説します。
本記事ではJavaの文法解説は行いません。
環境構築〜簡単なMod作成までを対象にしています。
対象読者:
- Mod制作に初挑戦
- Forgeを触ったことがない
- IntelliJではなくVSCodeを使いたい
- Javaはなんとなく触ったことがある
開発環境
今回の環境:
- Minecraft:1.20.1
- Forge:1.20.1
- Java:17
- エディタ:VSCode
- OS:Windows想定(Mac/Linuxでも概ね同じ)
① Java 17 をインストール
Forge 1.20.1 では Java 17 が必須です。
ダウンロード
Adoptium などからJDK17を取得します。
下記のサイトから自身の環境に合わせてダウンロードし、インストールしてください。
インストール後、ターミナルで確認:
java -version
17 と表示されればOK。
インストール後に再起動をしないとエラーが出る可能性があります。
② Forge MDK をダウンロード
Forge公式サイトへアクセス:
- Version:1.20.1
- MDK(Mod Development Kit)をダウンロード
ZIPを任意のフォルダに展開します。
例:
C:\MinecraftMod\helloworld
③ VSCode を準備
VSCodeをインストール後、以下拡張機能を導入:
- Extension Pack for Java
- Gradle for Java
④ プロジェクトをVSCodeで開く
展開したMDKフォルダをVSCodeで開きます。
File → Open Folder
⑤ Gradleセットアップ
この操作は、VSCodeのメニューからMinecraftを起動するための設定ファイルを作成するものです。ターミナルからコマンドのみで起動する場合はスキップ可能ですが、デバッグ機能が便利なので実行しておくことをおすすめします。
VSCodeでデバッグ機能(ボタン一つでMinecraftを起動する機能)を使えるようにするための準備をします。
ターミナルを開き、以下のコマンドを実行してください:
./gradlew genVSCodeRuns
これが完了すると、プロジェクト内に .vscode フォルダが自動生成され、後の手順で紹介する「デバッグ起動」が可能になります。
※この手順は一度実行すればOKです。これを行わないと、VSCodeのメニューに「runClient」が表示されません。
⑥ 動作確認(Minecraft起動)
VSCodeの「実行とデバッグ」から:
runClient
を起動。
Forge入りMinecraftが立ち上がれば成功。
よくあるエラー: `java.util.NoSuchElementException: No value present`
起動時にこのエラーが出て止まる場合、プロジェクトを置いているフォルダ名(パス)にスペースが含まれているのが原因であることがほとんどです。
-
NG:
C:\Minecraft Mod\Project(スペースがある) -
OK:
C:\MinecraftMod\Project(スペースなし)
対策: スペースを含まないパスにフォルダごと移動し、再度 gradlew genVSCodeRuns を実行してください。
⑦ Mod情報を編集
src/main/resources/META-INF/mods.toml
を編集。
例:
modId="helloworld"
displayName="Say Hello World!"
version="1.0.0"
⑧ メインModクラス
src/main/java/com/example/helloworld/Helloworld.java
Forge MDKに最初から入っています(デフォルトでは ExampleMod.java という名前なので、リネームするか中身を書き換えてください)。
基本構造:
package com.example.helloworld;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
@Mod(Helloworld.MODID)
public class Helloworld {
public static final String MODID = "helloworld";
public Helloworld() {
IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
}
}
ここがModのエントリーポイント。
⑨ コマンドを実装する
「/hello」と打つと「Hello World!」と表示されるコマンドを作ります。
コマンドクラスの作成
src/main/java/com/example/helloworld/HelloCommand.java を作成します。
package com.example.helloworld;
import com.mojang.brigadier.CommandDispatcher;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.Commands;
import net.minecraft.network.chat.Component;
public class HelloCommand {
public static void register(CommandDispatcher<CommandSourceStack> dispatcher) {
dispatcher.register(Commands.literal("hello")
.executes(context -> {
// チャットにメッセージを表示
context.getSource().sendSuccess(() -> Component.literal("Hello World!"), false);
return 1;
})
);
}
}
⑩ イベントに登録する
作成したコマンドをMinecraftに認識させるため、イベントに登録します。
メインクラスの編集
Helloworld.java に追記します。Forgeのイベントバスを使用します。
package com.example.helloworld;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.RegisterCommandsEvent;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
@Mod(Helloworld.MODID)
public class Helloworld {
public static final String MODID = "helloworld";
public Helloworld() {
IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
// Forgeのイベントバスに自身を登録
MinecraftForge.EVENT_BUS.register(this);
}
// コマンド登録イベント
@SubscribeEvent
public void onCommandsRegister(RegisterCommandsEvent event) {
HelloCommand.register(event.getDispatcher());
}
}
⑪ 再起動して確認
再度 runClient を実行します。
ワールドに入り、チャット欄(Tキー)で以下を入力:
/hello
チャットに Hello World! と表示されれば成功です!
⑫ Modをビルドする(配布用ファイルの作成)
開発したModを他の人に渡したり、実際のMinecraft環境(VSCode外)で動かしたりするには、JARファイルとしてビルドする必要があります。
ターミナルで以下のコマンドを実行します:
./gradlew build
ビルドが成功すると、プロジェクトフォルダ内の以下の場所にJARファイルが生成されます:
build/libs/helloworld-1.0.0.jar
(※ファイル名は mods.toml や build.gradle の設定により変わります)
このJARファイルを、Minecraftの実行フォルダにある mods フォルダに入れれば、作成したModが読み込まれます。
トラブルシューティング
Javaバージョン違い
- 17以外 → 起動失敗
コマンドが認識されない
-
MinecraftForge.EVENT_BUS.register(this)を忘れている -
@SubscribeEventが付いていない
構文エラー
- セミコロンや波括弧の閉じ忘れ
まとめ
- Forge MDK をDL
- VSCode + Java拡張導入
- gradlew genVSCodeRuns
- HelloCommand クラスを作成
- RegisterCommandsEvent で登録
- runClient で動作確認
- gradlew build で製品版ビル
ここまでできれば、引数付きのコマンドや、プレイヤーの座標を操作するコマンドなどへ発展できます。



