物品 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)。前置判据:
MineTweakerMC.getIPlayer(event.entityPlayer)非 null(:22)MineTweakerMC.getIItemStack(event.itemStack)非 null(:24)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),不影响正确性。
相关条目
- /minetweaker 指令列表 -
tooltips指令的注册位置 - 反射与日志助手 -
LogHelper.print的实现