开发者工具

基本信息

属性 值
类型 纯客户端 GUI 调试挂钩(Developer Tools addon)
@Mod 类 net.bdew.neiaddons.developer.AddonDeveloper,modid NEIAddons|Developer
开关 Addons 分类的 Developer Tools,默认 false
侧限制 checkSide(side) { return side.isClient(); } — 服务端永不加载
FML 依赖 after:NEIAddons(无其它)
无外部 mod 依赖 getDependencies() 继承基类返回空数组

这是全 mod 唯一默认关闭的 addon,因为 AddonDeveloper.isEnabledByDefault() 显式 return false;其余 5 个 addon 都用基类默认的 true。开发期调试用,正常游戏里需要手动在 .cfg 里开。

注册链路

AddonDeveloper.loadClient()          // NEI 调 IConfigureNEI 时
  -> DeveloperHelper.init()
    -> GuiContainerManager.addTooltipHandler(new DeveloperGuiHandler())

DeveloperGuiHandler implements codechicken.nei.guihook.IContainerTooltipHandler。这是它实现的唯一 NEI 接口,源码里没有第二个 IContainerTooltipHandler。

handleTooltip 的输出

在任意 GuiContainer 内用鼠标悬停,命中槽位后(slotNum > 0,注意是严格大于 0,槽位 0 会被跳过)向 tooltip 追加这些行:

行 内容
第 1 行 下划线 + Slot #<槽位下标>,颜色码 EnumChatFormatting.UNDERLINE
第 2 行 G: <GuiContainer 子类简名>
第 3 行 C: <Container 子类简名>
第 4 行 S: <Slot 子类简名>
第 5 行 I: <Inventory 子类简名> (#<getSlotIndex()>),或 I: NULL(红色)
第 6 行 <xDisplayPosition>/<yDisplayPosition>,槽位在 GUI 内的像素坐标

getItemDisplayName 与 getItemTooltip 两个接口方法都原样返回传入的 list,不做任何加工。

槽位命中判定是纯几何的:把鼠标坐标减去 gui.guiLeft / gui.guiTop,再与槽位 xDisplayPosition / yDisplayPosition 比对,槽位尺寸写死 16×16,容差 ±1 像素。遍历 gui.inventorySlots.inventorySlots 找第一个命中的槽位就 break。

getNBTData 类逻辑不存在——DeveloperGuiHandler 不实现任何数据提供者,只在客户端本地算,不发包。

配套的死代码

devDependencies 目录不存在,但 utils/SetRecipeCommandHandler(实现 SubPacketHandler)本应是这套工具的服务端配套。源码里 grep -rn "SetRecipeCommandHandler" src 只有自身第 19 行类声明与第 24 行构造函数两处命中——没有 registerHandler 调用,所以它永远不会被触发。

它的设计意图是:客户端把配方所需的物品栈按槽位号打包成一个 NBT 列表发给服务端,服务端在匹配的 Container 里把 SlotClass 实例的槽位逐个 putStack(stmap 里没有的槽位被置 null,等于清空)。

装饰性资源

src/main/resources/assets/neiaddons/textures/items/invalid.png 存在但没有任何代码引用,属开发期遗留素材。

相关条目