diff --git a/Mage.Sets/src/mage/sets/darkascension/CurseOfExhaustion.java b/Mage.Sets/src/mage/sets/darkascension/CurseOfExhaustion.java index 2a520a5b32..79a66e3f00 100644 --- a/Mage.Sets/src/mage/sets/darkascension/CurseOfExhaustion.java +++ b/Mage.Sets/src/mage/sets/darkascension/CurseOfExhaustion.java @@ -41,7 +41,7 @@ import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.TargetPlayer; -import mage.watchers.Watcher; +import mage.watchers.common.CastSpellLastTurnWatcher; /** * @@ -56,7 +56,6 @@ public class CurseOfExhaustion extends CardImpl { this.subtype.add("Curse"); this.color.setWhite(true); - this.addWatcher(new CurseOfExhaustionWatcher()); // Enchant player TargetPlayer auraTarget = new TargetPlayer(); @@ -78,39 +77,6 @@ public class CurseOfExhaustion extends CardImpl { } } -class CurseOfExhaustionWatcher extends Watcher { - - public CurseOfExhaustionWatcher() { - super("SpellCast", WatcherScope.PLAYER); - } - - public CurseOfExhaustionWatcher(final CurseOfExhaustionWatcher watcher) { - super(watcher); - } - - @Override - public CurseOfExhaustionWatcher copy() { - return new CurseOfExhaustionWatcher(this); - } - - @Override - public void watch(GameEvent event, Game game) { - if (condition == true) {//no need to check - condition has already occured - return; - } - if (event.getType() == GameEvent.EventType.SPELL_CAST ) { - Permanent enchantment = game.getPermanent(this.sourceId); - if (enchantment != null && enchantment.getAttachedTo() != null) { - Player player = game.getPlayer(enchantment.getAttachedTo()); - if (player != null && event.getPlayerId().equals(player.getId())) { - condition = true; - } - } - } - } - -} - class CurseOfExhaustionEffect extends ContinuousRuleModifiyingEffectImpl { public CurseOfExhaustionEffect() { @@ -139,8 +105,8 @@ class CurseOfExhaustionEffect extends ContinuousRuleModifiyingEffectImpl { if (enchantment != null && enchantment.getAttachedTo() != null) { Player player = game.getPlayer(enchantment.getAttachedTo()); if (player != null && event.getPlayerId().equals(player.getId())) { - Watcher watcher = game.getState().getWatchers().get("SpellCast", source.getControllerId()); - if (watcher != null && watcher.conditionMet()) { + CastSpellLastTurnWatcher watcher = (CastSpellLastTurnWatcher) game.getState().getWatchers().get("CastSpellLastTurnWatcher"); + if (watcher != null && watcher.getAmountOfSpellsPlayerCastOnCurrentTurn(event.getPlayerId()) > 0) { return true; } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/curses/CursesTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/curses/CursesTest.java index 1dcd091d79..f466f34a33 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/curses/CursesTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/curses/CursesTest.java @@ -84,6 +84,80 @@ public class CursesTest extends CardTestPlayerBase { assertLife(playerB, 14); } + /** + * Checks if Copy Enchantment works for palyer auras + */ + @Test + public void testCurseOfExhaustion3() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); + + addCard(Zone.BATTLEFIELD, playerB, "Island", 3); + + addCard(Zone.HAND, playerA, "Curse of Exhaustion"); + addCard(Zone.HAND, playerA, "Lightning Bolt", 2); + + addCard(Zone.HAND, playerB, "Copy Enchantment", 1); + + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Curse of Exhaustion", playerB); + + castSpell(4, PhaseStep.POSTCOMBAT_MAIN, playerA, "Lightning Bolt", playerB); + castSpell(4, PhaseStep.PRECOMBAT_MAIN, playerB, "Copy Enchantment"); + setChoice(playerB, "Yes"); + setChoice(playerB, "Curse of Exhaustion"); + setChoice(playerB, "targetPlayer=PlayerA"); + castSpell(4, PhaseStep.POSTCOMBAT_MAIN, playerA, "Lightning Bolt", playerB); + + + + setStopAt(4, PhaseStep.END_TURN); + execute(); + + assertHandCount(playerB, "Copy Enchantment", 0); + assertGraveyardCount(playerB, "Copy Enchantment", 0); + + assertPermanentCount(playerA, "Curse of Exhaustion", 1); + assertPermanentCount(playerB, "Curse of Exhaustion", 1); + + assertLife(playerA, 20); + assertLife(playerB, 17); + } + + // returng curse enchantment from graveyard to battlefield + @Test + public void testCurseOfExhaustion4() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); + + addCard(Zone.BATTLEFIELD, playerB, "Plains", 3); + addCard(Zone.BATTLEFIELD, playerB, "Swamp", 2); + + addCard(Zone.HAND, playerA, "Lightning Bolt", 2); + + addCard(Zone.GRAVEYARD, playerB, "Curse of Exhaustion", 1); + addCard(Zone.HAND, playerB, "Obzedat's Aid", 1); + + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Obzedat's Aid", "Curse of Exhaustion"); + setChoice(playerB, "PlayerA"); + + + castSpell(2, PhaseStep.POSTCOMBAT_MAIN, playerA, "Lightning Bolt", playerB); + castSpell(2, PhaseStep.POSTCOMBAT_MAIN, playerA, "Lightning Bolt", playerB); + + + setStopAt(2, PhaseStep.END_TURN); + execute(); + + assertHandCount(playerB, "Obzedat's Aid", 0); + assertGraveyardCount(playerB, "Obzedat's Aid", 1); + assertGraveyardCount(playerB, "Curse of Exhaustion", 0); + + assertPermanentCount(playerB, "Curse of Exhaustion", 1); + + assertLife(playerA, 20); + assertLife(playerB, 17); + } + @Test public void testCurseOfThirst1() { addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5); diff --git a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java index 2b6d643fcb..24b7d5d0fb 100644 --- a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java +++ b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java @@ -63,6 +63,7 @@ import mage.constants.SpellAbilityType; import mage.filter.common.FilterCreatureForCombatBlock; import mage.filter.common.FilterPlaneswalkerPermanent; import mage.game.stack.StackObject; +import mage.target.TargetPlayer; /** * @@ -262,6 +263,20 @@ public class TestPlayer extends ComputerPlayer { } } } + if (target instanceof TargetPlayer) { + for (Player player :game.getPlayers().values()) { + for (String choose2: choices) { + if (player.getName().equals(choose2)) { + if (((TargetPlayer)target).canTarget(playerId, player.getId(), null, game) && !target.getTargets().contains(player.getId())) { + target.add(player.getId(), game); + choices.remove(choose2); + return true; + } + } + } + } + } + } return super.choose(outcome, target, sourceId, game, options); }