GuiTags
tag 浏览器界面
基本信息
| 属性 | 值 |
|---|---|
| 路径 | com.github.lunatrius.ingameinfo.client.gui.GuiTags |
| 行数 | 70 |
| 父类 | net.minecraft.client.gui.GuiScreen |
| 打开方式 | /igi taglist(延迟 10 tick) |
三个控件(:11-13)
| 字段 | 类型 | 位置 |
|---|---|---|
guiTagList |
GuiTagList |
整屏 |
guiTextField |
GuiTextField |
width/2 - 155, height - 24,150×18 |
btnDone |
GuiButton |
width/2 + 5, height - 25,150×20 |
⚠️ 文本框没有 addTextField 注册到 buttonList ——
1.7.10 的 GuiTextField 通常需要加入控件列表才能正确处理焦点/鼠标,
本类只在 mouseClicked(:33-37)里手动转发给它。
⚠️ 文本框宽度 150,位于屏幕底部,
而 GuiTagList 的列表区域是
y = 18 到 height - 30(:28)——
两者不重叠(列表底边 height-30 在文本框顶边 height-24 之上)。
文案
private final String strTagList = I18n.format("gui.ingameinfoxml.taglist"); // :15
⚠️ 用 gui. 前缀,与本 mod 其它本地化 key 的
ingameinfoxml.* 前缀(见 Names)不同。
gui.done 则是原版 key。
所以本类的本地化 key 体系是混用的:
gui.ingameinfoxml.taglist(本 mod)+ gui.done(原版)。
三个回调
| 方法 | 行 | 行为 |
|---|---|---|
initGui() |
:18-23 |
建三个控件,btnDone 加进 buttonList |
actionPerformed(GuiButton) |
:26-30 |
只处理 btnDone → displayGuiScreen(null) |
mouseClicked |
:32-38 |
转发给 guiTextField,再问 guiTagList |
mouseMovedOrUp |
:40-45 |
转发给 guiTagList(func_148181_b) |
转发模式
public void mouseClicked(int x, int y, int action) {
this.guiTextField.mouseClicked(x, y, action);
if (action != 0 || !this.guiTagList.func_148179_a(x, y, action)) {
super.mouseClicked(x, y, action);
}
}
⚠️ 文本框是无条件转发的(不判是否点在它身上), 而列表是「未命中才交给父类」。两个控件的转发策略不一致。
⚠️ 列表的 func_148179_a / func_148181_b 是 GuiList 的 SRG 名
(未映射的 MCP 方法名)—— 说明这些方法在 1.7.10 的 MCP 映射里
没有人类可读名,作者直接用了 SRG 名。
这在 GTNH 的映射环境下能编译,但换映射可能失效。
搜索功能
文本框显然用于过滤 tag(配合 GuiTagList)。
⚠️ 本类没有 keyTyped 覆写,
所以输入的字符如何传给列表做过滤,取决于
GuiTagList 自己的实现或缺失 ——
本类的 70 行里看不到过滤逻辑。
相关
- GuiTagList - 列表控件
- TagRegistry - 数据源(151 个 tag)
- InGameInfoCommand -
/igi taglist的调用方