= 创作分享 =
编程开发
关于Forge1.20.1中InventoryMenu代码在Slot上的疑问 ...
alltime2838

关于Forge1.20.1中InventoryMenu代码在Slot上的疑问

alltime2838 于 2024-3-13 12:17 ( 1月前 ) [复制链接] [只看楼主] [打印]
293 2
50RF
以下是改其构造器全部代码:

可以看出原版添加Item槽位id可以分为
  • ResultCraftSlot(Slotid【下略】:0)
  • 2X2CraftSlot(0 ~ 3)
  • PlayerInventory(9 ~ 35)
  • PlayerHotBar (0 ~ 8)
  • Equipment (36 ~ 39)
  • OffHand (40)
显然SlotID出现重复,PlayerHotBar和2X2CraftSlot与ResultCraftSlot明显出现了0,1,2,3重复的Slotid




这是为什么




发表于 2024-3-13 12:17:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

回复 | 举报

该帖共收到 2 条回复!
Sonnenlicht
在Slot类中有两个属性可以被视为“ID”:
一个是index属性,使用InventoryMenu的addSlot方法向Menu实例中的slots列表添加新的slot对象时,首先被添加的slot对象的index属性值被赋值为slots.size(),然后才会把slot对象添加进列表,这保证了每个添加到slots的slot对象的index在同一个InventoryMenu实例中是唯一的。
另一个是slot属性,是Slot类中container属性内的相对id,在同一个container实例中唯一,在不同container实例之间是可重复的,使用时一般通过 slotA.container == slotB.container && slotA.slot == slotB.slot 来判断两个slot是否相等。

”2X2CraftSlot“的四个槽位被添加到InventoryMenu的成员slots列表中,四个槽位的slot属性范围是1~4,对应这四个槽位在slots中的索引值;0~3是相对于container“craftSlots”的索引。
发表于 2024-3-17 01:34:13 | 只看该作者

回复 | 举报

Sonnenlicht
补一下addSlot的代码:
  1.    protected Slot addSlot(Slot slot) {
  2.       slot.index = this.slots.size();
  3.       this.slots.add(slot);
  4.       this.lastSlots.add(ItemStack.EMPTY);
  5.       this.remoteSlots.add(ItemStack.EMPTY);
  6.       return slot;
  7.    }
复制代码
发表于 2024-3-17 01:35:45 | 只看该作者

回复 | 举报

百科目前不允许匿名发帖哦~ 请先 [ 登陆 ][ 注册 ] 吧~

本版积分规则

发新帖
  • 回复
  • 点评
  • 评分

[ MC百科(mcmod.cn) 除另有声明,所有开放公共编辑的内容均使用 BY-NC-SA 3.0 协议 ]

Minecraft百科CC协议
快速回复 返回顶部 返回列表