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 行) 才是逻辑侧的实现。
相关
- ButtonManager - 按钮逻辑(抽象)
- GuiMapMixin - 实际使用方(332 行)
- XaeroWaypointManager - 同属
api/xaero