配置系统总览

基本信息

属性 值
配置框架 GTNHLib(com.gtnewhorizon.gtnhlib.config.Config 注解)
配置加载时机 FML 构造阶段,由自定义 IFMLLoadingPlugin + IEarlyMixinLoader 完成
加载器 com.fouristhenumber.utilitiesinexcess.mixins.UIEMixinLoader(UIEMixinLoader.java:21)
显式注册的顶层配置类 6 个(UIEMixinLoader.java:26-31)
实际配置文件 GTNHLib 按 category 生成,见下表
@Mod 声明依赖 required-after:gtnhlib@[0.11.23,)
FML 容器 modid(coremod) 无(getModContainerClass() 返回 null,UIEMixinLoader.java:43-45)

功能

本模组不使用 Forge 原生 Configuration,而是把 GTNHLib 的配置系统挂进 FML 构造阶段。UIEMixinLoader 实现 IFMLLoadingPlugin, IEarlyMixinLoader,在 getASMAPI() 中先注册 6 个顶层配置类(UIEMixinLoader.java:24-31),源码注释写明 “Register config here because then it’s available during mixins.”(:24)。

这 6 个显式注册的类是:

ConfigurationManager.registerConfig(ItemConfig.class);       // :26
ConfigurationManager.registerConfig(BlockConfig.class);      // :27
ConfigurationManager.registerConfig(GeneratorConfig.class); // :28
ConfigurationManager.registerConfig(DimensionConfig.class); // :29
ConfigurationManager.registerConfig(OtherConfig.class);     // :30
ConfigurationManager.registerConfig(RecipeConfig.class);    // :31

getModContainerClass() 返回 null(UIEMixinLoader.java:43-45)——本模组没有 FML coremod / 容器 modid,不会以 core mod 身份出现在模组列表中。同理 getASMTransformerClass()、getSetupClass()、getAccessTransformerClass() 也全部返回 null(:38-58)。

UIEMixinLoader 中的 addRequiredMod 调用全部被注释掉,TargetedMod.ANGELICA 因此没有任何 Mixin 使用——已定义但未接线的目标模组(见兼容模组)。

数值 — 配置类清单

配置代码分布在四个包下,共 24 个 Java 文件。绝大多数类采用自实例化单例模式:@Config.Ignore public static final XxxConfig INSTANCE = new XxxConfig();(如 UnderWorldConfig.java:9-10),由首次静态访问触发。

包 文件数 类
config/ 2 OtherConfig(category other)、RecipeConfig
config/blocks/ 7 BlockConfig、ColoredBlocksConfig*、CursedEarthConfig、EnderLotusConfig、FilingCabinetsConfig*、GeneratorConfig、VoidQuarryConfig
config/items/ 6 ItemConfig、InversionConfig、WateringCanConfig、BuildersWandsConfig*、ChunchunmaruConfig、FireBatteryConfig
config/items/invertedtools/ 7 InvertedTools(容器类,持有其余 6 个的 INSTANCE 引用)、AntiGravityShovelConfig、ErasurePickaxeConfig、LiminalSwordConfig、RecallShearsConfig、RetrogradeHoeConfig、SatingAxeConfig
config/dimensions/ 3 DimensionConfig、EndOfTimeConfig(category dimensions.end_of_time)、UnderWorldConfig(category dimensions.under_world)

* = 缺少类级 @Config(modid = …, category = …) 注解。

InvertedTools 不是配置基类,而是 6 个工具配置的容器:public final LiminalSwordConfig liminalSwordConfig = LiminalSwordConfig.INSTANCE;(InvertedTools.java:14),其自身带 category items.inverted_tools。

@Config(modid = UtilitiesInExcess.MODID, category = …) 的 category 命名空间在维度配置中采用两级形式(dimensions.under_world、dimensions.end_of_time,见 UnderWorldConfig.java:6、EndOfTimeConfig.java:6),在反转工具中采用三级形式(items.inverted_tools.sating_axe,见 SatingAxeConfig.java:6)。

结构性观察(不作缺陷断言):在 24 个配置文件中,ColoredBlocksConfig、FilingCabinetsConfig、BuildersWandsConfig 三个类没有类级 @Config 注解(其余 21 个都有),且三个类都不在 ConfigurationManager.registerConfig 的 6 个之列。它们的字段仍各自带有 @Config.Default* / @Config.Name / @Config.RangeInt 注解,且其 INSTANCE 单例确实被 ModBlocks / ModItems 的注册门表达式实际引用(例如 ColoredBlocksConfig.INSTANCE.enablePaintRoller),因此功能上取值有效。本仓中没有测试、提交信息或注释能确定这是否是有意为之,故此处只陈述可核实的事实,不推断其意图。

默认启用统计(跨验证):对 ModBlocks 101 个与 ModItems 32 个注册项逐条解析其注册门表达式,并把每个标识符回溯到配置类中对应字段的 @Config.DefaultBoolean 值——

结果 ModBlocks ModItems
配置开关直接控制且默认 true 100 32
默认 false 0 0
非纯配置布尔门 1(LAPIS_AETHERIUS_DYEABLE,需 EndlessIDs) 0

即默认配置下 101 个方块与 32 个物品全部注册(除需 EndlessIDs 的染色版 Lapis Aetherius)。

RecipeConfig 含 72 个配方开关,全部默认 true,且这 72 个在 RecipeLoader.java 中全部被引用(无死开关)。唯一的例外是真绿幕配方——它不受任何开关控制(RecipeLoader.java:539-549)。

数值 — 主要数值配置项

以下是从各配置类中逐条抄录并核实的数值型默认值:

配置项 默认值 位置
smartPumpEnergyStorage 10000 BlockConfig.java:165
smartPumpEnergyUsePerBlock 100 BlockConfig.java:171
smartPumpStallCooldown 200 BlockConfig.java:177
cursedEarthSpawnRate 40 CursedEarthConfig.java:37
blessedEarthSpawnRate 40 CursedEarthConfig.java:42
cursedEarthSpreads true CursedEarthConfig.java:28
volatileReaction true CursedEarthConfig.java:32
enableBlessedEarthBurn false CursedEarthConfig.java:24
underWorldDimensionId 10 UnderWorldConfig.java:21
endOfTimeDimensionId 11 EndOfTimeConfig.java:21
filingCabinets.upgradeCapacity 4096 FilingCabinetsConfig.java:20
filingCabinets.upgradeCountMax 14 FilingCabinetsConfig.java:28
buildersWandBuildLimit 9 BuildersWandsConfig.java:19
superBuildersWandBuildLimit 49 BuildersWandsConfig.java:30
buildersWandCreativeBuildLimit 200 BuildersWandsConfig.java:36
damageTrowelWithBuildersWand 100 BuildersWandsConfig.java:41
TNTGeneratorExplosions true GeneratorConfig.java:231
invertedBlockDoesXRay 见配置 BlockConfig.java:207
pacifistsBenchInNonPeaceful 见配置 BlockConfig.java:183

发电机的 12 组容量 / 燃料 / 产出参数见 发电机家族 的数值表;文件柜三档的 numSlots / numItems 见 文件柜。

VoidQuarryConfig 的 22 个数值字段的具体默认值本条目无法核实——本条目只确认了字段名与数量,未逐一抄录。可在 虚空采掘场 页看到同样的说明。

交互

阶段 行为
构造阶段 UIEMixinLoader.setupMixinEnvironment() 加载全部配置类
preInit 各 config 类读入;方块 / 物品按开关注册;ModBiomes.init()(空方法)
preInit 末尾 RecipeLoader.loadAllRecipes() 注册 147 条配方(CommonProxy.java:136)
运行时 方块按开关条件决定是否 isEnabled();配置改动需重启生效

File system 上的访问转换器(AT)位于 src/main/resources/META-INF/utilitiesinexcess_at.cfg,包含 3 条条目(EntityLivingBase.field_70718_bc、InventoryCrafting.field_70465_c、EntityLiving.field_70728_aV)——这是访问转换器文件,与本模组配置的运行期开关无关,名字相似容易混淆。

相关条目