public Behaviour getNextStep() {
    if (! configured()) return null ;
    if (stage == STAGE_GET_SEED) {
      final Action collects = new Action(
        actor, nursery,
        this, "actionCollectSeed",
        Action.LOOK, "Collecting seed"
      ) ;
      return collects ;
    }
    if (stage == STAGE_PLANTING) {
      final Action plants = new Action(
        actor, toPlant,
        this, "actionPlant",
        Action.BUILD, "Planting"
      ) ;
      final Tile to = Spacing.pickFreeTileAround(toPlant, actor) ;
      plants.setMoveTarget(to) ;
      return plants ;
    }
    if (stage == STAGE_SAMPLING) {
      final Action cuts = new Action(
        actor, toCut,
        this, "actionCutting",
        Action.BUILD, "Cutting"
      ) ;
      cuts.setMoveTarget(Spacing.nearestOpenTile(toCut.origin(), actor)) ;
      return cuts ;
    }
    if (stage == STAGE_RETURN) {
      final Action returns = new Action(
        actor, nursery,
        this, "actionReturnHarvest",
        Action.REACH_DOWN, "Returning Harvest"
      ) ;
      return returns ;
    }
    return null ;
  }