انظر https://github.com/FabricMC/yarn/issues/1656#issuecomment -812829091
أعتقد أنه إما onSizeChanged
أو onItemCountChanged
سيكون أفضل. إنه حجم المكدس ، أو عدد العناصر ، الذي يتم تغييره ، وليس عدد المكدس (عدد المكدس).
هل هذا لا يزال ساريًا بعد تجديد mojang الأخير على معالجات الشاشة مثل 21w11a؟
حسنًا ، قد لا يكون التحليل الأصلي صحيحًا بنسبة 100٪. السلوك الحالي:
Slot.onStackChanged
غير معالج تغيير مكدس عام.transferSlot
لفتحات الإخراج الخاصة بمختلف قوالب التصنيع ، ولكن أيضًا لتخمير مدخلات الحامل.newStack, originalStack
(تم تبديلها من طريقة تعيينها حاليًا).onCrafted(ItemStack, int)
مع originalStack
(يُسمى newItem
في التعيينات الحالية) والفرق بين أحجام المكدس.Slot.onCrafted(ItemStack, int)
بواسطة onStackChanged
.CraftingResultSlot
و FurnaceOutputSlot
و TradeOutputSlot
يكون التنفيذ دائمًا هو نفسه: فهو يزيد الحقل amount
بواسطة المعلمة int ، ثم يستدعي onCrafted(ItemStack)
مع معلمة مكدس العنصر.Slot.onCrafted(ItemStack)
فقط من خلال تطبيقات onCrafted(ItemStack, int)
و onTakeItem
في تلك الفئات الثلاثة.amount
إلى 0 وتشغيل مهام الإنهاء (الفرن يسقط XP ، إلخ)الخلاصة (يجب تأكيدها باستخدام مصحح أخطاء أو نظرة فاحصة):
onStackChanged
عندما يتغير عدد العناصر في فتحة الإخراج ، و onCrafted(ItemStack, int)
عندما يقل هذا العدد (= يتم إخراج العناصر).onCrafted(ItemStack)
عملية الإخراج عندما يكون هناك إما انخفاض جزئي ( onStackChanged
) أو سحب مكدس كامل ( onTakeItem
).الخلاصة (يجب تأكيدها باستخدام مصحح أخطاء أو نظرة فاحصة):
- تتعلق كل هذه الطرق باللاعب الذي يخرج العناصر من فتحات الإخراج (التصنيع أو التداول).
- يتم استدعاء onStackChanged عندما يتغير عدد العناصر في فتحة الإخراج ، ويتم استدعاء onCrafted (ItemStack ، int) عندما ينخفض هذا العدد (= يتم إخراج العناصر).
الطريقة التي تستدعيهم ، transferSlot
، تستخدم فقط للتحويل السريع ويعرف أيضًا باسم النقر على shift. لذلك ، يبدو أن onQuickTransfer
هو الأكثر دقة بالنسبة لي. تم بالفعل تبديل أسماء المعلمات.
لا يزال هذا ينطبق على onCrafted
، لذا إعادة الفتح.