private Abilities<ActivatedManaAbilityImpl> getManaAbilitiesSortedByManaCount(MageObject mageObject, final Game game) { Abilities<ActivatedManaAbilityImpl> manaAbilities = mageObject.getAbilities().getAvailableActivatedManaAbilities(Zone.BATTLEFIELD, game); if (manaAbilities.size() > 1) { // Sort mana abilities by number of produced manas, to use ability first that produces most mana (maybe also conditional if possible) Collections.sort(manaAbilities, new Comparator<ActivatedManaAbilityImpl>() { @Override public int compare(ActivatedManaAbilityImpl a1, ActivatedManaAbilityImpl a2) { int a1Max = 0; for (Mana netMana : a1.getNetMana(game)) { if (netMana.count() > a1Max) { a1Max = netMana.count(); } } int a2Max = 0; for (Mana netMana : a2.getNetMana(game)) { if (netMana.count() > a2Max) { a2Max = netMana.count(); } } return a2Max - a1Max; } }); } return manaAbilities; }
for (ManaCost cost : unpaid) { Abilities: for (ActivatedManaAbilityImpl ability : mageObject.getAbilities().getAvailableActivatedManaAbilities(Zone.BATTLEFIELD, game)) { for (Mana netMana : ability.getNetMana(game)) { if (cost.testPay(netMana)) { score += mageObject.getAbilities().getAvailableActivatedManaAbilities(Zone.BATTLEFIELD, game).size(); score += mageObject.getAbilities().getActivatedAbilities(Zone.BATTLEFIELD).size(); if (!mageObject.getCardType().contains(CardType.LAND)) {
boolean canAdd = false; boolean withCost = false; Abilities<ActivatedManaAbilityImpl> manaAbilities = permanent.getAbilities().getAvailableActivatedManaAbilities(Zone.BATTLEFIELD, game); for (ActivatedManaAbilityImpl ability : manaAbilities) { if (canUse == null) {
Mana opponentLandMana = new Mana(); for (ActivatedManaAbilityImpl ability : opponentPermanent.getAbilities().getAvailableActivatedManaAbilities(Zone.BATTLEFIELD, game)) { for (Mana netMana : ability.getNetMana(game)) { opponentLandMana.add(netMana);