ModuleSystem 模块系统
Estimated reading time: 5 minutes基本介绍
ModuleSystem 是框架的模块注册、依赖排序与生命周期调度系统。一般内容模组不需要直接注册框架模块;优先使用 addonPlugin 的 script 加载普通脚本。只有在你明确要扩展框架内部能力时,才使用 maplebirch.register。
整体架构与初始化流程参见 核心架构。
注册模块
register(name, module, dependencies?)
在 maplebirch 上注册模块(代理到 ModuleSystem.register)。
- @return
boolean:成功为true;同名已存在为false。
扩展模块的 source(来源 Mod 名)由框架在 AddonPlugin 加载 module 脚本时自动记录,无需手动传入第四个参数或调用 runWithSource。
get(name)
获取已注册模块实例。
dependencyGraph
返回每个模块的依赖关系。常见字段:
暴露模块(EXPOSED)
若模块对象带有 exposed: true,注册成功后状态为 EXPOSED,并直接挂载到 maplebirch[name]。
EXPOSED 行为
暴露模块不参与普通初始化流程(不调用 preInit / Init / loadInit / postInit),也不会出现在禁用界面的可禁用模块列表中;依赖图会把 EXPOSED 模块视为已满足的依赖。若 maplebirch[name] 已被占用,注册会失败。
模块状态
预初始化完成不会改变模块状态,而是记录在内部的 preInitialized 集合;主初始化完成后才进入 MOUNTED。
生命周期方法
依赖规则
- 模块会在所有依赖满足后再初始化;会做传递收集(A→B→C 则 A 等待 C)。
EXPOSED模块视为已满足依赖。- 依赖进入
ERROR或DISABLED时,依赖它的模块不会继续初始化。 - 循环依赖会在注册时被检测并阻止。
注意事项
- 内容型模组应优先使用
script,而不是注册框架模块(v3.2.5 起注册方式已简化,见 更新日志)。 - 模块命名:建议带 Mod 前缀,避免与内置模块或其它 Mod 冲突。
- 错误处理:单个模块初始化失败不会阻塞其它模块。
- 禁用机制:受保护模块(
protected)不会被禁用界面关闭;扩展模块可通过 GUI 启禁(source由框架记录)。
