package crazypants.enderio;

import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;

import com.enderio.core.common.BlockEnder;

import crazypants.enderio.api.tool.ITool;
import crazypants.enderio.machine.AbstractMachineEntity;
import crazypants.enderio.tool.ToolUtil;

public abstract class BlockEio extends BlockEnder {

  protected BlockEio(String name, Class<? extends TileEntityEio> teClass) {
    super(name, teClass);
    setCreativeTab(EnderIOTab.tabEnderIO);
  }

  protected BlockEio(String name, Class<? extends TileEntityEio> teClass, Material mat) {
    super(name, teClass, mat);
    setCreativeTab(EnderIOTab.tabEnderIO);
  }

  @Override
  public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int side, float par7, float par8, float par9) {

    if(shouldWrench(world, x, y, z, entityPlayer, side) && ToolUtil.breakBlockWithTool(this, world, x, y, z, entityPlayer)) {
      return true;
    }
    TileEntity te = world.getTileEntity(x, y, z);

    ITool tool = ToolUtil.getEquippedTool(entityPlayer);
    if(tool != null && !entityPlayer.isSneaking()) {
      if(te instanceof AbstractMachineEntity) {
        ((AbstractMachineEntity) te).toggleIoModeForFace(ForgeDirection.getOrientation(side));
        world.markBlockForUpdate(x, y, z);
        return true;
      }
    }
    
    return super.onBlockActivated(world, x, y, z, entityPlayer, side, par7, par8, par9);
  }
}

@@ -1271,16 +1271,93 @@
 eaking()
+ && tool.canUse(entityPlayer.getCurrentEquippedItem(), entityPlayer, x, y, z)
 ) %7B%0A    

Add ITool.canUse check