pkl4mc

pkl4mc

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

pkl4mc


[免责声明] 这最初是我一个愚蠢的想法,为了自用以及学习更多关于 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 内)

供开发者使用

安装

这只是个占位 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)。

许可证


随意在你的整合包或模组中使用这些徽标。