配置系统(wailaplugins.cfg)
本 mod 有两套互相独立的配置面。本页覆盖它自己写的 config/wailaplugins.cfg;WAILA 侧那些挂在 WAILA 配置文件里的插件开关与功能开关见 WAILA 模块开关。
这是最容易混淆的一点:在本 mod 的配置 GUI 里改不到 WAILA 的开关,反过来也一样。
基本信息
| 属性 | 值 |
|---|---|
| 配置文件 | <minecraft>/config/wailaplugins.cfg |
| 主配置类 | tterrag.wailaplugins.config.WPConfigHandler |
| 单例 | public static final WPConfigHandler INSTANCE(私有构造) |
| 基类 | com.enderio.core.common.config.AbstractConfigHandler,构造参数为 modid wailaplugins |
| 读取方式 | ConfigProcessor(getClass(), this).process(true),由类上的 @Config / @Comment / @Range 注解生成 |
| 加载时机 | WailaPlugins.preInit 中 WPConfigHandler.INSTANCE.initialize(event.getSuggestedConfigurationFile()) |
| 配置 GUI | 主类列表 → 该 mod → Config 按钮 → WPConfigFactory → WPConfigGui |
段(section)
init() 中显式 addSection 了 3 个段:
| 段常量 | 段名(配置文件中) | 语言键 | 内容 |
|---|---|---|---|
SECTION_BM |
blood_magic |
wailaplugins.config.section.blood_magic |
血魔法显示门槛,共 2 项 |
SECTION_RC |
railcraft |
wailaplugins.config.section.railcraft |
铁路电表门槛,共 1 项 |
SECTION_PLUGINS |
plugins |
wailaplugins.config.section.plugins |
插件加载总开关,运行时动态生成 |
语言文件里恰好也是这 3 个 wailaplugins.config.section.* 条目,与 addSection 一一对应。
静态配置项
全部由 ConfigProcessor 按注解生成,共 3 项:
| 段 | 键 | 类型 | 默认值 | 范围 | 说明 |
|---|---|---|---|---|---|
blood_magic |
sigilRequirement |
int | 1 |
@Range(min = 0, max = 2) |
祭坛信息需要什么信标:0 = 完全不需要;1 = 信标需在背包中;2 = 信标需在手握 |
blood_magic |
seerBenefit |
boolean | true |
— | 预见信标是否独占祭坛进度信息:true = 预见信标看得到进度、占卜信标看不到;false = 预见信标不提供额外信息、占卜信标看全部 |
railcraft |
meterInHand |
boolean | true |
— | 是否必须手持 ItemElectricMeter 才能看到 Railcraft 充能数值 |
这三项都直接影响运行时行为,不只是显示:
sigilRequirement与seerBenefit在PluginBloodMagic.getBody中逐帧判定,决定祭坛那几行是否输出——详见 血魔法集成 的"信标分级可见"。meterInHand在PluginRailcraft.addChargeTooltip中判定,决定显示已充能: 12.34c还是斜体手持电表——详见 Railcraft 集成 的"电表门槛"。
⚠️ 注意
meterInHand是"电表"门槛,与 Railcraft 插件在 WAILA 配置里的charge开关是两回事:后者控制充能行整体是否出现,前者控制出现后是否泄露具体数值。
plugins 段:动态插件总开关
[plugins] 段不在源码里静态声明,而是每个插件在注册时被查询时现场创建:
public boolean isPluginEnabled(String modid) {
activateSection(SECTION_PLUGINS);
boolean ret = getPropFor(modid).getBoolean();
saveConfigFile();
return ret;
}
private Property getPropFor(String modid) {
activateSection(SECTION_PLUGINS);
Property prop = getProperty(modid, true); // 默认 true
prop.comment = "Should the plugin for the mod with modid '" + modid + "' be loaded";
return prop;
}
行为要点:
- 键名是插件名,不是 modid。
isPluginEnabled的形参虽叫modid,PluginRegistrar传进来的却是name——即@Plugin.name,为空时取依赖 mod 的显示名。所以配置里可能出现的键形如Blood Magic、IC2Crops、Forestry、IFluidHandler、Pam's Fruit,以及RedLogic/Railcraft这类由 mod 显示名决定的值。 - 每查一次就
saveConfigFile()一次,因此只有实际加载过的插件才会出现在配置文件里;没装的 mod 对应的插件根本不会创建键。 - 每个键默认
true(getProperty(modid, true)),注释文本统一为Should the plugin for the mod with modid '...' be loaded。 - 把某键改成
false后,下次启动该插件在步骤 4 被跳过,日志会打印Skipping over plugin {} as it was disabled.
另有 disablePlugin(String modid) 提供程序化关闭:调 getProperty(modid, false) 置 false 并保存。本仓库的 17 个 Java 文件中没有任何地方调用它,属预留 API。
配置 GUI
@Mod(guiFactory = "tterrag.wailaplugins.client.config.WPConfigFactory") 把 mod 列表里的 Config 按钮接到:
WPConfigFactory extends com.enderio.core.client.config.BaseConfigFactory,仅覆写mainConfigGuiClass()返回WPConfigGui.class。WPConfigGui extends BaseConfigGui,三个覆写:把getConfigHandler()指向WPConfigHandler.INSTANCE;标题取wailaplugins.config.title(中文为「WAILA插件 配置」);语言前缀为wailaplugins.config。
因此 GUI 里呈现的就是上面 3 个段(blood_magic / railcraft / plugins)。
推断标注:EnderIO Core 的
BaseConfigGui/AbstractConfigHandler源码不在本仓库的依赖镜像中(镜像里的 EnderIO 仍是重构前的crazypants命名空间),故"GUI 逐段渲染 section、并按wailaplugins.config.section.*取段名"这一条是基于addSection()调用与语言键条目的对应关系推断的,未直接读到 GUI 渲染代码。其余关于配置文件内容与默认值的结论均直接来自WPConfigHandler与ConfigProcessor注解。
配置重载钩子
reloadNonIngameConfigs() 与 reloadIngameConfigs() 两个覆写都是空方法体(源码写 ;),即本 mod 没有实现配置热重载——改完配置需要重启游戏。
语言文件中的残留键(易误解)
assets/wailaplugins/lang/*.lang 仍保留大量在本 fork 中没有对应 Java 插件类的条目,包括 Steamcraft、Gregtech5U、magicalcrops、Mekanism、ResourcefulCrops、ThermalExpansion 等段(例如 wp.hud.msg.pressure、wp.config.Gregtech5U.*)。这些类不在本仓库的 17 个 Java 文件中,因此对应的开关不会出现在配置里,也不产生任何行为——它们是上游或其他分支遗留的语言条目,不代表本 fork 提供了这些集成。
实际生效的集成只有 7 个,见 插件 API 与生命周期 末尾的链接列表。
相关条目
- WAILA 模块开关 - 另一套配置面(WAILA 的
[modules]段) - 插件 API 与生命周期 -
[plugins]段在注册流程中的位置 - 血魔法集成 -
sigilRequirement/seerBenefit的实际判定逻辑 - Railcraft 集成 -
meterInHand的实际判定逻辑