打开链接(openLink)
基本信息
| 属性 | 值 |
|---|---|
type 值 |
openLink(equals,大小写敏感) |
| 实现类 | lumien.custommainmenu.lib.actions.ActionOpenLink |
| 参数 | link(URL 字符串) |
| 分发点 | GuiConfig.getWantedAction(GuiConfig.java:391-393) |
⚠️ 8 个动作里只有
openLink用equals而非equalsIgnoreCase(GuiConfig.java:391),其余 7 个都是大小写不敏感。写成openlink会匹配失败,getWantedAction一路return null(:419),按钮静默失效。
核心差异
本 mod 唯一会离开 Minecraft 进程的动作(通过 java.awt.Desktop)。openFolder 也会调 Desktop,但打开的是本地目录且没有二次确认。
二次确认流程
perform 并不直接开浏览器,而是先弹出自建的确认框(ActionOpenLink.java:17-20):
ActionOpenLink.perform
→ displayGuiScreen(new GuiCustomConfirmOpenLink(menu, link, -1, false))
→ menu.beingChecked = source // 记住是哪个按钮/文本点的
↓ 用户选择
GuiCustomConfirmOpenLink.actionPerformed
→ id == 2 时复制链接到剪贴板
→ parentScreen.confirmClicked(id == 0, ...) // 只有"确定"为 true
↓
GuiCustom.confirmClicked
→ 从 beingChecked 取出 ActionOpenLink.getLink()
→ 反射 java.awt.Desktop.getDesktop().browse(new URI(link))
→ 失败只 log "Couldn't open link"
→ displayGuiScreen(this) // 回到原界面
三按钮确认框
GuiCustomConfirmOpenLink.initGui 把原版 GuiYesNo 的两个按钮删掉重加成三个(GuiCustomConfirmOpenLink.java:31-41):
| ID | 位置 | 行为 |
|---|---|---|
0 |
左 | 确认打开 |
2 |
中 | 复制链接到剪贴板 |
1 |
右 | 取消 |
并额外在 y=110 用 16764108(0xFFDD44)画一行 chat.link.warning 文字。showSecurityWarning 可由 disableSecurityWarning() 关掉,但本 mod 内部没有任何调用点。
链接可来自文本元素
GuiCustom.confirmClicked 同时接受 Button 和 Text 两种来源(GuiCustom.java:148-156),因此 文本(Text) 也能挂 openLink。注意 Text.setLink(String)(Text.java:54-56)虽然存在,但全仓无调用点,实际只能靠配置里的 action 块。
使用场景
主菜单上的官网、赞助、模组页面、CurseForge 链接等。
相关条目
- 打开文件夹(openFolder) - 另一个走
java.awt.Desktop的动作 - 按钮(Button) - 常见挂载位置
- 文本(Text) - 也可挂载