InvWrapper
基本信息
| 属性 | 值 |
|---|---|
| 路径 | mrtjp.core.inventory.InvWrapper |
| 源码 | src/main/scala/mrtjp/core/inventory/invwrapper.scala |
为 IInventory 提供「按多种规则匹配槽位」的能力,是机器自动化 / 管道逻辑的基础。
静态工具
| 方法 | 说明 |
|---|---|
register(w: IInvWrapperRegister) |
注册自定义 wrapper |
wrap(inv) |
取最匹配的 wrapper(无匹配则回退默认) |
areItemsStackable(s1, s2) |
是否可合并 |
areItemsSame(s1, s2) |
是否同一物品 |
getInventory(world, wc) |
按 BlockCoord 取方块实体的 IInventory |
IInvWrapperRegister
子类需实现 wrapperID: String、matches(inv): Boolean、create(inv): InvWrapper。
注册时 wrapperID 重复会 log.error。
InvWrapper 实例方法
| 方法 | 说明 |
|---|---|
setSlotsFromSide(s: Int) |
只暴露某个面的槽位 |
setSlotsFromRange(r: Range) |
只暴露槽位区间 |
setSlotsAll() |
暴露全部槽位 |
setSlotSingle(s: Int) |
只暴露单个槽位 |
setMatchOptions(meta, nbt, ore) |
委托给 ItemEquality |
setDamageGroup(percent: Int) |
按损坏值百分比分组 |
slots |
当前暴露的槽位集合 |
HashableLargeChest
把两个 IInventory 组合成一个「大型箱子」并实现 hashCode / equals(异或组合),
用于多方容器合成。
缺陷
areItemsStackable / areItemsSame 在本文件与 ItemEquality
中各有一份实现,逻辑不完全一致,存在行为分歧风险。