在将【Minecraft Fabric】从1.16迁移到1.17时的一些困惑。摧毁初学者在迁移过程中遇到的障碍点!
目标人群
-
IntelliJ IDEAでModdingしている
FabricのModding初心者
対応しているMinecraftのバージョンを1.17にしたい人
1.17対応のModを新規開発したい人はこの記事を読まずにFabricのGitHubに上がっているModサンプルをベースに開発した方が速いです
只需要一个选项的话,以下是参考的简述:
有关开发环境
1.16的开发环境
项目 内容
IDE IntelliJ IDEA Community 2021.1
Yarn映射 1.16.1+build.1
Fabric加载器版本 0.8.8+build.202
Fabric版本 0.13.1+build.370-1.16
1.17的开发环境
项目 内容
IDE IntelliJ IDEA Community 2021.1
Yarn映射 1.17+build.9
Fabric加载器版本 0.11.3
Fabric版本 0.35.0+1.17
为了进行移行,首先做的是什么?
为了进行迁移,首先我检出了一个分支,然后将gradle.properties文件编辑成以下内容。该文件是在Gradle中执行build.gradle的dependencies任务等时加载的值,通过修改该文件可以改变Fabric的依赖关系和解除Minecraft主体源代码的混淆映射等。另外,你可以在第二个参考链接中轻松地创建该文件的模板,请你参考一下。
# 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年6月14日,未来可能会有地图文件等进行更新,请各位自行更改。
卡住的地方
我以为只要编辑上述文件就能迁移到1.17的开发环境,但事实证明不是这样的。。。。。以下是我碰到的问题:
-
‘fabric-loom’プラグインの適用に失敗する
JDK16を要求される
Gradleが動かない
import net.minecraft.*が名前解決できない
无法应用’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版本更改为第二个链接底部所推荐的Loom版本。
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时,需要Java 16以上的版本才能应用fabric-loom插件,而当前使用的JDK是Java 8,也就是1.8。
因为我没有很追踪Minecraft 1.17的信息,所以不知道,但看起来似乎从1.17开始使用了JDK 16。因此,在构建Mod时需要使用JDK 16。
将IDEA配置为使用JDK16。

请在使用Gradle进行构建时设置为使用JDK 16进行构建。
要指定在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,所以需要编辑项目文件夹内的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版本及以上的版本进行更改。
只需要一个选项是原生中文版本:
无法解析导入net.minecraft.*。


请点击此窗口中标记为红色的区域。

选择与Classes中选定的项目相同的jar文件,并点击OK。然后,我认为选择的jar文件将被添加到Sources中,只需继续点击OK,net.minecraft.*的名称就会被解析。
1. 在1.16版本时,它会自动应用源代码,而无需进行这样繁琐的操作……我不太明白。
升级版本时牢记的小窍门可能会很方便的提示知识
使用Yarn映射进行半自动版本更新。
这是一个能够在映射文件版本升级时半自动地修改变更点的源代码,它会根据 yarn mappings 的定义来完成这一操作。
比如说,当我们像本次这样升级到1.17版本的映射文件时,我们可以通过在IDEA的终端中运行Gradle任务来创建修改后的源代码。需要注意的是,在修改gradle.properties之前必须先执行任务才有意义。
gradlew migrateMappings --mappings "1.17+build.9"
执行此任务后,将在remappedSrc文件夹中创建修改后的源代码。
然而,正如标题中所提到的,这是半自动的,所以并不是所有的源代码都可以被重写以适应1.17版本,只有通过映射文件进行更改的地方才会发生变化,所以需要注意。尽管如此,相较于手动重写全部内容,这仍然是一种便利的方式。
最後,最终,终结
希望我的困难能对某人有所帮助。