NeoForge 更新检查器(Update Checker)
NeoForge 提供了一个非常轻量级、可选的更新检查框架。如果有任何模组(mod)存在可用更新,主菜单和模组列表中的“Mods”按钮会显示一个闪烁的图标,并附带相应的更新日志(changelog)。它 不会 自动下载更新。
入门(Getting Started)
你需要做的第一件事是在你的 mods.toml 文件中指定 updateJSONURL 参数。该参数的值应为一个有效的 URL,指向你的更新 JSON 文件。这个文件可以托管在你自己的 Web 服务器、GitHub 或任何其他能被所有你的模组用户可靠访问的位置。
更新 JSON 格式(Update JSON format)
这个 JSON 文件本身格式相对简单,如下所示:
{
"homepage": "<你的模组主页/下载页面>",
"<mcversion>": {
"<modversion>": "<该版本的更新日志>",
// 列出该 Minecraft 版本下你的所有模组版本及其对应的更新日志
// ...
},
"promos": {
"<mcversion>-latest": "<modversion>",
// 声明该 Minecraft 版本下你的模组的最新“前沿”版本
"<mcversion>-recommended": "<modversion>",
// 声明该 Minecraft 版本下你的模组的最新“稳定”版本
// ...
}
}
这个格式基本上很直观,但有几点需要注意:
-
homepage下的链接会在模组过期时展示给用户。 -
NeoForge 使用内部算法来判断你的模组版本字符串之间的“新旧”关系。大多数版本号命名方案都能兼容,但如果你对自己的方案是否受支持有疑虑,可以参考
ComparableVersion类。强烈推荐遵循 Maven 版本规范。 -
更新日志字符串可用
\n分行。有人喜欢只写简要更新内容,并附上指向完整更新日志的外部链接。 -
手动输入数据可能比较繁琐。你可以配置
build.gradle,在构建发布版本时自动更新此文件,因为 Groovy 原生支持 JSON 解析。具体实现方式留给读者自行探索。 -
你可以在这里找到一些示例:NoCubes、Corail Tombstone 以及 Chisels & Bits 2。
获取更新检查结果(Retrieving Update Check Results)
你可以通过 VersionChecker#getResult(IModInfo) 获取 NeoForge 更新检查器的结果。你可以通过 ModContainer#getModInfo 获取你的 IModInfo,而 ModContainer 可以作为参数传入你的模组构造函数。如果你需要获取其他模组的 ModContainer,可以使用 ModList.get().getModContainerById(<modId>)。返回的对象有一个 #status 方法,用于指示版本检查的状态。
| 状态 | 描述 |
|---|---|
FAILED | 版本检查器无法连接到提供的 URL。 |
UP_TO_DATE | 当前版本与推荐版本相同。 |
AHEAD | 当前版本比推荐版本新,并且没有最新版本的情况下。 |
OUTDATED | 存在新的推荐版本或最新版本。 |
BETA_OUTDATED | 存在新的最新版本。 |
BETA | 当前版本与最新版本相同或比最新版本新。 |
PENDING | 请求的结果尚未完成,请稍后再试。 |
返回的对象还会包含目标版本以及在 update.json 中指定的所有更新日志内容。