diff --git a/src/main/java/forge/CardLists.java b/src/main/java/forge/CardLists.java index 21ef93c5a7c..f400c3e8357 100644 --- a/src/main/java/forge/CardLists.java +++ b/src/main/java/forge/CardLists.java @@ -237,9 +237,7 @@ public class CardLists { } public static List createCardList(Card c) { - List res = new ArrayList(); - res.add(c); - return res; + return Lists.newArrayList(c); } /** diff --git a/src/main/java/forge/game/ai/ComputerUtilCard.java b/src/main/java/forge/game/ai/ComputerUtilCard.java index 91e864dd80e..ebdd1b3fd0e 100644 --- a/src/main/java/forge/game/ai/ComputerUtilCard.java +++ b/src/main/java/forge/game/ai/ComputerUtilCard.java @@ -212,30 +212,6 @@ public class ComputerUtilCard { } - // for Sarkhan the Mad - /** - *

- * getCheapestCreatureAI. - *

- * - * @param list - * a {@link forge.CardList} object. - * @param spell - * a {@link forge.Card} object. - * @param targeted - * a boolean. - * @return a {@link forge.Card} object. - */ - public static Card getCheapestCreatureAI(List list, final SpellAbility spell, final boolean targeted) { - list = CardLists.filter(list, new Predicate() { - @Override - public boolean apply(final Card c) { - return c.isCreature(); - } - }); - return getCheapestPermanentAI(list, spell, targeted); - } - // returns null if list.size() == 0 /** *

@@ -268,8 +244,20 @@ public class ComputerUtilCard { * @return the card */ public static Card getBestCreatureAI(final List list) { - List all = CardLists.filter(list, CardPredicates.Presets.CREATURES); - return Aggregates.itemWithMax(all, ComputerUtilCard.fnEvaluateCreature); + return Aggregates.itemWithMax(Iterables.filter(list, CardPredicates.Presets.CREATURES), ComputerUtilCard.fnEvaluateCreature); + } + + /** + *

+ * getWorstCreatureAI. + *

+ * + * @param list + * a {@link forge.CardList} object. + * @return a {@link forge.Card} object. + */ + public static Card getWorstCreatureAI(final List list) { + return Aggregates.itemWithMin(Iterables.filter(list, CardPredicates.Presets.CREATURES), ComputerUtilCard.fnEvaluateCreature); } // This selection rates tokens higher @@ -312,22 +300,6 @@ public class ComputerUtilCard { return ComputerUtilCard.getWorstPermanentAI(list, false, false, false, false); } - // returns null if list.size() == 0 - /** - *

- * getWorstCreatureAI. - *

- * - * @param list - * a {@link forge.CardList} object. - * @return a {@link forge.Card} object. - */ - public static Card getWorstCreatureAI(final List list) { - List all = CardLists.filter(list, CardPredicates.Presets.CREATURES); - // get smallest creature - return Aggregates.itemWithMin(all, ComputerUtilCard.fnEvaluateCreature); - } - /** *

* getWorstPermanentAI. @@ -350,20 +322,23 @@ public class ComputerUtilCard { if (list.size() == 0) { return null; } - - if (biasEnch && Iterables.any(list, CardPredicates.Presets.ENCHANTMENTS)) { + + final boolean hasEnchantmants = Iterables.any(list, CardPredicates.Presets.ENCHANTMENTS); + if (biasEnch && hasEnchantmants) { return getCheapestPermanentAI(CardLists.filter(list, CardPredicates.Presets.ENCHANTMENTS), null, false); } - if (biasArt && Iterables.any(list, CardPredicates.Presets.ARTIFACTS)) { + final boolean hasArtifacts = Iterables.any(list, CardPredicates.Presets.ARTIFACTS); + if (biasArt && hasArtifacts) { return getCheapestPermanentAI(CardLists.filter(list, CardPredicates.Presets.ARTIFACTS), null, false); } - + if (biasLand && Iterables.any(list, CardPredicates.Presets.LANDS)) { return ComputerUtilCard.getWorstLand(CardLists.filter(list, CardPredicates.Presets.LANDS)); } - if (biasCreature && Iterables.any(list, CardPredicates.Presets.CREATURES)) { + final boolean hasCreatures = Iterables.any(list, CardPredicates.Presets.CREATURES); + if (biasCreature && hasCreatures) { return getWorstCreatureAI(CardLists.filter(list, CardPredicates.Presets.CREATURES)); } @@ -372,17 +347,13 @@ public class ComputerUtilCard { return ComputerUtilCard.getWorstLand(lands); } - if ((CardLists.getType(list, "Artifact").size() > 0) || (CardLists.getType(list, "Enchantment").size() > 0)) { - return getCheapestPermanentAI(CardLists.filter(list, new Predicate() { - @Override - public boolean apply(final Card c) { - return c.isArtifact() || c.isEnchantment(); - } - }), null, false); + if (hasEnchantmants || hasArtifacts) { + final List ae = CardLists.filter(list, Predicates.or(CardPredicates.Presets.ARTIFACTS, CardPredicates.Presets.ENCHANTMENTS)); + return getCheapestPermanentAI(ae, null, false); } - if (CardLists.getType(list, "Creature").size() > 0) { - return getWorstCreatureAI(CardLists.getType(list, "Creature")); + if (hasCreatures) { + return getWorstCreatureAI(CardLists.filter(list, CardPredicates.Presets.CREATURES)); } // Planeswalkers fall through to here, lands will fall through if there diff --git a/src/main/java/forge/game/phase/Combat.java b/src/main/java/forge/game/phase/Combat.java index 8f27f32f6ec..ee6e2b12055 100644 --- a/src/main/java/forge/game/phase/Combat.java +++ b/src/main/java/forge/game/phase/Combat.java @@ -26,6 +26,8 @@ import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; +import com.google.common.collect.Lists; + import forge.Card; import forge.CardLists; import forge.CardPredicates; @@ -368,9 +370,8 @@ public class Combat { this.blocked.add(attacker); this.attackerMap.get(attacker).add(blocker); if (!this.blockerMap.containsKey(blocker)) { - this.blockerMap.put(blocker, CardLists.createCardList(attacker)); - } - else { + this.blockerMap.put(blocker, Lists.newArrayList(attacker)); + } else { this.blockerMap.get(blocker).add(attacker); } attacker.getGame().getEvents().post(new BlockerAssignedEvent());