From ea48f28882edd246feb36d77440d6acf3e1ea021 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Wed, 2 Dec 2020 13:00:56 +0100 Subject: [PATCH] CurrentCastSpells: dont use CardCollection on them --- .../java/forge/game/ability/AbilityUtils.java | 12 +++-------- .../java/forge/game/card/CardFactoryUtil.java | 21 +++++++------------ .../main/java/forge/game/card/CardLists.java | 8 +++++++ .../main/java/forge/game/zone/MagicStack.java | 2 +- 4 files changed, 20 insertions(+), 23 deletions(-) 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 88e50ca29bc..7c3dd5d85e7 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -700,7 +700,7 @@ public class AbilityUtils { } */ - CardCollectionView list; + Iterable list; if (calcX[0].startsWith("Sacrificed")) { list = sa.getRootAbility().getPaidList("Sacrificed"); } @@ -737,17 +737,11 @@ public class AbilityUtils { } else if (calcX[0].startsWith("TriggerRemembered")) { final SpellAbility root = sa.getRootAbility(); - CardCollection result = new CardCollection(); - for (Object o : root.getTriggerRemembered()) { - if (o instanceof Card) { - result.add((Card) o); - } - } - list = result; + list = Iterables.filter(root.getTriggerRemembered(), Card.class); } else if (calcX[0].startsWith("TriggerObjects")) { final SpellAbility root = sa.getRootAbility(); - list = (CardCollection) root.getTriggeringObject(AbilityKey.fromString(calcX[0].substring(14))); + list = Iterables.filter((Iterable) root.getTriggeringObject(AbilityKey.fromString(calcX[0].substring(14))), Card.class); } else if (calcX[0].startsWith("Triggered")) { final SpellAbility root = sa.getRootAbility(); diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index c8325592e0c..1af50662bd9 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -386,13 +386,7 @@ public class CardFactoryUtil { } if (s.startsWith("Valid")) { - final CardCollection cards = new CardCollection(); - for (Object o : objects) { - if (o instanceof Card) { - cards.add((Card) o); - } - } - return CardFactoryUtil.handlePaid(cards, s, source); + return CardFactoryUtil.handlePaid(Iterables.filter(objects, Card.class), s, source); } int n = s.startsWith("Amount") ? objects.size() : 0; @@ -1836,7 +1830,7 @@ public class CardFactoryUtil { * a {@link forge.game.card.Card} object. * @return a int. */ - public static int handlePaid(final CardCollectionView paidList, final String string, final Card source) { + public static int handlePaid(final Iterable paidList, final String string, final Card source) { if (paidList == null) { if (string.contains(".")) { final String[] splitString = string.split("\\.", 2); @@ -1846,11 +1840,12 @@ public class CardFactoryUtil { } } if (string.startsWith("Amount")) { + int size = Iterables.size(paidList); if (string.contains(".")) { final String[] splitString = string.split("\\.", 2); - return doXMath(paidList.size(), splitString[1], source); + return doXMath(size, splitString[1], source); } else { - return paidList.size(); + return size; } } @@ -1875,18 +1870,18 @@ public class CardFactoryUtil { final String[] splitString = string.split("/", 2); String valid = splitString[0].substring(6); - final CardCollection list = CardLists.getValidCards(paidList, valid, source.getController(), source); + final List list = CardLists.getValidCardsAsList(paidList, valid, source.getController(), source); return doXMath(list.size(), splitString.length > 1 ? splitString[1] : null, source); } String filteredString = string; - CardCollection filteredList = new CardCollection(paidList); + Iterable filteredList = paidList; final String[] filter = filteredString.split("_"); if (string.startsWith("FilterControlledBy")) { final String pString = filter[0].substring(18); FCollectionView controllers = AbilityUtils.getDefinedPlayers(source, pString, null); - filteredList = CardLists.filterControlledBy(filteredList, controllers); + filteredList = CardLists.filterControlledByAsList(filteredList, controllers); filteredString = TextUtil.fastReplace(filteredString, pString, ""); filteredString = TextUtil.fastReplace(filteredString, "FilterControlledBy_", ""); } diff --git a/forge-game/src/main/java/forge/game/card/CardLists.java b/forge-game/src/main/java/forge/game/card/CardLists.java index cbb9a147018..5865184e728 100644 --- a/forge-game/src/main/java/forge/game/card/CardLists.java +++ b/forge-game/src/main/java/forge/game/card/CardLists.java @@ -204,6 +204,14 @@ public class CardLists { return CardLists.filter(cardList, CardPredicates.isControlledByAnyOf(player)); } + public static List filterControlledByAsList(Iterable cardList, Player player) { + return CardLists.filterAsList(cardList, CardPredicates.isController(player)); + } + + public static List filterControlledByAsList(Iterable cardList, FCollectionView player) { + return CardLists.filterAsList(cardList, CardPredicates.isControlledByAnyOf(player)); + } + public static CardCollection getValidCards(Iterable cardList, String[] restrictions, Player sourceController, Card source, SpellAbility spellAbility) { return CardLists.filter(cardList, CardPredicates.restriction(restrictions, sourceController, source, spellAbility)); } diff --git a/forge-game/src/main/java/forge/game/zone/MagicStack.java b/forge-game/src/main/java/forge/game/zone/MagicStack.java index ab47f40707a..f19df171ea5 100644 --- a/forge-game/src/main/java/forge/game/zone/MagicStack.java +++ b/forge-game/src/main/java/forge/game/zone/MagicStack.java @@ -297,7 +297,7 @@ public class MagicStack /* extends MyObservable */ implements Iterable