mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 18:58:00 +00:00
Merge branch 'master' of https://git.cardforge.org/core-developers/forge.git
This commit is contained in:
@@ -156,7 +156,7 @@ public class DamageDealAi extends DamageAiBase {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ai.getAttackedWithCreatureThisTurn()) {
|
||||
if (!ai.getCreaturesAttackedThisTurn().isEmpty()) {
|
||||
dmg = Integer.parseInt(logic.substring(logic.indexOf(".") + 1));
|
||||
}
|
||||
} else if ("WildHunt".equals(logic)) {
|
||||
|
||||
@@ -63,7 +63,7 @@ public class DestroyAi extends SpellAbilityAi {
|
||||
}
|
||||
} else if ("AtEOTIfNotAttacking".equals(sa.getParam("AILogic"))) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,7 +259,19 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView {
|
||||
return false;
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,6 +54,8 @@ import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import static forge.util.EnumMapUtil.toStringMap;
|
||||
|
||||
/**
|
||||
* Methods for common actions performed during a game.
|
||||
*
|
||||
@@ -297,7 +299,7 @@ public class GameAction {
|
||||
repParams.putAll(params);
|
||||
}
|
||||
|
||||
ReplacementResult repres = game.getReplacementHandler().run(EnumMapUtil.toStringMap(repParams));
|
||||
ReplacementResult repres = game.getReplacementHandler().run(toStringMap(repParams));
|
||||
if (repres != ReplacementResult.NotReplaced) {
|
||||
// reset failed manifested Cards back to original
|
||||
if (c.isManifested()) {
|
||||
|
||||
@@ -170,7 +170,7 @@ public abstract class GameEntity extends GameObject implements IIdentifiable {
|
||||
int restDamage = damage;
|
||||
|
||||
// first try to replace the damage
|
||||
final Map<String, Object> repParams = Maps.newHashMap();
|
||||
final Map<String, Object> repParams = Maps.newHashMap();
|
||||
repParams.put("Event", "DamageDone");
|
||||
repParams.put("Affected", this);
|
||||
repParams.put("DamageSource", source);
|
||||
|
||||
@@ -8,9 +8,11 @@ import java.util.Map;
|
||||
*/
|
||||
public enum AbilityKey {
|
||||
AbilityMana("AbilityMana"),
|
||||
Activator("Activator"),
|
||||
Affected("Affected"),
|
||||
Attach("Attach"),
|
||||
AllVotes("AllVotes"),
|
||||
Amount("Amount"),
|
||||
Attach("Attach"),
|
||||
AttachSource("AttachSource"),
|
||||
AttachTarget("AttachTarget"),
|
||||
Attacked("Attacked"),
|
||||
@@ -20,16 +22,24 @@ public enum AbilityKey {
|
||||
AttackedTarget("AttackedTarget"),
|
||||
Blocker("Blocker"),
|
||||
Blockers("Blockers"),
|
||||
CastSA("CastSA"),
|
||||
CastSACMC("CastSACMC"),
|
||||
Card("Card"),
|
||||
Cards("Cards"),
|
||||
CardLKI("CardLKI"),
|
||||
Cause("Cause"),
|
||||
Causer("Causer"),
|
||||
Championed("Championed"),
|
||||
CopySA("CopySA"),
|
||||
Cost("Cost"),
|
||||
CostStack("CostStack"),
|
||||
CounterAmount("CounterAmount"),
|
||||
CounteredSA("CounteredSA"),
|
||||
CounterType("CounterType"),
|
||||
Crew("Crew"),
|
||||
CumulativeUpkeepPaid("CumulativeUpkeepPaid"),
|
||||
CurrentCastSpells("CurrentCastSpells"),
|
||||
CurrentStormCount("CurrentStormCount"),
|
||||
DamageAmount("DamageAmount"),
|
||||
DamageSource("DamageSource"),
|
||||
DamageSources("DamageSources"),
|
||||
@@ -42,30 +52,47 @@ public enum AbilityKey {
|
||||
Devoured("Devoured"),
|
||||
EchoPaid("EchoPaid"),
|
||||
Exploited("Exploited"),
|
||||
Explorer("Explorer"),
|
||||
Event("Event"),
|
||||
Fighter("Fighter"),
|
||||
FirstTime("FirstTime"),
|
||||
Fizzle("Fizzle"),
|
||||
IsCombatDamage("IsCombatDamage"),
|
||||
PayingMana("PayingMana"),
|
||||
Player("Player"),
|
||||
IndividualCostPaymentInstance("IndividualCostPaymentInstance"),
|
||||
IsMadness("IsMadness"),
|
||||
LifeAmount("LifeAmount"),
|
||||
MonstrosityAmount("MonstrosityAmount"),
|
||||
NewCounterAmount("NewCounterAmount"),
|
||||
Num("Num"), // TODO confirm that this and NumThisTurn can be merged
|
||||
NumBlockers("NumBlockers"),
|
||||
NumThisTurn("NumThisTurn"),
|
||||
Number("Number"),
|
||||
Object("Object"),
|
||||
Objects("Objects"),
|
||||
OtherAttackers("OtherAttackers"),
|
||||
OtherVoters("OtherVoters"),
|
||||
Origin("Origin"),
|
||||
OriginalController("OriginalController"),
|
||||
OriginalDefender("OriginalDefender"),
|
||||
PayingMana("PayingMana"),
|
||||
Phase("Phase"),
|
||||
Player("Player"),
|
||||
Produced("Produced"),
|
||||
Result("Result"),
|
||||
Scheme("Scheme"),
|
||||
Source("Source"),
|
||||
Sources("Sources"),
|
||||
SourceSA("SourceSA"),
|
||||
SpellAbility("SpellAbility"),
|
||||
SpellAbilityStackInstance("SpellAbilityStackInstance"),
|
||||
SpellAbilityTargetingCards("SpellAbilityTargetingCards"),
|
||||
StackInstance("StackInstance"),
|
||||
StackSa("StackSa"),
|
||||
StackSi("StackSi"),
|
||||
Target("Target"),
|
||||
Targets("Targets"),
|
||||
Transformer("Transformer"),
|
||||
Vehicle("Vehicle"),
|
||||
Won("Won");
|
||||
|
||||
|
||||
@@ -80,10 +107,204 @@ public enum AbilityKey {
|
||||
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() {
|
||||
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) {
|
||||
final Map<AbilityKey, Object> runParams = newMap();
|
||||
|
||||
|
||||
@@ -139,13 +139,15 @@ public class AbilityUtils {
|
||||
final SpellAbility root = sa.getRootAbility();
|
||||
if (defined.contains("LKICopy")) { //Triggered*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) {
|
||||
c = (Card) crd;
|
||||
}
|
||||
}
|
||||
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) {
|
||||
c = game.getCardState((Card) crd);
|
||||
} else if (crd instanceof Iterable) {
|
||||
@@ -462,12 +464,9 @@ public class AbilityUtils {
|
||||
players.remove(game.getPhaseHandler().getPlayerTurn());
|
||||
val = CardFactoryUtil.playerXCount(players, calcX[1], card);
|
||||
}
|
||||
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)
|
||||
// TODO: This doesn't work in situations when the controller of the card is different from the spell caster
|
||||
// (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());
|
||||
else if (hType.startsWith("PropertyYou") && ability instanceof SpellAbility) {
|
||||
// Hollow One
|
||||
players.add(((SpellAbility) ability).getActivatingPlayer());
|
||||
val = CardFactoryUtil.playerXCount(players, calcX[1], card);
|
||||
}
|
||||
else if (hType.startsWith("Property") && ability instanceof SpellAbility) {
|
||||
@@ -641,12 +640,12 @@ public class AbilityUtils {
|
||||
}
|
||||
if (calcX[0].startsWith("TriggeredPlayer") || calcX[0].startsWith("TriggeredTarget")) {
|
||||
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;
|
||||
}
|
||||
if (calcX[0].equals("TriggeredSpellAbility")) {
|
||||
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);
|
||||
}
|
||||
// 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")) {
|
||||
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")) {
|
||||
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")) {
|
||||
// TriggerCount is similar to a regular Count, but just
|
||||
@@ -707,7 +706,7 @@ public class AbilityUtils {
|
||||
final SpellAbility root = sa.getRootAbility();
|
||||
final String[] l = calcX[1].split("/");
|
||||
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;
|
||||
}
|
||||
@@ -777,19 +776,19 @@ public class AbilityUtils {
|
||||
final Object o;
|
||||
if (type.startsWith("Triggered")) {
|
||||
if (type.contains("Card")) {
|
||||
o = sa.getTriggeringObject("Card");
|
||||
o = sa.getTriggeringObject(AbilityKey.Card);
|
||||
}
|
||||
else if (type.contains("Object")) {
|
||||
o = sa.getTriggeringObject("Object");
|
||||
o = sa.getTriggeringObject(AbilityKey.Object);
|
||||
}
|
||||
else if (type.contains("Attacker")) {
|
||||
o = sa.getTriggeringObject("Attacker");
|
||||
o = sa.getTriggeringObject(AbilityKey.Attacker);
|
||||
}
|
||||
else if (type.contains("Blocker")) {
|
||||
o = sa.getTriggeringObject("Blocker");
|
||||
o = sa.getTriggeringObject(AbilityKey.Blocker);
|
||||
}
|
||||
else {
|
||||
o = sa.getTriggeringObject("Card");
|
||||
o = sa.getTriggeringObject(AbilityKey.Card);
|
||||
}
|
||||
|
||||
if (!(o instanceof Card)) {
|
||||
@@ -1004,7 +1003,7 @@ public class AbilityUtils {
|
||||
if (defParsed.endsWith("Controller")) {
|
||||
String triggeringType = defParsed.substring(9);
|
||||
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) {
|
||||
o = ((Card) c).getController();
|
||||
}
|
||||
@@ -1015,7 +1014,7 @@ public class AbilityUtils {
|
||||
else if (defParsed.endsWith("Opponent")) {
|
||||
String triggeringType = defParsed.substring(9);
|
||||
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) {
|
||||
o = ((Card) c).getController().getOpponents();
|
||||
}
|
||||
@@ -1026,14 +1025,14 @@ public class AbilityUtils {
|
||||
else if (defParsed.endsWith("Owner")) {
|
||||
String triggeringType = defParsed.substring(9);
|
||||
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) {
|
||||
o = ((Card) c).getOwner();
|
||||
}
|
||||
}
|
||||
else {
|
||||
final String triggeringType = defParsed.substring(9);
|
||||
o = root.getTriggeringObject(triggeringType);
|
||||
o = root.getTriggeringObject(AbilityKey.fromString(triggeringType));
|
||||
}
|
||||
if (o != null) {
|
||||
if (o instanceof Player) {
|
||||
@@ -1252,13 +1251,13 @@ public class AbilityUtils {
|
||||
final SpellAbility root = sa.getRootAbility();
|
||||
|
||||
final String triggeringType = defined.substring(9);
|
||||
final Object o = root.getTriggeringObject(triggeringType);
|
||||
final Object o = root.getTriggeringObject(AbilityKey.fromString(triggeringType));
|
||||
if (o instanceof SpellAbility) {
|
||||
s = (SpellAbility) o;
|
||||
// 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.
|
||||
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 (tgtList != null && tgtList.size() > 0) {
|
||||
TargetChoices tc = new TargetChoices();
|
||||
@@ -1390,7 +1389,7 @@ public class AbilityUtils {
|
||||
cost = new Cost(source.getManaCost(), true);
|
||||
}
|
||||
else if (unlessCost.equals("TriggeredSpellManaCost")) {
|
||||
SpellAbility triggered = (SpellAbility) sa.getRootAbility().getTriggeringObject("SpellAbility");
|
||||
SpellAbility triggered = (SpellAbility) sa.getRootAbility().getTriggeringObject(AbilityKey.SpellAbility);
|
||||
Card triggeredCard = triggered.getHostCard();
|
||||
if (triggeredCard.getManaCost() == null) {
|
||||
cost = new Cost(ManaCost.ZERO, true);
|
||||
@@ -1608,7 +1607,7 @@ public class AbilityUtils {
|
||||
// Count$TriggeredPayingMana.<Color1>.<Color2>
|
||||
if (sq[0].startsWith("TriggeredPayingMana")) {
|
||||
final SpellAbility root = sa.getRootAbility();
|
||||
String mana = (String) root.getTriggeringObject("PayingMana");
|
||||
String mana = (String) root.getTriggeringObject(AbilityKey.PayingMana);
|
||||
int count = 0;
|
||||
Matcher mat = Pattern.compile(StringUtils.join(sq, "|", 1, sq.length)).matcher(mana);
|
||||
while (mat.find()) {
|
||||
@@ -1620,7 +1619,8 @@ public class AbilityUtils {
|
||||
// Count$Adamant.<Color>.<True>.<False>
|
||||
if (sq[0].startsWith("Adamant")) {
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package forge.game.ability.effects;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
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)
|
||||
for (SpellAbilityStackInstance si : game.getStack()) {
|
||||
if (si.isTrigger() && c.equals(si.getSourceCard())
|
||||
&& si.getTriggeringObject("Attacker") != null) {
|
||||
si.addTriggeringObject("OriginalDefender", originalDefender);
|
||||
&& si.getTriggeringObject(AbilityKey.Attacker) != null) {
|
||||
si.addTriggeringObject(AbilityKey.OriginalDefender, originalDefender);
|
||||
if (defender instanceof Player) {
|
||||
si.updateTriggeringObject("DefendingPlayer", defender);
|
||||
si.updateTriggeringObject(AbilityKey.DefendingPlayer, defender);
|
||||
} else if (defender instanceof Card) {
|
||||
si.updateTriggeringObject("DefendingPlayer", ((Card)defender).getController());
|
||||
si.updateTriggeringObject(AbilityKey.DefendingPlayer, ((Card)defender).getController());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -980,7 +980,10 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
}
|
||||
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 (c.isDoubleFaced()) {
|
||||
c.changeCardState("Transform", null);
|
||||
|
||||
@@ -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")) {
|
||||
SpellAbility overridingSA = sa.getAdditionalAbility("Execute");
|
||||
overridingSA.setActivatingPlayer(sa.getActivatingPlayer());
|
||||
|
||||
@@ -9,15 +9,18 @@ import forge.game.GameActionUtil;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
import forge.game.card.CardLists;
|
||||
import forge.game.mana.Mana;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.AbilityManaPart;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.TargetRestrictions;
|
||||
import forge.game.zone.ZoneType;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ManaEffect extends SpellAbilityEffect {
|
||||
@@ -181,6 +184,16 @@ public class ManaEffect extends SpellAbilityEffect {
|
||||
}
|
||||
String cs = manaType.toString();
|
||||
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()) {
|
||||
|
||||
@@ -70,6 +70,7 @@ public class RestartGameEffect extends SpellAbilityEffect {
|
||||
|
||||
player.setStartingLife(psc.getStartingLife());
|
||||
player.setPoisonCounters(0, sa.getHostCard());
|
||||
player.resetSpellCastThisGame();
|
||||
player.setLandsPlayedLastTurn(0);
|
||||
player.resetLandsPlayedThisTurn();
|
||||
player.resetInvestigatedThisTurn();
|
||||
|
||||
@@ -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;
|
||||
if (!currentState.getTriggers().isEmpty()) {
|
||||
for (final Trigger t : currentState.getTriggers()) {
|
||||
|
||||
@@ -35,6 +35,7 @@ import forge.game.GameEntity;
|
||||
import forge.game.GameEntityCounterTable;
|
||||
import forge.game.GameLogEntryType;
|
||||
import forge.game.ability.AbilityFactory;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.ApiType;
|
||||
import forge.game.card.CardPredicates.Presets;
|
||||
@@ -917,6 +918,10 @@ public class CardFactoryUtil {
|
||||
return doXMath(cc.getSurveilThisTurn(), m, c);
|
||||
}
|
||||
|
||||
if (sq[0].equals("YouCastThisGame")) {
|
||||
return doXMath(cc.getSpellsCastThisGame(), m, c);
|
||||
}
|
||||
|
||||
if (sq[0].equals("FirstSpellTotalManaSpent")) {
|
||||
try{
|
||||
return doXMath(c.getFirstSpellAbility().getTotalManaSpent(), m, c);
|
||||
@@ -948,7 +953,7 @@ public class CardFactoryUtil {
|
||||
|
||||
// TriggeringObjects
|
||||
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")) {
|
||||
@@ -1102,13 +1107,11 @@ public class CardFactoryUtil {
|
||||
final String restriction = l[0].substring(11);
|
||||
final String[] rest = restriction.split(",");
|
||||
final CardCollection list = CardLists.getValidCards(cc.getGame().getCardsInGame(), rest, cc, c, null);
|
||||
int n = 0;
|
||||
for (final byte col : MagicColor.WUBRG) {
|
||||
if (!CardLists.getColor(list, col).isEmpty()) {
|
||||
n++;
|
||||
}
|
||||
byte n = 0;
|
||||
for (final Card card : list) {
|
||||
n |= card.determineColor().getColor();
|
||||
}
|
||||
return doXMath(n, m, c);
|
||||
return doXMath(ColorSet.fromMask(n).countColors(), m, c);
|
||||
}
|
||||
|
||||
if (sq[0].contains("CreatureType")) {
|
||||
@@ -1331,6 +1334,13 @@ public class CardFactoryUtil {
|
||||
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$LastTurnCast <Valid>
|
||||
if (sq[0].contains("ThisTurnCast") || sq[0].contains("LastTurnCast")) {
|
||||
|
||||
@@ -6,6 +6,7 @@ import forge.card.MagicColor;
|
||||
import forge.game.Direction;
|
||||
import forge.game.Game;
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.card.CardPredicates.Presets;
|
||||
import forge.game.combat.AttackingBand;
|
||||
@@ -874,7 +875,7 @@ public class CardProperty {
|
||||
}
|
||||
return false;
|
||||
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)) {
|
||||
return false;
|
||||
}
|
||||
@@ -957,7 +958,7 @@ public class CardProperty {
|
||||
if (spellAbility == null) {
|
||||
System.out.println("Looking at TriggeredCard but no SA?");
|
||||
} else {
|
||||
Card triggeredCard = ((Card)spellAbility.getTriggeringObject("Card"));
|
||||
Card triggeredCard = ((Card) spellAbility.getTriggeringObject(AbilityKey.Card));
|
||||
if (triggeredCard != null && card.sharesNameWith(triggeredCard)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ import forge.card.ColorSet;
|
||||
import forge.card.MagicColor;
|
||||
import forge.game.Game;
|
||||
import forge.game.GameObject;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.ApiType;
|
||||
import forge.game.player.Player;
|
||||
@@ -56,7 +57,8 @@ public final class CardUtil {
|
||||
"Transmute", "Replicate", "Recover", "Suspend", "Aura swap",
|
||||
"Fortify", "Transfigure", "Champion", "Evoke", "Prowl", "IfReach",
|
||||
"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. */
|
||||
public static final ImmutableList<String> modifiableKeywordEndings = ImmutableList.<String>builder().add(
|
||||
"walk", "cycling", "offering").build();
|
||||
@@ -411,7 +413,7 @@ public final class CardUtil {
|
||||
}
|
||||
} else if (reflectProperty.equals("Produced")) {
|
||||
// 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) {
|
||||
final String s = MagicColor.toShortString(col);
|
||||
if (producedColors.contains(s)) {
|
||||
|
||||
@@ -546,13 +546,13 @@ public class Combat {
|
||||
Game game = c.getGame();
|
||||
for (SpellAbilityStackInstance si : game.getStack()) {
|
||||
if (si.isTrigger() && c.equals(si.getSourceCard())) {
|
||||
GameEntity origDefender = (GameEntity)si.getTriggeringObject("OriginalDefender");
|
||||
GameEntity origDefender = (GameEntity)si.getTriggeringObject(AbilityKey.OriginalDefender);
|
||||
if (origDefender != null) {
|
||||
si.updateTriggeringObject("Defender", origDefender);
|
||||
si.updateTriggeringObject(AbilityKey.Defender, origDefender);
|
||||
if (origDefender instanceof Player) {
|
||||
si.updateTriggeringObject("DefendingPlayer", origDefender);
|
||||
si.updateTriggeringObject(AbilityKey.DefendingPlayer, origDefender);
|
||||
} else if (origDefender instanceof Card) {
|
||||
si.updateTriggeringObject("DefendingPlayer", ((Card)origDefender).getController());
|
||||
si.updateTriggeringObject(AbilityKey.DefendingPlayer, ((Card)origDefender).getController());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -317,7 +317,7 @@ public class CombatUtil {
|
||||
|
||||
c.getDamageHistory().setCreatureAttackedThisCombat(true);
|
||||
c.getDamageHistory().clearNotAttackedSinceLastUpkeepOf();
|
||||
c.getController().setAttackedWithCreatureThisTurn(true);
|
||||
c.getController().addCreaturesAttackedThisTurn(c);
|
||||
c.getController().incrementAttackersDeclaredThisTurn();
|
||||
|
||||
if (combat.getDefenderByAttacker(c) != null && combat.getDefenderByAttacker(c) instanceof Player) {
|
||||
|
||||
@@ -150,7 +150,7 @@ public class GlobalAttackRestrictions {
|
||||
final Game game = attackingPlayer.getGame();
|
||||
|
||||
/* if (game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.onlyOneAttackerATurn)) {
|
||||
if (attackingPlayer.getAttackedWithCreatureThisTurn()) {
|
||||
if (!attackingPlayer.getAttackedWithCreatureThisTurn().isEmpty()) {
|
||||
max = 0;
|
||||
} else {
|
||||
max = 1;
|
||||
|
||||
@@ -381,6 +381,9 @@ public class CostAdjustment {
|
||||
} else if ("Undaunted".equals(amount)) {
|
||||
value = card.getController().getOpponents().size();
|
||||
} 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);
|
||||
} else {
|
||||
value = AbilityUtils.calculateAmount(hostCard, amount, staticAbility);
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Multimap;
|
||||
import forge.card.mana.ManaCost;
|
||||
import forge.game.*;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
import forge.game.card.CardCollectionView;
|
||||
@@ -412,10 +413,10 @@ public class PhaseHandler implements java.io.Serializable {
|
||||
|
||||
if (!skipped) {
|
||||
// Run triggers if phase isn't being skipped
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Phase", phase.nameForScripts);
|
||||
runParams.put("Player", playerTurn);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.Phase, runParams, false);
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.Phase, phase.nameForScripts);
|
||||
runParams.put(AbilityKey.Player, playerTurn);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.Phase, runParams, false);
|
||||
}
|
||||
|
||||
// This line fixes Combat Damage triggers not going off when they should
|
||||
@@ -487,9 +488,9 @@ public class PhaseHandler implements java.io.Serializable {
|
||||
if (!bRepeatCleanup) {
|
||||
setPlayerTurn(handleNextTurn());
|
||||
// "Trigger" for begin turn to get around a phase skipping
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Player", playerTurn);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.TurnBegin, runParams, false);
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.Player, playerTurn);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.TurnBegin, runParams, false);
|
||||
}
|
||||
planarDiceRolledthisTurn = 0;
|
||||
// Play the End Turn sound
|
||||
@@ -577,11 +578,11 @@ public class PhaseHandler implements java.io.Serializable {
|
||||
for (final Card c : combat.getAttackers()) {
|
||||
attackedTarget.add(combat.getDefenderByAttacker(c));
|
||||
}
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Attackers", combat.getAttackers());
|
||||
runParams.put("AttackingPlayer", combat.getAttackingPlayer());
|
||||
runParams.put("AttackedTarget", attackedTarget);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.AttackersDeclared, runParams, false);
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.Attackers, combat.getAttackers());
|
||||
runParams.put(AbilityKey.AttackingPlayer, combat.getAttackingPlayer());
|
||||
runParams.put(AbilityKey.AttackedTarget, attackedTarget);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.AttackersDeclared, runParams, false);
|
||||
}
|
||||
|
||||
for (final Card c : combat.getAttackers()) {
|
||||
@@ -690,10 +691,10 @@ public class PhaseHandler implements java.io.Serializable {
|
||||
}
|
||||
}
|
||||
// fire blockers declared trigger
|
||||
final Map<String, Object> bdRunParams = Maps.newHashMap();
|
||||
bdRunParams.put("Blockers", declaredBlockers);
|
||||
bdRunParams.put("Attackers", blockedAttackers);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.BlockersDeclared, bdRunParams, false);
|
||||
final Map<AbilityKey, Object> bdRunParams = AbilityKey.newMap();
|
||||
bdRunParams.put(AbilityKey.Blockers, declaredBlockers);
|
||||
bdRunParams.put(AbilityKey.Attackers, blockedAttackers);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.BlockersDeclared, bdRunParams, false);
|
||||
}
|
||||
|
||||
for (final Card c1 : combat.getAllBlockers()) {
|
||||
@@ -703,10 +704,10 @@ public class PhaseHandler implements java.io.Serializable {
|
||||
|
||||
if (!c1.getDamageHistory().getCreatureBlockedThisCombat()) {
|
||||
// Run triggers
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Blocker", c1);
|
||||
runParams.put("Attackers", combat.getAttackersBlockedBy(c1));
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.Blocks, runParams, false);
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.Blocker, c1);
|
||||
runParams.put(AbilityKey.Attackers, combat.getAttackersBlockedBy(c1));
|
||||
game.getTriggerHandler().runTrigger(TriggerType.Blocks, runParams, false);
|
||||
}
|
||||
|
||||
c1.getDamageHistory().setCreatureBlockedThisCombat(true);
|
||||
@@ -724,13 +725,15 @@ public class PhaseHandler implements java.io.Serializable {
|
||||
}
|
||||
|
||||
// Run triggers
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Attacker", a);
|
||||
runParams.put("Blockers", blockers);
|
||||
runParams.put("NumBlockers", blockers.size());
|
||||
runParams.put("Defender", combat.getDefenderByAttacker(a));
|
||||
runParams.put("DefendingPlayer", combat.getDefenderPlayerByAttacker(a));
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.AttackerBlocked, runParams, false);
|
||||
{
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.Attacker, a);
|
||||
runParams.put(AbilityKey.Blockers, blockers);
|
||||
runParams.put(AbilityKey.NumBlockers, blockers.size());
|
||||
runParams.put(AbilityKey.Defender, combat.getDefenderByAttacker(a));
|
||||
runParams.put(AbilityKey.DefendingPlayer, combat.getDefenderPlayerByAttacker(a));
|
||||
game.getTriggerHandler().runTrigger(TriggerType.AttackerBlocked, runParams, false);
|
||||
}
|
||||
|
||||
// Run this trigger once for each blocker
|
||||
for (final Card b : blockers) {
|
||||
@@ -738,10 +741,10 @@ public class PhaseHandler implements java.io.Serializable {
|
||||
b.addBlockedThisTurn(a);
|
||||
a.addBlockedByThisTurn(b);
|
||||
|
||||
final Map<String, Object> runParams2 = Maps.newHashMap();
|
||||
runParams2.put("Attacker", a);
|
||||
runParams2.put("Blocker", b);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.AttackerBlockedByCreature, runParams2, false);
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.Attacker, a);
|
||||
runParams.put(AbilityKey.Blocker, b);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.AttackerBlockedByCreature, runParams, false);
|
||||
}
|
||||
|
||||
a.getDamageHistory().setCreatureGotBlockedThisCombat(true);
|
||||
|
||||
@@ -24,6 +24,7 @@ import forge.LobbyPlayer;
|
||||
import forge.card.MagicColor;
|
||||
import forge.game.*;
|
||||
import forge.game.ability.AbilityFactory;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.ApiType;
|
||||
import forge.game.ability.effects.DetachedCardEffect;
|
||||
@@ -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> assignedCombatDamage = Maps.newHashMap();
|
||||
private int spellsCastThisTurn = 0;
|
||||
private int spellsCastThisGame = 0;
|
||||
private int spellsCastLastTurn = 0;
|
||||
private int landsPlayedThisTurn = 0;
|
||||
private int landsPlayedLastTurn = 0;
|
||||
@@ -123,7 +125,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
private ManaPool manaPool = new ManaPool(this);
|
||||
private GameEntity mustAttackEntity = null;
|
||||
private GameEntity mustAttackEntityThisTurn = null;
|
||||
private boolean attackedWithCreatureThisTurn = false;
|
||||
private CardCollection creatureAttackedThisTurn = new CardCollection();
|
||||
private boolean activateLoyaltyAbilityThisTurn = false;
|
||||
private boolean tappedLandForManaThisTurn = false;
|
||||
private int attackersDeclaredThisTurn = 0;
|
||||
@@ -246,9 +248,9 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
game.getTriggerHandler().clearSuppression(TriggerType.ChangesZone);
|
||||
|
||||
// Run triggers
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Scheme", activeScheme);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.SetInMotion, runParams, false);
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.Scheme, activeScheme);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.SetInMotion, runParams, false);
|
||||
}
|
||||
|
||||
|
||||
@@ -445,12 +447,12 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
}
|
||||
|
||||
// Run triggers
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Player", this);
|
||||
runParams.put("LifeAmount", lifeGain);
|
||||
runParams.put("Source", source);
|
||||
runParams.put("SourceSA", sa);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.LifeGained, runParams, false);
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.Player, this);
|
||||
runParams.put(AbilityKey.LifeAmount, lifeGain);
|
||||
runParams.put(AbilityKey.Source, source);
|
||||
runParams.put(AbilityKey.SourceSA, sa);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.LifeGained, runParams, false);
|
||||
|
||||
game.fireEvent(new GameEventPlayerLivesChanged(this, oldLife, life));
|
||||
}
|
||||
@@ -478,19 +480,17 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
life -= toLose;
|
||||
view.updateLife(this);
|
||||
lifeLost = toLose;
|
||||
if(manaBurn) {
|
||||
game.fireEvent(new GameEventManaBurn(this,lifeLost,true));
|
||||
if (manaBurn) {
|
||||
game.fireEvent(new GameEventManaBurn(this, lifeLost, true));
|
||||
} else {
|
||||
game.fireEvent(new GameEventPlayerLivesChanged(this, oldLife, life));
|
||||
game.fireEvent(new GameEventPlayerLivesChanged(this, oldLife, life));
|
||||
}
|
||||
}
|
||||
else if (toLose == 0) {
|
||||
} else if (toLose == 0) {
|
||||
// Rule 118.4
|
||||
// this is for players being able to pay 0 life nothing to do
|
||||
// no trigger for lost no life
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
System.out.println("Player - trying to lose negative life");
|
||||
return 0;
|
||||
}
|
||||
@@ -500,11 +500,11 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
lifeLostThisTurn += toLose;
|
||||
|
||||
// Run triggers
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Player", this);
|
||||
runParams.put("LifeAmount", toLose);
|
||||
runParams.put("FirstTime", firstLost);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.LifeLost, runParams, false);
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.Player, this);
|
||||
runParams.put(AbilityKey.LifeAmount, toLose);
|
||||
runParams.put(AbilityKey.FirstTime, firstLost);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.LifeLost, runParams, false);
|
||||
|
||||
return lifeLost;
|
||||
}
|
||||
@@ -528,10 +528,10 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
loseLife(lifePayment);
|
||||
|
||||
// Run triggers
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Player", this);
|
||||
runParams.put("LifeAmount", lifePayment);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.PayLife, runParams, false);
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.Player, this);
|
||||
runParams.put(AbilityKey.LifeAmount, lifePayment);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.PayLife, runParams, false);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -611,14 +611,14 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
}
|
||||
|
||||
// Run triggers
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("DamageSource", source);
|
||||
runParams.put("DamageTarget", this);
|
||||
runParams.put("DamageAmount", amount);
|
||||
runParams.put("IsCombatDamage", isCombat);
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.DamageSource, source);
|
||||
runParams.put(AbilityKey.DamageTarget, this);
|
||||
runParams.put(AbilityKey.DamageAmount, amount);
|
||||
runParams.put(AbilityKey.IsCombatDamage, isCombat);
|
||||
// Defending player at the time the damage was dealt
|
||||
runParams.put("DefendingPlayer", game.getCombat() != null ? game.getCombat().getDefendingPlayerRelatedTo(source) : null);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.DamageDone, runParams, false);
|
||||
runParams.put(AbilityKey.DefendingPlayer, game.getCombat() != null ? game.getCombat().getDefendingPlayerRelatedTo(source) : null);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.DamageDone, runParams, false);
|
||||
|
||||
game.fireEvent(new GameEventPlayerDamaged(this, source, amount, isCombat, infect));
|
||||
|
||||
@@ -908,7 +908,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
}
|
||||
|
||||
int addAmount = n;
|
||||
if(addAmount <= 0) {
|
||||
if (addAmount <= 0) {
|
||||
// Can't add negative or 0 counters, bail out now
|
||||
return 0;
|
||||
}
|
||||
@@ -922,29 +922,29 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
repParams.put("EffectOnly", applyMultiplier);
|
||||
|
||||
switch (getGame().getReplacementHandler().run(repParams)) {
|
||||
case NotReplaced:
|
||||
break;
|
||||
case Updated: {
|
||||
addAmount = (int) repParams.get("CounterNum");
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return 0;
|
||||
case NotReplaced:
|
||||
break;
|
||||
case Updated: {
|
||||
addAmount = (int) repParams.get("CounterNum");
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
final int oldValue = getCounters(counterType);
|
||||
final int newValue = addAmount + oldValue;
|
||||
this.setCounters(counterType, newValue, fireEvents);
|
||||
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Player", this);
|
||||
runParams.put("Source", this);
|
||||
runParams.put("CounterType", counterType);
|
||||
final Map<AbilityKey, Object> runParams = Maps.newHashMap();
|
||||
runParams.put(AbilityKey.Player, this);
|
||||
runParams.put(AbilityKey.Source, this);
|
||||
runParams.put(AbilityKey.CounterType, counterType);
|
||||
for (int i = 0; i < addAmount; i++) {
|
||||
getGame().getTriggerHandler().runTriggerOld(TriggerType.CounterAdded, runParams, false);
|
||||
getGame().getTriggerHandler().runTrigger(TriggerType.CounterAdded, runParams, false);
|
||||
}
|
||||
if (addAmount > 0) {
|
||||
getGame().getTriggerHandler().runTriggerOld(TriggerType.CounterAddedOnce, runParams, false);
|
||||
getGame().getTriggerHandler().runTrigger(TriggerType.CounterAddedOnce, runParams, false);
|
||||
}
|
||||
if (table != null) {
|
||||
table.put(this, counterType, addAmount);
|
||||
@@ -1283,14 +1283,14 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
repParams.put("SurveilNum", num);
|
||||
|
||||
switch (getGame().getReplacementHandler().run(repParams)) {
|
||||
case NotReplaced:
|
||||
break;
|
||||
case Updated: {
|
||||
num = (int) repParams.get("SurveilNum");
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return;
|
||||
case NotReplaced:
|
||||
break;
|
||||
case Updated: {
|
||||
num = (int) repParams.get("SurveilNum");
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
final CardCollection topN = new CardCollection(this.getCardsIn(ZoneType.Library, num));
|
||||
@@ -1307,7 +1307,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
int numToTop = 0;
|
||||
|
||||
if (toGrave != null) {
|
||||
for(Card c : toGrave) {
|
||||
for (Card c : toGrave) {
|
||||
getGame().getAction().moveToGraveyard(c, cause);
|
||||
numToGrave++;
|
||||
}
|
||||
@@ -1315,7 +1315,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
|
||||
if (toTop != null) {
|
||||
Collections.reverse(toTop); // the last card in list will become topmost in library, have to revert thus.
|
||||
for(Card c : toTop) {
|
||||
for (Card c : toTop) {
|
||||
getGame().getAction().moveToLibrary(c, cause);
|
||||
numToTop++;
|
||||
}
|
||||
@@ -1324,10 +1324,10 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
getGame().fireEvent(new GameEventSurveil(this, numToTop, numToGrave));
|
||||
|
||||
surveilThisTurn++;
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Player", this);
|
||||
runParams.put("NumThisTurn", surveilThisTurn);
|
||||
getGame().getTriggerHandler().runTriggerOld(TriggerType.Surveil, runParams, false);
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.Player, this);
|
||||
runParams.put(AbilityKey.NumThisTurn, surveilThisTurn);
|
||||
getGame().getTriggerHandler().runTrigger(TriggerType.Surveil, runParams, false);
|
||||
}
|
||||
|
||||
public int getSurveilThisTurn() {
|
||||
@@ -1415,11 +1415,11 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
view.updateNumDrawnThisTurn(this);
|
||||
|
||||
// Run triggers
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Card", c);
|
||||
runParams.put("Number", numDrawnThisTurn);
|
||||
runParams.put("Player", this);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.Drawn, runParams, false);
|
||||
final Map<AbilityKey, Object> runParams = Maps.newHashMap();
|
||||
runParams.put(AbilityKey.Card, c);
|
||||
runParams.put(AbilityKey.Number, numDrawnThisTurn);
|
||||
runParams.put(AbilityKey.Player, this);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.Drawn, runParams, false);
|
||||
}
|
||||
else { // Lose by milling is always on. Give AI many cards it cannot play if you want it not to undertake actions
|
||||
triedToDrawFromEmptyLibrary = true;
|
||||
@@ -1603,12 +1603,12 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
}
|
||||
}
|
||||
}
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Player", this);
|
||||
runParams.put("Card", c);
|
||||
runParams.put("Cause", cause);
|
||||
runParams.put("IsMadness", Boolean.valueOf(discardMadness));
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.Discarded, runParams, false);
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.Player, this);
|
||||
runParams.put(AbilityKey.Card, c);
|
||||
runParams.put(AbilityKey.Cause, cause);
|
||||
runParams.put(AbilityKey.IsMadness, discardMadness);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.Discarded, runParams, false);
|
||||
game.getGameLog().add(GameLogEntryType.DISCARD, sb.toString());
|
||||
return newCard;
|
||||
}
|
||||
@@ -1686,10 +1686,10 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
getZone(ZoneType.Library).setCards(getController().cheatShuffle(list));
|
||||
|
||||
// Run triggers
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Player", this);
|
||||
runParams.put("Source", sa);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.Shuffled, runParams, false);
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.Player, this);
|
||||
runParams.put(AbilityKey.Source, sa);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.Shuffled, runParams, false);
|
||||
|
||||
// Play the shuffle sound
|
||||
game.fireEvent(new GameEventShuffle(this));
|
||||
@@ -1717,9 +1717,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
game.fireEvent(new GameEventLandPlayed(this, land));
|
||||
|
||||
// Run triggers
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Card", land);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.LandPlayed, runParams, false);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.LandPlayed, AbilityKey.mapFromCard(land), false);
|
||||
game.getStack().unfreezeStack();
|
||||
addLandPlayedThisTurn();
|
||||
}
|
||||
@@ -1827,11 +1825,14 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
activateLoyaltyAbilityThisTurn = b;
|
||||
}
|
||||
|
||||
public final boolean getAttackedWithCreatureThisTurn() {
|
||||
return attackedWithCreatureThisTurn;
|
||||
public final CardCollection getCreaturesAttackedThisTurn() {
|
||||
return creatureAttackedThisTurn;
|
||||
}
|
||||
public final void setAttackedWithCreatureThisTurn(final boolean b) {
|
||||
attackedWithCreatureThisTurn = b;
|
||||
public final void addCreaturesAttackedThisTurn(final Card c) {
|
||||
creatureAttackedThisTurn.add(c);
|
||||
}
|
||||
public final void clearCreaturesAttackedThisTurn() {
|
||||
creatureAttackedThisTurn.clear();
|
||||
}
|
||||
|
||||
public final int getAttackersDeclaredThisTurn() {
|
||||
@@ -2152,10 +2153,10 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
}
|
||||
public final void addInvestigatedThisTurn() {
|
||||
investigatedThisTurn++;
|
||||
Map<String,Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Player", this);
|
||||
runParams.put("Num", investigatedThisTurn);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.Investigated, runParams,false);
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.Player, this);
|
||||
runParams.put(AbilityKey.Num, investigatedThisTurn);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.Investigated, runParams,false);
|
||||
}
|
||||
public final void resetInvestigatedThisTurn() {
|
||||
investigatedThisTurn = 0;
|
||||
@@ -2173,14 +2174,14 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
sacrificedThisTurn.add(cpy);
|
||||
|
||||
// Run triggers
|
||||
final Map<String, Object> runParams = Maps.newHashMap();
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
// use a copy that preserves last known information about the card (e.g. for Savra, Queen of the Golgari + Painter's Servant)
|
||||
runParams.put("Card", cpy);
|
||||
runParams.put("Player", this);
|
||||
runParams.put("Cause", source);
|
||||
runParams.put("CostStack", game.costPaymentStack);
|
||||
runParams.put("IndividualCostPaymentInstance", game.costPaymentStack.peek());
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.Sacrificed, runParams, false);
|
||||
runParams.put(AbilityKey.Card, cpy);
|
||||
runParams.put(AbilityKey.Player, this);
|
||||
runParams.put(AbilityKey.Cause, source);
|
||||
runParams.put(AbilityKey.CostStack, game.costPaymentStack);
|
||||
runParams.put(AbilityKey.IndividualCostPaymentInstance, game.costPaymentStack.peek());
|
||||
game.getTriggerHandler().runTrigger(TriggerType.Sacrificed, runParams, false);
|
||||
}
|
||||
|
||||
public final void resetSacrificedThisTurn() {
|
||||
@@ -2209,6 +2210,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
}
|
||||
public final void addSpellCastThisTurn() {
|
||||
spellsCastThisTurn++;
|
||||
spellsCastThisGame++;
|
||||
achievementTracker.spellsCast++;
|
||||
if (spellsCastThisTurn > achievementTracker.maxStormCount) {
|
||||
achievementTracker.maxStormCount = spellsCastThisTurn;
|
||||
@@ -2220,7 +2222,12 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
public final void setSpellsCastLastTurn(int num) {
|
||||
spellsCastLastTurn = num;
|
||||
}
|
||||
|
||||
public final int getSpellsCastThisGame() {
|
||||
return spellsCastThisGame;
|
||||
}
|
||||
public final void resetSpellCastThisGame() {
|
||||
spellsCastThisGame = 0;
|
||||
}
|
||||
public final int getLifeGainedByTeamThisTurn() {
|
||||
return lifeGainedByTeamThisTurn;
|
||||
}
|
||||
@@ -2392,7 +2399,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
resetNumDrawnThisTurn();
|
||||
resetNumDiscardedThisTurn();
|
||||
setNumCardsInHandStartedThisTurnWith(getCardsIn(ZoneType.Hand).size());
|
||||
setAttackedWithCreatureThisTurn(false);
|
||||
clearCreaturesAttackedThisTurn();
|
||||
setActivateLoyaltyAbilityThisTurn(false);
|
||||
setTappedLandForManaThisTurn(false);
|
||||
setLandsPlayedLastTurn(getLandsPlayedThisTurn());
|
||||
@@ -2524,9 +2531,9 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
|
||||
game.setActivePlanes(currentPlanes);
|
||||
//Run PlaneswalkedTo triggers here.
|
||||
Map<String,Object> runParams = Maps.newHashMap();
|
||||
runParams.put("Cards", currentPlanes);
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.PlaneswalkedTo, runParams,false);
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.Cards, currentPlanes);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.PlaneswalkedTo, runParams,false);
|
||||
view.updateCurrentPlaneName(currentPlanes.toString().replaceAll(" \\(.*","").replace("[",""));
|
||||
}
|
||||
|
||||
@@ -2535,8 +2542,9 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
*/
|
||||
public void leaveCurrentPlane() {
|
||||
|
||||
final Map<String, Object> runParams = new ImmutableMap.Builder<String, Object>().put("Cards", new CardCollection(currentPlanes)).build();
|
||||
game.getTriggerHandler().runTriggerOld(TriggerType.PlaneswalkedFrom, runParams,false);
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.Cards, new CardCollection(currentPlanes));
|
||||
game.getTriggerHandler().runTrigger(TriggerType.PlaneswalkedFrom, runParams,false);
|
||||
|
||||
for (final Card plane : currentPlanes) {
|
||||
//game.getZoneOf(plane).remove(plane);
|
||||
|
||||
@@ -225,6 +225,15 @@ public class PlayerProperty {
|
||||
if (!Expressions.compare(list.size(), comparator, y)) {
|
||||
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")) {
|
||||
final String cardType = property.split("sThan")[0].substring(8);
|
||||
final Player controller = "Active".equals(property.split("sThan")[1]) ? game.getPhaseHandler().getPlayerTurn() : sourceController;
|
||||
|
||||
@@ -24,6 +24,7 @@ import com.google.common.collect.Maps;
|
||||
import forge.card.mana.ManaCost;
|
||||
import forge.game.*;
|
||||
import forge.game.ability.AbilityFactory;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.ApiType;
|
||||
import forge.game.card.Card;
|
||||
@@ -138,7 +139,7 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
||||
|
||||
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();
|
||||
|
||||
@@ -552,23 +553,23 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
||||
return sa;
|
||||
}
|
||||
|
||||
public Map<String, Object> getTriggeringObjects() {
|
||||
public Map<AbilityKey, Object> getTriggeringObjects() {
|
||||
return triggeringObjects;
|
||||
}
|
||||
public void setTriggeringObjects(final Map<String, Object> triggeredObjects) {
|
||||
triggeringObjects = Maps.newHashMap(triggeredObjects);
|
||||
public void setTriggeringObjects(final Map<AbilityKey, Object> triggeredObjects) {
|
||||
triggeringObjects = AbilityKey.newMap(triggeredObjects);
|
||||
}
|
||||
public Object getTriggeringObject(final String type) {
|
||||
public Object getTriggeringObject(final AbilityKey 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);
|
||||
}
|
||||
public boolean hasTriggeringObject(final String type) {
|
||||
public boolean hasTriggeringObject(final AbilityKey type) {
|
||||
return triggeringObjects.containsKey(type);
|
||||
}
|
||||
public void resetTriggeringObjects() {
|
||||
triggeringObjects = Maps.newHashMap();
|
||||
triggeringObjects = AbilityKey.newMap();
|
||||
}
|
||||
|
||||
public List<Object> getTriggerRemembered() {
|
||||
@@ -877,7 +878,7 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
||||
clone.originalMapParams = Maps.newHashMap(this.originalMapParams);
|
||||
clone.mapParams = Maps.newHashMap(this.mapParams);
|
||||
|
||||
clone.triggeringObjects = Maps.newHashMap(this.triggeringObjects);
|
||||
clone.triggeringObjects = AbilityKey.newMap(this.triggeringObjects);
|
||||
|
||||
if (getPayCosts() != null) {
|
||||
clone.setPayCosts(getPayCosts().copy());
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
package forge.game.spellability;
|
||||
|
||||
import forge.game.IIdentifiable;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.ApiType;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
@@ -91,7 +92,7 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView {
|
||||
// is Kicked, is Buyback
|
||||
|
||||
// Triggers
|
||||
private final Map<String, Object> triggeringObjects;
|
||||
private final Map<AbilityKey, Object> triggeringObjects;
|
||||
private final List<Object> triggerRemembered;
|
||||
|
||||
private final Map<String, String> storedSVars = Maps.newHashMap();
|
||||
@@ -342,27 +343,28 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView {
|
||||
}
|
||||
|
||||
// Run BecomesTargetTrigger
|
||||
Map<String, Object> runParams = new HashMap<>();
|
||||
runParams.put("SourceSA", ability);
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.SourceSA, ability);
|
||||
Set<Object> distinctObjects = new HashSet<>();
|
||||
for (final Object tgt : target.getTargets()) {
|
||||
if (distinctObjects.contains(tgt)) {
|
||||
continue;
|
||||
}
|
||||
distinctObjects.add(tgt);
|
||||
|
||||
if (tgt instanceof Card && !((Card) tgt).hasBecomeTargetThisTurn()) {
|
||||
runParams.put("FirstTime", null);
|
||||
runParams.put(AbilityKey.FirstTime, null);
|
||||
((Card) tgt).setBecameTargetThisTurn(true);
|
||||
}
|
||||
runParams.put("Target", tgt);
|
||||
getSourceCard().getGame().getTriggerHandler().runTriggerOld(TriggerType.BecomesTarget, runParams, false);
|
||||
runParams.put(AbilityKey.Target, tgt);
|
||||
getSourceCard().getGame().getTriggerHandler().runTrigger(TriggerType.BecomesTarget, runParams, false);
|
||||
}
|
||||
runParams.put("Targets", target.getTargets());
|
||||
getSourceCard().getGame().getTriggerHandler().runTriggerOld(TriggerType.BecomesTargetOnce, runParams, false);
|
||||
runParams.put(AbilityKey.Targets, target.getTargets());
|
||||
getSourceCard().getGame().getTriggerHandler().runTrigger(TriggerType.BecomesTargetOnce, runParams, false);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean addTriggeringObject(String trigObj, Object value) {
|
||||
public boolean addTriggeringObject(AbilityKey trigObj, Object value) {
|
||||
if (!triggeringObjects.containsKey(trigObj)) {
|
||||
triggeringObjects.put(trigObj, value);
|
||||
return true;
|
||||
@@ -370,7 +372,7 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean updateTriggeringObject(String trigObj, Object value) {
|
||||
public boolean updateTriggeringObject(AbilityKey trigObj, Object value) {
|
||||
if (triggeringObjects.containsKey(trigObj)) {
|
||||
triggeringObjects.replace(trigObj, value);
|
||||
return true;
|
||||
@@ -378,7 +380,7 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView {
|
||||
return false;
|
||||
}
|
||||
|
||||
public Object getTriggeringObject(String trigObj) {
|
||||
public Object getTriggeringObject(AbilityKey trigObj) {
|
||||
if (triggeringObjects.containsKey(trigObj)) {
|
||||
return triggeringObjects.get(trigObj);
|
||||
}
|
||||
|
||||
@@ -527,7 +527,7 @@ public class StaticAbility extends CardTraitBase implements IIdentifiable, Clone
|
||||
}
|
||||
|
||||
if (hasParam("PlayerAttackedWithCreatureThisTurn")
|
||||
&& !player.getAttackedWithCreatureThisTurn()) {
|
||||
&& player.getCreaturesAttackedThisTurn().isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ import forge.game.Game;
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.TriggerReplacementBase;
|
||||
import forge.game.ability.AbilityFactory;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.ApiType;
|
||||
import forge.game.ability.effects.CharmEffect;
|
||||
import forge.game.card.Card;
|
||||
@@ -36,7 +37,6 @@ import forge.game.zone.ZoneType;
|
||||
import java.util.*;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import forge.util.TextUtil;
|
||||
|
||||
@@ -70,7 +70,7 @@ public abstract class Trigger extends TriggerReplacementBase {
|
||||
|
||||
private TriggerType mode;
|
||||
|
||||
private Map<String, Object> storedTriggeredObjects = null;
|
||||
private Map<AbilityKey, Object> storedTriggeredObjects = null;
|
||||
|
||||
private List<Object> triggerRemembered = Lists.newArrayList();
|
||||
|
||||
@@ -87,8 +87,8 @@ public abstract class Trigger extends TriggerReplacementBase {
|
||||
* a {@link java.util.HashMap} object.
|
||||
* @since 1.0.15
|
||||
*/
|
||||
public final void setStoredTriggeredObjects(final Map<String, Object> storedTriggeredObjects) {
|
||||
this.storedTriggeredObjects = Maps.newHashMap(storedTriggeredObjects);
|
||||
public final void setStoredTriggeredObjects(final Map<AbilityKey, Object> storedTriggeredObjects) {
|
||||
this.storedTriggeredObjects = AbilityKey.newMap(storedTriggeredObjects);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -99,7 +99,7 @@ public abstract class Trigger extends TriggerReplacementBase {
|
||||
* @return a {@link java.util.HashMap} object.
|
||||
* @since 1.0.15
|
||||
*/
|
||||
public final Map<String, Object> getStoredTriggeredObjects() {
|
||||
public final Map<AbilityKey, Object> getStoredTriggeredObjects() {
|
||||
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"))) {
|
||||
final Card moved = (Card) runParams.get("Card");
|
||||
final Card moved = (Card) runParams.get(AbilityKey.Card);
|
||||
if (moved == null) {
|
||||
return false;
|
||||
// final StringBuilder sb = new StringBuilder();
|
||||
@@ -381,26 +381,26 @@ public abstract class Trigger extends TriggerReplacementBase {
|
||||
|
||||
String condition = this.mapParams.get("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))
|
||||
return false;
|
||||
} else if ("AttackedPlayerWithMostLife".equals(condition)) {
|
||||
GameEntity attacked = (GameEntity) runParams.get("Attacked");
|
||||
GameEntity attacked = (GameEntity) runParams.get(AbilityKey.Attacked);
|
||||
if (attacked == null) {
|
||||
// Check "Defender" too because once triggering objects are set on TriggerAttacks, the value of Attacked
|
||||
// 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",
|
||||
this.getHostCard().getController(), this.getHostCard(), null)) {
|
||||
return false;
|
||||
}
|
||||
} else if ("AttackedPlayerWhoAttackedYouLastTurn".equals(condition)) {
|
||||
GameEntity attacked = (GameEntity) runParams.get("Attacked");
|
||||
GameEntity attacked = (GameEntity) runParams.get(AbilityKey.Attacked);
|
||||
if (attacked == null) {
|
||||
// Check "Defender" too because once triggering objects are set on TriggerAttacks, the value of Attacked
|
||||
// ends up being in Defender at that point.
|
||||
attacked = (GameEntity) runParams.get("DefendingPlayer");
|
||||
attacked = (GameEntity) runParams.get(AbilityKey.DefendingPlayer);
|
||||
}
|
||||
Player attacker = this.getHostCard().getController();
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -62,7 +63,7 @@ public class TriggerAbandoned extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Scheme", this.getRunParams().get("Scheme"));
|
||||
sa.setTriggeringObject(AbilityKey.Scheme, this.getRunParams().get("Scheme"));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -19,6 +19,7 @@ package forge.game.trigger;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -63,13 +64,13 @@ public class TriggerAdapt extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, getRunParams().get("Card"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Adapt: ").append(sa.getTriggeringObject("Card"));
|
||||
sb.append("Adapt: ").append(sa.getTriggeringObject(AbilityKey.Card));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -72,14 +73,14 @@ public class TriggerAttached extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Source", this.getRunParams().get("AttachSource"));
|
||||
sa.setTriggeringObject("Target", this.getRunParams().get("AttachTarget"));
|
||||
sa.setTriggeringObject(AbilityKey.Source, this.getRunParams().get("AttachSource"));
|
||||
sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("AttachTarget"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Attachee: ").append(sa.getTriggeringObject("Target"));
|
||||
sb.append("Attachee: ").append(sa.getTriggeringObject(AbilityKey.Target));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ package forge.game.trigger;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardLists;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
@@ -84,18 +85,18 @@ public class TriggerAttackerBlocked extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Attacker", getRunParams().get("Attacker"));
|
||||
sa.setTriggeringObject("Blockers", getRunParams().get("Blockers"));
|
||||
sa.setTriggeringObject("Defender", getRunParams().get("Defender"));
|
||||
sa.setTriggeringObject("DefendingPlayer", getRunParams().get("DefendingPlayer"));
|
||||
sa.setTriggeringObject("NumBlockers", getRunParams().get("NumBlockers"));
|
||||
sa.setTriggeringObject(AbilityKey.Attacker, getRunParams().get("Attacker"));
|
||||
sa.setTriggeringObject(AbilityKey.Blockers, getRunParams().get("Blockers"));
|
||||
sa.setTriggeringObject(AbilityKey.Defender, getRunParams().get("Defender"));
|
||||
sa.setTriggeringObject(AbilityKey.DefendingPlayer, getRunParams().get("DefendingPlayer"));
|
||||
sa.setTriggeringObject(AbilityKey.NumBlockers, getRunParams().get("NumBlockers"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Attacker: ").append(sa.getTriggeringObject("Attacker")).append(", ");
|
||||
sb.append("Number Blockers: ").append(sa.getTriggeringObject("NumBlockers"));
|
||||
sb.append("Attacker: ").append(sa.getTriggeringObject(AbilityKey.Attacker)).append(", ");
|
||||
sb.append("Number Blockers: ").append(sa.getTriggeringObject(AbilityKey.NumBlockers));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ package forge.game.trigger;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -87,15 +88,15 @@ public class TriggerAttackerBlockedByCreature extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Attacker", this.getRunParams().get("Attacker"));
|
||||
sa.setTriggeringObject("Blocker", this.getRunParams().get("Blocker"));
|
||||
sa.setTriggeringObject(AbilityKey.Attacker, this.getRunParams().get("Attacker"));
|
||||
sa.setTriggeringObject(AbilityKey.Blocker, this.getRunParams().get("Blocker"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Attacker: ").append(sa.getTriggeringObject("Attacker")).append(", ");
|
||||
sb.append("Blocker: ").append(sa.getTriggeringObject("Blocker"));
|
||||
sb.append("Attacker: ").append(sa.getTriggeringObject(AbilityKey.Attacker)).append(", ");
|
||||
sb.append("Blocker: ").append(sa.getTriggeringObject(AbilityKey.Blocker));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -69,15 +70,15 @@ public class TriggerAttackerUnblocked extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Attacker", this.getRunParams().get("Attacker"));
|
||||
sa.setTriggeringObject("Defender", this.getRunParams().get("Defender"));
|
||||
sa.setTriggeringObject("DefendingPlayer", this.getRunParams().get("DefendingPlayer"));
|
||||
sa.setTriggeringObject(AbilityKey.Attacker, this.getRunParams().get("Attacker"));
|
||||
sa.setTriggeringObject(AbilityKey.Defender, this.getRunParams().get("Defender"));
|
||||
sa.setTriggeringObject(AbilityKey.DefendingPlayer, this.getRunParams().get("DefendingPlayer"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Attacker: ").append(sa.getTriggeringObject("Attacker"));
|
||||
sb.append("Attacker: ").append(sa.getTriggeringObject(AbilityKey.Attacker));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -84,15 +85,15 @@ public class TriggerAttackerUnblockedOnce extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("AttackingPlayer", this.getRunParams().get("AttackingPlayer"));
|
||||
sa.setTriggeringObject("Defenders", this.getRunParams().get("Defenders"));
|
||||
sa.setTriggeringObject(AbilityKey.AttackingPlayer, this.getRunParams().get("AttackingPlayer"));
|
||||
sa.setTriggeringObject(AbilityKey.Defenders, this.getRunParams().get("Defenders"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("AttackingPlayer: ").append(sa.getTriggeringObject("AttackingPlayer"));
|
||||
sb.append("Defenders: ").append(sa.getTriggeringObject("Defenders"));
|
||||
sb.append("AttackingPlayer: ").append(sa.getTriggeringObject(AbilityKey.AttackingPlayer));
|
||||
sb.append("Defenders: ").append(sa.getTriggeringObject(AbilityKey.Defenders));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -86,14 +87,14 @@ public class TriggerAttackersDeclared extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Attackers", this.getRunParams().get("Attackers"));
|
||||
sa.setTriggeringObject("AttackingPlayer", this.getRunParams().get("AttackingPlayer"));
|
||||
sa.setTriggeringObject(AbilityKey.Attackers, this.getRunParams().get("Attackers"));
|
||||
sa.setTriggeringObject(AbilityKey.AttackingPlayer, this.getRunParams().get("AttackingPlayer"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Number Attackers: ").append(sa.getTriggeringObject("Attackers"));
|
||||
sb.append("Number Attackers: ").append(sa.getTriggeringObject(AbilityKey.Attackers));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
@@ -124,17 +125,17 @@ public class TriggerAttacks extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Attacker", this.getRunParams().get("Attacker"));
|
||||
sa.setTriggeringObject("Defender", this.getRunParams().get("Attacked"));
|
||||
sa.setTriggeringObject("Defenders", this.getRunParams().get("Defenders"));
|
||||
sa.setTriggeringObject("DefendingPlayer", this.getRunParams().get("DefendingPlayer"));
|
||||
sa.setTriggeringObject(AbilityKey.Attacker, this.getRunParams().get("Attacker"));
|
||||
sa.setTriggeringObject(AbilityKey.Defender, this.getRunParams().get("Attacked"));
|
||||
sa.setTriggeringObject(AbilityKey.Defenders, this.getRunParams().get("Defenders"));
|
||||
sa.setTriggeringObject(AbilityKey.DefendingPlayer, this.getRunParams().get("DefendingPlayer"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
sb.append("Attacker: ").append(sa.getTriggeringObject("Attacker"));
|
||||
sb.append("Attacker: ").append(sa.getTriggeringObject(AbilityKey.Attacker));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package forge.game.trigger;
|
||||
import java.util.Map;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -35,13 +36,13 @@ public class TriggerBecomeMonarch extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Player", this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Player: ").append(sa.getTriggeringObject("Player")).append(", ");
|
||||
sb.append("Player: ").append(sa.getTriggeringObject(AbilityKey.Player)).append(", ");
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ package forge.game.trigger;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -64,14 +65,14 @@ public class TriggerBecomeMonstrous extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", getRunParams().get("Card"));
|
||||
sa.setTriggeringObject("MonstrosityAmount", getRunParams().get("MonstrosityAmount"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.MonstrosityAmount, getRunParams().get("MonstrosityAmount"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Monstrous: ").append(sa.getTriggeringObject("Card"));
|
||||
sb.append("Monstrous: ").append(sa.getTriggeringObject(AbilityKey.Card));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -62,13 +63,13 @@ public class TriggerBecomeRenowned extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Renowned: ").append(sa.getTriggeringObject("Card"));
|
||||
sb.append("Renowned: ").append(sa.getTriggeringObject(AbilityKey.Card));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -88,16 +89,16 @@ public class TriggerBecomesTarget extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("SourceSA", this.getRunParams().get("SourceSA"));
|
||||
sa.setTriggeringObject("Source", ((SpellAbility) this.getRunParams().get("SourceSA")).getHostCard());
|
||||
sa.setTriggeringObject("Target", this.getRunParams().get("Target"));
|
||||
sa.setTriggeringObject(AbilityKey.SourceSA, this.getRunParams().get("SourceSA"));
|
||||
sa.setTriggeringObject(AbilityKey.Source, ((SpellAbility) this.getRunParams().get("SourceSA")).getHostCard());
|
||||
sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("Target"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Source: ").append(((SpellAbility) sa.getTriggeringObject("SourceSA")).getHostCard()).append(", ");
|
||||
sb.append("Target: ").append(sa.getTriggeringObject("Target"));
|
||||
sb.append("Source: ").append(((SpellAbility) sa.getTriggeringObject(AbilityKey.SourceSA)).getHostCard()).append(", ");
|
||||
sb.append("Target: ").append(sa.getTriggeringObject(AbilityKey.Target));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.GameObject;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -80,16 +81,16 @@ public class TriggerBecomesTargetOnce extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("SourceSA", this.getRunParams().get("SourceSA"));
|
||||
sa.setTriggeringObject("Source", ((SpellAbility) this.getRunParams().get("SourceSA")).getHostCard());
|
||||
sa.setTriggeringObject("Targets", this.getRunParams().get("Targets"));
|
||||
sa.setTriggeringObject(AbilityKey.SourceSA, this.getRunParams().get("SourceSA"));
|
||||
sa.setTriggeringObject(AbilityKey.Source, ((SpellAbility) this.getRunParams().get("SourceSA")).getHostCard());
|
||||
sa.setTriggeringObject(AbilityKey.Targets, this.getRunParams().get("Targets"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Source: ").append(((SpellAbility) sa.getTriggeringObject("SourceSA")).getHostCard()).append(", ");
|
||||
sb.append("Targets: ").append(sa.getTriggeringObject("Targets"));
|
||||
sb.append("Source: ").append(((SpellAbility) sa.getTriggeringObject(AbilityKey.SourceSA)).getHostCard()).append(", ");
|
||||
sb.append("Targets: ").append(sa.getTriggeringObject(AbilityKey.Targets));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -51,14 +52,14 @@ public class TriggerBlockersDeclared extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Blockers", this.getRunParams().get("Blockers"));
|
||||
sa.setTriggeringObject("Attackers", this.getRunParams().get("Attackers"));
|
||||
sa.setTriggeringObject(AbilityKey.Blockers, this.getRunParams().get("Blockers"));
|
||||
sa.setTriggeringObject(AbilityKey.Attackers, this.getRunParams().get("Attackers"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Blockers: ").append(sa.getTriggeringObject("Blockers"));
|
||||
sb.append("Blockers: ").append(sa.getTriggeringObject(AbilityKey.Blockers));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -88,14 +89,14 @@ public class TriggerBlocks extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Blocker", this.getRunParams().get("Blocker"));
|
||||
sa.setTriggeringObject("Attackers", this.getRunParams().get("Attackers"));
|
||||
sa.setTriggeringObject(AbilityKey.Blocker, this.getRunParams().get("Blocker"));
|
||||
sa.setTriggeringObject(AbilityKey.Attackers, this.getRunParams().get("Attackers"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Blocker: ").append(sa.getTriggeringObject("Blocker"));
|
||||
sb.append("Blocker: ").append(sa.getTriggeringObject(AbilityKey.Blocker));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -71,14 +72,14 @@ public class TriggerChampioned extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Championed", this.getRunParams().get("Championed"));
|
||||
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Championed, this.getRunParams().get("Championed"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Championed: ").append(sa.getTriggeringObject("Championed"));
|
||||
sb.append("Championed: ").append(sa.getTriggeringObject(AbilityKey.Championed));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -70,13 +71,13 @@ public class TriggerChangesController extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Changed Controller: ").append(sa.getTriggeringObject("Card"));
|
||||
sb.append("Changed Controller: ").append(sa.getTriggeringObject(AbilityKey.Card));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardFactoryUtil;
|
||||
@@ -217,13 +218,13 @@ public class TriggerChangesZone extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Zone Changer: ").append(sa.getTriggeringObject("Card"));
|
||||
sb.append("Zone Changer: ").append(sa.getTriggeringObject(AbilityKey.Card));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ package forge.game.trigger;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.*;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
@@ -26,14 +27,14 @@ public class TriggerChangesZoneAll extends Trigger {
|
||||
|
||||
CardCollection allCards = this.filterCards(table);
|
||||
|
||||
sa.setTriggeringObject("Cards", allCards);
|
||||
sa.setTriggeringObject("Amount", allCards.size());
|
||||
sa.setTriggeringObject(AbilityKey.Cards, allCards);
|
||||
sa.setTriggeringObject(AbilityKey.Amount, allCards.size());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Amount: ").append(sa.getTriggeringObject("Amount"));
|
||||
sb.append("Amount: ").append(sa.getTriggeringObject(AbilityKey.Amount));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ package forge.game.trigger;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CounterType;
|
||||
import forge.game.player.Player;
|
||||
@@ -121,19 +122,19 @@ public class TriggerCounterAdded extends Trigger {
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
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"))
|
||||
sa.setTriggeringObject("Player", this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Added once: ");
|
||||
if (sa.hasTriggeringObject("Card"))
|
||||
sb.append(sa.getTriggeringObject("Card"));
|
||||
if (sa.hasTriggeringObject("Player"))
|
||||
sb.append(sa.getTriggeringObject("Player"));
|
||||
if (sa.hasTriggeringObject(AbilityKey.Card))
|
||||
sb.append(sa.getTriggeringObject(AbilityKey.Card));
|
||||
if (sa.hasTriggeringObject(AbilityKey.Player))
|
||||
sb.append(sa.getTriggeringObject(AbilityKey.Player));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.google.common.collect.Lists;
|
||||
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.GameEntityCounterTable;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.*;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -33,14 +34,14 @@ public class TriggerCounterAddedAll extends Trigger {
|
||||
amount += v;
|
||||
}
|
||||
|
||||
sa.setTriggeringObject("Objects", Lists.newArrayList(all.keySet()));
|
||||
sa.setTriggeringObject("Amount", amount);
|
||||
sa.setTriggeringObject(AbilityKey.Objects, Lists.newArrayList(all.keySet()));
|
||||
sa.setTriggeringObject(AbilityKey.Amount, amount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Amount: ").append(sa.getTriggeringObject("Amount"));
|
||||
sb.append("Amount: ").append(sa.getTriggeringObject(AbilityKey.Amount));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ package forge.game.trigger;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CounterType;
|
||||
import forge.game.player.Player;
|
||||
@@ -106,22 +107,22 @@ public class TriggerCounterAddedOnce extends Trigger {
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
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"))
|
||||
sa.setTriggeringObject("Player", this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject("Amount", this.getRunParams().get("CounterAmount"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.Amount, this.getRunParams().get("CounterAmount"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Added once: ");
|
||||
if (sa.hasTriggeringObject("Card"))
|
||||
sb.append(sa.getTriggeringObject("Card"));
|
||||
if (sa.hasTriggeringObject("Player"))
|
||||
sb.append(sa.getTriggeringObject("Player"));
|
||||
if (sa.hasTriggeringObject(AbilityKey.Card))
|
||||
sb.append(sa.getTriggeringObject(AbilityKey.Card));
|
||||
if (sa.hasTriggeringObject(AbilityKey.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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CounterType;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
@@ -82,13 +83,13 @@ public class TriggerCounterRemoved extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Removed from: ").append(sa.getTriggeringObject("Card"));
|
||||
sb.append("Removed from: ").append(sa.getTriggeringObject(AbilityKey.Card));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CounterType;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
@@ -73,15 +74,15 @@ public class TriggerCounterRemovedOnce extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject("Amount", this.getRunParams().get("CounterAmount"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Amount, this.getRunParams().get("CounterAmount"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Removed from: ").append(sa.getTriggeringObject("Card"));
|
||||
sb.append(" Amount: ").append(sa.getTriggeringObject("Amount"));
|
||||
sb.append("Removed from: ").append(sa.getTriggeringObject(AbilityKey.Card));
|
||||
sb.append(" Amount: ").append(sa.getTriggeringObject(AbilityKey.Amount));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -92,17 +93,17 @@ public class TriggerCountered extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject("Cause", this.getRunParams().get("Cause"));
|
||||
sa.setTriggeringObject("Player", this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject("CounteredSA", this.getRunParams().get("CounteredSA"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Cause, this.getRunParams().get("Cause"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.CounteredSA, this.getRunParams().get("CounteredSA"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Countered: ").append(sa.getTriggeringObject("Card")).append(", ");
|
||||
sb.append("Cause: ").append(sa.getTriggeringObject("Cause"));
|
||||
sb.append("Countered: ").append(sa.getTriggeringObject(AbilityKey.Card)).append(", ");
|
||||
sb.append("Cause: ").append(sa.getTriggeringObject(AbilityKey.Cause));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
@@ -38,16 +39,16 @@ public class TriggerCrewed extends Trigger {
|
||||
|
||||
@Override
|
||||
public void setTriggeringObjects(SpellAbility sa) {
|
||||
sa.setTriggeringObject("Vehicle", this.getRunParams().get("Vehicle"));
|
||||
sa.setTriggeringObject("Crew", this.getRunParams().get("Crew"));
|
||||
sa.setTriggeringObject(AbilityKey.Vehicle, this.getRunParams().get("Vehicle"));
|
||||
sa.setTriggeringObject(AbilityKey.Crew, this.getRunParams().get("Crew"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Vehicle: ").append(sa.getTriggeringObject("Vehicle"));
|
||||
sb.append("Vehicle: ").append(sa.getTriggeringObject(AbilityKey.Vehicle));
|
||||
sb.append(" ");
|
||||
sb.append("Crew: ").append(sa.getTriggeringObject("Crew"));
|
||||
sb.append("Crew: ").append(sa.getTriggeringObject(AbilityKey.Crew));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -49,13 +50,13 @@ public class TriggerCycled extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Cycled: ").append(sa.getTriggeringObject("Card"));
|
||||
sb.append("Cycled: ").append(sa.getTriggeringObject(AbilityKey.Card));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.util.Expressions;
|
||||
@@ -105,17 +106,17 @@ public class TriggerDamageDealtOnce extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Source", this.getRunParams().get("DamageSource"));
|
||||
sa.setTriggeringObject("Targets", this.getRunParams().get("DamageTargets"));
|
||||
sa.setTriggeringObject("DamageAmount", this.getRunParams().get("DamageAmount"));
|
||||
sa.setTriggeringObject(AbilityKey.Source, this.getRunParams().get("DamageSource"));
|
||||
sa.setTriggeringObject(AbilityKey.Targets, this.getRunParams().get("DamageTargets"));
|
||||
sa.setTriggeringObject(AbilityKey.DamageAmount, this.getRunParams().get("DamageAmount"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Damage Source: ").append(sa.getTriggeringObject("Source")).append(", ");
|
||||
sb.append("Damaged: ").append(sa.getTriggeringObject("Targets")).append(", ");
|
||||
sb.append("Amount: ").append(sa.getTriggeringObject("DamageAmount"));
|
||||
sb.append("Damage Source: ").append(sa.getTriggeringObject(AbilityKey.Source)).append(", ");
|
||||
sb.append("Damaged: ").append(sa.getTriggeringObject(AbilityKey.Targets)).append(", ");
|
||||
sb.append("Amount: ").append(sa.getTriggeringObject(AbilityKey.DamageAmount));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardUtil;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
@@ -118,19 +119,19 @@ public class TriggerDamageDone extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Source", CardUtil.getLKICopy((Card)this.getRunParams().get("DamageSource")));
|
||||
sa.setTriggeringObject("Target", this.getRunParams().get("DamageTarget"));
|
||||
sa.setTriggeringObject("DamageAmount", this.getRunParams().get("DamageAmount"));
|
||||
sa.setTriggeringObject(AbilityKey.Source, CardUtil.getLKICopy((Card)this.getRunParams().get("DamageSource")));
|
||||
sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("DamageTarget"));
|
||||
sa.setTriggeringObject(AbilityKey.DamageAmount, this.getRunParams().get("DamageAmount"));
|
||||
// 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
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Damage Source: ").append(sa.getTriggeringObject("Source")).append(", ");
|
||||
sb.append("Damaged: ").append(sa.getTriggeringObject("Target")).append(", ");
|
||||
sb.append("Amount: ").append(sa.getTriggeringObject("DamageAmount"));
|
||||
sb.append("Damage Source: ").append(sa.getTriggeringObject(AbilityKey.Source)).append(", ");
|
||||
sb.append("Damaged: ").append(sa.getTriggeringObject(AbilityKey.Target)).append(", ");
|
||||
sb.append("Amount: ").append(sa.getTriggeringObject(AbilityKey.DamageAmount));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -58,12 +59,12 @@ public class TriggerDamageDoneOnce extends Trigger {
|
||||
@Override
|
||||
public void setTriggeringObjects(SpellAbility sa) {
|
||||
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")) {
|
||||
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
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (sa.getTriggeringObject("Target") != null) {
|
||||
sb.append("Damaged: ").append(sa.getTriggeringObject("Target")).append(", ");
|
||||
if (sa.getTriggeringObject(AbilityKey.Target) != null) {
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardUtil;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
@@ -102,17 +103,17 @@ public class TriggerDamagePrevented extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Source", CardUtil.getLKICopy((Card)this.getRunParams().get("DamageSource")));
|
||||
sa.setTriggeringObject("Target", this.getRunParams().get("DamageTarget"));
|
||||
sa.setTriggeringObject("DamageAmount", this.getRunParams().get("DamageAmount"));
|
||||
sa.setTriggeringObject(AbilityKey.Source, CardUtil.getLKICopy((Card)this.getRunParams().get("DamageSource")));
|
||||
sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("DamageTarget"));
|
||||
sa.setTriggeringObject(AbilityKey.DamageAmount, this.getRunParams().get("DamageAmount"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Damage Source: ").append(sa.getTriggeringObject("Source")).append(", ");
|
||||
sb.append("Damage Target: ").append(sa.getTriggeringObject("Target")).append(", ");
|
||||
sb.append("Amount: ").append(sa.getTriggeringObject("DamageAmount"));
|
||||
sb.append("Damage Source: ").append(sa.getTriggeringObject(AbilityKey.Source)).append(", ");
|
||||
sb.append("Damage Target: ").append(sa.getTriggeringObject(AbilityKey.Target)).append(", ");
|
||||
sb.append("Amount: ").append(sa.getTriggeringObject(AbilityKey.DamageAmount));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.util.Expressions;
|
||||
@@ -93,15 +94,15 @@ public class TriggerDamagePreventedOnce extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Target", this.getRunParams().get("DamageTarget"));
|
||||
sa.setTriggeringObject("DamageAmount", this.getRunParams().get("DamageAmount"));
|
||||
sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("DamageTarget"));
|
||||
sa.setTriggeringObject(AbilityKey.DamageAmount, this.getRunParams().get("DamageAmount"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Damage Target: ").append(sa.getTriggeringObject("Target")).append(", ");
|
||||
sb.append("Amount: ").append(sa.getTriggeringObject("DamageAmount"));
|
||||
sb.append("Damage Target: ").append(sa.getTriggeringObject(AbilityKey.Target)).append(", ");
|
||||
sb.append("Amount: ").append(sa.getTriggeringObject(AbilityKey.DamageAmount));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ package forge.game.trigger;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -67,15 +68,15 @@ public class TriggerDestroyed extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject("Causer", this.getRunParams().get("Causer"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Causer, this.getRunParams().get("Causer"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Destroyed: ").append(sa.getTriggeringObject("Card")).append(", ");
|
||||
sb.append("Destroyer: ").append(sa.getTriggeringObject("Causer"));
|
||||
sb.append("Destroyed: ").append(sa.getTriggeringObject(AbilityKey.Card)).append(", ");
|
||||
sb.append("Destroyer: ").append(sa.getTriggeringObject(AbilityKey.Causer));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -60,13 +61,13 @@ public class TriggerDevoured extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Devoured", this.getRunParams().get("Devoured"));
|
||||
sa.setTriggeringObject(AbilityKey.Devoured, this.getRunParams().get("Devoured"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Devoured: ").append(sa.getTriggeringObject("Devoured"));
|
||||
sb.append("Devoured: ").append(sa.getTriggeringObject(AbilityKey.Devoured));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -85,15 +86,15 @@ public class TriggerDiscarded extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject("Cause", this.getRunParams().get("Cause"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Cause, this.getRunParams().get("Cause"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Discarded: ").append(sa.getTriggeringObject("Card")).append(", ");
|
||||
sb.append("Cause: ").append(sa.getTriggeringObject("Cause"));
|
||||
sb.append("Discarded: ").append(sa.getTriggeringObject(AbilityKey.Card)).append(", ");
|
||||
sb.append("Cause: ").append(sa.getTriggeringObject(AbilityKey.Cause));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ package forge.game.trigger;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.GameStage;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -80,14 +81,14 @@ public class TriggerDrawn extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", getRunParams().get("Card"));
|
||||
sa.setTriggeringObject("Player", getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, getRunParams().get("Player"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Player: ").append(sa.getTriggeringObject("Player"));
|
||||
sb.append("Player: ").append(sa.getTriggeringObject(AbilityKey.Player));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ package forge.game.trigger;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -61,13 +62,13 @@ public class TriggerEvolved extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, getRunParams().get("Card"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Evolved: ").append(sa.getTriggeringObject("Card"));
|
||||
sb.append("Evolved: ").append(sa.getTriggeringObject(AbilityKey.Card));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -32,14 +33,14 @@ public class TriggerExerted extends Trigger {
|
||||
|
||||
@Override
|
||||
public void setTriggeringObjects(SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject("Player", this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Exerted: ").append(sa.getTriggeringObject("Card"));
|
||||
sb.append("Exerted: ").append(sa.getTriggeringObject(AbilityKey.Card));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
|
||||
import forge.game.spellability.SpellAbility;
|
||||
@@ -96,13 +97,13 @@ public class TriggerExiled extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Exiled: ").append(sa.getTriggeringObject("Card"));
|
||||
sb.append("Exiled: ").append(sa.getTriggeringObject(AbilityKey.Card));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -71,15 +72,15 @@ public class TriggerExploited extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Exploited", this.getRunParams().get("Exploited"));
|
||||
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Exploited, this.getRunParams().get("Exploited"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Exploited: ").append(sa.getTriggeringObject("Exploited")).append(", ");
|
||||
sb.append("Exploiter: ").append(sa.getTriggeringObject("Card"));
|
||||
sb.append("Exploited: ").append(sa.getTriggeringObject(AbilityKey.Exploited)).append(", ");
|
||||
sb.append("Exploiter: ").append(sa.getTriggeringObject(AbilityKey.Card));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -61,14 +62,14 @@ public class TriggerExplores extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Explorer", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Explorer, this.getRunParams().get("Card"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
sb.append("Explorer: ").append(sa.getTriggeringObject("Explorer"));
|
||||
sb.append("Explorer: ").append(sa.getTriggeringObject(AbilityKey.Explorer));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -62,13 +63,13 @@ public class TriggerFight extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Fighter", this.getRunParams().get("Fighter"));
|
||||
sa.setTriggeringObject(AbilityKey.Fighter, this.getRunParams().get("Fighter"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Fighter: ").append(sa.getTriggeringObject("Fighter"));
|
||||
sb.append("Fighter: ").append(sa.getTriggeringObject(AbilityKey.Fighter));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -69,13 +70,13 @@ public class TriggerFlippedCoin extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Player", this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Player: ").append(sa.getTriggeringObject("Player"));
|
||||
sb.append("Player: ").append(sa.getTriggeringObject(AbilityKey.Player));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -322,13 +322,6 @@ public class TriggerHandler {
|
||||
}
|
||||
|
||||
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)) {
|
||||
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) {
|
||||
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) {
|
||||
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();
|
||||
if (playerAP == null) {
|
||||
@@ -383,19 +376,19 @@ public class TriggerHandler {
|
||||
// Static triggers
|
||||
for (final Trigger t : Lists.newArrayList(activeTriggers)) {
|
||||
if (t.isStatic() && canRunTrigger(t, mode, runParams)) {
|
||||
runSingleTrigger(t, runParams);
|
||||
runSingleTrigger(t, toStringMap(runParams));
|
||||
|
||||
checkStatics = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (runParams.containsKey("Destination")) {
|
||||
if (runParams.containsKey(AbilityKey.Destination)) {
|
||||
// Check static abilities when a card enters the battlefield
|
||||
if (runParams.get("Destination") instanceof String) {
|
||||
final String type = (String) runParams.get("Destination");
|
||||
if (runParams.get(AbilityKey.Destination) instanceof String) {
|
||||
final String type = (String) runParams.get(AbilityKey.Destination);
|
||||
checkStatics |= type.equals("Battlefield");
|
||||
} else {
|
||||
final ZoneType zone = (ZoneType) runParams.get("Destination");
|
||||
final ZoneType zone = (ZoneType) runParams.get(AbilityKey.Destination);
|
||||
checkStatics |= zone.equals(ZoneType.Battlefield);
|
||||
}
|
||||
}
|
||||
@@ -425,8 +418,9 @@ public class TriggerHandler {
|
||||
|
||||
private boolean runNonStaticTriggersForPlayer(final Player player, final TriggerWaiting wt, final List<Trigger> delayedTriggersWorkingCopy ) {
|
||||
|
||||
final TriggerType mode = wt.getMode();
|
||||
final Map<String, Object> runParams = wt.getParams();
|
||||
final TriggerType mode = wt.getMode();
|
||||
final Map<AbilityKey, Object> runParams = wt.getParams();
|
||||
final Map<String, Object> stringRunParams = toStringMap(runParams);
|
||||
final List<Trigger> triggers = wt.getTriggers() != null ? wt.getTriggers() : activeTriggers;
|
||||
|
||||
Card card = null;
|
||||
@@ -434,18 +428,20 @@ public class TriggerHandler {
|
||||
|
||||
for (final Trigger t : triggers) {
|
||||
if (!t.isStatic() && t.getHostCard().getController().equals(player) && canRunTrigger(t, mode, runParams)) {
|
||||
if (runParams.containsKey("Card") && runParams.get("Card") instanceof Card) {
|
||||
card = (Card) runParams.get("Card");
|
||||
if (runParams.containsKey("Destination") && !ZoneType.Battlefield.name().equals(runParams.get("Destination"))) {
|
||||
if (runParams.containsKey(AbilityKey.Card) && runParams.get(AbilityKey.Card) instanceof Card) {
|
||||
card = (Card) runParams.get(AbilityKey.Card);
|
||||
if (runParams.containsKey(AbilityKey.Destination)
|
||||
&& !ZoneType.Battlefield.name().equals(runParams.get(AbilityKey.Destination))) {
|
||||
card = CardUtil.getLKICopy(card);
|
||||
if (card.isCloned() || !t.isIntrinsic()) {
|
||||
runParams.put("Card", card);
|
||||
runParams.put(AbilityKey.Card, card);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (t.getMapParams().containsKey("OncePerEffect")) {
|
||||
SpellAbilityStackInstance si = (SpellAbilityStackInstance) runParams.get("SpellAbilityStackInstance");
|
||||
SpellAbilityStackInstance si =
|
||||
(SpellAbilityStackInstance) runParams.get(AbilityKey.SpellAbilityStackInstance);
|
||||
if (si != null) {
|
||||
si.addOncePerEffectTrigger(t);
|
||||
}
|
||||
@@ -454,7 +450,7 @@ public class TriggerHandler {
|
||||
int x = 1 + handlePanharmonicon(t, runParams, player);
|
||||
|
||||
for (int i = 0; i < x; ++i) {
|
||||
runSingleTrigger(t, runParams);
|
||||
runSingleTrigger(t, stringRunParams);
|
||||
}
|
||||
checkStatics = true;
|
||||
}
|
||||
@@ -463,7 +459,7 @@ public class TriggerHandler {
|
||||
for (final Trigger deltrig : delayedTriggersWorkingCopy) {
|
||||
if (deltrig.getHostCard().getController().equals(player)) {
|
||||
if (isTriggerActive(deltrig) && canRunTrigger(deltrig, mode, runParams)) {
|
||||
runSingleTrigger(deltrig, runParams);
|
||||
runSingleTrigger(deltrig, stringRunParams);
|
||||
delayedTriggers.remove(deltrig);
|
||||
}
|
||||
}
|
||||
@@ -505,7 +501,7 @@ public class TriggerHandler {
|
||||
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) {
|
||||
return false; // Not the right mode.
|
||||
}
|
||||
@@ -518,7 +514,7 @@ public class TriggerHandler {
|
||||
return false; // Conditions aren't right.
|
||||
}
|
||||
|
||||
if (!regtrig.performTest(runParams)) {
|
||||
if (!regtrig.performTest(toStringMap(runParams))) {
|
||||
return false; // Test failed.
|
||||
}
|
||||
if (regtrig.isSuppressed()) {
|
||||
@@ -535,10 +531,10 @@ public class TriggerHandler {
|
||||
// Torpor Orb check
|
||||
if (game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noCreatureETBTriggers)
|
||||
&& !regtrig.isStatic() && mode.equals(TriggerType.ChangesZone)) {
|
||||
if (runParams.get("Destination") instanceof String) {
|
||||
final String dest = (String) runParams.get("Destination");
|
||||
if (dest.equals("Battlefield") && runParams.get("Card") instanceof Card) {
|
||||
final Card card = (Card) runParams.get("Card");
|
||||
if (runParams.get(AbilityKey.Destination) instanceof String) {
|
||||
final String dest = (String) runParams.get(AbilityKey.Destination);
|
||||
if (dest.equals("Battlefield") && runParams.get(AbilityKey.Card) instanceof Card) {
|
||||
final Card card = (Card) runParams.get(AbilityKey.Card);
|
||||
if (card.isCreature()) {
|
||||
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();
|
||||
|
||||
// not a changesZone trigger or changesZoneAll
|
||||
@@ -727,10 +723,10 @@ public class TriggerHandler {
|
||||
final String kw = ki.getOriginal();
|
||||
if (kw.startsWith("Panharmonicon")) {
|
||||
// Enter the Battlefield Trigger
|
||||
if (runParams.get("Destination") instanceof String) {
|
||||
final String dest = (String) runParams.get("Destination");
|
||||
if ("Battlefield".equals(dest) && runParams.get("Card") instanceof Card) {
|
||||
final Card card = (Card) runParams.get("Card");
|
||||
if (runParams.get(AbilityKey.Destination) instanceof String) {
|
||||
final String dest = (String) runParams.get(AbilityKey.Destination);
|
||||
if ("Battlefield".equals(dest) && runParams.get(AbilityKey.Card) instanceof Card) {
|
||||
final Card card = (Card) runParams.get(AbilityKey.Card);
|
||||
final String valid = kw.split(":")[1];
|
||||
if (card.isValid(valid.split(","), p, ck, null)) {
|
||||
n++;
|
||||
@@ -739,12 +735,12 @@ public class TriggerHandler {
|
||||
}
|
||||
} else if (kw.startsWith("Dieharmonicon")) {
|
||||
// 700.4. The term dies means "is put into a graveyard from the battlefield."
|
||||
if (runParams.get("Origin") instanceof String) {
|
||||
final String origin = (String) runParams.get("Origin");
|
||||
if ("Battlefield".equals(origin) && runParams.get("Destination") instanceof String) {
|
||||
final String dest = (String) runParams.get("Destination");
|
||||
if ("Graveyard".equals(dest) && runParams.get("Card") instanceof Card) {
|
||||
final Card card = (Card) runParams.get("Card");
|
||||
if (runParams.get(AbilityKey.Destination) instanceof String) {
|
||||
final String origin = (String) runParams.get(AbilityKey.Destination);
|
||||
if ("Battlefield".equals(origin) && runParams.get(AbilityKey.Destination) instanceof String) {
|
||||
final String dest = (String) runParams.get(AbilityKey.Destination);
|
||||
if ("Graveyard".equals(dest) && runParams.get(AbilityKey.Card) instanceof Card) {
|
||||
final Card card = (Card) runParams.get(AbilityKey.Card);
|
||||
final String valid = kw.split(":")[1];
|
||||
if (card.isValid(valid.split(","), p, ck, null)) {
|
||||
n++;
|
||||
@@ -756,7 +752,7 @@ public class TriggerHandler {
|
||||
}
|
||||
}
|
||||
} 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
|
||||
for (final Card ck : p.getCardsIn(ZoneType.Battlefield)) {
|
||||
for (final KeywordInterface ki : ck.getKeywords()) {
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
@@ -52,14 +53,14 @@ public class TriggerInvestigated extends Trigger {
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Player: ").append(sa.getTriggeringObject("Player"));
|
||||
sb.append("Player: ").append(sa.getTriggeringObject(AbilityKey.Player));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Player", this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -51,13 +52,13 @@ public class TriggerLandPlayed extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Land played: ").append(sa.getTriggeringObject("Card"));
|
||||
sb.append("Land played: ").append(sa.getTriggeringObject(AbilityKey.Card));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -73,15 +74,15 @@ public class TriggerLifeGained extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("LifeAmount", getRunParams().get("LifeAmount"));
|
||||
sa.setTriggeringObject("Player", getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.LifeAmount, getRunParams().get("LifeAmount"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, getRunParams().get("Player"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Player: ").append(sa.getTriggeringObject("Player")).append(", ");
|
||||
sb.append("Gained Amount: ").append(sa.getTriggeringObject("LifeAmount"));
|
||||
sb.append("Player: ").append(sa.getTriggeringObject(AbilityKey.Player)).append(", ");
|
||||
sb.append("Gained Amount: ").append(sa.getTriggeringObject(AbilityKey.LifeAmount));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ package forge.game.trigger;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -70,15 +71,15 @@ public class TriggerLifeLost extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("LifeAmount", this.getRunParams().get("LifeAmount"));
|
||||
sa.setTriggeringObject("Player", this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.LifeAmount, this.getRunParams().get("LifeAmount"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Player: ").append(sa.getTriggeringObject("Player")).append(", ");
|
||||
sb.append("Lost Amount: ").append(sa.getTriggeringObject("LifeAmount"));
|
||||
sb.append("Player: ").append(sa.getTriggeringObject(AbilityKey.Player)).append(", ");
|
||||
sb.append("Lost Amount: ").append(sa.getTriggeringObject(AbilityKey.LifeAmount));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -38,13 +39,13 @@ public class TriggerLosesGame extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Player", this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Player: ").append(sa.getTriggeringObject("Player"));
|
||||
sb.append("Player: ").append(sa.getTriggeringObject(AbilityKey.Player));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -69,14 +70,14 @@ public class TriggerPayCumulativeUpkeep extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject("PayingMana", this.getRunParams().get("PayingMana"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.PayingMana, this.getRunParams().get("PayingMana"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Mana: ").append(sa.getTriggeringObject("PayingMana"));
|
||||
sb.append("Mana: ").append(sa.getTriggeringObject(AbilityKey.PayingMana));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -69,7 +70,7 @@ public class TriggerPayEcho extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -60,15 +61,15 @@ public class TriggerPayLife extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("LifeAmount", getRunParams().get("LifeAmount"));
|
||||
sa.setTriggeringObject("Player", getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.LifeAmount, getRunParams().get("LifeAmount"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, getRunParams().get("Player"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Player: ").append(sa.getTriggeringObject("Player")).append(", ");
|
||||
sb.append("paid Amount: ").append(sa.getTriggeringObject("LifeAmount"));
|
||||
sb.append("Player: ").append(sa.getTriggeringObject(AbilityKey.Player)).append(", ");
|
||||
sb.append("paid Amount: ").append(sa.getTriggeringObject(AbilityKey.LifeAmount));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -59,13 +60,13 @@ public class TriggerPhase extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Player", this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Phase: ").append(sa.getTriggeringObject("Player"));
|
||||
sb.append("Phase: ").append(sa.getTriggeringObject(AbilityKey.Player));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -27,13 +28,13 @@ public class TriggerPhaseIn extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Phased In: ").append(sa.getTriggeringObject("Card"));
|
||||
sb.append("Phased In: ").append(sa.getTriggeringObject(AbilityKey.Card));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -35,13 +36,13 @@ public class TriggerPhaseOut extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Phased Out: ").append(sa.getTriggeringObject("Card"));
|
||||
sb.append("Phased Out: ").append(sa.getTriggeringObject(AbilityKey.Card));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.PlanarDice;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -55,13 +56,13 @@ public class TriggerPlanarDice extends Trigger {
|
||||
*/
|
||||
@Override
|
||||
public void setTriggeringObjects(SpellAbility sa) {
|
||||
sa.setTriggeringObject("Player", this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Roller: ").append(sa.getTriggeringObject("Player"));
|
||||
sb.append("Roller: ").append(sa.getTriggeringObject(AbilityKey.Player));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
@@ -52,13 +53,13 @@ public class TriggerPlaneswalkedFrom extends Trigger {
|
||||
*/
|
||||
@Override
|
||||
public void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Cards", this.getRunParams().get("Cards"));
|
||||
sa.setTriggeringObject(AbilityKey.Cards, this.getRunParams().get("Cards"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Planeswalked From: ").append(sa.getTriggeringObject("Cards"));
|
||||
sb.append("Planeswalked From: ").append(sa.getTriggeringObject(AbilityKey.Cards));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -52,13 +53,13 @@ public class TriggerPlaneswalkedTo extends Trigger {
|
||||
*/
|
||||
@Override
|
||||
public void setTriggeringObjects(SpellAbility sa) {
|
||||
sa.setTriggeringObject("Cards", this.getRunParams().get("Cards"));
|
||||
sa.setTriggeringObject(AbilityKey.Cards, this.getRunParams().get("Cards"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Planeswalked To: ").append(sa.getTriggeringObject("Cards"));
|
||||
sb.append("Planeswalked To: ").append(sa.getTriggeringObject(AbilityKey.Cards));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ package forge.game.trigger;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -67,14 +68,14 @@ public class TriggerRegenerated extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject("Cause", this.getRunParams().get("Cause"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Cause, this.getRunParams().get("Cause"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
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"));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package forge.game.trigger;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -31,13 +32,13 @@ public class TriggerRevealed extends Trigger {
|
||||
|
||||
@Override
|
||||
public void setTriggeringObjects(SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Revealed: ").append(sa.getTriggeringObject("Card"));
|
||||
sb.append("Revealed: ").append(sa.getTriggeringObject(AbilityKey.Card));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.cost.IndividualCostPaymentInstance;
|
||||
import forge.game.player.Player;
|
||||
@@ -125,13 +126,13 @@ public class TriggerSacrificed extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Sacrificed: ").append(sa.getTriggeringObject("Card"));
|
||||
sb.append("Sacrificed: ").append(sa.getTriggeringObject(AbilityKey.Card));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -61,13 +62,13 @@ public class TriggerScry extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Player", this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Scryer: ").append(sa.getTriggeringObject("Player"));
|
||||
sb.append("Scryer: ").append(sa.getTriggeringObject(AbilityKey.Player));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ package forge.game.trigger;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
@@ -73,13 +74,13 @@ public class TriggerSearchedLibrary extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Player", this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Searcher: ").append(sa.getTriggeringObject("Player"));
|
||||
sb.append("Searcher: ").append(sa.getTriggeringObject(AbilityKey.Player));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.card.CardType;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -76,7 +77,7 @@ public class TriggerSetInMotion extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Scheme", this.getRunParams().get("Scheme"));
|
||||
sa.setTriggeringObject(AbilityKey.Scheme, this.getRunParams().get("Scheme"));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -73,13 +74,13 @@ public class TriggerShuffled extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Player", this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Shuffler: ").append(sa.getTriggeringObject("Player"));
|
||||
sb.append("Shuffler: ").append(sa.getTriggeringObject(AbilityKey.Player));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.google.common.collect.Sets;
|
||||
import forge.game.Game;
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.GameObject;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
import forge.game.card.CardLists;
|
||||
@@ -265,23 +266,23 @@ public class TriggerSpellAbilityCast extends Trigger {
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
final SpellAbility castSA = (SpellAbility) getRunParams().get("CastSA");
|
||||
final SpellAbilityStackInstance si = sa.getHostCard().getGame().getStack().getInstanceFromSpellAbility(castSA);
|
||||
sa.setTriggeringObject("Card", castSA.getHostCard());
|
||||
sa.setTriggeringObject("SpellAbility", castSA);
|
||||
sa.setTriggeringObject("StackInstance", si);
|
||||
sa.setTriggeringObject("SpellAbilityTargetingCards", (si != null ? si.getSpellAbility(true) : castSA).getTargets().getTargetCards());
|
||||
sa.setTriggeringObject("Player", getRunParams().get("Player"));
|
||||
sa.setTriggeringObject("Activator", getRunParams().get("Activator"));
|
||||
sa.setTriggeringObject("CurrentStormCount", getRunParams().get("CurrentStormCount"));
|
||||
sa.setTriggeringObject("CurrentCastSpells", getRunParams().get("CurrentCastSpells"));
|
||||
sa.setTriggeringObject("CastSACMC", getRunParams().get("CastSACMC"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, castSA.getHostCard());
|
||||
sa.setTriggeringObject(AbilityKey.SpellAbility, castSA);
|
||||
sa.setTriggeringObject(AbilityKey.StackInstance, si);
|
||||
sa.setTriggeringObject(AbilityKey.SpellAbilityTargetingCards, (si != null ? si.getSpellAbility(true) : castSA).getTargets().getTargetCards());
|
||||
sa.setTriggeringObject(AbilityKey.Player, getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.Activator, getRunParams().get("Activator"));
|
||||
sa.setTriggeringObject(AbilityKey.CurrentStormCount, getRunParams().get("CurrentStormCount"));
|
||||
sa.setTriggeringObject(AbilityKey.CurrentCastSpells, getRunParams().get("CurrentCastSpells"));
|
||||
sa.setTriggeringObject(AbilityKey.CastSACMC, getRunParams().get("CastSACMC"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Card: ").append(sa.getTriggeringObject("Card")).append(", ");
|
||||
sb.append("Activator: ").append(sa.getTriggeringObject("Activator")).append(", ");
|
||||
sb.append("SpellAbility: ").append(sa.getTriggeringObject("SpellAbility"));
|
||||
sb.append("Card: ").append(sa.getTriggeringObject(AbilityKey.Card)).append(", ");
|
||||
sb.append("Activator: ").append(sa.getTriggeringObject(AbilityKey.Activator)).append(", ");
|
||||
sb.append("SpellAbility: ").append(sa.getTriggeringObject(AbilityKey.SpellAbility));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ package forge.game.trigger;
|
||||
|
||||
import java.util.Map;
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.SpellAbilityStackInstance;
|
||||
@@ -92,17 +93,17 @@ public class TriggerSpellAbilityCopy extends Trigger {
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
final SpellAbility copySA = (SpellAbility) getRunParams().get("CopySA");
|
||||
final SpellAbilityStackInstance si = sa.getHostCard().getGame().getStack().getInstanceFromSpellAbility(copySA);
|
||||
sa.setTriggeringObject("Card", copySA.getHostCard());
|
||||
sa.setTriggeringObject("SpellAbility", copySA);
|
||||
sa.setTriggeringObject("StackInstance", si);
|
||||
sa.setTriggeringObject(AbilityKey.Card, copySA.getHostCard());
|
||||
sa.setTriggeringObject(AbilityKey.SpellAbility, copySA);
|
||||
sa.setTriggeringObject(AbilityKey.StackInstance, si);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Card: ").append(sa.getTriggeringObject("Card")).append(", ");
|
||||
sb.append("Activator: ").append(sa.getTriggeringObject("Activator")).append(", ");
|
||||
sb.append("SpellAbility: ").append(sa.getTriggeringObject("SpellAbility"));
|
||||
sb.append("Card: ").append(sa.getTriggeringObject(AbilityKey.Card)).append(", ");
|
||||
sb.append("Activator: ").append(sa.getTriggeringObject(AbilityKey.Activator)).append(", ");
|
||||
sb.append("SpellAbility: ").append(sa.getTriggeringObject(AbilityKey.SpellAbility));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
@@ -48,14 +49,14 @@ public class TriggerSurveil extends Trigger {
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Player: ").append(sa.getTriggeringObject("Player"));
|
||||
sb.append("Player: ").append(sa.getTriggeringObject(AbilityKey.Player));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Player", this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -77,13 +78,13 @@ public class TriggerTaps extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, getRunParams().get("Card"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Tapped: ").append(sa.getTriggeringObject("Card"));
|
||||
sb.append("Tapped: ").append(sa.getTriggeringObject(AbilityKey.Card));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.card.MagicColor;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
@@ -104,16 +105,16 @@ public class TriggerTapsForMana extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Card", this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject("Player", this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject("Produced", this.getRunParams().get("Produced"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.Produced, this.getRunParams().get("Produced"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Tapped for Mana: ").append(sa.getTriggeringObject("Card"));
|
||||
sb.append("Produced: ").append(sa.getTriggeringObject("Produced"));
|
||||
sb.append("Tapped for Mana: ").append(sa.getTriggeringObject(AbilityKey.Card));
|
||||
sb.append("Produced: ").append(sa.getTriggeringObject(AbilityKey.Produced));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -58,13 +59,13 @@ public class TriggerTransformed extends Trigger {
|
||||
*/
|
||||
@Override
|
||||
public void setTriggeringObjects(SpellAbility sa) {
|
||||
sa.setTriggeringObject("Transformer", this.getRunParams().get("Transformer"));
|
||||
sa.setTriggeringObject(AbilityKey.Transformer, this.getRunParams().get("Transformer"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Transformed: ").append(sa.getTriggeringObject("Transformer"));
|
||||
sb.append("Transformed: ").append(sa.getTriggeringObject(AbilityKey.Transformer));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package forge.game.trigger;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
@@ -20,13 +21,13 @@ public class TriggerTurnBegin extends Trigger {
|
||||
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Player", this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Player: ").append(sa.getTriggeringObject("Player"));
|
||||
sb.append("Player: ").append(sa.getTriggeringObject(AbilityKey.Player));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user