在将【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。

image.png

请在使用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.*。

Librarys
image.png

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

image.png

选择与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版本,只有通过映射文件进行更改的地方才会发生变化,所以需要注意。尽管如此,相较于手动重写全部内容,这仍然是一种便利的方式。

最後,最终,终结

希望我的困难能对某人有所帮助。

bannerAds