【Minecraft Forge 1.12.2】Modの作り方(令和最新版)

こんにちは。この記事では、MinecraftJE 1.12.2のForgeのためのModの作り方を、最新版のMDKのREADMEと筆者の体験をもとに説明します。

ここで作成するModは、「ダイヤモンドのレシピを追加し、土5つでダイヤモンドを作れるようにする」という初心者向けのものになります。
もっと高機能なものを作りたい場合は、Mod制作者のためのwiki等でサンプルコードといったものを探すなどしてみましょう。

注意1:この記事では、すでにeclipseのインストールが終わり起動できたところからスタートします。eclipseのインストールについては別の記事を参照してください。
注意2:この記事では、JDK1.8(v311)のインストールと%JAVA_HOME%の環境変数の設定が自力で行えることを前提としています。JDKのインストールと環境変数の設定については別の記事を参照してください。
eclipseのインストールについては、このような記事が参考になるかと思います。
また、環境変数の設定については過去記事「Forgeのインストーラーが動かない時の対処(windows)」の後半が参考になるかと思います。

備忘録としてトラブル対処集だけ先行公開します!

記事のメイン部分は急ピッチで執筆中で、後日公開します。タイトル詐欺に遭われた方には深くお詫び申し上げます。

トラブル対処集

1. An illegal reflective access operation has occurredと出て起動できない

多分、ググってこのページにたどり着いた方は、幾多ものページで「Java9になってる」と言われ、JavaのビルドパスやJAVA_HOMEの環境変数を見直して「java1.8.0」を飽きるほど確認した方がいることでしょう。
これは、Java1.8.0を指定すべき場所がこれらではなかったことが原因です。

上のウィンドウから設定を開き、「 Gradle 」を開くといくつかの設定が出てきます。

そこに「拡張オプション」の「Java ホーム」があるのですが、ここをJava1.8.0のディレクトリにしなければなりません。

Eclipse上で動くGradleは、JAVA_HOMEと言われても基本的にはwindowsのJAVA_HOMEを参照せず、Eclipse内で完結するためにEclipseのJAVA_HOMEを参照します。
その際、ここのJavaホームが空欄になっていると、自動でEclipseに付属していたJavaランタイムを使うこととなり、知らぬ間にjava9以上で動かすことになってしまうのです。

ここをきちんとJava1.8.0で指定してあげることで、GradleがJAVA_HOMEに行こうとしたときに迷ってEclipseのJava12や13へ行くことがなくなります。

2. 今度は java.nio.ByteBuffer.flip()Ljava/nio/ByteBuffer が出る

注意:この項目では、現在実行中のプロセスを強制終了することが必要になる場合があります。一連の動作を自力で行える人が対象です。また、自己責任にて行ってください。

このチャプターを見ている人は1も見たと思います。これもググった方は実行はjava8だがコンパイルがJava9と言われ怒り心頭したところでしょう。

対処法は、gradleのキャッシュを削除してコンパイルし直すことです。

gradleのキャッシュと聞いて、eclipseのキャッシュクリーンアップとgradleのリフレッシュは何度もしたと思う方もいるかもしれません。
ですがこれはeclipseだとかプロジェクトディレクトリだとかいう狭い話ではなく、User直下にある.gradleフォルダのchacheのことです。

細かい説明は省きますが、C:\Users\ユーザー\.gradle\cacheのフォルダを削除してから、MDKのzip解凍あたりからのすべての作業をやり直しましょう。時間はかかりますが、今度はすべてJava1.8.0でビルドされ成功するはずです。

chacheフォルダを削除する際は、万が一のことに備えバックアップを取っておくことを推奨します。また、削除のために止めたプロセスの再起動等のため、削除後はパソコンを再起動しておきましょう。

参考: NoSuchMethodError ByteBuffer.rewind()

3. No mod information found となってしまった

mcmod.infoが正しく読み込まれておらず、authorなどの情報がしっかり表示されていませんね。
もしこのような「 No mod information found Ask your mod author to provide a mod mcmod.info file 」が出てしまった場合、うまくデバッグする環境にmcmod.infoが持ち込まれていないことが原因です。

Image

その場合は、下記のコードを build.gradle の一番下に追加しましょう。

sourceSets {
    main { output.resourcesDir = output.classesDir }
}

筆者の場合、これを書き加えたことにより build.gradle の105行目以降はこのようになりました。

publishing {
    publications {
        mavenJava(MavenPublication) {
            artifact jar
        }
    }
    repositories {
        maven {
            url "file:///${project.projectDir}/mcmodsrepo"
        }
    }
}
sourceSets {
    main { output.resourcesDir = output.classesDir }
}

もう一度 runClient を実行してみると、このようにmcmod.infoの内容が表示されたかと思います。

参考:Minecraft Forge 1.12.2 14.23.5.2854 won’t load my mcmod.info file

コメントを残す

メールアドレスが公開されることはありません。