ItemKey / ItemKeyStack / ItemQueue

基本信息

属性 值
路径 mrtjp.core.item.itemident
源码 src/main/java/../scala/mrtjp/core/item/itemident.scala(实际路径 src/main/scala/mrtjp/core/item/itemident.scala)

用「物品 + damage + NBT」三元组作为可哈希的身份键,解决 ItemStack.equals 的比较问题。

ItemKey

成员 说明
ItemKey.get(...) / getOrNull(stack) 从 ItemStack 构造
compare(that) 比较
makeStack(size) 还原为 ItemStack
copy 浅拷贝(new ItemKey(item, itemDamage, tag),NBT 引用共享)
getMaxStackSize / getName 代理到 testStack

ItemKeyStack

在 ItemKey 之上加一个 var stackSize,实现 setSlotFromStack 风格的整槽赋值。

ItemQueue

批量增删的物品队列:add(ItemKey, amount) / remove(ItemKey, amount) / apply(ItemKey): Int。

缺陷

  • ItemKey 的 equals / hashCode 未在类中定义(继承 AnyRef 的引用相等), 作为 map key 时只有同一实例才相等;源码中 ItemEquality 另有一套比较逻辑, 两者并存易混。
  • copy 共享同一 NBTTagCompound 引用,修改副本的 tag 会影响原件。

相关条目