RetroFuturaBootstrap 插件

基本信息

属性 值
插件描述符 src/main/resources/META-INF/rfb-plugin/hodgepodge.properties
插件类 com.mitchej123.hodgepodge.core.rfb.HodgepodgeRfbPlugin
源目录 core/rfb/(10 个 Java 文件:HodgepodgeRfbPlugin + hooks/ 4 + transformers/ 5)
框架 com.gtnewhorizons.retrofuturabootstrap.api.RfbClassTransformer(RetroFuturaBootstrap)
编译依赖 dependencies.gradle:17 —— compileOnly("com.gtnewhorizons.retrofuturabootstrap:RetroFuturaBootstrap:1.0.16") { transitive = false }
关联 Coremod 引导、ASM 变换器、早期配置

功能

RetroFuturaBootstrap(RFB)是 GTNHLib 提供的类加载前改写框架。与 FML coremod 相比,它的 transformer 拿到的是 ClassNodeHandle(可直接操作的 ASM 树),而 FML 那条路拿到的是已决定的字节数组。

Hodgepodge 通过 RFB 改写 Forge 自身的 2 个热点类,外加 2 个仅调试用的变换器。

描述符

META-INF/rfb-plugin/hodgepodge.properties:

键 值
name Hodgepodge
version ${version} —— Gradle 占位符,运行时由构建期替换
className com.mitchej123.hodgepodge.core.rfb.HodgepodgeRfbPlugin
transformerExclusions com.mitchej123.hodgepodge.core.shared
loadAfter mixin
loadRequires gtnhlib
loadBefore / versionConstraints / additionalVersions 空

loadRequires=gtnhlib 表示 RFB 插件在运行期需要 GTNHLib 在场。与 mixins 的顺序由 loadAfter=mixin 固定。

明细

插件生命周期

HodgepodgeRfbPlugin.java 只有两个覆写方法:

方法 行为 源位置
onConstruction(PluginContext) Launch.blackboard.put("hodgepodge.rfbPluginLoaded", TRUE) :21-24
makeTransformers() 按 EarlyConfig 开关动态组装变换器数组 :27-40

4 个变换器

变换器 安装条件 目标类 用途
ForgeConfigurationTransformer !EarlyConfig.noLeanerForgeConfiguration Forge Configuration 精简配置载入流程
ForgeEventSubscriptionTransformer !EarlyConfig.noFasterForgeEventTransformer Forge 事件订阅 加速事件分发
ConfigParsingTimeTransformer EarlyConfig.debugLogConfigParsingTimes(JVM -Dhodgepodge.logConfigTimes) 配置类 仅调试:统计解析耗时
EnumValuesTransformer EarlyConfig.debugEnumValuesSpam(JVM -Dhodgepodge.logEnumValues) Enum.values() 调用点 仅调试:统计 values() 重复复制

后两项由 hooks/ 下的对应 Hook 类(ConfigParsingTimeHook、EnumValuesHook)承载逻辑。EnumValuesHook 在复制次数超阈值时写 EnumValuesDebug.csv(EnumValuesHook.java:41-53)。

已知的一处静默失败

EnumValuesHook.printResults() 的 catch (Throwable ignored) {}(EnumValuesHook.java:52)吞掉了调试 CSV 的写入失败。这是有意的 —— 它只包住调试输出,失败时丢掉一份诊断文件,不影响任何游戏行为。与之对照,Compat.java:52 的 catch (Exception ignored) {} 同样是探测式空 catch(检查 NEI 是否有书签面板 API)。

Hodgepodge 主体代码中没有其它空 catch(src/main/java 下非 mixin 目录全量扫描:仅此 2 处)。

数值

项 数量
RFB 变换器 4(2 个生产 + 2 个调试)
默认开启的生产变换器 2
默认关闭的调试变换器 2
Hook 类 4(ConfigParsingTimeHook、EnumValuesHook、ForgeConfigurationHook、ForgeEventSubscriptionHook)
变换器类 5(含 EnumASMHelper 工具类)

相关条目