java.lang.Object
com.ultikits.ultitools.abstracts.gui.declarative.engine.RenderNodeDiffer

public class RenderNodeDiffer extends Object
RenderNodeDiffer 实现了 RenderNode 树的 diff 算法。

算法基于 key 的比较:

  • 如果旧节点和新节点有相同的 key,则认为是同一个节点(可能更新)
  • 如果没有 key,则使用 slotIndex 进行比较
  • 新增、删除、更新的节点都会被记录在 DiffResult 中

算法步骤:

  1. 构建旧节点的 key → node 映射
  2. 遍历新节点列表,匹配旧节点
  3. 记录匹配的节点(更新或移动)
  4. 记录未匹配的节点(新增)
  5. 记录未匹配的旧节点(删除)
Since:
6.2.0
Version:
1.0.0
Author:
UltiTools Team
  • 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 - 第一个 Icon
      b - 第二个 Icon
      Returns:
      如果相等返回 true