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 行里看不到过滤逻辑。

相关