protected static Target nextMineFace(ExcavationSite site, Tile under[]) {
    //
    //  Firstly, we set up some initial reference variables, and sample the
    //  tiles and outcrops that can harvest from.
    final Presences presences = site.world().presences ;
    final int SS = World.SECTOR_SIZE ;
    final Batch <Target> sampled = new Batch <Target> () ;
    Target picked = null ;
    float bestRating = Float.NEGATIVE_INFINITY ;
    presences.sampleFromKey(site, site.world(), 5, sampled, Outcrop.class) ;
    if (under != null) for (int n = 5 ; n-- > 0 ;) {
      sampled.add((Tile) Rand.pickFrom(under)) ;
    }
    //
    //  Then, we assess the promise associated with each prospective face, pick
    //  the best, and return-
    for (Target face : sampled) {
      final float dist = Spacing.distance(face, site) ;
      if (dist > site.digLimit() + (SS / 2)) continue ;
      final Item left = mineralsLeft(face) ;
      if (left == null) continue ;
      float rating = 1 + site.extractionBonus(left.type) ;
      if (face instanceof Outcrop) rating *= 10 ;
      rating *= SS / (SS + dist) ;
      if (rating > bestRating) { bestRating = rating ; picked = face ; }
    }
    return picked ;
  }