diff --git a/forge-ai/src/main/java/forge/ai/AiBlockController.java b/forge-ai/src/main/java/forge/ai/AiBlockController.java index d8b4afebaa2..75bfae6ee51 100644 --- a/forge-ai/src/main/java/forge/ai/AiBlockController.java +++ b/forge-ai/src/main/java/forge/ai/AiBlockController.java @@ -133,9 +133,10 @@ public class AiBlockController { final CardCollection sortedAttackers = new CardCollection(); CardCollection firstAttacker = new CardCollection(); final FCollectionView defenders = combat.getDefenders(); + final List attackingCmd = ComputerUtilCombat.getLifeThreateningCommanders(ai, combat); // If I don't have any planeswalkers then sorting doesn't really matter - if (defenders.size() == 1) { + if (defenders.size() == 1 || !attackingCmd.isEmpty()) { final CardCollection attackers = combat.getAttackersOf(defenders.get(0)); // Begin with the attackers that pose the biggest threat ComputerUtilCard.sortByEvaluateCreature(attackers); @@ -146,7 +147,14 @@ public class AiBlockController { public int compare(final Card o1, final Card o2) { if (o1.hasSVar("MustBeBlocked") && !o2.hasSVar("MustBeBlocked")) { return -1; - } else if (!o1.hasSVar("MustBeBlocked") && o2.hasSVar("MustBeBlocked")) { + } + if (!o1.hasSVar("MustBeBlocked") && o2.hasSVar("MustBeBlocked")) { + return 1; + } + if (attackingCmd.contains(o1) && !attackingCmd.contains(o2)) { + return -1; + } + if (!attackingCmd.contains(o1) && attackingCmd.contains(o2)) { return 1; } return 0; @@ -166,14 +174,13 @@ public class AiBlockController { sortedAttackers.addAll(attackers); } else if (defender instanceof Player && defender.equals(ai)) { firstAttacker = combat.getAttackersOf(defender); + CardLists.sortByPowerDesc(firstAttacker); } } if (ComputerUtilCombat.lifeInDanger(ai, combat)) { // add creatures attacking the Player to the front of the list - for (final Card c : firstAttacker) { - sortedAttackers.add(0, c); - } + sortedAttackers.addAll(0, firstAttacker); } else { // add creatures attacking the Player to the back of the list sortedAttackers.addAll(firstAttacker); diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index 15c0a89f1b9..7b261c24726 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -387,7 +387,7 @@ public class ComputerUtilCombat { public static List getLifeThreateningCommanders(final Player ai, final Combat combat) { List res = Lists.newArrayList(); for (Card c : combat.getAttackers()) { - if (c.isCommander()) { + if (c.isCommander() && combat.isAttacking(c, ai)) { int currentCommanderDamage = ai.getCommanderDamage(c); if (damageIfUnblocked(c, ai, combat, false) + currentCommanderDamage >= 21) { res.add(c);