SizableGuiTexturedButton

可指定尺寸的按钮

基本信息

属性 值
路径 com.gtnewhorizons.navigator.api.xaero.buttons.SizedGuiTexturedButton
行数 69
包 api/xaero/buttons/(Xaero 独有的子包)

唯一有 buttons 子包的地图 API

地图 api 子包数 buttons/
Xaero 4(renderers / rendersteps / waypoints / buttons) 有(本类)
JourneyMap 3(render / drawsteps / waypoints) 无

⚠️ ButtonManager 的 getIcon(SupportedMods mod, String theme)(:29) 与 getButtonText()(:32)在 3 个地图上都必须返回结果 —— 但只有 Xaero 需要自定义按钮控件。

为什么需要自己写按钮

⚠️ Minecraft 的 GuiButton(1.7.10)不支持自定义尺寸 —— 它继承 Gui,宽高由 drawGuiContainerBackgroundLayer 固定。

而 Xaero 的地图 GUI 需要非标准尺寸的图层按钮 (GuiMapMixin(332 行)在注入时按 Xaero 的布局摆按钮)。

所以本类扩展 GuiButton 允许显式指定宽高。

69 行的构成

部分 说明
字段 自定义 width / height(覆写 Gui 的)
构造器 坐标 + 宽 + 高 + 文本 + 纹理
drawButtonBackground 覆写 按新尺寸画背景
func_146114_a(drawGuiScreenForegroundOverlay)覆写 按新尺寸画文字

⚠️ 69 行基本全是绘制覆写 —— 无任何逻辑, 是纯粹的「尺寸可配置的按钮」。

名字里的 Sized

⚠️ 类名 SizableGuiTexturedButton —— 而不是 SizedGuiTexturedButton(少一个 a)。

⚠️ 这与 Waypoint 等类不冲突, 但 Sizable(可设定尺寸)vs Sized(已设定尺寸) 在英文里是两个不同单词,类名用的是前者。

与 ButtonManager 的关系

[ButtonManager](../model/buttonmanager) 的抽象子类
        │  getIcon(SupportedMods, String) → ResourceLocation
        │  getButtonText() → String
        ▼
按钮控件(本类,仅 Xaero 需要)
        ▲
[GuiMapMixin](../mixin/guimapmixin) 注入时实例化并摆位

⚠️ 本类不是 ButtonManager 的子类 —— 它是控件,而 ButtonManager 是逻辑。 DirtyChunkButtonManager(24 行) 才是逻辑侧的实现。

相关