Minecraft Mod 開発環境構築 (IntelliJ IDEA + Minecraft Forge 1.15.2) + Hello World Mod 作成


概要

  • IntelliJ IDEA に Minecraft Mod の開発環境を構築して、シンプルな Hello World Mod を作成する

環境

  • Minecraft 1.15.2
  • Minecraft Forge 1.15.2-31.1.0
  • macOS Catalina
  • Java 8 (AdoptOpenJDK)
  • IntelliJ IDEA 2019.3.1 (Community Edition)

IntelliJ IDEA に開発環境を構築

Java 8 のインストール

今回の開発環境では Java 11 以降がサポートされていないため、事前に Java 8 をインストールしておく必要がある。

参考: Java 8 (OpenJDK: AdoptOpenJDK) を Homebrew で macOS にインストールする - Qiita

Mdk (Mod Development Kit) のダウンロード

現時点 (2020年2月16日現在) の推奨環境である Minecraft Forge 1.15.2-31.1.0 の Mdk (Mod Development Kit) を Minecraft Forge からダウンロードする。

ダウンロードした forge-1.15.2-31.1.0-mdk.zip を展開する。

$ unzip forge-1.15.2-31.1.0-mdk.zip 
Archive:  forge-1.15.2-31.1.0-mdk.zip
  inflating: gradlew                 
  inflating: gradlew.bat             
  inflating: CREDITS.txt             
  inflating: LICENSE.txt             
  inflating: changelog.txt           
   creating: gradle/
   creating: gradle/wrapper/
  inflating: gradle/wrapper/gradle-wrapper.properties  
  inflating: gradle/wrapper/gradle-wrapper.jar  
  inflating: .gitignore              
   creating: src/
   creating: src/main/
   creating: src/main/java/
   creating: src/main/java/com/
   creating: src/main/java/com/example/
   creating: src/main/java/com/example/examplemod/
  inflating: src/main/java/com/example/examplemod/ExampleMod.java  
   creating: src/main/resources/
  inflating: src/main/resources/pack.mcmeta  
   creating: src/main/resources/META-INF/
  inflating: src/main/resources/META-INF/mods.toml  
  inflating: build.gradle            
  inflating: README.txt              
  inflating: gradle.properties       

README.txt にセットアップ方法が載っている。

If you prefer to use IntelliJ:
1. Open IDEA, and import project.
2. Select your build.gradle file and have it import.
3. Run the following command: "gradlew genIntellijRuns" (./gradlew genIntellijRuns if you are on Mac/Linux)
4. Refresh the Gradle Project in IDEA if required.

参考: MinecraftForge/mdk at 1.15.x · MinecraftForge/MinecraftForge · GitHub

IntelliJ IDEA で Import Project

IntelliJ IDEA で Import Project にて展開したフォルダを指定してプロジェクトを作成する。

以下のようなメッセージが出力された場合は適切な Java のバージョンが設定されていない。

> Failed to apply plugin [id 'net.minecraftforge.gradle']
   > Found java version null. Minimum required is 1.8.0_101. Versions 11.0.0 and newer are not supported yet.

IntelliJ の設定 Preferences > Build, Execution, Deployment > Build Tools > Gradle > Gradle JVM にて Java 8 以降の JVM を指定する必要がある。

./gradlew genIntellijRuns

IntelliJ IDEA の Terminal などで ./gradlew genIntellijRuns を実行する。

$ ./gradlew genIntellijRuns

ここでも Java 8 以降が使われるため、必要に応じて設定をしておく。
参考: Java 8 (OpenJDK: AdoptOpenJDK) を Homebrew で macOS にインストールする - Qiita

開発用 Minecraft Forge の起動

IntelliJ IDEA 右上にある Gradle Tool Window から Tasks > fg_runs > runClient を実行するか、または Terminal などから ./gradlew runClient を実行すると Minecraft が起動する。

「Mods」 をクリックすると Mdk に同梱されている Example Mod が読み込まれていることがわかる。

Example Mod について

Mdk には Mod 開発のサンプルとして Example Mod のソースコードが同梱されている。

ソースコード一覧。

  • src/main/java/com/example/examplemod/ExampleMod.java
  • src/main/resources/pack.mcmeta
  • src/main/resources/META-INF/mods.toml
  • build.gradle

MinecraftForge/mdk at 1.15.x · MinecraftForge/MinecraftForge · GitHub でソースコードの中身を確認することも可能。

Hello World Mod の作成

構築した開発環境上にて、シンプルな Hello World を実現する Mod を作成する。

ソースコード一覧

  • src/main/java/com/example/HelloWorldMod.java
  • src/main/resources/pack.mcmeta
  • src/main/resources/META-INF/mods.toml
  • build.gradle

src/main/java/com/example/HelloWorldMod.java

Mod のメイン処理を実行する Java のクラスを記述する。

package com.example;

import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;

@Mod("helloworldmod") // META-INF/mods.toml に記述した modId
public class HelloWorldMod {

  public HelloWorldMod() {
    // MinecraftForge.EVENT_BUS で処理するイベントのハンドラメソッドを持つオブジェクト(this)を登録
    MinecraftForge.EVENT_BUS.register(this);
  }

  /**
   * プレイヤーのログイン時に実行するイベントハンドラメソッド。
   * メソッド名は任意のもので良い。
   *
   * @param event PlayerLoggedInEvent オブジェクト
   */
  @SubscribeEvent
  public void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) {
    PlayerEntity player = event.getPlayer();
    BlockPos pos = player.getPosition();
    String message =
      "Hello, World!\n"
        + "[name]=[" + player.getName().getFormattedText() + "]\n"
        + "[pos]=[" + pos.getX() + "," + pos.getY() + "," + pos.getZ() + "]";
    ITextComponent text = new StringTextComponent(message);
    player.sendMessage(text);
  }
}

src/main/resources/pack.mcmeta

リソースパック情報記述用ファイル。このファイルが無いと 「failed to load a valid ResourcePackInfo」 などのエラーが発生してしまう。
ここでは最低限の内容のみ記述する。

{
  "pack": {
    "description": "Hello World mod resources",
    "pack_format": 5
  }
}

src/main/resources/META-INF/mods.toml

Mod 情報記述用ファイル。
ここでは最低限の内容のみ記述する。

modLoader="javafml"
loaderVersion="[31,)"

[[mods]]
modId="helloworldmod"
version="1.2.3"
displayName="Hello World Mod"
description='''
This is the ...
Hello World mod.
'''

build.gradle

Gradle 用ビルド設定ファイル。
ここでは最低限の内容のみ記述する。

buildscript {
  repositories {
    maven { url = 'https://files.minecraftforge.net/maven' }
    jcenter()
    mavenCentral()
  }
  dependencies {
    classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true
  }
}
apply plugin: 'net.minecraftforge.gradle'

version = '1.2.3'
group = 'com.example.helloworld'
archivesBaseName = 'helloworldmod'

sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8'

minecraft {
  mappings channel: 'snapshot', version: '20190719-1.14.3'
  runs {
    client {
      workingDirectory project.file('run')
      property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
      property 'forge.logging.console.level', 'debug'
      mods {
        helloworldmod {
          source sourceSets.main
        }
      }
    }
  }
}

dependencies {
  minecraft 'net.minecraftforge:forge:1.15.2-31.1.0'
}

配布用 jar ファイルを生成

IntelliJ IDEA 右上にある Gradle Tool Window から Tasks > build > build を実行するか、または Terminal などから ./gradlew build を実行する。

$ ./gradlew build

配布用の jar ファイルが build/libs ディレクトリに出力される。

$ ls build/libs/
helloworldmod-1.2.3.jar

Minecraft Forge で実行

正規版 Minecraft Java Edition の Minecraft Launcher を起動して Minecraft Forge 1.15.2-31.1.0 用の構成を設定する。

作成した jar ファイルを設定した構成のゲームディレクトリの mods ディレクトリに設置して、Minecraft Forge 1.15.2-31.1.0 を起動。

Hello World Mod が読み込まれているのを確認できる。

ワールドに入るとチャット欄に Hello World が表示される。

参考資料