Ver https://github.com/FabricMC/yarn/issues/1656#issuecomment -812829091
Creo que onSizeChanged
o onItemCountChanged
sería mejor. Es el tamaño de la pila, o el recuento de elementos, que se cambia, no el recuento de la pila (número de pilas).
¿Esto sigue siendo aplicable después de la reciente renovación de mojang en los controladores de pantalla como 21w11a?
De acuerdo, es posible que el análisis original no sea 100% correcto. Comportamiento actual:
Slot.onStackChanged
todavía no es un controlador de cambio de pila general.transferSlot
para ranuras de salida de varios bloques de elaboración, pero también para entradas de soporte de elaboración.newStack, originalStack
(intercambiados de cómo están mapeados actualmente).onCrafted(ItemStack, int)
con originalStack
(llamado newItem
en las asignaciones actuales) y la diferencia entre los tamaños de pila.Slot.onCrafted(ItemStack, int)
solo es llamado por onStackChanged
.CraftingResultSlot
, FurnaceOutputSlot
y TradeOutputSlot
la implementación es siempre la misma: incrementa un campo privado amount
por el parámetro int, luego llama a onCrafted(ItemStack)
con el parámetro de pila de elementos.Slot.onCrafted(ItemStack)
solo es llamado por implementaciones onCrafted(ItemStack, int)
y onTakeItem
en esas tres clases.amount
a 0 y ejecuta tareas de finalización (horno que deja caer XP, etc.)Conclusión (debe confirmarse con un depurador o una mirada más cercana):
onStackChanged
se llama cuando el recuento de elementos cambia en la ranura de salida, y onCrafted(ItemStack, int)
cuando ese recuento disminuye (= se eliminan los elementos).onCrafted(ItemStack)
finaliza el proceso de salida cuando hay una disminución parcial ( onStackChanged
) o una pila completa extraída ( onTakeItem
).Conclusión (debe confirmarse con un depurador o una mirada más cercana):
- Todos estos métodos se relacionan con que el jugador saque elementos de las ranuras de salida (elaboración o comercio).
- onStackChanged se llama cuando el recuento de elementos cambia en la ranura de salida, y onCrafted (ItemStack, int) cuando ese recuento disminuye (= los elementos se eliminan).
El método que los llama, transferSlot
, solo se usa para transferencias rápidas, también conocidas como hacer clic en shift. Entonces, onQuickTransfer
parece el más preciso. De hecho, se cambiaron los nombres de los parámetros.
Esto todavía se aplica a onCrafted
, por lo que reabrir.