早期配置 JSON

基本信息

属性 值
配置文件 config/lwjgl3ify-early.json
解析类 me.eigenraven.lwjgl3ify.rfb.EarlyConfig
加载时机 RFB 插件 onConstruction 阶段
加载方式 MethodHandles 反射调用 EarlyConfig.load()
配置项总数 1(extensibleEnums 字符串数组)
默认可扩展枚举数 56

这是第二份配置文件,与 config/lwjgl3ify.cfg 完全独立:前者由 RFB 在 FML 之前读取,后者由 FML coremod 读取。

功能

加载机制

Lwjgl3ifyRfbPlugin.onConstruction 先把 EarlyConfig 排除出类加载器(Lwjgl3ifyRfbPlugin.java:29),随后用 Class.forName + MethodHandles.lookup().findStatic(earlyConfig, "load", ...) 反射触发静态加载(:32-41)。失败经 Throwables.propagate 抛出(:39-40),不静默。

EarlyConfig.load()(EarlyConfig.java:78-117)带 isLoaded 幂等守卫,流程为:

  1. 解析路径 RetroFuturaBootstrap.API.gameDirectory().resolve("config").resolve("lwjgl3ify-early.json")(:84-86)。
  2. 用 GsonBuilder().disableJdkUnsafe().setPrettyPrinting() 构造解析器(:87-89)。
  3. 文件存在则读入并反序列化为 ConfigObject(:91-103)。IOException 包成 RuntimeException 重抛(:100-102),不吞。
  4. 把 cfg.extensibleEnums 并入静态集合 EXTENSIBLE_ENUMS(:105-107)——是追加而非覆盖。
  5. 把合并后的全集写回文件(:108-116)。因此该文件既是输入也是输出,首次运行后它就是默认清单的快照。

唯一配置项 extensibleEnums

ConfigObject(EarlyConfig.java:71-74)只有一个 public String[] extensibleEnums 字段。语义是"哪些枚举应当由 ExtensibleEnumTransformer 变成可扩展"。

Config.getExtensibleEnums() 与 Config.addExtensibleEnum(String) 只是对 EarlyConfig.EXTENSIBLE_ENUMS 的转发(Config.java:239-246)。

默认清单的 56 个类

DEFAULT_EXTENSIBLE_ENUMS(EarlyConfig.java:18-67)共 56 个类名(56 次引用、56 个唯一值,两种计数一致)。按源码内的分组注释:

分组(源码分组注释) 注释行 条数
// From EnumHelper :19 14
// From GTNH crashes :35 13
// The Lord of the Rings Mod: Legacy :43 1
// LotR Addons :45 10
// Reika's mods :51 10
// Et Futurum Requiem :61 2
// EnderIO Addons :64 1
合计 56

另有 3 个纯分隔用的 // 注释行(:29、:42、:66)及分组标题 // Non-GTNH Mods Compat(:42 之后),本身不含类名,计 0 条。Forge 的 PopulateChunkEvent / OreGenEvent / BiomeDictionary 等 5 个类包含在 // From GTNH crashes 组内,源码没有为它们单列注释。

代表性条目:net.minecraft.item.EnumAction、net.minecraft.enchantment.EnumEnchantmentType、net.minecraftforge.common.BiomeDictionary$Type、gregtech.api.enums.Element、ic2.core.init.InternalName、thaumcraft.common.entities.golems.EnumGolemType、org.bukkit.Material、ganymedes01.etfuturum.tileentities.TileEntityBanner$EnumBannerPattern、crazypants.enderio.ModObject。

这份清单中除 Minecraft / Forge 之外的类来自大量第三方 mod。对那些不在场的 mod,ExtensibleEnumTransformer 只会跳过——但具体跳过行为无法在本仓库核实,因为转换器的 shouldTransformClass 细节依赖 ASM 字节匹配,不在本次核验范围内。

计数交叉验证

方法 结果
正则 "..." 匹配(EarlyConfig.java:18-67) 56
仅匹配行首字符串字面量 38(漏掉同行内多个字面量,故不可用)
Python 解析:先剥 // 注释再提取全部引号字符串 56(唯一值 56)

数值

数值 值
配置文件数 2(本文档 + config/lwjgl3ify.cfg)
ConfigObject 字段数 1
默认可扩展枚举数 56
默认清单唯一值数 56
可扩展枚举运行时集合类型 HashSet<String>(EarlyConfig.java:69)

交互

触发 行为
每次启动(RFB 阶段) 读 lwjgl3ify-early.json,与内置 56 项合并后写回
其他 mod 调用 ConfigUtils.addExtensibleEnum(...) 追加进内存集合;是否落盘取决于下次启动时的写回
该文件被删 使用内置 56 项默认,随后重新写盘生成
该文件损坏(JSON 语法错误) Gson 抛异常,load() 未捕获 → 由 onConstruction 的 Throwables.propagate 抛出,启动失败

相关条目