Skip to content

ItemSlot

自 2.2.1

ItemSlot 是一个与原版容器系统集成的 Minecraft 物品槽位。它渲染持有的 ItemStack,显示悬停高亮,并向当前打开的 AbstractContainerMenu 注册以实现标准点击转移行为。当 JEI、REI 和 EMI 存在时,它也会与这些模组联动。

INFO

UIElement 中记录的所有内容(布局、样式、事件、数据绑定等)同样适用于此处。


用法

java
// 绑定到物品处理器
var slot = new ItemSlot();
slot.bind(itemHandler, 0); // IItemHandlerModifiable + 槽位索引
parent.addChild(slot);

// 或直接绑定到原版 Slot
var slot2 = new ItemSlot(new Slot(inventory, 0, 0, 0));

// 幽灵槽位(支持 XEI 拖拽)
slot.xeiPhantom();

XML

xml
<!-- 基础槽位(无处理器 —— 使用 LocalSlot) -->
<item-slot/>

<!-- 预置物品,仅在编辑器中显示 -->
<item-slot id="minecraft:diamond" count="1"/>

<!-- 禁用 XEI 配方查看 -->
<item-slot allow-xei-Lookup="false"/>
XML 属性类型描述
allow-xei-Lookupboolean点击槽位时是否触发 XEI(JEI/REI/EMI)配方查看。默认值:true
id / count / NBT用于仅在编辑器中预填充槽位的物品属性。

槽位样式

INFO

hover-overlay

鼠标悬停时绘制在槽位上的纹理。

默认值:ColorRectTexture(0x80FFFFFF)(半透明白色)

java
slot.slotStyle(style -> style.hoverOverlay(myTexture));

INFO

slot-overlay

绘制在槽位背景上的纹理(始终显示,或仅在槽位为空时显示 —— 参见 show-slot-overlay-only-empty)。

默认值:无(空)

java
slot.slotStyle(style -> style.slotOverlay(myOverlay));

INFO

show-slot-overlay-only-empty

当为 true 时,slot-overlay 仅在槽位为空时绘制。

默认值:true

java
slot.slotStyle(style -> style.showSlotOverlayOnlyEmpty(false));

INFO

show-item-tooltips

悬停槽位时是否显示标准物品悬停提示。

默认值:true

java
slot.slotStyle(style -> style.showItemTooltips(false));

INFO

is-player-slot

将该槽位标记为玩家物品栏槽位(用于快速转移系统)。

默认值:false

java
slot.slotStyle(style -> style.isPlayerSlot(true));

INFO

accept-quick-move / quick-move-priority

该槽位是否参与 Shift 点击快速转移,以及多个槽位竞争时的优先级。

默认值:true / 0

java
slot.slotStyle(style -> style.acceptQuickMove(true).quickMovePriority(1));

值绑定

ItemSlot 继承自 BindableUIElement&lt;ItemStack&gt;

java
slot.bind(DataBindingBuilder.itemStack(
    () -> handler.getStackInSlot(0),
    stack -> handler.setStackInSlot(0, stack)
).build());

详见 数据绑定


字段

名称类型访问权限描述
slotStyleSlotStyleprivate(getter)当前槽位样式。
slotSlotprivate(getter)绑定的 Slot

方法

方法返回描述
bind(IItemHandlerModifiable, int)ItemSlot绑定到指定槽位索引的物品处理器。
bind(Slot)ItemSlot绑定到现有的原版 Slot
setItem(ItemStack)ItemSlot设置显示的物品并通知监听器。
setItem(ItemStack, boolean)ItemSlot设置显示的物品;第二个参数控制是否通知。
slotStyle(Consumer&lt;SlotStyle&gt;)ItemSlot以流式接口配置样式。
xeiPhantom()ItemSlot在此槽位上启用 XEI(JEI/REI/EMI)幽灵拖拽。
xeiRecipeIngredient(IngredientIO)ItemSlot将该槽位标记为 XEI 配方视图中的配方原料。
xeiRecipeSlot()ItemSlot将该槽位标记为配方槽位,默认 IngredientIO.NONE
xeiRecipeSlot(IngredientIO, float)ItemSlot标记为配方槽位,指定 I/O 类型和概率。
getFullTooltipTexts()List&lt;Component&gt;返回组合的物品和自定义悬停提示文本。

Released under the MIT License.