From ab352100f1e060566b6f3492b4098d8055dd454b Mon Sep 17 00:00:00 2001 From: emerald000 Date: Tue, 20 Sep 2016 09:34:36 -0400 Subject: [PATCH] Fixed Panharmonicon triggering for non-permanents. --- .../src/mage/sets/kaladesh/Panharmonicon.java | 11 ++++++++- .../cards/replacement/PanharmoniconTest.java | 24 +++++++++++++++++++ .../mage/abilities/TriggeredAbilities.java | 2 +- .../game/events/NumberOfTriggersEvent.java | 4 ++-- 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/Mage.Sets/src/mage/sets/kaladesh/Panharmonicon.java b/Mage.Sets/src/mage/sets/kaladesh/Panharmonicon.java index 187da675f2a..f25b93db0ab 100644 --- a/Mage.Sets/src/mage/sets/kaladesh/Panharmonicon.java +++ b/Mage.Sets/src/mage/sets/kaladesh/Panharmonicon.java @@ -92,11 +92,20 @@ class PanharmoniconEffect extends ReplacementEffectImpl { public boolean applies(GameEvent event, Ability source, Game game) { if (event instanceof NumberOfTriggersEvent) { NumberOfTriggersEvent numberOfTriggersEvent = (NumberOfTriggersEvent) event; + // Only triggers of the controller of Panharmonicon if (source.getControllerId().equals(event.getPlayerId())) { GameEvent sourceEvent = numberOfTriggersEvent.getSourceEvent(); + // Only EtB triggers if (sourceEvent.getType() == EventType.ENTERS_THE_BATTLEFIELD && sourceEvent instanceof EntersTheBattlefieldEvent) { EntersTheBattlefieldEvent entersTheBattlefieldEvent = (EntersTheBattlefieldEvent) sourceEvent; - return entersTheBattlefieldEvent.getTarget().getCardType().contains(CardType.ARTIFACT) || entersTheBattlefieldEvent.getTarget().getCardType().contains(CardType.CREATURE); + // Only for entering artifacts or creatures + if (entersTheBattlefieldEvent.getTarget().getCardType().contains(CardType.ARTIFACT) + || entersTheBattlefieldEvent.getTarget().getCardType().contains(CardType.CREATURE)) { + // Only for triggers of permanents + if (game.getPermanent(numberOfTriggersEvent.getSourceId()) != null) { + return true; + } + } } } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/PanharmoniconTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/PanharmoniconTest.java index d3286978fd1..b22682e1f01 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/PanharmoniconTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/PanharmoniconTest.java @@ -102,4 +102,28 @@ public class PanharmoniconTest extends CardTestPlayerBase { assertLife(playerA, 22); } + + /** + * Check that Panharmonicon doesn't add to non-permanents triggers. + * + */ + @Test + public void testDoesntAddNonPermanentsTriggers() { + // If an artifact or creature entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time. + addCard(Zone.BATTLEFIELD, playerA, "Panharmonicon"); + // When a Dragon enters the battlefield, you may return Bladewing's Thrall from your graveyard to the battlefield. + addCard(Zone.GRAVEYARD, playerA, "Bladewing's Thrall"); + // A 4/4 vanilla dragon + addCard(Zone.HAND, playerA, "Scion of Ugin"); + addCard(Zone.BATTLEFIELD, playerA, "Plains", 6); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Scion of Ugin"); + setChoice(playerA, "No"); // Return Bladewing's Thrall from your graveyard to the battlefield? + setChoice(playerA, "Yes"); // Should not get run since there is only one trigger. + + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertGraveyardCount(playerA, "Bladewing's Thrall", 1); + } } diff --git a/Mage/src/main/java/mage/abilities/TriggeredAbilities.java b/Mage/src/main/java/mage/abilities/TriggeredAbilities.java index e5fd438390d..967b22938e4 100644 --- a/Mage/src/main/java/mage/abilities/TriggeredAbilities.java +++ b/Mage/src/main/java/mage/abilities/TriggeredAbilities.java @@ -125,7 +125,7 @@ public class TriggeredAbilities extends ConcurrentHashMap