Yarn: Slot.onCraftedが間違っています

作成日 2020年08月04日  ·  5コメント  ·  ソース: FabricMC/yarn

全てのコメント5件

onSizeChangedonItemCountChangedどちらかが良いと思います。 変更されるのはスタックサイズまたはアイテム数であり、スタック数(スタック数)ではありません。

これは、21w11aのような画面ハンドラーに関するmojangの最近の改良後も引き続き適用できますか?

さて、元の分析は100%正しくない可能性があります。 現在の動作:

  • Slot.onStackChangedはまだ一般的なスタック変更ハンドラーではありません。

    • これは、さまざまなクラフトブロックの出力スロットだけでなく、醸造スタンドの入力に対しても、 transferSlot実装から呼び出されます。

    • パラメータは一見newStack, originalStack (現在のマッピング方法から入れ替えられています)。

    • スロットからアイテムが取り出されたかどうかをチェックし、ある場合は、 originalStack (現在のマッピングではnewItemと呼ばれます)を使用してonCrafted(ItemStack, int)を呼び出します。スタックサイズ。

    • これは「出力スロットのアイテム数が変更された」という意味だと思います。

  • Slot.onCrafted(ItemStack, int)onStackChangedによってのみ呼び出されます。

    • デフォルトの実装:no-op

    • CraftingResultSlotFurnaceOutputSlot 、およびTradeOutputSlotでは、実装は常に同じです。intパラメーターによってプライベートamountフィールドをインクリメントしてから、 onCrafted(ItemStack)呼び出します。アイテムスタックパラメータを使用した

  • Slot.onCrafted(ItemStack)は、これら3つのクラスのonCrafted(ItemStack, int)およびonTakeItem実装によってのみ呼び出されます。

    • デフォルトの実装:no-op

    • これらの3つのクラスでの実装:プライベートamountフィールドを0にリセットし、ファイナライズタスク(炉のドロップXPなど)を実行します。

結論(デバッガーまたは詳細を確認する必要があります):

  • これらの方法はすべて、プレイヤーが出力スロットからアイテムを取り出すことに関連しています(クラフトまたは取引)。
  • onStackChangedは、出力スロットでアイテム数が変化したときに呼び出され、その数が減少したとき(=アイテムが取り出されたとき)にonCrafted(ItemStack, int) onStackChangedが呼び出されます。
  • onCrafted(ItemStack)は、部分的な減少( onStackChanged )または完全なスタックの削除( onTakeItem )が発生したときに、出力プロセスを終了します。
  • これらのメソッドはまだ名前を変更する必要があります。

結論(デバッガーまたは詳細を確認する必要があります):

  • これらの方法はすべて、プレイヤーが出力スロットからアイテムを取り出すことに関連しています(クラフトまたは取引)。
  • onStackChangedは、出力スロットでアイテム数が変更されたときに呼び出され、その数が減少したとき(=アイテムが取り出されたとき)にonCrafted(ItemStack、int)が呼び出されます。

それらを呼び出すメソッドtransferSlot 、シフトクリックとも呼ばれるクイック転送にのみ使用されます。 したがって、 onQuickTransferは私にとって最も正確に思えます。 パラメータ名は確かに切り替えられました。

これは引き続きonCraftedに適用されるため、再度開きます。

このページは役に立ちましたか?
0 / 5 - 0 評価