diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index fc2466e2504..c7ae580d3eb 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -6711,7 +6711,7 @@ public class Card extends GameEntity implements Comparable { return false; } } else if (property.startsWith("TopGraveyard")) { - final List list = this.getOwner().getCardsIn(ZoneType.Graveyard); + final List list = new ArrayList(this.getOwner().getCardsIn(ZoneType.Graveyard)); Collections.reverse(list); if (list.isEmpty() || !this.equals(list.get(0))) { return false; @@ -6834,11 +6834,8 @@ public class Card extends GameEntity implements Comparable { final String restriction = property.split("sharesNameWith ")[1]; if (restriction.equals("YourGraveyard")) { final List list = sourceController.getCardsIn(ZoneType.Graveyard); - if (list.isEmpty()) { - return false; - } boolean shares = false; - for (final Card card : sourceController.getCardsIn(ZoneType.Graveyard)) { + for (final Card card : list) { if (this.getName().equals(card.getName())) { shares = true; } diff --git a/src/main/java/forge/GameAction.java b/src/main/java/forge/GameAction.java index d2d03260492..574cf4b6bae 100644 --- a/src/main/java/forge/GameAction.java +++ b/src/main/java/forge/GameAction.java @@ -472,7 +472,7 @@ public class GameAction { final Player owner = c.getOwner(); final PlayerZone grave = owner.getZone(ZoneType.Graveyard); final PlayerZone exile = owner.getZone(ZoneType.Exile); - final List ownerBoard = owner.getCardsIn(ZoneType.Battlefield); + final List ownerBoard = new ArrayList(owner.getCardsIn(ZoneType.Battlefield)); if (c.getName().equals("Nissa's Chosen") && origZone.is(ZoneType.Battlefield)) { return this.moveToLibrary(c, -1); @@ -497,7 +497,8 @@ public class GameAction { // Recover keyword if (c.isCreature() && origZone.is(ZoneType.Battlefield)) { - for (final Card recoverable : c.getOwner().getCardsIn(ZoneType.Graveyard)) { + List cards = new ArrayList(c.getOwner().getCardsIn(ZoneType.Graveyard)); + for (final Card recoverable : cards) { if (recoverable.hasStartOfKeyword("Recover") && !recoverable.equals(c)) { final String recoverCost = recoverable.getKeyword().get(recoverable.getKeywordPosition("Recover")) diff --git a/src/main/java/forge/GameActionUtil.java b/src/main/java/forge/GameActionUtil.java index 7915de33047..5f4db35bbcf 100644 --- a/src/main/java/forge/GameActionUtil.java +++ b/src/main/java/forge/GameActionUtil.java @@ -443,7 +443,8 @@ public final class GameActionUtil { Player p = Singletons.getControl().getPlayer(); if ("All".equals(part.getType())) { if (showYesNoDialog(source, "Do you want to exile all cards in your graveyard?")) { - for (final Card card : p.getCardsIn(ZoneType.Graveyard)) { + List cards = new ArrayList(p.getCardsIn(ZoneType.Graveyard)); + for (final Card card : cards) { Singletons.getModel().getGame().getAction().exile(card); } } else { @@ -454,8 +455,7 @@ public final class GameActionUtil { } else { CostExile costExile = (CostExile) part; ZoneType from = costExile.getFrom(); - List list = p.getCardsIn(from); - list = CardLists.getValidCards(list, part.getType().split(";"), p, source); + List list = CardLists.getValidCards(p.getCardsIn(from), part.getType().split(";"), p, source); final int nNeeded = AbilityFactory.calculateAmount(source, part.getAmount(), ability); if (list.size() >= nNeeded) { for (int i = 0; i < nNeeded; i++) { @@ -760,8 +760,7 @@ public final class GameActionUtil { @Override public void resolve() { for (int i = 0; i < damage; i++) { - List nonTokens = player.getCardsIn(ZoneType.Battlefield); - nonTokens = CardLists.filter(nonTokens, Presets.NON_TOKEN); + List nonTokens = CardLists.filter(player.getCardsIn(ZoneType.Battlefield), Presets.NON_TOKEN); if (nonTokens.size() == 0) { player.loseConditionMet(GameLossReason.SpellEffect, lich.getName()); } else { @@ -1198,16 +1197,13 @@ public final class GameActionUtil { } // execute() private boolean getsBonus(final Card c) { - List list = c.getController().getCardsIn(ZoneType.Battlefield); - list = CardLists.filter(list, new Predicate() { - @Override - public boolean apply(final Card c) { - return c.getName().equals("Guan Yu, Sainted Warrior") - || c.getName().equals("Zhang Fei, Fierce Warrior"); + for (Card card : c.getController().getCardsIn(ZoneType.Battlefield)) { + if (card.getName().equals("Guan Yu, Sainted Warrior") + || card.getName().equals("Zhang Fei, Fierce Warrior")) { + return true; } - }); - - return list.size() > 0; + } + return false; } }; // Liu_Bei diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java index c914f7b4599..ea55d5bc578 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java @@ -316,8 +316,7 @@ public class AbilityFactoryCounters { return false; } - list = player.getCardsIn(ZoneType.Battlefield); - list = CardLists.filter(list, new Predicate() { + list = CardLists.filter(player.getCardsIn(ZoneType.Battlefield), new Predicate() { @Override public boolean apply(final Card c) { return c.canBeTargetedBy(sa) && !c.hasKeyword("CARDNAME can't have counters placed on it.") @@ -458,7 +457,6 @@ public class AbilityFactoryCounters { boolean chance = true; final Target abTgt = sa.getTarget(); final Card source = sa.getSourceCard(); - List list; Card choice = null; final String type = params.get("CounterType"); final String amountStr = params.get("CounterNum"); @@ -466,10 +464,9 @@ public class AbilityFactoryCounters { final Player player = af.isCurse() ? ai.getOpponent() : ai; - list = player.getCardsIn(ZoneType.Battlefield); - if (abTgt != null) { - list = CardLists.getValidCards(list, abTgt.getValidTgts(), source.getController(), source); + List list = + CardLists.getValidCards(player.getCardsIn(ZoneType.Battlefield), abTgt.getValidTgts(), source.getController(), source); if (list.size() == 0) { return false; @@ -579,8 +576,7 @@ public class AbilityFactoryCounters { // things like Powder Keg, which are way too complex for the AI } } else { - list = player.getCardsIn(ZoneType.Battlefield); - list = CardLists.getTargetableCards(list, sa); + list = CardLists.getTargetableCards(player.getCardsIn(ZoneType.Battlefield), sa); list = CardLists.getValidCards(list, abTgt.getValidTgts(), source.getController(), source); if (list.isEmpty() && mandatory) { @@ -1447,8 +1443,7 @@ public class AbilityFactoryCounters { - List cperms = ai.getCardsIn(ZoneType.Battlefield); - cperms = CardLists.filter(cperms, new Predicate() { + List cperms = CardLists.filter(ai.getCardsIn(ZoneType.Battlefield), new Predicate() { @Override public boolean apply(final Card crd) { for (final Counters c1 : Counters.values()) { @@ -1460,8 +1455,7 @@ public class AbilityFactoryCounters { } }); - List hperms = ai.getOpponent().getCardsIn(ZoneType.Battlefield); - hperms = CardLists.filter(hperms, new Predicate() { + List hperms = CardLists.filter(ai.getOpponent().getCardsIn(ZoneType.Battlefield), new Predicate() { @Override public boolean apply(final Card crd) { for (final Counters c1 : Counters.values()) { @@ -1853,11 +1847,8 @@ public class AbilityFactoryCounters { final boolean curse = af.isCurse(); final Target tgt = sa.getTarget(); - hList = ai.getOpponent().getCardsIn(ZoneType.Battlefield); - cList = ai.getCardsIn(ZoneType.Battlefield); - - hList = CardLists.getValidCards(hList, valid, source.getController(), source); - cList = CardLists.getValidCards(cList, valid, source.getController(), source); + hList = CardLists.getValidCards(ai.getOpponent().getCardsIn(ZoneType.Battlefield), valid, source.getController(), source); + cList = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), valid, source.getController(), source); if (abCost != null) { // AI currently disabled for these costs @@ -2563,14 +2554,12 @@ public class AbilityFactoryCounters { } } else { // targeted final Player player = af.isCurse() ? ai.getOpponent() : ai; - List list = player.getCardsIn(ZoneType.Battlefield); - list = CardLists.getTargetableCards(list, sa); + List list = CardLists.getTargetableCards(player.getCardsIn(ZoneType.Battlefield), sa); list = CardLists.getValidCards(list, abTgt.getValidTgts(), host.getController(), host); if (list.isEmpty() && mandatory) { // If there isn't any prefered cards to target, gotta choose // non-preferred ones - list = player.getOpponent().getCardsIn(ZoneType.Battlefield); - list = CardLists.getTargetableCards(list, sa); + list = CardLists.getTargetableCards(player.getOpponent().getCardsIn(ZoneType.Battlefield), sa); list = CardLists.getValidCards(list, abTgt.getValidTgts(), host.getController(), host); preferred = false; } diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryPreventDamage.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryPreventDamage.java index 31382b9bde6..a766b8e5427 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryPreventDamage.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryPreventDamage.java @@ -349,8 +349,7 @@ public class AbilityFactoryPreventDamage { final List threatenedTargets = new ArrayList(); // filter AIs battlefield by what I can target - List targetables = ai.getCardsIn(ZoneType.Battlefield); - targetables = CardLists.getValidCards(targetables, tgt.getValidTgts(), ai, hostCard); + List targetables = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), tgt.getValidTgts(), ai, hostCard); for (final Card c : targetables) { if (objects.contains(c)) { diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java index 43cc18f69bb..c866d9220cb 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java @@ -1737,10 +1737,8 @@ public class AbilityFactoryPump { } final Player opp = ai.getOpponent(); - List comp = ai.getCardsIn(ZoneType.Battlefield); - comp = CardLists.getValidCards(comp, valid, source.getController(), source); - List human = opp.getCardsIn(ZoneType.Battlefield); - human = CardLists.getValidCards(human, valid, source.getController(), source); + List comp = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), valid, source.getController(), source); + List human = CardLists.getValidCards(opp.getCardsIn(ZoneType.Battlefield), valid, source.getController(), source); final Target tgt = sa.getTarget(); if (tgt != null && sa.canTarget(opp) && params.containsKey("IsCurse")) { diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryRegenerate.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryRegenerate.java index 514fd4f52c6..e812e42d750 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryRegenerate.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryRegenerate.java @@ -319,8 +319,7 @@ public class AbilityFactoryRegenerate { } else { tgt.resetTargets(); // filter AIs battlefield by what I can target - List targetables = ai.getCardsIn(ZoneType.Battlefield); - targetables = CardLists.getValidCards(targetables, tgt.getValidTgts(), ai, hostCard); + List targetables = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), tgt.getValidTgts(), ai, hostCard); targetables = CardLists.getTargetableCards(targetables, sa); if (targetables.size() == 0) { diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java b/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java index a56b3b8889d..f99bb564c2d 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java @@ -284,8 +284,8 @@ public class AbilityFactorySacrifice { num = (num == null) ? "1" : num; final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), num, sa); - List list = ai.getOpponent().getCardsIn(ZoneType.Battlefield); - list = CardLists.getValidCards(list, valid.split(","), sa.getActivatingPlayer(), sa.getSourceCard()); + List list = + CardLists.getValidCards(ai.getOpponent().getCardsIn(ZoneType.Battlefield), valid.split(","), sa.getActivatingPlayer(), sa.getSourceCard()); if (list.size() == 0) { return false; @@ -425,13 +425,8 @@ public class AbilityFactorySacrifice { amount = Math.min(ComputerUtil.determineLeftoverMana(sa, ai), amount); } - List humanList = opp.getCardsIn(ZoneType.Battlefield); - humanList = CardLists.getValidCards(humanList, valid.split(","), sa.getActivatingPlayer(), sa.getSourceCard()); - List computerList = ai.getCardsIn(ZoneType.Battlefield); - if (defined.equals("Opponent")) { - computerList = new ArrayList(); - } - computerList = CardLists.getValidCards(computerList, valid.split(","), sa.getActivatingPlayer(), sa.getSourceCard()); + List humanList = + CardLists.getValidCards(opp.getCardsIn(ZoneType.Battlefield), valid.split(","), sa.getActivatingPlayer(), sa.getSourceCard()); // Since all of the cards have remAIDeck:True, I enabled 1 for 1 // (or X for X) trades for special decks @@ -439,8 +434,8 @@ public class AbilityFactorySacrifice { return false; } } else if (defined.equals("You")) { - List computerList = ai.getCardsIn(ZoneType.Battlefield); - computerList = CardLists.getValidCards(computerList, valid.split(","), sa.getActivatingPlayer(), sa.getSourceCard()); + List computerList = + CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), valid.split(","), sa.getActivatingPlayer(), sa.getSourceCard()); for (Card c : computerList) { if (!c.getSVar("SacMe").equals("") || CardFactoryUtil.evaluateCreature(c) <= 135) { return true; @@ -565,8 +560,7 @@ public class AbilityFactorySacrifice { */ public static List sacrificeHuman(final Player p, final int amount, final String valid, final SpellAbility sa, final boolean destroy, final boolean optional) { - List battlefield = p.getCardsIn(ZoneType.Battlefield); - List list = AbilityFactory.filterListByType(battlefield, valid, sa); + List list = AbilityFactory.filterListByType(p.getCardsIn(ZoneType.Battlefield), valid, sa); List sacList = new ArrayList(); for (int i = 0; i < amount; i++) { @@ -856,11 +850,10 @@ public class AbilityFactorySacrifice { valid = valid.replace("X", Integer.toString(xPay)); } - List humanlist = ai.getOpponent().getCardsIn(ZoneType.Battlefield); - List computerlist = ai.getCardsIn(ZoneType.Battlefield); - - humanlist = CardLists.getValidCards(humanlist, valid.split(","), source.getController(), source); - computerlist = CardLists.getValidCards(computerlist, valid.split(","), source.getController(), source); + List humanlist = + CardLists.getValidCards(ai.getOpponent().getCardsIn(ZoneType.Battlefield), valid.split(","), source.getController(), source); + List computerlist = + CardLists.getValidCards(computerlist = ai.getCardsIn(ZoneType.Battlefield), valid.split(","), source.getController(), source); if (abCost != null) { // AI currently disabled for some costs diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryZoneAffecting.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryZoneAffecting.java index a4d6cecf7bd..972a7b7cdae 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryZoneAffecting.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryZoneAffecting.java @@ -924,7 +924,8 @@ public class AbilityFactoryZoneAffecting { if (params.get("NumCards").equals("X") && source.getSVar("X").startsWith("Count$xPaid")) { // Set PayX here to maximum value. - final int cardsToDiscard = Math.min(ComputerUtil.determineLeftoverMana(sa, ai), ai.getOpponent().getCardsIn(ZoneType.Library).size()); + final int cardsToDiscard = + Math.min(ComputerUtil.determineLeftoverMana(sa, ai), ai.getOpponent().getCardsIn(ZoneType.Library).size()); source.setSVar("PayX", Integer.toString(cardsToDiscard)); if (cardsToDiscard <= 0) { return false; diff --git a/src/main/java/forge/card/abilityfactory/effects/AnimateAllEffect.java b/src/main/java/forge/card/abilityfactory/effects/AnimateAllEffect.java index e0096397321..a50cf2a8f6a 100644 --- a/src/main/java/forge/card/abilityfactory/effects/AnimateAllEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/AnimateAllEffect.java @@ -169,7 +169,7 @@ public class AnimateAllEffect extends SpellEffect if ((tgtPlayers == null) || tgtPlayers.isEmpty()) { list = Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield); } else { - list = tgtPlayers.get(0).getCardsIn(ZoneType.Battlefield); + list = new ArrayList(tgtPlayers.get(0).getCardsIn(ZoneType.Battlefield)); } list = CardLists.getValidCards(list, valid.split(","), host.getController(), host); diff --git a/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java b/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java index d248b893036..3142a1fd0d0 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java @@ -262,7 +262,7 @@ class CardFactoryArtifacts { @Override public void resolve() { final Player target = this.getTargetPlayer(); - final List library = this.getTargetPlayer().getCardsIn(ZoneType.Library); + final List library = new ArrayList(this.getTargetPlayer().getCardsIn(ZoneType.Library)); boolean loop = true; final List grinding = new ArrayList(); diff --git a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java index ff56950d4a4..c91f267315a 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java @@ -829,8 +829,7 @@ public class CardFactoryCreatures { final Player player = card.getController(); final Player opp = player.getOpponent(); int max = 0; - List play = opp.getCardsIn(ZoneType.Battlefield); - play = CardLists.filter(play, Presets.NON_TOKEN); + List play = CardLists.filter(opp.getCardsIn(ZoneType.Battlefield), Presets.NON_TOKEN); play = CardLists.filter(play, Presets.WHITE); max += play.size(); @@ -1098,7 +1097,7 @@ public class CardFactoryCreatures { // name a card final String choice = JOptionPane.showInputDialog(null, "Name a card", cardName, JOptionPane.QUESTION_MESSAGE); - final List hand = this.getTargetPlayer().getCardsIn(ZoneType.Hand); + final List hand = new ArrayList(this.getTargetPlayer().getCardsIn(ZoneType.Hand)); int numCards = card.getXManaCostPaid(); numCards = Math.min(hand.size(), numCards); diff --git a/src/main/java/forge/card/cardfactory/CardFactoryEnchantments.java b/src/main/java/forge/card/cardfactory/CardFactoryEnchantments.java index d12694c019b..aca1c025450 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryEnchantments.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryEnchantments.java @@ -91,10 +91,9 @@ class CardFactoryEnchantments { @Override public void showMessage() { final Player human = Singletons.getControl().getPlayer(); - List grave = human.getCardsIn(ZoneType.Graveyard); - List aiGrave = human.getOpponent().getCardsIn(ZoneType.Graveyard); - grave = CardLists.filter(grave, CardPredicates.Presets.CREATURES); - aiGrave = CardLists.filter(aiGrave, CardPredicates.Presets.CREATURES); + List grave = CardLists.filter(human.getCardsIn(ZoneType.Graveyard), CardPredicates.Presets.CREATURES); + List aiGrave = + CardLists.filter(human.getOpponent().getCardsIn(ZoneType.Graveyard), CardPredicates.Presets.CREATURES); if (this.once || ((grave.size() < 2) && (aiGrave.size() < 2))) { this.once = false; @@ -112,7 +111,8 @@ class CardFactoryEnchantments { final Card c = GuiChoose.one("Choose first creature to exile", chooseGrave); if (c != null) { - List newGrave = CardLists.filter(c.getOwner().getCardsIn(ZoneType.Graveyard), CardPredicates.Presets.CREATURES); + List newGrave = + CardLists.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 f153a935aac..8a9a2e37a9e 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryInstants.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryInstants.java @@ -124,7 +124,7 @@ public class CardFactoryInstants { } public void humanResolve() { - final List libraryList = card.getController().getCardsIn(ZoneType.Library); + final List libraryList = new ArrayList(card.getController().getCardsIn(ZoneType.Library)); final List selectedCards = new ArrayList(); Object o = GuiChoose.oneOrNone("Select first card", libraryList); @@ -230,7 +230,7 @@ public class CardFactoryInstants { final Player player = card.getController(); final int max = card.getXManaCostPaid(); - final List graveList = tPlayer.getCardsIn(ZoneType.Graveyard); + final List graveList = new ArrayList(tPlayer.getCardsIn(ZoneType.Graveyard)); final int x = Math.min(max, graveList.size()); if (player.isHuman()) { diff --git a/src/main/java/forge/card/cardfactory/CardFactorySorceries.java b/src/main/java/forge/card/cardfactory/CardFactorySorceries.java index b415f345d64..af35f3a5a38 100644 --- a/src/main/java/forge/card/cardfactory/CardFactorySorceries.java +++ b/src/main/java/forge/card/cardfactory/CardFactorySorceries.java @@ -496,7 +496,7 @@ public class CardFactorySorceries { @Override public void resolve() { final Player player = this.getTargetPlayer(); - final List lib = player.getCardsIn(ZoneType.Library); + final List lib = new ArrayList(player.getCardsIn(ZoneType.Library)); for (final Card c : Iterables.filter(player.getCardsIn(ZoneType.Graveyard), nonBasicLands)) { for (final Card rem : Iterables.filter(lib, CardPredicates.nameEquals(c.getName()))) { @@ -1152,8 +1152,7 @@ public class CardFactorySorceries { @Override public void showMessage() { - List grave = card.getController().getCardsIn(ZoneType.Graveyard); - grave = CardLists.filter(grave, Presets.CREATURES); + List grave = CardLists.filter(card.getController().getCardsIn(ZoneType.Graveyard), Presets.CREATURES); grave = CardLists.filter(grave, new Predicate() { @Override public boolean apply(final Card c) { @@ -1300,9 +1299,9 @@ public class CardFactorySorceries { final ArrayList display = new ArrayList(); // get all - final List creatures = CardLists.filter(Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield), Presets.CREATURES); - List grave = card.getController().getCardsIn(ZoneType.Graveyard); - grave = CardLists.filter(grave, Presets.CREATURES); + final List creatures = + CardLists.filter(Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield), Presets.CREATURES); + List grave = CardLists.filter(card.getController().getCardsIn(ZoneType.Graveyard), Presets.CREATURES); for (Player p : Singletons.getModel().getGame().getPlayers()) { if (p.canBeTargetedBy(spell)) { @@ -1384,8 +1383,7 @@ public class CardFactorySorceries { final Card[] newArtifact = new Card[1]; // Sacrifice an artifact - List arts = p.getCardsIn(ZoneType.Battlefield); - arts = CardLists.filter(arts, Presets.ARTIFACTS); + List arts = CardLists.filter(p.getCardsIn(ZoneType.Battlefield), Presets.ARTIFACTS); final Object toSac = GuiChoose.oneOrNone("Sacrifice an artifact", arts); if (toSac != null) { final Card c = (Card) toSac; diff --git a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java index 2ac96cf3cb8..6aecedd284e 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java @@ -3207,8 +3207,7 @@ public class CardFactoryUtil { * @return a int. */ public static int getUsableManaSources(final Player player) { - List list = player.getCardsIn(ZoneType.Battlefield); - list = CardLists.filter(list, new Predicate() { + List list = CardLists.filter(player.getCardsIn(ZoneType.Battlefield), new Predicate() { @Override public boolean apply(final Card c) { for (final AbilityMana am : c.getAIPlayableMana()) { diff --git a/src/main/java/forge/card/cost/CostExile.java b/src/main/java/forge/card/cost/CostExile.java index bc62c77dcf9..9b1b74ccd9e 100644 --- a/src/main/java/forge/card/cost/CostExile.java +++ b/src/main/java/forge/card/cost/CostExile.java @@ -356,7 +356,7 @@ public class CostExile extends CostPartWithList { this.done(); } - this.typeList = sa.getActivatingPlayer().getCardsIn(part.getFrom()); + this.typeList = new ArrayList(sa.getActivatingPlayer().getCardsIn(part.getFrom())); this.typeList = CardLists.getValidCards(this.typeList, type.split(";"), sa.getActivatingPlayer(), sa.getSourceCard()); for (int i = 0; i < nNeeded; i++) { @@ -534,7 +534,7 @@ public class CostExile extends CostPartWithList { } else if (part.getFrom().equals(ZoneType.Stack)) { msg.append(" from the Stack"); } - this.typeList = sa.getActivatingPlayer().getCardsIn(part.getFrom()); + this.typeList = new ArrayList(sa.getActivatingPlayer().getCardsIn(part.getFrom())); this.typeList = CardLists.getValidCards(this.typeList, type.split(";"), sa.getActivatingPlayer(), sa.getSourceCard()); CMatchUI.SINGLETON_INSTANCE.showMessage(msg.toString()); ButtonUtil.enableOnlyCancel(); diff --git a/src/main/java/forge/card/cost/CostRemoveCounter.java b/src/main/java/forge/card/cost/CostRemoveCounter.java index 88d73cf88f7..22e6b86e445 100644 --- a/src/main/java/forge/card/cost/CostRemoveCounter.java +++ b/src/main/java/forge/card/cost/CostRemoveCounter.java @@ -17,6 +17,7 @@ */ package forge.card.cost; +import java.util.ArrayList; import java.util.List; import forge.Card; @@ -419,7 +420,7 @@ public class CostRemoveCounter extends CostPartWithList { this.done(); } - this.typeList = sa.getActivatingPlayer().getCardsIn(costRemoveCounter.getZone()); + this.typeList = new ArrayList(sa.getActivatingPlayer().getCardsIn(costRemoveCounter.getZone())); this.typeList = CardLists.getValidCards(this.typeList, type.split(";"), sa.getActivatingPlayer(), sa.getSourceCard()); for (int i = 0; i < nNeeded; i++) { diff --git a/src/main/java/forge/card/spellability/SpellPermanent.java b/src/main/java/forge/card/spellability/SpellPermanent.java index 3b3b1365880..25a42a0030f 100644 --- a/src/main/java/forge/card/spellability/SpellPermanent.java +++ b/src/main/java/forge/card/spellability/SpellPermanent.java @@ -102,8 +102,8 @@ public class SpellPermanent extends Spell { } else if (controller.isHuman()) { Singletons.getModel().getMatch().getInput().setInput(SpellPermanent.this.championInputComes); } else { // Computer - List computer = controller.getCardsIn(ZoneType.Battlefield); - computer = CardLists.getValidCards(computer, SpellPermanent.this.championValid, controller, source); + List computer = + CardLists.getValidCards(controller.getCardsIn(ZoneType.Battlefield), SpellPermanent.this.championValid, controller, source); computer.remove(source); CardLists.shuffle(computer); diff --git a/src/main/java/forge/control/input/InputMulligan.java b/src/main/java/forge/control/input/InputMulligan.java index 7134792e5d7..548c8d5ffc9 100644 --- a/src/main/java/forge/control/input/InputMulligan.java +++ b/src/main/java/forge/control/input/InputMulligan.java @@ -185,7 +185,7 @@ public class InputMulligan extends Input { if (c0.getName().equals("Serum Powder") && z0.is(ZoneType.Hand)) { if (GameActionUtil.showYesNoDialog(c0, "Use " + c0.getName() + "'s ability?")) { - List hand = c0.getController().getCardsIn(ZoneType.Hand); + List hand = new ArrayList(c0.getController().getCardsIn(ZoneType.Hand)); for (Card c : hand) { Singletons.getModel().getGame().getAction().exile(c); } diff --git a/src/main/java/forge/game/phase/CombatUtil.java b/src/main/java/forge/game/phase/CombatUtil.java index cbee9d9d105..41eaa134cdd 100644 --- a/src/main/java/forge/game/phase/CombatUtil.java +++ b/src/main/java/forge/game/phase/CombatUtil.java @@ -3080,8 +3080,8 @@ public class CombatUtil { final Ability ability4 = new Ability(c, "0") { @Override public void resolve() { - List enchantments = attacker.getController().getCardsIn(ZoneType.Library); - enchantments = CardLists.filter(enchantments, new Predicate() { + List enchantments = + CardLists.filter(attacker.getController().getCardsIn(ZoneType.Library), new Predicate() { @Override public boolean apply(final Card c) { if (attacker.hasKeyword("Protection from enchantments") diff --git a/src/main/java/forge/game/phase/PhaseHandler.java b/src/main/java/forge/game/phase/PhaseHandler.java index 20c37912c1d..3fbee8ee522 100644 --- a/src/main/java/forge/game/phase/PhaseHandler.java +++ b/src/main/java/forge/game/phase/PhaseHandler.java @@ -670,9 +670,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { */ public final void resetAttackedThisCombat(final Player player) { // resets the status of attacked/blocked this phase - List list = player.getCardsIn(ZoneType.Battlefield); - - list = CardLists.filter(list, CardPredicates.Presets.CREATURES); + List list = CardLists.filter(player.getCardsIn(ZoneType.Battlefield), 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/Upkeep.java b/src/main/java/forge/game/phase/Upkeep.java index d596d1bc64c..787ef1cbf68 100644 --- a/src/main/java/forge/game/phase/Upkeep.java +++ b/src/main/java/forge/game/phase/Upkeep.java @@ -1961,8 +1961,10 @@ public class Upkeep extends Phase implements java.io.Serializable { oathFlag = false; } } else { // if player == Computer - final List creaturesInLibrary = CardLists.filter(player.getCardsIn(ZoneType.Library), CardPredicates.Presets.CREATURES); - final List creaturesInBattlefield = CardLists.filter(player.getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.CREATURES); + final List creaturesInLibrary = + CardLists.filter(player.getCardsIn(ZoneType.Library), CardPredicates.Presets.CREATURES); + final List creaturesInBattlefield = + CardLists.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 @@ -2005,7 +2007,6 @@ public class Upkeep extends Phase implements java.io.Serializable { ability.setDescription(sb.toString()); Singletons.getModel().getGame().getStack().addSimultaneousStackEntry(ability); - } } } // upkeepOathOfDruids() @@ -2028,7 +2029,8 @@ public class Upkeep extends Phase implements java.io.Serializable { final Ability ability = new Ability(oathList.get(0), "0") { @Override public void resolve() { - final List graveyardCreatures = CardLists.filter(player.getCardsIn(ZoneType.Graveyard), CardPredicates.Presets.CREATURES); + final List graveyardCreatures = + CardLists.filter(player.getCardsIn(ZoneType.Graveyard), CardPredicates.Presets.CREATURES); if (GameState.compareTypeAmountInGraveyard(player, "Creature") > 0) { if (player.isHuman()) { @@ -2066,7 +2068,8 @@ public class Upkeep extends Phase implements java.io.Serializable { */ private static void upkeepKarma() { final Player player = Singletons.getModel().getGame().getPhaseHandler().getPlayerTurn(); - final List karmas = CardLists.filter(Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield), CardPredicates.nameEquals("Karma")); + final List karmas = + CardLists.filter(Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield), CardPredicates.nameEquals("Karma")); final List swamps = CardLists.getType(player.getCardsIn(ZoneType.Battlefield), "Swamp"); // determine how much damage to deal the current player @@ -2276,9 +2279,9 @@ public class Upkeep extends Phase implements java.io.Serializable { final Ability ability = new Ability(source, "0") { @Override public void resolve() { - List enchantmentsInLibrary = source.getController().getCardsIn(ZoneType.Library); final List enchantmentsAttached = new ArrayList(source.getEnchantingPlayer().getEnchantedBy()); - enchantmentsInLibrary = CardLists.filter(enchantmentsInLibrary, new Predicate() { + List enchantmentsInLibrary = + CardLists.filter(source.getController().getCardsIn(ZoneType.Library), 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/ComputerAIGeneral.java b/src/main/java/forge/game/player/ComputerAIGeneral.java index 88d69b8fb27..a9644fc4500 100644 --- a/src/main/java/forge/game/player/ComputerAIGeneral.java +++ b/src/main/java/forge/game/player/ComputerAIGeneral.java @@ -97,7 +97,7 @@ public class ComputerAIGeneral implements Computer { * @return a boolean. */ public static boolean hasACardGivingHaste(final Player ai) { - final List all = ai.getCardsIn(ZoneType.Battlefield); + final List all = new ArrayList(ai.getCardsIn(ZoneType.Battlefield)); all.addAll(CardFactoryUtil.getExternalZoneActivationCards(ai)); all.addAll(ai.getCardsIn(ZoneType.Hand)); diff --git a/src/main/java/forge/game/player/ComputerUtil.java b/src/main/java/forge/game/player/ComputerUtil.java index 226d517a3ca..e993822afc2 100644 --- a/src/main/java/forge/game/player/ComputerUtil.java +++ b/src/main/java/forge/game/player/ComputerUtil.java @@ -1855,8 +1855,9 @@ public class ComputerUtil { * the source SpellAbility * @return the card list */ - public static List sacrificePermanents(final Player ai, final int amount, final List list, final boolean destroy, + public static List sacrificePermanents(final Player ai, final int amount, final List cardlist, final boolean destroy, SpellAbility source) { + final List list = new ArrayList(cardlist); final List sacList = new ArrayList(); // used in Annihilator and AF_Sacrifice int max = list.size(); diff --git a/src/main/java/forge/game/player/Player.java b/src/main/java/forge/game/player/Player.java index b5821a4187c..8c7804a9689 100644 --- a/src/main/java/forge/game/player/Player.java +++ b/src/main/java/forge/game/player/Player.java @@ -1700,7 +1700,7 @@ public abstract class Player extends GameEntity implements Comparable { * @return the card list */ public final List mill(final int n, final ZoneType zone, final boolean bottom) { - final List lib = this.getCardsIn(ZoneType.Library); + final List lib = new ArrayList(this.getCardsIn(ZoneType.Library)); final List milled = new ArrayList(); final int max = Math.min(n, lib.size()); diff --git a/src/main/java/forge/game/player/PlayerUtil.java b/src/main/java/forge/game/player/PlayerUtil.java index d10b3932f7d..66ef86b9395 100644 --- a/src/main/java/forge/game/player/PlayerUtil.java +++ b/src/main/java/forge/game/player/PlayerUtil.java @@ -244,6 +244,7 @@ public final class PlayerUtil { */ public static Input inputSacrificePermanents(final int nCards) { final List list = Singletons.getControl().getPlayer().getCardsIn(ZoneType.Battlefield); + return PlayerUtil.inputSacrificePermanentsFromList(nCards, list, "Select a permanent to sacrifice"); } // input_sacrificePermanents() @@ -260,9 +261,8 @@ public final class PlayerUtil { * @since 1.0.15 */ public static Input inputSacrificePermanents(final int nCards, final String type) { - List list = Singletons.getControl().getPlayer().getCardsIn(ZoneType.Battlefield); + final List list = CardLists.getType(Singletons.getControl().getPlayer().getCardsIn(ZoneType.Battlefield), type); - list = CardLists.getType(list, type); return PlayerUtil.inputSacrificePermanentsFromList(nCards, list, "Select a " + type + " to sacrifice"); } // input_sacrificePermanents() diff --git a/src/main/java/forge/game/zone/PlayerZoneBattlefield.java b/src/main/java/forge/game/zone/PlayerZoneBattlefield.java index 94f0955493a..980223942ac 100644 --- a/src/main/java/forge/game/zone/PlayerZoneBattlefield.java +++ b/src/main/java/forge/game/zone/PlayerZoneBattlefield.java @@ -121,15 +121,15 @@ public class PlayerZoneBattlefield extends PlayerZone { if (c.isLand()) { // Tectonic Instability - final List tis = CardLists.filter(Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield), CardPredicates.nameEquals("Tectonic Instability")); + final List tis = + CardLists.filter(Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield), CardPredicates.nameEquals("Tectonic Instability")); final Card tisLand = c; for (final Card ti : tis) { final Card source = ti; final SpellAbility ability = new Ability(source, "") { @Override public void resolve() { - List lands = tisLand.getController().getCardsIn(ZoneType.Battlefield); - lands = CardLists.filter(lands, Presets.LANDS); + List lands = CardLists.filter(tisLand.getController().getCardsIn(ZoneType.Battlefield), Presets.LANDS); for (final Card land : lands) { land.tap(); }