Table of Contents

使用 Kotlin 编写 Fabric 模组

敬告: 此教程已默认您十分熟悉 Java 的相关知识(以及一部分与 JVM 和 Gradle 相关的知识)。这不是 Kotlin 语言的教程。如需寻求与 Kotlin 语言相关的帮助,请访问 Kotlin 文档.

Kotlin 是一种非常强大的语言,它与 Java 高度集成,可以在 JVM 上执行(Kotlin 可被编译为 Java 字节码,相应地,您可以在一个项目中同时编写 Java 和 Kotlin 代码并进行互操作)。这意味着,您可以使用 Kotlin 编写 Fabric 模组!

Kotlin 的优势

有关 Kotlin 与 Java 的更全面比较,请访问官方网站

以下步骤假设您使用的是最新版本的IntellIJ IDEA

编写过程中的限制

* 决不能!决不能!决不能将 Kotlin 文件用于编写 Mixins!

* …但是,您可以将代码重定向到 Java Mixin 中 ObjectCompanion Object 中的方法,以调用标有 @JvmStatic 注解的函数。

步骤 1: 配置与初始化 Mod

按流程完成配置步骤 — 请参阅 Fabric 模组教程。如果您已经配置好 Mod 工程,请转到下一步。

步骤 2: 使用 IntellIJ 配置 Kotlin

此步骤本质上是使用 “在项目中配置 Kotlin” 这一个操作,操作步骤是 (工具 → Kotlin → 在项目中配置 Kotlin) , 或者呼出快捷搜索 (Shift, Shift 并搜索 “配置 Kotlin…”) 或者使用快捷键 (Ctrl+Alt+Shift+K / Command+Option+Shift+K).

这是配置它的最简单方法,尤其是与不支持 Kotlin 模板的 Minecraft Development plugin 一起使用时,此方法最为推崇。这会为 gradle 应用适当的 Kotlin 插件并为 Kotlin 语言添加依赖项。

最后,同步 gradle 项目 (Gradle 工具栏上的两个箭头图标,或在打开 gradle 文件时使用 Ctrl+Shift+O 快捷键)。

现在,如果一切操作无误,您就可以使用 Kotlin 进行编写了。

步骤 3(推荐):修改 gradle 文件以添加 Fabric Kotlin Modding 依赖库

将官方 Fabric Kotlin 库添加到您的 `build.gradle` 文件中

上一步添加了对 Kotlin stdlib 的依赖。您可以使用 官方 fabric-language-kotlin 依赖项 为您的 Mod 添加更广泛的 Kotlin 支持。有了这个依赖项,Kotlin 的一些核心和一些额外包将自动添加到项目中,您将不必浪费时间手动打包整个 Kotlin 类。

要实现此目的,将下列代码

dependencies {
   //... 
   implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
}

替换为

dependencies {
   //...
   modImplementation("net.fabricmc:fabric-language-kotlin:1.10.8+kotlin.1.9.0")
}

(请注意,版本适配必须正确。您可以在 官方 GitHub 仓库 获知版本信息。)

最后如 README.md 所指,别忘了修改 fabric.mod.json :

{
    "schemaVersion":  1, 
    "entrypoints": {
        "main": [
            {
                "adapter": "kotlin",
                "value": "package.ClassName"
            }
        ]
    },
    "depends": {
        "fabric-language-kotlin": ">=1.10.8+kotlin.1.9.0"
    }
}

您还可以修改 Mod 的入口点(Entrypoint),以允许最外层的函数、字段、方法或函数引用正常工作。请查看入口点的 README.md 获知更多信息。

升级 jvmToolchain 的版本

编译 Kotlin 时可能会出现一些错误,因此最好根据您的 MineCraft 版本升级相对应的 jvmToolcahin 的版本(Kotlin 默认编译为 Java 8):

jvmToolchain(11)

一般情况下,游戏版本小于 1.17 时使用版本 11 , 1.17 使用版本 16 , 大于等于 1.18 的使用版本 17