Consulte https://github.com/FabricMC/yarn/issues/1656#issuecomment -812829091
Acho que onSizeChanged
ou onItemCountChanged
seria melhor. É o tamanho da pilha, ou contagem de itens, sendo alterado, não a contagem da pilha (número de pilhas).
isso ainda é aplicável após a recente reformulação de mojang nos manipuladores de tela em como 21w11a?
Ok, a análise original pode não estar 100% correta. Comportamento atual:
Slot.onStackChanged
ainda não é um manipulador de mudanças de pilha geral.transferSlot
para slots de saída de vários blocos de fabricação, mas também para entradas de estande de cerveja.newStack, originalStack
(trocados de como estão mapeados atualmente).onCrafted(ItemStack, int)
com originalStack
(chamado newItem
nos mapeamentos atuais) e a diferença entre os tamanhos das pilhas.Slot.onCrafted(ItemStack, int)
só é chamado por onStackChanged
.CraftingResultSlot
, FurnaceOutputSlot
e TradeOutputSlot
a implementação é sempre a mesma: ela incrementa um campo amount
privado pelo parâmetro int e, em seguida, chama onCrafted(ItemStack)
com o parâmetro de pilha de itens.Slot.onCrafted(ItemStack)
só é chamado por onCrafted(ItemStack, int)
e onTakeItem
implementações nessas três classes.amount
para 0 e executa as tarefas de finalização (desligamento do forno XP etc)Conclusão (precisa ser confirmada com um depurador ou uma análise mais detalhada):
onStackChanged
é chamado quando a contagem de itens muda no slot de saída, e onCrafted(ItemStack, int)
quando essa contagem diminui (= itens são retirados).onCrafted(ItemStack)
finaliza o processo de saída quando há uma diminuição parcial ( onStackChanged
) ou uma pilha completa retirada ( onTakeItem
).Conclusão (precisa ser confirmada com um depurador ou uma análise mais detalhada):
- Todos esses métodos referem-se ao jogador retirando itens dos slots de produção (fabricação ou troca).
- onStackChanged é chamado quando a contagem de itens muda no slot de saída e onCrafted (ItemStack, int) quando essa contagem diminui (= itens são retirados).
O método que os chama, transferSlot
, só é usado para transferência rápida, também conhecida como shift click. Portanto, onQuickTransfer
parece o mais preciso para mim. Os nomes dos parâmetros foram realmente trocados.
Isso ainda se aplica a onCrafted
, então reabrindo.