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 的窗口。
关联
- Project -
JPanel,承载地图 - AmidstMenu -
JMenuBar - Map - 实际地图组件
- TickHandler -
FinderWindow.instance的消费者