TooltipOverlayHandler
基本信息
| 属性 | 值 |
|---|---|
| 类名 | squeek.applecore.client.TooltipOverlayHandler |
| 类型 | class,@SideOnly(Side.CLIENT) |
| 事件 | RenderTickEvent(Phase.END) |
| 静态字段 | toolTipX / toolTipY / toolTipW / toolTipH(由 GuiScreenMixin 写入) |
| 启用版本 | Minecraft 1.7.10(仅客户端) |
功能
在食物 tooltip 下方用原版 hunger 图标画一个迷你预览, 显示这口食物实际能回复多少饥饿与多少饱和;并把「被事件改写后的数值」 与「原始数值」叠加对比(同一格叠加显示为半透明)。
实现要点
- 触发条件:
ALWAYS_SHOW_FOOD_VALUES_TOOLTIP为真, 或SHOW_FOOD_VALUES_IN_TOOLTIP为真且按住 Shift。 - 悬停物品的解析有三级回退:
- 反射读
GuiContainer.theSlot(SRGfield_147006_u)取槽位物品; - 若为 null 且 NEI 已加载且未隐藏,反射调
codechicken.nei.guihook.GuiContainerManager.getStackMouseOver; - 再为 null 且当前界面是 The Spice of Life 的食物日志,
反射读
GuiScreenFoodJournal.hoveredStack。
- 反射读
- 两处 NEI / SpiceOfLife 集成都在静态初始化块里用
Loader.isModLoaded+ 反射完成,失败仅打日志不中断。 - 若
defaultFoodValues与modifiedFoodValues相等且两者 hunger 与 saturationModifier 均为0,直接返回不绘制。 - 饱和度条用
Math.max(1, ...)保底 1 格;超过 10 格时改用 红色Nx文字表示,符号取自defaultFoodValues.saturationModifier的正负。 - 绘制时用
Gui.icons作底图、applecore:textures/icons.png作饱和度遮罩; 饱和度段整体GL11.glScalef(0.75F, 0.75F, 0.75F)缩放, 故坐标回调用x * 4 / 3换算。 - tooltip 四角位置由静态字段
toolTipX/Y/W/H提供, 由 GuiScreenMixin 在drawHoveringText中写入。 - 绘制背景时用
GL11.glDisable(GL11.GL_LIGHTING)/GL11.GL_DEPTH_TEST, 结束后按原状态恢复。
相关条目
- GuiScreenMixin - 提供 tooltip 位置字段
- GuiDrawMixin - CodeChickenLib 新版 tooltip 绘制补丁
- GuiDrawMixinLegacy - 旧版补丁
- ModConfig - 2 个 tooltip 配置项
- FoodValues - 被比较的两组数值
- KeyHelper - Shift 键状态查询
- HUDOverlayHandler - 同一功能集的 HUD 分支