4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Minecraft Fabric】1.16から1.17へ移行するにあたって少し戸惑った話。初心者が移行時に躓くポイントをぶっ壊す!

Posted at

対象者

  • IntelliJ IDEAでModdingしている
  • FabricのModding初心者
  • 対応しているMinecraftのバージョンを1.17にしたい人
    • 1.17対応のModを新規開発したい人はこの記事を読まずにFabricのGitHubに上がっているModサンプルをベースに開発した方が速いです

参考

開発環境について

開発環境についてみる
## 1.16での開発環境
項目 内容
IDE IntelliJ IDEA Community 2021.1
Yarn mappings 1.16.1+build.1
Fabric loader version 0.8.8+build.202
Fabric version 0.13.1+build.370-1.16

1.17での開発環境

項目 内容
IDE IntelliJ IDEA Community 2021.1
Yarn mappings 1.17+build.9
Fabric loader version 0.11.3
Fabric version 0.35.0+1.17

移行のためにまずやったこと

まずは移行するために、ブランチをチェックアウトしてgradle.propertiesを下記のように編集しました。このファイルはGradleにおけるbuild.gradledependenciesタスクが実行されるときなどに読み込まれる値のため、このファイルを変更すればGradleで定義されているFabricに関する依存関係やMinecraft本体のソースコードの難読化解除に利用するマッピングなどが変更出来るので編集しました。
なお、このファイルのテンプレートは参考の2番目のリンクで簡単に作成できますので見てみてください。

gradle.properties
# 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の推奨バージョンに変更します。

build.gradle
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をダウンロード出来るようになってるので下記の通り出来ます。
image.png
「File」の「Project Structure...」を開いて
image.png
「Project」の「Project SDK」のプルダウンを開いて「Add SDK」で「Download JDK」を開く
image.png
あとはここのウィンドウでJDK16をダウンロードするだけです。

GradleでビルドするときにJDK16を使ってビルドさせるように設定

GradleでビルドするときのJDKを指定するにはbuild.gradleを下記のように書き換えます。

build.gradle
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8

変更前

build.gradle
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のバージョンを変更します。

gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-bin.zip

変更前

gradle-wrapper.properties
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
Librarysを平板直後

ここからGradle: net.minecraft.minecraft:1.17-mapped~~~を探し選択します。
image.png

このウィンドウで下記の赤く囲ったところを押して

image.png

Classesで選択されている物とおなじjarファイルを選択してOKを押します。
するとSourcesに選択したjarが追加されると思うのでそのままOKを押すとnet.minecraft.*の名前が解決されるようになります。

1.16のときはこんな面倒な事をしないでも自動でソースコードを適用してくれていたのですが......よくわかりません。

バージョンアップ時に覚えておくと便利かもな豆知識

Yarn mappingsを利用した半自動でのバージョンアップ

これは、yarn mappingsに定義されているマッピングがマッピングファイルのバージョンアップで変更された際に半自動で変更点を書き換えたソースコードを作成してくれる物です。

例えば、今回のように1.17のマッピングファイルにバージョンアップする際にはIDEAのターミナルでGradleのタスクを実行することで変更点を書き換えたソースコードを作成してくれます。なお、タスクはgradle.propertiesを書き換える前に実行しなければ意味がありません。

gradle
gradlew migrateMappings --mappings "1.17+build.9"

このタスクを実行するとremappedSrcフォルダに書き換え後のソースコードが作成されています。

ただしこれは見出しにもあるように半自動なので、すべてのソースコードが1.17に対応するように書き換えられる訳ではなく、あくまでもマッピングファイルによって変更された場所だけが変わるので注意が必要です。とはいえ、全部手動で書き換えるよりも楽ができるので便利なのには変わりはありません。

最後に

私が躓いたポイントが誰かしらの役に立てば幸いです。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?