diff --git a/.gitattributes b/.gitattributes index 1cfdc7b16bd..93cea3ed848 100644 --- a/.gitattributes +++ b/.gitattributes @@ -11525,6 +11525,7 @@ src/main/java/forge/card/trigger/TriggerTaps.java svneol=native#text/plain src/main/java/forge/card/trigger/TriggerTapsForMana.java svneol=native#text/plain src/main/java/forge/card/trigger/TriggerTransformed.java -text src/main/java/forge/card/trigger/TriggerTurnFaceUp.java svneol=native#text/plain +src/main/java/forge/card/trigger/TriggerType.java -text src/main/java/forge/card/trigger/TriggerUnequip.java svneol=native#text/plain src/main/java/forge/card/trigger/TriggerUntaps.java svneol=native#text/plain src/main/java/forge/card/trigger/package-info.java svneol=native#text/plain diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index 16ad61fde5c..326c6b7d2bf 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -48,6 +48,7 @@ import forge.card.spellability.SpellPermanent; import forge.card.spellability.Target; import forge.card.staticability.StaticAbility; import forge.card.trigger.Trigger; +import forge.card.trigger.TriggerType; import forge.item.CardDb; import forge.util.MyRandom; @@ -265,7 +266,7 @@ public class Card extends GameEntity implements Comparable { HashMap runParams = new HashMap(); runParams.put("Mode", "Transformed"); runParams.put("Transformer", this); - AllZone.getTriggerHandler().runTrigger("Transformed", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.Transformed, runParams); } return true; @@ -1197,7 +1198,7 @@ public class Card extends GameEntity implements Comparable { runParams.put("Card", this); runParams.put("CounterType", counterName); for (int i = 0; i < n; i++) { - AllZone.getTriggerHandler().runTrigger("CounterAdded", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.CounterAdded, runParams); } this.updateObservers(); @@ -1230,7 +1231,7 @@ public class Card extends GameEntity implements Comparable { runParams.put("Card", this); runParams.put("CounterType", counterName); for (int i = 0; i < (multiplier * n); i++) { - AllZone.getTriggerHandler().runTrigger("CounterAdded", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.CounterAdded, runParams); } this.updateObservers(); @@ -1259,7 +1260,7 @@ public class Card extends GameEntity implements Comparable { runParams.put("Card", this); runParams.put("CounterType", counterName); for (int i = 0; i < n; i++) { - AllZone.getTriggerHandler().runTrigger("CounterRemoved", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.CounterRemoved, runParams); } if (counterName.equals(Counters.TIME) && (aux == 0)) { @@ -3864,7 +3865,7 @@ public class Card extends GameEntity implements Comparable { final Map runParams = new TreeMap(); runParams.put("Equipment", this); runParams.put("Card", c); - AllZone.getTriggerHandler().runTrigger("Unequip", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.Unequip, runParams); } /** @@ -4917,7 +4918,7 @@ public class Card extends GameEntity implements Comparable { // Run triggers final Map runParams = new TreeMap(); runParams.put("Card", this); - AllZone.getTriggerHandler().runTrigger("Taps", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.Taps, runParams); } this.setTapped(true); } @@ -4932,7 +4933,7 @@ public class Card extends GameEntity implements Comparable { // Run triggers final Map runParams = new TreeMap(); runParams.put("Card", this); - AllZone.getTriggerHandler().runTrigger("Untaps", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.Untaps, runParams); } @@ -5973,9 +5974,9 @@ public class Card extends GameEntity implements Comparable { // Suppressed Exiling is as close as we can get to // "ceasing to exist" - AllZone.getTriggerHandler().suppressMode("ChangesZone"); + AllZone.getTriggerHandler().suppressMode(TriggerType.ChangesZone); Singletons.getModel().getGameAction().exile(this); - AllZone.getTriggerHandler().clearSuppression("ChangesZone"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.ChangesZone); } return true; } @@ -8025,7 +8026,7 @@ public class Card extends GameEntity implements Comparable { runParams.put("DamageTarget", this); runParams.put("DamageAmount", damageToAdd); runParams.put("IsCombatDamage", isCombat); - AllZone.getTriggerHandler().runTrigger("DamageDone", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.DamageDone, runParams); if (this.isPlaneswalker()) { this.subtractCounter(Counters.LOYALTY, damageToAdd); diff --git a/src/main/java/forge/CardUtil.java b/src/main/java/forge/CardUtil.java index 680a1f3a326..43c3d84fbe2 100644 --- a/src/main/java/forge/CardUtil.java +++ b/src/main/java/forge/CardUtil.java @@ -35,6 +35,7 @@ import forge.card.EditionInfo; import forge.card.mana.ManaCost; import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellAbilityList; +import forge.card.trigger.TriggerType; import forge.control.input.InputPayManaCostUtil; import forge.item.CardPrinted; import forge.properties.ForgeProps; @@ -912,14 +913,14 @@ public final class CardUtil { return c; } final CardCharactersticName state = c.getCurState(); - AllZone.getTriggerHandler().suppressMode("Transformed"); + AllZone.getTriggerHandler().suppressMode(TriggerType.Transformed); if (c.isInAlternateState()) { c.setState(CardCharactersticName.Original); } final Card res = AllZone.getCardFactory().copyCard(c); c.setState(state); res.setState(state); - AllZone.getTriggerHandler().clearSuppression("Transformed"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.Transformed); res.setControllerObjects(c.getControllerObjects()); res.addTempAttackBoost(c.getTempAttackBoost()); res.addSemiPermanentAttackBoost(c.getSemiPermanentAttackBoost()); diff --git a/src/main/java/forge/Combat.java b/src/main/java/forge/Combat.java index bda937adbf1..286bca5bc89 100644 --- a/src/main/java/forge/Combat.java +++ b/src/main/java/forge/Combat.java @@ -29,6 +29,7 @@ import java.util.Set; import java.util.TreeMap; import forge.Constant.Zone; +import forge.card.trigger.TriggerType; /** *

@@ -667,7 +668,7 @@ public class Combat { // Run Unblocked Trigger final HashMap runParams = new HashMap(); runParams.put("Attacker", attacker); - AllZone.getTriggerHandler().runTrigger("AttackerUnblocked", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.AttackerUnblocked, runParams); } } diff --git a/src/main/java/forge/CombatUtil.java b/src/main/java/forge/CombatUtil.java index 35e54fa8ad4..98b3f7af878 100644 --- a/src/main/java/forge/CombatUtil.java +++ b/src/main/java/forge/CombatUtil.java @@ -33,6 +33,7 @@ import forge.card.spellability.Ability; import forge.card.staticability.StaticAbility; import forge.card.trigger.Trigger; import forge.card.trigger.TriggerHandler; +import forge.card.trigger.TriggerType; import forge.control.input.InputPayManaCostAbility; import forge.gui.GuiUtils; @@ -2588,7 +2589,7 @@ public class CombatUtil { otherAttackers.remove(c); runParams.put("OtherAttackers", otherAttackers); runParams.put("Attacked", AllZone.getCombat().getDefenderByAttacker(c)); - AllZone.getTriggerHandler().runTrigger("Attacks", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.Attacks, runParams); // Annihilator: if (!c.getDamageHistory().getCreatureAttackedThisCombat()) { @@ -2722,7 +2723,7 @@ public class CombatUtil { // Run triggers final HashMap runParams = new HashMap(); runParams.put("Card", c); - AllZone.getTriggerHandler().runTrigger("AttackerUnblocked", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.AttackerUnblocked, runParams); } /** @@ -2763,12 +2764,12 @@ public class CombatUtil { final HashMap runParams = new HashMap(); runParams.put("Attacker", a); runParams.put("Blocker", b); - AllZone.getTriggerHandler().runTrigger("Blocks", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.Blocks, runParams); if (!a.getDamageHistory().getCreatureGotBlockedThisCombat()) { final int blockers = AllZone.getCombat().getBlockers(a).size(); runParams.put("NumBlockers", blockers); - AllZone.getTriggerHandler().runTrigger("AttackerBlocked", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.AttackerBlocked, runParams); // Bushido for (final Ability ab : CardFactoryUtil.getBushidoEffects(a)) { diff --git a/src/main/java/forge/DefaultPlayerZone.java b/src/main/java/forge/DefaultPlayerZone.java index 0022889428c..fab4b98b36c 100644 --- a/src/main/java/forge/DefaultPlayerZone.java +++ b/src/main/java/forge/DefaultPlayerZone.java @@ -22,6 +22,7 @@ import java.util.List; import java.util.Observable; import forge.Constant.Zone; +import forge.card.trigger.TriggerType; /** *

@@ -104,9 +105,9 @@ public class DefaultPlayerZone extends PlayerZone implements java.io.Serializabl c.setTurnInZone(Singletons.getModel().getGameState().getPhaseHandler().getTurn()); if (!this.is(Zone.Battlefield) && c.isTapped()) { - AllZone.getTriggerHandler().suppressMode("Untaps"); + AllZone.getTriggerHandler().suppressMode(TriggerType.Untaps); c.untap(); - AllZone.getTriggerHandler().clearSuppression("Untaps"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.Untaps); } this.getCardList().add(c); @@ -149,9 +150,9 @@ public class DefaultPlayerZone extends PlayerZone implements java.io.Serializabl } if (!this.is(Zone.Battlefield) && c.isTapped()) { - AllZone.getTriggerHandler().suppressMode("Untaps"); + AllZone.getTriggerHandler().suppressMode(TriggerType.Untaps); c.untap(); - AllZone.getTriggerHandler().clearSuppression("Untaps"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.Untaps); } this.getCardList().add(index, c); diff --git a/src/main/java/forge/GameAction.java b/src/main/java/forge/GameAction.java index 5d5416914c3..d6e3ff63208 100644 --- a/src/main/java/forge/GameAction.java +++ b/src/main/java/forge/GameAction.java @@ -43,6 +43,7 @@ import forge.card.spellability.Target; import forge.card.spellability.TargetSelection; import forge.card.staticability.StaticAbility; import forge.card.trigger.Trigger; +import forge.card.trigger.TriggerType; import forge.control.input.InputPayManaCost; import forge.control.input.InputPayManaCostAbility; import forge.control.input.InputPayManaCostUtil; @@ -132,12 +133,12 @@ public class GameAction { lastKnownInfo = c; copied = c; } else { - AllZone.getTriggerHandler().suppressMode("Transformed"); + AllZone.getTriggerHandler().suppressMode(TriggerType.Transformed); if (c.isCloned()) { c.switchStates(CardCharactersticName.Cloner, CardCharactersticName.Original); c.setState(CardCharactersticName.Original); } - AllZone.getTriggerHandler().clearSuppression("Transformed"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.Transformed); lastKnownInfo = CardUtil.getLKICopy(c); copied = AllZone.getCardFactory().copyCard(c); @@ -156,7 +157,7 @@ public class GameAction { } if (suppress) { - AllZone.getTriggerHandler().suppressMode("ChangesZone"); + AllZone.getTriggerHandler().suppressMode(TriggerType.ChangesZone); } zone.add(copied); @@ -187,11 +188,11 @@ public class GameAction { runParams.put("Origin", null); } runParams.put("Destination", zone.getZoneType().name()); - AllZone.getTriggerHandler().runTrigger("ChangesZone", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.ChangesZone, runParams); // AllZone.getStack().chooseOrderOfSimultaneousStackEntryAll(); if (suppress) { - AllZone.getTriggerHandler().clearSuppression("ChangesZone"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.ChangesZone); } // remove all counters from the card if destination is not the @@ -204,9 +205,9 @@ public class GameAction { .is(Constant.Zone.Library))) { copied.clearCounters(); } - AllZone.getTriggerHandler().suppressMode("Transformed"); + AllZone.getTriggerHandler().suppressMode(TriggerType.Transformed); copied.setState(CardCharactersticName.Original); - AllZone.getTriggerHandler().clearSuppression("Transformed"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.Transformed); } copied.setTimestamp(AllZone.getNextTimestamp()); @@ -333,7 +334,7 @@ public class GameAction { return; } - AllZone.getTriggerHandler().suppressMode("ChangesZone"); + AllZone.getTriggerHandler().suppressMode(TriggerType.ChangesZone); ((PlayerZoneComesIntoPlay) AllZone.getHumanPlayer().getZone(Zone.Battlefield)).setTriggers(false); ((PlayerZoneComesIntoPlay) AllZone.getComputerPlayer().getZone(Zone.Battlefield)).setTriggers(false); @@ -351,9 +352,9 @@ public class GameAction { final HashMap runParams = new HashMap(); runParams.put("Card", c); - AllZone.getTriggerHandler().runTrigger("ChangesController", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.ChangesController, runParams); - AllZone.getTriggerHandler().clearSuppression("ChangesZone"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.ChangesZone); ((PlayerZoneComesIntoPlay) AllZone.getHumanPlayer().getZone(Zone.Battlefield)).setTriggers(true); ((PlayerZoneComesIntoPlay) AllZone.getComputerPlayer().getZone(Zone.Battlefield)).setTriggers(true); } @@ -590,9 +591,9 @@ public class GameAction { } if (c.isInAlternateState()) { - AllZone.getTriggerHandler().suppressMode("Transformed"); + AllZone.getTriggerHandler().suppressMode(TriggerType.Transformed); c.setState(CardCharactersticName.Original); - AllZone.getTriggerHandler().clearSuppression("Transformed"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.Transformed); } if ((p != null) && p.is(Constant.Zone.Battlefield)) { @@ -615,7 +616,7 @@ public class GameAction { runParams.put("Origin", null); } runParams.put("Destination", Constant.Zone.Library); - AllZone.getTriggerHandler().runTrigger("ChangesZone", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.ChangesZone, runParams); return c; } @@ -886,7 +887,7 @@ public class GameAction { this.checkStaticAbilities(); final HashMap runParams = new HashMap(); - AllZone.getTriggerHandler().runTrigger("Always", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.Always, runParams); final CardList list = AllZoneUtil.getCardsIn(Zone.Battlefield); Card c; @@ -1099,7 +1100,7 @@ public class GameAction { // Run triggers final HashMap runParams = new HashMap(); runParams.put("Card", c); - AllZone.getTriggerHandler().runTrigger("Sacrificed", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.Sacrificed, runParams); return true; } @@ -1791,11 +1792,11 @@ public class GameAction { // AND that you can't use mana tapabilities of convoked // creatures // to pay the convoked cost. - AllZone.getTriggerHandler().suppressMode("Taps"); + AllZone.getTriggerHandler().suppressMode(TriggerType.Taps); for (final Card c : sa.getTappedForConvoke()) { c.tap(); } - AllZone.getTriggerHandler().clearSuppression("Taps"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.Taps); manaCost = newCost; } diff --git a/src/main/java/forge/GuiDisplayUtil.java b/src/main/java/forge/GuiDisplayUtil.java index 9c80f584bd9..8eb7644b235 100644 --- a/src/main/java/forge/GuiDisplayUtil.java +++ b/src/main/java/forge/GuiDisplayUtil.java @@ -41,6 +41,7 @@ import arcane.ui.util.Animation; import forge.Constant.Zone; import forge.card.cardfactory.CardFactoryUtil; import forge.card.spellability.AbilityMana; +import forge.card.trigger.TriggerType; import forge.gui.GuiUtils; import forge.gui.ListChooser; import forge.gui.game.CardPanel; @@ -1351,7 +1352,7 @@ public final class GuiDisplayUtil { AllZone.getComputerPlayer()); } - AllZone.getTriggerHandler().suppressMode("ChangesZone"); + AllZone.getTriggerHandler().suppressMode(TriggerType.ChangesZone); AllZone.getCombat().reset(); for (final Card c : humanDevSetup) { AllZone.getHumanPlayer().getZone(Zone.Hand).add(c); @@ -1393,7 +1394,7 @@ public final class GuiDisplayUtil { AllZone.getComputerPlayer().getZone(Zone.Exile).setCards(computerDevExileSetup); } - AllZone.getTriggerHandler().clearSuppression("ChangesZone"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.ChangesZone); if (setComputerLife > 0) { AllZone.getComputerPlayer().setLife(setComputerLife, null); diff --git a/src/main/java/forge/MagicStack.java b/src/main/java/forge/MagicStack.java index 6d78a295e3a..413e95d6c56 100644 --- a/src/main/java/forge/MagicStack.java +++ b/src/main/java/forge/MagicStack.java @@ -41,6 +41,7 @@ import forge.card.spellability.Target; import forge.card.spellability.TargetChoices; import forge.card.spellability.TargetSelection; import forge.card.trigger.Trigger; +import forge.card.trigger.TriggerType; import forge.control.input.Input; import forge.control.input.InputPayManaCostAbility; import forge.gui.GuiUtils; @@ -683,23 +684,23 @@ public class MagicStack extends MyObservable { runParams.put("Player", sp.getSourceCard().getController()); runParams.put("Activator", sp.getActivatingPlayer()); runParams.put("CastSA", sp); - AllZone.getTriggerHandler().runTrigger("SpellAbilityCast", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.SpellAbilityCast, runParams); // Run SpellCast triggers if (sp.isSpell()) { - AllZone.getTriggerHandler().runTrigger("SpellCast", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.SpellCast, runParams); } // Run AbilityCast triggers if (sp.isAbility() && !sp.isTrigger()) { - AllZone.getTriggerHandler().runTrigger("AbilityCast", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.AbilityCast, runParams); } // Run Cycled triggers if (sp.isCycling()) { runParams.clear(); runParams.put("Card", sp.getSourceCard()); - AllZone.getTriggerHandler().runTrigger("Cycled", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.Cycled, runParams); } // Run BecomesTarget triggers @@ -711,7 +712,7 @@ public class MagicStack extends MyObservable { for (final Object tgt : tc.getTargets()) { runParams.put("Target", tgt); - AllZone.getTriggerHandler().runTrigger("BecomesTarget", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.BecomesTarget, runParams); } } } @@ -722,17 +723,17 @@ public class MagicStack extends MyObservable { else if (sp.getTargetCard() != null) { runParams.put("Target", sp.getTargetCard()); - AllZone.getTriggerHandler().runTrigger("BecomesTarget", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.BecomesTarget, runParams); } else if ((sp.getTargetList() != null) && (sp.getTargetList().size() > 0)) { for (final Card ctgt : sp.getTargetList()) { runParams.put("Target", ctgt); - AllZone.getTriggerHandler().runTrigger("BecomesTarget", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.BecomesTarget, runParams); } } else if (sp.getTargetPlayer() != null) { runParams.put("Target", sp.getTargetPlayer()); - AllZone.getTriggerHandler().runTrigger("BecomesTarget", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.BecomesTarget, runParams); } } diff --git a/src/main/java/forge/PhaseHandler.java b/src/main/java/forge/PhaseHandler.java index c4c3483c991..92b09db0a7e 100644 --- a/src/main/java/forge/PhaseHandler.java +++ b/src/main/java/forge/PhaseHandler.java @@ -24,6 +24,7 @@ import java.util.Stack; import com.esotericsoftware.minlog.Log; import forge.Constant.Zone; +import forge.card.trigger.TriggerType; /** *

@@ -471,7 +472,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { final HashMap runParams = new HashMap(); runParams.put("Phase", phase); runParams.put("Player", turn); - AllZone.getTriggerHandler().runTrigger("Phase", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.Phase, runParams); } diff --git a/src/main/java/forge/PhaseUtil.java b/src/main/java/forge/PhaseUtil.java index 4d215e1a450..006c6a6e2c1 100644 --- a/src/main/java/forge/PhaseUtil.java +++ b/src/main/java/forge/PhaseUtil.java @@ -20,6 +20,7 @@ package forge; import java.util.HashMap; import forge.Constant.Zone; +import forge.card.trigger.TriggerType; import forge.control.ControlMatchUI; import forge.view.match.ViewField.PhaseLabel; @@ -305,7 +306,7 @@ public class PhaseUtil { final HashMap runParams = new HashMap(); runParams.put("Attackers", list); runParams.put("AttackingPlayer", AllZone.getCombat().getAttackingPlayer()); - AllZone.getTriggerHandler().runTrigger("AttackersDeclared", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.AttackersDeclared, runParams); for (final Card c : list) { CombatUtil.checkDeclareAttackers(c); diff --git a/src/main/java/forge/Player.java b/src/main/java/forge/Player.java index 50c19fb7455..a228a9f2f43 100644 --- a/src/main/java/forge/Player.java +++ b/src/main/java/forge/Player.java @@ -34,6 +34,7 @@ import forge.card.cardfactory.CardFactoryUtil; import forge.card.mana.ManaPool; import forge.card.spellability.SpellAbility; import forge.card.staticability.StaticAbility; +import forge.card.trigger.TriggerType; import forge.game.GameLossReason; import forge.gui.GuiUtils; import forge.util.MyRandom; @@ -349,7 +350,7 @@ public abstract class Player extends GameEntity { final HashMap runParams = new HashMap(); runParams.put("Player", this); runParams.put("LifeAmount", lifeGain); - AllZone.getTriggerHandler().runTrigger("LifeGained", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.LifeGained, runParams); } else { System.out.println("Player - trying to gain negative or 0 life"); } @@ -406,7 +407,7 @@ public abstract class Player extends GameEntity { final HashMap runParams = new HashMap(); runParams.put("Player", this); runParams.put("LifeAmount", toLose); - AllZone.getTriggerHandler().runTrigger("LifeLost", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.LifeLost, runParams); return newLifeSet; } @@ -548,7 +549,7 @@ public abstract class Player extends GameEntity { runParams.put("DamageTarget", this); runParams.put("DamageAmount", damageToDo); runParams.put("IsCombatDamage", isCombat); - AllZone.getTriggerHandler().runTrigger("DamageDone", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.DamageDone, runParams); } } @@ -1288,7 +1289,7 @@ public abstract class Player extends GameEntity { final HashMap runParams = new HashMap(); runParams.put("Card", c); runParams.put("Number", this.numDrawnThisTurn); - AllZone.getTriggerHandler().runTrigger("Drawn", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.Drawn, runParams); } // lose: else if (!Constant.Runtime.DEV_MODE[0] || Constant.Runtime.MILL[0]) { @@ -1554,7 +1555,7 @@ public abstract class Player extends GameEntity { runParams.put("Player", this); runParams.put("Card", c); runParams.put("Cause", cause); - AllZone.getTriggerHandler().runTrigger("Discarded", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.Discarded, runParams); } // end doDiscard @@ -1741,7 +1742,7 @@ public abstract class Player extends GameEntity { // Run triggers final HashMap runParams = new HashMap(); runParams.put("Player", this); - AllZone.getTriggerHandler().runTrigger("Shuffled", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.Shuffled, runParams); } // shuffle // ////////////////////////////// @@ -1804,7 +1805,7 @@ public abstract class Player extends GameEntity { // Run triggers final HashMap runParams = new HashMap(); runParams.put("Card", land); - AllZone.getTriggerHandler().runTrigger("LandPlayed", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.LandPlayed, runParams); } AllZone.getStack().unfreezeStack(); diff --git a/src/main/java/forge/Upkeep.java b/src/main/java/forge/Upkeep.java index 18603b8113a..a334dd6a662 100644 --- a/src/main/java/forge/Upkeep.java +++ b/src/main/java/forge/Upkeep.java @@ -25,6 +25,7 @@ import forge.card.spellability.Ability; import forge.card.spellability.AbilityMana; import forge.card.spellability.AbilityStatic; import forge.card.spellability.SpellAbility; +import forge.card.trigger.TriggerType; import forge.control.input.Input; import forge.gui.GuiUtils; @@ -2240,9 +2241,9 @@ public class Upkeep extends Phase implements java.io.Serializable { // Doppelganger/whatever the source is newCopy.setImageFilename(c.getImageFilename()); - AllZone.getTriggerHandler().suppressMode("Transformed"); + AllZone.getTriggerHandler().suppressMode(TriggerType.Transformed); newCopy.setState(newTarget[0].getCurState()); - AllZone.getTriggerHandler().clearSuppression("Transformed"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.Transformed); CardFactoryUtil.copyCharacteristics(newCopy, c); c.addColor("U"); diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryClash.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryClash.java index 0ccc874a1ae..49ad9f7f712 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryClash.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryClash.java @@ -35,6 +35,7 @@ import forge.card.spellability.AbilitySub; import forge.card.spellability.Spell; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; +import forge.card.trigger.TriggerType; import forge.gui.GuiUtils; /** @@ -222,7 +223,7 @@ public final class AbilityFactoryClash { runParams.put("Won", "False"); } - AllZone.getTriggerHandler().runTrigger("Clashed", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.Clashed, runParams); } // ************************************************************************* diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryCopy.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryCopy.java index 1155641e373..cf26faaf201 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryCopy.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryCopy.java @@ -42,6 +42,7 @@ import forge.card.spellability.AbilitySub; import forge.card.spellability.Spell; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; +import forge.card.trigger.TriggerType; import forge.gui.GuiUtils; import forge.util.MyRandom; @@ -364,7 +365,7 @@ public final class AbilityFactoryCopy { for (final Card c : tgtCards) { if ((tgt == null) || c.canBeTargetedBy(sa)) { - AllZone.getTriggerHandler().suppressMode("Transformed"); + AllZone.getTriggerHandler().suppressMode(TriggerType.Transformed); boolean wasInAlt = false; if (c.isInAlternateState()) { wasInAlt = true; @@ -439,7 +440,7 @@ public final class AbilityFactoryCopy { sa.getSourceCard().addClone(copy); crds[i] = copy; - AllZone.getTriggerHandler().clearSuppression("Transformed"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.Transformed); } // have to do this since getTargetCard() might change diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryEffect.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryEffect.java index c4e8ab25092..2fb61aa35d1 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryEffect.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryEffect.java @@ -42,6 +42,7 @@ import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; import forge.card.trigger.Trigger; import forge.card.trigger.TriggerHandler; +import forge.card.trigger.TriggerType; import forge.util.MyRandom; /** @@ -510,9 +511,9 @@ public class AbilityFactoryEffect { } // TODO: Add targeting to the effect so it knows who it's dealing with - AllZone.getTriggerHandler().suppressMode("ChangesZone"); + AllZone.getTriggerHandler().suppressMode(TriggerType.ChangesZone); Singletons.getModel().getGameAction().moveToPlay(eff); - AllZone.getTriggerHandler().clearSuppression("ChangesZone"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.ChangesZone); } } // end class AbilityFactoryEffect diff --git a/src/main/java/forge/card/cardfactory/AbstractCardFactory.java b/src/main/java/forge/card/cardfactory/AbstractCardFactory.java index 6dd80e6e580..0d778c42e0d 100644 --- a/src/main/java/forge/card/cardfactory/AbstractCardFactory.java +++ b/src/main/java/forge/card/cardfactory/AbstractCardFactory.java @@ -53,6 +53,7 @@ import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellPermanent; import forge.card.spellability.Target; import forge.card.trigger.Trigger; +import forge.card.trigger.TriggerType; import forge.control.input.Input; import forge.control.input.InputPayManaCost; import forge.game.GameLossReason; @@ -183,7 +184,7 @@ public abstract class AbstractCardFactory implements CardFactoryInterface { @Override public final Card copyCard(final Card in) { final CardCharactersticName curState = in.getCurState(); - AllZone.getTriggerHandler().suppressMode("Transformed"); + AllZone.getTriggerHandler().suppressMode(TriggerType.Transformed); if (in.isInAlternateState()) { in.setState(CardCharactersticName.Original); } @@ -201,7 +202,7 @@ public abstract class AbstractCardFactory implements CardFactoryInterface { in.setState(curState); out.setState(curState); } - AllZone.getTriggerHandler().clearSuppression("Transformed"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.Transformed); // I'm not sure if we really should be copying enchant/equip stuff over. out.setEquipping(in.getEquipping()); @@ -1418,7 +1419,7 @@ public abstract class AbstractCardFactory implements CardFactoryInterface { if (copyTarget[0] != null) { Card cloned; - AllZone.getTriggerHandler().suppressMode("Transformed"); + AllZone.getTriggerHandler().suppressMode(TriggerType.Transformed); // TODO: transform back and forth cloned = getCard2(copyTarget[0], card.getOwner()); @@ -1452,7 +1453,7 @@ public abstract class AbstractCardFactory implements CardFactoryInterface { card.setFlip(false); } - AllZone.getTriggerHandler().clearSuppression("Transformed"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.Transformed); } Singletons.getModel().getGameAction().moveToPlay(card); diff --git a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java index 03f9f6ececa..7b5bcd7768e 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java @@ -53,6 +53,7 @@ import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellPermanent; import forge.card.spellability.Target; import forge.card.trigger.Trigger; +import forge.card.trigger.TriggerType; import forge.control.input.Input; import forge.control.input.InputPayManaCost; import forge.gui.GuiUtils; @@ -1818,7 +1819,7 @@ public class CardFactoryCreatures { if (copyTarget[0] != null) { Card cloned; - AllZone.getTriggerHandler().suppressMode("Transformed"); + AllZone.getTriggerHandler().suppressMode(TriggerType.Transformed); if (copyTarget[0].isToken()) { cloned = CardFactoryUtil.copyStats(copyTarget[0]); @@ -1880,7 +1881,7 @@ public class CardFactoryCreatures { card.setFlip(false); } - AllZone.getTriggerHandler().clearSuppression("Transformed"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.Transformed); } diff --git a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java index 8a6b40d268a..88728601174 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java @@ -63,6 +63,7 @@ import forge.card.spellability.SpellPermanent; import forge.card.spellability.Target; import forge.card.trigger.Trigger; import forge.card.trigger.TriggerHandler; +import forge.card.trigger.TriggerType; import forge.control.input.Input; import forge.control.input.InputPayManaCost; import forge.control.input.InputPayManaCostUtil; @@ -982,7 +983,7 @@ public class CardFactoryUtil { // Run triggers final Map runParams = new TreeMap(); runParams.put("Card", sourceCard); - AllZone.getTriggerHandler().runTrigger("TurnFaceUp", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.TurnFaceUp, runParams); } @Override @@ -1835,7 +1836,7 @@ public class CardFactoryUtil { final HashMap runParams = new HashMap(); runParams.put("Card", spell.getSourceCard()); runParams.put("Championed", card); - AllZone.getTriggerHandler().runTrigger("Championed", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.Championed, runParams); } } } // selectCard() @@ -4104,7 +4105,7 @@ public class CardFactoryUtil { c.setDoubleFaced(sim.isDoubleFaced()); c.setCurSetCode(sim.getCurSetCode()); - AllZone.getTriggerHandler().suppressMode("Transformed"); + AllZone.getTriggerHandler().suppressMode(TriggerType.Transformed); final CardCharactersticName origState = sim.getCurState(); for (final CardCharactersticName state : sim.getStates()) { c.addAlternateState(state); @@ -4116,7 +4117,7 @@ public class CardFactoryUtil { sim.setState(origState); c.setState(origState); - AllZone.getTriggerHandler().clearSuppression("Transformed"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.Transformed); return c; } // copyStats() @@ -4819,9 +4820,9 @@ public class CardFactoryUtil { eff.addTrigger(copyTrigger); - AllZone.getTriggerHandler().suppressMode("ChangesZone"); + AllZone.getTriggerHandler().suppressMode(TriggerType.ChangesZone); Singletons.getModel().getGameAction().moveToPlay(eff); - AllZone.getTriggerHandler().clearSuppression("ChangesZone"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.ChangesZone); if (card.getController().isHuman()) { Singletons.getModel().getGameAction().playSpellAbilityNoStack(origSA, false); diff --git a/src/main/java/forge/card/cost/CostMana.java b/src/main/java/forge/card/cost/CostMana.java index bdd3f102da1..ded2d972806 100644 --- a/src/main/java/forge/card/cost/CostMana.java +++ b/src/main/java/forge/card/cost/CostMana.java @@ -31,6 +31,7 @@ import forge.Singletons; import forge.card.abilityfactory.AbilityFactory; import forge.card.mana.ManaCost; import forge.card.spellability.SpellAbility; +import forge.card.trigger.TriggerType; import forge.control.input.Input; import forge.control.input.InputMana; import forge.control.input.InputPayManaCostUtil; @@ -439,12 +440,12 @@ public class CostMana extends CostPart { // being tapped for convoke) if (sa.getTappedForConvoke() != null) { - AllZone.getTriggerHandler().suppressMode("Untaps"); + AllZone.getTriggerHandler().suppressMode(TriggerType.Untaps); for (final Card c : sa.getTappedForConvoke()) { c.untap(); c.tap(); } - AllZone.getTriggerHandler().clearSuppression("Untaps"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.Untaps); sa.clearTappedForConvoke(); } @@ -455,11 +456,11 @@ public class CostMana extends CostPart { // If we're paying for a spell with convoke, untap all creatures // used for it. if (sa.getTappedForConvoke() != null) { - AllZone.getTriggerHandler().suppressMode("Untaps"); + AllZone.getTriggerHandler().suppressMode(TriggerType.Untaps); for (final Card c : sa.getTappedForConvoke()) { c.untap(); } - AllZone.getTriggerHandler().clearSuppression("Untaps"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.Untaps); sa.clearTappedForConvoke(); } diff --git a/src/main/java/forge/card/spellability/AbilityMana.java b/src/main/java/forge/card/spellability/AbilityMana.java index cbd4c8fd661..2e0cfb5708b 100644 --- a/src/main/java/forge/card/spellability/AbilityMana.java +++ b/src/main/java/forge/card/spellability/AbilityMana.java @@ -25,6 +25,7 @@ import forge.Card; import forge.Player; import forge.card.cost.Cost; import forge.card.mana.ManaPool; +import forge.card.trigger.TriggerType; import forge.control.input.InputPayManaCostUtil; /** @@ -185,7 +186,7 @@ public abstract class AbilityMana extends AbilityActivated implements java.io.Se runParams.put("Player", player); runParams.put("AbilityMana", this); runParams.put("Produced", produced); - AllZone.getTriggerHandler().runTrigger("TapsForMana", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.TapsForMana, runParams); } // end produceMana(String) diff --git a/src/main/java/forge/card/spellability/SpellPermanent.java b/src/main/java/forge/card/spellability/SpellPermanent.java index ca897d53bbb..f0df9efb703 100644 --- a/src/main/java/forge/card/spellability/SpellPermanent.java +++ b/src/main/java/forge/card/spellability/SpellPermanent.java @@ -38,6 +38,7 @@ import forge.card.abilityfactory.AbilityFactory; import forge.card.cardfactory.CardFactoryUtil; import forge.card.cost.Cost; import forge.card.trigger.Trigger; +import forge.card.trigger.TriggerType; import forge.control.input.Input; /** @@ -112,7 +113,7 @@ public class SpellPermanent extends Spell { final HashMap runParams = new HashMap(); runParams.put("Card", source); runParams.put("Championed", source.getChampionedCard()); - AllZone.getTriggerHandler().runTrigger("Championed", runParams); + AllZone.getTriggerHandler().runTrigger(TriggerType.Championed, runParams); } else { Singletons.getModel().getGameAction().sacrifice(this.getSourceCard()); } diff --git a/src/main/java/forge/card/trigger/TriggerHandler.java b/src/main/java/forge/card/trigger/TriggerHandler.java index bfc5020ab4b..63f6df24b33 100644 --- a/src/main/java/forge/card/trigger/TriggerHandler.java +++ b/src/main/java/forge/card/trigger/TriggerHandler.java @@ -54,7 +54,7 @@ import forge.control.input.Input; */ public class TriggerHandler { - private final ArrayList suppressedModes = new ArrayList(); + private final ArrayList suppressedModes = new ArrayList(); private final ArrayList delayedTriggers = new ArrayList(); @@ -129,7 +129,7 @@ public class TriggerHandler { * @param mode * a {@link java.lang.String} object. */ - public final void suppressMode(final String mode) { + public final void suppressMode(final TriggerType mode) { this.suppressedModes.add(mode); } @@ -141,7 +141,7 @@ public class TriggerHandler { * @param mode * a {@link java.lang.String} object. */ - public final void clearSuppression(final String mode) { + public final void clearSuppression(final TriggerType mode) { this.suppressedModes.remove(mode); } @@ -201,72 +201,75 @@ public class TriggerHandler { public static Trigger parseTrigger(final HashMap mapParams, final Card host, final boolean intrinsic) { Trigger ret = null; - final String mode = mapParams.get("Mode"); - if (mode.equals("AbilityCast")) { - ret = new TriggerSpellAbilityCast(mapParams, host, intrinsic); - } else if (mode.equals("Always")) { - ret = new TriggerAlways(mapParams, host, intrinsic); - } else if (mode.equals("AttackerBlocked")) { - ret = new TriggerAttackerBlocked(mapParams, host, intrinsic); - } else if (mode.equals("AttackersDeclared")) { - ret = new TriggerAttackersDeclared(mapParams, host, intrinsic); - } else if (mode.equals("AttackerUnblocked")) { - ret = new TriggerAttackerUnblocked(mapParams, host, intrinsic); - } else if (mode.equals("Attacks")) { - ret = new TriggerAttacks(mapParams, host, intrinsic); - } else if (mode.equals("BecomesTarget")) { - ret = new TriggerBecomesTarget(mapParams, host, intrinsic); - } else if (mode.equals("Blocks")) { - ret = new TriggerBlocks(mapParams, host, intrinsic); - } else if (mode.equals("Championed")) { - ret = new TriggerChampioned(mapParams, host, intrinsic); - } else if (mode.equals("ChangesController")) { - ret = new TriggerChangesController(mapParams, host, intrinsic); - } else if (mode.equals("ChangesZone")) { - ret = new TriggerChangesZone(mapParams, host, intrinsic); - } else if (mode.equals("Clashed")) { - ret = new TriggerClashed(mapParams, host, intrinsic); - } else if (mode.equals("CounterAdded")) { - ret = new TriggerCounterAdded(mapParams, host, intrinsic); - } else if (mode.equals("CounterRemoved")) { - ret = new TriggerCounterRemoved(mapParams, host, intrinsic); - } else if (mode.equals("Cycled")) { - ret = new TriggerCycled(mapParams, host, intrinsic); - } else if (mode.equals("DamageDone")) { - ret = new TriggerDamageDone(mapParams, host, intrinsic); - } else if (mode.equals("Discarded")) { - ret = new TriggerDiscarded(mapParams, host, intrinsic); - } else if (mode.equals("Drawn")) { - ret = new TriggerDrawn(mapParams, host, intrinsic); - } else if (mode.equals("LandPlayed")) { - ret = new TriggerLandPlayed(mapParams, host, intrinsic); - } else if (mode.equals("LifeGained")) { - ret = new TriggerLifeGained(mapParams, host, intrinsic); - } else if (mode.equals("LifeLost")) { - ret = new TriggerLifeLost(mapParams, host, intrinsic); - } else if (mode.equals("Phase")) { - ret = new TriggerPhase(mapParams, host, intrinsic); - } else if (mode.equals("Sacrificed")) { - ret = new TriggerSacrificed(mapParams, host, intrinsic); - } else if (mode.equals("Shuffled")) { - ret = new TriggerShuffled(mapParams, host, intrinsic); - } else if (mode.equals("SpellAbilityCast")) { - ret = new TriggerSpellAbilityCast(mapParams, host, intrinsic); - } else if (mode.equals("SpellCast")) { - ret = new TriggerSpellAbilityCast(mapParams, host, intrinsic); - } else if (mode.equals("Taps")) { - ret = new TriggerTaps(mapParams, host, intrinsic); - } else if (mode.equals("TapsForMana")) { - ret = new TriggerTapsForMana(mapParams, host, intrinsic); - } else if (mode.equals("Transformed")) { - ret = new TriggerTransformed(mapParams, host, intrinsic); - } else if (mode.equals("TurnFaceUp")) { - ret = new TriggerTurnFaceUp(mapParams, host, intrinsic); - } else if (mode.equals("Unequip")) { - ret = new TriggerUnequip(mapParams, host, intrinsic); - } else if (mode.equals("Untaps")) { - ret = new TriggerUntaps(mapParams, host, intrinsic); - } +// final String mode = mapParams.get("Mode"); + final TriggerType type = TriggerType.smartValueOf(mapParams.get("Mode")); + ret = type.createTrigger(mapParams, host, intrinsic); +// +// if (mode.equals("AbilityCast")) { +// ret = new TriggerSpellAbilityCast(mapParams, host, intrinsic); +// } else if (mode.equals("Always")) { +// ret = new TriggerAlways(mapParams, host, intrinsic); +// } else if (mode.equals("AttackerBlocked")) { +// ret = new TriggerAttackerBlocked(mapParams, host, intrinsic); +// } else if (mode.equals("AttackersDeclared")) { +// ret = new TriggerAttackersDeclared(mapParams, host, intrinsic); +// } else if (mode.equals("AttackerUnblocked")) { +// ret = new TriggerAttackerUnblocked(mapParams, host, intrinsic); +// } else if (mode.equals("Attacks")) { +// ret = new TriggerAttacks(mapParams, host, intrinsic); +// } else if (mode.equals("BecomesTarget")) { +// ret = new TriggerBecomesTarget(mapParams, host, intrinsic); +// } else if (mode.equals("Blocks")) { +// ret = new TriggerBlocks(mapParams, host, intrinsic); +// } else if (mode.equals("Championed")) { +// ret = new TriggerChampioned(mapParams, host, intrinsic); +// } else if (mode.equals("ChangesController")) { +// ret = new TriggerChangesController(mapParams, host, intrinsic); +// } else if (mode.equals("ChangesZone")) { +// ret = new TriggerChangesZone(mapParams, host, intrinsic); +// } else if (mode.equals("Clashed")) { +// ret = new TriggerClashed(mapParams, host, intrinsic); +// } else if (mode.equals("CounterAdded")) { +// ret = new TriggerCounterAdded(mapParams, host, intrinsic); +// } else if (mode.equals("CounterRemoved")) { +// ret = new TriggerCounterRemoved(mapParams, host, intrinsic); +// } else if (mode.equals("Cycled")) { +// ret = new TriggerCycled(mapParams, host, intrinsic); +// } else if (mode.equals("DamageDone")) { +// ret = new TriggerDamageDone(mapParams, host, intrinsic); +// } else if (mode.equals("Discarded")) { +// ret = new TriggerDiscarded(mapParams, host, intrinsic); +// } else if (mode.equals("Drawn")) { +// ret = new TriggerDrawn(mapParams, host, intrinsic); +// } else if (mode.equals("LandPlayed")) { +// ret = new TriggerLandPlayed(mapParams, host, intrinsic); +// } else if (mode.equals("LifeGained")) { +// ret = new TriggerLifeGained(mapParams, host, intrinsic); +// } else if (mode.equals("LifeLost")) { +// ret = new TriggerLifeLost(mapParams, host, intrinsic); +// } else if (mode.equals("Phase")) { +// ret = new TriggerPhase(mapParams, host, intrinsic); +// } else if (mode.equals("Sacrificed")) { +// ret = new TriggerSacrificed(mapParams, host, intrinsic); +// } else if (mode.equals("Shuffled")) { +// ret = new TriggerShuffled(mapParams, host, intrinsic); +// } else if (mode.equals("SpellAbilityCast")) { +// ret = new TriggerSpellAbilityCast(mapParams, host, intrinsic); +// } else if (mode.equals("SpellCast")) { +// ret = new TriggerSpellAbilityCast(mapParams, host, intrinsic); +// } else if (mode.equals("Taps")) { +// ret = new TriggerTaps(mapParams, host, intrinsic); +// } else if (mode.equals("TapsForMana")) { +// ret = new TriggerTapsForMana(mapParams, host, intrinsic); +// } else if (mode.equals("Transformed")) { +// ret = new TriggerTransformed(mapParams, host, intrinsic); +// } else if (mode.equals("TurnFaceUp")) { +// ret = new TriggerTurnFaceUp(mapParams, host, intrinsic); +// } else if (mode.equals("Unequip")) { +// ret = new TriggerUnequip(mapParams, host, intrinsic); +// } else if (mode.equals("Untaps")) { +// ret = new TriggerUntaps(mapParams, host, intrinsic); +// } return ret; } @@ -322,7 +325,7 @@ public class TriggerHandler { * @param runParams * a {@link java.util.Map} object. */ - public final void runTrigger(final String mode, final Map runParams) { + public final void runTrigger(final TriggerType mode, final Map runParams) { if (this.suppressedModes.contains(mode)) { return; } @@ -413,10 +416,10 @@ public class TriggerHandler { * a {@link java.util.HashMap} object. * @return a boolean. */ - private boolean runSingleTrigger(final Trigger regtrig, final String mode, final Map runParams) { + private boolean runSingleTrigger(final Trigger regtrig, final TriggerType mode, final Map runParams) { final Map params = regtrig.getMapParams(); - if (!params.get("Mode").equals(mode)) { + if (!params.get("Mode").equals(mode.toString())) { return false; // Not the right mode. } if (!regtrig.zonesCheck()) { diff --git a/src/main/java/forge/card/trigger/TriggerType.java b/src/main/java/forge/card/trigger/TriggerType.java new file mode 100644 index 00000000000..98089ffe054 --- /dev/null +++ b/src/main/java/forge/card/trigger/TriggerType.java @@ -0,0 +1,105 @@ +package forge.card.trigger; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.HashMap; + +import forge.Card; + + +/** + * TODO: Write javadoc for this type. + * + */ +public enum TriggerType { + Transformed(TriggerTransformed.class), + Tapped(TriggerTaps.class), + Untaps(TriggerUntaps.class), + Taps(TriggerTaps.class), + + ChangesZone(TriggerChangesZone.class), + + + Clashed(TriggerClashed.class), + TapsForMana(TriggerTapsForMana.class), + CounterAdded(TriggerCounterAdded.class), + CounterRemoved(TriggerCounterRemoved.class), + Unequip(TriggerUnequip.class), + DamageDone(TriggerDamageDone.class), + Championed(TriggerChampioned.class), + TurnFaceUp(TriggerTurnFaceUp.class), + Attacks(TriggerAttacks.class), + AttackerBlocked(TriggerAttackerBlocked.class), + Blocks(TriggerBlocks.class), + AttackerUnblocked(TriggerAttackerUnblocked.class), + ChangesController(TriggerChangesController.class), + Always(TriggerAlways.class), + Sacrificed(TriggerSacrificed.class), + SpellAbilityCast(TriggerSpellAbilityCast.class), + SpellCast(TriggerSpellAbilityCast.class), + AbilityCast(TriggerSpellAbilityCast.class), + Cycled(TriggerCycled.class), + BecomesTarget(TriggerBecomesTarget.class), + Phase(TriggerPhase.class), + AttackersDeclared(TriggerAttackersDeclared.class), + LifeGained(TriggerLifeGained.class), + LifeLost(TriggerLifeLost.class), + Drawn(TriggerDrawn.class), + Discarded(TriggerDiscarded.class), + Shuffled(TriggerShuffled.class), + LandPlayed(TriggerLandPlayed.class); + + private final Class classTrigger; + private TriggerType(Class clasz) { + classTrigger = clasz; + } + /** + * TODO: Write javadoc for this method. + * @param string + * @return + */ + public static TriggerType smartValueOf(String value) { + + final String valToCompate = value.trim(); + for (final TriggerType v : TriggerType.values()) { + if (v.name().compareToIgnoreCase(valToCompate) == 0) { + return v; + } + } + + throw new RuntimeException("Element " + value + " not found in TriggerType enum" ); + } + + /** + * TODO: Write javadoc for this method. + * @param mapParams + * @param host + * @param intrinsic + * @return + */ + public Trigger createTrigger(HashMap mapParams, Card host, boolean intrinsic) { + @SuppressWarnings("unchecked") + Constructor[] cc = (Constructor[]) classTrigger.getDeclaredConstructors(); + for (Constructor c : cc) { + Class[] pp = c.getParameterTypes(); + if ( pp[0] == HashMap.class ) { + try { + return c.newInstance(mapParams, host, intrinsic); + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block ignores the exception, but sends it to System.err and probably forge.log. + e.printStackTrace(); + } catch (InstantiationException e) { + // TODO Auto-generated catch block ignores the exception, but sends it to System.err and probably forge.log. + e.printStackTrace(); + } catch (IllegalAccessException e) { + // TODO Auto-generated catch block ignores the exception, but sends it to System.err and probably forge.log. + e.printStackTrace(); + } catch (InvocationTargetException e) { + // TODO Auto-generated catch block ignores the exception, but sends it to System.err and probably forge.log. + e.printStackTrace(); + } + } + } + throw new RuntimeException("No constructor found that would take Map as 1st parameter in class " + classTrigger.getName()); + } +} diff --git a/src/main/java/forge/control/input/InputPayManaCost.java b/src/main/java/forge/control/input/InputPayManaCost.java index d00f3cccf37..90b2a666979 100644 --- a/src/main/java/forge/control/input/InputPayManaCost.java +++ b/src/main/java/forge/control/input/InputPayManaCost.java @@ -27,6 +27,7 @@ import forge.PlayerZone; import forge.Singletons; import forge.card.mana.ManaCost; import forge.card.spellability.SpellAbility; +import forge.card.trigger.TriggerType; //pays the cost of a card played from the player's hand //the card is removed from the players hand if the cost is paid @@ -241,12 +242,12 @@ public class InputPayManaCost extends InputMana { // tapped for convoke) if (this.spell.getTappedForConvoke() != null) { - AllZone.getTriggerHandler().suppressMode("Untaps"); + AllZone.getTriggerHandler().suppressMode(TriggerType.Untaps); for (final Card c : this.spell.getTappedForConvoke()) { c.untap(); c.tap(); } - AllZone.getTriggerHandler().clearSuppression("Untaps"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.Untaps); this.spell.clearTappedForConvoke(); } } @@ -257,11 +258,11 @@ public class InputPayManaCost extends InputMana { public final void selectButtonCancel() { // If this is a spell with convoke, untap all creatures used for it. if (this.spell.getTappedForConvoke() != null) { - AllZone.getTriggerHandler().suppressMode("Untaps"); + AllZone.getTriggerHandler().suppressMode(TriggerType.Untaps); for (final Card c : this.spell.getTappedForConvoke()) { c.untap(); } - AllZone.getTriggerHandler().clearSuppression("Untaps"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.Untaps); this.spell.clearTappedForConvoke(); } diff --git a/src/main/java/forge/game/GameNew.java b/src/main/java/forge/game/GameNew.java index b5e58130763..6feec1292ed 100644 --- a/src/main/java/forge/game/GameNew.java +++ b/src/main/java/forge/game/GameNew.java @@ -19,6 +19,7 @@ import forge.GameAction; import forge.PhaseHandler; import forge.Player; import forge.Singletons; +import forge.card.trigger.TriggerType; import forge.control.FControl; import forge.control.input.InputMulligan; import forge.deck.Deck; @@ -121,7 +122,7 @@ public class GameNew { final ArrayList hAnteRemoved = new ArrayList(); final ArrayList cAnteRemoved = new ArrayList(); - AllZone.getTriggerHandler().suppressMode("Transformed"); + AllZone.getTriggerHandler().suppressMode(TriggerType.Transformed); for (final Entry stackOfCards : humanDeck.getMain()) { final CardPrinted cardPrinted = stackOfCards.getKey(); for (int i = 0; i < stackOfCards.getValue(); i++) { @@ -175,7 +176,7 @@ public class GameNew { } } - AllZone.getTriggerHandler().clearSuppression("Transformed"); + AllZone.getTriggerHandler().clearSuppression(TriggerType.Transformed); if (rAICards.size() > 0) { final StringBuilder sb = new StringBuilder( "AI deck contains the following cards that it can't play or may be buggy:\n");