FinderWindow

基本信息

属性 值
类名 sedridor.amidst.project.FinderWindow
文件 src/main/java/sedridor/amidst/project/FinderWindow.java
行数 59
继承 extends javax.swing.JFrame
启用版本 Minecraft 1.7.10

⚠️ 核心架构事实:AMIDST 是独立 Swing 窗口

FinderWindow 继承 JFrame(Java Swing),不是 Minecraft 的 GuiScreen / GuiWindow。

Project extends JPanel、CrashDialog extends JFrame、 AmidstMenu 是 JMenuBar —— 全 mod 共 3 个 Swing 顶层/容器类, 12 个文件 import javax.swing.*。

即:AMIDST 地图是 Minecraft 之外的一个独立操作系统窗口, 而非游戏内覆盖层。

由此推出的行为后果(都可从源码直接验证):

后果 依据
失焦不暂停游戏 Swing 窗口独立于游戏渲染循环
地图可拖出游戏窗口 setSize(1000, 800) 独立窗口
打开地图时按 F6 无效 TickHandler 的 currentScreen == null 只挡 MC 屏幕,挡不住 Swing 失焦,但 map.isVisible() 分支也不处理「已可见」
崩溃会弹独立对话框 CrashDialog 继承 JFrame

构造器

项 值
窗口标题 "ForgeAMIDST " + Amidst.version() —— version() 返回 "1.4 [Minecraft 1.7.10]" 或 "1.4"
窗口大小 1000 × 800
布局 BorderLayout
菜单栏 setJMenuBar(this.menuBar = new AmidstMenu(this))
图标 setIconImage(Amidst.icon)
初始可见 setVisible(true)(构造即显示)
单例 末尾 instance = this

⚠️ 构造器里就 setVisible(true) —— 窗口一建好就显示。 [TickHandler](../core/tick-handler) 里的 loadAmidst() + loadMap() 两连调即依赖这一点。

⚠️ 标题串是 "ForgeAMIDST"(大写 AMIDST), 而 @Mod name 是 ForgeAmidst(驼峰)。

静态字段

字段 类型 初值
instance FinderWindow null
curProject Project —
dataCollect boolean —

⚠️ FinderWindow.instance 的 null 检查是全 mod 打开地图的三处入口 (TickHandler、CommandAmidst、 GuiIngameMenuAmidst)共同依赖的判据。

关闭行为

匿名 WindowAdapter 的 windowClosing → dispose()。 ⚠️ dispose() 后 instance 仍指向已释放对象(无置 null), 所以下次按 F6 走 map != null && !map.isVisible() 分支会 setVisible(true) 一个已 dispose 的窗口。

关联