Yarn: Slot.onCrafted ist falsch

Erstellt am 4. Aug. 2020  ·  5Kommentare  ·  Quelle: FabricMC/yarn

bug discussion refactor

Alle 5 Kommentare

Ich denke, entweder onSizeChanged oder onItemCountChanged wäre besser. Es wird die Stapelgröße oder die Elementanzahl geändert, nicht die Stapelanzahl (Anzahl der Stapel).

Ist dies nach Mojangs jüngster Überarbeitung von Bildschirmhandlern in wie 21w11a immer noch anwendbar?

Okay, die ursprüngliche Analyse ist möglicherweise nicht 100% korrekt. Aktuelles Verhalten:

  • Slot.onStackChanged ist immer noch kein allgemeiner Stack-Change-Handler.

    • Es wird von transferSlot Implementierungen für Ausgabeslots verschiedener Crafting-Blöcke, aber auch für Braustand-Eingänge aufgerufen.

    • Die Parameter sind anscheinend newStack, originalStack (vertauscht von ihrer aktuellen Zuordnung).

    • Was es tut, ist zu überprüfen, ob Gegenstände aus dem Slot genommen wurden und wenn ja, ruft onCrafted(ItemStack, int) mit dem originalStack (in aktuellen Zuordnungen newItem ) und den Unterschied zwischen die Stapelgrößen.

    • Ich denke, dies ist eher eine "Geänderte Anzahl von Gegenständen am Ausgabeslot".

  • Slot.onCrafted(ItemStack, int) wird nur von onStackChanged aufgerufen.

    • Standard-Impl: no-op

    • In CraftingResultSlot , FurnaceOutputSlot und TradeOutputSlot die Implementierung immer dieselbe: Sie erhöht ein privates amount Feld um den int-Parameter und ruft dann onCrafted(ItemStack) mit dem Item-Stack-Parameter.

  • Slot.onCrafted(ItemStack) wird nur von onCrafted(ItemStack, int) und onTakeItem Implementierungen in diesen drei Klassen aufgerufen.

    • Standard-Impl: no-op

    • Implementierungen in diesen drei Klassen: setzt das private amount Feld auf 0 zurück und führt abschließende Aufgaben aus (Ofen, die XP fallen lassen usw.)

Fazit (muss mit einem Debugger oder genauerem Hinsehen bestätigt werden):

  • Alle diese Methoden beziehen sich darauf, dass der Spieler Gegenstände aus den Ausgabeplätzen nimmt (Herstellung oder Handel).
  • onStackChanged wird aufgerufen, wenn sich die Artikelanzahl im Ausgabeschlitz ändert, und onCrafted(ItemStack, int) wenn diese Anzahl abnimmt (= Artikel werden entnommen).
  • onCrafted(ItemStack) den Ausgabeprozess, wenn entweder eine teilweise Abnahme ( onStackChanged ) oder ein vollständiger Stapel herausgenommen wird ( onTakeItem ).
  • Diese Methoden müssen noch umbenannt werden.

Fazit (muss mit einem Debugger oder genauerem Hinsehen bestätigt werden):

  • Alle diese Methoden beziehen sich darauf, dass der Spieler Gegenstände aus den Ausgabeplätzen nimmt (Herstellung oder Handel).
  • onStackChanged wird aufgerufen, wenn sich die Artikelanzahl im Ausgabeslot ändert, und onCrafted(ItemStack, int), wenn diese Anzahl abnimmt (= Artikel werden entnommen).

Die Methode, die sie aufruft, transferSlot , wird nur für die schnelle Übertragung verwendet, auch Shift-Klick genannt. Also, onQuickTransfer scheint mir am genauesten zu sein. Parameternamen wurden tatsächlich vertauscht.

Dies gilt weiterhin für onCrafted , also Wiedereröffnung.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

Runemoro picture Runemoro  ·  3Kommentare

Boundarybreaker picture Boundarybreaker  ·  3Kommentare

asiekierka picture asiekierka  ·  3Kommentare

Juuxel picture Juuxel  ·  6Kommentare

quat1024 picture quat1024  ·  3Kommentare