package net.minecraft.world.inventory; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.Container; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity; public class FurnaceResultSlot extends Slot { private final Player player; private int removeCount; public FurnaceResultSlot(Player player, Container container, int slot, int xPosition, int yPosition) { super(container, slot, xPosition, yPosition); this.player = player; } @Override public boolean mayPlace(ItemStack stack) { return false; } @Override public ItemStack remove(int amount) { if (this.hasItem()) { this.removeCount = this.removeCount + Math.min(amount, this.getItem().getCount()); } return super.remove(amount); } @Override public void onTake(Player player, ItemStack stack) { this.checkTakeAchievements(stack); super.onTake(player, stack); } @Override protected void onQuickCraft(ItemStack stack, int amount) { this.removeCount += amount; this.checkTakeAchievements(stack); } @Override protected void checkTakeAchievements(ItemStack stack) { stack.onCraftedBy(this.player, this.removeCount); if (this.player instanceof ServerPlayer serverPlayer && this.container instanceof AbstractFurnaceBlockEntity abstractFurnaceBlockEntity) { abstractFurnaceBlockEntity.awardUsedRecipesAndPopExperience(serverPlayer); } this.removeCount = 0; } }