Yarn: Slot.onCrafted неверен

Созданный на 4 авг. 2020  ·  5Комментарии  ·  Источник: FabricMC/yarn

Все 5 Комментарий

Я думаю, что лучше будет onSizeChanged или onItemCountChanged . Изменяется размер стека или количество элементов, а не количество стека (количество стопок).

Это все еще применимо после недавней модернизации обработчиков экрана в Mojang, например, 21w11a?

Хорошо, исходный анализ может быть не на 100% правильным. Текущее поведение:

  • Slot.onStackChanged по-прежнему не является обычным обработчиком изменения стека.

    • Он вызывается из реализаций transferSlot для выходных слотов различных блоков крафта, а также для входов пивоваренного стенда.

    • Параметры, по-видимому, равны newStack, originalStack (заменены местами в соответствии с текущим отображением).

    • Что он делает, так это проверяет, были ли элементы вынуты из слота, и если да, то вызывает onCrafted(ItemStack, int) с originalStack (в текущих сопоставлениях называется newItem ) и разницей между размеры стека.

    • Я думаю, что это больше похоже на «изменение количества элементов в выходном слоте».

  • Slot.onCrafted(ItemStack, int) вызывается только onStackChanged .

    • По умолчанию impl: no-op

    • В CraftingResultSlot , FurnaceOutputSlot и TradeOutputSlot реализация всегда одинакова: она увеличивает частное поле amount параметром int, затем вызывает onCrafted(ItemStack) с параметром стека элементов.

  • Slot.onCrafted(ItemStack) вызывается только реализациями onCrafted(ItemStack, int) и onTakeItem в этих трех классах.

    • По умолчанию impl: no-op

    • Реализации в этих трех классах: сбрасывает частное поле amount в 0 и запускает задачи завершения (сброс XP из печи и т. Д.)

Заключение (необходимо подтвердить отладчиком или внимательнее):

  • Все эти методы относятся к игроку, вынимающему предметы из выходных слотов (изготовление или торговля).
  • onStackChanged вызывается, когда количество элементов изменяется в слоте вывода, и onCrafted(ItemStack, int) когда это количество уменьшается (= элементы извлекаются).
  • onCrafted(ItemStack) завершает процесс вывода, когда происходит либо частичное уменьшение ( onStackChanged ), или полный стек ( onTakeItem ).
  • Эти методы все еще нуждаются в переименовании.

Заключение (необходимо подтвердить отладчиком или внимательнее):

  • Все эти методы относятся к игроку, вынимающему предметы из выходных слотов (изготовление или торговля).
  • onStackChanged вызывается, когда количество элементов изменяется в выходном слоте, и onCrafted (ItemStack, int), когда это количество уменьшается (= элементы извлекаются).

Метод, вызывающий их, transferSlot , используется только для быстрой передачи, иначе говоря, нажатие клавиши Shift. Итак, onQuickTransfer мне кажется наиболее точным. Имена параметров действительно поменялись.

Это по-прежнему относится к onCrafted , поэтому повторное открытие.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

ChloeDawn picture ChloeDawn  ·  6Комментарии

copygirl picture copygirl  ·  6Комментарии

Awakened-Redstone picture Awakened-Redstone  ·  4Комментарии

altrisi picture altrisi  ·  4Комментарии

Runemoro picture Runemoro  ·  4Комментарии