This commit is contained in:
Alessandro Coli
2019-09-18 19:51:31 +02:00
144 changed files with 1260 additions and 697 deletions

View File

@@ -156,7 +156,7 @@ public class DamageDealAi extends DamageAiBase {
} }
} }
} }
if (ai.getAttackedWithCreatureThisTurn()) { if (!ai.getCreaturesAttackedThisTurn().isEmpty()) {
dmg = Integer.parseInt(logic.substring(logic.indexOf(".") + 1)); dmg = Integer.parseInt(logic.substring(logic.indexOf(".") + 1));
} }
} else if ("WildHunt".equals(logic)) { } else if ("WildHunt".equals(logic)) {

View File

@@ -63,7 +63,7 @@ public class DestroyAi extends SpellAbilityAi {
} }
} else if ("AtEOTIfNotAttacking".equals(sa.getParam("AILogic"))) { } else if ("AtEOTIfNotAttacking".equals(sa.getParam("AILogic"))) {
PhaseHandler ph = ai.getGame().getPhaseHandler(); PhaseHandler ph = ai.getGame().getPhaseHandler();
if (!ph.is(PhaseType.END_OF_TURN) || ai.getAttackedWithCreatureThisTurn()) { if (!ph.is(PhaseType.END_OF_TURN) || !ai.getCreaturesAttackedThisTurn().isEmpty()) {
return false; return false;
} }
} }

View File

@@ -259,7 +259,19 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView {
return false; return false;
} }
final String payingMana = StringUtils.join(hostCard.getCastSA().getPayingMana()); final String payingMana = StringUtils.join(hostCard.getCastSA().getPayingMana());
if (StringUtils.countMatches(payingMana, MagicColor.toShortString(params.get("Adamant"))) < 3) { final String color = params.get("Adamant");
if ("Any".equals(color)) {
boolean bFlag = false;
for (byte c : MagicColor.WUBRG) {
if (StringUtils.countMatches(payingMana, MagicColor.toShortString(c)) >= 3) {
bFlag = true;
break;
}
}
if (!bFlag) {
return false;
}
} else if (StringUtils.countMatches(payingMana, MagicColor.toShortString(color)) < 3) {
return false; return false;
} }
} }

View File

@@ -54,6 +54,8 @@ import org.apache.commons.lang3.tuple.ImmutablePair;
import java.util.*; import java.util.*;
import static forge.util.EnumMapUtil.toStringMap;
/** /**
* Methods for common actions performed during a game. * Methods for common actions performed during a game.
* *
@@ -297,7 +299,7 @@ public class GameAction {
repParams.putAll(params); repParams.putAll(params);
} }
ReplacementResult repres = game.getReplacementHandler().run(EnumMapUtil.toStringMap(repParams)); ReplacementResult repres = game.getReplacementHandler().run(toStringMap(repParams));
if (repres != ReplacementResult.NotReplaced) { if (repres != ReplacementResult.NotReplaced) {
// reset failed manifested Cards back to original // reset failed manifested Cards back to original
if (c.isManifested()) { if (c.isManifested()) {

View File

@@ -170,7 +170,7 @@ public abstract class GameEntity extends GameObject implements IIdentifiable {
int restDamage = damage; int restDamage = damage;
// first try to replace the 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("Event", "DamageDone");
repParams.put("Affected", this); repParams.put("Affected", this);
repParams.put("DamageSource", source); repParams.put("DamageSource", source);

View File

@@ -8,9 +8,11 @@ import java.util.Map;
*/ */
public enum AbilityKey { public enum AbilityKey {
AbilityMana("AbilityMana"), AbilityMana("AbilityMana"),
Activator("Activator"),
Affected("Affected"), Affected("Affected"),
Attach("Attach"),
AllVotes("AllVotes"), AllVotes("AllVotes"),
Amount("Amount"),
Attach("Attach"),
AttachSource("AttachSource"), AttachSource("AttachSource"),
AttachTarget("AttachTarget"), AttachTarget("AttachTarget"),
Attacked("Attacked"), Attacked("Attacked"),
@@ -20,16 +22,24 @@ public enum AbilityKey {
AttackedTarget("AttackedTarget"), AttackedTarget("AttackedTarget"),
Blocker("Blocker"), Blocker("Blocker"),
Blockers("Blockers"), Blockers("Blockers"),
CastSA("CastSA"),
CastSACMC("CastSACMC"),
Card("Card"), Card("Card"),
Cards("Cards"), Cards("Cards"),
CardLKI("CardLKI"), CardLKI("CardLKI"),
Cause("Cause"), Cause("Cause"),
Causer("Causer"), Causer("Causer"),
Championed("Championed"), Championed("Championed"),
CopySA("CopySA"),
Cost("Cost"),
CostStack("CostStack"),
CounterAmount("CounterAmount"), CounterAmount("CounterAmount"),
CounteredSA("CounteredSA"), CounteredSA("CounteredSA"),
CounterType("CounterType"), CounterType("CounterType"),
Crew("Crew"),
CumulativeUpkeepPaid("CumulativeUpkeepPaid"), CumulativeUpkeepPaid("CumulativeUpkeepPaid"),
CurrentCastSpells("CurrentCastSpells"),
CurrentStormCount("CurrentStormCount"),
DamageAmount("DamageAmount"), DamageAmount("DamageAmount"),
DamageSource("DamageSource"), DamageSource("DamageSource"),
DamageSources("DamageSources"), DamageSources("DamageSources"),
@@ -42,30 +52,47 @@ public enum AbilityKey {
Devoured("Devoured"), Devoured("Devoured"),
EchoPaid("EchoPaid"), EchoPaid("EchoPaid"),
Exploited("Exploited"), Exploited("Exploited"),
Explorer("Explorer"),
Event("Event"), Event("Event"),
Fighter("Fighter"), Fighter("Fighter"),
FirstTime("FirstTime"),
Fizzle("Fizzle"), Fizzle("Fizzle"),
IsCombatDamage("IsCombatDamage"), IsCombatDamage("IsCombatDamage"),
PayingMana("PayingMana"),
Player("Player"),
IndividualCostPaymentInstance("IndividualCostPaymentInstance"), IndividualCostPaymentInstance("IndividualCostPaymentInstance"),
IsMadness("IsMadness"),
LifeAmount("LifeAmount"),
MonstrosityAmount("MonstrosityAmount"), MonstrosityAmount("MonstrosityAmount"),
NewCounterAmount("NewCounterAmount"), NewCounterAmount("NewCounterAmount"),
Num("Num"), // TODO confirm that this and NumThisTurn can be merged
NumBlockers("NumBlockers"), NumBlockers("NumBlockers"),
NumThisTurn("NumThisTurn"),
Number("Number"),
Object("Object"), Object("Object"),
Objects("Objects"), Objects("Objects"),
OtherAttackers("OtherAttackers"), OtherAttackers("OtherAttackers"),
OtherVoters("OtherVoters"),
Origin("Origin"), Origin("Origin"),
OriginalController("OriginalController"), OriginalController("OriginalController"),
OriginalDefender("OriginalDefender"),
PayingMana("PayingMana"),
Phase("Phase"),
Player("Player"),
Produced("Produced"), Produced("Produced"),
Result("Result"), Result("Result"),
Scheme("Scheme"), Scheme("Scheme"),
Source("Source"), Source("Source"),
Sources("Sources"),
SourceSA("SourceSA"),
SpellAbility("SpellAbility"),
SpellAbilityStackInstance("SpellAbilityStackInstance"), SpellAbilityStackInstance("SpellAbilityStackInstance"),
SpellAbilityTargetingCards("SpellAbilityTargetingCards"),
StackInstance("StackInstance"),
StackSa("StackSa"), StackSa("StackSa"),
StackSi("StackSi"), StackSi("StackSi"),
Target("Target"), Target("Target"),
Targets("Targets"),
Transformer("Transformer"), Transformer("Transformer"),
Vehicle("Vehicle"),
Won("Won"); Won("Won");
@@ -80,10 +107,204 @@ public enum AbilityKey {
return key; return key;
} }
/**
* @param s A string that would be output from toString
* @return the corresponding key if there is one or null otherwise
*/
public static AbilityKey fromString(String s) {
switch (s) {
case "AbilityMana":
return AbilityMana;
case "Activator":
return Activator;
case "Affected":
return Affected;
case "AllVotes":
return AllVotes;
case "Amount":
return Amount;
case "Attach":
return Attach;
case "AttachSource":
return AttachSource;
case "AttachTarget":
return AttachTarget;
case "Attacked":
return Attacked;
case "Attacker":
return Attacker;
case "Attackers":
return Attackers;
case "AttackingPlayer":
return AttackingPlayer;
case "AttackedTarget":
return AttackedTarget;
case "Blocker":
return Blocker;
case "Blockers":
return Blockers;
case "CastSA":
return CastSA;
case "CastSACMC":
return CastSACMC;
case "Card":
return Card;
case "Cards":
return Cards;
case "CardLKI":
return CardLKI;
case "Cause":
return Cause;
case "Causer":
return Causer;
case "Championed":
return Championed;
case "CopySA":
return CopySA;
case "Cost":
return Cost;
case "CostStack":
return CostStack;
case "CounterAmount":
return CounterAmount;
case "CounteredSA":
return CounteredSA;
case "CounterType":
return CounterType;
case "Crew":
return Crew;
case "CumulativeUpkeepPaid":
return CumulativeUpkeepPaid;
case "CurrentCastSpells":
return CurrentCastSpells;
case "CurrentStormCount":
return CurrentStormCount;
case "DamageAmount":
return DamageAmount;
case "DamageSource":
return DamageSource;
case "DamageSources":
return DamageSources;
case "DamageTarget":
return DamageTarget;
case "DamageTargets":
return DamageTargets;
case "Defender":
return Defender;
case "Defenders":
return Defenders;
case "DefendingPlayer":
return DefendingPlayer;
case "Destination":
return Destination;
case "Devoured":
return Devoured;
case "EchoPaid":
return EchoPaid;
case "Exploited":
return Exploited;
case "Explorer":
return Explorer;
case "Event":
return Event;
case "Fighter":
return Fighter;
case "FirstTime":
return FirstTime;
case "Fizzle":
return Fizzle;
case "IsCombatDamage":
return IsCombatDamage;
case "IndividualCostPaymentInstance":
return IndividualCostPaymentInstance;
case "IsMadness":
return IsMadness;
case "LifeAmount":
return LifeAmount;
case "MonstrosityAmount":
return MonstrosityAmount;
case "NewCounterAmount":
return NewCounterAmount;
case "Num":
return Num;
case "NumBlockers":
return NumBlockers;
case "NumThisTurn":
return NumThisTurn;
case "Number":
return Number;
case "Object":
return Object;
case "Objects":
return Objects;
case "OtherAttackers":
return OtherAttackers;
case "OtherVoters":
return OtherVoters;
case "Origin":
return Origin;
case "OriginalController":
return OriginalController;
case "OriginalDefender":
return OriginalDefender;
case "PayingMana":
return PayingMana;
case "Phase":
return Phase;
case "Player":
return Player;
case "Produced":
return Produced;
case "Result":
return Result;
case "Scheme":
return Scheme;
case "Source":
return Source;
case "Sources":
return Sources;
case "SourceSA":
return SourceSA;
case "SpellAbility":
return SpellAbility;
case "SpellAbilityStackInstance":
return SpellAbilityStackInstance;
case "SpellAbilityTargetingCards":
return SpellAbilityTargetingCards;
case "StackInstance":
return StackInstance;
case "StackSa":
return StackSa;
case "StackSi":
return StackSi;
case "Target":
return Target;
case "Targets":
return Targets;
case "Transformer":
return Transformer;
case "Vehicle":
return Vehicle;
case "Won":
return Won;
default:
return null;
}
}
public static <V> EnumMap<AbilityKey, V> newMap() { public static <V> EnumMap<AbilityKey, V> newMap() {
return new EnumMap<>(AbilityKey.class); return new EnumMap<>(AbilityKey.class);
} }
public static <V> EnumMap<AbilityKey, V> newMap(Map<AbilityKey, V> map) {
// The EnumMap constructor throws IllegalArgumentException if the map is empty.
if (map.isEmpty()) {
return newMap();
}
return new EnumMap<>(map);
}
public static Map<AbilityKey, Object> mapFromCard(forge.game.card.Card card) { public static Map<AbilityKey, Object> mapFromCard(forge.game.card.Card card) {
final Map<AbilityKey, Object> runParams = newMap(); final Map<AbilityKey, Object> runParams = newMap();

View File

@@ -139,13 +139,15 @@ public class AbilityUtils {
final SpellAbility root = sa.getRootAbility(); final SpellAbility root = sa.getRootAbility();
if (defined.contains("LKICopy")) { //Triggered*LKICopy if (defined.contains("LKICopy")) { //Triggered*LKICopy
int lkiPosition = defined.indexOf("LKICopy"); int lkiPosition = defined.indexOf("LKICopy");
final Object crd = root.getTriggeringObject(defined.substring(9, lkiPosition)); AbilityKey type = AbilityKey.fromString(defined.substring(9, lkiPosition));
final Object crd = root.getTriggeringObject(type);
if (crd instanceof Card) { if (crd instanceof Card) {
c = (Card) crd; c = (Card) crd;
} }
} }
else { else {
final Object crd = root.getTriggeringObject(defined.substring(9)); AbilityKey type = AbilityKey.fromString(defined.substring(9));
final Object crd = root.getTriggeringObject(type);
if (crd instanceof Card) { if (crd instanceof Card) {
c = game.getCardState((Card) crd); c = game.getCardState((Card) crd);
} else if (crd instanceof Iterable) { } else if (crd instanceof Iterable) {
@@ -462,12 +464,9 @@ public class AbilityUtils {
players.remove(game.getPhaseHandler().getPlayerTurn()); players.remove(game.getPhaseHandler().getPlayerTurn());
val = CardFactoryUtil.playerXCount(players, calcX[1], card); val = CardFactoryUtil.playerXCount(players, calcX[1], card);
} }
else if (hType.startsWith("PropertyYou") && !(ability instanceof SpellAbility)) { else if (hType.startsWith("PropertyYou") && ability instanceof SpellAbility) {
// Related to the controller of the card with ability when the ability is static (or otherwise not a SpellAbility) // Hollow One
// TODO: This doesn't work in situations when the controller of the card is different from the spell caster players.add(((SpellAbility) ability).getActivatingPlayer());
// (e.g. opponent's Hollow One exiled by Hostage Taker - cost reduction will not work in this scenario, requires
// a more significant rework).
players.add(card.getController());
val = CardFactoryUtil.playerXCount(players, calcX[1], card); val = CardFactoryUtil.playerXCount(players, calcX[1], card);
} }
else if (hType.startsWith("Property") && ability instanceof SpellAbility) { else if (hType.startsWith("Property") && ability instanceof SpellAbility) {
@@ -641,12 +640,12 @@ public class AbilityUtils {
} }
if (calcX[0].startsWith("TriggeredPlayer") || calcX[0].startsWith("TriggeredTarget")) { if (calcX[0].startsWith("TriggeredPlayer") || calcX[0].startsWith("TriggeredTarget")) {
final SpellAbility root = sa.getRootAbility(); final SpellAbility root = sa.getRootAbility();
Object o = root.getTriggeringObject(calcX[0].substring(9)); Object o = root.getTriggeringObject(AbilityKey.fromString(calcX[0].substring(9)));
return o instanceof Player ? CardFactoryUtil.playerXProperty((Player) o, calcX[1], card) * multiplier : 0; return o instanceof Player ? CardFactoryUtil.playerXProperty((Player) o, calcX[1], card) * multiplier : 0;
} }
if (calcX[0].equals("TriggeredSpellAbility")) { if (calcX[0].equals("TriggeredSpellAbility")) {
final SpellAbility root = sa.getRootAbility(); final SpellAbility root = sa.getRootAbility();
SpellAbility sat = (SpellAbility) root.getTriggeringObject("SpellAbility"); SpellAbility sat = (SpellAbility) root.getTriggeringObject(AbilityKey.SpellAbility);
return calculateAmount(sat.getHostCard(), calcX[1], sat); return calculateAmount(sat.getHostCard(), calcX[1], sat);
} }
// Added on 9/30/12 (ArsenalNut) - Ended up not using but might be useful in future // Added on 9/30/12 (ArsenalNut) - Ended up not using but might be useful in future
@@ -695,11 +694,11 @@ public class AbilityUtils {
} }
else if (calcX[0].startsWith("TriggerObjects")) { else if (calcX[0].startsWith("TriggerObjects")) {
final SpellAbility root = sa.getRootAbility(); final SpellAbility root = sa.getRootAbility();
list = (CardCollection) root.getTriggeringObject(calcX[0].substring(14)); list = (CardCollection) root.getTriggeringObject(AbilityKey.fromString(calcX[0].substring(14)));
} }
else if (calcX[0].startsWith("Triggered")) { else if (calcX[0].startsWith("Triggered")) {
final SpellAbility root = sa.getRootAbility(); final SpellAbility root = sa.getRootAbility();
list = new CardCollection((Card) root.getTriggeringObject(calcX[0].substring(9))); list = new CardCollection((Card) root.getTriggeringObject(AbilityKey.fromString(calcX[0].substring(9))));
} }
else if (calcX[0].startsWith("TriggerCount")) { else if (calcX[0].startsWith("TriggerCount")) {
// TriggerCount is similar to a regular Count, but just // TriggerCount is similar to a regular Count, but just
@@ -707,7 +706,7 @@ public class AbilityUtils {
final SpellAbility root = sa.getRootAbility(); final SpellAbility root = sa.getRootAbility();
final String[] l = calcX[1].split("/"); final String[] l = calcX[1].split("/");
final String m = CardFactoryUtil.extractOperators(calcX[1]); final String m = CardFactoryUtil.extractOperators(calcX[1]);
final int count = (Integer) root.getTriggeringObject(l[0]); final int count = (Integer) root.getTriggeringObject(AbilityKey.fromString(l[0]));
return CardFactoryUtil.doXMath(count, m, card) * multiplier; return CardFactoryUtil.doXMath(count, m, card) * multiplier;
} }
@@ -777,19 +776,19 @@ public class AbilityUtils {
final Object o; final Object o;
if (type.startsWith("Triggered")) { if (type.startsWith("Triggered")) {
if (type.contains("Card")) { if (type.contains("Card")) {
o = sa.getTriggeringObject("Card"); o = sa.getTriggeringObject(AbilityKey.Card);
} }
else if (type.contains("Object")) { else if (type.contains("Object")) {
o = sa.getTriggeringObject("Object"); o = sa.getTriggeringObject(AbilityKey.Object);
} }
else if (type.contains("Attacker")) { else if (type.contains("Attacker")) {
o = sa.getTriggeringObject("Attacker"); o = sa.getTriggeringObject(AbilityKey.Attacker);
} }
else if (type.contains("Blocker")) { else if (type.contains("Blocker")) {
o = sa.getTriggeringObject("Blocker"); o = sa.getTriggeringObject(AbilityKey.Blocker);
} }
else { else {
o = sa.getTriggeringObject("Card"); o = sa.getTriggeringObject(AbilityKey.Card);
} }
if (!(o instanceof Card)) { if (!(o instanceof Card)) {
@@ -1004,7 +1003,7 @@ public class AbilityUtils {
if (defParsed.endsWith("Controller")) { if (defParsed.endsWith("Controller")) {
String triggeringType = defParsed.substring(9); String triggeringType = defParsed.substring(9);
triggeringType = triggeringType.substring(0, triggeringType.length() - 10); triggeringType = triggeringType.substring(0, triggeringType.length() - 10);
final Object c = root.getTriggeringObject(triggeringType); final Object c = root.getTriggeringObject(AbilityKey.fromString(triggeringType));
if (c instanceof Card) { if (c instanceof Card) {
o = ((Card) c).getController(); o = ((Card) c).getController();
} }
@@ -1015,7 +1014,7 @@ public class AbilityUtils {
else if (defParsed.endsWith("Opponent")) { else if (defParsed.endsWith("Opponent")) {
String triggeringType = defParsed.substring(9); String triggeringType = defParsed.substring(9);
triggeringType = triggeringType.substring(0, triggeringType.length() - 8); triggeringType = triggeringType.substring(0, triggeringType.length() - 8);
final Object c = root.getTriggeringObject(triggeringType); final Object c = root.getTriggeringObject(AbilityKey.fromString(triggeringType));
if (c instanceof Card) { if (c instanceof Card) {
o = ((Card) c).getController().getOpponents(); o = ((Card) c).getController().getOpponents();
} }
@@ -1026,14 +1025,14 @@ public class AbilityUtils {
else if (defParsed.endsWith("Owner")) { else if (defParsed.endsWith("Owner")) {
String triggeringType = defParsed.substring(9); String triggeringType = defParsed.substring(9);
triggeringType = triggeringType.substring(0, triggeringType.length() - 5); triggeringType = triggeringType.substring(0, triggeringType.length() - 5);
final Object c = root.getTriggeringObject(triggeringType); final Object c = root.getTriggeringObject(AbilityKey.fromString(triggeringType));
if (c instanceof Card) { if (c instanceof Card) {
o = ((Card) c).getOwner(); o = ((Card) c).getOwner();
} }
} }
else { else {
final String triggeringType = defParsed.substring(9); final String triggeringType = defParsed.substring(9);
o = root.getTriggeringObject(triggeringType); o = root.getTriggeringObject(AbilityKey.fromString(triggeringType));
} }
if (o != null) { if (o != null) {
if (o instanceof Player) { if (o instanceof Player) {
@@ -1252,13 +1251,13 @@ public class AbilityUtils {
final SpellAbility root = sa.getRootAbility(); final SpellAbility root = sa.getRootAbility();
final String triggeringType = defined.substring(9); final String triggeringType = defined.substring(9);
final Object o = root.getTriggeringObject(triggeringType); final Object o = root.getTriggeringObject(AbilityKey.fromString(triggeringType));
if (o instanceof SpellAbility) { if (o instanceof SpellAbility) {
s = (SpellAbility) o; s = (SpellAbility) o;
// if there is no target information in SA but targets are listed in SpellAbilityTargeting cards, copy that // if there is no target information in SA but targets are listed in SpellAbilityTargeting cards, copy that
// information so it's not lost if the calling code is interested in targets of the triggered SA. // information so it's not lost if the calling code is interested in targets of the triggered SA.
if (triggeringType.equals("SpellAbility")) { if (triggeringType.equals("SpellAbility")) {
final CardCollectionView tgtList = (CardCollectionView)root.getTriggeringObject("SpellAbilityTargetingCards"); final CardCollectionView tgtList = (CardCollectionView)root.getTriggeringObject(AbilityKey.SpellAbilityTargetingCards);
if (s.getTargets() != null && s.getTargets().getNumTargeted() == 0) { if (s.getTargets() != null && s.getTargets().getNumTargeted() == 0) {
if (tgtList != null && tgtList.size() > 0) { if (tgtList != null && tgtList.size() > 0) {
TargetChoices tc = new TargetChoices(); TargetChoices tc = new TargetChoices();
@@ -1390,7 +1389,7 @@ public class AbilityUtils {
cost = new Cost(source.getManaCost(), true); cost = new Cost(source.getManaCost(), true);
} }
else if (unlessCost.equals("TriggeredSpellManaCost")) { else if (unlessCost.equals("TriggeredSpellManaCost")) {
SpellAbility triggered = (SpellAbility) sa.getRootAbility().getTriggeringObject("SpellAbility"); SpellAbility triggered = (SpellAbility) sa.getRootAbility().getTriggeringObject(AbilityKey.SpellAbility);
Card triggeredCard = triggered.getHostCard(); Card triggeredCard = triggered.getHostCard();
if (triggeredCard.getManaCost() == null) { if (triggeredCard.getManaCost() == null) {
cost = new Cost(ManaCost.ZERO, true); cost = new Cost(ManaCost.ZERO, true);
@@ -1608,7 +1607,7 @@ public class AbilityUtils {
// Count$TriggeredPayingMana.<Color1>.<Color2> // Count$TriggeredPayingMana.<Color1>.<Color2>
if (sq[0].startsWith("TriggeredPayingMana")) { if (sq[0].startsWith("TriggeredPayingMana")) {
final SpellAbility root = sa.getRootAbility(); final SpellAbility root = sa.getRootAbility();
String mana = (String) root.getTriggeringObject("PayingMana"); String mana = (String) root.getTriggeringObject(AbilityKey.PayingMana);
int count = 0; int count = 0;
Matcher mat = Pattern.compile(StringUtils.join(sq, "|", 1, sq.length)).matcher(mana); Matcher mat = Pattern.compile(StringUtils.join(sq, "|", 1, sq.length)).matcher(mana);
while (mat.find()) { while (mat.find()) {
@@ -1620,7 +1619,8 @@ public class AbilityUtils {
// Count$Adamant.<Color>.<True>.<False> // Count$Adamant.<Color>.<True>.<False>
if (sq[0].startsWith("Adamant")) { if (sq[0].startsWith("Adamant")) {
final String payingMana = StringUtils.join(sa.getRootAbility().getPayingMana()); final String payingMana = StringUtils.join(sa.getRootAbility().getPayingMana());
final boolean adamant = StringUtils.countMatches(payingMana, MagicColor.toShortString(sq[1])) >= 3; final int num = sq[0].length() > 7 ? Integer.parseInt(sq[0].split("_")[1]) : 3;
final boolean adamant = StringUtils.countMatches(payingMana, MagicColor.toShortString(sq[1])) >= num;
return CardFactoryUtil.doXMath(Integer.parseInt(sq[adamant ? 2 : 3]), expr, c); return CardFactoryUtil.doXMath(Integer.parseInt(sq[adamant ? 2 : 3]), expr, c);
} }

View File

@@ -2,6 +2,7 @@ package forge.game.ability.effects;
import forge.game.Game; import forge.game.Game;
import forge.game.GameEntity; import forge.game.GameEntity;
import forge.game.ability.AbilityKey;
import forge.game.ability.SpellAbilityEffect; import forge.game.ability.SpellAbilityEffect;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.combat.AttackingBand; import forge.game.combat.AttackingBand;
@@ -54,12 +55,12 @@ public class ChangeCombatantsEffect extends SpellAbilityEffect {
// retarget triggers to the new defender (e.g. Ulamog, Ceaseless Hunger + Portal Mage) // retarget triggers to the new defender (e.g. Ulamog, Ceaseless Hunger + Portal Mage)
for (SpellAbilityStackInstance si : game.getStack()) { for (SpellAbilityStackInstance si : game.getStack()) {
if (si.isTrigger() && c.equals(si.getSourceCard()) if (si.isTrigger() && c.equals(si.getSourceCard())
&& si.getTriggeringObject("Attacker") != null) { && si.getTriggeringObject(AbilityKey.Attacker) != null) {
si.addTriggeringObject("OriginalDefender", originalDefender); si.addTriggeringObject(AbilityKey.OriginalDefender, originalDefender);
if (defender instanceof Player) { if (defender instanceof Player) {
si.updateTriggeringObject("DefendingPlayer", defender); si.updateTriggeringObject(AbilityKey.DefendingPlayer, defender);
} else if (defender instanceof Card) { } else if (defender instanceof Card) {
si.updateTriggeringObject("DefendingPlayer", ((Card)defender).getController()); si.updateTriggeringObject(AbilityKey.DefendingPlayer, ((Card)defender).getController());
} }
} }
} }

View File

@@ -980,7 +980,10 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
} }
c.setController(newController, game.getNextTimestamp()); c.setController(newController, game.getNextTimestamp());
} }
if (sa.hasParam("WithCounters")) {
String[] parse = sa.getParam("WithCounters").split("_");
c.addEtbCounter(CounterType.getType(parse[0]), Integer.parseInt(parse[1]), player);
}
if (sa.hasParam("Transformed")) { if (sa.hasParam("Transformed")) {
if (c.isDoubleFaced()) { if (c.isDoubleFaced()) {
c.changeCardState("Transform", null); c.changeCardState("Transform", null);

View File

@@ -65,6 +65,11 @@ public class ImmediateTriggerEffect extends SpellAbilityEffect {
} }
} }
if (sa.hasParam("RememberDefinedNumber")) {
immediateTrig.addRemembered((Integer) AbilityUtils.calculateAmount(sa.getHostCard(),
sa.getParam("RememberDefinedNumber"), sa));
}
if (mapParams.containsKey("Execute") || sa.hasAdditionalAbility("Execute")) { if (mapParams.containsKey("Execute") || sa.hasAdditionalAbility("Execute")) {
SpellAbility overridingSA = sa.getAdditionalAbility("Execute"); SpellAbility overridingSA = sa.getAdditionalAbility("Execute");
overridingSA.setActivatingPlayer(sa.getActivatingPlayer()); overridingSA.setActivatingPlayer(sa.getActivatingPlayer());

View File

@@ -9,15 +9,18 @@ import forge.game.GameActionUtil;
import forge.game.ability.AbilityUtils; import forge.game.ability.AbilityUtils;
import forge.game.ability.SpellAbilityEffect; import forge.game.ability.SpellAbilityEffect;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CardCollection;
import forge.game.card.CardLists;
import forge.game.mana.Mana; import forge.game.mana.Mana;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.spellability.AbilityManaPart; import forge.game.spellability.AbilityManaPart;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.game.spellability.TargetRestrictions; import forge.game.spellability.TargetRestrictions;
import forge.game.zone.ZoneType;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import java.util.List; import java.util.List;
public class ManaEffect extends SpellAbilityEffect { public class ManaEffect extends SpellAbilityEffect {
@@ -181,6 +184,16 @@ public class ManaEffect extends SpellAbilityEffect {
} }
String cs = manaType.toString(); String cs = manaType.toString();
abMana.setExpressChoice(cs); abMana.setExpressChoice(cs);
} else if (type.startsWith("EachColorAmong")) {
final String res = type.split("_")[1];
final CardCollection list = CardLists.getValidCards(card.getGame().getCardsIn(ZoneType.Battlefield),
res, sa.getActivatingPlayer(), card, sa);
byte colors = 0;
for (Card c : list) {
colors |= c.determineColor().getColor();
}
if (colors == 0) return;
abMana.setExpressChoice(ColorSet.fromMask(colors));
} }
if (abMana.getExpressChoice().isEmpty()) { if (abMana.getExpressChoice().isEmpty()) {

View File

@@ -70,6 +70,7 @@ public class RestartGameEffect extends SpellAbilityEffect {
player.setStartingLife(psc.getStartingLife()); player.setStartingLife(psc.getStartingLife());
player.setPoisonCounters(0, sa.getHostCard()); player.setPoisonCounters(0, sa.getHostCard());
player.resetSpellCastThisGame();
player.setLandsPlayedLastTurn(0); player.setLandsPlayedLastTurn(0);
player.resetLandsPlayedThisTurn(); player.resetLandsPlayedThisTurn();
player.resetInvestigatedThisTurn(); player.resetInvestigatedThisTurn();

View File

@@ -1048,7 +1048,7 @@ public class Card extends GameEntity implements Comparable<Card> {
} }
} }
public final Object getTriggeringObject(final String typeIn) { public final Object getTriggeringObject(final AbilityKey typeIn) {
Object triggered = null; Object triggered = null;
if (!currentState.getTriggers().isEmpty()) { if (!currentState.getTriggers().isEmpty()) {
for (final Trigger t : currentState.getTriggers()) { for (final Trigger t : currentState.getTriggers()) {

View File

@@ -35,6 +35,7 @@ import forge.game.GameEntity;
import forge.game.GameEntityCounterTable; import forge.game.GameEntityCounterTable;
import forge.game.GameLogEntryType; import forge.game.GameLogEntryType;
import forge.game.ability.AbilityFactory; import forge.game.ability.AbilityFactory;
import forge.game.ability.AbilityKey;
import forge.game.ability.AbilityUtils; import forge.game.ability.AbilityUtils;
import forge.game.ability.ApiType; import forge.game.ability.ApiType;
import forge.game.card.CardPredicates.Presets; import forge.game.card.CardPredicates.Presets;
@@ -917,6 +918,10 @@ public class CardFactoryUtil {
return doXMath(cc.getSurveilThisTurn(), m, c); return doXMath(cc.getSurveilThisTurn(), m, c);
} }
if (sq[0].equals("YouCastThisGame")) {
return doXMath(cc.getSpellsCastThisGame(), m, c);
}
if (sq[0].equals("FirstSpellTotalManaSpent")) { if (sq[0].equals("FirstSpellTotalManaSpent")) {
try{ try{
return doXMath(c.getFirstSpellAbility().getTotalManaSpent(), m, c); return doXMath(c.getFirstSpellAbility().getTotalManaSpent(), m, c);
@@ -948,7 +953,7 @@ public class CardFactoryUtil {
// TriggeringObjects // TriggeringObjects
if (sq[0].startsWith("Triggered")) { if (sq[0].startsWith("Triggered")) {
return doXMath(xCount((Card) c.getTriggeringObject("Card"), sq[0].substring(9)), m, c); return doXMath(xCount((Card) c.getTriggeringObject(AbilityKey.Card), sq[0].substring(9)), m, c);
} }
if (sq[0].contains("YourStartingLife")) { if (sq[0].contains("YourStartingLife")) {
@@ -1102,13 +1107,11 @@ public class CardFactoryUtil {
final String restriction = l[0].substring(11); final String restriction = l[0].substring(11);
final String[] rest = restriction.split(","); final String[] rest = restriction.split(",");
final CardCollection list = CardLists.getValidCards(cc.getGame().getCardsInGame(), rest, cc, c, null); final CardCollection list = CardLists.getValidCards(cc.getGame().getCardsInGame(), rest, cc, c, null);
int n = 0; byte n = 0;
for (final byte col : MagicColor.WUBRG) { for (final Card card : list) {
if (!CardLists.getColor(list, col).isEmpty()) { n |= card.determineColor().getColor();
n++;
}
} }
return doXMath(n, m, c); return doXMath(ColorSet.fromMask(n).countColors(), m, c);
} }
if (sq[0].contains("CreatureType")) { if (sq[0].contains("CreatureType")) {
@@ -1331,6 +1334,13 @@ public class CardFactoryUtil {
return doXMath(cc.getAttackersDeclaredThisTurn(), m, c); return doXMath(cc.getAttackersDeclaredThisTurn(), m, c);
} }
// Count$CardAttackedThisTurn_<Valid>
if (sq[0].contains("CreaturesAttackedThisTurn")) {
final String[] workingCopy = l[0].split("_");
final String validFilter = workingCopy[1];
return doXMath(CardLists.getType(cc.getCreaturesAttackedThisTurn(), validFilter).size(), m, c);
}
// Count$ThisTurnCast <Valid> // Count$ThisTurnCast <Valid>
// Count$LastTurnCast <Valid> // Count$LastTurnCast <Valid>
if (sq[0].contains("ThisTurnCast") || sq[0].contains("LastTurnCast")) { if (sq[0].contains("ThisTurnCast") || sq[0].contains("LastTurnCast")) {

View File

@@ -6,6 +6,7 @@ import forge.card.MagicColor;
import forge.game.Direction; import forge.game.Direction;
import forge.game.Game; import forge.game.Game;
import forge.game.GameEntity; import forge.game.GameEntity;
import forge.game.ability.AbilityKey;
import forge.game.ability.AbilityUtils; import forge.game.ability.AbilityUtils;
import forge.game.card.CardPredicates.Presets; import forge.game.card.CardPredicates.Presets;
import forge.game.combat.AttackingBand; import forge.game.combat.AttackingBand;
@@ -874,7 +875,7 @@ public class CardProperty {
} }
return false; return false;
case "TriggeredCard": case "TriggeredCard":
final Object triggeringObject = source.getTriggeringObject(restriction.substring("Triggered".length())); final Object triggeringObject = source.getTriggeringObject(AbilityKey.fromString(restriction.substring("Triggered".length())));
if (!(triggeringObject instanceof Card)) { if (!(triggeringObject instanceof Card)) {
return false; return false;
} }
@@ -957,7 +958,7 @@ public class CardProperty {
if (spellAbility == null) { if (spellAbility == null) {
System.out.println("Looking at TriggeredCard but no SA?"); System.out.println("Looking at TriggeredCard but no SA?");
} else { } else {
Card triggeredCard = ((Card)spellAbility.getTriggeringObject("Card")); Card triggeredCard = ((Card) spellAbility.getTriggeringObject(AbilityKey.Card));
if (triggeredCard != null && card.sharesNameWith(triggeredCard)) { if (triggeredCard != null && card.sharesNameWith(triggeredCard)) {
return true; return true;
} }

View File

@@ -25,6 +25,7 @@ import forge.card.ColorSet;
import forge.card.MagicColor; import forge.card.MagicColor;
import forge.game.Game; import forge.game.Game;
import forge.game.GameObject; import forge.game.GameObject;
import forge.game.ability.AbilityKey;
import forge.game.ability.AbilityUtils; import forge.game.ability.AbilityUtils;
import forge.game.ability.ApiType; import forge.game.ability.ApiType;
import forge.game.player.Player; import forge.game.player.Player;
@@ -56,7 +57,8 @@ public final class CardUtil {
"Transmute", "Replicate", "Recover", "Suspend", "Aura swap", "Transmute", "Replicate", "Recover", "Suspend", "Aura swap",
"Fortify", "Transfigure", "Champion", "Evoke", "Prowl", "IfReach", "Fortify", "Transfigure", "Champion", "Evoke", "Prowl", "IfReach",
"Reinforce", "Unearth", "Level up", "Miracle", "Overload", "Reinforce", "Unearth", "Level up", "Miracle", "Overload",
"Scavenge", "Bestow", "Outlast", "Dash", "Surge", "Emerge", "Hexproof:").build(); "Scavenge", "Bestow", "Outlast", "Dash", "Surge", "Emerge", "Hexproof:",
"etbCounter").build();
/** List of keyword endings of keywords that could be modified by text changes. */ /** List of keyword endings of keywords that could be modified by text changes. */
public static final ImmutableList<String> modifiableKeywordEndings = ImmutableList.<String>builder().add( public static final ImmutableList<String> modifiableKeywordEndings = ImmutableList.<String>builder().add(
"walk", "cycling", "offering").build(); "walk", "cycling", "offering").build();
@@ -411,7 +413,7 @@ public final class CardUtil {
} }
} else if (reflectProperty.equals("Produced")) { } else if (reflectProperty.equals("Produced")) {
// Why is this name so similar to the one below? // Why is this name so similar to the one below?
final String producedColors = abMana instanceof AbilitySub ? (String) abMana.getRootAbility().getTriggeringObject("Produced") : (String) abMana.getTriggeringObject("Produced"); final String producedColors = abMana instanceof AbilitySub ? (String) abMana.getRootAbility().getTriggeringObject(AbilityKey.Produced) : (String) abMana.getTriggeringObject(AbilityKey.Produced);
for (final String col : MagicColor.Constant.ONLY_COLORS) { for (final String col : MagicColor.Constant.ONLY_COLORS) {
final String s = MagicColor.toShortString(col); final String s = MagicColor.toShortString(col);
if (producedColors.contains(s)) { if (producedColors.contains(s)) {

View File

@@ -546,13 +546,13 @@ public class Combat {
Game game = c.getGame(); Game game = c.getGame();
for (SpellAbilityStackInstance si : game.getStack()) { for (SpellAbilityStackInstance si : game.getStack()) {
if (si.isTrigger() && c.equals(si.getSourceCard())) { if (si.isTrigger() && c.equals(si.getSourceCard())) {
GameEntity origDefender = (GameEntity)si.getTriggeringObject("OriginalDefender"); GameEntity origDefender = (GameEntity)si.getTriggeringObject(AbilityKey.OriginalDefender);
if (origDefender != null) { if (origDefender != null) {
si.updateTriggeringObject("Defender", origDefender); si.updateTriggeringObject(AbilityKey.Defender, origDefender);
if (origDefender instanceof Player) { if (origDefender instanceof Player) {
si.updateTriggeringObject("DefendingPlayer", origDefender); si.updateTriggeringObject(AbilityKey.DefendingPlayer, origDefender);
} else if (origDefender instanceof Card) { } else if (origDefender instanceof Card) {
si.updateTriggeringObject("DefendingPlayer", ((Card)origDefender).getController()); si.updateTriggeringObject(AbilityKey.DefendingPlayer, ((Card)origDefender).getController());
} }
} }
} }

View File

@@ -317,7 +317,7 @@ public class CombatUtil {
c.getDamageHistory().setCreatureAttackedThisCombat(true); c.getDamageHistory().setCreatureAttackedThisCombat(true);
c.getDamageHistory().clearNotAttackedSinceLastUpkeepOf(); c.getDamageHistory().clearNotAttackedSinceLastUpkeepOf();
c.getController().setAttackedWithCreatureThisTurn(true); c.getController().addCreaturesAttackedThisTurn(c);
c.getController().incrementAttackersDeclaredThisTurn(); c.getController().incrementAttackersDeclaredThisTurn();
if (combat.getDefenderByAttacker(c) != null && combat.getDefenderByAttacker(c) instanceof Player) { if (combat.getDefenderByAttacker(c) != null && combat.getDefenderByAttacker(c) instanceof Player) {

View File

@@ -150,7 +150,7 @@ public class GlobalAttackRestrictions {
final Game game = attackingPlayer.getGame(); final Game game = attackingPlayer.getGame();
/* if (game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.onlyOneAttackerATurn)) { /* if (game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.onlyOneAttackerATurn)) {
if (attackingPlayer.getAttackedWithCreatureThisTurn()) { if (!attackingPlayer.getAttackedWithCreatureThisTurn().isEmpty()) {
max = 0; max = 0;
} else { } else {
max = 1; max = 1;

View File

@@ -381,6 +381,9 @@ public class CostAdjustment {
} else if ("Undaunted".equals(amount)) { } else if ("Undaunted".equals(amount)) {
value = card.getController().getOpponents().size(); value = card.getController().getOpponents().size();
} else if (staticAbility.hasParam("Relative")) { } else if (staticAbility.hasParam("Relative")) {
// TODO: update cards with "This spell costs X less to cast...if you..."
// The caster is sa.getActivatingPlayer()
// cards like Hostage Taker can cast spells from other players.
value = AbilityUtils.calculateAmount(hostCard, amount, sa); value = AbilityUtils.calculateAmount(hostCard, amount, sa);
} else { } else {
value = AbilityUtils.calculateAmount(hostCard, amount, staticAbility); value = AbilityUtils.calculateAmount(hostCard, amount, staticAbility);

View File

@@ -23,6 +23,7 @@ import com.google.common.collect.Maps;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import forge.card.mana.ManaCost; import forge.card.mana.ManaCost;
import forge.game.*; import forge.game.*;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CardCollection; import forge.game.card.CardCollection;
import forge.game.card.CardCollectionView; import forge.game.card.CardCollectionView;
@@ -412,10 +413,10 @@ public class PhaseHandler implements java.io.Serializable {
if (!skipped) { if (!skipped) {
// Run triggers if phase isn't being skipped // Run triggers if phase isn't being skipped
final Map<String, Object> runParams = Maps.newHashMap(); final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
runParams.put("Phase", phase.nameForScripts); runParams.put(AbilityKey.Phase, phase.nameForScripts);
runParams.put("Player", playerTurn); runParams.put(AbilityKey.Player, playerTurn);
game.getTriggerHandler().runTriggerOld(TriggerType.Phase, runParams, false); game.getTriggerHandler().runTrigger(TriggerType.Phase, runParams, false);
} }
// This line fixes Combat Damage triggers not going off when they should // 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) { if (!bRepeatCleanup) {
setPlayerTurn(handleNextTurn()); setPlayerTurn(handleNextTurn());
// "Trigger" for begin turn to get around a phase skipping // "Trigger" for begin turn to get around a phase skipping
final Map<String, Object> runParams = Maps.newHashMap(); final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
runParams.put("Player", playerTurn); runParams.put(AbilityKey.Player, playerTurn);
game.getTriggerHandler().runTriggerOld(TriggerType.TurnBegin, runParams, false); game.getTriggerHandler().runTrigger(TriggerType.TurnBegin, runParams, false);
} }
planarDiceRolledthisTurn = 0; planarDiceRolledthisTurn = 0;
// Play the End Turn sound // Play the End Turn sound
@@ -577,11 +578,11 @@ public class PhaseHandler implements java.io.Serializable {
for (final Card c : combat.getAttackers()) { for (final Card c : combat.getAttackers()) {
attackedTarget.add(combat.getDefenderByAttacker(c)); attackedTarget.add(combat.getDefenderByAttacker(c));
} }
final Map<String, Object> runParams = Maps.newHashMap(); final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
runParams.put("Attackers", combat.getAttackers()); runParams.put(AbilityKey.Attackers, combat.getAttackers());
runParams.put("AttackingPlayer", combat.getAttackingPlayer()); runParams.put(AbilityKey.AttackingPlayer, combat.getAttackingPlayer());
runParams.put("AttackedTarget", attackedTarget); runParams.put(AbilityKey.AttackedTarget, attackedTarget);
game.getTriggerHandler().runTriggerOld(TriggerType.AttackersDeclared, runParams, false); game.getTriggerHandler().runTrigger(TriggerType.AttackersDeclared, runParams, false);
} }
for (final Card c : combat.getAttackers()) { for (final Card c : combat.getAttackers()) {
@@ -690,10 +691,10 @@ public class PhaseHandler implements java.io.Serializable {
} }
} }
// fire blockers declared trigger // fire blockers declared trigger
final Map<String, Object> bdRunParams = Maps.newHashMap(); final Map<AbilityKey, Object> bdRunParams = AbilityKey.newMap();
bdRunParams.put("Blockers", declaredBlockers); bdRunParams.put(AbilityKey.Blockers, declaredBlockers);
bdRunParams.put("Attackers", blockedAttackers); bdRunParams.put(AbilityKey.Attackers, blockedAttackers);
game.getTriggerHandler().runTriggerOld(TriggerType.BlockersDeclared, bdRunParams, false); game.getTriggerHandler().runTrigger(TriggerType.BlockersDeclared, bdRunParams, false);
} }
for (final Card c1 : combat.getAllBlockers()) { for (final Card c1 : combat.getAllBlockers()) {
@@ -703,10 +704,10 @@ public class PhaseHandler implements java.io.Serializable {
if (!c1.getDamageHistory().getCreatureBlockedThisCombat()) { if (!c1.getDamageHistory().getCreatureBlockedThisCombat()) {
// Run triggers // Run triggers
final Map<String, Object> runParams = Maps.newHashMap(); final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
runParams.put("Blocker", c1); runParams.put(AbilityKey.Blocker, c1);
runParams.put("Attackers", combat.getAttackersBlockedBy(c1)); runParams.put(AbilityKey.Attackers, combat.getAttackersBlockedBy(c1));
game.getTriggerHandler().runTriggerOld(TriggerType.Blocks, runParams, false); game.getTriggerHandler().runTrigger(TriggerType.Blocks, runParams, false);
} }
c1.getDamageHistory().setCreatureBlockedThisCombat(true); c1.getDamageHistory().setCreatureBlockedThisCombat(true);
@@ -724,13 +725,15 @@ public class PhaseHandler implements java.io.Serializable {
} }
// Run triggers // Run triggers
final Map<String, Object> runParams = Maps.newHashMap(); {
runParams.put("Attacker", a); final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
runParams.put("Blockers", blockers); runParams.put(AbilityKey.Attacker, a);
runParams.put("NumBlockers", blockers.size()); runParams.put(AbilityKey.Blockers, blockers);
runParams.put("Defender", combat.getDefenderByAttacker(a)); runParams.put(AbilityKey.NumBlockers, blockers.size());
runParams.put("DefendingPlayer", combat.getDefenderPlayerByAttacker(a)); runParams.put(AbilityKey.Defender, combat.getDefenderByAttacker(a));
game.getTriggerHandler().runTriggerOld(TriggerType.AttackerBlocked, runParams, false); runParams.put(AbilityKey.DefendingPlayer, combat.getDefenderPlayerByAttacker(a));
game.getTriggerHandler().runTrigger(TriggerType.AttackerBlocked, runParams, false);
}
// Run this trigger once for each blocker // Run this trigger once for each blocker
for (final Card b : blockers) { for (final Card b : blockers) {
@@ -738,10 +741,10 @@ public class PhaseHandler implements java.io.Serializable {
b.addBlockedThisTurn(a); b.addBlockedThisTurn(a);
a.addBlockedByThisTurn(b); a.addBlockedByThisTurn(b);
final Map<String, Object> runParams2 = Maps.newHashMap(); final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
runParams2.put("Attacker", a); runParams.put(AbilityKey.Attacker, a);
runParams2.put("Blocker", b); runParams.put(AbilityKey.Blocker, b);
game.getTriggerHandler().runTriggerOld(TriggerType.AttackerBlockedByCreature, runParams2, false); game.getTriggerHandler().runTrigger(TriggerType.AttackerBlockedByCreature, runParams, false);
} }
a.getDamageHistory().setCreatureGotBlockedThisCombat(true); a.getDamageHistory().setCreatureGotBlockedThisCombat(true);

View File

@@ -24,6 +24,7 @@ import forge.LobbyPlayer;
import forge.card.MagicColor; import forge.card.MagicColor;
import forge.game.*; import forge.game.*;
import forge.game.ability.AbilityFactory; import forge.game.ability.AbilityFactory;
import forge.game.ability.AbilityKey;
import forge.game.ability.AbilityUtils; import forge.game.ability.AbilityUtils;
import forge.game.ability.ApiType; import forge.game.ability.ApiType;
import forge.game.ability.effects.DetachedCardEffect; import forge.game.ability.effects.DetachedCardEffect;
@@ -83,6 +84,7 @@ public class Player extends GameEntity implements Comparable<Player> {
private final Map<Card, Integer> assignedDamage = Maps.newHashMap(); private final Map<Card, Integer> assignedDamage = Maps.newHashMap();
private final Map<Card, Integer> assignedCombatDamage = Maps.newHashMap(); private final Map<Card, Integer> assignedCombatDamage = Maps.newHashMap();
private int spellsCastThisTurn = 0; private int spellsCastThisTurn = 0;
private int spellsCastThisGame = 0;
private int spellsCastLastTurn = 0; private int spellsCastLastTurn = 0;
private int landsPlayedThisTurn = 0; private int landsPlayedThisTurn = 0;
private int landsPlayedLastTurn = 0; private int landsPlayedLastTurn = 0;
@@ -123,7 +125,7 @@ public class Player extends GameEntity implements Comparable<Player> {
private ManaPool manaPool = new ManaPool(this); private ManaPool manaPool = new ManaPool(this);
private GameEntity mustAttackEntity = null; private GameEntity mustAttackEntity = null;
private GameEntity mustAttackEntityThisTurn = null; private GameEntity mustAttackEntityThisTurn = null;
private boolean attackedWithCreatureThisTurn = false; private CardCollection creatureAttackedThisTurn = new CardCollection();
private boolean activateLoyaltyAbilityThisTurn = false; private boolean activateLoyaltyAbilityThisTurn = false;
private boolean tappedLandForManaThisTurn = false; private boolean tappedLandForManaThisTurn = false;
private int attackersDeclaredThisTurn = 0; private int attackersDeclaredThisTurn = 0;
@@ -246,9 +248,9 @@ public class Player extends GameEntity implements Comparable<Player> {
game.getTriggerHandler().clearSuppression(TriggerType.ChangesZone); game.getTriggerHandler().clearSuppression(TriggerType.ChangesZone);
// Run triggers // Run triggers
final Map<String, Object> runParams = Maps.newHashMap(); final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
runParams.put("Scheme", activeScheme); runParams.put(AbilityKey.Scheme, activeScheme);
game.getTriggerHandler().runTriggerOld(TriggerType.SetInMotion, runParams, false); game.getTriggerHandler().runTrigger(TriggerType.SetInMotion, runParams, false);
} }
@@ -445,12 +447,12 @@ public class Player extends GameEntity implements Comparable<Player> {
} }
// Run triggers // Run triggers
final Map<String, Object> runParams = Maps.newHashMap(); final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
runParams.put("Player", this); runParams.put(AbilityKey.Player, this);
runParams.put("LifeAmount", lifeGain); runParams.put(AbilityKey.LifeAmount, lifeGain);
runParams.put("Source", source); runParams.put(AbilityKey.Source, source);
runParams.put("SourceSA", sa); runParams.put(AbilityKey.SourceSA, sa);
game.getTriggerHandler().runTriggerOld(TriggerType.LifeGained, runParams, false); game.getTriggerHandler().runTrigger(TriggerType.LifeGained, runParams, false);
game.fireEvent(new GameEventPlayerLivesChanged(this, oldLife, life)); game.fireEvent(new GameEventPlayerLivesChanged(this, oldLife, life));
} }
@@ -478,19 +480,17 @@ public class Player extends GameEntity implements Comparable<Player> {
life -= toLose; life -= toLose;
view.updateLife(this); view.updateLife(this);
lifeLost = toLose; lifeLost = toLose;
if(manaBurn) { if (manaBurn) {
game.fireEvent(new GameEventManaBurn(this,lifeLost,true)); game.fireEvent(new GameEventManaBurn(this, lifeLost, true));
} else { } 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 // Rule 118.4
// this is for players being able to pay 0 life nothing to do // this is for players being able to pay 0 life nothing to do
// no trigger for lost no life // no trigger for lost no life
return 0; return 0;
} } else {
else {
System.out.println("Player - trying to lose negative life"); System.out.println("Player - trying to lose negative life");
return 0; return 0;
} }
@@ -500,11 +500,11 @@ public class Player extends GameEntity implements Comparable<Player> {
lifeLostThisTurn += toLose; lifeLostThisTurn += toLose;
// Run triggers // Run triggers
final Map<String, Object> runParams = Maps.newHashMap(); final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
runParams.put("Player", this); runParams.put(AbilityKey.Player, this);
runParams.put("LifeAmount", toLose); runParams.put(AbilityKey.LifeAmount, toLose);
runParams.put("FirstTime", firstLost); runParams.put(AbilityKey.FirstTime, firstLost);
game.getTriggerHandler().runTriggerOld(TriggerType.LifeLost, runParams, false); game.getTriggerHandler().runTrigger(TriggerType.LifeLost, runParams, false);
return lifeLost; return lifeLost;
} }
@@ -528,10 +528,10 @@ public class Player extends GameEntity implements Comparable<Player> {
loseLife(lifePayment); loseLife(lifePayment);
// Run triggers // Run triggers
final Map<String, Object> runParams = Maps.newHashMap(); final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
runParams.put("Player", this); runParams.put(AbilityKey.Player, this);
runParams.put("LifeAmount", lifePayment); runParams.put(AbilityKey.LifeAmount, lifePayment);
game.getTriggerHandler().runTriggerOld(TriggerType.PayLife, runParams, false); game.getTriggerHandler().runTrigger(TriggerType.PayLife, runParams, false);
return true; return true;
} }
@@ -611,14 +611,14 @@ public class Player extends GameEntity implements Comparable<Player> {
} }
// Run triggers // Run triggers
final Map<String, Object> runParams = Maps.newHashMap(); final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
runParams.put("DamageSource", source); runParams.put(AbilityKey.DamageSource, source);
runParams.put("DamageTarget", this); runParams.put(AbilityKey.DamageTarget, this);
runParams.put("DamageAmount", amount); runParams.put(AbilityKey.DamageAmount, amount);
runParams.put("IsCombatDamage", isCombat); runParams.put(AbilityKey.IsCombatDamage, isCombat);
// Defending player at the time the damage was dealt // Defending player at the time the damage was dealt
runParams.put("DefendingPlayer", game.getCombat() != null ? game.getCombat().getDefendingPlayerRelatedTo(source) : null); runParams.put(AbilityKey.DefendingPlayer, game.getCombat() != null ? game.getCombat().getDefendingPlayerRelatedTo(source) : null);
game.getTriggerHandler().runTriggerOld(TriggerType.DamageDone, runParams, false); game.getTriggerHandler().runTrigger(TriggerType.DamageDone, runParams, false);
game.fireEvent(new GameEventPlayerDamaged(this, source, amount, isCombat, infect)); game.fireEvent(new GameEventPlayerDamaged(this, source, amount, isCombat, infect));
@@ -908,7 +908,7 @@ public class Player extends GameEntity implements Comparable<Player> {
} }
int addAmount = n; int addAmount = n;
if(addAmount <= 0) { if (addAmount <= 0) {
// Can't add negative or 0 counters, bail out now // Can't add negative or 0 counters, bail out now
return 0; return 0;
} }
@@ -922,29 +922,29 @@ public class Player extends GameEntity implements Comparable<Player> {
repParams.put("EffectOnly", applyMultiplier); repParams.put("EffectOnly", applyMultiplier);
switch (getGame().getReplacementHandler().run(repParams)) { switch (getGame().getReplacementHandler().run(repParams)) {
case NotReplaced: case NotReplaced:
break; break;
case Updated: { case Updated: {
addAmount = (int) repParams.get("CounterNum"); addAmount = (int) repParams.get("CounterNum");
break; break;
} }
default: default:
return 0; return 0;
} }
final int oldValue = getCounters(counterType); final int oldValue = getCounters(counterType);
final int newValue = addAmount + oldValue; final int newValue = addAmount + oldValue;
this.setCounters(counterType, newValue, fireEvents); this.setCounters(counterType, newValue, fireEvents);
final Map<String, Object> runParams = Maps.newHashMap(); final Map<AbilityKey, Object> runParams = Maps.newHashMap();
runParams.put("Player", this); runParams.put(AbilityKey.Player, this);
runParams.put("Source", this); runParams.put(AbilityKey.Source, this);
runParams.put("CounterType", counterType); runParams.put(AbilityKey.CounterType, counterType);
for (int i = 0; i < addAmount; i++) { for (int i = 0; i < addAmount; i++) {
getGame().getTriggerHandler().runTriggerOld(TriggerType.CounterAdded, runParams, false); getGame().getTriggerHandler().runTrigger(TriggerType.CounterAdded, runParams, false);
} }
if (addAmount > 0) { if (addAmount > 0) {
getGame().getTriggerHandler().runTriggerOld(TriggerType.CounterAddedOnce, runParams, false); getGame().getTriggerHandler().runTrigger(TriggerType.CounterAddedOnce, runParams, false);
} }
if (table != null) { if (table != null) {
table.put(this, counterType, addAmount); table.put(this, counterType, addAmount);
@@ -1283,14 +1283,14 @@ public class Player extends GameEntity implements Comparable<Player> {
repParams.put("SurveilNum", num); repParams.put("SurveilNum", num);
switch (getGame().getReplacementHandler().run(repParams)) { switch (getGame().getReplacementHandler().run(repParams)) {
case NotReplaced: case NotReplaced:
break; break;
case Updated: { case Updated: {
num = (int) repParams.get("SurveilNum"); num = (int) repParams.get("SurveilNum");
break; break;
} }
default: default:
return; return;
} }
final CardCollection topN = new CardCollection(this.getCardsIn(ZoneType.Library, num)); final CardCollection topN = new CardCollection(this.getCardsIn(ZoneType.Library, num));
@@ -1307,7 +1307,7 @@ public class Player extends GameEntity implements Comparable<Player> {
int numToTop = 0; int numToTop = 0;
if (toGrave != null) { if (toGrave != null) {
for(Card c : toGrave) { for (Card c : toGrave) {
getGame().getAction().moveToGraveyard(c, cause); getGame().getAction().moveToGraveyard(c, cause);
numToGrave++; numToGrave++;
} }
@@ -1315,7 +1315,7 @@ public class Player extends GameEntity implements Comparable<Player> {
if (toTop != null) { if (toTop != null) {
Collections.reverse(toTop); // the last card in list will become topmost in library, have to revert thus. 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); getGame().getAction().moveToLibrary(c, cause);
numToTop++; numToTop++;
} }
@@ -1324,10 +1324,10 @@ public class Player extends GameEntity implements Comparable<Player> {
getGame().fireEvent(new GameEventSurveil(this, numToTop, numToGrave)); getGame().fireEvent(new GameEventSurveil(this, numToTop, numToGrave));
surveilThisTurn++; surveilThisTurn++;
final Map<String, Object> runParams = Maps.newHashMap(); final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
runParams.put("Player", this); runParams.put(AbilityKey.Player, this);
runParams.put("NumThisTurn", surveilThisTurn); runParams.put(AbilityKey.NumThisTurn, surveilThisTurn);
getGame().getTriggerHandler().runTriggerOld(TriggerType.Surveil, runParams, false); getGame().getTriggerHandler().runTrigger(TriggerType.Surveil, runParams, false);
} }
public int getSurveilThisTurn() { public int getSurveilThisTurn() {
@@ -1415,11 +1415,11 @@ public class Player extends GameEntity implements Comparable<Player> {
view.updateNumDrawnThisTurn(this); view.updateNumDrawnThisTurn(this);
// Run triggers // Run triggers
final Map<String, Object> runParams = Maps.newHashMap(); final Map<AbilityKey, Object> runParams = Maps.newHashMap();
runParams.put("Card", c); runParams.put(AbilityKey.Card, c);
runParams.put("Number", numDrawnThisTurn); runParams.put(AbilityKey.Number, numDrawnThisTurn);
runParams.put("Player", this); runParams.put(AbilityKey.Player, this);
game.getTriggerHandler().runTriggerOld(TriggerType.Drawn, runParams, false); 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 else { // Lose by milling is always on. Give AI many cards it cannot play if you want it not to undertake actions
triedToDrawFromEmptyLibrary = true; triedToDrawFromEmptyLibrary = true;
@@ -1603,12 +1603,12 @@ public class Player extends GameEntity implements Comparable<Player> {
} }
} }
} }
final Map<String, Object> runParams = Maps.newHashMap(); final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
runParams.put("Player", this); runParams.put(AbilityKey.Player, this);
runParams.put("Card", c); runParams.put(AbilityKey.Card, c);
runParams.put("Cause", cause); runParams.put(AbilityKey.Cause, cause);
runParams.put("IsMadness", Boolean.valueOf(discardMadness)); runParams.put(AbilityKey.IsMadness, discardMadness);
game.getTriggerHandler().runTriggerOld(TriggerType.Discarded, runParams, false); game.getTriggerHandler().runTrigger(TriggerType.Discarded, runParams, false);
game.getGameLog().add(GameLogEntryType.DISCARD, sb.toString()); game.getGameLog().add(GameLogEntryType.DISCARD, sb.toString());
return newCard; return newCard;
} }
@@ -1686,10 +1686,10 @@ public class Player extends GameEntity implements Comparable<Player> {
getZone(ZoneType.Library).setCards(getController().cheatShuffle(list)); getZone(ZoneType.Library).setCards(getController().cheatShuffle(list));
// Run triggers // Run triggers
final Map<String, Object> runParams = Maps.newHashMap(); final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
runParams.put("Player", this); runParams.put(AbilityKey.Player, this);
runParams.put("Source", sa); runParams.put(AbilityKey.Source, sa);
game.getTriggerHandler().runTriggerOld(TriggerType.Shuffled, runParams, false); game.getTriggerHandler().runTrigger(TriggerType.Shuffled, runParams, false);
// Play the shuffle sound // Play the shuffle sound
game.fireEvent(new GameEventShuffle(this)); game.fireEvent(new GameEventShuffle(this));
@@ -1717,9 +1717,7 @@ public class Player extends GameEntity implements Comparable<Player> {
game.fireEvent(new GameEventLandPlayed(this, land)); game.fireEvent(new GameEventLandPlayed(this, land));
// Run triggers // Run triggers
final Map<String, Object> runParams = Maps.newHashMap(); game.getTriggerHandler().runTrigger(TriggerType.LandPlayed, AbilityKey.mapFromCard(land), false);
runParams.put("Card", land);
game.getTriggerHandler().runTriggerOld(TriggerType.LandPlayed, runParams, false);
game.getStack().unfreezeStack(); game.getStack().unfreezeStack();
addLandPlayedThisTurn(); addLandPlayedThisTurn();
} }
@@ -1827,11 +1825,14 @@ public class Player extends GameEntity implements Comparable<Player> {
activateLoyaltyAbilityThisTurn = b; activateLoyaltyAbilityThisTurn = b;
} }
public final boolean getAttackedWithCreatureThisTurn() { public final CardCollection getCreaturesAttackedThisTurn() {
return attackedWithCreatureThisTurn; return creatureAttackedThisTurn;
} }
public final void setAttackedWithCreatureThisTurn(final boolean b) { public final void addCreaturesAttackedThisTurn(final Card c) {
attackedWithCreatureThisTurn = b; creatureAttackedThisTurn.add(c);
}
public final void clearCreaturesAttackedThisTurn() {
creatureAttackedThisTurn.clear();
} }
public final int getAttackersDeclaredThisTurn() { public final int getAttackersDeclaredThisTurn() {
@@ -2152,10 +2153,10 @@ public class Player extends GameEntity implements Comparable<Player> {
} }
public final void addInvestigatedThisTurn() { public final void addInvestigatedThisTurn() {
investigatedThisTurn++; investigatedThisTurn++;
Map<String,Object> runParams = Maps.newHashMap(); final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
runParams.put("Player", this); runParams.put(AbilityKey.Player, this);
runParams.put("Num", investigatedThisTurn); runParams.put(AbilityKey.Num, investigatedThisTurn);
game.getTriggerHandler().runTriggerOld(TriggerType.Investigated, runParams,false); game.getTriggerHandler().runTrigger(TriggerType.Investigated, runParams,false);
} }
public final void resetInvestigatedThisTurn() { public final void resetInvestigatedThisTurn() {
investigatedThisTurn = 0; investigatedThisTurn = 0;
@@ -2173,14 +2174,14 @@ public class Player extends GameEntity implements Comparable<Player> {
sacrificedThisTurn.add(cpy); sacrificedThisTurn.add(cpy);
// Run triggers // 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) // 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(AbilityKey.Card, cpy);
runParams.put("Player", this); runParams.put(AbilityKey.Player, this);
runParams.put("Cause", source); runParams.put(AbilityKey.Cause, source);
runParams.put("CostStack", game.costPaymentStack); runParams.put(AbilityKey.CostStack, game.costPaymentStack);
runParams.put("IndividualCostPaymentInstance", game.costPaymentStack.peek()); runParams.put(AbilityKey.IndividualCostPaymentInstance, game.costPaymentStack.peek());
game.getTriggerHandler().runTriggerOld(TriggerType.Sacrificed, runParams, false); game.getTriggerHandler().runTrigger(TriggerType.Sacrificed, runParams, false);
} }
public final void resetSacrificedThisTurn() { public final void resetSacrificedThisTurn() {
@@ -2209,6 +2210,7 @@ public class Player extends GameEntity implements Comparable<Player> {
} }
public final void addSpellCastThisTurn() { public final void addSpellCastThisTurn() {
spellsCastThisTurn++; spellsCastThisTurn++;
spellsCastThisGame++;
achievementTracker.spellsCast++; achievementTracker.spellsCast++;
if (spellsCastThisTurn > achievementTracker.maxStormCount) { if (spellsCastThisTurn > achievementTracker.maxStormCount) {
achievementTracker.maxStormCount = spellsCastThisTurn; achievementTracker.maxStormCount = spellsCastThisTurn;
@@ -2220,7 +2222,12 @@ public class Player extends GameEntity implements Comparable<Player> {
public final void setSpellsCastLastTurn(int num) { public final void setSpellsCastLastTurn(int num) {
spellsCastLastTurn = num; spellsCastLastTurn = num;
} }
public final int getSpellsCastThisGame() {
return spellsCastThisGame;
}
public final void resetSpellCastThisGame() {
spellsCastThisGame = 0;
}
public final int getLifeGainedByTeamThisTurn() { public final int getLifeGainedByTeamThisTurn() {
return lifeGainedByTeamThisTurn; return lifeGainedByTeamThisTurn;
} }
@@ -2392,7 +2399,7 @@ public class Player extends GameEntity implements Comparable<Player> {
resetNumDrawnThisTurn(); resetNumDrawnThisTurn();
resetNumDiscardedThisTurn(); resetNumDiscardedThisTurn();
setNumCardsInHandStartedThisTurnWith(getCardsIn(ZoneType.Hand).size()); setNumCardsInHandStartedThisTurnWith(getCardsIn(ZoneType.Hand).size());
setAttackedWithCreatureThisTurn(false); clearCreaturesAttackedThisTurn();
setActivateLoyaltyAbilityThisTurn(false); setActivateLoyaltyAbilityThisTurn(false);
setTappedLandForManaThisTurn(false); setTappedLandForManaThisTurn(false);
setLandsPlayedLastTurn(getLandsPlayedThisTurn()); setLandsPlayedLastTurn(getLandsPlayedThisTurn());
@@ -2524,9 +2531,9 @@ public class Player extends GameEntity implements Comparable<Player> {
game.setActivePlanes(currentPlanes); game.setActivePlanes(currentPlanes);
//Run PlaneswalkedTo triggers here. //Run PlaneswalkedTo triggers here.
Map<String,Object> runParams = Maps.newHashMap(); final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
runParams.put("Cards", currentPlanes); runParams.put(AbilityKey.Cards, currentPlanes);
game.getTriggerHandler().runTriggerOld(TriggerType.PlaneswalkedTo, runParams,false); game.getTriggerHandler().runTrigger(TriggerType.PlaneswalkedTo, runParams,false);
view.updateCurrentPlaneName(currentPlanes.toString().replaceAll(" \\(.*","").replace("[","")); view.updateCurrentPlaneName(currentPlanes.toString().replaceAll(" \\(.*","").replace("[",""));
} }
@@ -2535,8 +2542,9 @@ public class Player extends GameEntity implements Comparable<Player> {
*/ */
public void leaveCurrentPlane() { public void leaveCurrentPlane() {
final Map<String, Object> runParams = new ImmutableMap.Builder<String, Object>().put("Cards", new CardCollection(currentPlanes)).build(); final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
game.getTriggerHandler().runTriggerOld(TriggerType.PlaneswalkedFrom, runParams,false); runParams.put(AbilityKey.Cards, new CardCollection(currentPlanes));
game.getTriggerHandler().runTrigger(TriggerType.PlaneswalkedFrom, runParams,false);
for (final Card plane : currentPlanes) { for (final Card plane : currentPlanes) {
//game.getZoneOf(plane).remove(plane); //game.getZoneOf(plane).remove(plane);

View File

@@ -225,6 +225,15 @@ public class PlayerProperty {
if (!Expressions.compare(list.size(), comparator, y)) { if (!Expressions.compare(list.size(), comparator, y)) {
return false; return false;
} }
} else if (property.startsWith("HasCardsIn")) { // HasCardsIn[zonetype]_[cardtype]_[comparator]
final String[] type = property.substring(10).split("_");
final CardCollectionView list = CardLists.getValidCards(player.getCardsIn(ZoneType.smartValueOf(type[0])), type[1], sourceController, source);
String comparator = type[2];
String compareTo = comparator.substring(2);
int y = StringUtils.isNumeric(compareTo) ? Integer.parseInt(compareTo) : 0;
if (!Expressions.compare(list.size(), comparator, y)) {
return false;
}
} else if (property.startsWith("withMore")) { } else if (property.startsWith("withMore")) {
final String cardType = property.split("sThan")[0].substring(8); final String cardType = property.split("sThan")[0].substring(8);
final Player controller = "Active".equals(property.split("sThan")[1]) ? game.getPhaseHandler().getPlayerTurn() : sourceController; final Player controller = "Active".equals(property.split("sThan")[1]) ? game.getPhaseHandler().getPlayerTurn() : sourceController;

View File

@@ -24,6 +24,7 @@ import com.google.common.collect.Maps;
import forge.card.mana.ManaCost; import forge.card.mana.ManaCost;
import forge.game.*; import forge.game.*;
import forge.game.ability.AbilityFactory; import forge.game.ability.AbilityFactory;
import forge.game.ability.AbilityKey;
import forge.game.ability.AbilityUtils; import forge.game.ability.AbilityUtils;
import forge.game.ability.ApiType; import forge.game.ability.ApiType;
import forge.game.card.Card; import forge.game.card.Card;
@@ -138,7 +139,7 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
private HashMap<String, CardCollection> paidLists = Maps.newHashMap(); private HashMap<String, CardCollection> paidLists = Maps.newHashMap();
private Map<String, Object> triggeringObjects = Maps.newHashMap(); private EnumMap<AbilityKey, Object> triggeringObjects = AbilityKey.newMap();
private HashMap<String, Object> replacingObjects = Maps.newHashMap(); private HashMap<String, Object> replacingObjects = Maps.newHashMap();
@@ -552,23 +553,23 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
return sa; return sa;
} }
public Map<String, Object> getTriggeringObjects() { public Map<AbilityKey, Object> getTriggeringObjects() {
return triggeringObjects; return triggeringObjects;
} }
public void setTriggeringObjects(final Map<String, Object> triggeredObjects) { public void setTriggeringObjects(final Map<AbilityKey, Object> triggeredObjects) {
triggeringObjects = Maps.newHashMap(triggeredObjects); triggeringObjects = AbilityKey.newMap(triggeredObjects);
} }
public Object getTriggeringObject(final String type) { public Object getTriggeringObject(final AbilityKey type) {
return triggeringObjects.get(type); return triggeringObjects.get(type);
} }
public void setTriggeringObject(final String type, final Object o) { public void setTriggeringObject(final AbilityKey type, final Object o) {
triggeringObjects.put(type, o); triggeringObjects.put(type, o);
} }
public boolean hasTriggeringObject(final String type) { public boolean hasTriggeringObject(final AbilityKey type) {
return triggeringObjects.containsKey(type); return triggeringObjects.containsKey(type);
} }
public void resetTriggeringObjects() { public void resetTriggeringObjects() {
triggeringObjects = Maps.newHashMap(); triggeringObjects = AbilityKey.newMap();
} }
public List<Object> getTriggerRemembered() { public List<Object> getTriggerRemembered() {
@@ -877,7 +878,7 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
clone.originalMapParams = Maps.newHashMap(this.originalMapParams); clone.originalMapParams = Maps.newHashMap(this.originalMapParams);
clone.mapParams = Maps.newHashMap(this.mapParams); clone.mapParams = Maps.newHashMap(this.mapParams);
clone.triggeringObjects = Maps.newHashMap(this.triggeringObjects); clone.triggeringObjects = AbilityKey.newMap(this.triggeringObjects);
if (getPayCosts() != null) { if (getPayCosts() != null) {
clone.setPayCosts(getPayCosts().copy()); clone.setPayCosts(getPayCosts().copy());

View File

@@ -18,6 +18,7 @@
package forge.game.spellability; package forge.game.spellability;
import forge.game.IIdentifiable; import forge.game.IIdentifiable;
import forge.game.ability.AbilityKey;
import forge.game.ability.ApiType; import forge.game.ability.ApiType;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CardCollection; import forge.game.card.CardCollection;
@@ -91,7 +92,7 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView {
// is Kicked, is Buyback // is Kicked, is Buyback
// Triggers // Triggers
private final Map<String, Object> triggeringObjects; private final Map<AbilityKey, Object> triggeringObjects;
private final List<Object> triggerRemembered; private final List<Object> triggerRemembered;
private final Map<String, String> storedSVars = Maps.newHashMap(); private final Map<String, String> storedSVars = Maps.newHashMap();
@@ -342,27 +343,28 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView {
} }
// Run BecomesTargetTrigger // Run BecomesTargetTrigger
Map<String, Object> runParams = new HashMap<>(); final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
runParams.put("SourceSA", ability); runParams.put(AbilityKey.SourceSA, ability);
Set<Object> distinctObjects = new HashSet<>(); Set<Object> distinctObjects = new HashSet<>();
for (final Object tgt : target.getTargets()) { for (final Object tgt : target.getTargets()) {
if (distinctObjects.contains(tgt)) { if (distinctObjects.contains(tgt)) {
continue; continue;
} }
distinctObjects.add(tgt); distinctObjects.add(tgt);
if (tgt instanceof Card && !((Card) tgt).hasBecomeTargetThisTurn()) { if (tgt instanceof Card && !((Card) tgt).hasBecomeTargetThisTurn()) {
runParams.put("FirstTime", null); runParams.put(AbilityKey.FirstTime, null);
((Card) tgt).setBecameTargetThisTurn(true); ((Card) tgt).setBecameTargetThisTurn(true);
} }
runParams.put("Target", tgt); runParams.put(AbilityKey.Target, tgt);
getSourceCard().getGame().getTriggerHandler().runTriggerOld(TriggerType.BecomesTarget, runParams, false); getSourceCard().getGame().getTriggerHandler().runTrigger(TriggerType.BecomesTarget, runParams, false);
} }
runParams.put("Targets", target.getTargets()); runParams.put(AbilityKey.Targets, target.getTargets());
getSourceCard().getGame().getTriggerHandler().runTriggerOld(TriggerType.BecomesTargetOnce, runParams, false); getSourceCard().getGame().getTriggerHandler().runTrigger(TriggerType.BecomesTargetOnce, runParams, false);
} }
} }
public boolean addTriggeringObject(String trigObj, Object value) { public boolean addTriggeringObject(AbilityKey trigObj, Object value) {
if (!triggeringObjects.containsKey(trigObj)) { if (!triggeringObjects.containsKey(trigObj)) {
triggeringObjects.put(trigObj, value); triggeringObjects.put(trigObj, value);
return true; return true;
@@ -370,7 +372,7 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView {
return false; return false;
} }
public boolean updateTriggeringObject(String trigObj, Object value) { public boolean updateTriggeringObject(AbilityKey trigObj, Object value) {
if (triggeringObjects.containsKey(trigObj)) { if (triggeringObjects.containsKey(trigObj)) {
triggeringObjects.replace(trigObj, value); triggeringObjects.replace(trigObj, value);
return true; return true;
@@ -378,7 +380,7 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView {
return false; return false;
} }
public Object getTriggeringObject(String trigObj) { public Object getTriggeringObject(AbilityKey trigObj) {
if (triggeringObjects.containsKey(trigObj)) { if (triggeringObjects.containsKey(trigObj)) {
return triggeringObjects.get(trigObj); return triggeringObjects.get(trigObj);
} }

View File

@@ -527,7 +527,7 @@ public class StaticAbility extends CardTraitBase implements IIdentifiable, Clone
} }
if (hasParam("PlayerAttackedWithCreatureThisTurn") if (hasParam("PlayerAttackedWithCreatureThisTurn")
&& !player.getAttackedWithCreatureThisTurn()) { && player.getCreaturesAttackedThisTurn().isEmpty()) {
return false; return false;
} }

View File

@@ -21,6 +21,7 @@ import forge.game.Game;
import forge.game.GameEntity; import forge.game.GameEntity;
import forge.game.TriggerReplacementBase; import forge.game.TriggerReplacementBase;
import forge.game.ability.AbilityFactory; import forge.game.ability.AbilityFactory;
import forge.game.ability.AbilityKey;
import forge.game.ability.ApiType; import forge.game.ability.ApiType;
import forge.game.ability.effects.CharmEffect; import forge.game.ability.effects.CharmEffect;
import forge.game.card.Card; import forge.game.card.Card;
@@ -36,7 +37,6 @@ import forge.game.zone.ZoneType;
import java.util.*; import java.util.*;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import forge.util.TextUtil; import forge.util.TextUtil;
@@ -70,7 +70,7 @@ public abstract class Trigger extends TriggerReplacementBase {
private TriggerType mode; private TriggerType mode;
private Map<String, Object> storedTriggeredObjects = null; private Map<AbilityKey, Object> storedTriggeredObjects = null;
private List<Object> triggerRemembered = Lists.newArrayList(); private List<Object> triggerRemembered = Lists.newArrayList();
@@ -87,8 +87,8 @@ public abstract class Trigger extends TriggerReplacementBase {
* a {@link java.util.HashMap} object. * a {@link java.util.HashMap} object.
* @since 1.0.15 * @since 1.0.15
*/ */
public final void setStoredTriggeredObjects(final Map<String, Object> storedTriggeredObjects) { public final void setStoredTriggeredObjects(final Map<AbilityKey, Object> storedTriggeredObjects) {
this.storedTriggeredObjects = Maps.newHashMap(storedTriggeredObjects); this.storedTriggeredObjects = AbilityKey.newMap(storedTriggeredObjects);
} }
/** /**
@@ -99,7 +99,7 @@ public abstract class Trigger extends TriggerReplacementBase {
* @return a {@link java.util.HashMap} object. * @return a {@link java.util.HashMap} object.
* @since 1.0.15 * @since 1.0.15
*/ */
public final Map<String, Object> getStoredTriggeredObjects() { public final Map<AbilityKey, Object> getStoredTriggeredObjects() {
return this.storedTriggeredObjects; return this.storedTriggeredObjects;
} }
@@ -363,9 +363,9 @@ public abstract class Trigger extends TriggerReplacementBase {
} }
public boolean meetsRequirementsOnTriggeredObjects(Game game, Map<String, Object> runParams) { public boolean meetsRequirementsOnTriggeredObjects(Game game, final Map<AbilityKey, Object> runParams) {
if ("True".equals(this.mapParams.get("EvolveCondition"))) { if ("True".equals(this.mapParams.get("EvolveCondition"))) {
final Card moved = (Card) runParams.get("Card"); final Card moved = (Card) runParams.get(AbilityKey.Card);
if (moved == null) { if (moved == null) {
return false; return false;
// final StringBuilder sb = new StringBuilder(); // final StringBuilder sb = new StringBuilder();
@@ -381,26 +381,26 @@ public abstract class Trigger extends TriggerReplacementBase {
String condition = this.mapParams.get("Condition"); String condition = this.mapParams.get("Condition");
if ("AltCost".equals(condition)) { if ("AltCost".equals(condition)) {
final Card moved = (Card) runParams.get("Card"); final Card moved = (Card) runParams.get(AbilityKey.Card);
if( null != moved && !moved.isOptionalCostPaid(OptionalCost.AltCost)) if( null != moved && !moved.isOptionalCostPaid(OptionalCost.AltCost))
return false; return false;
} else if ("AttackedPlayerWithMostLife".equals(condition)) { } else if ("AttackedPlayerWithMostLife".equals(condition)) {
GameEntity attacked = (GameEntity) runParams.get("Attacked"); GameEntity attacked = (GameEntity) runParams.get(AbilityKey.Attacked);
if (attacked == null) { if (attacked == null) {
// Check "Defender" too because once triggering objects are set on TriggerAttacks, the value of Attacked // Check "Defender" too because once triggering objects are set on TriggerAttacks, the value of Attacked
// ends up being in Defender at that point. // ends up being in Defender at that point.
attacked = (GameEntity) runParams.get("Defender"); attacked = (GameEntity) runParams.get(AbilityKey.Defender);
} }
if (attacked == null || !attacked.isValid("Player.withMostLife", if (attacked == null || !attacked.isValid("Player.withMostLife",
this.getHostCard().getController(), this.getHostCard(), null)) { this.getHostCard().getController(), this.getHostCard(), null)) {
return false; return false;
} }
} else if ("AttackedPlayerWhoAttackedYouLastTurn".equals(condition)) { } else if ("AttackedPlayerWhoAttackedYouLastTurn".equals(condition)) {
GameEntity attacked = (GameEntity) runParams.get("Attacked"); GameEntity attacked = (GameEntity) runParams.get(AbilityKey.Attacked);
if (attacked == null) { if (attacked == null) {
// Check "Defender" too because once triggering objects are set on TriggerAttacks, the value of Attacked // Check "Defender" too because once triggering objects are set on TriggerAttacks, the value of Attacked
// ends up being in Defender at that point. // ends up being in Defender at that point.
attacked = (GameEntity) runParams.get("DefendingPlayer"); attacked = (GameEntity) runParams.get(AbilityKey.DefendingPlayer);
} }
Player attacker = this.getHostCard().getController(); Player attacker = this.getHostCard().getController();

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -62,7 +63,7 @@ public class TriggerAbandoned extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Scheme", this.getRunParams().get("Scheme")); sa.setTriggeringObject(AbilityKey.Scheme, this.getRunParams().get("Scheme"));
} }
@Override @Override

View File

@@ -19,6 +19,7 @@ package forge.game.trigger;
import java.util.Map; import java.util.Map;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -63,13 +64,13 @@ public class TriggerAdapt extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, getRunParams().get("Card"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Adapt: ").append(sa.getTriggeringObject("Card")); sb.append("Adapt: ").append(sa.getTriggeringObject(AbilityKey.Card));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -72,14 +73,14 @@ public class TriggerAttached extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Source", this.getRunParams().get("AttachSource")); sa.setTriggeringObject(AbilityKey.Source, this.getRunParams().get("AttachSource"));
sa.setTriggeringObject("Target", this.getRunParams().get("AttachTarget")); sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("AttachTarget"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Attachee: ").append(sa.getTriggeringObject("Target")); sb.append("Attachee: ").append(sa.getTriggeringObject(AbilityKey.Target));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -19,6 +19,7 @@ package forge.game.trigger;
import java.util.Map; import java.util.Map;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CardLists; import forge.game.card.CardLists;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -84,18 +85,18 @@ public class TriggerAttackerBlocked extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Attacker", getRunParams().get("Attacker")); sa.setTriggeringObject(AbilityKey.Attacker, getRunParams().get("Attacker"));
sa.setTriggeringObject("Blockers", getRunParams().get("Blockers")); sa.setTriggeringObject(AbilityKey.Blockers, getRunParams().get("Blockers"));
sa.setTriggeringObject("Defender", getRunParams().get("Defender")); sa.setTriggeringObject(AbilityKey.Defender, getRunParams().get("Defender"));
sa.setTriggeringObject("DefendingPlayer", getRunParams().get("DefendingPlayer")); sa.setTriggeringObject(AbilityKey.DefendingPlayer, getRunParams().get("DefendingPlayer"));
sa.setTriggeringObject("NumBlockers", getRunParams().get("NumBlockers")); sa.setTriggeringObject(AbilityKey.NumBlockers, getRunParams().get("NumBlockers"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Attacker: ").append(sa.getTriggeringObject("Attacker")).append(", "); sb.append("Attacker: ").append(sa.getTriggeringObject(AbilityKey.Attacker)).append(", ");
sb.append("Number Blockers: ").append(sa.getTriggeringObject("NumBlockers")); sb.append("Number Blockers: ").append(sa.getTriggeringObject(AbilityKey.NumBlockers));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -19,6 +19,7 @@ package forge.game.trigger;
import java.util.Map; import java.util.Map;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -87,15 +88,15 @@ public class TriggerAttackerBlockedByCreature extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Attacker", this.getRunParams().get("Attacker")); sa.setTriggeringObject(AbilityKey.Attacker, this.getRunParams().get("Attacker"));
sa.setTriggeringObject("Blocker", this.getRunParams().get("Blocker")); sa.setTriggeringObject(AbilityKey.Blocker, this.getRunParams().get("Blocker"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Attacker: ").append(sa.getTriggeringObject("Attacker")).append(", "); sb.append("Attacker: ").append(sa.getTriggeringObject(AbilityKey.Attacker)).append(", ");
sb.append("Blocker: ").append(sa.getTriggeringObject("Blocker")); sb.append("Blocker: ").append(sa.getTriggeringObject(AbilityKey.Blocker));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -69,15 +70,15 @@ public class TriggerAttackerUnblocked extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Attacker", this.getRunParams().get("Attacker")); sa.setTriggeringObject(AbilityKey.Attacker, this.getRunParams().get("Attacker"));
sa.setTriggeringObject("Defender", this.getRunParams().get("Defender")); sa.setTriggeringObject(AbilityKey.Defender, this.getRunParams().get("Defender"));
sa.setTriggeringObject("DefendingPlayer", this.getRunParams().get("DefendingPlayer")); sa.setTriggeringObject(AbilityKey.DefendingPlayer, this.getRunParams().get("DefendingPlayer"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Attacker: ").append(sa.getTriggeringObject("Attacker")); sb.append("Attacker: ").append(sa.getTriggeringObject(AbilityKey.Attacker));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -18,6 +18,7 @@
package forge.game.trigger; package forge.game.trigger;
import forge.game.GameEntity; import forge.game.GameEntity;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -84,15 +85,15 @@ public class TriggerAttackerUnblockedOnce extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("AttackingPlayer", this.getRunParams().get("AttackingPlayer")); sa.setTriggeringObject(AbilityKey.AttackingPlayer, this.getRunParams().get("AttackingPlayer"));
sa.setTriggeringObject("Defenders", this.getRunParams().get("Defenders")); sa.setTriggeringObject(AbilityKey.Defenders, this.getRunParams().get("Defenders"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("AttackingPlayer: ").append(sa.getTriggeringObject("AttackingPlayer")); sb.append("AttackingPlayer: ").append(sa.getTriggeringObject(AbilityKey.AttackingPlayer));
sb.append("Defenders: ").append(sa.getTriggeringObject("Defenders")); sb.append("Defenders: ").append(sa.getTriggeringObject(AbilityKey.Defenders));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -18,6 +18,7 @@
package forge.game.trigger; package forge.game.trigger;
import forge.game.GameEntity; import forge.game.GameEntity;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -86,14 +87,14 @@ public class TriggerAttackersDeclared extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Attackers", this.getRunParams().get("Attackers")); sa.setTriggeringObject(AbilityKey.Attackers, this.getRunParams().get("Attackers"));
sa.setTriggeringObject("AttackingPlayer", this.getRunParams().get("AttackingPlayer")); sa.setTriggeringObject(AbilityKey.AttackingPlayer, this.getRunParams().get("AttackingPlayer"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Number Attackers: ").append(sa.getTriggeringObject("Attackers")); sb.append("Number Attackers: ").append(sa.getTriggeringObject(AbilityKey.Attackers));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -18,6 +18,7 @@
package forge.game.trigger; package forge.game.trigger;
import forge.game.GameEntity; import forge.game.GameEntity;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -124,17 +125,17 @@ public class TriggerAttacks extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Attacker", this.getRunParams().get("Attacker")); sa.setTriggeringObject(AbilityKey.Attacker, this.getRunParams().get("Attacker"));
sa.setTriggeringObject("Defender", this.getRunParams().get("Attacked")); sa.setTriggeringObject(AbilityKey.Defender, this.getRunParams().get("Attacked"));
sa.setTriggeringObject("Defenders", this.getRunParams().get("Defenders")); sa.setTriggeringObject(AbilityKey.Defenders, this.getRunParams().get("Defenders"));
sa.setTriggeringObject("DefendingPlayer", this.getRunParams().get("DefendingPlayer")); sa.setTriggeringObject(AbilityKey.DefendingPlayer, this.getRunParams().get("DefendingPlayer"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Attacker: ").append(sa.getTriggeringObject("Attacker")); sb.append("Attacker: ").append(sa.getTriggeringObject(AbilityKey.Attacker));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -3,6 +3,7 @@ package forge.game.trigger;
import java.util.Map; import java.util.Map;
import forge.game.Game; import forge.game.Game;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -35,13 +36,13 @@ public class TriggerBecomeMonarch extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Player", this.getRunParams().get("Player")); sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Player: ").append(sa.getTriggeringObject("Player")).append(", "); sb.append("Player: ").append(sa.getTriggeringObject(AbilityKey.Player)).append(", ");
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -19,6 +19,7 @@ package forge.game.trigger;
import java.util.Map; import java.util.Map;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -64,14 +65,14 @@ public class TriggerBecomeMonstrous extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, getRunParams().get("Card"));
sa.setTriggeringObject("MonstrosityAmount", getRunParams().get("MonstrosityAmount")); sa.setTriggeringObject(AbilityKey.MonstrosityAmount, getRunParams().get("MonstrosityAmount"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Monstrous: ").append(sa.getTriggeringObject("Card")); sb.append("Monstrous: ").append(sa.getTriggeringObject(AbilityKey.Card));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -62,13 +63,13 @@ public class TriggerBecomeRenowned extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Renowned: ").append(sa.getTriggeringObject("Card")); sb.append("Renowned: ").append(sa.getTriggeringObject(AbilityKey.Card));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -88,16 +89,16 @@ public class TriggerBecomesTarget extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("SourceSA", this.getRunParams().get("SourceSA")); sa.setTriggeringObject(AbilityKey.SourceSA, this.getRunParams().get("SourceSA"));
sa.setTriggeringObject("Source", ((SpellAbility) this.getRunParams().get("SourceSA")).getHostCard()); sa.setTriggeringObject(AbilityKey.Source, ((SpellAbility) this.getRunParams().get("SourceSA")).getHostCard());
sa.setTriggeringObject("Target", this.getRunParams().get("Target")); sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("Target"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Source: ").append(((SpellAbility) sa.getTriggeringObject("SourceSA")).getHostCard()).append(", "); sb.append("Source: ").append(((SpellAbility) sa.getTriggeringObject(AbilityKey.SourceSA)).getHostCard()).append(", ");
sb.append("Target: ").append(sa.getTriggeringObject("Target")); sb.append("Target: ").append(sa.getTriggeringObject(AbilityKey.Target));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -18,6 +18,7 @@
package forge.game.trigger; package forge.game.trigger;
import forge.game.GameObject; import forge.game.GameObject;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -80,16 +81,16 @@ public class TriggerBecomesTargetOnce extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("SourceSA", this.getRunParams().get("SourceSA")); sa.setTriggeringObject(AbilityKey.SourceSA, this.getRunParams().get("SourceSA"));
sa.setTriggeringObject("Source", ((SpellAbility) this.getRunParams().get("SourceSA")).getHostCard()); sa.setTriggeringObject(AbilityKey.Source, ((SpellAbility) this.getRunParams().get("SourceSA")).getHostCard());
sa.setTriggeringObject("Targets", this.getRunParams().get("Targets")); sa.setTriggeringObject(AbilityKey.Targets, this.getRunParams().get("Targets"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Source: ").append(((SpellAbility) sa.getTriggeringObject("SourceSA")).getHostCard()).append(", "); sb.append("Source: ").append(((SpellAbility) sa.getTriggeringObject(AbilityKey.SourceSA)).getHostCard()).append(", ");
sb.append("Targets: ").append(sa.getTriggeringObject("Targets")); sb.append("Targets: ").append(sa.getTriggeringObject(AbilityKey.Targets));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -51,14 +52,14 @@ public class TriggerBlockersDeclared extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Blockers", this.getRunParams().get("Blockers")); sa.setTriggeringObject(AbilityKey.Blockers, this.getRunParams().get("Blockers"));
sa.setTriggeringObject("Attackers", this.getRunParams().get("Attackers")); sa.setTriggeringObject(AbilityKey.Attackers, this.getRunParams().get("Attackers"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Blockers: ").append(sa.getTriggeringObject("Blockers")); sb.append("Blockers: ").append(sa.getTriggeringObject(AbilityKey.Blockers));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -88,14 +89,14 @@ public class TriggerBlocks extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Blocker", this.getRunParams().get("Blocker")); sa.setTriggeringObject(AbilityKey.Blocker, this.getRunParams().get("Blocker"));
sa.setTriggeringObject("Attackers", this.getRunParams().get("Attackers")); sa.setTriggeringObject(AbilityKey.Attackers, this.getRunParams().get("Attackers"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Blocker: ").append(sa.getTriggeringObject("Blocker")); sb.append("Blocker: ").append(sa.getTriggeringObject(AbilityKey.Blocker));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -71,14 +72,14 @@ public class TriggerChampioned extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Championed", this.getRunParams().get("Championed")); sa.setTriggeringObject(AbilityKey.Championed, this.getRunParams().get("Championed"));
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Championed: ").append(sa.getTriggeringObject("Championed")); sb.append("Championed: ").append(sa.getTriggeringObject(AbilityKey.Championed));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -70,13 +71,13 @@ public class TriggerChangesController extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Changed Controller: ").append(sa.getTriggeringObject("Card")); sb.append("Changed Controller: ").append(sa.getTriggeringObject(AbilityKey.Card));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -18,6 +18,7 @@
package forge.game.trigger; package forge.game.trigger;
import forge.game.Game; import forge.game.Game;
import forge.game.ability.AbilityKey;
import forge.game.ability.AbilityUtils; import forge.game.ability.AbilityUtils;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CardFactoryUtil; import forge.game.card.CardFactoryUtil;
@@ -217,13 +218,13 @@ public class TriggerChangesZone extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Zone Changer: ").append(sa.getTriggeringObject("Card")); sb.append("Zone Changer: ").append(sa.getTriggeringObject(AbilityKey.Card));
return sb.toString(); return sb.toString();
} }

View File

@@ -3,6 +3,7 @@ package forge.game.trigger;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import forge.game.ability.AbilityKey;
import forge.game.card.*; import forge.game.card.*;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
@@ -26,14 +27,14 @@ public class TriggerChangesZoneAll extends Trigger {
CardCollection allCards = this.filterCards(table); CardCollection allCards = this.filterCards(table);
sa.setTriggeringObject("Cards", allCards); sa.setTriggeringObject(AbilityKey.Cards, allCards);
sa.setTriggeringObject("Amount", allCards.size()); sa.setTriggeringObject(AbilityKey.Amount, allCards.size());
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Amount: ").append(sa.getTriggeringObject("Amount")); sb.append("Amount: ").append(sa.getTriggeringObject(AbilityKey.Amount));
return sb.toString(); return sb.toString();
} }

View File

@@ -19,6 +19,7 @@ package forge.game.trigger;
import java.util.Map; import java.util.Map;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CounterType; import forge.game.card.CounterType;
import forge.game.player.Player; import forge.game.player.Player;
@@ -121,19 +122,19 @@ public class TriggerCounterAdded extends Trigger {
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
if (this.getRunParams().containsKey("Card")) if (this.getRunParams().containsKey("Card"))
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
if (this.getRunParams().containsKey("Player")) if (this.getRunParams().containsKey("Player"))
sa.setTriggeringObject("Player", this.getRunParams().get("Player")); sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Added once: "); sb.append("Added once: ");
if (sa.hasTriggeringObject("Card")) if (sa.hasTriggeringObject(AbilityKey.Card))
sb.append(sa.getTriggeringObject("Card")); sb.append(sa.getTriggeringObject(AbilityKey.Card));
if (sa.hasTriggeringObject("Player")) if (sa.hasTriggeringObject(AbilityKey.Player))
sb.append(sa.getTriggeringObject("Player")); sb.append(sa.getTriggeringObject(AbilityKey.Player));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -6,6 +6,7 @@ import com.google.common.collect.Lists;
import forge.game.GameEntity; import forge.game.GameEntity;
import forge.game.GameEntityCounterTable; import forge.game.GameEntityCounterTable;
import forge.game.ability.AbilityKey;
import forge.game.card.*; import forge.game.card.*;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -33,14 +34,14 @@ public class TriggerCounterAddedAll extends Trigger {
amount += v; amount += v;
} }
sa.setTriggeringObject("Objects", Lists.newArrayList(all.keySet())); sa.setTriggeringObject(AbilityKey.Objects, Lists.newArrayList(all.keySet()));
sa.setTriggeringObject("Amount", amount); sa.setTriggeringObject(AbilityKey.Amount, amount);
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Amount: ").append(sa.getTriggeringObject("Amount")); sb.append("Amount: ").append(sa.getTriggeringObject(AbilityKey.Amount));
return sb.toString(); return sb.toString();
} }

View File

@@ -19,6 +19,7 @@ package forge.game.trigger;
import java.util.Map; import java.util.Map;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CounterType; import forge.game.card.CounterType;
import forge.game.player.Player; import forge.game.player.Player;
@@ -106,22 +107,22 @@ public class TriggerCounterAddedOnce extends Trigger {
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
if (this.getRunParams().containsKey("Card")) if (this.getRunParams().containsKey("Card"))
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
if (this.getRunParams().containsKey("Player")) if (this.getRunParams().containsKey("Player"))
sa.setTriggeringObject("Player", this.getRunParams().get("Player")); sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
sa.setTriggeringObject("Amount", this.getRunParams().get("CounterAmount")); sa.setTriggeringObject(AbilityKey.Amount, this.getRunParams().get("CounterAmount"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Added once: "); sb.append("Added once: ");
if (sa.hasTriggeringObject("Card")) if (sa.hasTriggeringObject(AbilityKey.Card))
sb.append(sa.getTriggeringObject("Card")); sb.append(sa.getTriggeringObject(AbilityKey.Card));
if (sa.hasTriggeringObject("Player")) if (sa.hasTriggeringObject(AbilityKey.Player))
sb.append(sa.getTriggeringObject("Player")); sb.append(sa.getTriggeringObject(AbilityKey.Player));
sb.append(" Amount: ").append(sa.getTriggeringObject("Amount")); sb.append(" Amount: ").append(sa.getTriggeringObject(AbilityKey.Amount));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CounterType; import forge.game.card.CounterType;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -82,13 +83,13 @@ public class TriggerCounterRemoved extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Removed from: ").append(sa.getTriggeringObject("Card")); sb.append("Removed from: ").append(sa.getTriggeringObject(AbilityKey.Card));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CounterType; import forge.game.card.CounterType;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -73,15 +74,15 @@ public class TriggerCounterRemovedOnce extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
sa.setTriggeringObject("Amount", this.getRunParams().get("CounterAmount")); sa.setTriggeringObject(AbilityKey.Amount, this.getRunParams().get("CounterAmount"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Removed from: ").append(sa.getTriggeringObject("Card")); sb.append("Removed from: ").append(sa.getTriggeringObject(AbilityKey.Card));
sb.append(" Amount: ").append(sa.getTriggeringObject("Amount")); sb.append(" Amount: ").append(sa.getTriggeringObject(AbilityKey.Amount));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -92,17 +93,17 @@ public class TriggerCountered extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
sa.setTriggeringObject("Cause", this.getRunParams().get("Cause")); sa.setTriggeringObject(AbilityKey.Cause, this.getRunParams().get("Cause"));
sa.setTriggeringObject("Player", this.getRunParams().get("Player")); sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
sa.setTriggeringObject("CounteredSA", this.getRunParams().get("CounteredSA")); sa.setTriggeringObject(AbilityKey.CounteredSA, this.getRunParams().get("CounteredSA"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Countered: ").append(sa.getTriggeringObject("Card")).append(", "); sb.append("Countered: ").append(sa.getTriggeringObject(AbilityKey.Card)).append(", ");
sb.append("Cause: ").append(sa.getTriggeringObject("Cause")); sb.append("Cause: ").append(sa.getTriggeringObject(AbilityKey.Cause));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -1,5 +1,6 @@
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CardCollection; import forge.game.card.CardCollection;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -38,16 +39,16 @@ public class TriggerCrewed extends Trigger {
@Override @Override
public void setTriggeringObjects(SpellAbility sa) { public void setTriggeringObjects(SpellAbility sa) {
sa.setTriggeringObject("Vehicle", this.getRunParams().get("Vehicle")); sa.setTriggeringObject(AbilityKey.Vehicle, this.getRunParams().get("Vehicle"));
sa.setTriggeringObject("Crew", this.getRunParams().get("Crew")); sa.setTriggeringObject(AbilityKey.Crew, this.getRunParams().get("Crew"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Vehicle: ").append(sa.getTriggeringObject("Vehicle")); sb.append("Vehicle: ").append(sa.getTriggeringObject(AbilityKey.Vehicle));
sb.append(" "); sb.append(" ");
sb.append("Crew: ").append(sa.getTriggeringObject("Crew")); sb.append("Crew: ").append(sa.getTriggeringObject(AbilityKey.Crew));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -49,13 +50,13 @@ public class TriggerCycled extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Cycled: ").append(sa.getTriggeringObject("Card")); sb.append("Cycled: ").append(sa.getTriggeringObject(AbilityKey.Card));
return sb.toString(); return sb.toString();
} }

View File

@@ -18,6 +18,7 @@
package forge.game.trigger; package forge.game.trigger;
import forge.game.GameEntity; import forge.game.GameEntity;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.util.Expressions; import forge.util.Expressions;
@@ -105,17 +106,17 @@ public class TriggerDamageDealtOnce extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Source", this.getRunParams().get("DamageSource")); sa.setTriggeringObject(AbilityKey.Source, this.getRunParams().get("DamageSource"));
sa.setTriggeringObject("Targets", this.getRunParams().get("DamageTargets")); sa.setTriggeringObject(AbilityKey.Targets, this.getRunParams().get("DamageTargets"));
sa.setTriggeringObject("DamageAmount", this.getRunParams().get("DamageAmount")); sa.setTriggeringObject(AbilityKey.DamageAmount, this.getRunParams().get("DamageAmount"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Damage Source: ").append(sa.getTriggeringObject("Source")).append(", "); sb.append("Damage Source: ").append(sa.getTriggeringObject(AbilityKey.Source)).append(", ");
sb.append("Damaged: ").append(sa.getTriggeringObject("Targets")).append(", "); sb.append("Damaged: ").append(sa.getTriggeringObject(AbilityKey.Targets)).append(", ");
sb.append("Amount: ").append(sa.getTriggeringObject("DamageAmount")); sb.append("Amount: ").append(sa.getTriggeringObject(AbilityKey.DamageAmount));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CardUtil; import forge.game.card.CardUtil;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -118,19 +119,19 @@ public class TriggerDamageDone extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Source", CardUtil.getLKICopy((Card)this.getRunParams().get("DamageSource"))); sa.setTriggeringObject(AbilityKey.Source, CardUtil.getLKICopy((Card)this.getRunParams().get("DamageSource")));
sa.setTriggeringObject("Target", this.getRunParams().get("DamageTarget")); sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("DamageTarget"));
sa.setTriggeringObject("DamageAmount", this.getRunParams().get("DamageAmount")); sa.setTriggeringObject(AbilityKey.DamageAmount, this.getRunParams().get("DamageAmount"));
// This parameter is here because LKI information related to combat doesn't work properly // This parameter is here because LKI information related to combat doesn't work properly
sa.setTriggeringObject("DefendingPlayer", this.getRunParams().get("DefendingPlayer")); sa.setTriggeringObject(AbilityKey.DefendingPlayer, this.getRunParams().get("DefendingPlayer"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Damage Source: ").append(sa.getTriggeringObject("Source")).append(", "); sb.append("Damage Source: ").append(sa.getTriggeringObject(AbilityKey.Source)).append(", ");
sb.append("Damaged: ").append(sa.getTriggeringObject("Target")).append(", "); sb.append("Damaged: ").append(sa.getTriggeringObject(AbilityKey.Target)).append(", ");
sb.append("Amount: ").append(sa.getTriggeringObject("DamageAmount")); sb.append("Amount: ").append(sa.getTriggeringObject(AbilityKey.DamageAmount));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -4,6 +4,7 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
import forge.game.GameEntity; import forge.game.GameEntity;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -58,12 +59,12 @@ public class TriggerDamageDoneOnce extends Trigger {
@Override @Override
public void setTriggeringObjects(SpellAbility sa) { public void setTriggeringObjects(SpellAbility sa) {
if (this.getRunParams().containsKey("DamageTarget")) { if (this.getRunParams().containsKey("DamageTarget")) {
sa.setTriggeringObject("Target", this.getRunParams().get("DamageTarget")); sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("DamageTarget"));
} }
if (this.getRunParams().containsKey("DamageSources")) { if (this.getRunParams().containsKey("DamageSources")) {
sa.setTriggeringObject("Sources", this.getRunParams().get("DamageSources")); sa.setTriggeringObject(AbilityKey.Sources, this.getRunParams().get("DamageSources"));
} }
sa.setTriggeringObject("DamageAmount", this.getRunParams().get("DamageAmount")); sa.setTriggeringObject(AbilityKey.DamageAmount, this.getRunParams().get("DamageAmount"));
} }
@@ -71,10 +72,10 @@ public class TriggerDamageDoneOnce extends Trigger {
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
if (sa.getTriggeringObject("Target") != null) { if (sa.getTriggeringObject(AbilityKey.Target) != null) {
sb.append("Damaged: ").append(sa.getTriggeringObject("Target")).append(", "); sb.append("Damaged: ").append(sa.getTriggeringObject(AbilityKey.Target)).append(", ");
} }
sb.append("Amount: ").append(sa.getTriggeringObject("DamageAmount")); sb.append("Amount: ").append(sa.getTriggeringObject(AbilityKey.DamageAmount));
return sb.toString(); return sb.toString();
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CardUtil; import forge.game.card.CardUtil;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -102,17 +103,17 @@ public class TriggerDamagePrevented extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Source", CardUtil.getLKICopy((Card)this.getRunParams().get("DamageSource"))); sa.setTriggeringObject(AbilityKey.Source, CardUtil.getLKICopy((Card)this.getRunParams().get("DamageSource")));
sa.setTriggeringObject("Target", this.getRunParams().get("DamageTarget")); sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("DamageTarget"));
sa.setTriggeringObject("DamageAmount", this.getRunParams().get("DamageAmount")); sa.setTriggeringObject(AbilityKey.DamageAmount, this.getRunParams().get("DamageAmount"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Damage Source: ").append(sa.getTriggeringObject("Source")).append(", "); sb.append("Damage Source: ").append(sa.getTriggeringObject(AbilityKey.Source)).append(", ");
sb.append("Damage Target: ").append(sa.getTriggeringObject("Target")).append(", "); sb.append("Damage Target: ").append(sa.getTriggeringObject(AbilityKey.Target)).append(", ");
sb.append("Amount: ").append(sa.getTriggeringObject("DamageAmount")); sb.append("Amount: ").append(sa.getTriggeringObject(AbilityKey.DamageAmount));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.util.Expressions; import forge.util.Expressions;
@@ -93,15 +94,15 @@ public class TriggerDamagePreventedOnce extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Target", this.getRunParams().get("DamageTarget")); sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("DamageTarget"));
sa.setTriggeringObject("DamageAmount", this.getRunParams().get("DamageAmount")); sa.setTriggeringObject(AbilityKey.DamageAmount, this.getRunParams().get("DamageAmount"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Damage Target: ").append(sa.getTriggeringObject("Target")).append(", "); sb.append("Damage Target: ").append(sa.getTriggeringObject(AbilityKey.Target)).append(", ");
sb.append("Amount: ").append(sa.getTriggeringObject("DamageAmount")); sb.append("Amount: ").append(sa.getTriggeringObject(AbilityKey.DamageAmount));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -19,6 +19,7 @@ package forge.game.trigger;
import java.util.Map; import java.util.Map;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -67,15 +68,15 @@ public class TriggerDestroyed extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
sa.setTriggeringObject("Causer", this.getRunParams().get("Causer")); sa.setTriggeringObject(AbilityKey.Causer, this.getRunParams().get("Causer"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Destroyed: ").append(sa.getTriggeringObject("Card")).append(", "); sb.append("Destroyed: ").append(sa.getTriggeringObject(AbilityKey.Card)).append(", ");
sb.append("Destroyer: ").append(sa.getTriggeringObject("Causer")); sb.append("Destroyer: ").append(sa.getTriggeringObject(AbilityKey.Causer));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -60,13 +61,13 @@ public class TriggerDevoured extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Devoured", this.getRunParams().get("Devoured")); sa.setTriggeringObject(AbilityKey.Devoured, this.getRunParams().get("Devoured"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Devoured: ").append(sa.getTriggeringObject("Devoured")); sb.append("Devoured: ").append(sa.getTriggeringObject(AbilityKey.Devoured));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -85,15 +86,15 @@ public class TriggerDiscarded extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
sa.setTriggeringObject("Cause", this.getRunParams().get("Cause")); sa.setTriggeringObject(AbilityKey.Cause, this.getRunParams().get("Cause"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Discarded: ").append(sa.getTriggeringObject("Card")).append(", "); sb.append("Discarded: ").append(sa.getTriggeringObject(AbilityKey.Card)).append(", ");
sb.append("Cause: ").append(sa.getTriggeringObject("Cause")); sb.append("Cause: ").append(sa.getTriggeringObject(AbilityKey.Cause));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -19,6 +19,7 @@ package forge.game.trigger;
import forge.game.Game; import forge.game.Game;
import forge.game.GameStage; import forge.game.GameStage;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -80,14 +81,14 @@ public class TriggerDrawn extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, getRunParams().get("Card"));
sa.setTriggeringObject("Player", getRunParams().get("Player")); sa.setTriggeringObject(AbilityKey.Player, getRunParams().get("Player"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Player: ").append(sa.getTriggeringObject("Player")); sb.append("Player: ").append(sa.getTriggeringObject(AbilityKey.Player));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -19,6 +19,7 @@ package forge.game.trigger;
import java.util.Map; import java.util.Map;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -61,13 +62,13 @@ public class TriggerEvolved extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, getRunParams().get("Card"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Evolved: ").append(sa.getTriggeringObject("Card")); sb.append("Evolved: ").append(sa.getTriggeringObject(AbilityKey.Card));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -1,5 +1,6 @@
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -32,14 +33,14 @@ public class TriggerExerted extends Trigger {
@Override @Override
public void setTriggeringObjects(SpellAbility sa) { public void setTriggeringObjects(SpellAbility sa) {
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
sa.setTriggeringObject("Player", this.getRunParams().get("Player")); sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Exerted: ").append(sa.getTriggeringObject("Card")); sb.append("Exerted: ").append(sa.getTriggeringObject(AbilityKey.Card));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -96,13 +97,13 @@ public class TriggerExiled extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Exiled: ").append(sa.getTriggeringObject("Card")); sb.append("Exiled: ").append(sa.getTriggeringObject(AbilityKey.Card));
return sb.toString(); return sb.toString();
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -71,15 +72,15 @@ public class TriggerExploited extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Exploited", this.getRunParams().get("Exploited")); sa.setTriggeringObject(AbilityKey.Exploited, this.getRunParams().get("Exploited"));
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Exploited: ").append(sa.getTriggeringObject("Exploited")).append(", "); sb.append("Exploited: ").append(sa.getTriggeringObject(AbilityKey.Exploited)).append(", ");
sb.append("Exploiter: ").append(sa.getTriggeringObject("Card")); sb.append("Exploiter: ").append(sa.getTriggeringObject(AbilityKey.Card));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -61,14 +62,14 @@ public class TriggerExplores extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Explorer", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Explorer, this.getRunParams().get("Card"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Explorer: ").append(sa.getTriggeringObject("Explorer")); sb.append("Explorer: ").append(sa.getTriggeringObject(AbilityKey.Explorer));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -62,13 +63,13 @@ public class TriggerFight extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Fighter", this.getRunParams().get("Fighter")); sa.setTriggeringObject(AbilityKey.Fighter, this.getRunParams().get("Fighter"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Fighter: ").append(sa.getTriggeringObject("Fighter")); sb.append("Fighter: ").append(sa.getTriggeringObject(AbilityKey.Fighter));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -69,13 +70,13 @@ public class TriggerFlippedCoin extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Player", this.getRunParams().get("Player")); sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Player: ").append(sa.getTriggeringObject("Player")); sb.append("Player: ").append(sa.getTriggeringObject(AbilityKey.Player));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -322,13 +322,6 @@ public class TriggerHandler {
} }
public final void runTrigger(final TriggerType mode, final Map<AbilityKey, Object> runParams, boolean holdTrigger) { public final void runTrigger(final TriggerType mode, final Map<AbilityKey, 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.
@Deprecated
public final void runTriggerOld(final TriggerType mode, final Map<String, Object> runParams, boolean holdTrigger) {
if (suppressedModes.contains(mode)) { if (suppressedModes.contains(mode)) {
return; return;
} }
@@ -342,10 +335,10 @@ public class TriggerHandler {
} }
} }
private void runStateTrigger(Map<String, Object> runParams) { private void runStateTrigger(final Map<AbilityKey, Object> runParams) {
for (final Trigger t: activeTriggers) { for (final Trigger t: activeTriggers) {
if (canRunTrigger(t, TriggerType.Always, runParams)) { if (canRunTrigger(t, TriggerType.Always, runParams)) {
runSingleTrigger(t, runParams); runSingleTrigger(t, toStringMap(runParams));
} }
} }
} }
@@ -367,7 +360,7 @@ public class TriggerHandler {
private boolean runWaitingTrigger(final TriggerWaiting wt) { private boolean runWaitingTrigger(final TriggerWaiting wt) {
final TriggerType mode = wt.getMode(); final TriggerType mode = wt.getMode();
final Map<String, Object> runParams = wt.getParams(); final Map<AbilityKey, Object> runParams = wt.getParams();
final Player playerAP = game.getPhaseHandler().getPlayerTurn(); final Player playerAP = game.getPhaseHandler().getPlayerTurn();
if (playerAP == null) { if (playerAP == null) {
@@ -383,19 +376,19 @@ public class TriggerHandler {
// Static triggers // Static triggers
for (final Trigger t : Lists.newArrayList(activeTriggers)) { for (final Trigger t : Lists.newArrayList(activeTriggers)) {
if (t.isStatic() && canRunTrigger(t, mode, runParams)) { if (t.isStatic() && canRunTrigger(t, mode, runParams)) {
runSingleTrigger(t, runParams); runSingleTrigger(t, toStringMap(runParams));
checkStatics = true; checkStatics = true;
} }
} }
if (runParams.containsKey("Destination")) { if (runParams.containsKey(AbilityKey.Destination)) {
// Check static abilities when a card enters the battlefield // Check static abilities when a card enters the battlefield
if (runParams.get("Destination") instanceof String) { if (runParams.get(AbilityKey.Destination) instanceof String) {
final String type = (String) runParams.get("Destination"); final String type = (String) runParams.get(AbilityKey.Destination);
checkStatics |= type.equals("Battlefield"); checkStatics |= type.equals("Battlefield");
} else { } else {
final ZoneType zone = (ZoneType) runParams.get("Destination"); final ZoneType zone = (ZoneType) runParams.get(AbilityKey.Destination);
checkStatics |= zone.equals(ZoneType.Battlefield); checkStatics |= zone.equals(ZoneType.Battlefield);
} }
} }
@@ -426,7 +419,8 @@ public class TriggerHandler {
private boolean runNonStaticTriggersForPlayer(final Player player, final TriggerWaiting wt, final List<Trigger> delayedTriggersWorkingCopy ) { private boolean runNonStaticTriggersForPlayer(final Player player, final TriggerWaiting wt, final List<Trigger> delayedTriggersWorkingCopy ) {
final TriggerType mode = wt.getMode(); final TriggerType mode = wt.getMode();
final Map<String, Object> runParams = wt.getParams(); final Map<AbilityKey, Object> runParams = wt.getParams();
final Map<String, Object> stringRunParams = toStringMap(runParams);
final List<Trigger> triggers = wt.getTriggers() != null ? wt.getTriggers() : activeTriggers; final List<Trigger> triggers = wt.getTriggers() != null ? wt.getTriggers() : activeTriggers;
Card card = null; Card card = null;
@@ -434,18 +428,20 @@ public class TriggerHandler {
for (final Trigger t : triggers) { for (final Trigger t : triggers) {
if (!t.isStatic() && t.getHostCard().getController().equals(player) && canRunTrigger(t, mode, runParams)) { if (!t.isStatic() && t.getHostCard().getController().equals(player) && canRunTrigger(t, mode, runParams)) {
if (runParams.containsKey("Card") && runParams.get("Card") instanceof Card) { if (runParams.containsKey(AbilityKey.Card) && runParams.get(AbilityKey.Card) instanceof Card) {
card = (Card) runParams.get("Card"); card = (Card) runParams.get(AbilityKey.Card);
if (runParams.containsKey("Destination") && !ZoneType.Battlefield.name().equals(runParams.get("Destination"))) { if (runParams.containsKey(AbilityKey.Destination)
&& !ZoneType.Battlefield.name().equals(runParams.get(AbilityKey.Destination))) {
card = CardUtil.getLKICopy(card); card = CardUtil.getLKICopy(card);
if (card.isCloned() || !t.isIntrinsic()) { if (card.isCloned() || !t.isIntrinsic()) {
runParams.put("Card", card); runParams.put(AbilityKey.Card, card);
} }
} }
} }
if (t.getMapParams().containsKey("OncePerEffect")) { if (t.getMapParams().containsKey("OncePerEffect")) {
SpellAbilityStackInstance si = (SpellAbilityStackInstance) runParams.get("SpellAbilityStackInstance"); SpellAbilityStackInstance si =
(SpellAbilityStackInstance) runParams.get(AbilityKey.SpellAbilityStackInstance);
if (si != null) { if (si != null) {
si.addOncePerEffectTrigger(t); si.addOncePerEffectTrigger(t);
} }
@@ -454,7 +450,7 @@ public class TriggerHandler {
int x = 1 + handlePanharmonicon(t, runParams, player); int x = 1 + handlePanharmonicon(t, runParams, player);
for (int i = 0; i < x; ++i) { for (int i = 0; i < x; ++i) {
runSingleTrigger(t, runParams); runSingleTrigger(t, stringRunParams);
} }
checkStatics = true; checkStatics = true;
} }
@@ -463,7 +459,7 @@ public class TriggerHandler {
for (final Trigger deltrig : delayedTriggersWorkingCopy) { for (final Trigger deltrig : delayedTriggersWorkingCopy) {
if (deltrig.getHostCard().getController().equals(player)) { if (deltrig.getHostCard().getController().equals(player)) {
if (isTriggerActive(deltrig) && canRunTrigger(deltrig, mode, runParams)) { if (isTriggerActive(deltrig) && canRunTrigger(deltrig, mode, runParams)) {
runSingleTrigger(deltrig, runParams); runSingleTrigger(deltrig, stringRunParams);
delayedTriggers.remove(deltrig); delayedTriggers.remove(deltrig);
} }
} }
@@ -505,7 +501,7 @@ public class TriggerHandler {
return true; return true;
} }
private boolean canRunTrigger(final Trigger regtrig, final TriggerType mode, final Map<String, Object> runParams) { private boolean canRunTrigger(final Trigger regtrig, final TriggerType mode, final Map<AbilityKey, Object> runParams) {
if (regtrig.getMode() != mode) { if (regtrig.getMode() != mode) {
return false; // Not the right mode. return false; // Not the right mode.
} }
@@ -518,7 +514,7 @@ public class TriggerHandler {
return false; // Conditions aren't right. return false; // Conditions aren't right.
} }
if (!regtrig.performTest(runParams)) { if (!regtrig.performTest(toStringMap(runParams))) {
return false; // Test failed. return false; // Test failed.
} }
if (regtrig.isSuppressed()) { if (regtrig.isSuppressed()) {
@@ -535,10 +531,10 @@ public class TriggerHandler {
// Torpor Orb check // Torpor Orb check
if (game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noCreatureETBTriggers) if (game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noCreatureETBTriggers)
&& !regtrig.isStatic() && mode.equals(TriggerType.ChangesZone)) { && !regtrig.isStatic() && mode.equals(TriggerType.ChangesZone)) {
if (runParams.get("Destination") instanceof String) { if (runParams.get(AbilityKey.Destination) instanceof String) {
final String dest = (String) runParams.get("Destination"); final String dest = (String) runParams.get(AbilityKey.Destination);
if (dest.equals("Battlefield") && runParams.get("Card") instanceof Card) { if (dest.equals("Battlefield") && runParams.get(AbilityKey.Card) instanceof Card) {
final Card card = (Card) runParams.get("Card"); final Card card = (Card) runParams.get(AbilityKey.Card);
if (card.isCreature()) { if (card.isCreature()) {
return false; return false;
} }
@@ -698,7 +694,7 @@ public class TriggerHandler {
} }
} }
private int handlePanharmonicon(final Trigger t, final Map<String, Object> runParams, final Player p) { private int handlePanharmonicon(final Trigger t, final Map<AbilityKey, Object> runParams, final Player p) {
Card host = t.getHostCard(); Card host = t.getHostCard();
// not a changesZone trigger or changesZoneAll // not a changesZone trigger or changesZoneAll
@@ -727,10 +723,10 @@ public class TriggerHandler {
final String kw = ki.getOriginal(); final String kw = ki.getOriginal();
if (kw.startsWith("Panharmonicon")) { if (kw.startsWith("Panharmonicon")) {
// Enter the Battlefield Trigger // Enter the Battlefield Trigger
if (runParams.get("Destination") instanceof String) { if (runParams.get(AbilityKey.Destination) instanceof String) {
final String dest = (String) runParams.get("Destination"); final String dest = (String) runParams.get(AbilityKey.Destination);
if ("Battlefield".equals(dest) && runParams.get("Card") instanceof Card) { if ("Battlefield".equals(dest) && runParams.get(AbilityKey.Card) instanceof Card) {
final Card card = (Card) runParams.get("Card"); final Card card = (Card) runParams.get(AbilityKey.Card);
final String valid = kw.split(":")[1]; final String valid = kw.split(":")[1];
if (card.isValid(valid.split(","), p, ck, null)) { if (card.isValid(valid.split(","), p, ck, null)) {
n++; n++;
@@ -739,12 +735,12 @@ public class TriggerHandler {
} }
} else if (kw.startsWith("Dieharmonicon")) { } else if (kw.startsWith("Dieharmonicon")) {
// 700.4. The term dies means "is put into a graveyard from the battlefield." // 700.4. The term dies means "is put into a graveyard from the battlefield."
if (runParams.get("Origin") instanceof String) { if (runParams.get(AbilityKey.Destination) instanceof String) {
final String origin = (String) runParams.get("Origin"); final String origin = (String) runParams.get(AbilityKey.Destination);
if ("Battlefield".equals(origin) && runParams.get("Destination") instanceof String) { if ("Battlefield".equals(origin) && runParams.get(AbilityKey.Destination) instanceof String) {
final String dest = (String) runParams.get("Destination"); final String dest = (String) runParams.get(AbilityKey.Destination);
if ("Graveyard".equals(dest) && runParams.get("Card") instanceof Card) { if ("Graveyard".equals(dest) && runParams.get(AbilityKey.Card) instanceof Card) {
final Card card = (Card) runParams.get("Card"); final Card card = (Card) runParams.get(AbilityKey.Card);
final String valid = kw.split(":")[1]; final String valid = kw.split(":")[1];
if (card.isValid(valid.split(","), p, ck, null)) { if (card.isValid(valid.split(","), p, ck, null)) {
n++; n++;
@@ -756,7 +752,7 @@ public class TriggerHandler {
} }
} }
} else if (t.getMode() == TriggerType.ChangesZoneAll) { } else if (t.getMode() == TriggerType.ChangesZoneAll) {
final CardZoneTable table = (CardZoneTable) runParams.get("Cards"); final CardZoneTable table = (CardZoneTable) runParams.get(AbilityKey.Cards);
// iterate over all cards // iterate over all cards
for (final Card ck : p.getCardsIn(ZoneType.Battlefield)) { for (final Card ck : p.getCardsIn(ZoneType.Battlefield)) {
for (final KeywordInterface ki : ck.getKeywords()) { for (final KeywordInterface ki : ck.getKeywords()) {

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -52,14 +53,14 @@ public class TriggerInvestigated extends Trigger {
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Player: ").append(sa.getTriggeringObject("Player")); sb.append("Player: ").append(sa.getTriggeringObject(AbilityKey.Player));
return sb.toString(); return sb.toString();
} }
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Player", this.getRunParams().get("Player")); sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
} }
/** {@inheritDoc} */ /** {@inheritDoc} */

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -51,13 +52,13 @@ public class TriggerLandPlayed extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Land played: ").append(sa.getTriggeringObject("Card")); sb.append("Land played: ").append(sa.getTriggeringObject(AbilityKey.Card));
return sb.toString(); return sb.toString();
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -73,15 +74,15 @@ public class TriggerLifeGained extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("LifeAmount", getRunParams().get("LifeAmount")); sa.setTriggeringObject(AbilityKey.LifeAmount, getRunParams().get("LifeAmount"));
sa.setTriggeringObject("Player", getRunParams().get("Player")); sa.setTriggeringObject(AbilityKey.Player, getRunParams().get("Player"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Player: ").append(sa.getTriggeringObject("Player")).append(", "); sb.append("Player: ").append(sa.getTriggeringObject(AbilityKey.Player)).append(", ");
sb.append("Gained Amount: ").append(sa.getTriggeringObject("LifeAmount")); sb.append("Gained Amount: ").append(sa.getTriggeringObject(AbilityKey.LifeAmount));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -19,6 +19,7 @@ package forge.game.trigger;
import java.util.Map; import java.util.Map;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -70,15 +71,15 @@ public class TriggerLifeLost extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("LifeAmount", this.getRunParams().get("LifeAmount")); sa.setTriggeringObject(AbilityKey.LifeAmount, this.getRunParams().get("LifeAmount"));
sa.setTriggeringObject("Player", this.getRunParams().get("Player")); sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Player: ").append(sa.getTriggeringObject("Player")).append(", "); sb.append("Player: ").append(sa.getTriggeringObject(AbilityKey.Player)).append(", ");
sb.append("Lost Amount: ").append(sa.getTriggeringObject("LifeAmount")); sb.append("Lost Amount: ").append(sa.getTriggeringObject(AbilityKey.LifeAmount));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -1,5 +1,6 @@
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -38,13 +39,13 @@ public class TriggerLosesGame extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Player", this.getRunParams().get("Player")); sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Player: ").append(sa.getTriggeringObject("Player")); sb.append("Player: ").append(sa.getTriggeringObject(AbilityKey.Player));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -69,14 +70,14 @@ public class TriggerPayCumulativeUpkeep extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
sa.setTriggeringObject("PayingMana", this.getRunParams().get("PayingMana")); sa.setTriggeringObject(AbilityKey.PayingMana, this.getRunParams().get("PayingMana"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Mana: ").append(sa.getTriggeringObject("PayingMana")); sb.append("Mana: ").append(sa.getTriggeringObject(AbilityKey.PayingMana));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -69,7 +70,7 @@ public class TriggerPayEcho extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
} }
@Override @Override

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -60,15 +61,15 @@ public class TriggerPayLife extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("LifeAmount", getRunParams().get("LifeAmount")); sa.setTriggeringObject(AbilityKey.LifeAmount, getRunParams().get("LifeAmount"));
sa.setTriggeringObject("Player", getRunParams().get("Player")); sa.setTriggeringObject(AbilityKey.Player, getRunParams().get("Player"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Player: ").append(sa.getTriggeringObject("Player")).append(", "); sb.append("Player: ").append(sa.getTriggeringObject(AbilityKey.Player)).append(", ");
sb.append("paid Amount: ").append(sa.getTriggeringObject("LifeAmount")); sb.append("paid Amount: ").append(sa.getTriggeringObject(AbilityKey.LifeAmount));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -59,13 +60,13 @@ public class TriggerPhase extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Player", this.getRunParams().get("Player")); sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Phase: ").append(sa.getTriggeringObject("Player")); sb.append("Phase: ").append(sa.getTriggeringObject(AbilityKey.Player));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -1,5 +1,6 @@
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -27,13 +28,13 @@ public class TriggerPhaseIn extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Phased In: ").append(sa.getTriggeringObject("Card")); sb.append("Phased In: ").append(sa.getTriggeringObject(AbilityKey.Card));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -1,5 +1,6 @@
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -35,13 +36,13 @@ public class TriggerPhaseOut extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Phased Out: ").append(sa.getTriggeringObject("Card")); sb.append("Phased Out: ").append(sa.getTriggeringObject(AbilityKey.Card));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -1,6 +1,7 @@
package forge.game.trigger; package forge.game.trigger;
import forge.game.PlanarDice; import forge.game.PlanarDice;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -55,13 +56,13 @@ public class TriggerPlanarDice extends Trigger {
*/ */
@Override @Override
public void setTriggeringObjects(SpellAbility sa) { public void setTriggeringObjects(SpellAbility sa) {
sa.setTriggeringObject("Player", this.getRunParams().get("Player")); sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Roller: ").append(sa.getTriggeringObject("Player")); sb.append("Roller: ").append(sa.getTriggeringObject(AbilityKey.Player));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -1,5 +1,6 @@
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CardCollection; import forge.game.card.CardCollection;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -52,13 +53,13 @@ public class TriggerPlaneswalkedFrom extends Trigger {
*/ */
@Override @Override
public void setTriggeringObjects(final SpellAbility sa) { public void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Cards", this.getRunParams().get("Cards")); sa.setTriggeringObject(AbilityKey.Cards, this.getRunParams().get("Cards"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Planeswalked From: ").append(sa.getTriggeringObject("Cards")); sb.append("Planeswalked From: ").append(sa.getTriggeringObject(AbilityKey.Cards));
return sb.toString(); return sb.toString();
} }

View File

@@ -1,5 +1,6 @@
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -52,13 +53,13 @@ public class TriggerPlaneswalkedTo extends Trigger {
*/ */
@Override @Override
public void setTriggeringObjects(SpellAbility sa) { public void setTriggeringObjects(SpellAbility sa) {
sa.setTriggeringObject("Cards", this.getRunParams().get("Cards")); sa.setTriggeringObject(AbilityKey.Cards, this.getRunParams().get("Cards"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Planeswalked To: ").append(sa.getTriggeringObject("Cards")); sb.append("Planeswalked To: ").append(sa.getTriggeringObject(AbilityKey.Cards));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -19,6 +19,7 @@ package forge.game.trigger;
import java.util.Map; import java.util.Map;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -67,14 +68,14 @@ public class TriggerRegenerated extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
sa.setTriggeringObject("Cause", this.getRunParams().get("Cause")); sa.setTriggeringObject(AbilityKey.Cause, this.getRunParams().get("Cause"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Regenerated: ").append(sa.getTriggeringObject("Card")); sb.append("Regenerated: ").append(sa.getTriggeringObject(AbilityKey.Card));
//sb.append("Destroyer: ").append(sa.getTriggeringObject("Causer")); //sb.append("Destroyer: ").append(sa.getTriggeringObject("Causer"));
return sb.toString(); return sb.toString();
} }

View File

@@ -2,6 +2,7 @@ package forge.game.trigger;
import java.util.Map; import java.util.Map;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -31,13 +32,13 @@ public class TriggerRevealed extends Trigger {
@Override @Override
public void setTriggeringObjects(SpellAbility sa) { public void setTriggeringObjects(SpellAbility sa) {
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Revealed: ").append(sa.getTriggeringObject("Card")); sb.append("Revealed: ").append(sa.getTriggeringObject(AbilityKey.Card));
return sb.toString(); return sb.toString();
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.cost.IndividualCostPaymentInstance; import forge.game.cost.IndividualCostPaymentInstance;
import forge.game.player.Player; import forge.game.player.Player;
@@ -125,13 +126,13 @@ public class TriggerSacrificed extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Sacrificed: ").append(sa.getTriggeringObject("Card")); sb.append("Sacrificed: ").append(sa.getTriggeringObject(AbilityKey.Card));
return sb.toString(); return sb.toString();
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -61,13 +62,13 @@ public class TriggerScry extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Player", this.getRunParams().get("Player")); sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Scryer: ").append(sa.getTriggeringObject("Player")); sb.append("Scryer: ").append(sa.getTriggeringObject(AbilityKey.Player));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -19,6 +19,7 @@ package forge.game.trigger;
import java.util.List; import java.util.List;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -73,13 +74,13 @@ public class TriggerSearchedLibrary extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Player", this.getRunParams().get("Player")); sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Searcher: ").append(sa.getTriggeringObject("Player")); sb.append("Searcher: ").append(sa.getTriggeringObject(AbilityKey.Player));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -18,6 +18,7 @@
package forge.game.trigger; package forge.game.trigger;
import forge.card.CardType; import forge.card.CardType;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -76,7 +77,7 @@ public class TriggerSetInMotion extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Scheme", this.getRunParams().get("Scheme")); sa.setTriggeringObject(AbilityKey.Scheme, this.getRunParams().get("Scheme"));
} }
@Override @Override

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -73,13 +74,13 @@ public class TriggerShuffled extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Player", this.getRunParams().get("Player")); sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Shuffler: ").append(sa.getTriggeringObject("Player")); sb.append("Shuffler: ").append(sa.getTriggeringObject(AbilityKey.Player));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -26,6 +26,7 @@ import com.google.common.collect.Sets;
import forge.game.Game; import forge.game.Game;
import forge.game.GameEntity; import forge.game.GameEntity;
import forge.game.GameObject; import forge.game.GameObject;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CardCollection; import forge.game.card.CardCollection;
import forge.game.card.CardLists; import forge.game.card.CardLists;
@@ -265,23 +266,23 @@ public class TriggerSpellAbilityCast extends Trigger {
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
final SpellAbility castSA = (SpellAbility) getRunParams().get("CastSA"); final SpellAbility castSA = (SpellAbility) getRunParams().get("CastSA");
final SpellAbilityStackInstance si = sa.getHostCard().getGame().getStack().getInstanceFromSpellAbility(castSA); final SpellAbilityStackInstance si = sa.getHostCard().getGame().getStack().getInstanceFromSpellAbility(castSA);
sa.setTriggeringObject("Card", castSA.getHostCard()); sa.setTriggeringObject(AbilityKey.Card, castSA.getHostCard());
sa.setTriggeringObject("SpellAbility", castSA); sa.setTriggeringObject(AbilityKey.SpellAbility, castSA);
sa.setTriggeringObject("StackInstance", si); sa.setTriggeringObject(AbilityKey.StackInstance, si);
sa.setTriggeringObject("SpellAbilityTargetingCards", (si != null ? si.getSpellAbility(true) : castSA).getTargets().getTargetCards()); sa.setTriggeringObject(AbilityKey.SpellAbilityTargetingCards, (si != null ? si.getSpellAbility(true) : castSA).getTargets().getTargetCards());
sa.setTriggeringObject("Player", getRunParams().get("Player")); sa.setTriggeringObject(AbilityKey.Player, getRunParams().get("Player"));
sa.setTriggeringObject("Activator", getRunParams().get("Activator")); sa.setTriggeringObject(AbilityKey.Activator, getRunParams().get("Activator"));
sa.setTriggeringObject("CurrentStormCount", getRunParams().get("CurrentStormCount")); sa.setTriggeringObject(AbilityKey.CurrentStormCount, getRunParams().get("CurrentStormCount"));
sa.setTriggeringObject("CurrentCastSpells", getRunParams().get("CurrentCastSpells")); sa.setTriggeringObject(AbilityKey.CurrentCastSpells, getRunParams().get("CurrentCastSpells"));
sa.setTriggeringObject("CastSACMC", getRunParams().get("CastSACMC")); sa.setTriggeringObject(AbilityKey.CastSACMC, getRunParams().get("CastSACMC"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Card: ").append(sa.getTriggeringObject("Card")).append(", "); sb.append("Card: ").append(sa.getTriggeringObject(AbilityKey.Card)).append(", ");
sb.append("Activator: ").append(sa.getTriggeringObject("Activator")).append(", "); sb.append("Activator: ").append(sa.getTriggeringObject(AbilityKey.Activator)).append(", ");
sb.append("SpellAbility: ").append(sa.getTriggeringObject("SpellAbility")); sb.append("SpellAbility: ").append(sa.getTriggeringObject(AbilityKey.SpellAbility));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -19,6 +19,7 @@ package forge.game.trigger;
import java.util.Map; import java.util.Map;
import forge.game.Game; import forge.game.Game;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.game.spellability.SpellAbilityStackInstance; import forge.game.spellability.SpellAbilityStackInstance;
@@ -92,17 +93,17 @@ public class TriggerSpellAbilityCopy extends Trigger {
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
final SpellAbility copySA = (SpellAbility) getRunParams().get("CopySA"); final SpellAbility copySA = (SpellAbility) getRunParams().get("CopySA");
final SpellAbilityStackInstance si = sa.getHostCard().getGame().getStack().getInstanceFromSpellAbility(copySA); final SpellAbilityStackInstance si = sa.getHostCard().getGame().getStack().getInstanceFromSpellAbility(copySA);
sa.setTriggeringObject("Card", copySA.getHostCard()); sa.setTriggeringObject(AbilityKey.Card, copySA.getHostCard());
sa.setTriggeringObject("SpellAbility", copySA); sa.setTriggeringObject(AbilityKey.SpellAbility, copySA);
sa.setTriggeringObject("StackInstance", si); sa.setTriggeringObject(AbilityKey.StackInstance, si);
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Card: ").append(sa.getTriggeringObject("Card")).append(", "); sb.append("Card: ").append(sa.getTriggeringObject(AbilityKey.Card)).append(", ");
sb.append("Activator: ").append(sa.getTriggeringObject("Activator")).append(", "); sb.append("Activator: ").append(sa.getTriggeringObject(AbilityKey.Activator)).append(", ");
sb.append("SpellAbility: ").append(sa.getTriggeringObject("SpellAbility")); sb.append("SpellAbility: ").append(sa.getTriggeringObject(AbilityKey.SpellAbility));
return sb.toString(); return sb.toString();
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -48,14 +49,14 @@ public class TriggerSurveil extends Trigger {
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Player: ").append(sa.getTriggeringObject("Player")); sb.append("Player: ").append(sa.getTriggeringObject(AbilityKey.Player));
return sb.toString(); return sb.toString();
} }
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Player", this.getRunParams().get("Player")); sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
} }
/** {@inheritDoc} */ /** {@inheritDoc} */

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -77,13 +78,13 @@ public class TriggerTaps extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, getRunParams().get("Card"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Tapped: ").append(sa.getTriggeringObject("Card")); sb.append("Tapped: ").append(sa.getTriggeringObject(AbilityKey.Card));
return sb.toString(); return sb.toString();
} }

View File

@@ -18,6 +18,7 @@
package forge.game.trigger; package forge.game.trigger;
import forge.card.MagicColor; import forge.card.MagicColor;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -104,16 +105,16 @@ public class TriggerTapsForMana extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Card", this.getRunParams().get("Card")); sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
sa.setTriggeringObject("Player", this.getRunParams().get("Player")); sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
sa.setTriggeringObject("Produced", this.getRunParams().get("Produced")); sa.setTriggeringObject(AbilityKey.Produced, this.getRunParams().get("Produced"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Tapped for Mana: ").append(sa.getTriggeringObject("Card")); sb.append("Tapped for Mana: ").append(sa.getTriggeringObject(AbilityKey.Card));
sb.append("Produced: ").append(sa.getTriggeringObject("Produced")); sb.append("Produced: ").append(sa.getTriggeringObject(AbilityKey.Produced));
return sb.toString(); return sb.toString();
} }

View File

@@ -17,6 +17,7 @@
*/ */
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -58,13 +59,13 @@ public class TriggerTransformed extends Trigger {
*/ */
@Override @Override
public void setTriggeringObjects(SpellAbility sa) { public void setTriggeringObjects(SpellAbility sa) {
sa.setTriggeringObject("Transformer", this.getRunParams().get("Transformer")); sa.setTriggeringObject(AbilityKey.Transformer, this.getRunParams().get("Transformer"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Transformed: ").append(sa.getTriggeringObject("Transformer")); sb.append("Transformed: ").append(sa.getTriggeringObject(AbilityKey.Transformer));
return sb.toString(); return sb.toString();
} }

View File

@@ -1,5 +1,6 @@
package forge.game.trigger; package forge.game.trigger;
import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
@@ -20,13 +21,13 @@ public class TriggerTurnBegin extends Trigger {
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Player", this.getRunParams().get("Player")); sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
} }
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Player: ").append(sa.getTriggeringObject("Player")); sb.append("Player: ").append(sa.getTriggeringObject(AbilityKey.Player));
return sb.toString(); return sb.toString();
} }
} }

Some files were not shown because too many files have changed in this diff Show More