配置系统(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 与生命周期 末尾的链接列表。

相关条目