mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 04:08:01 +00:00
push down toStringMap further, which required using AbilityKey inside TriggerWaiting and several other places.
This commit is contained in:
@@ -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()) {
|
||||
|
||||
@@ -10,8 +10,9 @@ public enum AbilityKey {
|
||||
AbilityMana("AbilityMana"),
|
||||
Activator("Activator"),
|
||||
Affected("Affected"),
|
||||
Attach("Attach"),
|
||||
AllVotes("AllVotes"),
|
||||
Amount("Amount"),
|
||||
Attach("Attach"),
|
||||
AttachSource("AttachSource"),
|
||||
AttachTarget("AttachTarget"),
|
||||
Attacked("Attacked"),
|
||||
@@ -51,14 +52,12 @@ public enum AbilityKey {
|
||||
Devoured("Devoured"),
|
||||
EchoPaid("EchoPaid"),
|
||||
Exploited("Exploited"),
|
||||
Explorer("Explorer"),
|
||||
Event("Event"),
|
||||
Fighter("Fighter"),
|
||||
FirstTime("FirstTime"),
|
||||
Fizzle("Fizzle"),
|
||||
IsCombatDamage("IsCombatDamage"),
|
||||
PayingMana("PayingMana"),
|
||||
Phase("Phase"),
|
||||
Player("Player"),
|
||||
IndividualCostPaymentInstance("IndividualCostPaymentInstance"),
|
||||
IsMadness("IsMadness"),
|
||||
LifeAmount("LifeAmount"),
|
||||
@@ -71,14 +70,23 @@ public enum AbilityKey {
|
||||
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"),
|
||||
@@ -99,10 +107,22 @@ 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) {
|
||||
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) {
|
||||
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) {
|
||||
@@ -641,12 +643,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 +697,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 +709,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 +779,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 +1006,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 +1017,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 +1028,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 +1254,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 +1392,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 +1610,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()) {
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -948,7 +949,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")) {
|
||||
|
||||
@@ -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;
|
||||
@@ -411,7 +412,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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 Map<AbilityKey, Object> triggeringObjects = AbilityKey.newMap();
|
||||
|
||||
private HashMap<String, Object> replacingObjects = Maps.newHashMap();
|
||||
|
||||
@@ -552,19 +553,19 @@ 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() {
|
||||
|
||||
@@ -92,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();
|
||||
@@ -364,7 +364,7 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean addTriggeringObject(String trigObj, Object value) {
|
||||
public boolean addTriggeringObject(AbilityKey trigObj, Object value) {
|
||||
if (!triggeringObjects.containsKey(trigObj)) {
|
||||
triggeringObjects.put(trigObj, value);
|
||||
return true;
|
||||
@@ -372,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;
|
||||
@@ -380,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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -248,7 +248,7 @@ public class TriggerHandler {
|
||||
|
||||
List<Trigger> trigger = Lists.newArrayList();
|
||||
for (final Trigger t : activeTriggers) {
|
||||
if (canRunTrigger(t,wt.getMode(),toStringMap(wt.getParams()))) {
|
||||
if (canRunTrigger(t,wt.getMode(),wt.getParams())) {
|
||||
trigger.add(t);
|
||||
}
|
||||
}
|
||||
@@ -337,7 +337,7 @@ public class TriggerHandler {
|
||||
|
||||
private void runStateTrigger(final Map<AbilityKey, Object> runParams) {
|
||||
for (final Trigger t: activeTriggers) {
|
||||
if (canRunTrigger(t, TriggerType.Always, toStringMap(runParams))) {
|
||||
if (canRunTrigger(t, TriggerType.Always, runParams)) {
|
||||
runSingleTrigger(t, toStringMap(runParams));
|
||||
}
|
||||
}
|
||||
@@ -375,7 +375,7 @@ public class TriggerHandler {
|
||||
|
||||
// Static triggers
|
||||
for (final Trigger t : Lists.newArrayList(activeTriggers)) {
|
||||
if (t.isStatic() && canRunTrigger(t, mode, toStringMap(runParams))) {
|
||||
if (t.isStatic() && canRunTrigger(t, mode, runParams)) {
|
||||
runSingleTrigger(t, toStringMap(runParams));
|
||||
|
||||
checkStatics = true;
|
||||
@@ -427,7 +427,7 @@ public class TriggerHandler {
|
||||
boolean checkStatics = false;
|
||||
|
||||
for (final Trigger t : triggers) {
|
||||
if (!t.isStatic() && t.getHostCard().getController().equals(player) && canRunTrigger(t, mode, stringRunParams)) {
|
||||
if (!t.isStatic() && t.getHostCard().getController().equals(player) && canRunTrigger(t, mode, runParams)) {
|
||||
if (runParams.containsKey(AbilityKey.Card) && runParams.get(AbilityKey.Card) instanceof Card) {
|
||||
card = (Card) runParams.get(AbilityKey.Card);
|
||||
if (runParams.containsKey(AbilityKey.Destination)
|
||||
@@ -458,7 +458,7 @@ public class TriggerHandler {
|
||||
|
||||
for (final Trigger deltrig : delayedTriggersWorkingCopy) {
|
||||
if (deltrig.getHostCard().getController().equals(player)) {
|
||||
if (isTriggerActive(deltrig) && canRunTrigger(deltrig, mode, stringRunParams)) {
|
||||
if (isTriggerActive(deltrig) && canRunTrigger(deltrig, mode, runParams)) {
|
||||
runSingleTrigger(deltrig, stringRunParams);
|
||||
delayedTriggers.remove(deltrig);
|
||||
}
|
||||
@@ -501,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.
|
||||
}
|
||||
@@ -514,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()) {
|
||||
@@ -531,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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 TriggerTurnFaceUp 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("Turn Face up: ").append(sa.getTriggeringObject("Card"));
|
||||
sb.append("Turn Face up: ").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;
|
||||
|
||||
@@ -72,15 +73,15 @@ public class TriggerUnattach extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject("Object", getRunParams().get("Object"));
|
||||
sa.setTriggeringObject("Attach", getRunParams().get("Attach"));
|
||||
sa.setTriggeringObject(AbilityKey.Object, getRunParams().get("Object"));
|
||||
sa.setTriggeringObject(AbilityKey.Attach, getRunParams().get("Attach"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Object: ").append(sa.getTriggeringObject("Object")).append(", ");
|
||||
sb.append("Attachment: ").append(sa.getTriggeringObject("Attach"));
|
||||
sb.append("Object: ").append(sa.getTriggeringObject(AbilityKey.Object)).append(", ");
|
||||
sb.append("Attachment: ").append(sa.getTriggeringObject(AbilityKey.Attach));
|
||||
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;
|
||||
|
||||
@@ -66,13 +67,13 @@ public class TriggerUntaps 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("Untapped: ").append(sa.getTriggeringObject("Card"));
|
||||
sb.append("Untapped: ").append(sa.getTriggeringObject(AbilityKey.Card));
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ import java.util.Map;
|
||||
import com.google.common.collect.ArrayListMultimap;
|
||||
import com.google.common.collect.ListMultimap;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
@@ -65,13 +66,13 @@ public class TriggerVote extends Trigger {
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
@SuppressWarnings("unchecked")
|
||||
final ListMultimap<Object, Player> votes = (ArrayListMultimap<Object, Player>) this.getRunParams().get("AllVotes");
|
||||
sa.setTriggeringObject("OtherVoters", getVoters(this.getHostCard().getController(), votes, true, true));
|
||||
sa.setTriggeringObject(AbilityKey.OtherVoters, getVoters(this.getHostCard().getController(), votes, true, true));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Voters: ").append(sa.getTriggeringObject("OtherVoters"));
|
||||
sb.append("Voters: ").append(sa.getTriggeringObject(AbilityKey.OtherVoters));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ package forge.game.trigger;
|
||||
import forge.card.mana.ManaCost;
|
||||
import forge.game.Game;
|
||||
import forge.game.GameObject;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.ApiType;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
@@ -101,27 +102,27 @@ public class WrappedAbility extends Ability {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> getTriggeringObjects() {
|
||||
public Map<AbilityKey, Object> getTriggeringObjects() {
|
||||
return sa.getTriggeringObjects();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTriggeringObjects(final Map<String, Object> triggeredObjects) {
|
||||
public void setTriggeringObjects(final Map<AbilityKey, Object> triggeredObjects) {
|
||||
sa.setTriggeringObjects(triggeredObjects);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTriggeringObject(final String type, final Object o) {
|
||||
public void setTriggeringObject(final AbilityKey type, final Object o) {
|
||||
sa.setTriggeringObject(type, o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getTriggeringObject(final String type) {
|
||||
public Object getTriggeringObject(final AbilityKey type) {
|
||||
return sa.getTriggeringObject(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasTriggeringObject(final String type) {
|
||||
public boolean hasTriggeringObject(final AbilityKey type) {
|
||||
return sa.hasTriggeringObject(type);
|
||||
}
|
||||
|
||||
@@ -532,8 +533,8 @@ public class WrappedAbility extends Ability {
|
||||
}
|
||||
}
|
||||
}
|
||||
final Map<String, Object> triggerMap = new HashMap<>(sa.getTriggeringObjects());
|
||||
for (Entry<String, Object> ev : triggerMap.entrySet()) {
|
||||
final Map<AbilityKey, Object> triggerMap = AbilityKey.newMap(sa.getTriggeringObjects());
|
||||
for (Entry<AbilityKey, Object> ev : triggerMap.entrySet()) {
|
||||
if (ev.getValue() instanceof Card) {
|
||||
Card card = (Card) ev.getValue();
|
||||
Card current = game.getCardState(card);
|
||||
|
||||
@@ -21,6 +21,7 @@ import forge.deck.DeckSection;
|
||||
import forge.events.UiEventNextGameDecision;
|
||||
import forge.game.*;
|
||||
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.*;
|
||||
@@ -631,15 +632,15 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont
|
||||
"CARDNAME", regtrig.getHostCard().getName()));
|
||||
buildQuestion.append(")");
|
||||
}
|
||||
final Map<String, Object> tos = sa.getTriggeringObjects();
|
||||
if (tos.containsKey("Attacker")) {
|
||||
buildQuestion.append("\nAttacker: ").append(tos.get("Attacker"));
|
||||
final Map<AbilityKey, Object> tos = sa.getTriggeringObjects();
|
||||
if (tos.containsKey(AbilityKey.Attacker)) {
|
||||
buildQuestion.append("\nAttacker: ").append(tos.get(AbilityKey.Attacker));
|
||||
}
|
||||
if (tos.containsKey("Card")) {
|
||||
final Card card = (Card) tos.get("Card");
|
||||
if (tos.containsKey(AbilityKey.Card)) {
|
||||
final Card card = (Card) tos.get(AbilityKey.Card);
|
||||
if (card != null && (card.getController() == player || game.getZoneOf(card) == null
|
||||
|| game.getZoneOf(card).getZoneType().isKnown())) {
|
||||
buildQuestion.append("\nTriggered by: ").append(tos.get("Card"));
|
||||
buildQuestion.append("\nTriggered by: ").append(tos.get(AbilityKey.Card));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user