From 28d3d72c5dd8199b90c92f49b16104fba395a532 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sun, 24 Aug 2014 09:11:34 +0200 Subject: [PATCH] Fixed that a spell was still shown on the stack if triggered abilities from enters the battlefield event of the cast spell were put on the stack. --- .../src/mage/sets/stronghold/SacredGround.java | 16 ++++++++++------ .../src/mage/sets/zendikar/LullmageMentor.java | 3 +-- Mage/src/mage/game/GameImpl.java | 7 ++++--- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/Mage.Sets/src/mage/sets/stronghold/SacredGround.java b/Mage.Sets/src/mage/sets/stronghold/SacredGround.java index 73bf92a96b0..d1bab5b6f96 100644 --- a/Mage.Sets/src/mage/sets/stronghold/SacredGround.java +++ b/Mage.Sets/src/mage/sets/stronghold/SacredGround.java @@ -30,8 +30,8 @@ package mage.sets.stronghold; import java.util.UUID; import mage.MageObject; +import mage.abilities.ActivatedAbility; import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.effects.common.ReturnSourceFromGraveyardToBattlefieldEffect; import mage.abilities.effects.common.ReturnToBattlefieldUnderYourControlTargetEffect; import mage.cards.CardImpl; import mage.constants.CardType; @@ -41,7 +41,7 @@ import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.ZoneChangeEvent; import mage.game.permanent.Permanent; -import mage.game.stack.StackObject; +import mage.game.stack.Spell; import mage.target.targetpointer.FixedTarget; /** @@ -88,13 +88,17 @@ class SacredGroundTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkTrigger(GameEvent event, Game game) { if (GameEvent.EventType.ZONE_CHANGE.equals(event.getType()) && - game.getObject(event.getSourceId()) instanceof StackObject && game.getOpponents(this.getControllerId()).contains(game.getControllerId(event.getSourceId()))) { ZoneChangeEvent zce = (ZoneChangeEvent) event; if (Zone.BATTLEFIELD.equals(zce.getFromZone()) && Zone.GRAVEYARD.equals(zce.getToZone())) { - Permanent targetCard = zce.getTarget(); - getEffects().get(0).setTargetPointer(new FixedTarget(targetCard.getId())); - return targetCard.getCardType().contains(CardType.LAND) && targetCard.getControllerId().equals(getControllerId()); + Permanent targetPermanent = zce.getTarget(); + if (targetPermanent.getCardType().contains(CardType.LAND) && targetPermanent.getControllerId().equals(getControllerId())) { + MageObject mageObject = game.getShortLivingLKI(event.getSourceId(), Zone.STACK); + if ((mageObject instanceof Spell) || (mageObject instanceof ActivatedAbility)) { + getEffects().get(0).setTargetPointer(new FixedTarget(targetPermanent.getId())); + return true; + } + } } } return false; diff --git a/Mage.Sets/src/mage/sets/zendikar/LullmageMentor.java b/Mage.Sets/src/mage/sets/zendikar/LullmageMentor.java index d39ed88b86d..aa5c2c714c8 100644 --- a/Mage.Sets/src/mage/sets/zendikar/LullmageMentor.java +++ b/Mage.Sets/src/mage/sets/zendikar/LullmageMentor.java @@ -145,8 +145,7 @@ class MerfolkToken extends Token { class CastedSpellsWithSpellTarget extends Watcher { - // - private Map casted = new HashMap(); + private final Map casted = new HashMap<>(); public CastedSpellsWithSpellTarget() { super("CastedSpellsWithSpellTarget", WatcherScope.GAME); diff --git a/Mage/src/mage/game/GameImpl.java b/Mage/src/mage/game/GameImpl.java index 14cdd4bd3f1..8567c2eefb2 100644 --- a/Mage/src/mage/game/GameImpl.java +++ b/Mage/src/mage/game/GameImpl.java @@ -1106,14 +1106,15 @@ public abstract class GameImpl implements Game, Serializable { top = state.getStack().peek(); top.resolve(this); } finally { - if (top != null) { + if (top != null) { + state.getStack().remove(top); + rememberLKI(top.getSourceId(), Zone.STACK, top); if (!getTurn().isEndTurnRequested()) { while (state.hasSimultaneousEvents()) { state.handleSimultaneousEvent(this); checkTriggered(); } - } - state.getStack().remove(top); + } } } }