Ну смотри:
Создаешь интерфейс IWrenchable, в нем определяешь void метод wrech(..любые аргументы..).
Его будет расширять блок, который хочет ломаться ключем.
Делаешь, собственно, ключ. В метод onItemUse пишешь:
if(world.getBlock(x, y, z) instanceof IWrenchable){
((IWrenchable)world.getBlock(x, y, z)).wrench();
}
Все, теперь ключ универсальный.
Любой блок, который будет расширять этот интерфейс будет создавать метод wrench и переписывать под себя.
Например, я создал блок и определил в нем наш метод.
public void wrench(EntityPlayer player){
player.worldObj.createExplosion(player, player.posX, player.posY, player.posZ, 5.0F, true);
}
Теперь когда ключиком кликнешь по этому блоку, то он взорвется.
Удобно, правда?
Вот так и с другими интерфейсами и их реализациями.