public boolean actionMineTile(Actor actor, Tile face) {
    float progressChance = successCheck(actor, face.habitat()) / 10f ;
    final Item left = mineralsLeft(face) ;
    if (left == null) return false ;
    final float bonus = site.extractionBonus(left.type) ;
    progressChance *= 1 + (bonus / 2f) ;
    if (Rand.num() > progressChance) return false ;
    
    final Terrain terrain = face.world.terrain() ;
    final byte typeID = terrain.mineralType(face) ;
    final float oldAmount = terrain.mineralsAt(face, typeID) ;
    terrain.incMineralDegree(face, typeID, -1) ;
    final float taken = oldAmount - terrain.mineralsAt(face, typeID) ;
    
    if (taken == 0 || left == null) return false ;
    final Item mined = Item.with(SAMPLES, left.type, taken * bonus / 2f, 0) ;
    actor.gear.addItem(mined) ;
    
    return true ;
  }