NeoForge 更新检查器
NeoForge 提供了一个非常轻量、需要主动启用的更新检查框架。如果有 Mod 可更新,主菜单的“Mod”按钮和 Mod 列表中会出现闪烁图标,并显示相应的更新日志。该框架不会自动下载更新。
入门
首先,在 mods.toml 文件中指定 updateJSONURL 参数。该参数的值必须是指向更新 JSON 文件的有效 URL。文件可以托管在自己的 Web 服务器、GitHub 或其他位置,只要所有 Mod 用户都能稳定访问即可。
更新 JSON 格式
JSON 文件的格式相对简单,如下所示:
{
"homepage": "<homepage/download page for your mod>",
"<mcversion>": {
"<modversion>": "<changelog for this version>",
// List all versions of your mod for the given Minecraft version, along with their changelogs
// ...
},
"promos": {
"<mcversion>-latest": "<modversion>",
// Declare the latest "bleeding-edge" version of your mod for the given Minecraft version
"<mcversion>-recommended": "<modversion>",
// Declare the latest "stable" version of your mod for the given Minecraft version
// ...
}
}
格式基本不言自明,以下几点值得注意:
homepage中的链接会在 Mod 过期时显示给用户。- NeoForge 使用内部算法判断某个 Mod 版本字符串是否“比”另一个更新。大多数版本命名方案都兼容;如果不确定自己的方案是否受支持,可以查看
ComparableVersion类。强烈建议遵循 Maven 版本规范。 - 更新日志字符串可以使用
\n分隔成多行。有些开发者会先写简短更新日志,再链接到提供完整变更列表的外部网站。 - 手动输入数据可能比较繁琐。你可以配置
build.gradle,在构建发布版本时自动更新此文件,因为 Groovy 原生支持 JSON 解析。具体实现留作读者练习。 - 以下 Mod 提供了一些示例:nocubes、Corail Tombstone 和 Chisels & Bits 2。
获取更新检查结果
可以使用 VersionChecker#getResult(IModInfo) 获取 NeoForge 更新检查器的结果。通过 ModContainer#getModInfo 可取得 IModInfo;ModContainer 可以作为参数传入 Mod 构造函数。也可以通过 ModList.get().getModContainerById(<modId>) 获取其他 Mod 的 ModContainer。返回对象中的 #status 方法会给出版本检查状态。
| 状态 | 描述 |
|---|---|
FAILED |
版本检查器无法连接到提供的 URL。 |
UP_TO_DATE |
当前版本与推荐版本相同。 |
AHEAD |
当前版本比推荐版本更新,且没有最新版本可比较。 |
OUTDATED |
存在更新的推荐版本或最新版本。 |
BETA_OUTDATED |
存在更新的最新版本。 |
BETA |
当前版本等于或高于最新版本。 |
PENDING |
请求的结果尚未完成,请稍后重试。 |
返回对象还会包含目标版本,以及 update.json 中指定的更新日志内容。
来源: NeoForged/Documentation(1.21.1)。中文翻译依据提交
4a680cdd4d15。