Forge 更新检查器
Forge 提供一个轻量级、由模组选择启用的更新检查框架。若模组有可用更新,主菜单的“Mods”按钮和模组列表会显示闪烁的图标以及对应更新日志。它不会自动下载更新。
原创说明图,依据 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 中指定的更新日志行。
译注:上面的代码是格式示意,包含注释、占位符和尾随逗号;实际 JSON 文件须替换占位符并删除注释及尾随逗号。