Voir https://github.com/FabricMC/yarn/issues/1656#issuecomment -812829091
Je pense que soit onSizeChanged
soit onItemCountChanged
serait mieux. C'est la taille de la pile, ou le nombre d'éléments, qui est modifié, pas le nombre de piles (nombre de piles).
est-ce toujours applicable après la récente refonte de mojang sur les gestionnaires d'écran comme 21w11a?
D'accord, l'analyse d'origine n'est peut-être pas correcte à 100 %. Comportement actuel :
Slot.onStackChanged
n'est toujours pas un gestionnaire de changement de pile général.transferSlot
pour les emplacements de sortie de divers blocs d'artisanat, mais aussi pour les entrées du stand de brassage.newStack, originalStack
(permutés de la façon dont ils sont mappés actuellement).onCrafted(ItemStack, int)
avec le originalStack
(appelé newItem
dans les mappages actuels) et la différence entre les tailles de pile.Slot.onCrafted(ItemStack, int)
n'est appelé que par onStackChanged
.CraftingResultSlot
, FurnaceOutputSlot
et TradeOutputSlot
l'implémentation est toujours la même : elle incrémente un champ privé amount
par le paramètre int, puis appelle onCrafted(ItemStack)
avec le paramètre de pile d'éléments.Slot.onCrafted(ItemStack)
n'est appelé que par les implémentations onCrafted(ItemStack, int)
et onTakeItem
dans ces trois classes.amount
à 0 et exécute les tâches de finalisation (fourneau abandonnant XP, etc.)Conclusion (doit être confirmée avec un débogueur ou un examen plus approfondi) :
onStackChanged
est appelé lorsque le nombre d'éléments change dans l'emplacement de sortie, et onCrafted(ItemStack, int)
lorsque ce nombre diminue (= les éléments sont retirés).onCrafted(ItemStack)
finalise le processus de sortie lorsqu'il y a soit une diminution partielle ( onStackChanged
) soit une pile complète supprimée ( onTakeItem
).Conclusion (doit être confirmée avec un débogueur ou un examen plus approfondi) :
- Toutes ces méthodes concernent le joueur qui retire des objets des emplacements de sortie (artisanat ou commerce).
- onStackChanged est appelé lorsque le nombre d'éléments change dans l'emplacement de sortie, et onCrafted(ItemStack, int) lorsque ce nombre diminue (= les éléments sont retirés).
La méthode qui les appelle, transferSlot
, n'est utilisée que pour un transfert rapide, c'est-à-dire un clic de décalage. Donc, onQuickTransfer
me semble le plus précis. Les noms de paramètres ont en effet été intervertis.
Cela s'applique toujours à onCrafted
, donc réouverture.