package blusunrize.immersiveengineering.common.blocks; import blusunrize.immersiveengineering.api.IEProperties; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyEnum; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import java.util.ArrayList; import java.util.List; public abstract class BlockIEMultiblock<E extends Enum<E> & BlockIEBase.IBlockEnum> extends BlockIETileProvider<E> { public BlockIEMultiblock(String name, Material material, PropertyEnum<E> mainProperty, Class<? extends ItemBlockIEBase> itemBlock, Object... additionalProperties) { super(name, material, mainProperty, itemBlock, combineProperties(additionalProperties, IEProperties.FACING_HORIZONTAL,IEProperties.MULTIBLOCKSLAVE)); } @Override public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) { state = super.getActualState(state, world, pos); return state; } @Override public void breakBlock(World world, BlockPos pos, IBlockState state) { TileEntity tileEntity = world.getTileEntity(pos); if(tileEntity instanceof TileEntityMultiblockPart && world.getGameRules().getBoolean("doTileDrops")) { TileEntityMultiblockPart tile = (TileEntityMultiblockPart)tileEntity; if(!tile.formed && tile.pos==-1 && tile.getOriginalBlock()!=null) world.spawnEntityInWorld(new EntityItem(world, pos.getX()+.5,pos.getY()+.5,pos.getZ()+.5, tile.getOriginalBlock().copy())); if(tileEntity instanceof IInventory) InventoryHelper.dropInventoryItems(world, pos, (IInventory)tile); } if(tileEntity instanceof TileEntityMultiblockPart) ((TileEntityMultiblockPart)tileEntity).disassemble(); super.breakBlock(world, pos, state); } @Override public List<ItemStack> getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) { return new ArrayList<ItemStack>(); } @Override public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) { ItemStack stack = getOriginalBlock(world, pos); if(stack!=null) return stack; return super.getPickBlock(state, target, world, pos, player); } public ItemStack getOriginalBlock(World world, BlockPos pos) { TileEntity te = world.getTileEntity(pos); if(te instanceof TileEntityMultiblockPart) return ((TileEntityMultiblockPart)te).getOriginalBlock(); return null; } }