diff --git a/Mage.Sets/src/mage/sets/stronghold/SacredGround.java b/Mage.Sets/src/mage/sets/stronghold/SacredGround.java index d1bab5b6f96..dcc6df53c02 100644 --- a/Mage.Sets/src/mage/sets/stronghold/SacredGround.java +++ b/Mage.Sets/src/mage/sets/stronghold/SacredGround.java @@ -42,6 +42,8 @@ import mage.game.events.GameEvent; import mage.game.events.ZoneChangeEvent; import mage.game.permanent.Permanent; import mage.game.stack.Spell; +import mage.game.stack.StackAbility; +import mage.game.stack.StackObject; import mage.target.targetpointer.FixedTarget; /** @@ -94,7 +96,7 @@ class SacredGroundTriggeredAbility extends TriggeredAbilityImpl { 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)) { + if (mageObject instanceof StackObject) { getEffects().get(0).setTargetPointer(new FixedTarget(targetPermanent.getId())); return true; } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/SacredGroundTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/SacredGroundTest.java index b41b831e48d..c45fd4a38d7 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/SacredGroundTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/SacredGroundTest.java @@ -49,7 +49,7 @@ public class SacredGroundTest extends CardTestPlayerBase { * Destroyed land returns to battlefield */ @Test - public void landReturnsToBattlefield() { + public void testSpellDestroyLandReturnsToBattlefield() { addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3); // Destroy target land. If that land was nonbasic, Molten Rain deals 2 damage to the land's controller. addCard(Zone.HAND, playerA, "Molten Rain"); @@ -75,4 +75,73 @@ public class SacredGroundTest extends CardTestPlayerBase { assertLife(playerB, 22); // + 2 * 2 life from Kabira Crossroads - 2 Life from Molten Rain } + /** + * Sacred Ground {1}{W} + * Enchantment + * Whenever a spell or ability an opponent controls causes a land to be put into your + * graveyard from the battlefield, return that card to the battlefield. + * + * + * Destroyed land returns to battlefield + */ + @Test + public void testSpellSacrificeLandReturnsToBattlefield() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 3); + // Each player loses 1 life, discards a card, sacrifices a creature, then sacrifices a land. + addCard(Zone.HAND, playerA, "Smallpox"); + + // Kabira Crossroads Land + // Kabira Crossroads enters the battlefield tapped. + // When Kabira Crossroads enters the battlefield, you gain 2 life. + // {T}: Add {W}to your mana pool. + addCard(Zone.HAND, playerB, "Kabira Crossroads"); + addCard(Zone.BATTLEFIELD, playerB, "Sacred Ground"); + playLand(2, PhaseStep.POSTCOMBAT_MAIN, playerB, "Kabira Crossroads"); + + castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Smallpox"); + + setStopAt(3, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Smallpox", 1); + assertPermanentCount(playerB, "Kabira Crossroads", 1); + + assertLife(playerA, 19); + assertLife(playerB, 23); + } + + /** + * Sacred Ground {1}{W} + * Enchantment + * Whenever a spell or ability an opponent controls causes a land to be put into your + * graveyard from the battlefield, return that card to the battlefield. + * + * + * Destroyed land returns to battlefield + */ + @Test + public void testTriggeredAbilityReturnedToBattlefield() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 7); + // When Faultgrinder enters the battlefield, destroy target land. + addCard(Zone.HAND, playerA, "Faultgrinder"); + + // Kabira Crossroads Land + // Kabira Crossroads enters the battlefield tapped. + // When Kabira Crossroads enters the battlefield, you gain 2 life. + // {T}: Add {W}to your mana pool. + addCard(Zone.HAND, playerB, "Kabira Crossroads"); + addCard(Zone.BATTLEFIELD, playerB, "Sacred Ground"); + playLand(2, PhaseStep.POSTCOMBAT_MAIN, playerB, "Kabira Crossroads"); + + castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Faultgrinder"); + + setStopAt(3, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerB, "Kabira Crossroads", 1); + + assertLife(playerA, 20); + assertLife(playerB, 24); // + 2 * 2 life from Kabira Crossroads + } + }