From 1e7cfa086bb37524ba18df9eca263e439a694a0a Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Wed, 12 Mar 2014 15:53:27 +0100 Subject: [PATCH] * Cavern of Soul - Fixed a bug that caused that every spell could not be countered that was cast using the first (colorless) mana ability (fixes #391). --- .../sets/avacynrestored/CavernOfSouls.java | 5 ++-- .../cards/single/avr/CavernOfSoulsTest.java | 30 ++++++++++++++++++- Mage/src/mage/players/ManaPool.java | 2 +- Mage/src/mage/players/ManaPoolItem.java | 1 + 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/Mage.Sets/src/mage/sets/avacynrestored/CavernOfSouls.java b/Mage.Sets/src/mage/sets/avacynrestored/CavernOfSouls.java index 7dabc1c674c..9a5db0da3b8 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/CavernOfSouls.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/CavernOfSouls.java @@ -130,6 +130,7 @@ class CavernOfSoulsManaBuilder extends ConditionalManaBuilder { @Override public ConditionalMana build(Object... options) { + this.mana.setFlag(true); // indicates that the mana is from second ability return new CavernOfSoulsConditionalMana(this.mana); } @@ -169,7 +170,7 @@ class CavernOfSoulsManaCondition extends CreatureCastManaCondition { class CavernOfSoulsWatcher extends WatcherImpl { - public List spells = new ArrayList(); + public List spells = new ArrayList<>(); public CavernOfSoulsWatcher() { super("ManaPaidFromCavernOfSoulsWatcher", WatcherScope.GAME); @@ -188,7 +189,7 @@ class CavernOfSoulsWatcher extends WatcherImpl { public void watch(GameEvent event, Game game) { if (event.getType() == GameEvent.EventType.MANA_PAYED) { MageObject object = game.getObject(event.getSourceId()); - if (object != null && object.getName().equals("Cavern of Souls")) { + if (object != null && object.getName().equals("Cavern of Souls") && event.getFlag()) { spells.add(event.getTargetId()); } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/avr/CavernOfSoulsTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/avr/CavernOfSoulsTest.java index 23610149f1f..8c3350799ab 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/single/avr/CavernOfSoulsTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/avr/CavernOfSoulsTest.java @@ -82,7 +82,7 @@ public class CavernOfSoulsTest extends CardTestPlayerBase { } /** - * Tests card can be countered for cast with Cavern of Souls + * Tests spell can't be countered for cast with Cavern of Souls */ @Test public void testDrakeCantBeCountered() { @@ -90,6 +90,7 @@ public class CavernOfSoulsTest extends CardTestPlayerBase { addCard(Zone.HAND, playerA, "Cavern of Souls"); addCard(Zone.HAND, playerA, "Azure Drake"); + // {1}{U} Remove Soul - Counter target creature spell. addCard(Zone.HAND, playerB, "Remove Soul"); addCard(Zone.BATTLEFIELD, playerB, "Island", 2); @@ -107,5 +108,32 @@ public class CavernOfSoulsTest extends CardTestPlayerBase { assertGraveyardCount(playerA, "Azure Drake", 0); assertPermanentCount(playerA, "Azure Drake", 1); } + /** + * Tests spell can be countered if cast with colorless mana from Cavern + */ + @Test + public void testDrakeCanBeCountered() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); + addCard(Zone.BATTLEFIELD, playerA, "Island", 1); + addCard(Zone.HAND, playerA, "Cavern of Souls"); + addCard(Zone.HAND, playerA, "Azure Drake"); + // {1}{U} Remove Soul - Counter target creature spell. + addCard(Zone.HAND, playerB, "Remove Soul"); + addCard(Zone.BATTLEFIELD, playerB, "Island", 2); + + setChoice(playerA, "Drake"); + + playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cavern of Souls"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Azure Drake"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Remove Soul"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + // check it was countered + assertGraveyardCount(playerB, "Remove Soul", 1); + assertGraveyardCount(playerA, "Azure Drake", 1); + assertPermanentCount(playerA, "Azure Drake", 0); + } } diff --git a/Mage/src/mage/players/ManaPool.java b/Mage/src/mage/players/ManaPool.java index 05368201092..1037bdadf14 100644 --- a/Mage/src/mage/players/ManaPool.java +++ b/Mage/src/mage/players/ManaPool.java @@ -327,7 +327,7 @@ public class ManaPool implements Serializable { for (ConditionalMana mana : getConditionalMana()) { if (mana.get(manaType) > 0 && mana.apply(ability, game, mana.getManaProducerId())) { mana.set(manaType, mana.get(manaType) - 1); - game.fireEvent(new GameEvent(GameEvent.EventType.MANA_PAYED, ability.getId(), mana.getManaProducerId(), ability.getControllerId())); + game.fireEvent(new GameEvent(GameEvent.EventType.MANA_PAYED, ability.getId(), mana.getManaProducerId(), ability.getControllerId(), 0, mana.getFlag())); break; } } diff --git a/Mage/src/mage/players/ManaPoolItem.java b/Mage/src/mage/players/ManaPoolItem.java index 822cfdda133..3c65b915674 100644 --- a/Mage/src/mage/players/ManaPoolItem.java +++ b/Mage/src/mage/players/ManaPoolItem.java @@ -66,6 +66,7 @@ public class ManaPoolItem implements Serializable { this.conditionalMana = conditionalMana; this.sourceId = sourceId; this.conditionalMana.setManaProducerId(sourceId); + this.flag = conditionalMana.getFlag(); } public ManaPoolItem(final ManaPoolItem item) {