From 5b0a228f4ffc540fe0bae7cf3c11a275c0ede352 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Thu, 25 Mar 2021 08:51:35 +0100 Subject: [PATCH] SpellAbilityEffect: fix untilHostLeavesPlayCommand to check the until CardCollection --- .../java/forge/game/ability/SpellAbilityEffect.java | 12 +++++++++++- forge-game/src/main/java/forge/game/card/Card.java | 4 ++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java b/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java index 94b2ead2a3c..2a403961a63 100644 --- a/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java +++ b/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java @@ -19,6 +19,7 @@ import forge.game.GameEntity; import forge.game.GameObject; import forge.game.card.Card; import forge.game.card.CardCollection; +import forge.game.card.CardCollectionView; import forge.game.card.CardFactoryUtil; import forge.game.card.CardZoneTable; import forge.game.combat.Combat; @@ -634,10 +635,19 @@ public abstract class SpellAbilityEffect { @Override public void run() { CardZoneTable untilTable = new CardZoneTable(); + CardCollectionView untilCards = hostCard.getUntilLeavesBattlefield(); + // if the list is empty, then the table doesn't need to be checked anymore + if (untilCards.isEmpty()) { + return; + } for (Table.Cell cell : triggerList.cellSet()) { for (Card c : cell.getValue()) { + // check if card is still in the until host leaves play list + if (!untilCards.contains(c)) { + continue; + } // better check if card didn't changed zones again? - Card newCard = c.getZone().getCards().get(c); + Card newCard = game.getCardState(c, null); if (newCard == null || !newCard.equalsWithTimestamp(c)) { continue; } diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 921aa5dd016..63bffe453a2 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -7077,6 +7077,10 @@ public class Card extends GameEntity implements Comparable, IHasSVars { return edition.getBorderColor(); } + public final CardCollectionView getUntilLeavesBattlefield() { + return CardCollection.getView(untilLeavesBattlefield); + } + public final void addUntilLeavesBattlefield(final Card c) { untilLeavesBattlefield = view.addCard(untilLeavesBattlefield, c, TrackableProperty.UntilLeavesBattlefield); }