API 参考 / 事件系统
SceneUnregisteredEvent
模组场景注册被归属校验受理的 SceneHost.unregister(sceneId) 移除成事实之后投递一次。它标记的是「句柄彻底消亡」:此后再 push 同 id 视为全新注册、全新生命周期。
与其他感知面的区别:
SceneChangeEvent.Post:场景栈进出(每次切换都发,注册仍在)。Scene#onExit():场景实例离栈回调(实例仍可再次入栈)。- 本事件:注册移除(仅注销时发一次)。
注销是归属校验制(只能注销本模组、且完全离栈的场景注册)。所有拒绝路径(无身份 / 未注册 / 归属不可证 / 他人归属 / 仍在导航栈)都不发事件。
方法速览
| 方法 | 用途 |
|---|---|
declaredId() | 被注销的场景声明 id |
modId() | 注销受理时登记的归属模组 id |
declaredId()
java
public String declaredId();行为:返回模组声明的场景 id(与 SceneInfo.id() 同口径,例如 "mypanel",不是宿主的内部名 _mod_mypanel)。
modId()
java
public String modId();行为:返回注销受理时登记的归属模组 id。
示例
java
ctx.eventBus().subscribe(SceneUnregisteredEvent.class, event -> {
if (mySceneId.equals(event.declaredId())) {
cachedSceneHandle = null;
}
});完整签名
java
public class SceneUnregisteredEvent extends Event {
public SceneUnregisteredEvent(String declaredId, String modId);
public String declaredId();
public String modId();
}行为核验:宿主在 ModSceneAdapter.unregister 成功之后才 post,属于纯通知、不可回滚。不要在监听器里立刻重新注册同一 id(导航栈状态未定),回到稳定状态后再操作。
线程:调用 unregister 的线程(通常为游戏线程)。
稳定性: 新增,2.x 内只增不破。