物品 tooltip 叠加

基本信息

属性 值
类 modtweaker2.ClientEvents(42 行)
事件 net.minecraftforge.event.entity.player.ItemTooltipEvent
客户端专用 是(ModTweaker2.java:86-88 条件注册)
开关 /minetweaker tooltips

功能

这是 ModTweaker 唯一面向玩家的可见功能:在物品 tooltip 底部追加该物品的 MineTweaker 配方键名,让写脚本的人不用反复跑 dump 指令就能抄到正确的物品名。

注册

仅客户端注册(ModTweaker2.java:86-88):

if (FMLCommonHandler.instance().getSide() == Side.CLIENT) {
    MinecraftForge.EVENT_BUS.register(new ClientEvents());
}

服务端不会注册该监听器,因此不产生任何服务端开销。

开关与状态

两个 public static 字段(ClientEvents.java:16-17):

字段 类型 含义
active boolean 是否显示叠加层,由 /minetweaker tooltips 取反(Commands.java:44)
cooldown int 打印冷却计数

active 默认为 false,即必须先执行一次 /minetweaker tooltips 才会生效。Commands 里该指令是 2 条无条件指令之一(Commands.java:36-46),其 ICommandFunction 匿名类体只有一行 ClientEvents.active = !ClientEvents.active;(Commands.java:44)——客户端专用逻辑被写进了通用指令体,因此服务端执行该指令只会翻转一个无人读取的标志。

渲染逻辑

onDrawTooltip(ItemTooltipEvent)(ClientEvents.java:19-40)逐层判空后取 hand.toString() 追加到 event.toolTip(ClientEvents.java:28-29)。前置判据:

  1. MineTweakerMC.getIPlayer(event.entityPlayer) 非 null(:22)
  2. MineTweakerMC.getIItemStack(event.itemStack) 非 null(:24)
  3. active 为 true(:26)

复制到日志

按住疾跑键(keyBindSprint,ClientEvents.java:30)会把配方名与显示名一起打到日志:

print(print + "  --  " + hand.getDisplayName());

(ClientEvents.java:33,print 是静态导入的 LogHelper.print,见 ClientEvents.java:3。)用途是把「配方名 ↔ 物品显示名」的对照直接灌进 minetweaker.log。

冷却计数

按住疾跑键时 cooldown 置 30(ClientEvents.java:32),松键或再次触发时逐次递减(ClientEvents.java:34-35)。效果是连续按住疾跑键最多每 30 次 tooltip 事件才打印一行,避免刷屏。计数器无上限检查,长时间不触发会一直增大,但只在 cooldown <= 0 时才被比较(ClientEvents.java:31),不影响正确性。

相关条目