package carpetextra.mixins;

import carpetextra.CarpetExtraSettings;
import carpetextra.fakes.DispenserBlockEntityInterface;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.block.DispenserBlock;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.block.entity.DispenserBlockEntity;
import net.minecraft.block.entity.LootableContainerBlockEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.DefaultedList;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;

@Mixin(DispenserBlockEntity.class)
public abstract class DispenserBlockEntity_craftingMixin extends LootableContainerBlockEntity implements DispenserBlockEntityInterface
{
    @Shadow private DefaultedList<ItemStack> inventory;

    protected DispenserBlockEntity_craftingMixin(BlockEntityType<?> blockEntityType_1)
    {
        super(blockEntityType_1);
    }

    @Override
    public DefaultedList<ItemStack> getInventory()
    {
        return inventory;
    }

    @Override
    public boolean isValidInvStack(int int_1, ItemStack itemStack_1)
    {

        if (CarpetExtraSettings.autoCraftingDropper && world != null)
        {
            BlockState state = world.getBlockState(pos);
            if (state.getBlock() == Blocks.DROPPER)
            {
                if (world.getBlockState(pos.offset(state.get(DispenserBlock.FACING))).getBlock() == Blocks.CRAFTING_TABLE)
                {
                    return inventory.get(int_1).isEmpty();
                }
            }
        }
        return super.isValidInvStack(int_1, itemStack_1);
    }
}