MariesLib

MariesLib

MariesLib 是一个共享的 NeoForge 1.21.1 库,为 Marie 的模组提供支持。它提供了运行时物品分类、模组兼容性发现、注册表基础设施以及开发者工具。

游戏机制

Banner

Nourished 发展到其共享基础设施值得拥有独立库的程度。MariesLib 是 Nourished 及未来 Marie 系列模组背后的共享基础。它不是一个游戏性模组——而是提供它们所依赖的可复用系统。

因此我将其拆分为一个独立的库。MariesLib 是诸如 Nourished 等模组背后的共享基础。它不是一个游戏性模组,而是我其他模组构建的基础。


社区

Discord 频道

欢迎提出疑问、建议和开发讨论。


你需要安装这个吗?

是的:如果你使用依赖它的模组。

MariesLib 是一个必需的库模组,并非隐藏的基础设施。Nourished 目前需要 MariesLib_v0.1.0-beta.1+ 作为独立安装项。

请同时安装:

  • Nourished
  • MariesLib_v0.1.0-beta.1 或更新版本

能自动解析依赖的模组加载器和启动器应会自动为你拉取 MariesLib。如果 Nourished 无法加载,请检查 MariesLib 是否存在且为最新版本。

面向模组开发者

  • 每个 Marie 模组都需要将 MariesLib 作为单独的模组放置在类路径上。没有 JarJar 打包。将 marieslib 声明为必需依赖,并在引导时通过 MarieLibContext 连接运行时。

它提供了什么

MariesLib 处理共享基础设施,使 Marie 模组能专注于游戏性:

系统 功能
分类 运行时来源解析、扫描工具和分类追踪
兼容性发现 三层兼容性注册表,支持整合包覆盖
注册表生命周期 具有快照和重载支持的生命周期感知注册表
追踪与数值 玩家数值追踪、记忆窗口、衰减和效果钩子
诊断 数据包验证、未知物品记录和调试命令
配置工具 预设、导入/导出、分享码和模块锁定
实用工具 JSON 辅助、有界 LRU 缓存、移动平均、验证

它旨在保持轻量、模块化和可复用——一个基础而非游戏性框架。


分类管道

这是 MariesLib 的核心。

当消费模组需要处理一个从未见过的来源时,MariesLib 通过阶段性运行时逻辑进行解析:

  • 运行时解析:带有缓存和级联回退
  • 令牌标准化:针对特定领域的来源词汇
  • 配方继承:以及在配置处进行多值混合
  • 覆盖注册表:通过 config/<modid>/source_overrides.json
  • 分类追踪:使开发者能检查来源为何按此方式解析

还有一个面向开发者的扫描器,用于批量分析未分类来源。在当前 Marie 模组中,这意味着带有 FoodProperties 的物品,例如 Nourished 的食物分类工作流。它并非面向玩家的游戏功能。

具体管道由消费模组决定。MariesLib 提供基础设施;游戏性决策仍由使用它的模组负责。


广泛的模组兼容性

MariesLib 使用三层兼容系统:

层 来源 说明
1 消费模组中的 data/<modid>/compat/compat_registry.json 基础注册表
2 已加载模组中的 data/<other_modid>/marie_compat.json 模组提供的声明
3 config/<modid>/compat_overrides.json 整合包覆盖

后续层会合并到先前的条目中,而非完全替换。这为模组作者、附属模组作者和整合包作者提供了可预测的覆盖路径,而无需重新编译。


基于 MariesLib 构建的模组

模组 描述
Nourished NeoForge 1.21.1 的营养模组
ProjecT E 延长寿命 (计划中)

面向模组开发者

MariesLib 通过 MarieAPI 暴露公共 API:

float level = MarieAPI.getValueLevel(player, "Item");
MarieAPI.registerValue(definition);
MarieAPI.registerCompatEntry(definition);
MarieAPI.registerCustomEffect(thresholdEffect);