====== 使用 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''。