Class RenderNodeDiffer
java.lang.Object
com.ultikits.ultitools.abstracts.gui.declarative.engine.RenderNodeDiffer
RenderNodeDiffer 实现了 RenderNode 树的 diff 算法。
算法基于 key 的比较:
- 如果旧节点和新节点有相同的 key,则认为是同一个节点(可能更新)
- 如果没有 key,则使用 slotIndex 进行比较
- 新增、删除、更新的节点都会被记录在 DiffResult 中
算法步骤:
- 构建旧节点的 key → node 映射
- 遍历新节点列表,匹配旧节点
- 记录匹配的节点(更新或移动)
- 记录未匹配的节点(新增)
- 记录未匹配的旧节点(删除)
- Since:
- 6.2.0
- Version:
- 1.0.0
- Author:
- UltiTools Team
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static class用于标识 RenderNode 的键。 -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription@NotNull DiffResultdiff(@NotNull List<RenderNode> oldNodes, @NotNull List<RenderNode> newNodes) 比较两组 RenderNode,返回差异结果。private booleanhasChanged(@NotNull RenderNode oldNode, @NotNull RenderNode newNode) 比较单个节点的变化。private booleaniconsEqual(@NotNull mc.obliviate.inventory.Icon a, @NotNull mc.obliviate.inventory.Icon b) 比较两个 Icon 是否相等。
-
Constructor Details
-
RenderNodeDiffer
public RenderNodeDiffer()
-
-
Method Details
-
diff
@NotNull public @NotNull DiffResult diff(@NotNull @NotNull List<RenderNode> oldNodes, @NotNull @NotNull List<RenderNode> newNodes) 比较两组 RenderNode,返回差异结果。- Parameters:
oldNodes- 旧的 RenderNode 列表newNodes- 新的 RenderNode 列表- Returns:
- DiffResult 包含所有变更
-
hasChanged
private boolean hasChanged(@NotNull @NotNull RenderNode oldNode, @NotNull @NotNull RenderNode newNode) 比较单个节点的变化。- Parameters:
oldNode- 旧节点newNode- 新节点- Returns:
- 如果有变化返回 true
-
iconsEqual
private boolean iconsEqual(@NotNull @NotNull mc.obliviate.inventory.Icon a, @NotNull @NotNull mc.obliviate.inventory.Icon b) 比较两个 Icon 是否相等。注意:这里的比较是基于显示效果的,不是基于对象引用。
- Parameters:
a- 第一个 Iconb- 第二个 Icon- Returns:
- 如果相等返回 true
-