Siehe https://github.com/FabricMC/yarn/issues/1656#issuecomment -812829091
Ich denke, entweder onSizeChanged
oder onItemCountChanged
wäre besser. Es wird die Stapelgröße oder die Elementanzahl geändert, nicht die Stapelanzahl (Anzahl der Stapel).
Ist dies nach Mojangs jüngster Überarbeitung von Bildschirmhandlern in wie 21w11a immer noch anwendbar?
Okay, die ursprüngliche Analyse ist möglicherweise nicht 100% korrekt. Aktuelles Verhalten:
Slot.onStackChanged
ist immer noch kein allgemeiner Stack-Change-Handler.transferSlot
Implementierungen für Ausgabeslots verschiedener Crafting-Blöcke, aber auch für Braustand-Eingänge aufgerufen.newStack, originalStack
(vertauscht von ihrer aktuellen Zuordnung).onCrafted(ItemStack, int)
mit dem originalStack
(in aktuellen Zuordnungen newItem
) und den Unterschied zwischen die Stapelgrößen.Slot.onCrafted(ItemStack, int)
wird nur von onStackChanged
aufgerufen.CraftingResultSlot
, FurnaceOutputSlot
und TradeOutputSlot
die Implementierung immer dieselbe: Sie erhöht ein privates amount
Feld um den int-Parameter und ruft dann onCrafted(ItemStack)
mit dem Item-Stack-Parameter.Slot.onCrafted(ItemStack)
wird nur von onCrafted(ItemStack, int)
und onTakeItem
Implementierungen in diesen drei Klassen aufgerufen.amount
Feld auf 0 zurück und führt abschließende Aufgaben aus (Ofen, die XP fallen lassen usw.)Fazit (muss mit einem Debugger oder genauerem Hinsehen bestätigt werden):
onStackChanged
wird aufgerufen, wenn sich die Artikelanzahl im Ausgabeschlitz ändert, und onCrafted(ItemStack, int)
wenn diese Anzahl abnimmt (= Artikel werden entnommen).onCrafted(ItemStack)
den Ausgabeprozess, wenn entweder eine teilweise Abnahme ( onStackChanged
) oder ein vollständiger Stapel herausgenommen wird ( onTakeItem
).Fazit (muss mit einem Debugger oder genauerem Hinsehen bestätigt werden):
- Alle diese Methoden beziehen sich darauf, dass der Spieler Gegenstände aus den Ausgabeplätzen nimmt (Herstellung oder Handel).
- onStackChanged wird aufgerufen, wenn sich die Artikelanzahl im Ausgabeslot ändert, und onCrafted(ItemStack, int), wenn diese Anzahl abnimmt (= Artikel werden entnommen).
Die Methode, die sie aufruft, transferSlot
, wird nur für die schnelle Übertragung verwendet, auch Shift-Klick genannt. Also, onQuickTransfer
scheint mir am genauesten zu sein. Parameternamen wurden tatsächlich vertauscht.
Dies gilt weiterhin für onCrafted
, also Wiedereröffnung.