FML 生命周期阶段
基本信息
| 属性 | 值 |
|---|---|
| 枚举类 | alexiil.mods.load.FMLProgressTracker.Stage |
| 总阶段数 | 7(含 LOAD_COMPLETE → FINAL_LOADING 衔接) |
| 跨度 | PROGRESS_SPAN = 1F / (VALUES.length - 1) = 1/6 ≈ 0.1667 |
| 根条索引 | FML_ROOT_BAR_INDEX = 0(“Loading”) |
| 生命周期条索引 | FML_LIFECYCLE_BAR_INDEX = 1 |
阶段枚举
| 阶段 ordinal | nameKey | fallbackName | fmlTitle | 跨度区间 |
|---|---|---|---|---|
| 0 | construction |
Construction | Construction |
0.000 – 0.167 |
| 1 | pre_initialization |
Pre Initialization | PreInitialization |
0.167 – 0.333 |
| 2 | lite |
LiteLoader | null |
0.333 – 0.500 |
| 3 | initialization |
Initialization | Initialization |
0.500 – 0.667 |
| 4 | post_initialization |
Post Initialization | PostInitialization |
0.667 – 0.833 |
| 5 | completed |
Completed | LoadComplete |
0.833 – 1.000 |
| 6 | reloading_resource_packs |
Reloading Resource Packs | null |
1.000(连接 LOAD_COMPLETE 后的刷新) |
行为
fromProgressBar(bar):根据当前活跃ProgressBar列表里index=1的标题与fmlTitle字符串匹配,返回对应Stage;非生命周期条返回null。translate():查betterloadingscreen.state.<nameKey>的翻译键(来自assets/betterloadingscreen/lang/*.lang),未命中用fallbackName。PROGRESS_SPAN:把 0~1 整体进度均分到 6 个阶段(含LOAD_COMPLETE);FINAL_LOADING仅在LOAD_COMPLETEpop 时显示在 1.0 处。
三类回调
FMLProgressTracker 在 ASM transformer 注入到 ProgressManager.push/step/pop 后调用:
onBarPush(bar)
- 客户端侧才生效。
refreshActiveBars()重抓ProgressManager.barIterator()到activeBars。- 调
displaySubProgress()把活跃条中非生命周期条的最新一条写到 sub-progress。
onBarStep(bar)
- 通过
Stage.fromProgressBar判断当前 bar 是否为生命周期条。 - 是生命周期条 → 计算
percent = (stage.ordinal() + completedSteps / steps) * PROGRESS_SPAN,并把 bar.getMessage() 拼成"<stage>: loading <message>"。 - 不是 → 仅刷新 sub-progress,不动主进度。
onBarPop(bar)
- 若 pop 的是
LOAD_COMPLETE→ 主进度跳到1F,文本切换为FINAL_LOADING.translate()。 - 其他生命周期条 pop → 主进度跳到
(ordinal + 1) * PROGRESS_SPAN,仅显示阶段名(注释明确:避免误导用户以为是刚 pop 的那个 mod 卡住)。 - 非生命周期条 pop → 刷新 sub-progress。
子进度计算
getSubProgress() 扫描 activeBars 里 index > FML_ROOT_BAR_INDEX 且不是生命周期条且 title 非空的条,取首条标题 + 末条标题(用 " - " 连接),以及末条 message 与 step/steps 计算的百分比。
LiteLoader 桥接
LiteLoaderProgress extends com.mumfrey.liteloader.client.gui.startup.LoadingBar,覆盖 LiteLoader 的 _incLiteLoadingBarProgress / _setEnabled / _setMessage 等回调,把 LiteLoader 进度折算到 LITE_LOADER_INIT 阶段的内部比例(PROGRESS_SPAN * liteProgress / totalLiteProgress)后通过 ProgressDisplayer.displayProgress 上报。
相关条目
- Coremod 安装 - 注册阶段回调的 ASM 转换器
- ProgressDisplayer 实现 - 接收阶段进度
- 生命周期/副进度显示 - layout 段 mainProgressBar/secondaryProgressBar 配置