From 90a5a55a72fe8dd9f6c6168502e60ad222a961f2 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Fri, 7 Jun 2019 18:35:30 +0400 Subject: [PATCH] * Move cards from battlefield - fixed that some abilities can duplicates moving cards (#4655); For devs: all cards with CardsImpl and moveCards calls like Winds of Abandon; --- Mage/src/main/java/mage/cards/CardsImpl.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Mage/src/main/java/mage/cards/CardsImpl.java b/Mage/src/main/java/mage/cards/CardsImpl.java index 14c7537bf98..7f3ba801975 100644 --- a/Mage/src/main/java/mage/cards/CardsImpl.java +++ b/Mage/src/main/java/mage/cards/CardsImpl.java @@ -1,15 +1,15 @@ - package mage.cards; -import java.io.Serializable; -import java.util.*; -import java.util.stream.Collectors; import mage.MageObject; import mage.filter.FilterCard; import mage.game.Game; import mage.util.RandomUtil; import mage.util.ThreadLocalStringBuilder; +import java.io.Serializable; +import java.util.*; +import java.util.stream.Collectors; + /** * @author BetaSteward_at_googlemail.com */ @@ -135,13 +135,15 @@ public class CardsImpl extends LinkedHashSet implements Cards, Serializabl @Override public Set getCards(Game game) { Set cards = new LinkedHashSet<>(); - for (Iterator it = this.iterator(); it.hasNext();) { // Changed to iterator because of ConcurrentModificationException + for (Iterator it = this.iterator(); it.hasNext(); ) { // Changed to iterator because of ConcurrentModificationException UUID cardId = it.next(); - Card card = game.getCard(cardId); + // cards from battlefield must be as permanent, not card (moveCards uses instanceOf Permanent) + Card card = game.getPermanent(cardId); if (card == null) { - card = game.getPermanent(cardId); // needed to get TokenCard objects + card = game.getCard(cardId); } + if (card != null) { // this can happen during the cancelation (player concedes) of a game cards.add(card); }