diff --git a/Mage/src/main/java/mage/abilities/condition/common/CastFromHandCondition.java b/Mage/src/main/java/mage/abilities/condition/common/CastFromHandCondition.java index 1abc7306f5f..069f7367160 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/CastFromHandCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/CastFromHandCondition.java @@ -2,8 +2,10 @@ package mage.abilities.condition.common; import mage.abilities.Ability; import mage.abilities.condition.Condition; +import mage.constants.Zone; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.game.stack.Spell; import mage.watchers.Watcher; /** @@ -15,11 +17,21 @@ public class CastFromHandCondition implements Condition { @Override public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanent(source.getSourceId()); + Permanent permanent = game.getPermanentEntering(source.getSourceId()); + int zccDiff = 0; if (permanent == null) { - permanent = game.getPermanentEntering(source.getSourceId()); + permanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); // can be alredy again removed from battlefield so also check LKI + zccDiff = -1; } if (permanent != null) { + // check that the spell is still in the LKI + Spell spell = game.getStack().getSpell(source.getSourceId()); + if (spell == null || spell.getZoneChangeCounter(game) != permanent.getZoneChangeCounter(game) + zccDiff) { + if (game.getLastKnownInformation(source.getSourceId(), Zone.STACK, permanent.getZoneChangeCounter(game) + zccDiff) == null) { + return false; + } + } + // Probably watcher is no longer needed Watcher watcher = game.getState().getWatchers().get("CastFromHand", source.getSourceId()); if (watcher != null && watcher.conditionMet()) { return true;