diff --git a/forge-game/src/main/java/forge/game/GameEntity.java b/forge-game/src/main/java/forge/game/GameEntity.java index 3445ce9a5ad..9549c75dea7 100644 --- a/forge-game/src/main/java/forge/game/GameEntity.java +++ b/forge-game/src/main/java/forge/game/GameEntity.java @@ -170,7 +170,7 @@ public abstract class GameEntity extends GameObject implements IIdentifiable { int restDamage = damage; // first try to replace the damage - final Map repParams = Maps.newHashMap(); + final Map repParams = Maps.newHashMap(); repParams.put("Event", "DamageDone"); repParams.put("Affected", this); repParams.put("DamageSource", source); diff --git a/forge-game/src/main/java/forge/game/ability/AbilityKey.java b/forge-game/src/main/java/forge/game/ability/AbilityKey.java index 599e7bcc8c5..5b4e47df779 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityKey.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityKey.java @@ -8,6 +8,7 @@ import java.util.Map; */ public enum AbilityKey { AbilityMana("AbilityMana"), + Activator("Activator"), Affected("Affected"), Attach("Attach"), AllVotes("AllVotes"), @@ -20,16 +21,24 @@ public enum AbilityKey { AttackedTarget("AttackedTarget"), Blocker("Blocker"), Blockers("Blockers"), + CastSA("CastSA"), + CastSACMC("CastSACMC"), Card("Card"), Cards("Cards"), CardLKI("CardLKI"), Cause("Cause"), Causer("Causer"), Championed("Championed"), + CopySA("CopySA"), + Cost("Cost"), + CostStack("CostStack"), CounterAmount("CounterAmount"), CounteredSA("CounteredSA"), CounterType("CounterType"), + Crew("Crew"), CumulativeUpkeepPaid("CumulativeUpkeepPaid"), + CurrentCastSpells("CurrentCastSpells"), + CurrentStormCount("CurrentStormCount"), DamageAmount("DamageAmount"), DamageSource("DamageSource"), DamageSources("DamageSources"), @@ -44,14 +53,21 @@ public enum AbilityKey { Exploited("Exploited"), Event("Event"), Fighter("Fighter"), + FirstTime("FirstTime"), Fizzle("Fizzle"), IsCombatDamage("IsCombatDamage"), PayingMana("PayingMana"), + Phase("Phase"), Player("Player"), IndividualCostPaymentInstance("IndividualCostPaymentInstance"), + IsMadness("IsMadness"), + LifeAmount("LifeAmount"), MonstrosityAmount("MonstrosityAmount"), NewCounterAmount("NewCounterAmount"), + Num("Num"), // TODO confirm that this and NumThisTurn can be merged NumBlockers("NumBlockers"), + NumThisTurn("NumThisTurn"), + Number("Number"), Object("Object"), Objects("Objects"), OtherAttackers("OtherAttackers"), @@ -61,11 +77,14 @@ public enum AbilityKey { Result("Result"), Scheme("Scheme"), Source("Source"), + SourceSA("SourceSA"), SpellAbilityStackInstance("SpellAbilityStackInstance"), StackSa("StackSa"), StackSi("StackSi"), Target("Target"), + Targets("Targets"), Transformer("Transformer"), + Vehicle("Vehicle"), Won("Won"); diff --git a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java index 84130bd2344..bc7ef03f4a2 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java @@ -23,6 +23,7 @@ import com.google.common.collect.Maps; import com.google.common.collect.Multimap; import forge.card.mana.ManaCost; import forge.game.*; +import forge.game.ability.AbilityKey; import forge.game.card.Card; import forge.game.card.CardCollection; import forge.game.card.CardCollectionView; @@ -412,10 +413,10 @@ public class PhaseHandler implements java.io.Serializable { if (!skipped) { // Run triggers if phase isn't being skipped - final Map runParams = Maps.newHashMap(); - runParams.put("Phase", phase.nameForScripts); - runParams.put("Player", playerTurn); - game.getTriggerHandler().runTriggerOld(TriggerType.Phase, runParams, false); + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Phase, phase.nameForScripts); + runParams.put(AbilityKey.Player, playerTurn); + game.getTriggerHandler().runTrigger(TriggerType.Phase, runParams, false); } // This line fixes Combat Damage triggers not going off when they should @@ -487,9 +488,9 @@ public class PhaseHandler implements java.io.Serializable { if (!bRepeatCleanup) { setPlayerTurn(handleNextTurn()); // "Trigger" for begin turn to get around a phase skipping - final Map runParams = Maps.newHashMap(); - runParams.put("Player", playerTurn); - game.getTriggerHandler().runTriggerOld(TriggerType.TurnBegin, runParams, false); + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Player, playerTurn); + game.getTriggerHandler().runTrigger(TriggerType.TurnBegin, runParams, false); } planarDiceRolledthisTurn = 0; // Play the End Turn sound @@ -577,11 +578,11 @@ public class PhaseHandler implements java.io.Serializable { for (final Card c : combat.getAttackers()) { attackedTarget.add(combat.getDefenderByAttacker(c)); } - final Map runParams = Maps.newHashMap(); - runParams.put("Attackers", combat.getAttackers()); - runParams.put("AttackingPlayer", combat.getAttackingPlayer()); - runParams.put("AttackedTarget", attackedTarget); - game.getTriggerHandler().runTriggerOld(TriggerType.AttackersDeclared, runParams, false); + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Attackers, combat.getAttackers()); + runParams.put(AbilityKey.AttackingPlayer, combat.getAttackingPlayer()); + runParams.put(AbilityKey.AttackedTarget, attackedTarget); + game.getTriggerHandler().runTrigger(TriggerType.AttackersDeclared, runParams, false); } for (final Card c : combat.getAttackers()) { @@ -690,10 +691,10 @@ public class PhaseHandler implements java.io.Serializable { } } // fire blockers declared trigger - final Map bdRunParams = Maps.newHashMap(); - bdRunParams.put("Blockers", declaredBlockers); - bdRunParams.put("Attackers", blockedAttackers); - game.getTriggerHandler().runTriggerOld(TriggerType.BlockersDeclared, bdRunParams, false); + final Map bdRunParams = AbilityKey.newMap(); + bdRunParams.put(AbilityKey.Blockers, declaredBlockers); + bdRunParams.put(AbilityKey.Attackers, blockedAttackers); + game.getTriggerHandler().runTrigger(TriggerType.BlockersDeclared, bdRunParams, false); } for (final Card c1 : combat.getAllBlockers()) { @@ -703,10 +704,10 @@ public class PhaseHandler implements java.io.Serializable { if (!c1.getDamageHistory().getCreatureBlockedThisCombat()) { // Run triggers - final Map runParams = Maps.newHashMap(); - runParams.put("Blocker", c1); - runParams.put("Attackers", combat.getAttackersBlockedBy(c1)); - game.getTriggerHandler().runTriggerOld(TriggerType.Blocks, runParams, false); + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Blocker, c1); + runParams.put(AbilityKey.Attackers, combat.getAttackersBlockedBy(c1)); + game.getTriggerHandler().runTrigger(TriggerType.Blocks, runParams, false); } c1.getDamageHistory().setCreatureBlockedThisCombat(true); @@ -724,13 +725,15 @@ public class PhaseHandler implements java.io.Serializable { } // Run triggers - final Map runParams = Maps.newHashMap(); - runParams.put("Attacker", a); - runParams.put("Blockers", blockers); - runParams.put("NumBlockers", blockers.size()); - runParams.put("Defender", combat.getDefenderByAttacker(a)); - runParams.put("DefendingPlayer", combat.getDefenderPlayerByAttacker(a)); - game.getTriggerHandler().runTriggerOld(TriggerType.AttackerBlocked, runParams, false); + { + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Attacker, a); + runParams.put(AbilityKey.Blockers, blockers); + runParams.put(AbilityKey.NumBlockers, blockers.size()); + runParams.put(AbilityKey.Defender, combat.getDefenderByAttacker(a)); + runParams.put(AbilityKey.DefendingPlayer, combat.getDefenderPlayerByAttacker(a)); + game.getTriggerHandler().runTrigger(TriggerType.AttackerBlocked, runParams, false); + } // Run this trigger once for each blocker for (final Card b : blockers) { @@ -738,10 +741,10 @@ public class PhaseHandler implements java.io.Serializable { b.addBlockedThisTurn(a); a.addBlockedByThisTurn(b); - final Map runParams2 = Maps.newHashMap(); - runParams2.put("Attacker", a); - runParams2.put("Blocker", b); - game.getTriggerHandler().runTriggerOld(TriggerType.AttackerBlockedByCreature, runParams2, false); + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Attacker, a); + runParams.put(AbilityKey.Blocker, b); + game.getTriggerHandler().runTrigger(TriggerType.AttackerBlockedByCreature, runParams, false); } a.getDamageHistory().setCreatureGotBlockedThisCombat(true); diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index dc3fd1f3514..887af26d406 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -24,6 +24,7 @@ import forge.LobbyPlayer; import forge.card.MagicColor; import forge.game.*; import forge.game.ability.AbilityFactory; +import forge.game.ability.AbilityKey; import forge.game.ability.AbilityUtils; import forge.game.ability.ApiType; import forge.game.ability.effects.DetachedCardEffect; @@ -246,9 +247,9 @@ public class Player extends GameEntity implements Comparable { game.getTriggerHandler().clearSuppression(TriggerType.ChangesZone); // Run triggers - final Map runParams = Maps.newHashMap(); - runParams.put("Scheme", activeScheme); - game.getTriggerHandler().runTriggerOld(TriggerType.SetInMotion, runParams, false); + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Scheme, activeScheme); + game.getTriggerHandler().runTrigger(TriggerType.SetInMotion, runParams, false); } @@ -445,12 +446,12 @@ public class Player extends GameEntity implements Comparable { } // Run triggers - final Map runParams = Maps.newHashMap(); - runParams.put("Player", this); - runParams.put("LifeAmount", lifeGain); - runParams.put("Source", source); - runParams.put("SourceSA", sa); - game.getTriggerHandler().runTriggerOld(TriggerType.LifeGained, runParams, false); + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Player, this); + runParams.put(AbilityKey.LifeAmount, lifeGain); + runParams.put(AbilityKey.Source, source); + runParams.put(AbilityKey.SourceSA, sa); + game.getTriggerHandler().runTrigger(TriggerType.LifeGained, runParams, false); game.fireEvent(new GameEventPlayerLivesChanged(this, oldLife, life)); } @@ -478,19 +479,17 @@ public class Player extends GameEntity implements Comparable { life -= toLose; view.updateLife(this); lifeLost = toLose; - if(manaBurn) { - game.fireEvent(new GameEventManaBurn(this,lifeLost,true)); + if (manaBurn) { + game.fireEvent(new GameEventManaBurn(this, lifeLost, true)); } else { - game.fireEvent(new GameEventPlayerLivesChanged(this, oldLife, life)); + game.fireEvent(new GameEventPlayerLivesChanged(this, oldLife, life)); } - } - else if (toLose == 0) { + } else if (toLose == 0) { // Rule 118.4 // this is for players being able to pay 0 life nothing to do // no trigger for lost no life return 0; - } - else { + } else { System.out.println("Player - trying to lose negative life"); return 0; } @@ -500,11 +499,11 @@ public class Player extends GameEntity implements Comparable { lifeLostThisTurn += toLose; // Run triggers - final Map runParams = Maps.newHashMap(); - runParams.put("Player", this); - runParams.put("LifeAmount", toLose); - runParams.put("FirstTime", firstLost); - game.getTriggerHandler().runTriggerOld(TriggerType.LifeLost, runParams, false); + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Player, this); + runParams.put(AbilityKey.LifeAmount, toLose); + runParams.put(AbilityKey.FirstTime, firstLost); + game.getTriggerHandler().runTrigger(TriggerType.LifeLost, runParams, false); return lifeLost; } @@ -528,10 +527,10 @@ public class Player extends GameEntity implements Comparable { loseLife(lifePayment); // Run triggers - final Map runParams = Maps.newHashMap(); - runParams.put("Player", this); - runParams.put("LifeAmount", lifePayment); - game.getTriggerHandler().runTriggerOld(TriggerType.PayLife, runParams, false); + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Player, this); + runParams.put(AbilityKey.LifeAmount, lifePayment); + game.getTriggerHandler().runTrigger(TriggerType.PayLife, runParams, false); return true; } @@ -611,14 +610,14 @@ public class Player extends GameEntity implements Comparable { } // Run triggers - final Map runParams = Maps.newHashMap(); - runParams.put("DamageSource", source); - runParams.put("DamageTarget", this); - runParams.put("DamageAmount", amount); - runParams.put("IsCombatDamage", isCombat); + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.DamageSource, source); + runParams.put(AbilityKey.DamageTarget, this); + runParams.put(AbilityKey.DamageAmount, amount); + runParams.put(AbilityKey.IsCombatDamage, isCombat); // Defending player at the time the damage was dealt - runParams.put("DefendingPlayer", game.getCombat() != null ? game.getCombat().getDefendingPlayerRelatedTo(source) : null); - game.getTriggerHandler().runTriggerOld(TriggerType.DamageDone, runParams, false); + runParams.put(AbilityKey.DefendingPlayer, game.getCombat() != null ? game.getCombat().getDefendingPlayerRelatedTo(source) : null); + game.getTriggerHandler().runTrigger(TriggerType.DamageDone, runParams, false); game.fireEvent(new GameEventPlayerDamaged(this, source, amount, isCombat, infect)); @@ -908,7 +907,7 @@ public class Player extends GameEntity implements Comparable { } int addAmount = n; - if(addAmount <= 0) { + if (addAmount <= 0) { // Can't add negative or 0 counters, bail out now return 0; } @@ -922,29 +921,29 @@ public class Player extends GameEntity implements Comparable { repParams.put("EffectOnly", applyMultiplier); switch (getGame().getReplacementHandler().run(repParams)) { - case NotReplaced: - break; - case Updated: { - addAmount = (int) repParams.get("CounterNum"); - break; - } - default: - return 0; + case NotReplaced: + break; + case Updated: { + addAmount = (int) repParams.get("CounterNum"); + break; + } + default: + return 0; } final int oldValue = getCounters(counterType); final int newValue = addAmount + oldValue; this.setCounters(counterType, newValue, fireEvents); - final Map runParams = Maps.newHashMap(); - runParams.put("Player", this); - runParams.put("Source", this); - runParams.put("CounterType", counterType); + final Map runParams = Maps.newHashMap(); + runParams.put(AbilityKey.Player, this); + runParams.put(AbilityKey.Source, this); + runParams.put(AbilityKey.CounterType, counterType); for (int i = 0; i < addAmount; i++) { - getGame().getTriggerHandler().runTriggerOld(TriggerType.CounterAdded, runParams, false); + getGame().getTriggerHandler().runTrigger(TriggerType.CounterAdded, runParams, false); } if (addAmount > 0) { - getGame().getTriggerHandler().runTriggerOld(TriggerType.CounterAddedOnce, runParams, false); + getGame().getTriggerHandler().runTrigger(TriggerType.CounterAddedOnce, runParams, false); } if (table != null) { table.put(this, counterType, addAmount); @@ -1283,14 +1282,14 @@ public class Player extends GameEntity implements Comparable { repParams.put("SurveilNum", num); switch (getGame().getReplacementHandler().run(repParams)) { - case NotReplaced: - break; - case Updated: { - num = (int) repParams.get("SurveilNum"); - break; - } - default: - return; + case NotReplaced: + break; + case Updated: { + num = (int) repParams.get("SurveilNum"); + break; + } + default: + return; } final CardCollection topN = new CardCollection(this.getCardsIn(ZoneType.Library, num)); @@ -1307,7 +1306,7 @@ public class Player extends GameEntity implements Comparable { int numToTop = 0; if (toGrave != null) { - for(Card c : toGrave) { + for (Card c : toGrave) { getGame().getAction().moveToGraveyard(c, cause); numToGrave++; } @@ -1315,7 +1314,7 @@ public class Player extends GameEntity implements Comparable { if (toTop != null) { Collections.reverse(toTop); // the last card in list will become topmost in library, have to revert thus. - for(Card c : toTop) { + for (Card c : toTop) { getGame().getAction().moveToLibrary(c, cause); numToTop++; } @@ -1324,10 +1323,10 @@ public class Player extends GameEntity implements Comparable { getGame().fireEvent(new GameEventSurveil(this, numToTop, numToGrave)); surveilThisTurn++; - final Map runParams = Maps.newHashMap(); - runParams.put("Player", this); - runParams.put("NumThisTurn", surveilThisTurn); - getGame().getTriggerHandler().runTriggerOld(TriggerType.Surveil, runParams, false); + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Player, this); + runParams.put(AbilityKey.NumThisTurn, surveilThisTurn); + getGame().getTriggerHandler().runTrigger(TriggerType.Surveil, runParams, false); } public int getSurveilThisTurn() { @@ -1415,11 +1414,11 @@ public class Player extends GameEntity implements Comparable { view.updateNumDrawnThisTurn(this); // Run triggers - final Map runParams = Maps.newHashMap(); - runParams.put("Card", c); - runParams.put("Number", numDrawnThisTurn); - runParams.put("Player", this); - game.getTriggerHandler().runTriggerOld(TriggerType.Drawn, runParams, false); + final Map runParams = Maps.newHashMap(); + runParams.put(AbilityKey.Card, c); + runParams.put(AbilityKey.Number, numDrawnThisTurn); + runParams.put(AbilityKey.Player, this); + game.getTriggerHandler().runTrigger(TriggerType.Drawn, runParams, false); } else { // Lose by milling is always on. Give AI many cards it cannot play if you want it not to undertake actions triedToDrawFromEmptyLibrary = true; @@ -1603,12 +1602,12 @@ public class Player extends GameEntity implements Comparable { } } } - final Map runParams = Maps.newHashMap(); - runParams.put("Player", this); - runParams.put("Card", c); - runParams.put("Cause", cause); - runParams.put("IsMadness", Boolean.valueOf(discardMadness)); - game.getTriggerHandler().runTriggerOld(TriggerType.Discarded, runParams, false); + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Player, this); + runParams.put(AbilityKey.Card, c); + runParams.put(AbilityKey.Cause, cause); + runParams.put(AbilityKey.IsMadness, discardMadness); + game.getTriggerHandler().runTrigger(TriggerType.Discarded, runParams, false); game.getGameLog().add(GameLogEntryType.DISCARD, sb.toString()); return newCard; } @@ -1686,10 +1685,10 @@ public class Player extends GameEntity implements Comparable { getZone(ZoneType.Library).setCards(getController().cheatShuffle(list)); // Run triggers - final Map runParams = Maps.newHashMap(); - runParams.put("Player", this); - runParams.put("Source", sa); - game.getTriggerHandler().runTriggerOld(TriggerType.Shuffled, runParams, false); + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Player, this); + runParams.put(AbilityKey.Source, sa); + game.getTriggerHandler().runTrigger(TriggerType.Shuffled, runParams, false); // Play the shuffle sound game.fireEvent(new GameEventShuffle(this)); @@ -1717,9 +1716,7 @@ public class Player extends GameEntity implements Comparable { game.fireEvent(new GameEventLandPlayed(this, land)); // Run triggers - final Map runParams = Maps.newHashMap(); - runParams.put("Card", land); - game.getTriggerHandler().runTriggerOld(TriggerType.LandPlayed, runParams, false); + game.getTriggerHandler().runTrigger(TriggerType.LandPlayed, AbilityKey.mapFromCard(land), false); game.getStack().unfreezeStack(); addLandPlayedThisTurn(); } @@ -2152,10 +2149,10 @@ public class Player extends GameEntity implements Comparable { } public final void addInvestigatedThisTurn() { investigatedThisTurn++; - Map runParams = Maps.newHashMap(); - runParams.put("Player", this); - runParams.put("Num", investigatedThisTurn); - game.getTriggerHandler().runTriggerOld(TriggerType.Investigated, runParams,false); + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Player, this); + runParams.put(AbilityKey.Num, investigatedThisTurn); + game.getTriggerHandler().runTrigger(TriggerType.Investigated, runParams,false); } public final void resetInvestigatedThisTurn() { investigatedThisTurn = 0; @@ -2173,14 +2170,14 @@ public class Player extends GameEntity implements Comparable { sacrificedThisTurn.add(cpy); // Run triggers - final Map runParams = Maps.newHashMap(); + final Map runParams = AbilityKey.newMap(); // use a copy that preserves last known information about the card (e.g. for Savra, Queen of the Golgari + Painter's Servant) - runParams.put("Card", cpy); - runParams.put("Player", this); - runParams.put("Cause", source); - runParams.put("CostStack", game.costPaymentStack); - runParams.put("IndividualCostPaymentInstance", game.costPaymentStack.peek()); - game.getTriggerHandler().runTriggerOld(TriggerType.Sacrificed, runParams, false); + runParams.put(AbilityKey.Card, cpy); + runParams.put(AbilityKey.Player, this); + runParams.put(AbilityKey.Cause, source); + runParams.put(AbilityKey.CostStack, game.costPaymentStack); + runParams.put(AbilityKey.IndividualCostPaymentInstance, game.costPaymentStack.peek()); + game.getTriggerHandler().runTrigger(TriggerType.Sacrificed, runParams, false); } public final void resetSacrificedThisTurn() { @@ -2524,9 +2521,9 @@ public class Player extends GameEntity implements Comparable { game.setActivePlanes(currentPlanes); //Run PlaneswalkedTo triggers here. - Map runParams = Maps.newHashMap(); - runParams.put("Cards", currentPlanes); - game.getTriggerHandler().runTriggerOld(TriggerType.PlaneswalkedTo, runParams,false); + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Cards, currentPlanes); + game.getTriggerHandler().runTrigger(TriggerType.PlaneswalkedTo, runParams,false); view.updateCurrentPlaneName(currentPlanes.toString().replaceAll(" \\(.*","").replace("[","")); } @@ -2535,8 +2532,9 @@ public class Player extends GameEntity implements Comparable { */ public void leaveCurrentPlane() { - final Map runParams = new ImmutableMap.Builder().put("Cards", new CardCollection(currentPlanes)).build(); - game.getTriggerHandler().runTriggerOld(TriggerType.PlaneswalkedFrom, runParams,false); + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Cards, new CardCollection(currentPlanes)); + game.getTriggerHandler().runTrigger(TriggerType.PlaneswalkedFrom, runParams,false); for (final Card plane : currentPlanes) { //game.getZoneOf(plane).remove(plane); diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbilityStackInstance.java b/forge-game/src/main/java/forge/game/spellability/SpellAbilityStackInstance.java index 0bce8ed92ec..4b781bd5942 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbilityStackInstance.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbilityStackInstance.java @@ -18,6 +18,7 @@ package forge.game.spellability; import forge.game.IIdentifiable; +import forge.game.ability.AbilityKey; import forge.game.ability.ApiType; import forge.game.card.Card; import forge.game.card.CardCollection; @@ -342,23 +343,24 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView { } // Run BecomesTargetTrigger - Map runParams = new HashMap<>(); - runParams.put("SourceSA", ability); + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.SourceSA, ability); Set distinctObjects = new HashSet<>(); for (final Object tgt : target.getTargets()) { if (distinctObjects.contains(tgt)) { continue; } distinctObjects.add(tgt); + if (tgt instanceof Card && !((Card) tgt).hasBecomeTargetThisTurn()) { - runParams.put("FirstTime", null); + runParams.put(AbilityKey.FirstTime, null); ((Card) tgt).setBecameTargetThisTurn(true); } - runParams.put("Target", tgt); - getSourceCard().getGame().getTriggerHandler().runTriggerOld(TriggerType.BecomesTarget, runParams, false); + runParams.put(AbilityKey.Target, tgt); + getSourceCard().getGame().getTriggerHandler().runTrigger(TriggerType.BecomesTarget, runParams, false); } - runParams.put("Targets", target.getTargets()); - getSourceCard().getGame().getTriggerHandler().runTriggerOld(TriggerType.BecomesTargetOnce, runParams, false); + runParams.put(AbilityKey.Targets, target.getTargets()); + getSourceCard().getGame().getTriggerHandler().runTrigger(TriggerType.BecomesTargetOnce, runParams, false); } } 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 bb47aa14a35..2d896b4a7cd 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java @@ -328,7 +328,7 @@ public class TriggerHandler { // `runTriggerOld` into `runTrigger` and change the code inside to just always use a `Map`. // The reason we can't just call them both `runTrigger` is because we get a `same erasure` compile error if we do. @Deprecated - public final void runTriggerOld(final TriggerType mode, final Map runParams, boolean holdTrigger) { + private void runTriggerOld(final TriggerType mode, final Map runParams, boolean holdTrigger) { if (suppressedModes.contains(mode)) { return; } diff --git a/forge-game/src/main/java/forge/game/zone/MagicStack.java b/forge-game/src/main/java/forge/game/zone/MagicStack.java index 660f109844b..a70ed6c30cb 100644 --- a/forge-game/src/main/java/forge/game/zone/MagicStack.java +++ b/forge-game/src/main/java/forge/game/zone/MagicStack.java @@ -285,17 +285,17 @@ public class MagicStack /* extends MyObservable */ implements Iterable runParams = Maps.newHashMap(); + Map runParams = AbilityKey.newMap(); if (!(sp instanceof AbilityStatic) && !sp.isCopied()) { // Run SpellAbilityCast triggers - runParams.put("Cost", sp.getPayCosts()); - runParams.put("Player", sp.getHostCard().getController()); - runParams.put("Activator", sp.getActivatingPlayer()); - runParams.put("CastSA", si.getSpellAbility(true)); - runParams.put("CastSACMC", si.getSpellAbility(true).getHostCard().getCMC()); - runParams.put("CurrentStormCount", thisTurnCast.size()); - runParams.put("CurrentCastSpells", new CardCollection(thisTurnCast)); - game.getTriggerHandler().runTriggerOld(TriggerType.SpellAbilityCast, runParams, true); + runParams.put(AbilityKey.Cost, sp.getPayCosts()); + runParams.put(AbilityKey.Player, sp.getHostCard().getController()); + runParams.put(AbilityKey.Activator, sp.getActivatingPlayer()); + runParams.put(AbilityKey.CastSA, si.getSpellAbility(true)); + runParams.put(AbilityKey.CastSACMC, si.getSpellAbility(true).getHostCard().getCMC()); + runParams.put(AbilityKey.CurrentStormCount, thisTurnCast.size()); + runParams.put(AbilityKey.CurrentCastSpells, new CardCollection(thisTurnCast)); + game.getTriggerHandler().runTrigger(TriggerType.SpellAbilityCast, runParams, true); // Run SpellCast triggers if (sp.isSpell()) { @@ -303,39 +303,39 @@ public class MagicStack /* extends MyObservable */ implements Iterable distinctObjects = Sets.newHashSet(); for (final TargetChoices tc : chosenTargets) { if (tc != null && tc.getTargetCards() != null) { @@ -361,26 +361,26 @@ public class MagicStack /* extends MyObservable */ implements Iterable