NeoForge 更新检查器

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。