我认为onSizeChanged
或onItemCountChanged
会更好。 更改的是堆栈大小或项目计数,而不是堆栈计数(堆栈数)。
在 mojang 最近对 21w11a 之类的屏幕处理程序进行改造后,这仍然适用吗?
好吧,原始分析可能不是 100% 正确。 当前行为:
Slot.onStackChanged
仍然不是一般的堆栈更改处理程序。transferSlot
实现中调用的,用于各种制作块的输出槽,也用于酿造台输入。newStack, originalStack
(从它们当前的映射方式交换)。onCrafted(ItemStack, int)
和originalStack
(在当前映射中称为newItem
)以及堆栈大小。Slot.onCrafted(ItemStack, int)
仅由onStackChanged
调用。CraftingResultSlot
、 FurnaceOutputSlot
和TradeOutputSlot
,实现总是相同的:它通过 int 参数增加一个私有的amount
字段,然后调用onCrafted(ItemStack)
与项目堆栈参数。Slot.onCrafted(ItemStack)
仅被这三个类中的onCrafted(ItemStack, int)
和onTakeItem
实现调用。amount
字段重置为 0 并运行完成任务(熔炉丢弃 XP 等)结论(需要通过调试器或仔细查看来确认):
onStackChanged
在输出槽中的物品计数发生变化时被调用,当计数减少(= 物品被取出)时调用onCrafted(ItemStack, int)
。onCrafted(ItemStack)
在部分减少 ( onStackChanged
) 或取出完整堆栈 ( onTakeItem
) 时完成输出过程。结论(需要通过调试器或仔细查看来确认):
- 所有这些方法都与玩家从输出槽中取出物品(制作或交易)有关。
- 当输出槽中的项目计数发生变化时,onStackChanged 被调用,当计数减少(= 项目被取出)时调用 onCrafted(ItemStack, int)。
调用它们的方法transferSlot
仅用于快速传输又名切换点击。 所以, onQuickTransfer
对我来说似乎是最准确的。 确实切换了参数名称。
这仍然适用于onCrafted
,因此重新打开。