From 5cfb4968998d3b47385c8b1e2919daecacfe4743 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sun, 11 Jun 2017 10:44:41 +0200 Subject: [PATCH] * Storm Cauldron - Fixed that it wrongly also returned cards to hand that already left the battlefield (fixes #3487). --- Mage.Sets/src/mage/cards/c/CrystalVein.java | 9 ++- .../cards/triggers/StormCauldronTest.java | 56 +++++++++++++++++++ .../TapLandForManaAllTriggeredAbility.java | 3 +- 3 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/triggers/StormCauldronTest.java diff --git a/Mage.Sets/src/mage/cards/c/CrystalVein.java b/Mage.Sets/src/mage/cards/c/CrystalVein.java index 4acd4e44664..a02a8441d0f 100644 --- a/Mage.Sets/src/mage/cards/c/CrystalVein.java +++ b/Mage.Sets/src/mage/cards/c/CrystalVein.java @@ -27,6 +27,7 @@ */ package mage.cards.c; +import java.util.UUID; import mage.Mana; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.TapSourceCost; @@ -37,8 +38,6 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Zone; -import java.util.UUID; - /** * * @author LevelX2 @@ -46,11 +45,11 @@ import java.util.UUID; public class CrystalVein extends CardImpl { public CrystalVein(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.LAND},""); + super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); - // {tap}: Add {C} to your mana pool. + // {T}: Add {C} to your mana pool. this.addAbility(new ColorlessManaAbility()); - // {tap}, Sacrifice Crystal Vein: Add {C}{C} to your mana pool. + // {T}, Sacrifice Crystal Vein: Add {C}{C} to your mana pool. SimpleManaAbility ability = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.ColorlessMana(2), new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); this.addAbility(ability); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/StormCauldronTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/StormCauldronTest.java new file mode 100644 index 00000000000..33a8ed90f7b --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/StormCauldronTest.java @@ -0,0 +1,56 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.mage.test.cards.triggers; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class StormCauldronTest extends CardTestPlayerBase { + + /** + * With Storm Cauldron in play (owned by opponent), I sacced Crystal Vein + * for 2 mana... except it got returned to my hand, which shouldn't happen. + * Haven't tested it with other sac lands yet. + * + * Relevant ruing for Storm Cauldron: + * + * 10/4/2004: If a land is tapped for mana and sacrificed all in one action, + * it goes to the graveyard before the Cauldron can return it to the + * player's hand. + * + */ + @Test + public void testLandNotReturnedToHand() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); + // {T}: Add {C} to your mana pool. + // {T}, Sacrifice Crystal Vein: Add {C}{C} to your mana pool. + addCard(Zone.BATTLEFIELD, playerA, "Crystal Vein", 1); + + // Each player may play an additional land during each of his or her turns. + // Whenever a land is tapped for mana, return it to its owner's hand. + addCard(Zone.BATTLEFIELD, playerB, "Storm Cauldron", 1); + + playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Crystal Vein"); + playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mountain"); + + activateManaAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}, Sacrifice"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Crystal Vein", 1); + assertPermanentCount(playerA, "Mountain", 1); + assertHandCount(playerA, "Crystal Vein", 0); + + } + +} diff --git a/Mage/src/main/java/mage/abilities/common/TapLandForManaAllTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/TapLandForManaAllTriggeredAbility.java index f46aac825d6..0c2d1a97dc3 100644 --- a/Mage/src/main/java/mage/abilities/common/TapLandForManaAllTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/TapLandForManaAllTriggeredAbility.java @@ -29,7 +29,6 @@ package mage.abilities.common; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.Effect; -import mage.constants.CardType; import mage.constants.Zone; import mage.game.Game; import mage.game.events.GameEvent; @@ -64,7 +63,7 @@ public class TapLandForManaAllTriggeredAbility extends TriggeredAbilityImpl { Permanent permanent = game.getPermanentOrLKIBattlefield(event.getSourceId()); if (permanent != null && permanent.isLand()) { if (setTargetPointer) { - getEffects().get(0).setTargetPointer(new FixedTarget(permanent.getId())); + getEffects().get(0).setTargetPointer(new FixedTarget(permanent, game)); } return true; }