早期配置 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 幂等守卫,流程为:
- 解析路径
RetroFuturaBootstrap.API.gameDirectory().resolve("config").resolve("lwjgl3ify-early.json")(:84-86)。 - 用
GsonBuilder().disableJdkUnsafe().setPrettyPrinting()构造解析器(:87-89)。 - 文件存在则读入并反序列化为
ConfigObject(:91-103)。IOException包成RuntimeException重抛(:100-102),不吞。 - 把
cfg.extensibleEnums并入静态集合EXTENSIBLE_ENUMS(:105-107)——是追加而非覆盖。 - 把合并后的全集写回文件(
: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 抛出,启动失败 |
相关条目
- lwjgl3ify.cfg 配置 - 另一份 34 项配置
- RFB 字节码转换器 -
ExtensibleEnumTransformer如何消费这份清单 - 配置与注解 API - 其他 mod 的读写入口
- RetroFuturaBootstrap 加载插件 - 触发本配置加载的插件