TickHandler
基本信息
| 属性 | 值 |
|---|---|
| 类名 | sedridor.forgeamidst.TickHandler |
| 文件 | src/main/java/sedridor/forgeamidst/TickHandler.java |
| 行数 | 51 |
| 启用版本 | Minecraft 1.7.10 |
功能
F6 快捷键的客户端轮询,以及地图窗口的懒加载。由
ForgeAmidst 的 init 中
FMLCommonHandler.instance().bus().register(new TickHandler())
与 TickHandler.registerBind() 装配。
快捷键
| 属性 | 值 |
|---|---|
| 变量 | private static KeyBinding mapButton |
| 显示名 | ForgeAMIDST(全大写 AMIDST) |
| 默认键 | Keyboard.KEY_F6 |
| 分类 | key.categories.misc |
| 注册 | ClientRegistry.registerKeyBinding(mapButton) |
⚠️ 显示名是 ForgeAMIDST(大写 AMIDST),
而 @Mod 的 name 是 ForgeAmidst(驼峰),modName 是 ForgeAmidst-GTNH。
同一个 mod 在三处有三种写法,不要混用。
onTick(TickEvent.ClientTickEvent)
三重与门(全部满足才触发):
tick.phase == TickEvent.Phase.END
&& ForgeAmidst.getMC().theWorld != null
&& ForgeAmidst.getMC().currentScreen == null
&& System.currentTimeMillis() >= nextBindTriggerTime
&& mapButton.isPressed()
⚠️ currentScreen == null 是硬条件 ——
任何 GUI 打开时按 F6 都无效(包括地图窗口自身已打开时)。
冷却
nextBindTriggerTime = System.currentTimeMillis() + 1000L;
⚠️ 触发后置 +1000 ms(1 秒)冷却,防止长按连触发。
registerBind() 里初值为 System.currentTimeMillis()(即立即可触发)。
懒加载两分支
| 条件 | 行为 |
|---|---|
FinderWindow.instance == null |
loadAmidst() 后 loadMap() |
map != null && !map.isVisible() |
setVisible(true);若 curProject == null 则 clearProject() + setProject(new Project(seed, worldTypeName)) |
new Project(...) 的两个实参来自
ForgeAmidst.getWorld().provider.getSeed() 与
provider.terrainType.getWorldTypeName()。
⚠️ 窗口已可见时按 F6 无任何反应(既不关闭也不重载)。 隐藏地图只能通过窗口自身的关闭按钮。
⚠️ getWorld()(ForgeAmidst 静态)必须非 null 才继续,
所以在主菜单或未进世界时 F6 无效。
关联
- ForgeAmidst - 注册方,持有静态
mc/world - CommandAmidst - 另一条打开地图的路径(无冷却)
- FinderWindow -
FinderWindow.instance - Project -
new Project(seed, worldType)