mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 11:48:02 +00:00
Merge branch 'update_run_trigger_callers_part_4' into 'master'
Update run trigger callers part 4 See merge request core-developers/forge!2126
This commit is contained in:
@@ -170,7 +170,7 @@ public abstract class GameEntity extends GameObject implements IIdentifiable {
|
||||
int restDamage = damage;
|
||||
|
||||
// first try to replace the damage
|
||||
final Map<String, Object> repParams = Maps.newHashMap();
|
||||
final Map<String, Object> repParams = Maps.newHashMap();
|
||||
repParams.put("Event", "DamageDone");
|
||||
repParams.put("Affected", this);
|
||||
repParams.put("DamageSource", source);
|
||||
|
||||
@@ -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");
|
||||
|
||||
|
||||
|
||||
@@ -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<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Phase", phase.nameForScripts);
|
||||
runParams.put("Player", playerTurn);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.Phase, runParams, false);
|
||||
final Map<AbilityKey, Object> 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<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Player", playerTurn);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.TurnBegin, runParams, false);
|
||||
final Map<AbilityKey, Object> 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<String, Object> 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<AbilityKey, Object> 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<String, Object> bdRunParams = Maps.newHashMap();
|
||||
bdRunParams.put("Blockers", declaredBlockers);
|
||||
bdRunParams.put("Attackers", blockedAttackers);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.BlockersDeclared, bdRunParams, false);
|
||||
final Map<AbilityKey, Object> 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<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Blocker", c1);
|
||||
runParams.put("Attackers", combat.getAttackersBlockedBy(c1));
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.Blocks, runParams, false);
|
||||
final Map<AbilityKey, Object> 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<String, Object> 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<AbilityKey, Object> 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<String, Object> runParams2 = Maps.newHashMap();
|
||||
runParams2.put("Attacker", a);
|
||||
runParams2.put("Blocker", b);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.AttackerBlockedByCreature, runParams2, false);
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.Attacker, a);
|
||||
runParams.put(AbilityKey.Blocker, b);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.AttackerBlockedByCreature, runParams, false);
|
||||
}
|
||||
|
||||
a.getDamageHistory().setCreatureGotBlockedThisCombat(true);
|
||||
|
||||
@@ -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<Player> {
|
||||
game.getTriggerHandler().clearSuppression(TriggerType.ChangesZone);
|
||||
|
||||
// Run triggers
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Scheme", activeScheme);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.SetInMotion, runParams, false);
|
||||
final Map<AbilityKey, Object> 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<Player> {
|
||||
}
|
||||
|
||||
// Run triggers
|
||||
final Map<String, Object> 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<AbilityKey, Object> 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<Player> {
|
||||
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<Player> {
|
||||
lifeLostThisTurn += toLose;
|
||||
|
||||
// Run triggers
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Player", this);
|
||||
runParams.put("LifeAmount", toLose);
|
||||
runParams.put("FirstTime", firstLost);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.LifeLost, runParams, false);
|
||||
final Map<AbilityKey, Object> 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<Player> {
|
||||
loseLife(lifePayment);
|
||||
|
||||
// Run triggers
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Player", this);
|
||||
runParams.put("LifeAmount", lifePayment);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.PayLife, runParams, false);
|
||||
final Map<AbilityKey, Object> 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<Player> {
|
||||
}
|
||||
|
||||
// Run triggers
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("DamageSource", source);
|
||||
runParams.put("DamageTarget", this);
|
||||
runParams.put("DamageAmount", amount);
|
||||
runParams.put("IsCombatDamage", isCombat);
|
||||
final Map<AbilityKey, Object> 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<Player> {
|
||||
}
|
||||
|
||||
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<Player> {
|
||||
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<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Player", this);
|
||||
runParams.put("Source", this);
|
||||
runParams.put("CounterType", counterType);
|
||||
final Map<AbilityKey, Object> 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<Player> {
|
||||
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<Player> {
|
||||
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<Player> {
|
||||
|
||||
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<Player> {
|
||||
getGame().fireEvent(new GameEventSurveil(this, numToTop, numToGrave));
|
||||
|
||||
surveilThisTurn++;
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Player", this);
|
||||
runParams.put("NumThisTurn", surveilThisTurn);
|
||||
getGame().getTriggerHandler().runTriggerOld(TriggerType.Surveil, runParams, false);
|
||||
final Map<AbilityKey, Object> 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<Player> {
|
||||
view.updateNumDrawnThisTurn(this);
|
||||
|
||||
// Run triggers
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Card", c);
|
||||
runParams.put("Number", numDrawnThisTurn);
|
||||
runParams.put("Player", this);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.Drawn, runParams, false);
|
||||
final Map<AbilityKey, Object> 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<Player> {
|
||||
}
|
||||
}
|
||||
}
|
||||
final Map<String, Object> 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<AbilityKey, Object> 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<Player> {
|
||||
getZone(ZoneType.Library).setCards(getController().cheatShuffle(list));
|
||||
|
||||
// Run triggers
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Player", this);
|
||||
runParams.put("Source", sa);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.Shuffled, runParams, false);
|
||||
final Map<AbilityKey, Object> 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<Player> {
|
||||
game.fireEvent(new GameEventLandPlayed(this, land));
|
||||
|
||||
// Run triggers
|
||||
final Map<String, Object> 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<Player> {
|
||||
}
|
||||
public final void addInvestigatedThisTurn() {
|
||||
investigatedThisTurn++;
|
||||
Map<String,Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Player", this);
|
||||
runParams.put("Num", investigatedThisTurn);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.Investigated, runParams,false);
|
||||
final Map<AbilityKey, Object> 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<Player> {
|
||||
sacrificedThisTurn.add(cpy);
|
||||
|
||||
// Run triggers
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
final Map<AbilityKey, Object> 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<Player> {
|
||||
|
||||
game.setActivePlanes(currentPlanes);
|
||||
//Run PlaneswalkedTo triggers here.
|
||||
Map<String,Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Cards", currentPlanes);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.PlaneswalkedTo, runParams,false);
|
||||
final Map<AbilityKey, Object> 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<Player> {
|
||||
*/
|
||||
public void leaveCurrentPlane() {
|
||||
|
||||
final Map<String, Object> runParams = new ImmutableMap.Builder<String, Object>().put("Cards", new CardCollection(currentPlanes)).build();
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.PlaneswalkedFrom, runParams,false);
|
||||
final Map<AbilityKey, Object> 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);
|
||||
|
||||
@@ -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<String, Object> runParams = new HashMap<>();
|
||||
runParams.put("SourceSA", ability);
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.SourceSA, ability);
|
||||
Set<Object> 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -328,7 +328,7 @@ public class TriggerHandler {
|
||||
// `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.
|
||||
@Deprecated
|
||||
public final void runTriggerOld(final TriggerType mode, final Map<String, Object> runParams, boolean holdTrigger) {
|
||||
private void runTriggerOld(final TriggerType mode, final Map<String, Object> runParams, boolean holdTrigger) {
|
||||
if (suppressedModes.contains(mode)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -285,17 +285,17 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
|
||||
}
|
||||
|
||||
// Copied spells aren't cast per se so triggers shouldn't run for them.
|
||||
Map<String, Object> runParams = Maps.newHashMap();
|
||||
Map<AbilityKey, Object> 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<SpellAbil
|
||||
&& source.getOwner().equals(activator)) {
|
||||
activator.incCommanderCast(source);
|
||||
}
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.SpellCast, runParams, true);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.SpellCast, runParams, true);
|
||||
executeCastCommand(si.getSpellAbility(true).getHostCard());
|
||||
}
|
||||
|
||||
// Run AbilityCast triggers
|
||||
if (sp.isAbility() && !sp.isTrigger()) {
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.AbilityCast, runParams, true);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.AbilityCast, runParams, true);
|
||||
}
|
||||
|
||||
// Run Cycled triggers
|
||||
if (sp.isCycling()) {
|
||||
runParams.clear();
|
||||
runParams.put("Card", sp.getHostCard());
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.Cycled, runParams, false);
|
||||
runParams.put(AbilityKey.Card, sp.getHostCard());
|
||||
game.getTriggerHandler().runTrigger(TriggerType.Cycled, runParams, false);
|
||||
}
|
||||
|
||||
if (sp.hasParam("Crew")) {
|
||||
// Trigger crews!
|
||||
runParams.put("Vehicle", sp.getHostCard());
|
||||
runParams.put("Crew", sp.getPaidList("TappedCards"));
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.Crewed, runParams, false);
|
||||
runParams.put(AbilityKey.Vehicle, sp.getHostCard());
|
||||
runParams.put(AbilityKey.Crew, sp.getPaidList("TappedCards"));
|
||||
game.getTriggerHandler().runTrigger(TriggerType.Crewed, runParams, false);
|
||||
}
|
||||
}
|
||||
|
||||
// Run SpellAbilityCopy triggers
|
||||
if (sp.isCopied()) {
|
||||
runParams.put("Activator", sp.getActivatingPlayer());
|
||||
runParams.put("CopySA", si.getSpellAbility(true));
|
||||
runParams.put(AbilityKey.Activator, sp.getActivatingPlayer());
|
||||
runParams.put(AbilityKey.CopySA, si.getSpellAbility(true));
|
||||
// Run SpellCopy triggers
|
||||
if (sp.isSpell()) {
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.SpellCopy, runParams, false);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.SpellCopy, runParams, false);
|
||||
}
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.SpellAbilityCopy, runParams, false);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.SpellAbilityCopy, runParams, false);
|
||||
}
|
||||
|
||||
// Run BecomesTarget triggers
|
||||
@@ -348,7 +348,7 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
|
||||
s = si.getSpellAbility(true);
|
||||
chosenTargets = s.getAllTargetChoices();
|
||||
}
|
||||
runParams.put("SourceSA", s);
|
||||
runParams.put(AbilityKey.SourceSA, s);
|
||||
Set<Object> 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<SpellAbil
|
||||
|
||||
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);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.BecomesTarget, runParams, false);
|
||||
runParams.put(AbilityKey.Target, tgt);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.BecomesTarget, runParams, false);
|
||||
}
|
||||
runParams.put("Targets", tc.getTargets());
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.BecomesTargetOnce, runParams, false);
|
||||
runParams.put(AbilityKey.Targets, tc.getTargets());
|
||||
game.getTriggerHandler().runTrigger(TriggerType.BecomesTargetOnce, runParams, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Not sure these clauses are necessary. Consider it a precaution
|
||||
// for backwards compatibility for hardcoded cards.
|
||||
else if (sp.getTargetCard() != null) {
|
||||
runParams.put("Target", sp.getTargetCard());
|
||||
runParams.put(AbilityKey.Target, sp.getTargetCard());
|
||||
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.BecomesTarget, runParams, false);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.BecomesTarget, runParams, false);
|
||||
|
||||
runParams.put("Targets", Lists.newArrayList(sp.getTargetCard()));
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.BecomesTargetOnce, runParams, false);
|
||||
runParams.put(AbilityKey.Targets, Lists.newArrayList(sp.getTargetCard()));
|
||||
game.getTriggerHandler().runTrigger(TriggerType.BecomesTargetOnce, runParams, false);
|
||||
}
|
||||
|
||||
game.fireEvent(new GameEventZone(ZoneType.Stack, sp.getActivatingPlayer(), EventValueChangeType.Added, source));
|
||||
|
||||
Reference in New Issue
Block a user