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 无效。

关联