生命周期钩子参考
Estimated reading time: 5 minutesModLoader 在加载过程的各个阶段提供钩子(Hook),Mod 可以注册回调函数来响应特定事件。
AddonPluginHookPoint
这些钩子由 AddonPlugin 系统提供,Addon Mod 可以注册以响应加载过程中的各个事件。
AddonPluginHookPointExMustImplement
这些是 Addon Mod 必须实现的接口方法。
ModLoadController 详解
ModLoadController 是 ModLoader 的加载控制器,负责协调 Mod 的加载流程并允许 Mod 参与加载决策。通过注册 ModLoadControllerCallback,Mod 可以:
- 控制是否加载某个 Mod:通过
canLoadThisMod在 inject_early 执行前决定是否允许加载 - 响应 ModLoader 完成:通过
ModLoaderLoadEnd在加载全部完成后执行收尾逻辑
安全模式实现
ModLoader 的安全模式由 ModLoaderGui 通过 canLoadThisMod 实现。若 ModLoader 连续三次加载失败,下次启动时 ModLoaderGui 会通过 canLoadThisMod 返回 false 阻止所有 Mod 加载,让用户能够正常打开 Mod 管理器并卸载导致故障的 Mod。
懒加载与 tryInitWaitingLazyLoadMod
ModLoader 在 earlyload 执行过程中会不断调用 tryInitWaitingLazyLoadMod() 检查是否有 Mod 追加了懒加载 Mod。加密 Mod 利用此机制:在 earlyload 阶段解密后,将解密后的 Mod zip 通过 SideLazyLoad API 注入到 ModLoader 的加载队列中,ModLoader 会立即加载这些懒加载 Mod,并执行其 inject_early 和 earlyload 脚本。
ModLoadControllerCallback
由 ModLoadController 提供的回调接口,用于控制 Mod 加载行为。
钩子触发顺序
以下是完整的钩子触发顺序,对应加载系统的 21 个步骤:
异步支持
以下钩子支持异步操作(会等待返回的 Promise 完成):
afterInjectEarlyLoadafterModLoadafterEarlyLoadafterPreloadModLoaderLoadEnd
以下钩子仅支持同步操作:
canLoadThisMod(必须立即返回布尔值)
如果 Mod 需要在非常早期执行异步初始化,应在 afterInjectEarlyLoad 或 afterModLoad 钩子中进行。如果某个操作必须在所有其他 Mod 最后执行,应在 ModLoaderLoadEnd 中进行。
