См. Https://github.com/FabricMC/yarn/issues/1656#issuecomment -812829091
Я думаю, что лучше будет onSizeChanged
или onItemCountChanged
. Изменяется размер стека или количество элементов, а не количество стека (количество стопок).
Это все еще применимо после недавней модернизации обработчиков экрана в Mojang, например, 21w11a?
Хорошо, исходный анализ может быть не на 100% правильным. Текущее поведение:
Slot.onStackChanged
по-прежнему не является обычным обработчиком изменения стека.transferSlot
для выходных слотов различных блоков крафта, а также для входов пивоваренного стенда.newStack, originalStack
(заменены местами в соответствии с текущим отображением).onCrafted(ItemStack, int)
с originalStack
(в текущих сопоставлениях называется newItem
) и разницей между размеры стека.Slot.onCrafted(ItemStack, int)
вызывается только onStackChanged
.CraftingResultSlot
, FurnaceOutputSlot
и TradeOutputSlot
реализация всегда одинакова: она увеличивает частное поле amount
параметром int, затем вызывает 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
, используется только для быстрой передачи, иначе говоря, нажатие клавиши Shift. Итак, onQuickTransfer
мне кажется наиболее точным. Имена параметров действительно поменялись.
Это по-прежнему относится к onCrafted
, поэтому повторное открытие.