rename runTrigger to runTriggerOld and add new runTrigger method

This commit is contained in:
Ryan1729
2019-09-03 22:52:38 -06:00
parent e052c34a05
commit ef5b7e902b
37 changed files with 154 additions and 113 deletions

View File

@@ -25,6 +25,7 @@ import forge.game.phase.PhaseType;
import forge.game.player.Player;
import forge.game.spellability.AbilityManaPart;
import forge.game.spellability.SpellAbility;
import forge.game.trigger.TriggerKey;
import forge.game.trigger.TriggerType;
import forge.game.zone.PlayerZone;
import forge.game.zone.ZoneType;
@@ -719,10 +720,10 @@ public abstract class GameState {
for (final Card c : combat.getAttackers()) {
attackedTarget.add(combat.getDefenderByAttacker(c));
}
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Attackers", combat.getAttackers());
runParams.put("AttackingPlayer", combat.getAttackingPlayer());
runParams.put("AttackedTarget", attackedTarget);
final Map<TriggerKey, Object> runParams = Maps.newEnumMap(TriggerKey.class);
runParams.put(TriggerKey.Attackers, combat.getAttackers());
runParams.put(TriggerKey.AttackingPlayer, combat.getAttackingPlayer());
runParams.put(TriggerKey.AttackedTarget, attackedTarget);
game.getTriggerHandler().runTrigger(TriggerType.AttackersDeclared, runParams, false);
}

View File

@@ -715,7 +715,7 @@ public class Game {
final Map<String, Object> runParams = new TreeMap<String, Object>();
runParams.put("Player", p);
getTriggerHandler().runTrigger(TriggerType.LosesGame, runParams, false);
getTriggerHandler().runTriggerOld(TriggerType.LosesGame, runParams, false);
}
/**

View File

@@ -411,7 +411,7 @@ public class GameAction {
runParams.putAll(params);
}
game.getTriggerHandler().runTrigger(TriggerType.ChangesZone, runParams, true);
game.getTriggerHandler().runTriggerOld(TriggerType.ChangesZone, runParams, true);
if (zoneFrom != null && zoneFrom.is(ZoneType.Battlefield) && !zoneFrom.getPlayer().equals(zoneTo.getPlayer())) {
final Map<String, Object> runParams2 = Maps.newHashMap();
runParams2.put("Card", lastKnownInfo);
@@ -419,7 +419,7 @@ public class GameAction {
if(params != null) {
runParams2.putAll(params);
}
game.getTriggerHandler().runTrigger(TriggerType.ChangesController, runParams2, false);
game.getTriggerHandler().runTriggerOld(TriggerType.ChangesController, runParams2, false);
}
// AllZone.getStack().chooseOrderOfSimultaneousStackEntryAll();
@@ -602,7 +602,7 @@ public class GameAction {
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Card", c);
runParams.put("OriginalController", original);
game.getTriggerHandler().runTrigger(TriggerType.ChangesController, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.ChangesController, runParams, false);
game.getTriggerHandler().clearSuppression(TriggerType.ChangesZone);
for (Player p : game.getPlayers()) {
@@ -717,7 +717,7 @@ public class GameAction {
runParams.putAll(params);
}
game.getTriggerHandler().runTrigger(TriggerType.Exiled, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Exiled, runParams, false);
return copied;
}
@@ -909,9 +909,9 @@ public class GameAction {
// in that case Always trigger should not Run
if (preList.isEmpty()) {
final Map<String, Object> runParams = Maps.newHashMap();
game.getTriggerHandler().runTrigger(TriggerType.Always, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Always, runParams, false);
game.getTriggerHandler().runTrigger(TriggerType.Immediate, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Immediate, runParams, false);
}
// Update P/T and type in the view only once after all the cards have been processed, to avoid flickering
@@ -1433,7 +1433,7 @@ public class GameAction {
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Card", c);
runParams.put("Causer", activator);
game.getTriggerHandler().runTrigger(TriggerType.Destroyed, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Destroyed, runParams, false);
final Card sacrificed = sacrificeDestroy(c, sa, table);
return sacrificed != null;
@@ -1611,7 +1611,7 @@ public class GameAction {
// Run Trigger beginning of the game
final Map<String, Object> runParams = Maps.newHashMap();
game.getTriggerHandler().runTrigger(TriggerType.NewGame, runParams, true);
game.getTriggerHandler().runTriggerOld(TriggerType.NewGame, runParams, true);
//</THIS CODE WILL WORK WITH PHASE = NULL>
@@ -1776,7 +1776,7 @@ public class GameAction {
// Run triggers
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Player", p);
game.getTriggerHandler().runTrigger(TriggerType.BecomeMonarch, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.BecomeMonarch, runParams, false);
}
// Make scry an action function so that it can be used for mulligans (with a null cause)
@@ -1838,7 +1838,7 @@ public class GameAction {
// set up triggers (but not actually do them until later)
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Player", p);
game.getTriggerHandler().runTrigger(TriggerType.Scry, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Scry, runParams, false);
}
}
}

View File

@@ -220,7 +220,7 @@ public abstract class GameEntity extends GameObject implements IIdentifiable {
runParams.put("DamageSource", source);
runParams.put("IsCombatDamage", isCombat);
getGame().getTriggerHandler().runTrigger(TriggerType.DamagePrevented, runParams, false);
getGame().getTriggerHandler().runTriggerOld(TriggerType.DamagePrevented, runParams, false);
}
return restDamage;

View File

@@ -49,7 +49,7 @@ public class GameEntityCounterTable extends ForwardingTable<GameEntity, CounterT
if (!isEmpty()) {
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Objects", this);
game.getTriggerHandler().runTrigger(TriggerType.CounterAddedAll, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.CounterAddedAll, runParams, false);
}
}
}

View File

@@ -39,7 +39,7 @@ public enum PlanarDice {
HashMap<String,Object> runParams = new HashMap<String,Object>();
runParams.put("Player", roller);
runParams.put("Result", trigRes);
roller.getGame().getTriggerHandler().runTrigger(TriggerType.PlanarDice, runParams,false);
roller.getGame().getTriggerHandler().runTriggerOld(TriggerType.PlanarDice, runParams,false);
return res;

View File

@@ -42,7 +42,7 @@ public class AbandonEffect extends SpellAbilityEffect {
// Run triggers
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Scheme", source);
game.getTriggerHandler().runTrigger(TriggerType.Abandoned, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Abandoned, runParams, false);
}
}

View File

@@ -46,7 +46,7 @@ public class BecomesBlockedEffect extends SpellAbilityEffect {
runParams.put("NumBlockers", 0);
runParams.put("Defender", game.getCombat().getDefenderByAttacker(c));
runParams.put("DefendingPlayer", game.getCombat().getDefenderPlayerByAttacker(c));
game.getTriggerHandler().runTrigger(TriggerType.AttackerBlocked, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.AttackerBlocked, runParams, false);
}
}
}

View File

@@ -56,12 +56,12 @@ public class BlockEffect extends SpellAbilityEffect {
Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Attacker", attacker);
runParams.put("Blocker", blocker);
game.getTriggerHandler().runTrigger(TriggerType.AttackerBlockedByCreature, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.AttackerBlockedByCreature, runParams, false);
runParams = Maps.newHashMap();
runParams.put("Blocker", blocker);
runParams.put("Attackers", attacker);
game.getTriggerHandler().runTrigger(TriggerType.Blocks, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Blocks, runParams, false);
}
attacker.getDamageHistory().setCreatureGotBlockedThisCombat(true);
@@ -72,7 +72,7 @@ public class BlockEffect extends SpellAbilityEffect {
runParams.put("NumBlockers", blockers.size());
runParams.put("Defender", combat.getDefenderByAttacker(attacker));
runParams.put("DefendingPlayer", combat.getDefenderPlayerByAttacker(attacker));
game.getTriggerHandler().runTrigger(TriggerType.AttackerBlocked, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.AttackerBlocked, runParams, false);
combat.orderBlockersForDamageAssignment(attacker, new CardCollection(blockers));
}

View File

@@ -82,7 +82,7 @@ public class ChangeZoneAllEffect extends SpellAbilityEffect {
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Player", sa.getActivatingPlayer());
runParams.put("Target", tgtPlayers);
game.getTriggerHandler().runTrigger(TriggerType.SearchedLibrary, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.SearchedLibrary, runParams, false);
}
if (origin.contains(ZoneType.Hand) && sa.hasParam("Search")) {
CardCollection handCards = CardLists.filterControlledBy(CardLists.getValidCards(cards, "Card.inZoneHand", sa.getActivatingPlayer(), source),

View File

@@ -833,7 +833,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Player", decider);
runParams.put("Target", Lists.newArrayList(player));
decider.getGame().getTriggerHandler().runTrigger(TriggerType.SearchedLibrary, runParams, false);
decider.getGame().getTriggerHandler().runTriggerOld(TriggerType.SearchedLibrary, runParams, false);
}
if (!defined && changeType != null) {
@@ -1136,7 +1136,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Card", source);
runParams.put("Championed", c);
game.getTriggerHandler().runTrigger(TriggerType.Championed, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Championed, runParams, false);
}
if (remember) {

View File

@@ -53,7 +53,7 @@ public class ClashEffect extends SpellAbilityEffect {
}
sa.getHostCard().getGame().getTriggerHandler().runTrigger(TriggerType.Clashed, runParams, false);
sa.getHostCard().getGame().getTriggerHandler().runTriggerOld(TriggerType.Clashed, runParams, false);
}
/**

View File

@@ -213,7 +213,7 @@ public class CounterEffect extends SpellAbilityEffect {
runParams.put("Card", tgtSA.getHostCard());
runParams.put("Cause", srcSA.getHostCard());
runParams.put("CounteredSA", tgtSA);
game.getTriggerHandler().runTrigger(TriggerType.Countered, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Countered, runParams, false);
if (!tgtSA.isAbility()) {

View File

@@ -262,27 +262,27 @@ public class CountersPutEffect extends SpellAbilityEffect {
if (sa.hasParam("Evolve")) {
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Card", tgtCard);
game.getTriggerHandler().runTrigger(TriggerType.Evolved, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Evolved, runParams, false);
}
if (sa.hasParam("Monstrosity")) {
tgtCard.setMonstrous(true);
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Card", tgtCard);
runParams.put("MonstrosityAmount", counterAmount);
game.getTriggerHandler().runTrigger(TriggerType.BecomeMonstrous, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.BecomeMonstrous, runParams, false);
}
if (sa.hasParam("Renown")) {
tgtCard.setRenowned(true);
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Card", tgtCard);
game.getTriggerHandler().runTrigger(TriggerType.BecomeRenowned, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.BecomeRenowned, runParams, false);
}
if (sa.hasParam("Adapt")) {
// need to remove special keyword
tgtCard.removeHiddenExtrinsicKeyword("CARDNAME adapts as though it had no +1/+1 counters");
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Card", tgtCard);
game.getTriggerHandler().runTrigger(TriggerType.Adapt, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Adapt, runParams, false);
}
} else {
// adding counters to something like re-suspend cards

View File

@@ -85,7 +85,7 @@ public class ExploreEffect extends SpellAbilityEffect {
// a creature does explore even if it isn't on the battlefield anymore
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Card", c);
game.getTriggerHandler().runTrigger(TriggerType.Explores, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Explores, runParams, false);
}
table.triggerCountersPutAll(game);
}

View File

@@ -61,7 +61,7 @@ public class FightEffect extends DamageBaseEffect {
for (Card c : fighters) {
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Fighter", c);
game.getTriggerHandler().runTrigger(TriggerType.Fight, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Fight, runParams, false);
}
}

View File

@@ -212,7 +212,7 @@ public class FlipCoinEffect extends SpellAbilityEffect {
Map<String,Object> runParams = Maps.newHashMap();
runParams.put("Player", caller);
runParams.put("Result", Boolean.valueOf(wonFlip));
caller.getGame().getTriggerHandler().runTrigger(TriggerType.FlippedCoin, runParams, false);
caller.getGame().getTriggerHandler().runTriggerOld(TriggerType.FlippedCoin, runParams, false);
} while (sa.hasParam("FlipUntilYouLose") && wonFlip);
if (sa.hasParam("FlipUntilYouLose") && sa.hasAdditionalAbility("LoseSubAbility")) {

View File

@@ -82,7 +82,7 @@ public class PlayLandVariantEffect extends SpellAbilityEffect {
// Run triggers
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Card", source);
game.getTriggerHandler().runTrigger(TriggerType.LandPlayed, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.LandPlayed, runParams, false);
game.getStack().unfreezeStack();
activator.addLandPlayedThisTurn();
}

View File

@@ -47,7 +47,7 @@ public class RegenerationEffect extends SpellAbilityEffect {
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Card", c);
runParams.put("Cause", host);
game.getTriggerHandler().runTrigger(TriggerType.Regenerated, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Regenerated, runParams, false);
}
}

View File

@@ -81,7 +81,7 @@ public class RevealEffect extends SpellAbilityEffect {
runParams.put("Miracle", true);
}
//*/
game.getTriggerHandler().runTrigger(TriggerType.Revealed, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Revealed, runParams, false);
if (sa.hasParam("RememberRevealed")) {
host.addRemembered(c);
}

View File

@@ -39,7 +39,7 @@ public class SacrificeEffect extends SpellAbilityEffect {
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("EchoPaid", Boolean.valueOf(isPaid));
runParams.put("Card", card);
game.getTriggerHandler().runTrigger(TriggerType.PayEcho, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.PayEcho, runParams, false);
if (isPaid || !card.getController().equals(activator)) {
return;
}
@@ -69,7 +69,7 @@ public class SacrificeEffect extends SpellAbilityEffect {
runParams.put("CumulativeUpkeepPaid", Boolean.valueOf(isPaid));
runParams.put("Card", card);
runParams.put("PayingMana", StringUtils.join(sa.getPayingMana(), ""));
game.getTriggerHandler().runTrigger(TriggerType.PayCumulativeUpkeep, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.PayCumulativeUpkeep, runParams, false);
if (isPaid || !card.getController().equals(activator)) {
return;
}
@@ -149,14 +149,14 @@ public class SacrificeEffect extends SpellAbilityEffect {
card.addDevoured(lKICopy);
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Devoured", sac);
game.getTriggerHandler().runTrigger(TriggerType.Devoured, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Devoured, runParams, false);
}
if (exploit) {
card.addExploited(lKICopy);
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Exploited", lKICopy);
runParams.put("Card", card);
game.getTriggerHandler().runTrigger(TriggerType.Exploited, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Exploited, runParams, false);
}
if (wasDestroyed || wasSacrificed) {
countSacrificed++;

View File

@@ -48,7 +48,7 @@ public class SetInMotionEffect extends SpellAbilityEffect {
// Run triggers
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Scheme", controller.getActiveScheme());
game.getTriggerHandler().runTrigger(TriggerType.SetInMotion, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.SetInMotion, runParams, false);
} else {
controller.setSchemeInMotion();
}

View File

@@ -101,7 +101,7 @@ public class VoteEffect extends SpellAbilityEffect {
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("AllVotes", votes);
game.getTriggerHandler().runTrigger(TriggerType.Vote, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Vote, runParams, false);
List<String> subAbs = Lists.newArrayList();
final List<Object> mostVotes = getMostVotes(votes);

View File

@@ -571,7 +571,7 @@ public class Card extends GameEntity implements Comparable<Card> {
getGame().getTriggerHandler().registerActiveTrigger(this, false);
Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Transformer", this);
getGame().getTriggerHandler().runTrigger(TriggerType.Transformed, runParams, false);
getGame().getTriggerHandler().runTriggerOld(TriggerType.Transformed, runParams, false);
incrementTransformedTimestamp();
return result;
@@ -691,7 +691,7 @@ public class Card extends GameEntity implements Comparable<Card> {
getGame().getTriggerHandler().registerActiveTrigger(this, false);
final Map<String, Object> runParams = Maps.newTreeMap();
runParams.put("Card", this);
getGame().getTriggerHandler().runTrigger(TriggerType.TurnFaceUp, runParams, false);
getGame().getTriggerHandler().runTriggerOld(TriggerType.TurnFaceUp, runParams, false);
}
return result;
}
@@ -1291,12 +1291,12 @@ public class Card extends GameEntity implements Comparable<Card> {
runParams.put("CounterType", counterType);
for (int i = 0; i < addAmount; i++) {
runParams.put("CounterAmount", oldValue + i + 1);
getGame().getTriggerHandler().runTrigger(
getGame().getTriggerHandler().runTriggerOld(
TriggerType.CounterAdded, Maps.newHashMap(runParams), false);
}
if (addAmount > 0) {
runParams.put("CounterAmount", addAmount);
getGame().getTriggerHandler().runTrigger(
getGame().getTriggerHandler().runTriggerOld(
TriggerType.CounterAddedOnce, Maps.newHashMap(runParams), false);
}
} else {
@@ -1372,10 +1372,10 @@ public class Card extends GameEntity implements Comparable<Card> {
runParams.put("CounterType", counterName);
for (int i = 0; i < delta && curCounters != 0; i++) {
runParams.put("NewCounterAmount", --curCounters);
getGame().getTriggerHandler().runTrigger(TriggerType.CounterRemoved, runParams, false);
getGame().getTriggerHandler().runTriggerOld(TriggerType.CounterRemoved, runParams, false);
}
runParams.put("CounterAmount", delta);
getGame().getTriggerHandler().runTrigger(TriggerType.CounterRemovedOnce, runParams, false);
getGame().getTriggerHandler().runTriggerOld(TriggerType.CounterRemovedOnce, runParams, false);
}
@Override
@@ -2942,7 +2942,7 @@ public class Card extends GameEntity implements Comparable<Card> {
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("AttachSource", this);
runParams.put("AttachTarget", entity);
getController().getGame().getTriggerHandler().runTrigger(TriggerType.Attached, runParams, false);
getController().getGame().getTriggerHandler().runTriggerOld(TriggerType.Attached, runParams, false);
}
@@ -2964,7 +2964,7 @@ public class Card extends GameEntity implements Comparable<Card> {
final Map<String, Object> runParams = Maps.newTreeMap();
runParams.put("Attach", this);
runParams.put("Object", entity);
getGame().getTriggerHandler().runTrigger(TriggerType.Unattach, runParams, false);
getGame().getTriggerHandler().runTriggerOld(TriggerType.Unattach, runParams, false);
runUnattachCommands();
}
@@ -3544,7 +3544,7 @@ public class Card extends GameEntity implements Comparable<Card> {
final Map<String, Object> runParams = Maps.newTreeMap();
runParams.put("Card", this);
runParams.put("Attacker", attacker);
getGame().getTriggerHandler().runTrigger(TriggerType.Taps, runParams, false);
getGame().getTriggerHandler().runTriggerOld(TriggerType.Taps, runParams, false);
setTapped(true);
getGame().fireEvent(new GameEventCardTapped(this, true));
@@ -3565,7 +3565,7 @@ public class Card extends GameEntity implements Comparable<Card> {
// Run triggers
final Map<String, Object> runParams = Maps.newTreeMap();
runParams.put("Card", this);
getGame().getTriggerHandler().runTrigger(TriggerType.Untaps, runParams, false);
getGame().getTriggerHandler().runTriggerOld(TriggerType.Untaps, runParams, false);
for (final GameCommand var : untapCommandList) {
var.run();
@@ -4130,7 +4130,7 @@ public class Card extends GameEntity implements Comparable<Card> {
if (!isPhasedOut()) {
// If this is currently PhasedIn, it's about to phase out.
// Run trigger before it does because triggers don't work with phased out objects
getGame().getTriggerHandler().runTrigger(TriggerType.PhaseOut, runParams, false);
getGame().getTriggerHandler().runTriggerOld(TriggerType.PhaseOut, runParams, false);
}
setPhasedOut(!phasedOut);
@@ -4142,7 +4142,7 @@ public class Card extends GameEntity implements Comparable<Card> {
if (!phasedOut) {
// Just phased in, time to run the phased in trigger
getGame().getTriggerHandler().registerActiveTrigger(this, false);
getGame().getTriggerHandler().runTrigger(TriggerType.PhaseIn, runParams, false);
getGame().getTriggerHandler().runTriggerOld(TriggerType.PhaseIn, runParams, false);
}
return true;
@@ -4935,7 +4935,7 @@ public class Card extends GameEntity implements Comparable<Card> {
}
// Defending player at the time the damage was dealt
runParams.put("DefendingPlayer", game.getCombat() != null ? game.getCombat().getDefendingPlayerRelatedTo(source) : null);
getGame().getTriggerHandler().runTrigger(TriggerType.DamageDone, runParams, false);
getGame().getTriggerHandler().runTriggerOld(TriggerType.DamageDone, runParams, false);
GameEventCardDamaged.DamageType damageType = DamageType.Normal;
if (isPlaneswalker()) {
@@ -5036,7 +5036,7 @@ public class Card extends GameEntity implements Comparable<Card> {
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Card", this);
runParams.put("Player", getController());
game.getTriggerHandler().runTrigger(TriggerType.Exerted, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Exerted, runParams, false);
}
public boolean isExertedBy(final Player player) {

View File

@@ -39,7 +39,7 @@ public class CardDamageMap extends ForwardingTable<Card, GameEntity, Integer> {
runParams.put("DamageAmount", sum);
runParams.put("IsCombatDamage", isCombat);
ge.getGame().getTriggerHandler().runTrigger(TriggerType.DamagePreventedOnce, runParams, false);
ge.getGame().getTriggerHandler().runTriggerOld(TriggerType.DamagePreventedOnce, runParams, false);
}
}
}
@@ -59,7 +59,7 @@ public class CardDamageMap extends ForwardingTable<Card, GameEntity, Integer> {
runParams.put("DamageAmount", sum);
runParams.put("IsCombatDamage", isCombat);
sourceLKI.getGame().getTriggerHandler().runTrigger(TriggerType.DamageDealtOnce, runParams, false);
sourceLKI.getGame().getTriggerHandler().runTriggerOld(TriggerType.DamageDealtOnce, runParams, false);
if (sourceLKI.hasKeyword(Keyword.LIFELINK)) {
sourceLKI.getController().gainLife(sum, sourceLKI, sa);
@@ -80,7 +80,7 @@ public class CardDamageMap extends ForwardingTable<Card, GameEntity, Integer> {
runParams.put("DamageAmount", sum);
runParams.put("IsCombatDamage", isCombat);
ge.getGame().getTriggerHandler().runTrigger(TriggerType.DamageDoneOnce, runParams, false);
ge.getGame().getTriggerHandler().runTriggerOld(TriggerType.DamageDoneOnce, runParams, false);
}
}
}

View File

@@ -56,7 +56,7 @@ public class CardZoneTable extends ForwardingTable<ZoneType, ZoneType, CardColle
if (!isEmpty()) {
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Cards", new CardZoneTable(this));
game.getTriggerHandler().runTrigger(TriggerType.ChangesZoneAll, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.ChangesZoneAll, runParams, false);
}
}

View File

@@ -638,7 +638,7 @@ public class Combat {
runParams.put("Attacker", attacker);
runParams.put("Defender",getDefenderByAttacker(attacker));
runParams.put("DefendingPlayer", getDefenderPlayerByAttacker(attacker));
game.getTriggerHandler().runTrigger(TriggerType.AttackerUnblocked, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.AttackerUnblocked, runParams, false);
}
}
}
@@ -649,7 +649,7 @@ public class Combat {
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("AttackingPlayer", getAttackingPlayer());
runParams.put("Defenders", defenders);
game.getTriggerHandler().runTrigger(TriggerType.AttackerUnblockedOnce, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.AttackerUnblockedOnce, runParams, false);
}
}

View File

@@ -313,7 +313,7 @@ public class CombatUtil {
runParams.put("Attacked", combat.getDefenderByAttacker(c));
runParams.put("DefendingPlayer", combat.getDefenderPlayerByAttacker(c));
runParams.put("Defenders", combat.getDefenders());
game.getTriggerHandler().runTrigger(TriggerType.Attacks, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Attacks, runParams, false);
c.getDamageHistory().setCreatureAttackedThisCombat(true);
c.getDamageHistory().clearNotAttackedSinceLastUpkeepOf();

View File

@@ -415,7 +415,7 @@ public class PhaseHandler implements java.io.Serializable {
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Phase", phase.nameForScripts);
runParams.put("Player", playerTurn);
game.getTriggerHandler().runTrigger(TriggerType.Phase, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Phase, runParams, false);
}
// This line fixes Combat Damage triggers not going off when they should
@@ -489,7 +489,7 @@ public class PhaseHandler implements java.io.Serializable {
// "Trigger" for begin turn to get around a phase skipping
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Player", playerTurn);
game.getTriggerHandler().runTrigger(TriggerType.TurnBegin, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.TurnBegin, runParams, false);
}
planarDiceRolledthisTurn = 0;
// Play the End Turn sound
@@ -581,7 +581,7 @@ public class PhaseHandler implements java.io.Serializable {
runParams.put("Attackers", combat.getAttackers());
runParams.put("AttackingPlayer", combat.getAttackingPlayer());
runParams.put("AttackedTarget", attackedTarget);
game.getTriggerHandler().runTrigger(TriggerType.AttackersDeclared, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.AttackersDeclared, runParams, false);
}
for (final Card c : combat.getAttackers()) {
@@ -693,7 +693,7 @@ public class PhaseHandler implements java.io.Serializable {
final Map<String, Object> bdRunParams = Maps.newHashMap();
bdRunParams.put("Blockers", declaredBlockers);
bdRunParams.put("Attackers", blockedAttackers);
game.getTriggerHandler().runTrigger(TriggerType.BlockersDeclared, bdRunParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.BlockersDeclared, bdRunParams, false);
}
for (final Card c1 : combat.getAllBlockers()) {
@@ -706,7 +706,7 @@ public class PhaseHandler implements java.io.Serializable {
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Blocker", c1);
runParams.put("Attackers", combat.getAttackersBlockedBy(c1));
game.getTriggerHandler().runTrigger(TriggerType.Blocks, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Blocks, runParams, false);
}
c1.getDamageHistory().setCreatureBlockedThisCombat(true);
@@ -730,7 +730,7 @@ public class PhaseHandler implements java.io.Serializable {
runParams.put("NumBlockers", blockers.size());
runParams.put("Defender", combat.getDefenderByAttacker(a));
runParams.put("DefendingPlayer", combat.getDefenderPlayerByAttacker(a));
game.getTriggerHandler().runTrigger(TriggerType.AttackerBlocked, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.AttackerBlocked, runParams, false);
// Run this trigger once for each blocker
for (final Card b : blockers) {
@@ -741,7 +741,7 @@ public class PhaseHandler implements java.io.Serializable {
final Map<String, Object> runParams2 = Maps.newHashMap();
runParams2.put("Attacker", a);
runParams2.put("Blocker", b);
game.getTriggerHandler().runTrigger(TriggerType.AttackerBlockedByCreature, runParams2, false);
game.getTriggerHandler().runTriggerOld(TriggerType.AttackerBlockedByCreature, runParams2, false);
}
a.getDamageHistory().setCreatureGotBlockedThisCombat(true);

View File

@@ -248,7 +248,7 @@ public class Player extends GameEntity implements Comparable<Player> {
// Run triggers
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Scheme", activeScheme);
game.getTriggerHandler().runTrigger(TriggerType.SetInMotion, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.SetInMotion, runParams, false);
}
@@ -450,7 +450,7 @@ public class Player extends GameEntity implements Comparable<Player> {
runParams.put("LifeAmount", lifeGain);
runParams.put("Source", source);
runParams.put("SourceSA", sa);
game.getTriggerHandler().runTrigger(TriggerType.LifeGained, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.LifeGained, runParams, false);
game.fireEvent(new GameEventPlayerLivesChanged(this, oldLife, life));
}
@@ -507,7 +507,7 @@ public class Player extends GameEntity implements Comparable<Player> {
runParams.put("Player", this);
runParams.put("LifeAmount", toLose);
runParams.put("FirstTime", firstLost);
game.getTriggerHandler().runTrigger(TriggerType.LifeLost, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.LifeLost, runParams, false);
return lifeLost;
}
@@ -540,7 +540,7 @@ public class Player extends GameEntity implements Comparable<Player> {
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Player", this);
runParams.put("LifeAmount", lifePayment);
game.getTriggerHandler().runTrigger(TriggerType.PayLife, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.PayLife, runParams, false);
return true;
}
@@ -627,7 +627,7 @@ public class Player extends GameEntity implements Comparable<Player> {
runParams.put("IsCombatDamage", isCombat);
// Defending player at the time the damage was dealt
runParams.put("DefendingPlayer", game.getCombat() != null ? game.getCombat().getDefendingPlayerRelatedTo(source) : null);
game.getTriggerHandler().runTrigger(TriggerType.DamageDone, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.DamageDone, runParams, false);
game.fireEvent(new GameEventPlayerDamaged(this, source, amount, isCombat, infect));
@@ -950,10 +950,10 @@ public class Player extends GameEntity implements Comparable<Player> {
runParams.put("Source", this);
runParams.put("CounterType", counterType);
for (int i = 0; i < addAmount; i++) {
getGame().getTriggerHandler().runTrigger(TriggerType.CounterAdded, runParams, false);
getGame().getTriggerHandler().runTriggerOld(TriggerType.CounterAdded, runParams, false);
}
if (addAmount > 0) {
getGame().getTriggerHandler().runTrigger(TriggerType.CounterAddedOnce, runParams, false);
getGame().getTriggerHandler().runTriggerOld(TriggerType.CounterAddedOnce, runParams, false);
}
if (table != null) {
table.put(this, counterType, addAmount);
@@ -1339,7 +1339,7 @@ public class Player extends GameEntity implements Comparable<Player> {
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Player", this);
runParams.put("NumThisTurn", surveilThisTurn);
getGame().getTriggerHandler().runTrigger(TriggerType.Surveil, runParams, false);
getGame().getTriggerHandler().runTriggerOld(TriggerType.Surveil, runParams, false);
}
public int getSurveilThisTurn() {
@@ -1431,7 +1431,7 @@ public class Player extends GameEntity implements Comparable<Player> {
runParams.put("Card", c);
runParams.put("Number", numDrawnThisTurn);
runParams.put("Player", this);
game.getTriggerHandler().runTrigger(TriggerType.Drawn, runParams, false);
game.getTriggerHandler().runTriggerOld(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;
@@ -1620,7 +1620,7 @@ public class Player extends GameEntity implements Comparable<Player> {
runParams.put("Card", c);
runParams.put("Cause", cause);
runParams.put("IsMadness", Boolean.valueOf(discardMadness));
game.getTriggerHandler().runTrigger(TriggerType.Discarded, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Discarded, runParams, false);
game.getGameLog().add(GameLogEntryType.DISCARD, sb.toString());
return newCard;
}
@@ -1701,7 +1701,7 @@ public class Player extends GameEntity implements Comparable<Player> {
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Player", this);
runParams.put("Source", sa);
game.getTriggerHandler().runTrigger(TriggerType.Shuffled, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Shuffled, runParams, false);
// Play the shuffle sound
game.fireEvent(new GameEventShuffle(this));
@@ -1731,7 +1731,7 @@ public class Player extends GameEntity implements Comparable<Player> {
// Run triggers
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("Card", land);
game.getTriggerHandler().runTrigger(TriggerType.LandPlayed, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.LandPlayed, runParams, false);
game.getStack().unfreezeStack();
addLandPlayedThisTurn();
}
@@ -2170,7 +2170,7 @@ public class Player extends GameEntity implements Comparable<Player> {
Map<String,Object> runParams = Maps.newHashMap();
runParams.put("Player", this);
runParams.put("Num", investigatedThisTurn);
game.getTriggerHandler().runTrigger(TriggerType.Investigated, runParams,false);
game.getTriggerHandler().runTriggerOld(TriggerType.Investigated, runParams,false);
}
public final void resetInvestigatedThisTurn() {
investigatedThisTurn = 0;
@@ -2195,7 +2195,7 @@ public class Player extends GameEntity implements Comparable<Player> {
runParams.put("Cause", source);
runParams.put("CostStack", game.costPaymentStack);
runParams.put("IndividualCostPaymentInstance", game.costPaymentStack.peek());
game.getTriggerHandler().runTrigger(TriggerType.Sacrificed, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Sacrificed, runParams, false);
}
public final void resetSacrificedThisTurn() {
@@ -2541,7 +2541,7 @@ public class Player extends GameEntity implements Comparable<Player> {
//Run PlaneswalkedTo triggers here.
Map<String,Object> runParams = Maps.newHashMap();
runParams.put("Cards", currentPlanes);
game.getTriggerHandler().runTrigger(TriggerType.PlaneswalkedTo, runParams,false);
game.getTriggerHandler().runTriggerOld(TriggerType.PlaneswalkedTo, runParams,false);
view.updateCurrentPlaneName(currentPlanes.toString().replaceAll(" \\(.*","").replace("[",""));
}
@@ -2551,7 +2551,7 @@ public class Player extends GameEntity implements Comparable<Player> {
public void leaveCurrentPlane() {
final Map<String, Object> runParams = new ImmutableMap.Builder<String, Object>().put("Cards", new CardCollection(currentPlanes)).build();
game.getTriggerHandler().runTrigger(TriggerType.PlaneswalkedFrom, runParams,false);
game.getTriggerHandler().runTriggerOld(TriggerType.PlaneswalkedFrom, runParams,false);
for (final Card plane : currentPlanes) {
//game.getZoneOf(plane).remove(plane);

View File

@@ -173,7 +173,7 @@ public class AbilityManaPart implements java.io.Serializable {
runParams.put("Player", player);
runParams.put("AbilityMana", sa);
runParams.put("Produced", afterReplace);
player.getGame().getTriggerHandler().runTrigger(TriggerType.TapsForMana, runParams, false);
player.getGame().getTriggerHandler().runTriggerOld(TriggerType.TapsForMana, runParams, false);
if (source.isLand()) {
player.setTappedLandForManaThisTurn(true);
}

View File

@@ -355,10 +355,10 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView {
((Card) tgt).setBecameTargetThisTurn(true);
}
runParams.put("Target", tgt);
getSourceCard().getGame().getTriggerHandler().runTrigger(TriggerType.BecomesTarget, runParams, false);
getSourceCard().getGame().getTriggerHandler().runTriggerOld(TriggerType.BecomesTarget, runParams, false);
}
runParams.put("Targets", target.getTargets());
getSourceCard().getGame().getTriggerHandler().runTrigger(TriggerType.BecomesTargetOnce, runParams, false);
getSourceCard().getGame().getTriggerHandler().runTriggerOld(TriggerType.BecomesTargetOnce, runParams, false);
}
}

View File

@@ -51,6 +51,8 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimaps;
import static forge.util.EnumMapUtil.toStringMap;
public class TriggerHandler {
private final List<TriggerType> suppressedModes = Collections.synchronizedList(new ArrayList<TriggerType>());
private final List<Trigger> activeTriggers = Collections.synchronizedList(new ArrayList<Trigger>());
@@ -318,12 +320,17 @@ public class TriggerHandler {
return false;
}
public final void runTrigger(final TriggerType mode, final Map<String, Object> runParams, boolean holdTrigger) {
public final void runTrigger(final TriggerType mode, final Map<TriggerKey, Object> runParams, boolean holdTrigger) {
runTriggerOld(mode, toStringMap(runParams), holdTrigger);
}
// The plan is to slowly refactor any usages of `runTriggerOld` to use `runTrigger`. Then we can just inline
// `runTriggerOld` into `runTrigger` and change the code inside to just always use a `Map<TriggerKey, Object>`.
// The reason we can't just call them both `runTrigger` is because we get a `same erasure` compile error if we do.
public final void runTriggerOld(final TriggerType mode, final Map<String, Object> runParams, boolean holdTrigger) {
if (suppressedModes.contains(mode)) {
return;
}
//runWaitingTrigger(new TriggerWaiting(mode, runParams));
if (mode == TriggerType.Always) {
runStateTrigger(runParams);
} else if (game.getStack().isFrozen() || holdTrigger) {
@@ -331,20 +338,14 @@ public class TriggerHandler {
} else {
runWaitingTrigger(new TriggerWaiting(mode, runParams));
}
// Tell auto stop to stop
}
public final boolean runStateTrigger(Map<String, Object> runParams) {
boolean checkStatics = false;
// only cards in play can run state triggers
private void runStateTrigger(Map<String, Object> runParams) {
for (final Trigger t: activeTriggers) {
if (canRunTrigger(t, TriggerType.Always, runParams)) {
runSingleTrigger(t, runParams);
checkStatics = true;
}
}
return checkStatics;
}
public final boolean runWaitingTriggers() {
@@ -362,7 +363,7 @@ public class TriggerHandler {
return haveWaiting;
}
public final boolean runWaitingTrigger(final TriggerWaiting wt) {
private boolean runWaitingTrigger(final TriggerWaiting wt) {
final TriggerType mode = wt.getMode();
final Map<String, Object> runParams = wt.getParams();

View File

@@ -0,0 +1,21 @@
package forge.game.trigger;
/**
* Keys for Trigger parameter maps.
*/
public enum TriggerKey {
Attackers("Attackers"),
AttackingPlayer("AttackingPlayer"),
AttackedTarget("AttackedTarget");
private String key;
TriggerKey(String key) {
this.key = key;
}
@Override
public String toString() {
return key;
}
}

View File

@@ -294,7 +294,7 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
runParams.put("CastSACMC", si.getSpellAbility(true).getHostCard().getCMC());
runParams.put("CurrentStormCount", thisTurnCast.size());
runParams.put("CurrentCastSpells", new CardCollection(thisTurnCast));
game.getTriggerHandler().runTrigger(TriggerType.SpellAbilityCast, runParams, true);
game.getTriggerHandler().runTriggerOld(TriggerType.SpellAbilityCast, runParams, true);
// Run SpellCast triggers
if (sp.isSpell()) {
@@ -302,27 +302,27 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
&& source.getOwner().equals(activator)) {
activator.incCommanderCast(source);
}
game.getTriggerHandler().runTrigger(TriggerType.SpellCast, runParams, true);
game.getTriggerHandler().runTriggerOld(TriggerType.SpellCast, runParams, true);
executeCastCommand(si.getSpellAbility(true).getHostCard());
}
// Run AbilityCast triggers
if (sp.isAbility() && !sp.isTrigger()) {
game.getTriggerHandler().runTrigger(TriggerType.AbilityCast, runParams, true);
game.getTriggerHandler().runTriggerOld(TriggerType.AbilityCast, runParams, true);
}
// Run Cycled triggers
if (sp.isCycling()) {
runParams.clear();
runParams.put("Card", sp.getHostCard());
game.getTriggerHandler().runTrigger(TriggerType.Cycled, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Cycled, runParams, false);
}
if (sp.hasParam("Crew")) {
// Trigger crews!
runParams.put("Vehicle", sp.getHostCard());
runParams.put("Crew", sp.getPaidList("TappedCards"));
game.getTriggerHandler().runTrigger(TriggerType.Crewed, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.Crewed, runParams, false);
}
}
@@ -332,9 +332,9 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
runParams.put("CopySA", si.getSpellAbility(true));
// Run SpellCopy triggers
if (sp.isSpell()) {
game.getTriggerHandler().runTrigger(TriggerType.SpellCopy, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.SpellCopy, runParams, false);
}
game.getTriggerHandler().runTrigger(TriggerType.SpellAbilityCopy, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.SpellAbilityCopy, runParams, false);
}
// Run BecomesTarget triggers
@@ -364,10 +364,10 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
((Card) tgt).setBecameTargetThisTurn(true);
}
runParams.put("Target", tgt);
game.getTriggerHandler().runTrigger(TriggerType.BecomesTarget, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.BecomesTarget, runParams, false);
}
runParams.put("Targets", tc.getTargets());
game.getTriggerHandler().runTrigger(TriggerType.BecomesTargetOnce, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.BecomesTargetOnce, runParams, false);
}
}
}
@@ -376,10 +376,10 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
else if (sp.getTargetCard() != null) {
runParams.put("Target", sp.getTargetCard());
game.getTriggerHandler().runTrigger(TriggerType.BecomesTarget, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.BecomesTarget, runParams, false);
runParams.put("Targets", Lists.newArrayList(sp.getTargetCard()));
game.getTriggerHandler().runTrigger(TriggerType.BecomesTargetOnce, runParams, false);
game.getTriggerHandler().runTriggerOld(TriggerType.BecomesTargetOnce, runParams, false);
}
game.fireEvent(new GameEventZone(ZoneType.Stack, sp.getActivatingPlayer(), EventValueChangeType.Added, source));

View File

@@ -0,0 +1,18 @@
package forge.util;
import java.util.HashMap;
import java.util.Map;
public final class EnumMapUtil {
private EnumMapUtil() { };
public static <K extends Enum<K>, V> HashMap<String, V> toStringMap(Map<K, V> map) {
HashMap<String, V> output = new HashMap<>(map.size());
for (Map.Entry<K, V> entry : map.entrySet()) {
output.put(entry.getKey().toString(), entry.getValue());
}
return output;
}
}

View File

@@ -138,7 +138,7 @@ public class GameWrapper {
//skip drawing initial hand and mulliganing
game.setAge( GameStage.Play );
final HashMap<String, Object> runParams = new HashMap<String, Object>();
game.getTriggerHandler().runTrigger( TriggerType.NewGame, runParams, false );
game.getTriggerHandler().runTriggerOld( TriggerType.NewGame, runParams, false );
//first player in the list starts, no coin toss etc
game.getPhaseHandler().startFirstTurn( game.getPlayers().get( 0 ) );
game.fireEvent( new GameEventGameFinished() );