
Krysztal's Language Scala
fabric-language-scala 的一个分支,但支持最新版本的 Scala3
Krysztal 的 fabric-language-scala 复刻版
这是 fabric-language-scala 的一个复刻版本,支持最新的 Scala3 版本。
为什么要复刻?
使用 Scala 的人数非常少,但 Scala 强大的表达能力使得该语言非常适合用于开发模组。
原版 fabric-language-scala 已经无人维护,维护者无法再投入更多精力来维护它,因此它逐渐变得无人维护且无法正常使用。
对 Scala3 的支持,几乎可以说是不存在的。
所以我决定复刻它并自行维护,同时实现与原版 fabric-language-scala 的兼容性,命名为 krysztal-language-scala。
注意
- 此语言适配器将尽可能与上游内容同步,并尽可能确保可用性。
- 如果你是开发者,请阅读 FOR_DEVELOPER,并提醒你的用户你使用的 Scala3 版本。
- 我建议你尽可能使用最新版本。
- 如果你是用户,请阅读 FOR_USER。
从 KLS 3.3.2 开始,编译目标是 Java 25。不支持较旧的 Java 运行时。
如何使用?
添加依赖
将以下内容添加到你的项目 build.gradle 中
plugins {
...
id 'scala' // 为 gradle 添加 `scala` 插件
...
}
repositories {
...
maven { url "https://api.modrinth.com/maven" }
...
}
dependencies {
...
// Scala 3 语言支持(Fabric 语言适配器 + Scala 运行时,由该模组在运行时打包提供)。
implementation("maven.modrinth:krysztal-language-scala:${property("krysztal_scala_version")}")
...
}
用法:class(类)
假设你的入口名称为 ExampleEntry.scala
import net.fabricmc.api.ModInitializer;
class ExampleEntry extends ModInitializer {
lazy val logger = LoggerFactory.getLogger("KMMO")
override def onInitialize(): Unit = {
logger.info("Hi")
}
}
然后在 fabric.mod.json 中
...
"entrypoints": {
"main": [
"dev.example.ExampleEntry"
],
},
...
但得益于 Scala 与 Java 出色的互操作性,我们可以直接将其作为 Java 入口点使用 :)
用法:object(对象)
假设你的入口名称为 ExampleEntry.scala
import net.fabricmc.api.ModInitializer;
object ExampleEntry extends ModInitializer {
lazy val logger = LoggerFactory.getLogger("KMMO")
override def onInitialize(): Unit = {
logger.info("Hi")
}
}
然后在 fabric.mod.json 中
...
"entrypoints": {
"main": [
{
"adapter": "scala",
"value": "dev.example.ExampleEntry"
}
],
},
...
已知问题
未知的 invokedynamic bsm:scala/runtime*
此问题由 Scala 的类加载机制引起。
它几乎不会影响任何功能。请忽略它。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。