diff --git a/.gitattributes b/.gitattributes index 60d98682f55..f2f0fd7c775 100644 --- a/.gitattributes +++ b/.gitattributes @@ -11337,6 +11337,7 @@ forge-gui/res/cardsfolder/p/pandemonium.txt -text forge-gui/res/cardsfolder/p/pang_tong_young_phoenix.txt svneol=native#text/plain forge-gui/res/cardsfolder/p/panglacial_wurm.txt -text forge-gui/res/cardsfolder/p/pangosaur.txt svneol=native#text/plain +forge-gui/res/cardsfolder/p/panharmonicon.txt -text svneol=unset#text/plain forge-gui/res/cardsfolder/p/panic.txt svneol=native#text/plain forge-gui/res/cardsfolder/p/panic_attack.txt svneol=native#text/plain forge-gui/res/cardsfolder/p/panic_spellbomb.txt svneol=native#text/plain diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java index 4ac405b46cf..e7f867fef9b 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java @@ -327,7 +327,16 @@ public class TriggerHandler { // Static triggers for (final Trigger t : Lists.newArrayList(activeTriggers)) { if (t.isStatic() && canRunTrigger(t, mode, runParams)) { - runSingleTrigger(t, runParams); + int x = 1; + + if (handlePanharmonicon(t, runParams)) { + x += t.getHostCard().getController().getAmountOfKeyword("Panharmonicon"); + } + + for (int i = 0; i < x; ++i) { + runSingleTrigger(t, runParams); + } + checkStatics = true; } } @@ -387,7 +396,15 @@ public class TriggerHandler { } } - runSingleTrigger(t, runParams); + int x = 1; + + if (handlePanharmonicon(t, runParams)) { + x += t.getHostCard().getController().getAmountOfKeyword("Panharmonicon"); + } + + for (int i = 0; i < x; ++i) { + runSingleTrigger(t, runParams); + } checkStatics = true; } } @@ -610,4 +627,29 @@ public class TriggerHandler { } } } + + private boolean handlePanharmonicon(final Trigger t, final Map runParams) { + // not a changesZone trigger + if (t.getMode() != TriggerType.ChangesZone) { + return false; + } + + // not a Permanent you control + if (!t.getHostCard().isPermanent() || !t.getHostCard().isInZone(ZoneType.Battlefield)) { + return false; + } + + // its not an ETB trigger or the card is not a Artifact or Creature + if (runParams.get("Destination") instanceof String) { + final String dest = (String) runParams.get("Destination"); + if (dest.equals("Battlefield") && runParams.get("Card") instanceof Card) { + final Card card = (Card) runParams.get("Card"); + if (card.isCreature() || card.isArtifact()) { + return true; + } + } + } + + return false; + } } diff --git a/forge-gui/res/cardsfolder/p/panharmonicon.txt b/forge-gui/res/cardsfolder/p/panharmonicon.txt new file mode 100644 index 00000000000..368ab7e0eca --- /dev/null +++ b/forge-gui/res/cardsfolder/p/panharmonicon.txt @@ -0,0 +1,6 @@ +Name:Panharmonicon +ManaCost:4 +Types:Artifact +S:Mode$ Continuous | Affected$ You | AddKeyword$ Panharmonicon | Description$ 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. +SVar:Picture:http://www.wizards.com/global/images/magic/general/panharmonicon.jpg +Oracle: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.