Class RenderNode
java.lang.Object
com.ultikits.ultitools.abstracts.gui.declarative.core.RenderNode
RenderNode 是虚拟渲染树的节点,代表一个要渲染的槽位。
RenderNode 是框架内部使用的对象,用于:
- 描述每个槽位应该显示什么(Icon)
- 记录槽位位置(slotIndex)
- 支持稳定标识(slotKey)用于 diff
- 组织成树结构以支持布局计算
注意: RenderNode 不直接操作 Bukkit Inventory,
它只是一个虚拟表示,由 GuiRenderer 转换为实际的 Inventory 操作。
- Since:
- 6.2.0
- Version:
- 1.0.0
- Author:
- UltiTools Team
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final @NotNull List<RenderNode> 子节点(用于容器类型)。private @Nullable Consumer<org.bukkit.event.inventory.InventoryClickEvent> 点击事件处理器。private @Nullable mc.obliviate.inventory.Icon要在此槽位显示的 Icon。 如果为 null,表示此槽位应该为空。private final @Nullable SlotKey槽位的唯一标识,用于 diff 算法识别相同节点。 如果为 null,则使用 slotIndex 进行识别。节点元数据,用于存储额外信息。private @Nullable RenderNode父节点。private int槽位在 Inventory 中的索引(0-based)。 -1 表示尚未分配位置(如容器节点)。 -- GETTER -- 获取槽位索引。 -- SETTER -- 设置槽位索引。 -
Constructor Summary
ConstructorsConstructorDescriptionRenderNode(@Nullable SlotKey key, int slotIndex) 创建一个新的 RenderNode。RenderNode(@Nullable SlotKey key, int slotIndex, @Nullable mc.obliviate.inventory.Icon icon) 创建一个叶子 RenderNode(没有子节点)。 -
Method Summary
Modifier and TypeMethodDescriptionvoidaddChild(@NotNull RenderNode child) 添加子节点。int计算子树占用的槽位数量。void清空所有子节点。private voidcollectLeaves(@NotNull RenderNode node, @NotNull List<RenderNode> leaves) @NotNull RenderNodecopy()创建此节点的深拷贝(不包括子节点)。boolean@NotNull List<RenderNode> 获取所有叶子节点的列表(递归)。@NotNull List<RenderNode> 获取子节点列表(不可修改)。@Nullable Consumer<org.bukkit.event.inventory.InventoryClickEvent> 获取点击处理器。@Nullable mc.obliviate.inventory.IcongetIcon()获取图标。@Nullable SlotKeygetKey()获取槽位标识。@Nullable ObjectgetMetadata(@NotNull String key) 获取元数据。@Nullable RenderNode获取父节点。inthashCode()boolean检查是否是容器节点(有子节点)。booleanisLeaf()检查是否是叶子节点(没有子节点)。voidremoveChild(@NotNull RenderNode child) 移除子节点。voidsetClickHandler(@Nullable Consumer<org.bukkit.event.inventory.InventoryClickEvent> clickHandler) 设置点击处理器。voidsetIcon(@Nullable mc.obliviate.inventory.Icon icon) 设置图标。voidsetMetadata(@NotNull String key, @Nullable Object value) 设置元数据。(package private) voidsetParent(@Nullable RenderNode parent) 设置父节点。toString()
-
Field Details
-
key
槽位的唯一标识,用于 diff 算法识别相同节点。 如果为 null,则使用 slotIndex 进行识别。 -
slotIndex
private int slotIndex槽位在 Inventory 中的索引(0-based)。 -1 表示尚未分配位置(如容器节点)。 -- GETTER -- 获取槽位索引。 -- SETTER -- 设置槽位索引。 -
icon
@Nullable private @Nullable mc.obliviate.inventory.Icon icon要在此槽位显示的 Icon。 如果为 null,表示此槽位应该为空。 -
clickHandler
点击事件处理器。 -
parent
父节点。 -
children
子节点(用于容器类型)。 -
metadata
节点元数据,用于存储额外信息。
-
-
Constructor Details
-
RenderNode
创建一个新的 RenderNode。- Parameters:
key- 槽位标识,可为 nullslotIndex- 槽位索引
-
RenderNode
public RenderNode(@Nullable @Nullable SlotKey key, int slotIndex, @Nullable @Nullable mc.obliviate.inventory.Icon icon) 创建一个叶子 RenderNode(没有子节点)。- Parameters:
key- 槽位标识slotIndex- 槽位索引icon- 图标
-
-
Method Details
-
getKey
获取槽位标识。- Returns:
- SlotKey,可能为 null
-
getIcon
@Nullable public @Nullable mc.obliviate.inventory.Icon getIcon()获取图标。- Returns:
- Icon,可能为 null
-
setIcon
public void setIcon(@Nullable @Nullable mc.obliviate.inventory.Icon icon) 设置图标。- Parameters:
icon- 图标
-
getClickHandler
@Nullable public @Nullable Consumer<org.bukkit.event.inventory.InventoryClickEvent> getClickHandler()获取点击处理器。- Returns:
- 点击处理器,可能为 null
-
setClickHandler
public void setClickHandler(@Nullable @Nullable Consumer<org.bukkit.event.inventory.InventoryClickEvent> clickHandler) 设置点击处理器。- Parameters:
clickHandler- 点击处理器
-
getParent
获取父节点。- Returns:
- 父节点,可能为 null
-
setParent
设置父节点。- Parameters:
parent- 父节点
-
getChildren
获取子节点列表(不可修改)。- Returns:
- 子节点列表
-
addChild
添加子节点。- Parameters:
child- 子节点
-
removeChild
移除子节点。- Parameters:
child- 子节点
-
clearChildren
public void clearChildren()清空所有子节点。 -
getMetadata
获取元数据。- Parameters:
key- 键- Returns:
- 值,不存在则返回 null
-
setMetadata
设置元数据。- Parameters:
key- 键value- 值
-
isLeaf
public boolean isLeaf()检查是否是叶子节点(没有子节点)。- Returns:
- 如果是叶子节点则返回 true
-
isContainer
public boolean isContainer()检查是否是容器节点(有子节点)。- Returns:
- 如果是容器节点则返回 true
-
getAllLeaves
获取所有叶子节点的列表(递归)。- Returns:
- 所有叶子节点
-
collectLeaves
private void collectLeaves(@NotNull @NotNull RenderNode node, @NotNull @NotNull List<RenderNode> leaves) -
calculateSlotCount
public int calculateSlotCount()计算子树占用的槽位数量。- Returns:
- 槽位数量
-
copy
创建此节点的深拷贝(不包括子节点)。- Returns:
- 新的 RenderNode
-
equals
-
hashCode
public int hashCode() -
toString
-