DiagramGroup

基本信息

api.diagram.DiagramGroup —— 同时实现 NEI 的两个处理器接口:

public class DiagramGroup implements ICraftingHandler, IUsageHandler

因此 Registry.generateDiagramGroups() 对同一个实例同时调用 API.registerRecipeHandler(...) 与 API.registerUsageHandler(...)。

三种构造方式

构造器 用途
DiagramGroup(info, matcher) 首次创建(委托给 3 参版,diagramStateSupplier = DiagramState::new)
DiagramGroup(info, matcher, diagramStateSupplier) 需要自定义 DiagramState 时使用
DiagramGroup(parent, diagrams) NEI 每开一页时复制,继承 parent 的 info/matcher/stateSupplier,并填充 diagrams

第三个构造器是 newInstance(Iterable<? extends Diagram>) 的实现: DiagramGroup 新建一个「同源但带图」的实例,NEI 得以把一个处理器的不同分页 交给不同的 GUI 实例持有。

核心字段

字段 类型 说明
info DiagramGroupInfo 公开 final 字段(非 getter)
matcher DiagramMatcher 决定哪些物品能查到本组的图
diagrams ImmutableList<Diagram> 初始为空 ImmutableList.of()
diagramState DiagramState 滚动/循环状态,由 supplier 创建

子类

类 用途
CustomDiagramGroup 通用可变实现;GregTech Recipe Debugger 直接返回它
AdaptiveWidthDiagramGroup 按内容自适应宽度,重写 onUpdate()
CompositeDiagram 组合多个子图

已实现的 NEI 接口方法(节选)

方法 行 作用
loadDiagrams(id, recipeType, stacks...) 106 用 matcher 匹配图并复制本组
getRecipeHeight(recipe) 101 单图高度(默认 1 行/页)
findHoveredInteractable(recipe) 191 命中最上层的可交互组件
mouseInDiagramBounds() 217 鼠标是否在图区域内,被 ObjectHandler.shouldShowTooltip 用来抑制原版 tooltip
keyTyped / mouseClicked / mouseScrolled 244 / 259 / 272 交互转发
getIngredientStacks / getOtherStacks / getResultStack 334 / 340 / 346 NEI 三件套

相关条目

源码

  • src/main/java/com/github/dcysteine/neicustomdiagram/api/diagram/DiagramGroup.java
  • src/main/java/com/github/dcysteine/neicustomdiagram/api/diagram/CustomDiagramGroup.java
  • src/main/java/com/github/dcysteine/neicustomdiagram/api/diagram/AdaptiveWidthDiagramGroup.java
  • src/main/java/com/github/dcysteine/neicustomdiagram/api/diagram/CompositeDiagram.java