onSizeChanged
かonItemCountChanged
どちらかが良いと思います。 変更されるのはスタックサイズまたはアイテム数であり、スタック数(スタック数)ではありません。
これは、21w11aのような画面ハンドラーに関するmojangの最近の改良後も引き続き適用できますか?
さて、元の分析は100%正しくない可能性があります。 現在の動作:
Slot.onStackChanged
はまだ一般的なスタック変更ハンドラーではありません。transferSlot
実装から呼び出されます。newStack, originalStack
(現在のマッピング方法から入れ替えられています)。originalStack
(現在のマッピングではnewItem
と呼ばれます)を使用してonCrafted(ItemStack, int)
を呼び出します。スタックサイズ。Slot.onCrafted(ItemStack, int)
はonStackChanged
によってのみ呼び出されます。CraftingResultSlot
、 FurnaceOutputSlot
、およびTradeOutputSlot
では、実装は常に同じです。intパラメーターによってプライベートamount
フィールドをインクリメントしてから、 onCrafted(ItemStack)
呼び出します。アイテムスタックパラメータを使用したSlot.onCrafted(ItemStack)
は、これら3つのクラスのonCrafted(ItemStack, int)
およびonTakeItem
実装によってのみ呼び出されます。amount
フィールドを0にリセットし、ファイナライズタスク(炉のドロップXPなど)を実行します。結論(デバッガーまたは詳細を確認する必要があります):
onStackChanged
は、出力スロットでアイテム数が変化したときに呼び出され、その数が減少したとき(=アイテムが取り出されたとき)にonCrafted(ItemStack, int)
onStackChanged
が呼び出されます。onCrafted(ItemStack)
は、部分的な減少( onStackChanged
)または完全なスタックの削除( onTakeItem
)が発生したときに、出力プロセスを終了します。結論(デバッガーまたは詳細を確認する必要があります):
- これらの方法はすべて、プレイヤーが出力スロットからアイテムを取り出すことに関連しています(クラフトまたは取引)。
- onStackChangedは、出力スロットでアイテム数が変更されたときに呼び出され、その数が減少したとき(=アイテムが取り出されたとき)にonCrafted(ItemStack、int)が呼び出されます。
それらを呼び出すメソッドtransferSlot
、シフトクリックとも呼ばれるクイック転送にのみ使用されます。 したがって、 onQuickTransfer
は私にとって最も正確に思えます。 パラメータ名は確かに切り替えられました。
これは引き続きonCrafted
に適用されるため、再度開きます。