Forge更新检查器
Forge提供了一个非常轻量的可选升级检查模块。它所做的就是检查更新,然后在主菜单和模组列表的Mods按钮上显示一个小图标,如果任何模组有可用的更新也会显示对应的更新日志。它不能自动下载更新。
开始
你(可能)想做的第一件事是指定@Mod标记中的updateJSON参数。这个参数的值应当是一个指向一个包含更新信息的JSON文件的有效URL。这个更新用的JSON可以托管在你的web服务器上,GitHub或者你想托管的任何位置,只要它能够被你模组的用户可靠地访问到就可以。
更新所用的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 下的链接是当模组版本较旧时显示给用户的链接。
- Forge使用一种内部算法来确认你的模组版本字符串(代表的版本)比另一个“新”。多数版本编号模式应该都是兼容的,但如果你对自己的版本编号模式是否支持比较担忧的话,你可以参考ComparableVersion这个类。强烈建议继续使用 semantic versioning(https://semver.org/)。
- 变更日志字符串的内容可以用\n实现换行。有人倾向于在这里写一个简短的变动日志,然后留一个能够提供相近更新日志内容的外部链接。
- 手动输入数据可能会很繁琐。你可以设置你的build.gradle以实现在构建一个正式版本时自动更新这个文件,因为Groovy有原生的JSON解析支持。如何做这个就留给读者作为一个练习。
两个具体的例子是 Charset(https://gist.githubusercontent.com/Meow-J/fe740e287c2881d3bf2341a62a7ce770/raw/bf829cdefc84344d86d1922e2667778112b845b1/update.json) 和 Botania Unofficial(https://gist.githubusercontent.com/Meow-J/1299068c775c2b174632534a18b65fb8/raw/42c578cf2303aa76d8900f5fdc6366122549d2a8/update.json)。
获取更新检查结果
你可以借助 ForgeVersion.getResult(ModContainer) 这个方法来获取Forge更新检查器的结果。返回的对象有一个status域,表示版本检查的状态。取值举例:FAILED(版本检查器无法连接到给定的URL),UP_TO_DATE(当前版本等于或高于最新稳定版本),OUTDATED(有一个新的稳定版本),BETA_OUTDATED(有一个新的不稳定版本),BETA(当前版本等于或高于最新测试版本)。如果(检查更新的)请求尚未结束,状态将会为PENDING;在这种情况下(译者注:应该是指开发测试时遇到这种问题),你应当再多试一试,反之,返回的对象将会同时包含目标版本和update.json中指定的任何的变更日志内容。你可以通过 Loader.instance().activeModContainer() 获取自己模组的ModContainer来传递给这个方法,也可以通过 Loader.instance().getIndexedModList().get(<modid>) 这个方法来获取任何模组的ModContainer来传递给这个方法。