Forge 更新检查器

Forge 更新检查器

Forge 提供一个轻量级、由模组选择启用的更新检查框架。若模组有可用更新,主菜单的“Mods”按钮和模组列表会显示闪烁的图标以及对应更新日志。它不会自动下载更新。

Forge 更新检查数据关系:mods.toml 的 updateJSONURL 指向更新 JSON;JSON 的 homepage 提供模组主页或下载页,各 Minecraft 版本下记录模组版本及更新日志,promos 中 latest 和 recommended 指向前沿版和稳定版;查询结果包含状态、目标版本和日志。

原创说明图,依据 Forge 1.21.x 官方文档 绘制。

入门

首先在 mods.toml 中指定 updateJSONURL 参数。其值应是指向更新 JSON 文件的有效 URL。该文件可以托管在你自己的服务器、GitHub 或其他位置,但必须能让模组的所有用户可靠访问。

更新 JSON 格式

文件的格式相对简单:

{
  "homepage": "<模组主页或下载页面>",
  "<mcversion>": {
    "<modversion>": "<该版本的更新日志>",
    // 列出此 Minecraft 版本对应的所有模组版本及其更新日志
    // ...
  },
  "promos": {
    "<mcversion>-latest": "<modversion>",
    // 指定此 Minecraft 版本的最新前沿版本
    "<mcversion>-recommended": "<modversion>",
    // 指定此 Minecraft 版本的最新稳定版本
    // ...
  }
}

请注意:

  • homepage 下的链接会在模组过期时显示给用户。
  • Forge 使用内部算法判断模组的某个版本字符串是否比另一个更新。多数版本编号方案应当兼容;如果担心你的方案不受支持,可以查看 ComparableVersion 类。强烈建议遵循 Maven 版本编号规则。
  • 更新日志字符串可用 \n 分行。有些作者会提供简短日志,并链接到列出全部更改的外部网站。
  • 手动输入数据可能很繁琐。Groovy 原生支持 JSON 解析,因此可以配置 build.gradle 在构建发行版时自动更新此文件;具体实现留给读者练习。
  • 可以参考 nocubes、Forge 和 Corail Tombstone 的示例。

获取更新检查结果

使用 VersionChecker#getResult(IModInfo) 获取 Forge 更新检查结果。可通过 ModContainer#getModInfo 获取 IModInfo。在构造函数内使用 ModLoadingContext.get().getActiveContainer(),或使用 ModList.get().getModContainerById(<your modId>)、ModList.get().getModContainerByObject(<your mod instance>) 获取自己的 ModContainer。使用 ModList.get().getModContainerById(<modId>) 可获取其他模组的容器。返回对象的 #status 方法表示版本检查状态:

状态 含义
FAILED 检查器无法连接到提供的 URL。
UP_TO_DATE 当前版本等于推荐版本。
AHEAD 没有最新版本时,当前版本比推荐版本更新。
OUTDATED 有新的推荐版本或最新版本。
BETA_OUTDATED 有新的最新版本。
BETA 当前版本等于或高于最新版本。
PENDING 请求的结果尚未完成,请稍后重试。

返回对象还包含目标版本以及 update.json 中指定的更新日志行。

原文:Forge Update Checker。

译注:上面的代码是格式示意,包含注释、占位符和尾随逗号;实际 JSON 文件须替换占位符并删除注释及尾随逗号。