public boolean actionForage(Actor actor, Flora source) {
    if (source == null || source.destroyed()) {
      source = null ;
      return false ;
    }
    
    float labour = 0, skill = 0 ;
    if (actor.traits.test(HARD_LABOUR, ROUTINE_DC, 1.0f)) labour++ ;
    if (actor.traits.test(CULTIVATION, ROUTINE_DC, 1.0f)) skill++ ;
    if (actor.traits.test(CULTIVATION, DIFFICULT_DC, 1.0f)) {
      labour++ ;
      skill++ ;
    }
    Resting.dineFrom(actor, actor) ;
    
    if (labour > 0 && skill > 0) {
      actor.gear.bumpItem(CARBS, labour * 0.1f) ;
      actor.gear.bumpItem(GREENS, skill * labour * 0.1f) ;
      source.incGrowth(-0.1f * (skill + labour), actor.world(), false) ;
      source = null ;
      return true ;
    }
    else source.incGrowth(-0.1f / 2f, actor.world(), false) ;
    source = null ;
    return false ;
  }