世界转换警告 API

基本信息

属性 值
接口 com.gtnewhorizon.gtnhlib.api.gui.IWorldConversionWarning
注册表 com.gtnewhorizon.gtnhlib.api.gui.WorldConversionWarningManager
默认 GUI com.gtnewhorizon.gtnhlib.api.gui.GuiConfirmationWCW(extends GuiConfirmation)
触发工具 com.gtnewhorizon.gtnhlib.api.gui.WCWHelper
触发的 mixin 组 Mixins.WORLD_LOAD_WARNING
作用面 客户端 GUI,服务端降级为纯文本

功能

让 mod 在存档需要转换(缺映射)时,于客户端弹出自定义确认 GUI,服务端则打印纯文本提示。触发时机是 FMLMissingMappingsEvent 之后(IWorldConversionWarning.java:10-12)。

同一 api/gui 包内 4 个类各司其职:

类 角色
IWorldConversionWarning mod 实现的接口,声明"要不要警告"与"警告说什么"
WorldConversionWarningManager 静态注册表,WARNINGS 为 HashMap<String, IWorldConversionWarning>
GuiConfirmationWCW 继承原版 GuiConfirmation 的默认确认界面
WCWHelper 静态 fireWarnings(),遍历注册表逐个触发

数值

数值名 值
接口方法数 4(2 抽象 + 2 客户端 default)
抽象方法 shouldShow()、getServerMessage()
客户端方法 getClientMessage()、getGui(StartupQuery)
注册表初始容量 0(new HashMap<>(),mod 自行填充)

交互

IWorldConversionWarning 的 4 个方法:

方法 侧 说明
shouldShow() 双方 返回是否要显示警告;在 FMLMissingMappingsEvent 后调用
getServerMessage() 服务端 纯文本消息
getClientMessage() 客户端 默认 GUI 的正文文本
getGui(StartupQuery) 客户端 返回自定义 GuiConfirmationWCW;返回 null 则用默认 GUI

getClientMessage 与 getGui 都带 @SideOnly(Side.CLIENT),接口注释(IWorldConversionWarning.java:33)额外要求:实现类的覆写方法也必须标注 @SideOnly(Side.CLIENT),否则 common 侧加载失败。

WorldConversionWarningManager.register(String id, IWorldConversionWarning wcw) 写入静态 WARNINGS map,key 为 mod 自选的唯一 id。

相关条目