nextActionForNewGame() {
    if (this.getGameSession().isNew()) {
      // Logger.module("AI").debug("[G:" + this.getGameSession().gameId + "] _nextActionForNewGame -> new game detected checking for starting hand.");
      const myPlayer = this.getMyPlayer();
      if (!myPlayer.getHasStartingHand()) {
        // Logger.module("AI").debug("[G:" + this.getGameSession().gameId + "] _nextActionForNewGame -> no starting hand detected, checking for mulligans.");
        // mulligan non-summon spells and artifacts or cards with mana cost 1 above starting mana
        const mulliganIndices = [];
        const cardsInHand = myPlayer.getDeck().getCardsInHand();
        for (let i = 0, il = cardsInHand.length; i < il; i++) {
          const card = cardsInHand[i];
          if (mulliganIndices.length < CONFIG.STARTING_HAND_REPLACE_COUNT
            && card != null
            && (card instanceof SDK.Artifact
            || card.getManaCost() > myPlayer.getRemainingMana() + 1
            || (card instanceof SDK.Spell
            && (!CardIntent.getHasIntentType(card.getId(), CardIntentType.Summon, true)
            || CARD_INTENT[card.getId()] == null
            || CARD_INTENT[card.getId()].indexOf('summon') === -1)))) {
            // Logger.module("AI").debug("[G:" + this.getGameSession().gameId + "] _nextActionForNewGame -> mulligan " + card.getLogName() + "because it is a non summon spell, artifact, or costs too much mana");
            mulliganIndices.push(i);
          }
        }
        // Logger.module("AI").debug("[G:" + this.getGameSession().gameId + "] _nextActionForNewGame -> returning action withh " + mulliganIndices.length + " mulligan indices.");
        return myPlayer.actionDrawStartingHand(mulliganIndices);
      }
    }
  }
Returns next action for new game, or null if no action.
@returns {Action|null}
@see nextAction