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.javasrc/main/java/com/github/dcysteine/neicustomdiagram/api/diagram/CustomDiagramGroup.javasrc/main/java/com/github/dcysteine/neicustomdiagram/api/diagram/AdaptiveWidthDiagramGroup.javasrc/main/java/com/github/dcysteine/neicustomdiagram/api/diagram/CompositeDiagram.java