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