public boolean actionHarvest(Actor actor, Actor prey) {
    if (type == TYPE_SAMPLE) {
      final Item sample = Item.withReference(SAMPLES, prey) ;
      actor.gear.addItem(sample) ;
      return true ;
    }
    //
    //  Determine just how large a chunk you can take out of the prey-
    final float
      before = prey.health.injuryLevel(),
      damage = actor.gear.attackDamage() * (Rand.num() + 0.5f) / 10 ;
    prey.health.takeInjury(damage) ;
    float taken = prey.health.injuryLevel() - before ;
    taken *= prey.health.maxHealth() ;
    //
    //  Then dispose of it appropriately-
    if (! prey.health.dying()) prey.health.setState(ActorHealth.STATE_DYING) ;
    if (type == TYPE_FEEDS) {
      actor.health.takeSustenance(taken * Fauna.MEAT_CONVERSION, 1) ;
    }
    if (type == TYPE_HARVEST) {
      actor.gear.bumpItem(PROTEIN, taken) ;
    }
    if (type == TYPE_PROCESS) {
      final Item sample = Item.withReference(SAMPLES, prey) ;
      actor.gear.addItem(Item.withAmount(sample, taken)) ;
    }
    return true ;
  }