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

public class GuiRenderer extends Object
GuiRenderer 负责协调 Widget 树的构建、diff 和 Inventory 更新。

它是声明式框架的核心引擎,主要职责:

  • 管理 Element 树的生命周期
  • 调度重建(支持帧合并)
  • 执行 diff 算法
  • 应用变更到实际 Inventory

工作流程:

 1. 初始化:createRootElement → build RenderNode 树
 2. 渲染:diff → apply to Inventory
 3. 更新:setState → scheduleBuild → rebuild → diff → apply
 
Since:
6.2.0
Version:
1.0.0
Author:
UltiTools Team
  • Field Details

    • gui

      private final mc.obliviate.inventory.Gui gui
    • player

      private final org.bukkit.entity.Player player
    • scheduler

      private final GuiScheduler scheduler
    • differ

      private final RenderNodeDiffer differ
    • rootElement

      @Nullable private @Nullable Element rootElement
    • lastRenderNodes

      @Nullable private @Nullable List<RenderNode> lastRenderNodes
    • clickHandlers

      private final Map<Integer,Consumer<org.bukkit.event.inventory.InventoryClickEvent>> clickHandlers
  • Constructor Details

    • GuiRenderer

      public GuiRenderer(@NotNull @NotNull mc.obliviate.inventory.Gui gui, @NotNull @NotNull org.bukkit.entity.Player player)
      创建 GuiRenderer。
      Parameters:
      gui - 关联的 Gui 实例
      player - 玩家
    • GuiRenderer

      public GuiRenderer(@NotNull @NotNull mc.obliviate.inventory.Gui gui, @NotNull @NotNull org.bukkit.entity.Player player, @NotNull @NotNull GuiScheduler scheduler)
      创建 GuiRenderer,指定调度器。
      Parameters:
      gui - 关联的 Gui 实例
      player - 玩家
      scheduler - 调度器
  • Method Details

    • initialize

      public void initialize(@NotNull @NotNull Widget rootWidget, @NotNull @NotNull BuildContext context)
      初始化渲染器,创建根 Element。
      Parameters:
      rootWidget - 根 Widget
      context - 构建上下文
    • scheduleBuild

      public void scheduleBuild()
      调度重建。

      使用帧合并机制,短时间内的多次调用只会触发一次重建。

    • performBuild

      private void performBuild()
      立即执行重建(必须在主线程调用)。
    • rebuildElement

      private void rebuildElement(@NotNull @NotNull Element element)
      递归重建 Element 树。
      Parameters:
      element - 要重建的 Element
    • collectRenderNodes

      @NotNull private @NotNull List<RenderNode> collectRenderNodes(@NotNull @NotNull Element element)
      收集所有 RenderNode(后序遍历)。
      Parameters:
      element - 根 Element
      Returns:
      RenderNode 列表
    • collectRenderNodesRecursive

      private void collectRenderNodesRecursive(@NotNull @NotNull Element element, @NotNull @NotNull List<RenderNode> nodes)
    • applyDiff

      private void applyDiff(@NotNull @NotNull DiffResult diffResult)
      应用 diff 结果到 Inventory。
      Parameters:
      diffResult - diff 结果
    • updateClickHandlers

      private void updateClickHandlers(@NotNull @NotNull List<RenderNode> renderNodes)
      更新点击处理器映射。
      Parameters:
      renderNodes - 当前的 RenderNode 列表
    • handleClick

      public void handleClick(@NotNull @NotNull org.bukkit.event.inventory.InventoryClickEvent event)
      处理点击事件。
      Parameters:
      event - 点击事件
    • setSlot

      private void setSlot(int slot, @Nullable @Nullable mc.obliviate.inventory.Icon icon)
      设置槽位内容。
      Parameters:
      slot - 槽位索引
      icon - 图标
    • clearSlot

      private void clearSlot(int slot)
      清空槽位。
      Parameters:
      slot - 槽位索引
    • dispose

      public void dispose()
      销毁渲染器,清理资源。
    • getGui

      @NotNull public @NotNull mc.obliviate.inventory.Gui getGui()
      获取关联的 Gui 实例。
      Returns:
      Gui 实例
    • getScheduler

      @NotNull public @NotNull GuiScheduler getScheduler()
      获取调度器。
      Returns:
      GuiScheduler