80 lines
3.0 KiB
Java
80 lines
3.0 KiB
Java
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |