public void onGrowth(Tile t) {
    if (! structure.intact()) return ;
    //
    //  Here, we average fertility over the plantation as a whole-
    //  TODO:  Possibly combine with irrigation effects from water supply or
    //  life support?
    float avgMoisture = 0, count = 0 ;
    for (Plantation p : strip) {
      final Tile o = p.origin() ;
      for (int c = 0, i = 0 ; c < 4 ; c++) {
        final Tile u = world.tileAt(
          o.x + CROPS_POS[i++],
          o.y + CROPS_POS[i++]
        ) ;
        avgMoisture += u.habitat().moisture() ;
        count++ ;
      }
    }
    avgMoisture /= count * 10 ;
    if (type == TYPE_COVERED) avgMoisture = (avgMoisture + 1) / 2f ;
    //
    //  Then apply growth to each crop-
    boolean anyChange = false ;
    for (Crop c : planted) if (c != null) {
      final int oldGrowth = (int) c.growStage ;
      c.doGrowth(avgMoisture, 0.25f) ;
      final int newGrowth = (int) c.growStage ;
      if (oldGrowth != newGrowth) anyChange = true ;
      world.ecology().impingeBiomass(this, c.health * c.growStage / 2f, true) ;
    }
    checkCropStates() ;
    if (anyChange) refreshCropSprites() ;
  }