対象者
- IntelliJ IDEAでModdingしている
- FabricのModding初心者
- 対応しているMinecraftのバージョンを1.17にしたい人
- 1.17対応のModを新規開発したい人はこの記事を読まずにFabricのGitHubに上がっているModサンプルをベースに開発した方が速いです
参考
開発環境について
開発環境についてみる
移行のためにまずやったこと
まずは移行するために、ブランチをチェックアウトしてgradle.properties
を下記のように編集しました。このファイルはGradleにおけるbuild.gradle
のdependencies
タスクが実行されるときなどに読み込まれる値のため、このファイルを変更すればGradleで定義されているFabricに関する依存関係やMinecraft本体のソースコードの難読化解除に利用するマッピングなどが変更出来るので編集しました。
なお、このファイルのテンプレートは参考の2番目のリンクで簡単に作成できますので見てみてください。
# Done to increase the memory available to gradle.
org.gradle.jvmargs=-Xmx1G
# Fabric Properties
# check these on https://fabricmc.net/use
minecraft_version=1.17
yarn_mappings=1.17+build.9
loader_version=0.11.3
# Mod Properties
mod_version = 1.0
maven_group = hogehoge
archives_base_name = hogehoge
# Dependencies
# currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api
fabric_version=0.35.0+1.17
※2021/06/14時点 今後マッピングファイルなど更新されると思いますので各自変更してください。
躓いたポイント
上記のファイルを編集するだけで1.17の開発環境へ移行できると思っていたのですが、違いました。。。。。。
躓いたポイントとしては下記の通りです。
'fabric-loom'プラグインの適用に失敗する
このケースでは以下のようなエラーが出ると思います。
org.gradle.api.plugins.InvalidPluginException: An exception occurred applying plugin request [id: 'fabric-loom', version: '0.x-SNAPSHOT']
Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin 'fabric-loom'.
これは'fabric-loom'プラグインのバージョンとFabricの依存関係のバージョンが適合してない為に出るエラーです。なのでbuild.gradle
の一番上に記されているfabric-loom
のバージョンを参考の2番目のリンク一番下に記されているLoom Version
の推奨バージョンに変更します。
plugins {
id 'fabric-loom' version 'ここを推奨バージョンに変更する'
id 'maven-publish'
}
## JDK16を要求される
さてfabric-loom
を推奨バージョンに変更後Gradleを実行しなおすとおそらく下記のようなエラーが出ます。
> Failed to apply plugin 'fabric-loom'.
> You are using an outdated version of Java (8). Java 16 or higher is required.
You can change the Java version in the Gradle settings dialog.
現在Gradleを実行してるJDKがJava8つまり1.8でfabric-loom
のプラグインを適用するにはJava 16以上が必要みたいですね。
Minecraft 1.17の情報をあまり追いかけてなかったので知らなかったのですが、どうやら1.17からJDK16になったようです。これに伴い、Modをビルドするときに使うJDKも16にする必要があります。
IDEAでJDK16を使うように設定
IDEA Community 2021.1ではOpenJDKをダウンロード出来るようになってるので下記の通り出来ます。
「File」の「Project Structure...」を開いて
「Project」の「Project SDK」のプルダウンを開いて「Add SDK」で「Download JDK」を開く
あとはここのウィンドウでJDK16をダウンロードするだけです。
GradleでビルドするときにJDK16を使ってビルドさせるように設定
GradleでビルドするときのJDKを指定するにはbuild.gradle
を下記のように書き換えます。
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
変更前
sourceCompatibility = JavaVersion.VERSION_16
targetCompatibility = JavaVersion.VERSION_16
変更後
これでJDK16でビルドされるようになります。
## Gradleが動かない
このケースだと下記のようなエラーが出ると思います。
Caused by: org.gradle.api.GradleException: Failed to create Jar file fabric-loom-0.x-SNAPSHOT.jar.
Caused by: java.lang.IllegalArgumentException: Unsupported class file major version 60
これはGradleがJava 16に対応していない為出るエラーです。
そのためGradleをJava 16に対応させる必要があります。Gradleはバージョン7以降からJava 16に対応しているため、Projectフォルダ内のgradleフォルダからwrapperフォルダにあるgradle-wrapper.properties
ファイルのdistributionUrl
を編集して利用するGradleのバージョンを変更します。
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-bin.zip
変更前
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
変更後
このようにバージョン7以降を使うように変更します。
## import net.minecraft.*
が名前解決できない
名前解決が出来なくなった根本的な原因は未だにわかりませんが、直接的な原因はGradleが持ってきたnet.minecraft.minecraft
のライブラリがうまく読み込まれないのが原因です。
その為ライブラリをうまく読み込ませるために、IntelliJ IDEAの「File」から「Project Structure」をひらいて「Librarys」を開きます。
Librarysを平板直後
ここからGradle: net.minecraft.minecraft:1.17-mapped~~~
を探し選択します。
このウィンドウで下記の赤く囲ったところを押して
Classesで選択されている物とおなじjarファイルを選択してOKを押します。
するとSourcesに選択したjarが追加されると思うのでそのままOKを押すとnet.minecraft.*
の名前が解決されるようになります。
1.16のときはこんな面倒な事をしないでも自動でソースコードを適用してくれていたのですが......よくわかりません。
バージョンアップ時に覚えておくと便利かもな豆知識
Yarn mappingsを利用した半自動でのバージョンアップ
これは、yarn mappingsに定義されているマッピングがマッピングファイルのバージョンアップで変更された際に半自動で変更点を書き換えたソースコードを作成してくれる物です。
例えば、今回のように1.17のマッピングファイルにバージョンアップする際にはIDEAのターミナルでGradleのタスクを実行することで変更点を書き換えたソースコードを作成してくれます。なお、タスクはgradle.properties
を書き換える前に実行しなければ意味がありません。
gradlew migrateMappings --mappings "1.17+build.9"
このタスクを実行するとremappedSrc
フォルダに書き換え後のソースコードが作成されています。
ただしこれは見出しにもあるように半自動なので、すべてのソースコードが1.17に対応するように書き換えられる訳ではなく、あくまでもマッピングファイルによって変更された場所だけが変わるので注意が必要です。とはいえ、全部手動で書き換えるよりも楽ができるので便利なのには変わりはありません。
最後に
私が躓いたポイントが誰かしらの役に立てば幸いです。