
pkl4mc
将PKL语言作为JSON的替代品引入Minecraft,供模组和整合包创作者使用。

[免责声明] 这最初是我一个愚蠢的想法,为了自用以及学习更多关于 PKL 运行时和 JVM 的知识而构建的。如果它对你也有用,那太好了。顺便说一下,我还用了 Gemini 来修复 Bug 和做规划,所以为此骂我吧。
将 PKL 语言作为 JSON 的替代品引入 Minecraft,服务于模组和整合包作者。
PKL 到底是什么?
PKL 是 Apple 开发的一种配置语言,具有类型安全、自动补全、验证和模式(Schema)功能。
借助 pkl4mc,你可以用 PKL 创建任何原版数据包,而无需使用 JSON。这为模组支持带来了统一的语法,并能在你的 IDE 中捕获错误,而不是在游戏日志中(笑)。
与 KubeJS 不同,pkl4mc 不是一个脚本模组,它是一种类型化的数据格式,所有内容都可以在运行时通过 /pkl reload 重新加载。这在重新加载时间上也有所体现:
两个模组都有相同的 100 个配方,包括添加、删除、替换(输入和输出)。
| 每次重新加载的配方步骤(中位数) | |
|---|---|
| pkl4mc | 约 7–9 毫秒 |
| KubeJS (2001.6.5 + Rhino) | 约 30–65 毫秒 |
公平地说,KubeJS 做的事情远不止配方。如果你需要脚本逻辑,请使用 KubeJS。如果你需要类型化、快速、可重新加载的数据,请使用 pkl4mc。
这个项目面向谁?
可能面向整合包和数据包开发者,他们希望有自动补全和类型检查,而不是靠猜,或者出于某种原因讨厌 JSON(我也是这一派的)。
也面向拥有配套模组的整合包开发者,他们只想要一个更好的工作流程来处理配方调整和统一化(我也是这一派的)。
同样也面向想依赖 pkl4mc 作为库,并通过 PklConfig.load<T>() 加载类型化配置,或注册自己的模式(Schema)的模组开发者(你猜对了)。
依赖项
- 目前仅支持 Minecraft 1.20.1 和 Forge
- Kotlin for Forge
- pkl-core(已包含在 jar 内)
供开发者使用
- pkl CLI
- pkl-vscode
- pkl-lsp 此处插入我的分支
安装
这只是个占位 GIF 
示例
这是一个 JSON 格式的烧炼配方:
{
"type": "minecraft:smelting",
"category": "misc",
"ingredient": { "item": "minecraft:sea_pickle" },
"result": "nothingcore:cooked_sea_pickle",
"experience": 0.7,
"cookingtime": 200
}
这是 PKL 格式的相同配方:
amends "@pkl4mc/recipes.pkl"smelting {
new {
name = "example_smelting"
category = "misc"
input { item = "minecraft:sea_pickle" }
output { item = "nothingcore:cooked_sea_pickle" }
experience = 0.7
cookingTime = 200
}
}
如何获取帮助
文档正在编写中(像 KubeJS 一样,哈哈):docs.nothingseries.org,并且有每个模组集成的示例。
如果缺少某些内容,请在 问题跟踪器 上提交 Issue。
如果你需要帮助,请加入 Nothing Series Hub 并提交工单或在支持频道中提问。
贡献
目前最有用的贡献是报告 Bug,以及为还没有模式的模组创建模式(Schema)。
许可证
- OSL-3.0 (pkl4mc)
- Apache 2.0 (pkl-core)
随意在你的整合包或模组中使用这些徽标。

正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。