package net.minecraft.server; public class BlockHopper extends BlockTileEntity { public static final BlockStateDirection FACING = BlockProperties.M; public static final BlockStateBoolean ENABLED = BlockProperties.f; private static final VoxelShape c = Block.a(0.0D, 10.0D, 0.0D, 16.0D, 16.0D, 16.0D); private static final VoxelShape d = Block.a(4.0D, 4.0D, 4.0D, 12.0D, 10.0D, 12.0D); private static final VoxelShape e = VoxelShapes.a(BlockHopper.d, BlockHopper.c); private static final VoxelShape f = VoxelShapes.a(BlockHopper.e, IHopper.a, OperatorBoolean.ONLY_FIRST); private static final VoxelShape g = VoxelShapes.a(BlockHopper.f, Block.a(6.0D, 0.0D, 6.0D, 10.0D, 4.0D, 10.0D)); private static final VoxelShape h = VoxelShapes.a(BlockHopper.f, Block.a(12.0D, 4.0D, 6.0D, 16.0D, 8.0D, 10.0D)); private static final VoxelShape i = VoxelShapes.a(BlockHopper.f, Block.a(6.0D, 4.0D, 0.0D, 10.0D, 8.0D, 4.0D)); private static final VoxelShape j = VoxelShapes.a(BlockHopper.f, Block.a(6.0D, 4.0D, 12.0D, 10.0D, 8.0D, 16.0D)); private static final VoxelShape k = VoxelShapes.a(BlockHopper.f, Block.a(0.0D, 4.0D, 6.0D, 4.0D, 8.0D, 10.0D)); private static final VoxelShape w = IHopper.a; private static final VoxelShape x = VoxelShapes.a(IHopper.a, Block.a(12.0D, 8.0D, 6.0D, 16.0D, 10.0D, 10.0D)); private static final VoxelShape y = VoxelShapes.a(IHopper.a, Block.a(6.0D, 8.0D, 0.0D, 10.0D, 10.0D, 4.0D)); private static final VoxelShape z = VoxelShapes.a(IHopper.a, Block.a(6.0D, 8.0D, 12.0D, 10.0D, 10.0D, 16.0D)); private static final VoxelShape A = VoxelShapes.a(IHopper.a, Block.a(0.0D, 8.0D, 6.0D, 4.0D, 10.0D, 10.0D)); public BlockHopper(Block.Info block_info) { super(block_info); this.p((IBlockData) ((IBlockData) ((IBlockData) this.blockStateList.getBlockData()).set(BlockHopper.FACING, EnumDirection.DOWN)).set(BlockHopper.ENABLED, true)); } @Override public VoxelShape a(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition, VoxelShapeCollision voxelshapecollision) { switch ((EnumDirection) iblockdata.get(BlockHopper.FACING)) { case DOWN: return BlockHopper.g; case NORTH: return BlockHopper.i; case SOUTH: return BlockHopper.j; case WEST: return BlockHopper.k; case EAST: return BlockHopper.h; default: return BlockHopper.f; } } @Override public VoxelShape j(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition) { switch ((EnumDirection) iblockdata.get(BlockHopper.FACING)) { case DOWN: return BlockHopper.w; case NORTH: return BlockHopper.y; case SOUTH: return BlockHopper.z; case WEST: return BlockHopper.A; case EAST: return BlockHopper.x; default: return IHopper.a; } } @Override public IBlockData getPlacedState(BlockActionContext blockactioncontext) { EnumDirection enumdirection = blockactioncontext.getClickedFace().opposite(); return (IBlockData) ((IBlockData) this.getBlockData().set(BlockHopper.FACING, enumdirection.m() == EnumDirection.EnumAxis.Y ? EnumDirection.DOWN : enumdirection)).set(BlockHopper.ENABLED, true); } @Override public TileEntity createTile(IBlockAccess iblockaccess) { return new TileEntityHopper(); } @Override public void postPlace(World world, BlockPosition blockposition, IBlockData iblockdata, EntityLiving entityliving, ItemStack itemstack) { if (itemstack.hasName()) { TileEntity tileentity = world.getTileEntity(blockposition); if (tileentity instanceof TileEntityHopper) { ((TileEntityHopper) tileentity).setCustomName(itemstack.getName()); } } } @Override public void onPlace(IBlockData iblockdata, World world, BlockPosition blockposition, IBlockData iblockdata1, boolean flag) { if (iblockdata1.getBlock() != iblockdata.getBlock()) { this.a(world, blockposition, iblockdata); } } @Override public EnumInteractionResult interact(IBlockData iblockdata, World world, BlockPosition blockposition, EntityHuman entityhuman, EnumHand enumhand, MovingObjectPositionBlock movingobjectpositionblock) { if (world.isClientSide) { return EnumInteractionResult.SUCCESS; } else { TileEntity tileentity = world.getTileEntity(blockposition); if (tileentity instanceof TileEntityHopper) { entityhuman.openContainer((TileEntityHopper) tileentity); entityhuman.a(StatisticList.INSPECT_HOPPER); } return EnumInteractionResult.SUCCESS; } } @Override public void doPhysics(IBlockData iblockdata, World world, BlockPosition blockposition, Block block, BlockPosition blockposition1, boolean flag) { this.a(world, blockposition, iblockdata); } private void a(World world, BlockPosition blockposition, IBlockData iblockdata) { boolean flag = !world.isBlockIndirectlyPowered(blockposition); if (flag != (Boolean) iblockdata.get(BlockHopper.ENABLED)) { world.setTypeAndData(blockposition, (IBlockData) iblockdata.set(BlockHopper.ENABLED, flag), 4); } } @Override public void remove(IBlockData iblockdata, World world, BlockPosition blockposition, IBlockData iblockdata1, boolean flag) { if (iblockdata.getBlock() != iblockdata1.getBlock()) { TileEntity tileentity = world.getTileEntity(blockposition); if (tileentity instanceof TileEntityHopper) { InventoryUtils.dropInventory(world, blockposition, (TileEntityHopper) tileentity); world.updateAdjacentComparators(blockposition, this); } super.remove(iblockdata, world, blockposition, iblockdata1, flag); } } @Override public EnumRenderType c(IBlockData iblockdata) { return EnumRenderType.MODEL; } @Override public boolean isComplexRedstone(IBlockData iblockdata) { return true; } @Override public int a(IBlockData iblockdata, World world, BlockPosition blockposition) { return Container.a(world.getTileEntity(blockposition)); } @Override public IBlockData a(IBlockData iblockdata, EnumBlockRotation enumblockrotation) { return (IBlockData) iblockdata.set(BlockHopper.FACING, enumblockrotation.a((EnumDirection) iblockdata.get(BlockHopper.FACING))); } @Override public IBlockData a(IBlockData iblockdata, EnumBlockMirror enumblockmirror) { return iblockdata.a(enumblockmirror.a((EnumDirection) iblockdata.get(BlockHopper.FACING))); } @Override protected void a(BlockStateList.a<Block, IBlockData> blockstatelist_a) { blockstatelist_a.a(BlockHopper.FACING, BlockHopper.ENABLED); } @Override public void a(IBlockData iblockdata, World world, BlockPosition blockposition, Entity entity) { TileEntity tileentity = world.getTileEntity(blockposition); if (tileentity instanceof TileEntityHopper) { ((TileEntityHopper) tileentity).a(entity); } } @Override public boolean a(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition, PathMode pathmode) { return false; } }