API 参考 / 能力对账提示
能力对账提示
capabilities().get(X.class)可能返回null:宿主只在对应时机注册对应能力——ModServiceRegistry、SceneHost、StoryAccess为进程级;GameStateAccess/InputAccess/AudioAccess只在游玩中存在;GameplayHud/LaneInputMapper只在游玩场景被消费。取用前一律判空,不要长期缓存到静态字段。- 能力不是配置:
GameplayHud的可见性 getter 是「模组主动声明」的开关,不是真实渲染状态;ModService只透传布尔 / 整数 / 浮点 / 字符串四种原语。业务状态请自行持久化(ModContext.config())或经ModService协商键语义。 - 别在游戏线程做阻塞 IO:网络一律走
ctx.network().executor();onHotkey、SettingsItem.onEnter/onAdjust、GlobalHotkey.onHotkey、UiCustomization的点击与渲染回调都在游戏线程或渲染线程,必须轻量;onUnload中自行关闭自己打开的 socket / 连接。 - 停用即回收:模组注册的快捷键、设置项、状态栏块、结算渲染器、轨道样式提供器、跨模组服务、游玩实体都由宿主在停用 / 退出时自动清理,
onUnload中逐个 remove 是多余的。唯一例外是需要外部资源的对象(socket、文件句柄),必须自行关闭。 - 注册顺序即优先级:
GameplayHud可见性取「任一隐藏即隐藏」而渲染依次叠加;HudElementOverride颜色取启用顺序最后者、偏移求和、透明度连乘;LaneInputMapper为「声明管辖键的第一个模组负责该键,无声明时按启用顺序回退询问第一个映射非空者」。若你的模组依赖另一个模组的服务或映射,应在Mod.loadOrder()中声明loadAfter。