From db8595800848cf7bcbe52fe829af4ed66eb06a68 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Wed, 2 Jun 2021 20:56:59 +0200 Subject: [PATCH] Fix effects on phased out cards --- .../java/forge/game/ability/effects/ChangeZoneEffect.java | 2 +- forge-game/src/main/java/forge/game/card/Card.java | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index a660dca451e..7d2d07e1985 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -502,7 +502,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect { // gameCard is LKI in that case, the card is not in game anymore // or the timestamp did change // this should check Self too - if (gameCard == null || !tgtC.equalsWithTimestamp(gameCard)) { + if (gameCard == null || !tgtC.equalsWithTimestamp(gameCard) || gameCard.isPhasedOut()) { continue; } if (sa.usesTargeting() && !gameCard.canBeTargetedBy(sa)) { 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 132095e538a..e88d4af3292 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -4645,8 +4645,9 @@ public class Card extends GameEntity implements Comparable, IHasSVars { // If this is currently PhasedIn, it's about to phase out. // Run trigger before it does because triggers don't work with phased out objects getGame().getTriggerHandler().runTrigger(TriggerType.PhaseOut, runParams, false); - runLeavesPlayCommands(); + // when it doesn't exist the game will no longer see it as tapped runUntapCommands(); + // TODO need to run UntilHostLeavesPlay commands but only when worded "for as long as" } setPhasedOut(!phasedOut); @@ -5770,11 +5771,11 @@ public class Card extends GameEntity implements Comparable, IHasSVars { } public final boolean canBeDestroyed() { - return isInPlay() && (!hasKeyword(Keyword.INDESTRUCTIBLE) || (isCreature() && getNetToughness() <= 0)); + return isInPlay() && !isPhasedOut() && (!hasKeyword(Keyword.INDESTRUCTIBLE) || (isCreature() && getNetToughness() <= 0)); } public final boolean canBeSacrificed() { - return isInPlay() && !this.isPhasedOut() && !hasKeyword("CARDNAME can't be sacrificed."); + return isInPlay() && !isPhasedOut() && !hasKeyword("CARDNAME can't be sacrificed."); } @Override