From cb2d1a877793891c91cf3375ec78f16703cc72f7 Mon Sep 17 00:00:00 2001 From: Hanmac Date: Fri, 12 May 2017 04:52:08 +0000 Subject: [PATCH] Aftermath: now a property of SpellAbility the Game now knows to exile the card even if it got countered. --- .../java/forge/game/card/CardFactoryUtil.java | 10 ++-------- .../forge/game/spellability/SpellAbility.java | 15 +++++++++++++++ .../spellability/SpellAbilityRestriction.java | 2 +- .../src/main/java/forge/game/zone/MagicStack.java | 3 +++ 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index ffe94b36bef..82847fdbf2c 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -3536,15 +3536,9 @@ public class CardFactoryUtil { // only target RightSplit of it final SpellAbility origSA = card.getState(CardStateName.RightSplit).getFirstAbility(); + origSA.setAftermath(true); origSA.getRestrictions().setZone(ZoneType.Graveyard); - - // Add the Exile Self Part - String dbStr = "DB$ ChangeZone | Origin$ Stack | Destination$ Exile"; - - final AbilitySub newSA = (AbilitySub) AbilityFactory.getAbility(dbStr.toString(), card); - - // append to original SA - origSA.appendSubAbility(newSA); + // The Exile part is done by the System itself } else if (keyword.startsWith("Awaken")) { final String[] k = keyword.split(":"); final String counters = k[1]; diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java index cec27c99bbb..8c00f60bc2a 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java @@ -97,6 +97,7 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit private List triggerRemembered = Lists.newArrayList(); private boolean flashBackAbility = false; + private boolean aftermath = false; private boolean cycling = false; private boolean delve = false; private boolean dash = false; @@ -736,6 +737,20 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit return flashBackAbility; } + /** + * @return the aftermath + */ + public boolean isAftermath() { + return aftermath; + } + + /** + * @param aftermath the aftermath to set + */ + public void setAftermath(boolean aftermath) { + this.aftermath = aftermath; + } + public boolean isOutlast() { return outlast; } diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbilityRestriction.java b/forge-game/src/main/java/forge/game/spellability/SpellAbilityRestriction.java index 8fc6e7b6674..30f037a5e2f 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbilityRestriction.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbilityRestriction.java @@ -238,7 +238,7 @@ public class SpellAbilityRestriction extends SpellAbilityVariables { } // TODO: this is an exception for Aftermath. Needs to be somehow generalized. - if (this.getZone() != ZoneType.Graveyard && sa.getHostCard().hasKeyword("Aftermath") && sa.isRightSplit()) { + if (this.getZone() != ZoneType.Graveyard && sa.isAftermath() && sa.isRightSplit()) { return false; } diff --git a/forge-game/src/main/java/forge/game/zone/MagicStack.java b/forge-game/src/main/java/forge/game/zone/MagicStack.java index c7097735792..cf2a6bede08 100644 --- a/forge-game/src/main/java/forge/game/zone/MagicStack.java +++ b/forge-game/src/main/java/forge/game/zone/MagicStack.java @@ -583,6 +583,9 @@ public class MagicStack /* extends MyObservable */ implements Iterable