package net.minecraft.block; import net.minecraft.dispenser.BehaviorDefaultDispenseItem; import net.minecraft.dispenser.IBehaviorDispenseItem; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityDispenser; import net.minecraft.tileentity.TileEntityDropper; import net.minecraft.tileentity.TileEntityHopper; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class BlockDropper extends BlockDispenser { private final IBehaviorDispenseItem dropBehavior = new BehaviorDefaultDispenseItem(); protected IBehaviorDispenseItem getBehavior(ItemStack stack) { return this.dropBehavior; } /** * Returns a new instance of a block's tile entity class. Called on placing the block. */ public TileEntity createNewTileEntity(World worldIn, int meta) { return new TileEntityDropper(); } protected void dispense(World worldIn, BlockPos pos) { BlockSourceImpl blocksourceimpl = new BlockSourceImpl(worldIn, pos); TileEntityDispenser tileentitydispenser = (TileEntityDispenser)blocksourceimpl.getBlockTileEntity(); if (tileentitydispenser != null) { int i = tileentitydispenser.getDispenseSlot(); if (i < 0) { worldIn.playEvent(1001, pos, 0); } else { ItemStack itemstack = tileentitydispenser.getStackInSlot(i); if (!itemstack.isEmpty() && net.minecraftforge.items.VanillaInventoryCodeHooks.dropperInsertHook(worldIn, pos, tileentitydispenser, i, itemstack)) { EnumFacing enumfacing = (EnumFacing)worldIn.getBlockState(pos).getValue(FACING); BlockPos blockpos = pos.offset(enumfacing); IInventory iinventory = TileEntityHopper.getInventoryAtPosition(worldIn, (double)blockpos.getX(), (double)blockpos.getY(), (double)blockpos.getZ()); ItemStack itemstack1; if (iinventory == null) { itemstack1 = this.dropBehavior.dispense(blocksourceimpl, itemstack); } else { itemstack1 = TileEntityHopper.putStackInInventoryAllSlots(tileentitydispenser, iinventory, itemstack.copy().splitStack(1), enumfacing.getOpposite()); if (itemstack1.isEmpty()) { itemstack1 = itemstack.copy(); itemstack1.shrink(1); } else { itemstack1 = itemstack.copy(); } } tileentitydispenser.setInventorySlotContents(i, itemstack1); } } } } }