diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/PlayTheTopCardEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/PlayTheTopCardEffect.java index 0f7ed647904..d33def78493 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/PlayTheTopCardEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/PlayTheTopCardEffect.java @@ -32,7 +32,6 @@ import mage.abilities.Ability; import mage.abilities.effects.AsThoughEffectImpl; import mage.cards.Card; import mage.constants.AsThoughEffectType; -import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Outcome; import mage.filter.FilterCard; diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/PlayWithTheTopCardRevealedEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/PlayWithTheTopCardRevealedEffect.java index 9cfd1c4ddcf..07243eb3c21 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/PlayWithTheTopCardRevealedEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/PlayWithTheTopCardRevealedEffect.java @@ -34,7 +34,10 @@ import mage.constants.Duration; import mage.constants.Layer; import mage.constants.Outcome; import mage.constants.SubLayer; +import mage.constants.Zone; import mage.game.Game; +import mage.game.stack.Spell; +import mage.game.stack.StackObject; import mage.players.Player; /** @@ -70,11 +73,11 @@ public class PlayWithTheTopCardRevealedEffect extends ContinuousEffectImpl { if (allPlayers) { for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { Player player = game.getPlayer(playerId); - if (player != null) { + if (player != null && !isCastFromPlayersLibrary(game, playerId)) { player.setTopCardRevealed(true); } } - } else { + } else if (!isCastFromPlayersLibrary(game, controller.getId())) { controller.setTopCardRevealed(true); } return true; @@ -82,6 +85,16 @@ public class PlayWithTheTopCardRevealedEffect extends ContinuousEffectImpl { return false; } + boolean isCastFromPlayersLibrary(Game game, UUID playerId) { + if (!game.getStack().isEmpty()) { + StackObject stackObject = game.getStack().getLast(); + return stackObject instanceof Spell + && !((Spell) stackObject).isDoneActivatingManaAbilities() + && Zone.LIBRARY.equals(((Spell) stackObject).getFromZone()); + } + return false; + } + @Override public PlayWithTheTopCardRevealedEffect copy() { return new PlayWithTheTopCardRevealedEffect(this); diff --git a/Mage/src/main/java/mage/game/stack/Spell.java b/Mage/src/main/java/mage/game/stack/Spell.java index 863302c53fa..1a46a0d9093 100644 --- a/Mage/src/main/java/mage/game/stack/Spell.java +++ b/Mage/src/main/java/mage/game/stack/Spell.java @@ -138,6 +138,7 @@ public class Spell extends StackObjImpl implements Card { } public boolean activate(Game game, boolean noMana) { + setDoneActivatingManaAbilities(false); // Used for e.g. improvise if (!spellAbilities.get(0).activate(game, noMana)) { return false; } @@ -157,7 +158,7 @@ public class Spell extends StackObjImpl implements Card { } } } - setDoneActivatingManaAbilities(false); // can be activated again maybe during the resolution of the spell (e.g. Metallic Rebuke) + setDoneActivatingManaAbilities(true); // can be activated again maybe during the resolution of the spell (e.g. Metallic Rebuke) return true; }