diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtil.java b/forge-ai/src/main/java/forge/ai/ComputerUtil.java index c144ca7c8ed..4b07f185213 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtil.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtil.java @@ -1343,7 +1343,7 @@ public class ComputerUtil { } final CardCollection typeList = - CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), type.split(","), source.getController(), source, sa); + CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), type, source.getController(), source, sa); for (Card c : typeList) { if (c.getSVar("SacMe").equals("6")) { return true; @@ -1620,7 +1620,7 @@ public class ComputerUtil { objects = AbilityUtils.getDefinedObjects(source, topStack.getParam("Defined"), topStack); } else if (topStack.hasParam("ValidCards")) { CardCollectionView battleField = aiPlayer.getCardsIn(ZoneType.Battlefield); - objects = CardLists.getValidCards(battleField, topStack.getParam("ValidCards").split(","), source.getController(), source, topStack); + objects = CardLists.getValidCards(battleField, topStack.getParam("ValidCards"), source.getController(), source, topStack); } else { return threatened; } diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilAbility.java b/forge-ai/src/main/java/forge/ai/ComputerUtilAbility.java index b590b3e23a3..8766eff1f05 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilAbility.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilAbility.java @@ -36,7 +36,7 @@ public class ComputerUtilAbility { public boolean apply(final Card c) { if (!c.getSVar("NeedsToPlay").isEmpty()) { final String needsToPlay = c.getSVar("NeedsToPlay"); - CardCollection list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), needsToPlay.split(","), c.getController(), c, null); + CardCollection list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), needsToPlay, c.getController(), c, null); if (list.isEmpty()) { return false; } diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java index 6043bfd27f0..eae57125e27 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java @@ -1951,7 +1951,7 @@ public class ComputerUtilCard { CardCollectionView list = game.getCardsIn(ZoneType.Battlefield); - list = CardLists.getValidCards(list, needsToPlay.split(","), card.getController(), card, sa); + list = CardLists.getValidCards(list, needsToPlay, card.getController(), card, sa); if (list.isEmpty()) { return AiPlayDecision.MissingNeededCards; } diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java index 756926fe490..847f2ee12f5 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java @@ -144,7 +144,7 @@ public class ComputerUtilCost { return true; } } - final CardCollection typeList = CardLists.getValidCards(hand, type.split(","), source.getController(), source, sa); + final CardCollection typeList = CardLists.getValidCards(hand, type, source.getController(), source, sa); if (typeList.size() > ai.getMaxHandSize()) { continue; } diff --git a/forge-ai/src/main/java/forge/ai/ability/AnimateAi.java b/forge-ai/src/main/java/forge/ai/ability/AnimateAi.java index 49876c64fb4..0272d980cf6 100644 --- a/forge-ai/src/main/java/forge/ai/ability/AnimateAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/AnimateAi.java @@ -69,14 +69,14 @@ public class AnimateAi extends SpellAbilityAi { final String valid = topStack.getParamOrDefault("SacValid", "Card.Self"); String num = topStack.getParamOrDefault("Amount", "1"); final int nToSac = AbilityUtils.calculateAmount(topStack.getHostCard(), num, topStack); - CardCollection list = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), valid.split(","), + CardCollection list = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), valid, ai.getWeakestOpponent(), topStack.getHostCard(), topStack); list = CardLists.filter(list, CardPredicates.canBeSacrificedBy(topStack, true)); ComputerUtilCard.sortByEvaluateCreature(list); if (!list.isEmpty() && list.size() == nToSac && ComputerUtilCost.canPayCost(sa, ai, sa.isTrigger())) { Card animatedCopy = becomeAnimated(source, sa); list.add(animatedCopy); - list = CardLists.getValidCards(list, valid.split(","), ai.getWeakestOpponent(), topStack.getHostCard(), + list = CardLists.getValidCards(list, valid, ai.getWeakestOpponent(), topStack.getHostCard(), topStack); list = CardLists.filter(list, CardPredicates.canBeSacrificedBy(topStack, true)); if (ComputerUtilCard.evaluateCreature(animatedCopy) < ComputerUtilCard.evaluateCreature(list.get(0)) diff --git a/forge-ai/src/main/java/forge/ai/ability/ChooseCardAi.java b/forge-ai/src/main/java/forge/ai/ability/ChooseCardAi.java index 3690b981f2c..ad73c11051c 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChooseCardAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChooseCardAi.java @@ -184,7 +184,7 @@ public class ChooseCardAi extends SpellAbilityAi { choice = ComputerUtilCard.getBestCreatureAI(options); } else if (logic.equals("Clone")) { final String filter = "Permanent.YouDontCtrl,Permanent.nonLegendary"; - CardCollection newOptions = CardLists.getValidCards(options, filter.split(","), ctrl, host, sa); + CardCollection newOptions = CardLists.getValidCards(options, filter, ctrl, host, sa); if (!newOptions.isEmpty()) { options = newOptions; } @@ -194,7 +194,7 @@ public class ChooseCardAi extends SpellAbilityAi { choice = Aggregates.random(options); } else if (logic.equals("Untap")) { final String filter = "Permanent.YouCtrl,Permanent.tapped"; - CardCollection newOptions = CardLists.getValidCards(options, filter.split(","), ctrl, host, sa); + CardCollection newOptions = CardLists.getValidCards(options, filter, ctrl, host, sa); if (!newOptions.isEmpty()) { options = newOptions; } diff --git a/forge-ai/src/main/java/forge/ai/ability/CloneAi.java b/forge-ai/src/main/java/forge/ai/ability/CloneAi.java index d9a7070f29c..4a719fa2ea5 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CloneAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CloneAi.java @@ -198,7 +198,7 @@ public class CloneAi extends SpellAbilityAi { filter = filter.replace(".nonLegendary+", ".").replace(".nonLegendary", ""); } - CardCollection newOptions = CardLists.getValidCards(options, filter.split(","), ctrl, host, sa); + CardCollection newOptions = CardLists.getValidCards(options, filter, ctrl, host, sa); if (!newOptions.isEmpty()) { options = newOptions; } diff --git a/forge-ai/src/main/java/forge/ai/ability/CopyPermanentAi.java b/forge-ai/src/main/java/forge/ai/ability/CopyPermanentAi.java index f74fa8115ed..990a5596af0 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CopyPermanentAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CopyPermanentAi.java @@ -248,7 +248,7 @@ public class CopyPermanentAi extends SpellAbilityAi { final boolean canCopyLegendary = sa.hasParam("NonLegendary"); final String filter = canCopyLegendary ? "Permanent" : "Permanent.YouDontCtrl,Permanent.nonLegendary"; // TODO add filter to not select Legendary from Other Player when ai already have a Legendary with that name - return CardLists.getValidCards(options, filter.split(","), ctrl, host, sa); + return CardLists.getValidCards(options, filter, ctrl, host, sa); } @Override diff --git a/forge-ai/src/main/java/forge/ai/ability/DamageAllAi.java b/forge-ai/src/main/java/forge/ai/ability/DamageAllAi.java index 56e2bfcd06b..1396fc3a5d3 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DamageAllAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DamageAllAi.java @@ -251,7 +251,7 @@ public class DamageAllAi extends SpellAbilityAi { // TODO: X may be something different than X paid CardCollection list = - CardLists.getValidCards(player.getCardsIn(ZoneType.Battlefield), validC.split(","), source.getController(), source, sa); + CardLists.getValidCards(player.getCardsIn(ZoneType.Battlefield), validC, source.getController(), source, sa); final Predicate filterKillable = new Predicate() { @Override diff --git a/forge-ai/src/main/java/forge/ai/ability/DestroyAllAi.java b/forge-ai/src/main/java/forge/ai/ability/DestroyAllAi.java index c21be6ff6f7..a4cd917937a 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DestroyAllAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DestroyAllAi.java @@ -92,8 +92,8 @@ public class DestroyAllAi extends SpellAbilityAi { // TODO should probably sort results when targeted to use on biggest threat instead of first match for (Player opponent: ai.getOpponents()) { - CardCollection opplist = CardLists.getValidCards(opponent.getCardsIn(ZoneType.Battlefield), valid.split(","), source.getController(), source, sa); - CardCollection ailist = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), valid.split(","), source.getController(), source, sa); + CardCollection opplist = CardLists.getValidCards(opponent.getCardsIn(ZoneType.Battlefield), valid, source.getController(), source, sa); + CardCollection ailist = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), valid, source.getController(), source, sa); opplist = CardLists.filter(opplist, predicate); ailist = CardLists.filter(ailist, predicate); diff --git a/forge-ai/src/main/java/forge/ai/ability/DigUntilAi.java b/forge-ai/src/main/java/forge/ai/ability/DigUntilAi.java index 8d09f66e886..3bbed335861 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DigUntilAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DigUntilAi.java @@ -68,7 +68,7 @@ public class DigUntilAi extends SpellAbilityAi { } else { if (sa.hasParam("Valid")) { final String valid = sa.getParam("Valid"); - if (CardLists.getValidCards(ai.getCardsIn(ZoneType.Library), valid.split(","), source.getController(), source, sa).isEmpty()) { + if (CardLists.getValidCards(ai.getCardsIn(ZoneType.Library), valid, source.getController(), source, sa).isEmpty()) { return false; } } diff --git a/forge-ai/src/main/java/forge/ai/ability/RegenerateAllAi.java b/forge-ai/src/main/java/forge/ai/ability/RegenerateAllAi.java index f4add7b107e..909fe257786 100644 --- a/forge-ai/src/main/java/forge/ai/ability/RegenerateAllAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/RegenerateAllAi.java @@ -29,7 +29,7 @@ public class RegenerateAllAi extends SpellAbilityAi { final String valid = sa.getParamOrDefault("ValidCards", ""); CardCollectionView list = game.getCardsIn(ZoneType.Battlefield); - list = CardLists.getValidCards(list, valid.split(","), hostCard.getController(), hostCard, sa); + list = CardLists.getValidCards(list, valid, hostCard.getController(), hostCard, sa); list = CardLists.filter(list, CardPredicates.isController(ai)); if (list.size() == 0) { diff --git a/forge-ai/src/main/java/forge/ai/ability/SacrificeAi.java b/forge-ai/src/main/java/forge/ai/ability/SacrificeAi.java index 3cf0cb67bcc..87754161cd9 100644 --- a/forge-ai/src/main/java/forge/ai/ability/SacrificeAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/SacrificeAi.java @@ -79,7 +79,7 @@ public class SacrificeAi extends SpellAbilityAi { List list = null; try { - list = CardLists.getValidCards(opp.getCardsIn(ZoneType.Battlefield), valid.split(","), sa.getActivatingPlayer(), source, sa); + list = CardLists.getValidCards(opp.getCardsIn(ZoneType.Battlefield), valid, sa.getActivatingPlayer(), source, sa); } catch (NullPointerException e) { return false; } finally { @@ -141,7 +141,7 @@ public class SacrificeAi extends SpellAbilityAi { List humanList = null; try { - humanList = CardLists.getValidCards(ai.getStrongestOpponent().getCardsIn(ZoneType.Battlefield), valid.split(","), sa.getActivatingPlayer(), source, sa); + humanList = CardLists.getValidCards(ai.getStrongestOpponent().getCardsIn(ZoneType.Battlefield), valid, sa.getActivatingPlayer(), source, sa); } catch (NullPointerException e) { return false; } finally { @@ -155,7 +155,7 @@ public class SacrificeAi extends SpellAbilityAi { } else if (defined.equals("You")) { List computerList = null; try { - computerList = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), valid.split(","), sa.getActivatingPlayer(), source, sa); + computerList = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), valid, sa.getActivatingPlayer(), source, sa); } catch (NullPointerException e) { return false; } finally { diff --git a/forge-ai/src/main/java/forge/ai/ability/TokenAi.java b/forge-ai/src/main/java/forge/ai/ability/TokenAi.java index 4605604cabc..b1ce0ea688a 100644 --- a/forge-ai/src/main/java/forge/ai/ability/TokenAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/TokenAi.java @@ -241,14 +241,14 @@ public class TokenAi extends SpellAbilityAi { final String valid = topStack.getParamOrDefault("SacValid", "Card.Self"); String num = sa.getParamOrDefault("Amount", "1"); final int nToSac = AbilityUtils.calculateAmount(topStack.getHostCard(), num, topStack); - CardCollection list = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), valid.split(","), + CardCollection list = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), valid, ai.getWeakestOpponent(), topStack.getHostCard(), sa); list = CardLists.filter(list, CardPredicates.canBeSacrificedBy(topStack, true)); // only care about saving single creature for now if (!list.isEmpty() && nTokens > 0 && list.size() == nToSac) { ComputerUtilCard.sortByEvaluateCreature(list); list.add(token); - list = CardLists.getValidCards(list, valid.split(","), ai.getWeakestOpponent(), topStack.getHostCard(), sa); + list = CardLists.getValidCards(list, valid, ai.getWeakestOpponent(), topStack.getHostCard(), sa); list = CardLists.filter(list, CardPredicates.canBeSacrificedBy(topStack, true)); return ComputerUtilCard.evaluateCreature(token) < ComputerUtilCard.evaluateCreature(list.get(0)) && list.contains(token); diff --git a/forge-ai/src/main/java/forge/ai/ability/UntapAllAi.java b/forge-ai/src/main/java/forge/ai/ability/UntapAllAi.java index 97d70b3fafa..1535f2a2a23 100644 --- a/forge-ai/src/main/java/forge/ai/ability/UntapAllAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/UntapAllAi.java @@ -26,7 +26,7 @@ public class UntapAllAi extends SpellAbilityAi { } CardCollectionView list = CardLists.filter(aiPlayer.getGame().getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.TAPPED); final String valid = sa.getParamOrDefault("ValidCards", ""); - list = CardLists.getValidCards(list, valid.split(","), source.getController(), source, sa); + list = CardLists.getValidCards(list, valid, source.getController(), source, sa); // don't untap if only opponent benefits PlayerCollection goodControllers = aiPlayer.getAllies(); goodControllers.add(aiPlayer); @@ -43,7 +43,7 @@ public class UntapAllAi extends SpellAbilityAi { if (sa.hasParam("ValidCards")) { String valid = sa.getParam("ValidCards"); CardCollectionView list = CardLists.filter(aiPlayer.getGame().getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.TAPPED); - list = CardLists.getValidCards(list, valid.split(","), source.getController(), source, sa); + list = CardLists.getValidCards(list, valid, source.getController(), source, sa); return mandatory || !list.isEmpty(); } diff --git a/forge-game/src/main/java/forge/game/CardTraitBase.java b/forge-game/src/main/java/forge/game/CardTraitBase.java index d13706a086f..52b6b9722bc 100644 --- a/forge-game/src/main/java/forge/game/CardTraitBase.java +++ b/forge-game/src/main/java/forge/game/CardTraitBase.java @@ -368,7 +368,7 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView, list.addAll(p.getCardsIn(presentZone)); } } - list = CardLists.getValidCards(list, sIsPresent.split(","), this.getHostCard().getController(), this.getHostCard(), this); + list = CardLists.getValidCards(list, sIsPresent, this.getHostCard().getController(), this.getHostCard(), this); final String rightString = presentCompare.substring(2); int right = AbilityUtils.calculateAmount(getHostCard(), rightString, this); @@ -397,7 +397,7 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView, } } - list = CardLists.getValidCards(list, sIsPresent.split(","), this.getHostCard().getController(), this.getHostCard(), this); + list = CardLists.getValidCards(list, sIsPresent, this.getHostCard().getController(), this.getHostCard(), this); final String rightString = presentCompare.substring(2); int right = AbilityUtils.calculateAmount(getHostCard(), rightString, this); diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index b497023ff16..4426492e8c5 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -346,7 +346,7 @@ public class AbilityUtils { candidates = game.getCardsIn(ZoneType.smartValueOf(zone)); validDefined = s[1]; } - cards.addAll(CardLists.getValidCards(candidates, validDefined.split(","), hostCard.getController(), hostCard, sa)); + cards.addAll(CardLists.getValidCards(candidates, validDefined, hostCard.getController(), hostCard, sa)); return cards; } else { CardCollection list = null; @@ -977,7 +977,7 @@ public class AbilityUtils { String var = sa.getParam("AbilityCount"); valid = TextUtil.fastReplace(valid, var, Integer.toString(calculateAmount(source, var, sa))); } - return CardLists.getValidCards(list, valid.split(","), sa.getActivatingPlayer(), source, sa); + return CardLists.getValidCards(list, valid, sa.getActivatingPlayer(), source, sa); } /** @@ -1884,7 +1884,7 @@ public class AbilityUtils { return doXMath(0, expr, c, ctb); } } - list = CardLists.getValidCards(list, k[1].split(","), sa.getActivatingPlayer(), c, sa); + list = CardLists.getValidCards(list, k[1], sa.getActivatingPlayer(), c, sa); if (k[0].contains("TotalToughness")) { return doXMath(Aggregates.sum(list, CardPredicates.Accessors.fnGetNetToughness), expr, c, ctb); } @@ -1911,7 +1911,7 @@ public class AbilityUtils { return doXMath(0, expr, c, ctb); } } - list = CardLists.getValidCards(list, k[1].split(","), sa.getActivatingPlayer(), c, sa); + list = CardLists.getValidCards(list, k[1], sa.getActivatingPlayer(), c, sa); return doXMath(list.size(), expr, c, ctb); } @@ -1940,14 +1940,14 @@ public class AbilityUtils { if (sq[0].startsWith("LastStateBattlefield")) { final String[] k = l[0].split(" "); CardCollection list = new CardCollection(game.getLastStateBattlefield()); - list = CardLists.getValidCards(list, k[1].split(","), player, c, ctb); + list = CardLists.getValidCards(list, k[1], player, c, ctb); return doXMath(list.size(), expr, c, ctb); } if (sq[0].startsWith("LastStateGraveyard")) { final String[] k = l[0].split(" "); CardCollection list = new CardCollection(game.getLastStateGraveyard()); - list = CardLists.getValidCards(list, k[1].split(","), player, c, ctb); + list = CardLists.getValidCards(list, k[1], player, c, ctb); return doXMath(list.size(), expr, c, ctb); } @@ -2176,7 +2176,7 @@ public class AbilityUtils { if (sq[0].startsWith("Devoured")) { final String validDevoured = sq[0].split(" ")[1]; - CardCollection cl = CardLists.getValidCards(c.getDevouredCards(), validDevoured.split(","), player, c, ctb); + CardCollection cl = CardLists.getValidCards(c.getDevouredCards(), validDevoured, player, c, ctb); return doXMath(cl.size(), expr, c, ctb); } @@ -2451,8 +2451,7 @@ public class AbilityUtils { if (sq[0].startsWith("ColorsCtrl")) { final String restriction = l[0].substring(11); - final String[] rest = restriction.split(","); - final CardCollection list = CardLists.getValidCards(player.getCardsIn(ZoneType.Battlefield), rest, player, c, ctb); + final CardCollection list = CardLists.getValidCards(player.getCardsIn(ZoneType.Battlefield), restriction, player, c, ctb); byte n = 0; for (final Card card : list) { n |= card.getColor().getColor(); @@ -2711,8 +2710,7 @@ public class AbilityUtils { // Count$SumPower_valid if (sq[0].startsWith("SumPower")) { final String[] restrictions = l[0].split("_"); - final String[] rest = restrictions[1].split(","); - CardCollection filteredCards = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), rest, player, c, ctb); + CardCollection filteredCards = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), restrictions[1], player, c, ctb); return doXMath(Aggregates.sum(filteredCards, CardPredicates.Accessors.fnGetNetPower), expr, c, ctb); } @@ -2723,9 +2721,8 @@ public class AbilityUtils { if (sq[0].contains("Graveyard")) zone = ZoneType.Graveyard; final String[] restrictions = l[0].split("_"); - final String[] rest = restrictions[1].split(","); CardCollectionView cardsonbattlefield = game.getCardsIn(zone); - CardCollection filteredCards = CardLists.getValidCards(cardsonbattlefield, rest, player, c, ctb); + CardCollection filteredCards = CardLists.getValidCards(cardsonbattlefield, restrictions[1], player, c, ctb); return Aggregates.sum(filteredCards, CardPredicates.Accessors.fnGetCmc); } @@ -2821,8 +2818,7 @@ public class AbilityUtils { if (sq[0].startsWith("GreatestToughness_")) { final String restriction = l[0].substring(18); - final String[] rest = restriction.split(","); - CardCollection list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), rest, player, c, ctb); + CardCollection list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), restriction, player, c, ctb); int highest = 0; for (final Card crd : list) { if (crd.getNetToughness() > highest) { @@ -2834,8 +2830,7 @@ public class AbilityUtils { if (sq[0].startsWith("HighestCMC_")) { final String restriction = l[0].substring(11); - final String[] rest = restriction.split(","); - CardCollection list = CardLists.getValidCards(game.getCardsInGame(), rest, player, c, ctb); + CardCollection list = CardLists.getValidCards(game.getCardsInGame(), restriction, player, c, ctb); int highest = 0; for (final Card crd : list) { // dont check for Split card anymore @@ -2874,8 +2869,7 @@ public class AbilityUtils { if (sq[0].startsWith("DifferentCardNames_")) { final List crdname = Lists.newArrayList(); final String restriction = l[0].substring(19); - final String[] rest = restriction.split(","); - CardCollection list = CardLists.getValidCards(game.getCardsInGame(), rest, player, c, ctb); + CardCollection list = CardLists.getValidCards(game.getCardsInGame(), restriction, player, c, ctb); for (final Card card : list) { String name = card.getName(); // CR 201.2b Those objects have different names only if each of them has at least one name and no two objects in that group have a name in common @@ -2889,8 +2883,7 @@ public class AbilityUtils { if (sq[0].startsWith("DifferentPower_")) { final List powers = Lists.newArrayList(); final String restriction = l[0].substring(15); - final String[] rest = restriction.split(","); - CardCollection list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), rest, player, c, ctb); + CardCollection list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), restriction, player, c, ctb); for (final Card card : list) { Integer pow = card.getNetPower(); if (!powers.contains(pow)) { @@ -2915,8 +2908,7 @@ public class AbilityUtils { if (sq[0].startsWith("ColorsCtrl")) { final String restriction = l[0].substring(11); - final String[] rest = restriction.split(","); - final CardCollection list = CardLists.getValidCards(player.getCardsIn(ZoneType.Battlefield), rest, player, c, ctb); + final CardCollection list = CardLists.getValidCards(player.getCardsIn(ZoneType.Battlefield), restriction, player, c, ctb); byte n = 0; for (final Card card : list) { n |= card.getColor().getColor(); @@ -3417,16 +3409,14 @@ public class AbilityUtils { String[] lparts = l[0].split(" ", 2); final List vZone = ZoneType.listValueOf(lparts[0].split("Valid")[1]); String restrictions = TextUtil.fastReplace(l[0], TextUtil.addSuffix(lparts[0]," "), ""); - final String[] rest = restrictions.split(","); - CardCollection cards = CardLists.getValidCards(game.getCardsIn(vZone), rest, player, source, ctb); + CardCollection cards = CardLists.getValidCards(game.getCardsIn(vZone), restrictions, player, source, ctb); return doXMath(cards.size(), m, source, ctb); } // count valid cards on the battlefield if (l[0].startsWith("Valid ")) { final String restrictions = l[0].substring(6); - final String[] rest = restrictions.split(","); - CardCollection cardsonbattlefield = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), rest, player, source, ctb); + CardCollection cardsonbattlefield = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), restrictions, player, source, ctb); return doXMath(cardsonbattlefield.size(), m, source, ctb); } diff --git a/forge-game/src/main/java/forge/game/ability/effects/AnimateAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/AnimateAllEffect.java index 5a0168055f9..efd631c5773 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/AnimateAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/AnimateAllEffect.java @@ -130,7 +130,7 @@ public class AnimateAllEffect extends AnimateEffectBase { list = getTargetPlayers(sa).getCardsIn(ZoneType.Battlefield); } - list = CardLists.getValidCards(list, valid.split(","), host.getController(), host, sa); + list = CardLists.getValidCards(list, valid, host.getController(), host, sa); for (final Card c : list) { doAnimate(c, sa, power, toughness, types, removeTypes, finalColors, diff --git a/forge-game/src/main/java/forge/game/ability/effects/CharmEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CharmEffect.java index 23caee7e56c..31addb73b60 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CharmEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CharmEffect.java @@ -67,7 +67,7 @@ public class CharmEffect extends SpellAbilityEffect { } else { num = Math.min(AbilityUtils.calculateAmount(source, sa.getParamOrDefault("CharmNum", "1"), sa), list.size()); } - final int min = sa.hasParam("MinCharmNum") ? AbilityUtils.calculateAmount(source, sa.getParamOrDefault("MinCharmNum", "1"), sa) : num; + final int min = sa.hasParam("MinCharmNum") ? AbilityUtils.calculateAmount(source, sa.getParam("MinCharmNum"), sa) : num; boolean repeat = sa.hasParam("CanRepeatModes"); boolean random = sa.hasParam("Random"); @@ -120,7 +120,7 @@ public class CharmEffect extends SpellAbilityEffect { } if (additionalDesc) { - String addDescS = (sa.getParam("AdditionalDescription")); + String addDescS = sa.getParam("AdditionalDescription"); if (optional) { sb.append(". ").append(addDescS.trim()); } else if (addDescS.startsWith(("."))) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/CopySpellAbilityEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CopySpellAbilityEffect.java index 414e344ef6f..0af8297d976 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CopySpellAbilityEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CopySpellAbilityEffect.java @@ -132,7 +132,7 @@ public class CopySpellAbilityEffect extends SpellAbilityEffect { } } } - valid = CardLists.getValidCards(valid, type.split(","), chosenSA.getActivatingPlayer(), chosenSA.getHostCard(), sa); + valid = CardLists.getValidCards(valid, type, chosenSA.getActivatingPlayer(), chosenSA.getHostCard(), sa); Card originalTarget = Iterables.getFirst(getTargetCards(chosenSA), null); valid.remove(originalTarget); diff --git a/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java index bce2405944c..5706e0f1732 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java @@ -209,7 +209,7 @@ public class DigEffect extends SpellAbilityEffect { if (changeValid.contains("ChosenType")) { changeValid = changeValid.replace("ChosenType", host.getChosenType()); } - valid = CardLists.getValidCards(top, changeValid.split(","), cont, host, sa); + valid = CardLists.getValidCards(top, changeValid, cont, host, sa); if (totalCMC) { valid = CardLists.getValidCards(valid, "Card.cmcLE" + totcmc, cont, host, sa); } diff --git a/forge-game/src/main/java/forge/game/ability/effects/DiscardEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DiscardEffect.java index e07b925e3ff..f9b9160b9e1 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DiscardEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DiscardEffect.java @@ -233,7 +233,7 @@ public class DiscardEffect extends SpellAbilityEffect { "X", Integer.toString(AbilityUtils.calculateAmount(source, "X", sa))); } - toBeDiscarded = CardLists.getValidCards(dPHand, valid.split(","), source.getController(), source, sa); + toBeDiscarded = CardLists.getValidCards(dPHand, valid, source.getController(), source, sa); toBeDiscarded = CardLists.filter(toBeDiscarded, Presets.NON_TOKEN); if (toBeDiscarded.size() > 1) { toBeDiscarded = GameActionUtil.orderCardsByTheirOwners(game, toBeDiscarded, ZoneType.Graveyard, sa); @@ -250,8 +250,7 @@ public class DiscardEffect extends SpellAbilityEffect { } final String valid = sa.getParamOrDefault("DiscardValid", "Card"); - String[] dValid = valid.split(","); - CardCollection validCards = CardLists.getValidCards(dPHand, dValid, source.getController(), source, sa); + CardCollection validCards = CardLists.getValidCards(dPHand, valid, source.getController(), source, sa); Player chooser = p; if (mode.equals("RevealYouChoose")) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/RegenerateAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RegenerateAllEffect.java index f936eb2e662..16587a8e95b 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RegenerateAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RegenerateAllEffect.java @@ -29,7 +29,7 @@ public class RegenerateAllEffect extends RegenerateBaseEffect { final String valid = sa.getParamOrDefault("ValidCards", ""); CardCollectionView list = game.getCardsIn(ZoneType.Battlefield); - list = CardLists.getValidCards(list, valid.split(","), hostCard.getController(), hostCard, sa); + list = CardLists.getValidCards(list, valid, hostCard.getController(), hostCard, sa); // create Effect for Regeneration createRegenerationEffect(sa, list); diff --git a/forge-game/src/main/java/forge/game/ability/effects/RepeatEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RepeatEffect.java index 43cb3018645..ede9d56820f 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RepeatEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RepeatEffect.java @@ -84,7 +84,7 @@ public class RepeatEffect extends SpellAbilityEffect { } else { list = game.getCardsIn(ZoneType.Battlefield); } - list = CardLists.getValidCards(list, repeatPresent.split(","), sa.getActivatingPlayer(), sa.getHostCard(), sa); + list = CardLists.getValidCards(list, repeatPresent, sa.getActivatingPlayer(), sa.getHostCard(), sa); final String rightString = repeatCompare.substring(2); int right = AbilityUtils.calculateAmount(sa.getHostCard(), rightString, sa); diff --git a/forge-game/src/main/java/forge/game/ability/effects/UnattachAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/UnattachAllEffect.java index e3f834be626..c25aae259d5 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/UnattachAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/UnattachAllEffect.java @@ -140,7 +140,7 @@ public class UnattachAllEffect extends SpellAbilityEffect { String valid = sa.getParam("UnattachValid"); CardCollectionView unattachList = game.getCardsIn(ZoneType.Battlefield); - unattachList = CardLists.getValidCards(unattachList, valid.split(","), source.getController(), source, sa); + unattachList = CardLists.getValidCards(unattachList, valid, source.getController(), source, sa); for (final Card c : unattachList) { handleUnattachment((GameEntity) o, c); } diff --git a/forge-game/src/main/java/forge/game/ability/effects/UntapAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/UntapAllEffect.java index 89e5ec12511..da5a181d6b7 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/UntapAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/UntapAllEffect.java @@ -37,7 +37,7 @@ public class UntapAllEffect extends SpellAbilityEffect { } list = list2; } - list = CardLists.getValidCards(list, valid.split(","), card.getController(), card, sa); + list = CardLists.getValidCards(list, valid, card.getController(), card, sa); boolean remember = sa.hasParam("RememberUntapped"); for (Card c : list) { diff --git a/forge-game/src/main/java/forge/game/card/CardZoneTable.java b/forge-game/src/main/java/forge/game/card/CardZoneTable.java index cea052c8179..f0e9bb8d387 100644 --- a/forge-game/src/main/java/forge/game/card/CardZoneTable.java +++ b/forge-game/src/main/java/forge/game/card/CardZoneTable.java @@ -90,7 +90,7 @@ public class CardZoneTable extends ForwardingTable defenders = new FCollection<>(); for (Card attacker : attackers) { defenders.add(attacker.getGame().getCombat().getDefenderByAttacker(attacker)); diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerDrawn.java b/forge-game/src/main/java/forge/game/trigger/TriggerDrawn.java index 62d7b2f7f6d..02d7abc6527 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerDrawn.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerDrawn.java @@ -74,7 +74,7 @@ public class TriggerDrawn extends Trigger { final String sIsPresent = this.getParam("ValidPlayerControls"); final Player p = ((Player)runParams.get(AbilityKey.Player)); CardCollection list = (CardCollection) p.getCardsIn(ZoneType.Battlefield); - list = CardLists.getValidCards(list, sIsPresent.split(","), this.getHostCard().getController(), + list = CardLists.getValidCards(list, sIsPresent, this.getHostCard().getController(), this.getHostCard(), this); if (list.size() == 0) { return false; diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerLifeGained.java b/forge-game/src/main/java/forge/game/trigger/TriggerLifeGained.java index e46e0ab46e9..fe7d4d23a29 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerLifeGained.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerLifeGained.java @@ -64,7 +64,7 @@ public class TriggerLifeGained extends Trigger { final String sIsPresent = this.getParam("ValidPlayerControls"); final Player p = ((Player)runParams.get(AbilityKey.Player)); CardCollection list = (CardCollection) p.getCardsIn(ZoneType.Battlefield); - list = CardLists.getValidCards(list, sIsPresent.split(","), this.getHostCard().getController(), + list = CardLists.getValidCards(list, sIsPresent, this.getHostCard().getController(), this.getHostCard(), this); if (list.size() == 0) { return false;