1. 可视化配置文件编辑界面
但是直接编辑配置文件往往容易出问题。能不能做一个在游戏中就能修改的界面?实际上 Forge 自己就有这么一套机制。
首先需要实现 IModGuiFactory
:
package my_mod;
public class MyModConfigGuiFactory implements IModGuiFactory {
@Override
public void initialize(Minecraft mc) {
// 一般情况下,留空即可。
}
@Override
public boolean hasConfigGui() {
return true; // 当然要返回 true。
}
@Override
public GuiScreen createConfigGui(GuiScreen parent) {
return new GuiConfig(parent, ConfigElement.from(MyModConfig.class).getChildElements(), "my_mod_id", false, false, "First line", "Second line");
}
@Override
public Set<RuntimeOptionCategoryElement> runtimeGuiCategories() {
// 这个方法已经被 deprecated 了,但是迟迟没删除,而且并没有正确实现。
// 所以我们就不管它了。目前来看,返回 null 不会有问题,但慎重起见,还是
// 返回一个正常的 Set 比较稳妥。
return Collections.emptySet();
}
}
然后你需要 MyModConfigGuiFactory
的 caonical name,并把它填入 @Mod
中:
@Mod(modid = "my_mod", name = "ExampleMod", version = "0.0.0",
guiFactory = "my_mod.MyModConfigGuiFactory")
重启游戏。在主菜单中找到 Mods
按钮,然后在打开的 Mod 列表界面左侧找到你的 Mod,此时下面的 Config
按钮应该已经可用了。点那个就能看到效果了。
1.1. 本地化
回想一下 @Config.LangKey
这个注解:这个注解就是用来提供这个界面的国际化与本地化支持的。每一个选项的显示名称会优先显示通过 @Config.LangKey
指定的键的翻译结果,若没有则会使用 @Config.Name
指定的名称。
除此之外,在这个注解之后加上 .tooltip
可以指定光标悬浮在选项上时显示的 Tooltip 内容。换言之,如果你有这样一个配置选项:
@Config.LangKey("config.my_mod.general.thing")
public static int thing = 1;
那么它对应的 Tooltip 的本地化键是 config.my_mod.general.thing.tooltip
。