====== 使用 Kotlin 编写 Fabric 模组 ======
**敬告: 此教程已默认您十分熟悉 Java 的相关知识(以及一部分与 JVM 和 Gradle 相关的知识)。这不是 Kotlin 语言的教程。如需寻求与 Kotlin 语言相关的帮助,请访问 [[https://kotlinlang.org/docs/getting-started.html|Kotlin 文档]].**
[[https://kotlinlang.org/|Kotlin]] 是一种非常强大的语言,它与 Java 高度集成,可以在 JVM 上执行(Kotlin 可被编译为 Java 字节码,相应地,您可以在一个项目中同时编写 Java 和 Kotlin 代码并进行互操作)。这意味着,您可以使用 Kotlin 编写 Fabric 模组!
===== Kotlin 的优势 =====
* 更少的样板代码和重复劳动。
* 易于使用 Lambda。
* 大量有助于编程的语法糖。
* 自动类型推断(编译器可以根据变量的使用情况确定变量的类型)
* 使用可空和不可空类型实现开箱即用的空引用安全(例如不可空的''Int''与可空的''Int?'')
* 扩展函数,即“添加”到现有类型的函数(这是一种很有用的语法糖)
* 运算符重载
* 可变(''var'')和不可变(''val'')数据之间的良好分离,在编程上有巨大帮助
* 支持更好的函数式编程结构
* 匿名对象(无类声明)和数据类(由 Holder 实现的线程安全)
* 类型的自由转变与协变, 无通配符泛型
* 字符串模板 (如 ''"字符串长度为 ${s.length}"'')
* 大量预置的实用函数
* ...还有很多
有关 Kotlin 与 Java 的更全面比较,请[[https://kotlinlang.org/docs/comparison-to-java.html#some-java-issues-addressed-in-kotlin|访问官方网站]]。
以下步骤假设您使用的是最新版本的[[https://www.jetbrains.com/idea/|IntellIJ IDEA]]。
===== 编写过程中的限制 =====
* **决不能!决不能!决不能将 Kotlin 文件用于编写 Mixins!**
* ...但是,您可以将代码重定向到 Java Mixin 中 ''Object'' 或 ''Companion Object'' 中的方法,以调用标有 ''@JvmStatic'' 注解的函数。
===== 步骤 1: 配置与初始化 Mod =====
按流程完成配置步骤 — 请参阅 [[zh_cn:tutorial:start|Fabric 模组教程]]。如果您已经配置好 Mod 工程,请转到下一步。
===== 步骤 2: 使用 IntellIJ 配置 Kotlin =====
此步骤本质上是使用 "在项目中配置 Kotlin" 这一个操作,操作步骤是 (工具 -> Kotlin -> 在项目中配置 Kotlin) , 或者呼出快捷搜索 (''Shift, Shift'' 并搜索 "配置 Kotlin...") 或者使用快捷键 (''Ctrl''+''Alt''+''Shift''+''K'' / ''Command''+''Option''+''Shift''+''K'').
这是配置它的最简单方法,尤其是与不支持 Kotlin 模板的 [[https://plugins.jetbrains.com/plugin/8327-minecraft-development|Minecraft Development plugin]] 一起使用时,此方法最为推崇。这会为 gradle 应用适当的 Kotlin 插件并为 Kotlin 语言添加依赖项。
最后,同步 gradle 项目 (Gradle 工具栏上的两个箭头图标,或在打开 gradle 文件时使用 ''Ctrl''+''Shift''+''O'' 快捷键)。
现在,如果一切操作无误,您就可以使用 Kotlin 进行编写了。
===== 步骤 3(推荐):修改 gradle 文件以添加 Fabric Kotlin Modding 依赖库 =====
==== 将官方 Fabric Kotlin 库添加到您的 `build.gradle` 文件中 ====
上一步添加了对 Kotlin stdlib 的依赖。您可以使用 [[https://github.com/FabricMC/fabric-language-kotlin|官方 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")
}
(请注意,版本适配必须正确。您可以在 [[https://github.com/FabricMC/fabric-language-kotlin|官方 GitHub 仓库]] 获知版本信息。)
最后如 [[https://github.com/FabricMC/fabric-language-kotlin|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),以允许最外层的函数、字段、方法或函数引用正常工作。请查看入口点的 [[https://github.com/FabricMC/fabric-language-kotlin|README.md]] 获知更多信息。
==== 升级 jvmToolchain 的版本 ====
编译 Kotlin 时可能会出现一些错误,因此最好根据您的 MineCraft 版本升级相对应的 ''jvmToolcahin'' 的版本(Kotlin 默认编译为 Java 8):
jvmToolchain(11)
一般情况下,游戏版本小于 1.17 时使用版本 ''11'' , 1.17 使用版本 ''16'' , 大于等于 1.18 的使用版本 ''17''。