diff --git a/src/main/java/forge/AllZoneUtil.java b/src/main/java/forge/AllZoneUtil.java index 76d5e702142..9e90328c26b 100644 --- a/src/main/java/forge/AllZoneUtil.java +++ b/src/main/java/forge/AllZoneUtil.java @@ -89,7 +89,7 @@ public abstract class AllZoneUtil { * @return a CardList with all cards currently in a graveyard */ public static CardList getCardsIn(final ZoneType zone, final String cardName) { - return AllZoneUtil.getCardsIn(zone).filter(CardPredicates.nameEquals(cardName)); + return CardListUtil.filter(AllZoneUtil.getCardsIn(zone), CardPredicates.nameEquals(cardName)); } // ////////// Creatures @@ -102,7 +102,7 @@ public abstract class AllZoneUtil { */ public static CardList getCreaturesInPlay() { final CardList creats = AllZoneUtil.getCardsIn(ZoneType.Battlefield); - return creats.filter(Presets.CREATURES); + return CardListUtil.filter(creats, Presets.CREATURES); } /** @@ -114,7 +114,7 @@ public abstract class AllZoneUtil { */ public static CardList getCreaturesInPlay(final Player player) { final CardList creats = player.getCardsIn(ZoneType.Battlefield); - return creats.filter(Presets.CREATURES); + return CardListUtil.filter(creats, Presets.CREATURES); } // /////////////// Lands @@ -127,7 +127,7 @@ public abstract class AllZoneUtil { * @return a CardList containing all lands the given player has in play */ public static CardList getPlayerLandsInPlay(final Player player) { - return player.getCardsIn(ZoneType.Battlefield).filter(Presets.LANDS); + return CardListUtil.filter(player.getCardsIn(ZoneType.Battlefield), Presets.LANDS); } /** @@ -136,7 +136,7 @@ public abstract class AllZoneUtil { * @return a CardList of all lands on the battlefield */ public static CardList getLandsInPlay() { - return AllZoneUtil.getCardsIn(ZoneType.Battlefield).filter(Presets.LANDS); + return CardListUtil.filter(AllZoneUtil.getCardsIn(ZoneType.Battlefield), Presets.LANDS); } // ============================================================================= @@ -235,7 +235,7 @@ public abstract class AllZoneUtil { */ public static CardList getPlayerColorInPlay(final Player player, final String color) { CardList cards = player.getCardsIn(ZoneType.Battlefield); - cards = cards.filter(new Predicate() { + cards = CardListUtil.filter(cards, new Predicate() { @Override public boolean apply(final Card c) { final List colorList = CardUtil.getColors(c); diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index 9aaf93681cd..4978a905c2e 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -6650,7 +6650,7 @@ public class Card extends GameEntity implements Comparable { return false; } } else if (property.startsWith("TopGraveyardCreature")) { - List list = this.getOwner().getCardsIn(ZoneType.Graveyard).filter(CardPredicates.Presets.CREATURES); + List list = CardListUtil.filter(this.getOwner().getCardsIn(ZoneType.Graveyard), CardPredicates.Presets.CREATURES); Collections.reverse(list); if (list.isEmpty() || !this.equals(list.get(0))) { return false; diff --git a/src/main/java/forge/CardList.java b/src/main/java/forge/CardList.java index 089c88aabb3..fec234c53cd 100644 --- a/src/main/java/forge/CardList.java +++ b/src/main/java/forge/CardList.java @@ -18,8 +18,6 @@ package forge; import java.util.ArrayList; -import com.google.common.base.Predicate; -import com.google.common.collect.Iterables; /** @@ -38,18 +36,4 @@ public class CardList extends ArrayList { public CardList(final Card c) { this.add(c); } public CardList(final Iterable al) { for(Card c : al) this.add(c); } - - /** - * Create a new list of cards by applying a filter to this one. - * - * @param filt - * determines which cards are present in the resulting list - * - * @return a subset of this CardList whose items meet the filtering - * criteria; may be empty, but never null. - */ - public final CardList filter(final Predicate filt) { - return new CardList(Iterables.filter(this, filt)); - } - } // end class CardList diff --git a/src/main/java/forge/CardListUtil.java b/src/main/java/forge/CardListUtil.java index e10d91f2ed3..9eded6b9fc7 100644 --- a/src/main/java/forge/CardListUtil.java +++ b/src/main/java/forge/CardListUtil.java @@ -23,6 +23,7 @@ import java.util.List; import com.google.common.base.Predicate; import com.google.common.base.Predicates; +import com.google.common.collect.Iterables; import forge.card.cardfactory.CardFactoryUtil; import forge.card.spellability.SpellAbility; @@ -52,14 +53,12 @@ public class CardListUtil { * @return a {@link forge.CardList} object. */ public static CardList filterToughness(final CardList in, final int atLeastToughness) { - return in.filter( - new Predicate() { - @Override - public boolean apply(Card c) { - return c.getNetDefense() <= atLeastToughness; - } + return CardListUtil.filter(in, new Predicate() { + @Override + public boolean apply(Card c) { + return c.getNetDefense() <= atLeastToughness; } - ); + }); } public static final Comparator DefenseComparator = new Comparator() { @@ -208,7 +207,7 @@ public class CardListUtil { * @return a {@link forge.CardList} object. */ public static CardList getColor(final CardList list, final String color) { - return list.filter(new Predicate() { + return CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return CardUtil.getColors(c).contains(color); @@ -226,7 +225,7 @@ public class CardListUtil { * @return a {@link forge.CardList} object. */ public static CardList getGoldCards(final CardList list) { - return list.filter(new Predicate() { + return CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return CardUtil.getColors(c).size() >= 2; @@ -299,38 +298,51 @@ public class CardListUtil { Collections.shuffle(list, MyRandom.getRandom()); } - public static CardList filterControlledBy(CardList cardList, Player player) { - return cardList.filter(CardPredicates.isController(player)); + public static CardList filterControlledBy(List cardList, Player player) { + return CardListUtil.filter(cardList, CardPredicates.isController(player)); } - public static CardList getValidCards(CardList cardList, String[] restrictions, Player sourceController, Card source) { - return cardList.filter(CardPredicates.restriction(restrictions, sourceController, source)); + public static CardList getValidCards(List cardList, String[] restrictions, Player sourceController, Card source) { + return CardListUtil.filter(cardList, CardPredicates.restriction(restrictions, sourceController, source)); } - public static CardList getValidCards(CardList cardList, String restriction, Player sourceController, Card source) { - return cardList.filter(CardPredicates.restriction(restriction.split(","), sourceController, source)); + public static CardList getValidCards(List cardList, String restriction, Player sourceController, Card source) { + return CardListUtil.filter(cardList, CardPredicates.restriction(restriction.split(","), sourceController, source)); } - public static CardList getTargetableCards(CardList cardList, SpellAbility source) { - return cardList.filter(CardPredicates.isTargetableBy(source)); + public static CardList getTargetableCards(List cardList, SpellAbility source) { + return CardListUtil.filter(cardList, CardPredicates.isTargetableBy(source)); } - public static CardList getKeyword(CardList cardList, String keyword) { - return cardList.filter(CardPredicates.hasKeyword(keyword)); + public static CardList getKeyword(List cardList, String keyword) { + return CardListUtil.filter(cardList, CardPredicates.hasKeyword(keyword)); } - public static CardList getNotKeyword(CardList cardList, String keyword) { - return cardList.filter(Predicates.not(CardPredicates.hasKeyword(keyword))); + public static CardList getNotKeyword(List cardList, String keyword) { + return CardListUtil.filter(cardList, Predicates.not(CardPredicates.hasKeyword(keyword))); } // cardType is like "Land" or "Goblin", returns a new CardList that is a // subset of current CardList - public static CardList getNotType(CardList cardList, String cardType) { - return cardList.filter(Predicates.not(CardPredicates.isType(cardType))); + public static CardList getNotType(List cardList, String cardType) { + return CardListUtil.filter(cardList, Predicates.not(CardPredicates.isType(cardType))); } - public static CardList getType(CardList cardList, String cardType) { - return cardList.filter(CardPredicates.isType(cardType)); + public static CardList getType(List cardList, String cardType) { + return CardListUtil.filter(cardList, CardPredicates.isType(cardType)); + } + + /** + * Create a new list of cards by applying a filter to this one. + * + * @param filt + * determines which cards are present in the resulting list + * + * @return a subset of this CardList whose items meet the filtering + * criteria; may be empty, but never null. + */ + public static CardList filter(List cardList, Predicate filt) { + return new CardList(Iterables.filter(cardList, filt)); } } diff --git a/src/main/java/forge/GameAction.java b/src/main/java/forge/GameAction.java index 541b352a490..178f69aedc7 100644 --- a/src/main/java/forge/GameAction.java +++ b/src/main/java/forge/GameAction.java @@ -1217,7 +1217,7 @@ public class GameAction { */ private void destroyPlaneswalkers() { // get all Planeswalkers - final CardList list = AllZoneUtil.getCardsIn(ZoneType.Battlefield).filter(CardPredicates.Presets.PLANEWALKERS); + final CardList list = CardListUtil.filter(AllZoneUtil.getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.PLANEWALKERS); Card c; for (int i = 0; i < list.size(); i++) { @@ -1258,7 +1258,7 @@ public class GameAction { while (!a.isEmpty()) { CardList b = AllZoneUtil.getCardsIn(ZoneType.Battlefield, a.get(0).getName()); b = CardListUtil.getType(b, "Legendary"); - b = b.filter(new Predicate() { + b = CardListUtil.filter(b, new Predicate() { @Override public boolean apply(final Card c) { return !c.isFaceDown(); @@ -1320,7 +1320,7 @@ public class GameAction { if (c.isEnchanted()) { CardList list = new CardList(c.getEnchantedBy()); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card crd) { return crd.hasKeyword("Totem armor"); @@ -1503,7 +1503,7 @@ public class GameAction { if (c.isEnchanted()) { CardList list = new CardList(c.getEnchantedBy()); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card crd) { return crd.hasKeyword("Totem armor"); @@ -1772,8 +1772,8 @@ public class GameAction { manaCost.decreaseColorlessMana(numToExile); } } else if (spell.getSourceCard().hasKeyword("Convoke")) { - CardList untappedCreats = spell.getActivatingPlayer().getCardsIn(ZoneType.Battlefield).filter(CardPredicates.Presets.CREATURES); - untappedCreats = untappedCreats.filter(CardPredicates.Presets.UNTAPPED); + CardList untappedCreats = CardListUtil.filter(spell.getActivatingPlayer().getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.CREATURES); + untappedCreats = CardListUtil.filter(untappedCreats, CardPredicates.Presets.UNTAPPED); if (untappedCreats.size() != 0) { final ArrayList choices = new ArrayList(); diff --git a/src/main/java/forge/GameActionUtil.java b/src/main/java/forge/GameActionUtil.java index 70bf68eab8a..5afdb79a55f 100644 --- a/src/main/java/forge/GameActionUtil.java +++ b/src/main/java/forge/GameActionUtil.java @@ -864,7 +864,7 @@ public final class GameActionUtil { public void resolve() { for (int i = 0; i < damage; i++) { CardList nonTokens = player.getCardsIn(ZoneType.Battlefield); - nonTokens = nonTokens.filter(Presets.NON_TOKEN); + nonTokens = CardListUtil.filter(nonTokens, Presets.NON_TOKEN); if (nonTokens.size() == 0) { player.loseConditionMet(GameLossReason.SpellEffect, lich.getName()); } else { @@ -1159,7 +1159,7 @@ public final class GameActionUtil { produces.put("Swamp", "B"); CardList lands = AllZoneUtil.getCardsInGame(); - lands = lands.filter(Presets.LANDS); + lands = CardListUtil.filter(lands, Presets.LANDS); // remove all abilities granted by this Command for (final Card land : lands) { @@ -1230,7 +1230,7 @@ public final class GameActionUtil { // add +1/+1 to cards list.clear(); final int num = AllZoneUtil.getCardsIn(ZoneType.Battlefield, "Coat of Arms").size(); - final List creatures = AllZoneUtil.getCardsIn(ZoneType.Battlefield).filter(CardPredicates.Presets.CREATURES); + final List creatures = CardListUtil.filter(AllZoneUtil.getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.CREATURES); for (Card c : creatures) { for (Card c2 : creatures) { @@ -1310,7 +1310,7 @@ public final class GameActionUtil { public void execute() { CardList list = AllZoneUtil.getCardsIn(ZoneType.Battlefield); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return c.getName().equals("Avatar") && c.getImageName().equals("W N N Avatar"); @@ -1372,7 +1372,7 @@ public final class GameActionUtil { private boolean getsBonus(final Card c) { CardList list = c.getController().getCardsIn(ZoneType.Battlefield); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return c.getName().equals("Guan Yu, Sainted Warrior") @@ -1392,7 +1392,7 @@ public final class GameActionUtil { @Override public void execute() { CardList list = AllZoneUtil.getCardsIn(ZoneType.Battlefield); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return c.getName().equals("Wolf") @@ -1522,7 +1522,7 @@ public final class GameActionUtil { public static void doPowerSink(final Player p) { // get all lands with mana abilities CardList lands = AllZoneUtil.getPlayerLandsInPlay(p); - lands = lands.filter(new Predicate() { + lands = CardListUtil.filter(lands, new Predicate() { @Override public boolean apply(final Card c) { return c.getManaAbility().size() > 0; diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryAttach.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryAttach.java index 2bd1fc1f575..06297179f13 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryAttach.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryAttach.java @@ -360,7 +360,7 @@ public class AbilityFactoryAttach { if (tgt.getZone().contains(ZoneType.Battlefield) && !mandatory) { list = CardListUtil.getTargetableCards(list, sa); } else { - list = list.filter(Predicates.not(CardPredicates.isProtectedFrom(attachSource))); + list = CardListUtil.filter(list, Predicates.not(CardPredicates.isProtectedFrom(attachSource))); } if (list.size() == 0) { @@ -504,7 +504,7 @@ public class AbilityFactoryAttach { // AI For choosing a Card to Animate. CardList betterList = CardListUtil.getNotType(list, "Creature"); if (sa.getSourceCard().getName().equals("Animate Artifact")) { - betterList = betterList.filter(new Predicate() { + betterList = CardListUtil.filter(betterList, new Predicate() { @Override public boolean apply(final Card c) { return c.getCMC() > 0; @@ -696,7 +696,7 @@ public class AbilityFactoryAttach { String stCheck = null; if (attachSource.isAura()) { stCheck = "EnchantedBy"; - magnetList = list.filter(new Predicate() { + magnetList = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { if ( !c.isCreature() ) return false; @@ -706,7 +706,7 @@ public class AbilityFactoryAttach { }); } else if (attachSource.isEquipment()) { stCheck = "EquippedBy"; - magnetList = list.filter(new Predicate() { + magnetList = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { if ( !c.isCreature() ) return false; @@ -721,7 +721,7 @@ public class AbilityFactoryAttach { // Probably want to "weight" the list by amount of Enchantments and // choose the "lightest" - magnetList = magnetList.filter(new Predicate() { + magnetList = CardListUtil.filter(magnetList, new Predicate() { @Override public boolean apply(final Card c) { return CombatUtil.canAttack(c); @@ -773,7 +773,7 @@ public class AbilityFactoryAttach { if (totToughness < 0) { // Don't kill my own stuff with Negative toughness Auras final int tgh = totToughness; - prefList = prefList.filter(new Predicate() { + prefList = CardListUtil.filter(prefList, new Predicate() { @Override public boolean apply(final Card c) { return c.getLethalDamage() > Math.abs(tgh); @@ -783,7 +783,7 @@ public class AbilityFactoryAttach { //only add useful keywords unless P/T bonus is significant if (totToughness + totPower < 4 && !keywords.isEmpty()) { - prefList = prefList.filter(new Predicate() { + prefList = CardListUtil.filter(prefList, new Predicate() { @Override public boolean apply(final Card c) { return containsUsefulKeyword(keywords, c, sa); @@ -792,7 +792,7 @@ public class AbilityFactoryAttach { } // Don't pump cards that will die. - prefList = prefList.filter(new Predicate() { + prefList = CardListUtil.filter(prefList, new Predicate() { @Override public boolean apply(final Card c) { return !c.getSVar("Targeting").equals("Dies"); @@ -802,13 +802,13 @@ public class AbilityFactoryAttach { if (attachSource.isAura()) { // TODO For Auras like Rancor, that aren't as likely to lead to // card disadvantage, this check should be skipped - prefList = prefList.filter(Predicates.not(Presets.ENCHANTED)); + prefList = CardListUtil.filter(prefList, Predicates.not(Presets.ENCHANTED)); } if (!grantingAbilities) { // Probably prefer to Enchant Creatures that Can Attack // Filter out creatures that can't Attack or have Defender - prefList = prefList.filter(new Predicate() { + prefList = CardListUtil.filter(prefList, new Predicate() { @Override public boolean apply(final Card c) { return !c.isCreature() || CombatUtil.canAttackNextTurn(c); @@ -891,7 +891,7 @@ public class AbilityFactoryAttach { if (totToughness < 0) { // Kill a creature if we can final int tgh = totToughness; - prefList = list.filter(new Predicate() { + prefList = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { if (!c.hasKeyword("Indestructible") && (c.getLethalDamage() <= Math.abs(tgh))) { @@ -917,7 +917,7 @@ public class AbilityFactoryAttach { // things to begin with if (keywords.contains("CARDNAME can't attack.") || keywords.contains("Defender") || keywords.contains("CARDNAME attacks each turn if able.")) { - prefList = prefList.filter(new Predicate() { + prefList = CardListUtil.filter(prefList, new Predicate() { @Override public boolean apply(final Card c) { return !(c.hasKeyword("CARDNAME can't attack.") || c.hasKeyword("Defender")); @@ -995,7 +995,7 @@ public class AbilityFactoryAttach { public static Card attachAIKeepTappedPreference(final SpellAbility sa, final CardList list, final boolean mandatory, final Card attachSource) { // AI For Cards like Paralyzing Grasp and Glimmerdust Nap - final CardList prefList = list.filter(new Predicate() { + final CardList prefList = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { // Don't do Untapped Vigilance cards diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryChangeZone.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryChangeZone.java index c39b17cfef7..c0b8cd217fd 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryChangeZone.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryChangeZone.java @@ -1174,7 +1174,7 @@ public final class AbilityFactoryChangeZone { // Save a card as a default, in case we can't find anything suitable. Card first = fetchList.get(0); if (ZoneType.Battlefield.equals(destination)) { - fetchList = fetchList.filter(new Predicate() { + fetchList = CardListUtil.filter(fetchList, new Predicate() { @Override public boolean apply(final Card c) { if (c.isType("Legendary")) { @@ -1186,7 +1186,7 @@ public final class AbilityFactoryChangeZone { } }); if (player.isHuman() && params.containsKey("GainControl")) { - fetchList = fetchList.filter(new Predicate() { + fetchList = CardListUtil.filter(fetchList, new Predicate() { @Override public boolean apply(final Card c) { if (!c.getSVar("RemAIDeck").equals("") || !c.getSVar("RemRandomDeck").equals("")) { @@ -1213,15 +1213,15 @@ public final class AbilityFactoryChangeZone { c = CardFactoryUtil.getBestAI(fetchList); } else { // Don't fetch another tutor with the same name - CardList sameNamed = fetchList.filter(Predicates.not(CardPredicates.nameEquals(card.getName()))); + CardList sameNamed = CardListUtil.filter(fetchList, Predicates.not(CardPredicates.nameEquals(card.getName()))); if (origin.contains(ZoneType.Library) && !sameNamed.isEmpty()) { fetchList = sameNamed; } Player ai = AllZone.getComputerPlayer(); // Does AI need a land? CardList hand = ai.getCardsIn(ZoneType.Hand); - System.out.println("Lands in hand = " + hand.filter(Presets.LANDS).size() + ", on battlefield = " + ai.getCardsIn(ZoneType.Battlefield).filter(Presets.LANDS).size()); - if (hand.filter(Presets.LANDS).size() == 0 && ai.getCardsIn(ZoneType.Battlefield).filter(Presets.LANDS).size() < 4) { + System.out.println("Lands in hand = " + CardListUtil.filter(hand, Presets.LANDS).size() + ", on battlefield = " + CardListUtil.filter(ai.getCardsIn(ZoneType.Battlefield), Presets.LANDS).size()); + if (CardListUtil.filter(hand, Presets.LANDS).size() == 0 && CardListUtil.filter(ai.getCardsIn(ZoneType.Battlefield), Presets.LANDS).size() < 4) { boolean canCastSomething = false; for (Card cardInHand : hand) { canCastSomething |= ComputerUtil.payManaCost(cardInHand.getFirstSpellAbility(), AllZone.getComputerPlayer(), true, 0, false); @@ -1235,7 +1235,7 @@ public final class AbilityFactoryChangeZone { System.out.println("Don't need a land or none available; trying for a creature."); fetchList = CardListUtil.getNotType(fetchList, "Land"); // Prefer to pull a creature, generally more useful for AI. - c = chooseCreature(fetchList.filter(CardPredicates.Presets.CREATURES)); + c = chooseCreature(CardListUtil.filter(fetchList, CardPredicates.Presets.CREATURES)); } if (c == null) { // Could not find a creature. if (ai.getLife() <= 5) { // Desperate? @@ -1637,7 +1637,7 @@ public final class AbilityFactoryChangeZone { CardList list = AllZoneUtil.getCardsIn(origin); list = CardListUtil.getValidCards(list, tgt.getValidTgts(), AllZone.getComputerPlayer(), source); if (source.isInZone(ZoneType.Hand)) { - list = list.filter(Predicates.not(CardPredicates.nameEquals(source.getName()))); // Don't get the same card back. + list = CardListUtil.filter(list, Predicates.not(CardPredicates.nameEquals(source.getName()))); // Don't get the same card back. } if (list.size() < tgt.getMinTargets(sa.getSourceCard(), sa)) { @@ -1651,7 +1651,7 @@ public final class AbilityFactoryChangeZone { CardList aiPermanents = CardListUtil.filterControlledBy(list, AllZone.getComputerPlayer()); // Don't blink cards that will die. - aiPermanents = aiPermanents.filter(new Predicate() { + aiPermanents = CardListUtil.filter(aiPermanents, new Predicate() { @Override public boolean apply(final Card c) { return !c.getSVar("Targeting").equals("Dies"); @@ -1684,7 +1684,7 @@ public final class AbilityFactoryChangeZone { } // Save combatants else if (Singletons.getModel().getGameState().getPhaseHandler().is(PhaseType.COMBAT_DECLARE_BLOCKERS_INSTANT_ABILITY)) { - final CardList combatants = aiPermanents.filter(CardPredicates.Presets.CREATURES); + final CardList combatants = CardListUtil.filter(aiPermanents, CardPredicates.Presets.CREATURES); CardListUtil.sortByEvaluateCreature(combatants); for (final Card c : combatants) { @@ -1696,7 +1696,7 @@ public final class AbilityFactoryChangeZone { } // Blink permanents with ETB triggers else if (sa.isAbility() && (sa.getPayCosts() != null) && AbilityFactory.playReusable(sa)) { - aiPermanents = aiPermanents.filter(new Predicate() { + aiPermanents = CardListUtil.filter(aiPermanents, new Predicate() { @Override public boolean apply(final Card c) { if (c.getNumberOfCounters() > 0) { @@ -1745,7 +1745,7 @@ public final class AbilityFactoryChangeZone { return false; } list = CardListUtil.filterControlledBy(list, AllZone.getHumanPlayer()); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { for (Card aura : c.getEnchantedBy()) { @@ -1793,7 +1793,7 @@ public final class AbilityFactoryChangeZone { } else if (destination.equals(ZoneType.Hand) || destination.equals(ZoneType.Library)) { CardList nonLands = CardListUtil.getNotType(list, "Land"); // Prefer to pull a creature, generally more useful for AI. - choice = chooseCreature(nonLands.filter(CardPredicates.Presets.CREATURES)); + choice = chooseCreature(CardListUtil.filter(nonLands, CardPredicates.Presets.CREATURES)); if (choice == null) { // Could not find a creature. if (AllZone.getComputerPlayer().getLife() <= 5) { // Desperate? // Get something AI can cast soon. @@ -1906,7 +1906,7 @@ public final class AbilityFactoryChangeZone { } else if (destination.equals(ZoneType.Hand) || destination.equals(ZoneType.Library)) { CardList nonLands = CardListUtil.getNotType(list, "Land"); // Prefer to pull a creature, generally more useful for AI. - choice = chooseCreature(nonLands.filter(CardPredicates.Presets.CREATURES)); + choice = chooseCreature(CardListUtil.filter(nonLands, CardPredicates.Presets.CREATURES)); if (choice == null) { // Could not find a creature. if (AllZone.getComputerPlayer().getLife() <= 5) { // Desperate? // Get something AI can cast soon. diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryChoose.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryChoose.java index c6bf5bb46e3..d0ff1360590 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryChoose.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryChoose.java @@ -735,8 +735,7 @@ public final class AbilityFactoryChoose { else if (logic.equals("MostProminentHumanCreatures")) { CardList list = AllZoneUtil.getCreaturesInPlay(AllZone.getHumanPlayer()); if (list.isEmpty()) { - list = CardListUtil.filterControlledBy(AllZoneUtil.getCardsInGame(), AllZone.getHumanPlayer()) - .filter(CardPredicates.Presets.CREATURES); + list = CardListUtil.filter(CardListUtil.filterControlledBy(AllZoneUtil.getCardsInGame(), AllZone.getHumanPlayer()), CardPredicates.Presets.CREATURES); } chosen = CardFactoryUtil.getMostProminentColor(list); } @@ -1642,7 +1641,7 @@ public final class AbilityFactoryChoose { } } else { CardList list = CardListUtil.filterControlledBy(AllZoneUtil.getCardsInGame(), AllZone.getHumanPlayer()); - list = list.filter(Predicates.not(Presets.LANDS)); + list = CardListUtil.filter(list, Predicates.not(Presets.LANDS)); if (!list.isEmpty()) { chosen = list.get(0).getName(); } @@ -1975,8 +1974,8 @@ public final class AbilityFactoryChoose { } } else { // Computer if (params.containsKey("AILogic") && params.get("AILogic").equals("BestBlocker")) { - if (choices.filter(Presets.UNTAPPED).isEmpty()) { - choices = choices.filter(Presets.UNTAPPED); + if (CardListUtil.filter(choices, Presets.UNTAPPED).isEmpty()) { + choices = CardListUtil.filter(choices, Presets.UNTAPPED); } chosen.add(CardFactoryUtil.getBestCreatureAI(choices)); } else { diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryCombat.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryCombat.java index 01205be4ffd..1a43e421668 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryCombat.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryCombat.java @@ -1061,10 +1061,10 @@ public final class AbilityFactoryCombat { boolean chance = false; if (abTgt != null) { - CardList list = AllZone.getHumanPlayer().getCardsIn(ZoneType.Battlefield).filter(CardPredicates.Presets.CREATURES); + CardList list = CardListUtil.filter(AllZone.getHumanPlayer().getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.CREATURES); list = CardListUtil.getTargetableCards(list, sa); list = CardListUtil.getValidCards(list, abTgt.getValidTgts(), source.getController(), source); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { boolean tapped = c.isTapped(); diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryCopy.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryCopy.java index 5ea67d16fd0..912a6ddc178 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryCopy.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryCopy.java @@ -324,7 +324,7 @@ public final class AbilityFactoryCopy { } Card choice; - if (list.filter(Presets.CREATURES).size() > 0) { + if (CardListUtil.filter(list, Presets.CREATURES).size() > 0) { choice = CardFactoryUtil.getBestCreatureAI(list); } else { choice = CardFactoryUtil.getMostExpensivePermanentAI(list, sa, true); diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java index 487121c2998..e9f15d466a9 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java @@ -313,7 +313,7 @@ public class AbilityFactoryCounters { final Player player = af.isCurse() ? AllZone.getHumanPlayer() : AllZone.getComputerPlayer(); list = player.getCardsIn(ZoneType.Battlefield); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return c.canBeTargetedBy(sa) && !c.hasKeyword("CARDNAME can't have counters placed on it.") @@ -477,7 +477,7 @@ public class AbilityFactoryCounters { abTgt.resetTargets(); // target loop while (abTgt.getNumTargeted() < abTgt.getMaxTargets(sa.getSourceCard(), sa)) { - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return sa.canTarget(c); @@ -659,7 +659,7 @@ public class AbilityFactoryCounters { Card choice; if (type.equals("M1M1")) { // try to kill the best killable creature, or reduce the best one - final CardList killable = list.filter(new Predicate() { + final CardList killable = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return c.getNetDefense() <= amount; @@ -693,7 +693,7 @@ public class AbilityFactoryCounters { if (type.equals("P1P1")) { choice = CardFactoryUtil.getBestCreatureAI(list); } else if (type.equals("DIVINITY")) { - final CardList boon = list.filter(new Predicate() { + final CardList boon = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return c.getCounters(Counters.DIVINITY) == 0; @@ -1448,7 +1448,7 @@ public class AbilityFactoryCounters { } CardList hperms = AllZone.getHumanPlayer().getCardsIn(ZoneType.Battlefield); CardList cperms = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield); - cperms = cperms.filter(new Predicate() { + cperms = CardListUtil.filter(cperms, new Predicate() { @Override public boolean apply(final Card crd) { for (final Counters c1 : Counters.values()) { @@ -1460,7 +1460,7 @@ public class AbilityFactoryCounters { } }); - hperms = hperms.filter(new Predicate() { + hperms = CardListUtil.filter(hperms, new Predicate() { @Override public boolean apply(final Card crd) { for (final Counters c1 : Counters.values()) { @@ -1576,7 +1576,7 @@ public class AbilityFactoryCounters { } }); } else { // Compy - cperms = cperms.filter(new Predicate() { + cperms = CardListUtil.filter(cperms, new Predicate() { @Override public boolean apply(final Card crd) { for (final Counters c1 : Counters.values()) { @@ -1590,7 +1590,7 @@ public class AbilityFactoryCounters { } }); - hperms = hperms.filter(new Predicate() { + hperms = CardListUtil.filter(hperms, new Predicate() { @Override public boolean apply(final Card crd) { for (final Counters c1 : Counters.values()) { @@ -1919,7 +1919,7 @@ public class AbilityFactoryCounters { if (curse) { if (type.equals("M1M1")) { - final CardList killable = hList.filter(new Predicate() { + final CardList killable = CardListUtil.filter(hList, new Predicate() { @Override public boolean apply(final Card c) { return c.getNetDefense() <= amount; diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java index e6cbcdec077..d45bb32eac6 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java @@ -543,7 +543,7 @@ public class AbilityFactoryDealDamage { } hPlay = CardListUtil.getTargetableCards(hPlay, saMe); - final CardList killables = hPlay.filter(new Predicate() { + final CardList killables = CardListUtil.filter(hPlay, new Predicate() { @Override public boolean apply(final Card c) { return (c.getEnoughDamageToKill(d, source, false, noPrevention) <= d) && !ComputerUtil.canRegenerate(c) @@ -1256,7 +1256,7 @@ public class AbilityFactoryDealDamage { }; list = CardListUtil.getNotKeyword(list, "Indestructible"); - list = list.filter(filterKillable); + list = CardListUtil.filter(list, filterKillable); return list; } @@ -1880,7 +1880,7 @@ public class AbilityFactoryDealDamage { CardList aiCreatures = AllZoneUtil.getCreaturesInPlay(AllZone.getComputerPlayer()); aiCreatures = CardListUtil.getTargetableCards(aiCreatures, sa); - aiCreatures = aiCreatures.filter(new Predicate() { + aiCreatures = CardListUtil.filter(aiCreatures, new Predicate() { @Override public boolean apply(final Card c) { return !c.getSVar("Targeting").equals("Dies"); diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryDebuff.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryDebuff.java index 49e776c8b3d..80990bf406d 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryDebuff.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryDebuff.java @@ -451,7 +451,7 @@ public final class AbilityFactoryDebuff { list = CardListUtil.getTargetableCards(list, sa); if (!list.isEmpty()) { - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return c.hasAnyKeyword(kws); // don't add duplicate negative @@ -800,7 +800,7 @@ public final class AbilityFactoryDebuff { // TODO - add blocking situations here also // only count creatures that can attack - human = human.filter(new Predicate() { + human = CardListUtil.filter(human, new Predicate() { @Override public boolean apply(final Card c) { return CombatUtil.canAttack(c); diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryDestroy.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryDestroy.java index f8f736950b4..c9e64edf5b9 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryDestroy.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryDestroy.java @@ -255,7 +255,7 @@ public class AbilityFactoryDestroy { } list = CardListUtil.getNotKeyword(list, "Indestructible"); if (!AbilityFactory.playReusable(sa)) { - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return (!c.hasKeyword("Undying") || c.getCounters(Counters.P1P1) > 0); @@ -267,7 +267,7 @@ public class AbilityFactoryDestroy { // regeneration shield if (!noRegen) { // TODO filter out things that might be tougher? - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return ((c.getShield() == 0) && !ComputerUtil.canRegenerate(c)); @@ -395,7 +395,7 @@ public class AbilityFactoryDestroy { if (!noRegen) { // TODO filter out things that could regenerate in response? // might be tougher? - preferred = preferred.filter(new Predicate() { + preferred = CardListUtil.filter(preferred, new Predicate() { @Override public boolean apply(final Card c) { return c.getShield() == 0; @@ -863,13 +863,13 @@ public class AbilityFactoryDestroy { } humanlist = CardListUtil.getValidCards(humanlist, valid.split(","), source.getController(), source); computerlist = CardListUtil.getValidCards(computerlist, valid.split(","), source.getController(), source); - humanlist = humanlist.filter(new Predicate() { + humanlist = CardListUtil.filter(humanlist, new Predicate() { @Override public boolean apply(final Card c) { return !(c.hasKeyword("Indestructible") || c.getSVar("SacMe").length() > 0); } }); - computerlist = computerlist.filter(new Predicate() { + computerlist = CardListUtil.filter(computerlist, new Predicate() { @Override public boolean apply(final Card c) { return !(c.hasKeyword("Indestructible") || c.getSVar("SacMe").length() > 0); @@ -946,13 +946,13 @@ public class AbilityFactoryDestroy { humanlist = CardListUtil.getValidCards(humanlist, valid.split(","), source.getController(), source); computerlist = CardListUtil.getValidCards(computerlist, valid.split(","), source.getController(), source); - humanlist = humanlist.filter(new Predicate() { + humanlist = CardListUtil.filter(humanlist, new Predicate() { @Override public boolean apply(final Card c) { return !(c.hasKeyword("Indestructible") || c.getSVar("SacMe").length() > 0); } }); - computerlist = computerlist.filter(new Predicate() { + computerlist = CardListUtil.filter(computerlist, new Predicate() { @Override public boolean apply(final Card c) { return !(c.hasKeyword("Indestructible") || c.getSVar("SacMe").length() > 0); diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryEffect.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryEffect.java index 6a0536de821..6bf9f971a4c 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryEffect.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryEffect.java @@ -299,17 +299,17 @@ public class AbilityFactoryEffect { } else if (logic.equals("Always")) { randomReturn = true; } else if (logic.equals("Evasion")) { - CardList comp = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield).filter(CardPredicates.Presets.CREATURES); - CardList human = AllZone.getHumanPlayer().getCardsIn(ZoneType.Battlefield).filter(CardPredicates.Presets.CREATURES); + CardList comp = CardListUtil.filter(AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.CREATURES); + CardList human = CardListUtil.filter(AllZone.getHumanPlayer().getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.CREATURES); // only count creatures that can attack or block - comp = comp.filter(new Predicate() { + comp = CardListUtil.filter(comp, new Predicate() { @Override public boolean apply(final Card c) { return CombatUtil.canAttack(c); } }); - human = human.filter(new Predicate() { + human = CardListUtil.filter(human, new Predicate() { @Override public boolean apply(final Card c) { return CombatUtil.canBlock(c); diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryGainControl.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryGainControl.java index 78522558485..a24d5a04dd1 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryGainControl.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryGainControl.java @@ -338,7 +338,7 @@ public class AbilityFactoryGainControl { list = CardListUtil.getValidCards(list, tgt.getValidTgts(), sa.getSourceCard().getController(), sa.getSourceCard()); // AI won't try to grab cards that are filtered out of AI decks on // purpose - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { final Map vars = c.getSVars(); @@ -858,7 +858,7 @@ public class AbilityFactoryGainControl { list = CardListUtil.getValidCards(list, tgt.getValidTgts(), AllZone.getComputerPlayer(), sa.getSourceCard()); // AI won't try to grab cards that are filtered out of AI decks on // purpose - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { final Map vars = c.getSVars(); diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryPermanentState.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryPermanentState.java index fcf076e0370..67d0f04d1fe 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryPermanentState.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryPermanentState.java @@ -408,7 +408,7 @@ public class AbilityFactoryPermanentState { untapList = CardListUtil.getTargetableCards(untapList, sa); untapList = CardListUtil.getValidCards(untapList, tgt.getValidTgts(), source.getController(), source); - untapList = untapList.filter(Presets.TAPPED); + untapList = CardListUtil.filter(untapList, Presets.TAPPED); // filter out enchantments and planeswalkers, their tapped state doesn't // matter. final String[] tappablePermanents = { "Creature", "Land", "Artifact" }; @@ -491,7 +491,7 @@ public class AbilityFactoryPermanentState { } // try to just tap already tapped things - tapList = list.filter(Presets.UNTAPPED); + tapList = CardListUtil.filter(list, Presets.UNTAPPED); if (AbilityFactoryPermanentState.untapTargetList(source, tgt, af, sa, mandatory, tapList)) { return true; @@ -639,7 +639,7 @@ public class AbilityFactoryPermanentState { } else { CardList list = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield); list = CardListUtil.getType(list, valid); - list = list.filter(Presets.TAPPED); + list = CardListUtil.filter(list, Presets.TAPPED); int count = 0; while ((list.size() != 0) && (count < num)) { @@ -1001,7 +1001,7 @@ public class AbilityFactoryPermanentState { private static boolean tapPrefTargeting(final Card source, final Target tgt, final AbilityFactory af, final SpellAbility sa, final boolean mandatory) { CardList tapList = AllZone.getHumanPlayer().getCardsIn(ZoneType.Battlefield); - tapList = tapList.filter(Presets.UNTAPPED); + tapList = CardListUtil.filter(tapList, Presets.UNTAPPED); tapList = CardListUtil.getValidCards(tapList, tgt.getValidTgts(), source.getController(), source); // filter out enchantments and planeswalkers, their tapped state doesn't matter. final String[] tappablePermanents = { "Creature", "Land", "Artifact" }; @@ -1037,7 +1037,7 @@ public class AbilityFactoryPermanentState { if (phase.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS)) { //Combat has already started final CardList attackers = AllZone.getCombat().getAttackerList(); - CardList creatureList = tapList.filter(new Predicate() { + CardList creatureList = CardListUtil.filter(tapList, new Predicate() { @Override public boolean apply(final Card c) { if (c.isCreature()) { @@ -1052,7 +1052,7 @@ public class AbilityFactoryPermanentState { } else { final CardList attackers = ComputerUtil.getPossibleAttackers(); attackers.remove(sa.getSourceCard()); - CardList creatureList = tapList.filter(new Predicate() { + CardList creatureList = CardListUtil.filter(tapList, new Predicate() { @Override public boolean apply(final Card c) { if (c.isCreature()) { @@ -1069,7 +1069,7 @@ public class AbilityFactoryPermanentState { && phase.getPhase().isBefore(PhaseType.COMBAT_DECLARE_ATTACKERS)) { // Tap creatures possible blockers before combat during AI's turn. if (Iterables.any(tapList, CardPredicates.Presets.CREATURES)) { - CardList creatureList = tapList.filter(CardPredicates.Presets.CREATURES_CAN_ATTACK); + CardList creatureList = CardListUtil.filter(tapList, CardPredicates.Presets.CREATURES_CAN_ATTACK); choice = CardFactoryUtil.getBestCreatureAI(creatureList); } else { // no creatures available choice = CardFactoryUtil.getMostExpensivePermanentAI(tapList, sa, false); @@ -1130,7 +1130,7 @@ public class AbilityFactoryPermanentState { } // try to just tap already tapped things - tapList = list.filter(Presets.TAPPED); + tapList = CardListUtil.filter(list, Presets.TAPPED); if (AbilityFactoryPermanentState.tapTargetList(af, sa, tapList, mandatory)) { return true; @@ -1749,7 +1749,7 @@ public class AbilityFactoryPermanentState { } validTappables = CardListUtil.getValidCards(validTappables, valid, source.getController(), source); - validTappables = validTappables.filter(Presets.UNTAPPED); + validTappables = CardListUtil.filter(validTappables, Presets.UNTAPPED); final Random r = MyRandom.getRandom(); boolean rr = false; @@ -1758,13 +1758,13 @@ public class AbilityFactoryPermanentState { } if (validTappables.size() > 0) { - final CardList human = validTappables.filter(new Predicate() { + final CardList human = CardListUtil.filter(validTappables, new Predicate() { @Override public boolean apply(final Card c) { return c.getController().isHuman(); } }); - final CardList compy = validTappables.filter(new Predicate() { + final CardList compy = CardListUtil.filter(validTappables, new Predicate() { @Override public boolean apply(final Card c) { return c.getController().isComputer(); @@ -1791,7 +1791,7 @@ public class AbilityFactoryPermanentState { private static CardList getTapAllTargets(final String valid, final Card source) { CardList tmpList = AllZoneUtil.getCardsIn(ZoneType.Battlefield); tmpList = CardListUtil.getValidCards(tmpList, valid, source.getController(), source); - tmpList = tmpList.filter(Presets.UNTAPPED); + tmpList = CardListUtil.filter(tmpList, Presets.UNTAPPED); return tmpList; } @@ -1873,13 +1873,13 @@ public class AbilityFactoryPermanentState { } if (validTappables.size() > 0) { - final CardList human = validTappables.filter(new Predicate() { + final CardList human = CardListUtil.filter(validTappables, new Predicate() { @Override public boolean apply(final Card c) { return c.getController().isHuman(); } }); - final CardList compy = validTappables.filter(new Predicate() { + final CardList compy = CardListUtil.filter(validTappables, new Predicate() { @Override public boolean apply(final Card c) { return c.getController().isComputer(); diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryPlay.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryPlay.java index 825e71d0d40..4b0a22764c3 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryPlay.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryPlay.java @@ -396,7 +396,7 @@ public final class AbilityFactoryPlay { tgtCard = GuiChoose.one("Select a card to play", tgtCards); } else { // AI - tgtCards = tgtCards.filter(new Predicate() { + tgtCards = CardListUtil.filter(tgtCards, new Predicate() { @Override public boolean apply(final Card c) { ArrayList spellAbilities = c.getBasicSpells(); diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryPreventDamage.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryPreventDamage.java index 8354c790c9e..ac19c3b28c8 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryPreventDamage.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryPreventDamage.java @@ -380,7 +380,7 @@ public class AbilityFactoryPreventDamage { if (targetables.size() == 0) { return false; } - final CardList combatants = targetables.filter(CardPredicates.Presets.CREATURES); + final CardList combatants = CardListUtil.filter(targetables, CardPredicates.Presets.CREATURES); CardListUtil.sortByEvaluateCreature(combatants); for (final Card c : combatants) { @@ -470,7 +470,7 @@ public class AbilityFactoryPreventDamage { } if (compTargetables.size() > 0) { - final CardList combatants = compTargetables.filter(CardPredicates.Presets.CREATURES); + final CardList combatants = CardListUtil.filter(compTargetables, CardPredicates.Presets.CREATURES); CardListUtil.sortByEvaluateCreature(combatants); if (Singletons.getModel().getGameState().getPhaseHandler().is(PhaseType.COMBAT_DECLARE_BLOCKERS_INSTANT_ABILITY)) { for (final Card c : combatants) { diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryProtection.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryProtection.java index 092486bfd6e..1606ab8bdd9 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryProtection.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryProtection.java @@ -249,7 +249,7 @@ public final class AbilityFactoryProtection { final ArrayList gains = AbilityFactoryProtection.getProtectionList(hostCard, af.getMapParams()); CardList list = AllZoneUtil.getCreaturesInPlay(AllZone.getComputerPlayer()); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { if (!c.canBeTargetedBy(sa)) { @@ -417,7 +417,7 @@ public final class AbilityFactoryProtection { } // Don't target cards that will die. - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { System.out.println("Not Protecting"); @@ -484,7 +484,7 @@ public final class AbilityFactoryProtection { } CardList pref = CardListUtil.filterControlledBy(list, AllZone.getComputerPlayer()); - pref = pref.filter(new Predicate() { + pref = CardListUtil.filter(pref, new Predicate() { @Override public boolean apply(final Card c) { return !AbilityFactoryProtection.hasProtectionFromAll(c, @@ -492,7 +492,7 @@ public final class AbilityFactoryProtection { } }); final CardList pref2 = CardListUtil.filterControlledBy(list, AllZone.getComputerPlayer()); - pref = pref.filter(new Predicate() { + pref = CardListUtil.filter(pref, new Predicate() { @Override public boolean apply(final Card c) { return !AbilityFactoryProtection.hasProtectionFromAny(c, diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java index 2d3f3df704c..74dcf14a1c6 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java @@ -334,7 +334,7 @@ public class AbilityFactoryPump { return false; } - CardList attackers = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield).filter(CardPredicates.possibleAttackers); + CardList attackers = CardListUtil.filter(AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield), CardPredicates.possibleAttackers); if(!CombatUtil.canBlockAtLeastOne(card, attackers)) { return false; } @@ -390,7 +390,7 @@ public class AbilityFactoryPump { } Predicate opBlockers = CardPredicates.possibleBlockers(card); - CardList cardsCanBlock = AllZoneUtil.getCreaturesInPlay(human).filter(opBlockers); + CardList cardsCanBlock = CardListUtil.filter(AllZoneUtil.getCreaturesInPlay(human), opBlockers); final boolean evasive = (keyword.endsWith("Unblockable") || keyword.endsWith("Fear") || keyword.endsWith("Intimidate") || keyword.endsWith("Shadow")); @@ -682,7 +682,7 @@ public class AbilityFactoryPump { private CardList getPumpCreatures(final SpellAbility sa) { CardList list = AllZoneUtil.getCreaturesInPlay(AllZone.getComputerPlayer()); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return shouldPumpCard(sa, c); @@ -710,7 +710,7 @@ public class AbilityFactoryPump { if ((defense < 0) && !list.isEmpty()) { // with spells that give -X/-X, // compi will try to destroy a // creature - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { if (c.getNetDefense() <= -defense) { @@ -734,7 +734,7 @@ public class AbilityFactoryPump { } else { // Human active, only curse attacking creatures if (Singletons.getModel().getGameState().getPhaseHandler().getPhase().isBefore(PhaseType.COMBAT_DECLARE_BLOCKERS)) { - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { if (!c.isAttacking()) { @@ -761,7 +761,7 @@ public class AbilityFactoryPump { final boolean addsKeywords = this.keywords.size() > 0; if (addsKeywords) { - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return containsUsefulKeyword(keywords, c, sa); @@ -1009,7 +1009,7 @@ public class AbilityFactoryPump { if (!this.abilityFactory.isCurse()) { // Don't target cards that will die. - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return !c.getSVar("Targeting").equals("Dies"); @@ -1716,7 +1716,7 @@ public class AbilityFactoryPump { if (this.abilityFactory.isCurse()) { if (defense < 0) { // try to destroy creatures - comp = comp.filter(new Predicate() { + comp = CardListUtil.filter(comp, new Predicate() { @Override public boolean apply(final Card c) { if (c.getNetDefense() <= -defense) { @@ -1725,7 +1725,7 @@ public class AbilityFactoryPump { return ((c.getKillDamage() <= -defense) && !c.hasKeyword("Indestructible")); } }); // leaves all creatures that will be destroyed - human = human.filter(new Predicate() { + human = CardListUtil.filter(human, new Predicate() { @Override public boolean apply(final Card c) { if (c.getNetDefense() <= -defense) { @@ -1750,7 +1750,7 @@ public class AbilityFactoryPump { } // only count creatures that can attack - comp = comp.filter(new Predicate() { + comp = CardListUtil.filter(comp, new Predicate() { @Override public boolean apply(final Card c) { if (power <= 0 && !containsUsefulKeyword(keywords, c, sa)) { diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryRegenerate.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryRegenerate.java index 44472e3359d..fb7175ff4f9 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryRegenerate.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryRegenerate.java @@ -341,7 +341,7 @@ public class AbilityFactoryRegenerate { } } else { if (Singletons.getModel().getGameState().getPhaseHandler().is(PhaseType.COMBAT_DECLARE_BLOCKERS_INSTANT_ABILITY)) { - final CardList combatants = targetables.filter(CardPredicates.Presets.CREATURES); + final CardList combatants = CardListUtil.filter(targetables, CardPredicates.Presets.CREATURES); CardListUtil.sortByEvaluateCreature(combatants); for (final Card c : combatants) { @@ -430,7 +430,7 @@ public class AbilityFactoryRegenerate { } if (compTargetables.size() > 0) { - final CardList combatants = compTargetables.filter(CardPredicates.Presets.CREATURES); + final CardList combatants = CardListUtil.filter(compTargetables, CardPredicates.Presets.CREATURES); CardListUtil.sortByEvaluateCreature(combatants); if (Singletons.getModel().getGameState().getPhaseHandler().is(PhaseType.COMBAT_DECLARE_BLOCKERS_INSTANT_ABILITY)) { for (final Card c : combatants) { @@ -740,7 +740,7 @@ public class AbilityFactoryRegenerate { } else { if (Singletons.getModel().getGameState().getPhaseHandler().is(PhaseType.COMBAT_DECLARE_BLOCKERS_INSTANT_ABILITY)) { - final CardList combatants = list.filter(CardPredicates.Presets.CREATURES); + final CardList combatants = CardListUtil.filter(list, CardPredicates.Presets.CREATURES); for (final Card c : combatants) { if ((c.getShield() == 0) && CombatUtil.combatantWouldBeDestroyed(c)) { diff --git a/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java b/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java index ca10843584f..723257cbf75 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java @@ -6,6 +6,7 @@ import forge.AllZone; import forge.AllZoneUtil; import forge.Card; import forge.CardList; +import forge.CardListUtil; import forge.CardPredicates; import forge.CardPredicates.Presets; import forge.Command; @@ -184,7 +185,7 @@ class CardFactoryArtifacts { } } else { CardList list = AllZone.getComputerPlayer().getCardsIn(ZoneType.Hand); - list = list.filter(CardPredicates.Presets.LANDS); + list = CardListUtil.filter(list, CardPredicates.Presets.LANDS); AllZone.getComputerPlayer().discard(list.get(0), this); } // else } // resolve() @@ -217,7 +218,7 @@ class CardFactoryArtifacts { public boolean canPlay() { CardList list = card.getController().getCardsIn(ZoneType.Hand); list.remove(card); - list = list.filter(CardPredicates.Presets.LANDS); + list = CardListUtil.filter(list, CardPredicates.Presets.LANDS); return (list.size() != 0) && super.canPlay(); } // canPlay() }; @@ -343,7 +344,7 @@ class CardFactoryArtifacts { final Player player = this.getTargetPlayer(); CardList lands = player.getCardsIn(ZoneType.Graveyard); - lands = lands.filter(Presets.BASIC_LANDS); + lands = CardListUtil.filter(lands, Presets.BASIC_LANDS); if (card.getController().isHuman()) { // now, select up to four lands int end = -1; @@ -388,7 +389,7 @@ class CardFactoryArtifacts { private CardList getComputerLands() { final CardList list = AllZone.getComputerPlayer().getCardsIn(ZoneType.Graveyard); - return list.filter(CardPredicates.Presets.BASIC_LANDS); + return CardListUtil.filter(list, CardPredicates.Presets.BASIC_LANDS); } } final Cost abCost = new Cost(card, "1 T Sac<1/CARDNAME>", true); diff --git a/src/main/java/forge/card/cardfactory/CardFactoryAuras.java b/src/main/java/forge/card/cardfactory/CardFactoryAuras.java index 36c035a2753..3b1b2d2b2f1 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryAuras.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryAuras.java @@ -278,7 +278,7 @@ class CardFactoryAuras { } }; if (Iterables.any(list, f)) { - list = list.filter(f); + list = CardListUtil.filter(list, f); } CardListUtil.sortAttack(list); @@ -424,7 +424,7 @@ class CardFactoryAuras { // This includes creatures Animate Dead can't enchant once // in play. // The human may try to Animate them, the AI will not. - return AllZoneUtil.getCardsIn(ZoneType.Graveyard).filter(Presets.CREATURES); + return CardListUtil.filter(AllZoneUtil.getCardsIn(ZoneType.Graveyard), Presets.CREATURES); } @Override diff --git a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java index fa1b07d5a00..95d0a67d228 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java @@ -121,7 +121,7 @@ public class CardFactoryCreatures { @Override public void chooseTargetAI() { CardList perms = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield); - perms = CardListUtil.getTargetableCards(perms, this).filter(new Predicate() { + perms = CardListUtil.filter(CardListUtil.getTargetableCards(perms, this), new Predicate() { @Override public boolean apply(final Card c) { return (c.sumAllCounters() > 0); @@ -134,7 +134,7 @@ public class CardFactoryCreatures { @Override public boolean canPlayAI() { CardList perms = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield); - perms = CardListUtil.getTargetableCards(perms, this).filter(new Predicate() { + perms = CardListUtil.filter(CardListUtil.getTargetableCards(perms, this), new Predicate() { @Override public boolean apply(final Card c) { return (c.sumAllCounters() > 0); @@ -215,8 +215,7 @@ public class CardFactoryCreatures { public void execute() { if (card.getController().isHuman()) { - final CardList artifacts = AllZone.getHumanPlayer().getCardsIn(ZoneType.Battlefield) - .filter(CardPredicates.Presets.ARTIFACTS); + final CardList artifacts = CardListUtil.filter(AllZone.getHumanPlayer().getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.ARTIFACTS); if (artifacts.size() != 0) { final Card c = GuiChoose.one("Select an artifact put a phylactery counter on", artifacts); @@ -227,10 +226,10 @@ public class CardFactoryCreatures { } else { // computer CardList art = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield); - art = art.filter(Presets.ARTIFACTS); + art = CardListUtil.filter(art, Presets.ARTIFACTS); CardList list = new CardList(art); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return c.getIntrinsicKeyword().contains("Indestructible"); @@ -323,10 +322,10 @@ public class CardFactoryCreatures { color[0] = Constant.Color.WHITE; int max = 0; - list.filter(CardPredicates.containsKeyword(color[0])).size(); + CardListUtil.filter(list, CardPredicates.containsKeyword(color[0])).size(); for (final String c : Constant.Color.ONLY_COLORS) { - final int cmp = list.filter(CardPredicates.containsKeyword(c)).size(); + final int cmp = CardListUtil.filter(list, CardPredicates.containsKeyword(c)).size(); if (cmp > max) { max = cmp; color[0] = c; @@ -425,7 +424,7 @@ public class CardFactoryCreatures { @Override public void resolve() { CardList allTokens = AllZoneUtil.getCreaturesInPlay(card.getController()); - allTokens = allTokens.filter(Presets.TOKEN); + allTokens = CardListUtil.filter(allTokens, Presets.TOKEN); CardFactoryUtil.copyTokens(allTokens); } @@ -433,7 +432,7 @@ public class CardFactoryCreatures { @Override public boolean canPlayAI() { CardList allTokens = AllZoneUtil.getCreaturesInPlay(AllZone.getComputerPlayer()); - allTokens = allTokens.filter(Presets.TOKEN); + allTokens = CardListUtil.filter(allTokens, Presets.TOKEN); return allTokens.size() >= 2; } @@ -556,7 +555,7 @@ public class CardFactoryCreatures { CardList targetables = AllZone.getHumanPlayer().getCardsIn(ZoneType.Battlefield); - targetables = CardListUtil.getTargetableCards(targetables, this).filter(new Predicate() { + targetables = CardListUtil.filter(CardListUtil.getTargetableCards(targetables, this), new Predicate() { @Override public boolean apply(final Card c) { return c.isCreature() && (c.getNetDefense() <= totalPower); @@ -576,7 +575,7 @@ public class CardFactoryCreatures { @Override public void resolve() { CardList wolves = CardListUtil.getType(card.getController().getCardsIn(ZoneType.Battlefield), "Wolf"); - wolves = wolves.filter(untappedCreature); + wolves = CardListUtil.filter(wolves, untappedCreature); final Card target = this.getTargetCard(); @@ -608,7 +607,7 @@ public class CardFactoryCreatures { })); } } else { // AI Choose spread Damage - final CardList damageableWolves = wolves.filter(new Predicate() { + final CardList damageableWolves = CardListUtil.filter(wolves, new Predicate() { @Override public boolean apply(final Card c) { return (c.predictDamage(target.getNetAttack(), target, false) > 0); @@ -621,7 +620,7 @@ public class CardFactoryCreatures { return; } - CardList wolvesLeft = damageableWolves.filter(new Predicate() { + CardList wolvesLeft = CardListUtil.filter(damageableWolves, new Predicate() { @Override public boolean apply(final Card c) { return !c.hasKeyword("Indestructible"); @@ -629,7 +628,7 @@ public class CardFactoryCreatures { }); for (int i = 0; i < target.getNetAttack(); i++) { - wolvesLeft = wolvesLeft.filter(new Predicate() { + wolvesLeft = CardListUtil.filter(wolvesLeft, new Predicate() { @Override public boolean apply(final Card c) { return (c.getKillDamage() > 0) @@ -648,7 +647,7 @@ public class CardFactoryCreatures { } else { // Add -1/-1s to Random Indestructibles if (target.hasKeyword("Infect") || target.hasKeyword("Wither")) { - final CardList indestructibles = damageableWolves.filter(new Predicate() { + final CardList indestructibles = CardListUtil.filter(damageableWolves, new Predicate() { @Override public boolean apply(final Card c) { return c.hasKeyword("Indestructible"); @@ -751,7 +750,7 @@ public class CardFactoryCreatures { CardList getCreature() { CardList list = CardFactoryUtil.getHumanCreatureAI(this, true); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { final int total = card.getCounters(Counters.P1P1); @@ -806,7 +805,7 @@ public class CardFactoryCreatures { public int countKithkin() { CardList kithkin = card.getController().getCardsIn(ZoneType.Battlefield); - kithkin = kithkin.filter( new Predicate() { + kithkin = CardListUtil.filter(kithkin, new Predicate() { @Override public boolean apply(final Card c) { @@ -917,7 +916,7 @@ public class CardFactoryCreatures { // Dark Depths: CardList list = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield, "Dark Depths"); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card crd) { return crd.getCounters(Counters.ICE) >= 3; @@ -931,7 +930,7 @@ public class CardFactoryCreatures { // Get rid of Planeswalkers: list = AllZone.getHumanPlayer().getCardsIn(ZoneType.Battlefield); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card crd) { return crd.isPlaneswalker() && (crd.getCounters(Counters.LOYALTY) >= 5); @@ -975,7 +974,7 @@ public class CardFactoryCreatures { int intermSumToughness = 0; // intermSumPower = intermSumToughness = 0; CardList creats = card.getController().getCardsIn(ZoneType.Graveyard); - creats = creats.filter(new Predicate() { + creats = CardListUtil.filter(creats, new Predicate() { @Override public boolean apply(final Card c) { return c.isCreature() && !c.equals(card); @@ -1027,7 +1026,7 @@ public class CardFactoryCreatures { public boolean canPlayAI() { // get all creatures CardList list = AllZone.getComputerPlayer().getCardsIn(ZoneType.Graveyard); - list = list.filter(Presets.CREATURES); + list = CardListUtil.filter(list, Presets.CREATURES); return 0 < list.size(); } }); @@ -1049,12 +1048,12 @@ public class CardFactoryCreatures { final Player opp = player.getOpponent(); int max = 0; CardList play = opp.getCardsIn(ZoneType.Battlefield); - play = play.filter(Presets.NON_TOKEN); - play = play.filter(Presets.WHITE); + play = CardListUtil.filter(play, Presets.NON_TOKEN); + play = CardListUtil.filter(play, Presets.WHITE); max += play.size(); CardList grave = opp.getCardsIn(ZoneType.Graveyard); - grave = grave.filter(Presets.WHITE); + grave = CardListUtil.filter(grave, Presets.WHITE); max += grave.size(); final String[] life = new String[max + 1]; diff --git a/src/main/java/forge/card/cardfactory/CardFactoryEnchantments.java b/src/main/java/forge/card/cardfactory/CardFactoryEnchantments.java index 1d799a188a9..22ed40deb53 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryEnchantments.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryEnchantments.java @@ -83,8 +83,8 @@ class CardFactoryEnchantments { public void showMessage() { CardList grave = AllZone.getHumanPlayer().getCardsIn(ZoneType.Graveyard); CardList aiGrave = AllZone.getComputerPlayer().getCardsIn(ZoneType.Graveyard); - grave = grave.filter(CardPredicates.Presets.CREATURES); - aiGrave = aiGrave.filter(CardPredicates.Presets.CREATURES); + grave = CardListUtil.filter(grave, CardPredicates.Presets.CREATURES); + aiGrave = CardListUtil.filter(aiGrave, CardPredicates.Presets.CREATURES); if (this.once || ((grave.size() < 2) && (aiGrave.size() < 2))) { this.once = false; @@ -102,7 +102,7 @@ class CardFactoryEnchantments { final Card c = GuiChoose.one("Choose first creature to exile", chooseGrave); if (c != null) { - CardList newGrave = c.getOwner().getCardsIn(ZoneType.Graveyard).filter(CardPredicates.Presets.CREATURES); + CardList newGrave = CardListUtil.filter(c.getOwner().getCardsIn(ZoneType.Graveyard), CardPredicates.Presets.CREATURES); newGrave.remove(c); final Object o2 = GuiChoose.one("Choose second creature to exile", newGrave); diff --git a/src/main/java/forge/card/cardfactory/CardFactoryInstants.java b/src/main/java/forge/card/cardfactory/CardFactoryInstants.java index 57742c76ed1..63cb5ad1868 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryInstants.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryInstants.java @@ -95,7 +95,7 @@ public class CardFactoryInstants { public void resolve() { Player player = getTargetPlayer(); CardList artifacts = AllZoneUtil.getCardsIn(ZoneType.Battlefield); - artifacts = artifacts.filter(CardPredicates.Presets.ARTIFACTS); + artifacts = CardListUtil.filter(artifacts, CardPredicates.Presets.ARTIFACTS); for (int i = 0; i < artifacts.size(); i++) { Card thisArtifact = artifacts.get(i); @@ -422,8 +422,8 @@ public class CardFactoryInstants { @Override public void resolve() { final Player you = card.getController(); - final CardList ens = AllZoneUtil.getCardsIn(ZoneType.Battlefield).filter(Presets.ENCHANTMENTS); - final CardList toReturn = ens.filter(new Predicate() { + final CardList ens = CardListUtil.filter(AllZoneUtil.getCardsIn(ZoneType.Battlefield), Presets.ENCHANTMENTS); + final CardList toReturn = CardListUtil.filter(ens, new Predicate() { @Override public boolean apply(final Card c) { final Card enchanting = c.getEnchantingCard(); diff --git a/src/main/java/forge/card/cardfactory/CardFactoryLands.java b/src/main/java/forge/card/cardfactory/CardFactoryLands.java index c94a9e3ce35..b454ce91315 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryLands.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryLands.java @@ -172,14 +172,14 @@ class CardFactoryLands { } this.inPlay.clear(); this.inPlay.addAll(AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield)); - return (this.inPlay.filter(targets).size() > 1) && super.canPlayAI(); + return (CardListUtil.filter(this.inPlay, targets).size() > 1) && super.canPlayAI(); } @Override public void resolve() { this.inPlay.clear(); this.inPlay.addAll(AllZoneUtil.getCardsIn(ZoneType.Battlefield)); - for (final Card targ : this.inPlay.filter(targets)) { + for (final Card targ : CardListUtil.filter(this.inPlay, targets)) { targ.addCounter(Counters.P1P1, 1); } } @@ -251,7 +251,7 @@ class CardFactoryLands { } } // selectCard() }; // Input - if ((AllZoneUtil.getPlayerLandsInPlay(AllZone.getHumanPlayer()).filter(Presets.UNTAPPED) + if ((CardListUtil.filter(AllZoneUtil.getPlayerLandsInPlay(AllZone.getHumanPlayer()), Presets.UNTAPPED) .size() < 2)) { Singletons.getModel().getGameAction().sacrifice(card, null); return; @@ -297,7 +297,7 @@ class CardFactoryLands { if (this.player.isComputer()) { if (land.size() > 0) { CardList tappedLand = new CardList(land); - tappedLand = tappedLand.filter(Presets.TAPPED); + tappedLand = CardListUtil.filter(tappedLand, Presets.TAPPED); // if any are tapped, sacrifice it // else sacrifice random if (tappedLand.size() > 0) { @@ -378,11 +378,11 @@ class CardFactoryLands { @Override public void execute() { CardList plains = AllZoneUtil.getPlayerLandsInPlay(card.getController()); - plains = plains.filter(Presets.UNTAPPED); + plains = CardListUtil.filter(plains, Presets.UNTAPPED); if (this.player.isComputer()) { if (plains.size() > 1) { - CardList tappedPlains = plains.filter(CardPredicates.Presets.BASIC_LANDS); + CardList tappedPlains = CardListUtil.filter(plains, CardPredicates.Presets.BASIC_LANDS); for (final Card c : tappedPlains) { Singletons.getModel().getGameAction().sacrifice(c, null); } @@ -396,7 +396,7 @@ class CardFactoryLands { } } else { // this is the human resolution final int[] paid = { 0 }; - if ((AllZoneUtil.getPlayerLandsInPlay(AllZone.getHumanPlayer()).filter(Presets.UNTAPPED) + if ((CardListUtil.filter(AllZoneUtil.getPlayerLandsInPlay(AllZone.getHumanPlayer()), Presets.UNTAPPED) .size() < 2)) { Singletons.getModel().getGameAction().sacrifice(card, null); return; diff --git a/src/main/java/forge/card/cardfactory/CardFactorySorceries.java b/src/main/java/forge/card/cardfactory/CardFactorySorceries.java index 645eb60e762..f0fa1b39253 100644 --- a/src/main/java/forge/card/cardfactory/CardFactorySorceries.java +++ b/src/main/java/forge/card/cardfactory/CardFactorySorceries.java @@ -297,8 +297,8 @@ public class CardFactorySorceries { @Override public boolean canPlayAI() { - CardList humTokenCreats = AllZoneUtil.getCreaturesInPlay(AllZone.getHumanPlayer()).filter(Presets.TOKEN); - CardList compTokenCreats = AllZoneUtil.getCreaturesInPlay(AllZone.getComputerPlayer()).filter(Presets.TOKEN); + CardList humTokenCreats = CardListUtil.filter(AllZoneUtil.getCreaturesInPlay(AllZone.getHumanPlayer()), Presets.TOKEN); + CardList compTokenCreats = CardListUtil.filter(AllZoneUtil.getCreaturesInPlay(AllZone.getComputerPlayer()), Presets.TOKEN); return compTokenCreats.size() > humTokenCreats.size(); } // canPlayAI() @@ -306,7 +306,7 @@ public class CardFactorySorceries { @Override public void resolve() { CardList tokens = AllZoneUtil.getCreaturesInPlay(); - tokens = tokens.filter(Presets.TOKEN); + tokens = CardListUtil.filter(tokens, Presets.TOKEN); CardFactoryUtil.copyTokens(tokens); @@ -372,7 +372,7 @@ public class CardFactorySorceries { } // need to sacrifice the other non-basic land types - land = land.filter(new Predicate() { + land = CardListUtil.filter(land, new Predicate() { @Override public boolean apply(final Card c) { if (c.getName().contains("Dryad Arbor")) { @@ -439,7 +439,7 @@ public class CardFactorySorceries { // controls and add them to target CardList land = AllZoneUtil.getPlayerLandsInPlay(AllZone.getHumanPlayer()); CardList cl = CardListUtil.getType(land, humanBasic.get(this.count)); - cl = cl.filter(new Predicate() { + cl = CardListUtil.filter(cl, new Predicate() { @Override public boolean apply(final Card crd) { return !saveList.contains(crd); @@ -460,7 +460,7 @@ public class CardFactorySorceries { } // need to sacrifice the other non-basic land types - land = land.filter(new Predicate() { + land = CardListUtil.filter(land, new Predicate() { @Override public boolean apply(final Card c) { if (c.getName().contains("Dryad Arbor")) { @@ -661,7 +661,7 @@ public class CardFactorySorceries { final CardList humCreats = AllZoneUtil.getCreaturesInPlay(AllZone.getHumanPlayer()); CardList compCreats = AllZoneUtil.getCreaturesInPlay(AllZone.getComputerPlayer()); - compCreats = compCreats.filter(CardPredicates.Presets.CREATURES); + compCreats = CardListUtil.filter(compCreats, CardPredicates.Presets.CREATURES); diff += 1.5 * (humCreats.size() - compCreats.size()); final CardList humHand = AllZone.getHumanPlayer().getCardsIn(ZoneType.Hand); @@ -835,7 +835,7 @@ public class CardFactorySorceries { } // Actually put everything on the battlefield - CardList bidded = AllZoneUtil.getCardsIn(ZoneType.Graveyard).filter(CardPredicates.Presets.CREATURES); + CardList bidded = CardListUtil.filter(AllZoneUtil.getCardsIn(ZoneType.Graveyard), CardPredicates.Presets.CREATURES); for (final Card c : bidded) { if (c.isType(input[1]) || (!input[0].equals("") && c.isType(input[0]))) { Singletons.getModel().getGameAction().moveToPlay(c); @@ -1159,8 +1159,8 @@ public class CardFactorySorceries { @Override public void showMessage() { CardList grave = card.getController().getCardsIn(ZoneType.Graveyard); - grave = grave.filter(Presets.CREATURES); - grave = grave.filter(new Predicate() { + grave = CardListUtil.filter(grave, Presets.CREATURES); + grave = CardListUtil.filter(grave, new Predicate() { @Override public boolean apply(final Card c) { return c.getCMC() <= x[0]; @@ -1308,7 +1308,7 @@ public class CardFactorySorceries { // get all final CardList creatures = AllZoneUtil.getCreaturesInPlay(); CardList grave = card.getController().getCardsIn(ZoneType.Graveyard); - grave = grave.filter(Presets.CREATURES); + grave = CardListUtil.filter(grave, Presets.CREATURES); if (AllZone.getHumanPlayer().canBeTargetedBy(spell) || AllZone.getComputerPlayer().canBeTargetedBy(spell)) { @@ -1388,7 +1388,7 @@ public class CardFactorySorceries { // Sacrifice an artifact CardList arts = p.getCardsIn(ZoneType.Battlefield); - arts = arts.filter(Presets.ARTIFACTS); + arts = CardListUtil.filter(arts, Presets.ARTIFACTS); final Object toSac = GuiChoose.oneOrNone("Sacrifice an artifact", arts); if (toSac != null) { final Card c = (Card) toSac; @@ -1401,7 +1401,7 @@ public class CardFactorySorceries { // Search your library for an artifact final CardList lib = p.getCardsIn(ZoneType.Library); GuiChoose.oneOrNone("Looking at Library", lib); - final CardList libArts = lib.filter(Presets.ARTIFACTS); + final CardList libArts = CardListUtil.filter(lib, Presets.ARTIFACTS); final Object o = GuiChoose.oneOrNone("Search for artifact", libArts); if (o != null) { newArtifact[0] = (Card) o; diff --git a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java index 71ae55c5926..0b4f5614907 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java @@ -109,7 +109,7 @@ public class CardFactoryUtil { public static Card getMostExpensivePermanentAI(final CardList list, final SpellAbility spell, final boolean targeted) { CardList all = list; if (targeted) { - all = all.filter(new Predicate() { + all = CardListUtil.filter(all, new Predicate() { @Override public boolean apply(final Card c) { return c.canBeTargetedBy(spell); @@ -168,7 +168,7 @@ public class CardFactoryUtil { * @return a {@link forge.Card} object. */ public static Card getCheapestCreatureAI(CardList list, final SpellAbility spell, final boolean targeted) { - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return c.isCreature(); @@ -193,7 +193,7 @@ public class CardFactoryUtil { public static Card getCheapestPermanentAI(final CardList list, final SpellAbility spell, final boolean targeted) { CardList all = list; if (targeted) { - all = all.filter(new Predicate() { + all = CardListUtil.filter(all, new Predicate() { @Override public boolean apply(final Card c) { return c.canBeTargetedBy(spell); @@ -228,13 +228,13 @@ public class CardFactoryUtil { * @return a {@link forge.Card} object. */ public static Card getBestLandAI(final CardList list) { - final CardList land = list.filter(CardPredicates.Presets.LANDS); + final CardList land = CardListUtil.filter(list, CardPredicates.Presets.LANDS); if (!(land.size() > 0)) { return null; } // prefer to target non basic lands - final CardList nbLand = land.filter(Predicates.not(CardPredicates.Presets.BASIC_LANDS)); + final CardList nbLand = CardListUtil.filter(land, Predicates.not(CardPredicates.Presets.BASIC_LANDS)); if (nbLand.size() > 0) { // TODO - Rank non basics? @@ -286,9 +286,9 @@ public class CardFactoryUtil { * @return a {@link forge.Card} object. */ public static Card getBestEnchantmentAI(final CardList list, final SpellAbility spell, final boolean targeted) { - CardList all = list.filter(CardPredicates.Presets.ENCHANTMENTS); + CardList all = CardListUtil.filter(list, CardPredicates.Presets.ENCHANTMENTS); if (targeted) { - all = all.filter(new Predicate() { + all = CardListUtil.filter(all, new Predicate() { @Override public boolean apply(final Card c) { @@ -312,7 +312,7 @@ public class CardFactoryUtil { * @return a {@link forge.Card} object. */ public static Card getBestArtifactAI(final CardList list) { - CardList all = list.filter(CardPredicates.Presets.ARTIFACTS); + CardList all = CardListUtil.filter(list, CardPredicates.Presets.ARTIFACTS); if (all.size() == 0) { return null; } @@ -611,7 +611,7 @@ public class CardFactoryUtil { * @return the card */ public static Card getBestCreatureAI(final CardList list) { - CardList all = list.filter(CardPredicates.Presets.CREATURES); + CardList all = CardListUtil.filter(list, CardPredicates.Presets.CREATURES); return Aggregates.itemWithMax(all, CardPredicates.Accessors.fnEvaluateCreature); } @@ -627,7 +627,7 @@ public class CardFactoryUtil { */ public static Card getBestCreatureToBounceAI(final CardList list) { final int tokenBonus = 40; - CardList all = list.filter(CardPredicates.Presets.CREATURES); + CardList all = CardListUtil.filter(list, CardPredicates.Presets.CREATURES); Card biggest = null; // returns null if list.size() == 0 int biggestvalue = 0; int newvalue = 0; @@ -676,7 +676,7 @@ public class CardFactoryUtil { * @return a {@link forge.Card} object. */ public static Card getWorstCreatureAI(final CardList list) { - CardList all = list.filter(CardPredicates.Presets.CREATURES); + CardList all = CardListUtil.filter(list, CardPredicates.Presets.CREATURES); // get smallest creature return Aggregates.itemWithMin(all, CardPredicates.Accessors.fnEvaluateCreature); } @@ -706,28 +706,28 @@ public class CardFactoryUtil { System.out.println("getWorstPermanentAI: " + list); if (biasEnch && Iterables.any(list, CardPredicates.Presets.ENCHANTMENTS)) { - return CardFactoryUtil.getCheapestPermanentAI(list.filter(CardPredicates.Presets.ENCHANTMENTS), null, false); + return CardFactoryUtil.getCheapestPermanentAI(CardListUtil.filter(list, CardPredicates.Presets.ENCHANTMENTS), null, false); } if (biasArt && Iterables.any(list, CardPredicates.Presets.ARTIFACTS)) { - return CardFactoryUtil.getCheapestPermanentAI(list.filter(CardPredicates.Presets.ARTIFACTS), null, false); + return CardFactoryUtil.getCheapestPermanentAI(CardListUtil.filter(list, CardPredicates.Presets.ARTIFACTS), null, false); } if (biasLand && Iterables.any(list, CardPredicates.Presets.LANDS)) { - return CardFactoryUtil.getWorstLand(list.filter(CardPredicates.Presets.LANDS)); + return CardFactoryUtil.getWorstLand(CardListUtil.filter(list, CardPredicates.Presets.LANDS)); } if (biasCreature && Iterables.any(list, CardPredicates.Presets.CREATURES)) { - return CardFactoryUtil.getWorstCreatureAI(list.filter(CardPredicates.Presets.CREATURES)); + return CardFactoryUtil.getWorstCreatureAI(CardListUtil.filter(list, CardPredicates.Presets.CREATURES)); } - CardList lands = list.filter(CardPredicates.Presets.LANDS); + CardList lands = CardListUtil.filter(list, CardPredicates.Presets.LANDS); if (lands.size() > 6) { return CardFactoryUtil.getWorstLand(lands); } if ((CardListUtil.getType(list, "Artifact").size() > 0) || (CardListUtil.getType(list, "Enchantment").size() > 0)) { - return CardFactoryUtil.getCheapestPermanentAI(list.filter(new Predicate() { + return CardFactoryUtil.getCheapestPermanentAI(CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return c.isArtifact() || c.isEnchantment(); @@ -1885,7 +1885,7 @@ public class CardFactoryUtil { } if (activator.isPlayer(zone.getPlayer())) { - cl = cl.filter(new Predicate() { + cl = CardListUtil.filter(cl, new Predicate() { @Override public boolean apply(final Card c) { if (zone.is(ZoneType.Graveyard)) { @@ -1920,7 +1920,7 @@ public class CardFactoryUtil { }); } else { // the activator is not the owner of the card - cl = cl.filter(new Predicate() { + cl = CardListUtil.filter(cl, new Predicate() { @Override public boolean apply(final Card c) { @@ -2374,7 +2374,7 @@ public class CardFactoryUtil { // Count$ColoredCreatures *a DOMAIN for creatures* if (sq[0].contains("ColoredCreatures")) { someCards.addAll(cardController.getCardsIn(ZoneType.Battlefield)); - someCards = someCards.filter(Presets.CREATURES); + someCards = CardListUtil.filter(someCards, Presets.CREATURES); final String[] colors = { "green", "white", "red", "blue", "black" }; @@ -2866,7 +2866,7 @@ public class CardFactoryUtil { // "Clerics you control" - Count$TypeYouCtrl.Cleric if (sq[0].contains("Type")) { - someCards = someCards.filter(CardPredicates.isType(sq[1])); + someCards = CardListUtil.filter(someCards, CardPredicates.isType(sq[1])); } // "Named in all graveyards" - Count$NamedAllYards. @@ -2875,18 +2875,18 @@ public class CardFactoryUtil { if (sq[1].equals("CARDNAME")) { sq[1] = c.getName(); } - someCards = someCards.filter(CardPredicates.nameEquals(sq[1])); + someCards = CardListUtil.filter(someCards, CardPredicates.nameEquals(sq[1])); } // Refined qualities // "Untapped Lands" - Count$UntappedTypeYouCtrl.Land if (sq[0].contains("Untapped")) { - someCards = someCards.filter(Presets.UNTAPPED); + someCards = CardListUtil.filter(someCards, Presets.UNTAPPED); } if (sq[0].contains("Tapped")) { - someCards = someCards.filter(Presets.TAPPED); + someCards = CardListUtil.filter(someCards, Presets.TAPPED); } // String sq0 = sq[0].toLowerCase(); @@ -2896,27 +2896,27 @@ public class CardFactoryUtil { // } // "White Creatures" - Count$WhiteTypeYouCtrl.Creature if (sq[0].contains("White")) { - someCards = someCards.filter(Presets.WHITE); + someCards = CardListUtil.filter(someCards, Presets.WHITE); } if (sq[0].contains("Blue")) { - someCards = someCards.filter(Presets.BLUE); + someCards = CardListUtil.filter(someCards, Presets.BLUE); } if (sq[0].contains("Black")) { - someCards = someCards.filter(Presets.BLACK); + someCards = CardListUtil.filter(someCards, Presets.BLACK); } if (sq[0].contains("Red")) { - someCards = someCards.filter(Presets.RED); + someCards = CardListUtil.filter(someCards, Presets.RED); } if (sq[0].contains("Green")) { - someCards = someCards.filter(Presets.GREEN); + someCards = CardListUtil.filter(someCards, Presets.GREEN); } if (sq[0].contains("Multicolor")) { - someCards = someCards.filter(new Predicate() { + someCards = CardListUtil.filter(someCards, new Predicate() { @Override public boolean apply(final Card c) { return (CardUtil.getColors(c).size() > 1); @@ -2925,7 +2925,7 @@ public class CardFactoryUtil { } if (sq[0].contains("Monocolor")) { - someCards = someCards.filter(new Predicate() { + someCards = CardListUtil.filter(someCards, new Predicate() { @Override public boolean apply(final Card c) { return (CardUtil.getColors(c).size() == 1); @@ -3276,7 +3276,7 @@ public class CardFactoryUtil { */ public static int getUsableManaSources(final Player player) { CardList list = player.getCardsIn(ZoneType.Battlefield); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { for (final AbilityMana am : c.getAIPlayableMana()) { @@ -4852,7 +4852,7 @@ public class CardFactoryUtil { // Target as Modular is Destroyed if (card.getController().isComputer()) { CardList choices = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield); - choices = choices.filter(new Predicate() { + choices = CardListUtil.filter(choices, new Predicate() { @Override public boolean apply(final Card c) { return c.isCreature() && c.isArtifact(); diff --git a/src/main/java/forge/card/cost/CostTapType.java b/src/main/java/forge/card/cost/CostTapType.java index ff4c82d72d9..1e191331bb0 100644 --- a/src/main/java/forge/card/cost/CostTapType.java +++ b/src/main/java/forge/card/cost/CostTapType.java @@ -120,7 +120,7 @@ public class CostTapType extends CostPartWithList { if (cost.getTap()) { typeList.remove(source); } - typeList = typeList.filter(Presets.UNTAPPED); + typeList = CardListUtil.filter(typeList, Presets.UNTAPPED); final Integer amount = this.convertAmount(); if ((typeList.size() == 0) || ((amount != null) && (typeList.size() < amount))) { @@ -154,7 +154,7 @@ public class CostTapType extends CostPartWithList { public final boolean payHuman(final SpellAbility ability, final Card source, final CostPayment payment) { CardList typeList = ability.getActivatingPlayer().getCardsIn(ZoneType.Battlefield); typeList = CardListUtil.getValidCards(typeList, this.getType().split(";"), ability.getActivatingPlayer(), ability.getSourceCard()); - typeList = typeList.filter(Presets.UNTAPPED); + typeList = CardListUtil.filter(typeList, Presets.UNTAPPED); final String amount = this.getAmount(); Integer c = this.convertAmount(); if (c == null) { @@ -188,7 +188,7 @@ public class CostTapType extends CostPartWithList { if (sVar.equals("XChoice")) { CardList typeList = ability.getActivatingPlayer().getCardsIn(ZoneType.Battlefield); typeList = CardListUtil.getValidCards(typeList, this.getType().split(";"), ability.getActivatingPlayer(), ability.getSourceCard()); - typeList = typeList.filter(Presets.UNTAPPED); + typeList = CardListUtil.filter(typeList, Presets.UNTAPPED); c = typeList.size(); source.setSVar("ChosenX", "Number$" + Integer.toString(c)); } else { diff --git a/src/main/java/forge/card/cost/CostUntapType.java b/src/main/java/forge/card/cost/CostUntapType.java index 03e2d95a523..611af67d498 100644 --- a/src/main/java/forge/card/cost/CostUntapType.java +++ b/src/main/java/forge/card/cost/CostUntapType.java @@ -125,7 +125,7 @@ public class CostUntapType extends CostPartWithList { if (cost.getUntap()) { typeList.remove(source); } - typeList = typeList.filter(Presets.TAPPED); + typeList = CardListUtil.filter(typeList, Presets.TAPPED); final Integer amount = this.convertAmount(); if ((typeList.size() == 0) || ((amount != null) && (typeList.size() < amount))) { @@ -160,7 +160,7 @@ public class CostUntapType extends CostPartWithList { final boolean untap = payment.getCost().getUntap(); CardList typeList = AllZoneUtil.getCardsIn(ZoneType.Battlefield); typeList = CardListUtil.getValidCards(typeList, this.getType().split(";"), ability.getActivatingPlayer(), ability.getSourceCard()); - typeList = typeList.filter(Presets.TAPPED); + typeList = CardListUtil.filter(typeList, Presets.TAPPED); if (untap) { typeList.remove(source); } @@ -200,7 +200,7 @@ public class CostUntapType extends CostPartWithList { if (untap) { typeList.remove(source); } - typeList = typeList.filter(Presets.TAPPED); + typeList = CardListUtil.filter(typeList, Presets.TAPPED); c = typeList.size(); source.setSVar("ChosenX", "Number$" + Integer.toString(c)); } else { diff --git a/src/main/java/forge/card/spellability/SpellPermanent.java b/src/main/java/forge/card/spellability/SpellPermanent.java index debf123f554..08ed67801f3 100644 --- a/src/main/java/forge/card/spellability/SpellPermanent.java +++ b/src/main/java/forge/card/spellability/SpellPermanent.java @@ -357,7 +357,7 @@ public class SpellPermanent extends Spell { } if (card.isPlaneswalker()) { CardList list = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield); - list = list.filter(CardPredicates.Presets.PLANEWALKERS); + list = CardListUtil.filter(list, CardPredicates.Presets.PLANEWALKERS); for (int i = 0; i < list.size(); i++) { List type = card.getType(); diff --git a/src/main/java/forge/card/spellability/TargetSelection.java b/src/main/java/forge/card/spellability/TargetSelection.java index bdbeacd814c..1ccfaabac56 100644 --- a/src/main/java/forge/card/spellability/TargetSelection.java +++ b/src/main/java/forge/card/spellability/TargetSelection.java @@ -301,7 +301,7 @@ public class TargetSelection { // If the cards can't share a creature type if (tgt.isWithoutSameCreatureType() && !targeted.isEmpty()) { final Card card = targeted.get(0); - choices = choices.filter(new Predicate() { + choices = CardListUtil.filter(choices, new Predicate() { @Override public boolean apply(final Card c) { return !c.sharesCreatureTypeWith(card); diff --git a/src/main/java/forge/game/GameNew.java b/src/main/java/forge/game/GameNew.java index 06be16b0559..ff9a2fd9b51 100644 --- a/src/main/java/forge/game/GameNew.java +++ b/src/main/java/forge/game/GameNew.java @@ -379,7 +379,7 @@ public class GameNew { CardListUtil.shuffle(library); // remove all land, keep non-basicland in there, shuffled - CardList land = library.filter(CardPredicates.Presets.LANDS); + CardList land = CardListUtil.filter(library, CardPredicates.Presets.LANDS); for (Card c : land) { if (c.isLand()) { library.remove(c); diff --git a/src/main/java/forge/game/phase/Combat.java b/src/main/java/forge/game/phase/Combat.java index 7f10801c8b3..ce46b3e7f50 100644 --- a/src/main/java/forge/game/phase/Combat.java +++ b/src/main/java/forge/game/phase/Combat.java @@ -30,6 +30,7 @@ import forge.AllZone; import forge.AllZoneUtil; import forge.Card; import forge.CardList; +import forge.CardListUtil; import forge.CardPredicates; import forge.GameActionUtil; import forge.GameEntity; @@ -112,7 +113,7 @@ public class Combat { this.defenders.add((GameEntity) defender); this.defenderMap.put((GameEntity) defender, new CardList()); CardList planeswalkers = defender.getCardsIn(ZoneType.Battlefield); - planeswalkers = planeswalkers.filter(CardPredicates.Presets.PLANEWALKERS); + planeswalkers = CardListUtil.filter(planeswalkers, CardPredicates.Presets.PLANEWALKERS); for (final Card pw : planeswalkers) { this.defenders.add((GameEntity) pw); this.defenderMap.put((GameEntity) pw, new CardList()); diff --git a/src/main/java/forge/game/phase/CombatUtil.java b/src/main/java/forge/game/phase/CombatUtil.java index f9d87c96c46..ddb671ba772 100644 --- a/src/main/java/forge/game/phase/CombatUtil.java +++ b/src/main/java/forge/game/phase/CombatUtil.java @@ -398,8 +398,7 @@ public class CombatUtil { if (CombatUtil.canBlock(attacker, blocker, combat)) { boolean must = true; if (attacker.hasKeyword("CARDNAME can't be blocked except by two or more creatures.")) { - final CardList possibleBlockers = combat.getDefendingPlayer().getCardsIn(ZoneType.Battlefield) - .filter(CardPredicates.Presets.CREATURES); + final CardList possibleBlockers = CardListUtil.filter(combat.getDefendingPlayer().getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.CREATURES); possibleBlockers.remove(blocker); if (!CombatUtil.canBeBlocked(attacker, possibleBlockers)) { must = false; @@ -522,8 +521,7 @@ public class CombatUtil { if (CombatUtil.canBeBlocked(attacker, combat) && CombatUtil.canBlock(attacker, blocker)) { boolean canBe = true; if (attacker.hasKeyword("CARDNAME can't be blocked except by two or more creatures.")) { - final CardList blockers = combat.getDefendingPlayer().getCardsIn(ZoneType.Battlefield) - .filter(CardPredicates.Presets.CREATURES); + final CardList blockers = CardListUtil.filter(combat.getDefendingPlayer().getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.CREATURES); blockers.remove(blocker); if (!CombatUtil.canBeBlocked(attacker, blockers)) { canBe = false; @@ -540,8 +538,7 @@ public class CombatUtil { if (CombatUtil.canBeBlocked(attacker, combat) && CombatUtil.canBlock(attacker, blocker)) { boolean canBe = true; if (attacker.hasKeyword("CARDNAME can't be blocked except by two or more creatures.")) { - final CardList blockers = combat.getDefendingPlayer().getCardsIn(ZoneType.Battlefield) - .filter(CardPredicates.Presets.CREATURES); + final CardList blockers = CardListUtil.filter(combat.getDefendingPlayer().getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.CREATURES); blockers.remove(blocker); if (!CombatUtil.canBeBlocked(attacker, blockers)) { canBe = false; @@ -884,7 +881,7 @@ public class CombatUtil { powerLimit[0] = Integer.parseInt((asSeparateWords[12]).trim()); CardList list = AllZoneUtil.getCreaturesInPlay(c.getController().getOpponent()); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card ct) { return ((ct.isUntapped() && (ct.getNetAttack() >= powerLimit[0]) && asSeparateWords[14] @@ -928,7 +925,7 @@ public class CombatUtil { return false; } } else if (keyword.equals("CARDNAME can't attack unless defending player controls a snow land.")) { - temp = list.filter(CardPredicates.Presets.SNOW_LANDS); + temp = CardListUtil.filter(list, CardPredicates.Presets.SNOW_LANDS); if (temp.isEmpty()) { return false; } @@ -963,7 +960,7 @@ public class CombatUtil { final Card att = attacker; CardList list = AllZoneUtil.getCreaturesInPlay(player); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return CombatUtil.canBlock(att, c) && (c.hasFirstStrike() || c.hasDoubleStrike()); @@ -3082,7 +3079,7 @@ public class CombatUtil { @Override public void resolve() { CardList enchantments = attacker.getController().getCardsIn(ZoneType.Library); - enchantments = enchantments.filter(new Predicate() { + enchantments = CardListUtil.filter(enchantments, new Predicate() { @Override public boolean apply(final Card c) { if (attacker.hasKeyword("Protection from enchantments") diff --git a/src/main/java/forge/game/phase/EndOfTurn.java b/src/main/java/forge/game/phase/EndOfTurn.java index 25af5cf2e1a..17a34a14526 100644 --- a/src/main/java/forge/game/phase/EndOfTurn.java +++ b/src/main/java/forge/game/phase/EndOfTurn.java @@ -23,6 +23,7 @@ import forge.AllZone; import forge.AllZoneUtil; import forge.Card; import forge.CardList; +import forge.CardListUtil; import forge.Counters; import forge.Singletons; import forge.card.spellability.Ability; @@ -232,7 +233,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { final Player opponent = player.getOpponent(); CardList list = opponent.getCardsIn(ZoneType.Battlefield); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return c.getName().equals("Lighthouse Chronologist") && (c.getCounters(Counters.LEVEL) >= 7); diff --git a/src/main/java/forge/game/phase/PhaseHandler.java b/src/main/java/forge/game/phase/PhaseHandler.java index dc833c15a52..f8028d0a65c 100644 --- a/src/main/java/forge/game/phase/PhaseHandler.java +++ b/src/main/java/forge/game/phase/PhaseHandler.java @@ -26,6 +26,7 @@ import forge.AllZone; import forge.AllZoneUtil; import forge.Card; import forge.CardList; +import forge.CardListUtil; import forge.CardPredicates; import forge.GameActionUtil; import forge.Singletons; @@ -660,7 +661,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { private boolean skipTurnTimeVault(Player turn) { // time vault: CardList vaults = turn.getCardsIn(ZoneType.Battlefield, "Time Vault"); - vaults = vaults.filter(CardPredicates.Presets.TAPPED); + vaults = CardListUtil.filter(vaults, CardPredicates.Presets.TAPPED); if (vaults.size() > 0) { final Card crd = vaults.get(0); @@ -831,7 +832,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { // resets the status of attacked/blocked this phase CardList list = player.getCardsIn(ZoneType.Battlefield); - list = list.filter(CardPredicates.Presets.CREATURES); + list = CardListUtil.filter(list, CardPredicates.Presets.CREATURES); for (int i = 0; i < list.size(); i++) { final Card c = list.get(i); diff --git a/src/main/java/forge/game/phase/PhaseUtil.java b/src/main/java/forge/game/phase/PhaseUtil.java index 2345a828f9f..80753aa9f5b 100644 --- a/src/main/java/forge/game/phase/PhaseUtil.java +++ b/src/main/java/forge/game/phase/PhaseUtil.java @@ -25,6 +25,7 @@ import forge.AllZone; import forge.AllZoneUtil; import forge.Card; import forge.CardList; +import forge.CardListUtil; import forge.CardPredicates.Presets; import forge.Singletons; import forge.card.trigger.TriggerType; @@ -103,7 +104,7 @@ public class PhaseUtil { Singletons.getModel().getGameAction().resetActivationsPerTurn(); - final CardList lands = AllZoneUtil.getPlayerLandsInPlay(turn).filter(Presets.UNTAPPED); + final CardList lands = CardListUtil.filter(AllZoneUtil.getPlayerLandsInPlay(turn), Presets.UNTAPPED); turn.setNumPowerSurgeLands(lands.size()); // anything before this point happens regardless of whether the Untap @@ -372,7 +373,7 @@ public class PhaseUtil { CardList list = new CardList(); list.addAll(AllZone.getCombat().getAllBlockers()); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return !c.getDamageHistory().getCreatureBlockedThisCombat(); diff --git a/src/main/java/forge/game/phase/Untap.java b/src/main/java/forge/game/phase/Untap.java index 018c99b6eac..f3faf7c3c5a 100644 --- a/src/main/java/forge/game/phase/Untap.java +++ b/src/main/java/forge/game/phase/Untap.java @@ -25,6 +25,7 @@ import forge.AllZone; import forge.AllZoneUtil; import forge.Card; import forge.CardList; +import forge.CardListUtil; import forge.CardPredicates.Presets; import forge.Counters; import forge.GameActionUtil; @@ -120,7 +121,7 @@ public class Untap extends Phase implements java.io.Serializable { } } - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { if (!Untap.canUntap(c)) { @@ -201,7 +202,7 @@ public class Untap extends Phase implements java.io.Serializable { // search for lands the computer has and only untap 1 CardList landList = AllZoneUtil.getPlayerLandsInPlay(AllZone.getComputerPlayer()); - landList = landList.filter(tappedCanUntap); + landList = CardListUtil.filter(landList, tappedCanUntap); if (landList.size() > 0) { landList.get(0).untap(); } @@ -229,7 +230,7 @@ public class Untap extends Phase implements java.io.Serializable { } // selectCard() }; // Input CardList landList = AllZoneUtil.getPlayerLandsInPlay(AllZone.getHumanPlayer()); - landList = landList.filter(tappedCanUntap); + landList = CardListUtil.filter(landList, tappedCanUntap); if (landList.size() > 0) { AllZone.getInputControl().setInput(target); } @@ -238,8 +239,8 @@ public class Untap extends Phase implements java.io.Serializable { if (AllZoneUtil.isCardInPlay("Damping Field") || AllZoneUtil.isCardInPlay("Imi Statue")) { if (Singletons.getModel().getGameState().getPhaseHandler().getPlayerTurn().isComputer()) { CardList artList = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield); - artList = artList.filter(Presets.ARTIFACTS); - artList = artList.filter(tappedCanUntap); + artList = CardListUtil.filter(artList, Presets.ARTIFACTS); + artList = CardListUtil.filter(artList, tappedCanUntap); if (artList.size() > 0) { CardFactoryUtil.getBestArtifactAI(artList).untap(); } @@ -268,8 +269,8 @@ public class Untap extends Phase implements java.io.Serializable { } // selectCard() }; // Input CardList artList = AllZone.getHumanPlayer().getCardsIn(ZoneType.Battlefield); - artList = artList.filter(Presets.ARTIFACTS); - artList = artList.filter(tappedCanUntap); + artList = CardListUtil.filter(artList, Presets.ARTIFACTS); + artList = CardListUtil.filter(artList, tappedCanUntap); if (artList.size() > 0) { AllZone.getInputControl().setInput(target); } @@ -278,7 +279,7 @@ public class Untap extends Phase implements java.io.Serializable { if ((AllZoneUtil.isCardInPlay("Smoke") || AllZoneUtil.isCardInPlay("Stoic Angel"))) { if (Singletons.getModel().getGameState().getPhaseHandler().getPlayerTurn().isComputer()) { CardList creatures = AllZoneUtil.getCreaturesInPlay(AllZone.getComputerPlayer()); - creatures = creatures.filter(tappedCanUntap); + creatures = CardListUtil.filter(creatures, tappedCanUntap); if (creatures.size() > 0) { creatures.get(0).untap(); } @@ -307,7 +308,7 @@ public class Untap extends Phase implements java.io.Serializable { } // selectCard() }; // Input CardList creatures = AllZoneUtil.getCreaturesInPlay(AllZone.getHumanPlayer()); - creatures = creatures.filter(tappedCanUntap); + creatures = CardListUtil.filter(creatures, tappedCanUntap); if (creatures.size() > 0) { AllZone.getInputControl().setInput(target); } @@ -342,7 +343,7 @@ public class Untap extends Phase implements java.io.Serializable { private static void doPhasing(final Player turn) { // Needs to include phased out cards - final CardList list = turn.getCardsIncludePhasingIn(ZoneType.Battlefield).filter(new Predicate() { + final CardList list = CardListUtil.filter(turn.getCardsIncludePhasingIn(ZoneType.Battlefield), new Predicate() { @Override public boolean apply(final Card c) { diff --git a/src/main/java/forge/game/phase/Upkeep.java b/src/main/java/forge/game/phase/Upkeep.java index f2c445e448a..1992d0a4889 100644 --- a/src/main/java/forge/game/phase/Upkeep.java +++ b/src/main/java/forge/game/phase/Upkeep.java @@ -165,7 +165,7 @@ public class Upkeep extends Phase implements java.io.Serializable { */ private static void upkeepEcho() { CardList list = Singletons.getModel().getGameState().getPhaseHandler().getPlayerTurn().getCardsIn(ZoneType.Battlefield); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return c.hasStartOfKeyword("(Echo unpaid)"); @@ -484,8 +484,7 @@ public class Upkeep extends Phase implements java.io.Serializable { for (final Card c : cards) { final Card abyss = c; - final CardList abyssGetTargets = AllZoneUtil.getCreaturesInPlay(player) - .filter(Presets.NON_ARTIFACTS); + final CardList abyssGetTargets = CardListUtil.filter(AllZoneUtil.getCreaturesInPlay(player), Presets.NON_ARTIFACTS); final Ability sacrificeCreature = new Ability(abyss, "") { @Override @@ -589,7 +588,7 @@ public class Upkeep extends Phase implements java.io.Serializable { private Card getCompyCardToDestroy(final CardList original) { final CardList options = this.getLowestPowerList(original); - final CardList humanCreatures = options.filter(new Predicate() { + final CardList humanCreatures = CardListUtil.filter(options, new Predicate() { @Override public boolean apply(final Card c) { return c.getController().isHuman(); @@ -1829,7 +1828,7 @@ public class Upkeep extends Phase implements java.io.Serializable { CardList list = player.getCardsIn(ZoneType.Exile); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return c.hasSuspend(); @@ -1857,7 +1856,7 @@ public class Upkeep extends Phase implements java.io.Serializable { final Player player = Singletons.getModel().getGameState().getPhaseHandler().getPlayerTurn(); CardList list = player.getCardsIn(ZoneType.Battlefield); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return CardFactoryUtil.hasKeyword(c, "Vanishing") != -1; @@ -1894,7 +1893,7 @@ public class Upkeep extends Phase implements java.io.Serializable { final Player player = Singletons.getModel().getGameState().getPhaseHandler().getPlayerTurn(); CardList list = player.getCardsIn(ZoneType.Battlefield); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return CardFactoryUtil.hasKeyword(c, "Fading") != -1; @@ -1959,8 +1958,8 @@ public class Upkeep extends Phase implements java.io.Serializable { oathFlag = false; } } else { // if player == Computer - final CardList creaturesInLibrary = player.getCardsIn(ZoneType.Library).filter(CardPredicates.Presets.CREATURES); - final CardList creaturesInBattlefield = player.getCardsIn(ZoneType.Battlefield).filter(CardPredicates.Presets.CREATURES); + final CardList creaturesInLibrary = CardListUtil.filter(player.getCardsIn(ZoneType.Library), CardPredicates.Presets.CREATURES); + final CardList creaturesInBattlefield = CardListUtil.filter(player.getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.CREATURES); // if there are at least 3 creatures in library, // or none in play with one in library, oath @@ -2026,7 +2025,7 @@ public class Upkeep extends Phase implements java.io.Serializable { final Ability ability = new Ability(oathList.get(0), "0") { @Override public void resolve() { - final CardList graveyardCreatures = player.getCardsIn(ZoneType.Graveyard).filter(CardPredicates.Presets.CREATURES); + final CardList graveyardCreatures = CardListUtil.filter(player.getCardsIn(ZoneType.Graveyard), CardPredicates.Presets.CREATURES); if (AllZoneUtil.compareTypeAmountInGraveyard(player, "Creature") > 0) { if (player.isHuman()) { @@ -2146,7 +2145,7 @@ public class Upkeep extends Phase implements java.io.Serializable { @Override public void resolve() { final int num = source.getCounters(Counters.FADE); - final CardList list = player.getCardsIn(ZoneType.Battlefield).filter(new Predicate() { + final CardList list = CardListUtil.filter(player.getCardsIn(ZoneType.Battlefield), new Predicate() { @Override public boolean apply(final Card c) { return (c.isArtifact() || c.isLand() || c.isCreature()) && c.isUntapped(); @@ -2157,7 +2156,7 @@ public class Upkeep extends Phase implements java.io.Serializable { if (player.isComputer()) { Card toTap = CardFactoryUtil.getWorstPermanentAI(list, false, false, false, false); // try to find non creature cards without tap abilities - CardList betterList = list.filter(new Predicate() { + CardList betterList = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { if (c.isCreature()) { @@ -2232,7 +2231,7 @@ public class Upkeep extends Phase implements java.io.Serializable { final Player player = Singletons.getModel().getGameState().getPhaseHandler().getPlayerTurn(); CardList blaze = player.getCardsIn(ZoneType.Battlefield); - blaze = blaze.filter(new Predicate() { + blaze = CardListUtil.filter(blaze, new Predicate() { @Override public boolean apply(final Card c) { return c.isLand() && (c.getCounters(Counters.BLAZE) > 0); @@ -2276,7 +2275,7 @@ public class Upkeep extends Phase implements java.io.Serializable { public void resolve() { CardList enchantmentsInLibrary = source.getController().getCardsIn(ZoneType.Library); final CardList enchantmentsAttached = new CardList(source.getEnchantingPlayer().getEnchantedBy()); - enchantmentsInLibrary = enchantmentsInLibrary.filter(new Predicate() { + enchantmentsInLibrary = CardListUtil.filter(enchantmentsInLibrary, new Predicate() { @Override public boolean apply(final Card c) { return c.isEnchantment() && c.hasKeyword("Enchant player") diff --git a/src/main/java/forge/game/player/AIPlayer.java b/src/main/java/forge/game/player/AIPlayer.java index 0c7738c1d02..ee3225e051e 100644 --- a/src/main/java/forge/game/player/AIPlayer.java +++ b/src/main/java/forge/game/player/AIPlayer.java @@ -206,7 +206,7 @@ public class AIPlayer extends Player { // probably don't need more } else if (topN.get(i).isCreature()) { CardList cl = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield); - cl = cl.filter(CardPredicates.Presets.CREATURES); + cl = CardListUtil.filter(cl, CardPredicates.Presets.CREATURES); bottom = cl.size() > 5; // if control more than 5 Creatures, // probably don't need more } diff --git a/src/main/java/forge/game/player/ComputerUtil.java b/src/main/java/forge/game/player/ComputerUtil.java index 071a6e073f8..771ffd661df 100644 --- a/src/main/java/forge/game/player/ComputerUtil.java +++ b/src/main/java/forge/game/player/ComputerUtil.java @@ -1008,7 +1008,7 @@ public class ComputerUtil { */ public static CardList getAvailableMana(final Player player, final boolean checkPlayable) { final CardList list = player.getCardsIn(ZoneType.Battlefield); - final CardList manaSources = list.filter(new Predicate() { + final CardList manaSources = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { if (checkPlayable) { @@ -1305,8 +1305,8 @@ public class ComputerUtil { return false; } final CardList hand = AllZone.getComputerPlayer().getCardsIn(ZoneType.Hand); - CardList landList = hand.filter(Presets.LANDS); - CardList nonLandList = hand.filter(Predicates.not(CardPredicates.Presets.LANDS)); + CardList landList = CardListUtil.filter(hand, Presets.LANDS); + CardList nonLandList = CardListUtil.filter(hand, Predicates.not(CardPredicates.Presets.LANDS)); final CardList lands = computer.getCardsIn(ZoneType.Graveyard); for (final Card crd : lands) { @@ -1319,7 +1319,7 @@ public class ComputerUtil { } if (landList.size() == 1 && nonLandList.size() < 3) { CardList cardsInPlay = computer.getCardsIn(ZoneType.Battlefield); - CardList landsInPlay = cardsInPlay.filter(Presets.LANDS); + CardList landsInPlay = CardListUtil.filter(cardsInPlay, Presets.LANDS); CardList allCards = computer.getCardsIn(ZoneType.Graveyard); allCards.addAll(cardsInPlay); int maxCmcInHand = Aggregates.max(hand, CardPredicates.Accessors.fnGetCmc); @@ -1340,7 +1340,7 @@ public class ComputerUtil { } } - landList = landList.filter(new Predicate() { + landList = CardListUtil.filter(landList, new Predicate() { @Override public boolean apply(final Card c) { if (c.getSVar("NeedsToPlay").length() > 0) { @@ -1366,7 +1366,7 @@ public class ComputerUtil { final CardList hand = AllZone.getComputerPlayer().getCardsIn(ZoneType.Hand); CardList lands = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield); lands.addAll(hand); - lands = lands.filter(CardPredicates.Presets.LANDS); + lands = CardListUtil.filter(lands, CardPredicates.Presets.LANDS); int maxCmcInHand = Aggregates.max(hand, CardPredicates.Accessors.fnGetCmc); for (final SpellAbility sa : spellAbilities) { if (sa.isCycling()) { @@ -1461,7 +1461,7 @@ public class ComputerUtil { for (int ip = 0; ip < 6; ip++) { // priority 0 is the lowest, // priority 5 the highest final int priority = 6 - ip; - final CardList sacMeList = typeList.filter(new Predicate() { + final CardList sacMeList = CardListUtil.filter(typeList, new Predicate() { @Override public boolean apply(final Card c) { return (!c.getSVar("SacMe").equals("") && (Integer.parseInt(c.getSVar("SacMe")) == priority)); @@ -1626,7 +1626,7 @@ public class ComputerUtil { } List aiCards = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield); final int numLandsInPlay = Iterables.size(Iterables.filter(aiCards, CardPredicates.Presets.LANDS)); - final CardList landsInHand = hand.filter(CardPredicates.Presets.LANDS); + final CardList landsInHand = CardListUtil.filter(hand, CardPredicates.Presets.LANDS); final int numLandsInHand = landsInHand.size(); // Discard a land @@ -1801,7 +1801,7 @@ public class ComputerUtil { typeList = CardListUtil.getValidCards(typeList, type.split(","), activate.getController(), activate); // is this needed? - typeList = typeList.filter(Presets.UNTAPPED); + typeList = CardListUtil.filter(typeList, Presets.UNTAPPED); if (tap) { typeList.remove(activate); @@ -1841,7 +1841,7 @@ public class ComputerUtil { typeList = CardListUtil.getValidCards(typeList, type.split(","), activate.getController(), activate); // is this needed? - typeList = typeList.filter(Presets.TAPPED); + typeList = CardListUtil.filter(typeList, Presets.TAPPED); if (untap) { typeList.remove(activate); @@ -1910,7 +1910,7 @@ public class ComputerUtil { */ public static CardList getPossibleAttackers() { CardList list = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return CombatUtil.canAttack(c); @@ -2297,8 +2297,8 @@ public class ComputerUtil { if (!discard.getSVar("DiscardMe").equals("")) { return true; } - final CardList landsInPlay = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield).filter(CardPredicates.Presets.LANDS); - final CardList landsInHand = AllZone.getComputerPlayer().getCardsIn(ZoneType.Hand).filter(CardPredicates.Presets.LANDS); + final CardList landsInPlay = CardListUtil.filter(AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.LANDS); + final CardList landsInHand = CardListUtil.filter(AllZone.getComputerPlayer().getCardsIn(ZoneType.Hand), CardPredicates.Presets.LANDS); final CardList nonLandsInHand = CardListUtil.getNotType(AllZone.getComputerPlayer().getCardsIn(ZoneType.Hand), "Land"); final int highestCMC = Math.max(6, Aggregates.max(nonLandsInHand, CardPredicates.Accessors.fnGetCmc)); final int discardCMC = discard.getCMC(); diff --git a/src/main/java/forge/game/player/ComputerUtilAttack.java b/src/main/java/forge/game/player/ComputerUtilAttack.java index 9b47b08fad4..d7563ab34a6 100644 --- a/src/main/java/forge/game/player/ComputerUtilAttack.java +++ b/src/main/java/forge/game/player/ComputerUtilAttack.java @@ -76,10 +76,10 @@ public class ComputerUtilAttack { */ public ComputerUtilAttack(final CardList possibleAttackers, final CardList possibleBlockers) { this.humanList = new CardList(possibleBlockers); - this.humanList = this.humanList.filter(CardPredicates.Presets.CREATURES); + this.humanList = CardListUtil.filter(this.humanList, CardPredicates.Presets.CREATURES); this.computerList = new CardList(possibleAttackers); - this.computerList = this.computerList.filter(CardPredicates.Presets.CREATURES); + this.computerList = CardListUtil.filter(this.computerList, CardPredicates.Presets.CREATURES); this.attackers = this.getPossibleAttackers(possibleAttackers); this.blockers = this.getPossibleBlockers(possibleBlockers, this.attackers); @@ -167,7 +167,7 @@ public class ComputerUtilAttack { */ public final CardList getPossibleAttackers(final CardList in) { CardList list = new CardList(in); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return CombatUtil.canAttack(c); @@ -189,7 +189,7 @@ public class ComputerUtilAttack { */ public final CardList getPossibleBlockers(final CardList blockers, final CardList attackers) { CardList possibleBlockers = new CardList(blockers); - possibleBlockers = possibleBlockers.filter(new Predicate() { + possibleBlockers = CardListUtil.filter(possibleBlockers, new Predicate() { @Override public boolean apply(final Card c) { return canBlockAnAttacker(c, attackers); @@ -847,7 +847,7 @@ public class ComputerUtilAttack { */ public final int countExaltedBonus(final Player player) { CardList list = player.getCardsIn(ZoneType.Battlefield); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return c.hasKeyword("Exalted"); diff --git a/src/main/java/forge/game/player/ComputerUtilBlock.java b/src/main/java/forge/game/player/ComputerUtilBlock.java index 6a682f351ed..63c90ca154a 100644 --- a/src/main/java/forge/game/player/ComputerUtilBlock.java +++ b/src/main/java/forge/game/player/ComputerUtilBlock.java @@ -401,7 +401,7 @@ public class ComputerUtilBlock { final static Predicate rampagesOrNeedsManyToBlock = Predicates.or( CardPredicates.containsKeyword("Rampage"), CardPredicates.containsKeyword("CARDNAME can't be blocked by more than one creature.")); private static Combat makeGangBlocks(final Combat combat) { - CardList currentAttackers = ComputerUtilBlock.getAttackersLeft().filter(Predicates.not(rampagesOrNeedsManyToBlock)); + CardList currentAttackers = CardListUtil.filter(ComputerUtilBlock.getAttackersLeft(), Predicates.not(rampagesOrNeedsManyToBlock)); CardList blockers; // Try to block an attacker without first strike with a gang of first strikers @@ -457,7 +457,7 @@ public class ComputerUtilBlock { // than the attacker // Don't use blockers without First Strike or Double Strike if // attacker has it - usableBlockers = blockers.filter(new Predicate() { + usableBlockers = CardListUtil.filter(blockers, new Predicate() { @Override public boolean apply(final Card c) { if ((attacker.hasKeyword("First Strike") || attacker.hasKeyword("Double Strike")) @@ -598,7 +598,7 @@ public class ComputerUtilBlock { CardList chumpBlockers; CardList tramplingAttackers = CardListUtil.getKeyword(ComputerUtilBlock.getAttackers(), "Trample"); - tramplingAttackers = tramplingAttackers.filter(Predicates.not(rampagesOrNeedsManyToBlock)); + tramplingAttackers = CardListUtil.filter(tramplingAttackers, Predicates.not(rampagesOrNeedsManyToBlock)); // TODO - should check here for a "rampage-like" trigger that replaced // the keyword: @@ -645,7 +645,7 @@ public class ComputerUtilBlock { CardList safeBlockers; CardList blockers; - CardList targetAttackers = ComputerUtilBlock.getBlockedButUnkilled().filter(Predicates.not(rampagesOrNeedsManyToBlock)); + CardList targetAttackers = CardListUtil.filter(ComputerUtilBlock.getBlockedButUnkilled(), Predicates.not(rampagesOrNeedsManyToBlock)); // TODO - should check here for a "rampage-like" trigger that replaced // the keyword: diff --git a/src/main/java/forge/game/player/Player.java b/src/main/java/forge/game/player/Player.java index 628ea23105d..f25e19ba68e 100644 --- a/src/main/java/forge/game/player/Player.java +++ b/src/main/java/forge/game/player/Player.java @@ -1419,7 +1419,7 @@ public abstract class Player extends GameEntity implements Comparable { * @return a CardList with all the cards currently in that player's library */ public final CardList getCardsIn(final ZoneType zone, final String cardName) { - return this.getCardsIn(zone).filter(CardPredicates.nameEquals(cardName)); + return CardListUtil.filter(this.getCardsIn(zone), CardPredicates.nameEquals(cardName)); } /** @@ -1889,7 +1889,7 @@ public abstract class Player extends GameEntity implements Comparable { * @return a {@link forge.Card} object. */ public final Card getPlaneswalker() { - final CardList c = this.getCardsIn(ZoneType.Battlefield).filter(CardPredicates.Presets.PLANEWALKERS); + final CardList c = CardListUtil.filter(this.getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.PLANEWALKERS); if ((null != c) && (c.size() > 0)) { return c.get(0); } else { @@ -2287,7 +2287,7 @@ public abstract class Player extends GameEntity implements Comparable { * @return a boolean. */ public final boolean hasMetalcraft() { - final CardList list = this.getCardsIn(ZoneType.Battlefield).filter(CardPredicates.Presets.ARTIFACTS); + final CardList list = CardListUtil.filter(this.getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.ARTIFACTS); return list.size() >= 3; } diff --git a/src/main/java/forge/game/player/PlayerUtil.java b/src/main/java/forge/game/player/PlayerUtil.java index cc6bb5a6f13..f34d808ddc8 100644 --- a/src/main/java/forge/game/player/PlayerUtil.java +++ b/src/main/java/forge/game/player/PlayerUtil.java @@ -59,7 +59,7 @@ public final class PlayerUtil { // Instead of hardcoded Ali from Cairo like cards, it is now a Keyword CardList list = player.getCardsIn(ZoneType.Battlefield); list = CardListUtil.getKeyword(list, "Damage that would reduce your life total to less than 1 reduces it to 1 instead."); - list = list.filter(new Predicate() { + list = CardListUtil.filter(list, new Predicate() { @Override public boolean apply(final Card c) { return !c.isFaceDown(); diff --git a/src/main/java/forge/game/zone/MagicStack.java b/src/main/java/forge/game/zone/MagicStack.java index 3f86488f627..01c24f098ed 100644 --- a/src/main/java/forge/game/zone/MagicStack.java +++ b/src/main/java/forge/game/zone/MagicStack.java @@ -763,7 +763,7 @@ public class MagicStack extends MyObservable { if (sp.isSpell() && AllZoneUtil.isCardInPlay("Bazaar of Wonders")) { boolean found = false; CardList all = AllZoneUtil.getCardsIn(ZoneType.Battlefield); - all = all.filter(Presets.NON_TOKEN); + all = CardListUtil.filter(all, Presets.NON_TOKEN); final CardList graves = AllZoneUtil.getCardsIn(ZoneType.Graveyard); all.addAll(graves); diff --git a/src/main/java/forge/game/zone/PlayerZoneComesIntoPlay.java b/src/main/java/forge/game/zone/PlayerZoneComesIntoPlay.java index c6280dde862..55621e0b84b 100644 --- a/src/main/java/forge/game/zone/PlayerZoneComesIntoPlay.java +++ b/src/main/java/forge/game/zone/PlayerZoneComesIntoPlay.java @@ -24,6 +24,7 @@ import forge.AllZone; import forge.AllZoneUtil; import forge.Card; import forge.CardList; +import forge.CardListUtil; import forge.CardPredicates.Presets; import forge.Command; import forge.GameActionUtil; @@ -162,7 +163,7 @@ public class PlayerZoneComesIntoPlay extends DefaultPlayerZone { @Override public void resolve() { CardList lands = tisLand.getController().getCardsIn(ZoneType.Battlefield); - lands = lands.filter(Presets.LANDS); + lands = CardListUtil.filter(lands, Presets.LANDS); for (final Card land : lands) { land.tap(); } diff --git a/src/main/java/forge/gui/match/controllers/CDock.java b/src/main/java/forge/gui/match/controllers/CDock.java index 8678e727ec2..87409a2d4da 100644 --- a/src/main/java/forge/gui/match/controllers/CDock.java +++ b/src/main/java/forge/gui/match/controllers/CDock.java @@ -33,6 +33,7 @@ import javax.swing.SwingWorker; import forge.AllZone; import forge.Card; +import forge.CardListUtil; import forge.CardPredicates.Presets; import forge.Command; import forge.Constant; @@ -152,7 +153,7 @@ public enum CDock implements ICDoc { final Player human = AllZone.getHumanPlayer(); if (ph.is(PhaseType.COMBAT_DECLARE_ATTACKERS, human)) { - for (Card c : human.getCardsIn(ZoneType.Battlefield).filter(Presets.CREATURES)) { + for (Card c : CardListUtil.filter(human.getCardsIn(ZoneType.Battlefield), Presets.CREATURES)) { if (!c.isAttacking() && CombatUtil.canAttack(c, AllZone.getCombat())) { AllZone.getCombat().addAttacker(c); }