Class GuiRenderer
java.lang.Object
com.ultikits.ultitools.abstracts.gui.declarative.engine.GuiRenderer
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 Summary
FieldsModifier and TypeFieldDescriptionprivate final RenderNodeDifferprivate final mc.obliviate.inventory.Guiprivate @Nullable List<RenderNode> private final org.bukkit.entity.Playerprivate @Nullable Elementprivate final GuiScheduler -
Constructor Summary
ConstructorsConstructorDescriptionGuiRenderer(@NotNull mc.obliviate.inventory.Gui gui, @NotNull org.bukkit.entity.Player player) 创建 GuiRenderer。GuiRenderer(@NotNull mc.obliviate.inventory.Gui gui, @NotNull org.bukkit.entity.Player player, @NotNull GuiScheduler scheduler) 创建 GuiRenderer,指定调度器。 -
Method Summary
Modifier and TypeMethodDescriptionprivate voidapplyDiff(@NotNull DiffResult diffResult) 应用 diff 结果到 Inventory。private voidclearSlot(int slot) 清空槽位。private @NotNull List<RenderNode> collectRenderNodes(@NotNull Element element) 收集所有 RenderNode(后序遍历)。private voidcollectRenderNodesRecursive(@NotNull Element element, @NotNull List<RenderNode> nodes) voiddispose()销毁渲染器,清理资源。@NotNull mc.obliviate.inventory.GuigetGui()获取关联的 Gui 实例。@NotNull GuiScheduler获取调度器。voidhandleClick(@NotNull org.bukkit.event.inventory.InventoryClickEvent event) 处理点击事件。voidinitialize(@NotNull Widget rootWidget, @NotNull BuildContext context) 初始化渲染器,创建根 Element。private void立即执行重建(必须在主线程调用)。private voidrebuildElement(@NotNull Element element) 递归重建 Element 树。void调度重建。private voidsetSlot(int slot, @Nullable mc.obliviate.inventory.Icon icon) 设置槽位内容。private voidupdateClickHandlers(@NotNull List<RenderNode> renderNodes) 更新点击处理器映射。
-
Field Details
-
gui
private final mc.obliviate.inventory.Gui gui -
player
private final org.bukkit.entity.Player player -
scheduler
-
differ
-
rootElement
-
lastRenderNodes
-
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
初始化渲染器,创建根 Element。- Parameters:
rootWidget- 根 Widgetcontext- 构建上下文
-
scheduleBuild
public void scheduleBuild()调度重建。使用帧合并机制,短时间内的多次调用只会触发一次重建。
-
performBuild
private void performBuild()立即执行重建(必须在主线程调用)。 -
rebuildElement
递归重建 Element 树。- Parameters:
element- 要重建的 Element
-
collectRenderNodes
收集所有 RenderNode(后序遍历)。- Parameters:
element- 根 Element- Returns:
- RenderNode 列表
-
collectRenderNodesRecursive
private void collectRenderNodesRecursive(@NotNull @NotNull Element element, @NotNull @NotNull List<RenderNode> nodes) -
applyDiff
应用 diff 结果到 Inventory。- Parameters:
diffResult- diff 结果
-
updateClickHandlers
更新点击处理器映射。- 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
获取调度器。- Returns:
- GuiScheduler
-