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。
  • 悬停物品的解析有三级回退:
    1. 反射读 GuiContainer.theSlot(SRG field_147006_u)取槽位物品;
    2. 若为 null 且 NEI 已加载且未隐藏,反射调 codechicken.nei.guihook.GuiContainerManager.getStackMouseOver;
    3. 再为 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, 结束后按原状态恢复。

相关条目