staticAbilities = c.getStaticAbilities();
for (final StaticAbility stAb : staticAbilities) {
manaCost = stAb.applyAbility("ReduceCost", spell, manaCost);
}
- }
+ }*/
return manaCost;
} // GetSpellCostChange
diff --git a/src/main/java/forge/GameActionUtil.java b/src/main/java/forge/GameActionUtil.java
index 8b3a336d748..40d7bebd5fa 100644
--- a/src/main/java/forge/GameActionUtil.java
+++ b/src/main/java/forge/GameActionUtil.java
@@ -859,8 +859,6 @@ public final class GameActionUtil {
GameActionUtil.playerCombatDamageScalpelexis(c);
} else if (c.getName().equals("Spawnwrithe")) {
GameActionUtil.playerCombatDamageSpawnwrithe(c);
- } else if (c.getName().equals("Treva, the Renewer")) {
- GameActionUtil.playerCombatDamageTreva(c);
} else if (c.isEnchantedBy("Celestial Mantle")) {
GameActionUtil.executeCelestialMantle(c);
}
@@ -902,24 +900,6 @@ public final class GameActionUtil {
}
}
- /**
- *
- * playerCombatDamageTreva.
- *
- *
- * @param c
- * a {@link forge.Card} object.
- */
- private static void playerCombatDamageTreva(final Card c) {
- final SpellAbility[] sa = c.getSpellAbility();
- if (c.getController().isHuman()) {
- Singletons.getModel().getGameAction().playSpellAbility(sa[1]);
- } else {
- ComputerUtil.playNoStack(sa[1]);
- }
-
- }
-
/**
*
* playerCombatDamageWhirlingDervish.
diff --git a/src/main/java/forge/StaticEffects.java b/src/main/java/forge/StaticEffects.java
index c979ab0f19e..dc932c99933 100644
--- a/src/main/java/forge/StaticEffects.java
+++ b/src/main/java/forge/StaticEffects.java
@@ -158,7 +158,7 @@ public class StaticEffects {
}
// remove abilities
- if (params.containsKey("AddAbility")) {
+ if (params.containsKey("AddAbility") || params.containsKey("GainsAbilitiesOf")) {
final SpellAbility[] spellAbility = affectedCard.getSpellAbility();
for (final SpellAbility s : spellAbility) {
if (s.getType().equals("Temporary")) {
diff --git a/src/main/java/forge/card/FormatCollection.java b/src/main/java/forge/card/FormatCollection.java
index e5dabb9d7ce..2c3233cb209 100644
--- a/src/main/java/forge/card/FormatCollection.java
+++ b/src/main/java/forge/card/FormatCollection.java
@@ -66,6 +66,14 @@ public final class FormatCollection extends StorageView {
return getMap().get("Modern");
}
+ /**
+ * Get a specified format.
+ * @return the requested format
+ */
+ public GameFormat getFormat(String format) {
+ return getMap().get(format);
+ }
+
/**
* Instantiates a new format utils.
*/
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactory.java b/src/main/java/forge/card/abilityfactory/AbilityFactory.java
index 19c05013c2f..0aba16de935 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactory.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactory.java
@@ -352,6 +352,7 @@ public class AbilityFactory {
throw new RuntimeException("AbilityFactory : getAbility -- no Cost in " + hostCard.getName());
}
this.abCost = new Cost(hostCard, this.mapParams.get("Cost"), this.isAb);
+
}
if (this.mapParams.containsKey("ValidTgts")) {
@@ -548,11 +549,11 @@ public class AbilityFactory {
else if (this.api.equals("Clash")) {
if (this.isAb) {
- spellAbility = AbilityFactoryClash.getAbilityClash(this);
+ spellAbility = AbilityFactoryClash.createAbilityClash(this);
} else if (this.isSp) {
- spellAbility = AbilityFactoryClash.getSpellClash(this);
+ spellAbility = AbilityFactoryClash.createSpellClash(this);
} else if (this.isDb) {
- spellAbility = AbilityFactoryClash.getDrawbackClash(this);
+ spellAbility = AbilityFactoryClash.createDrawbackClash(this);
}
}
@@ -1061,11 +1062,11 @@ public class AbilityFactory {
else if (this.api.equals("RearrangeTopOfLibrary")) {
if (this.isAb) {
- spellAbility = AbilityFactoryReveal.createRearrangeTopOfLibraryAbility(this);
+ spellAbility = AbilityFactoryReveal.createAbilityRearrangeTopOfLibrary(this);
} else if (this.isSp) {
- spellAbility = AbilityFactoryReveal.createRearrangeTopOfLibrarySpell(this);
+ spellAbility = AbilityFactoryReveal.createSpellRearrangeTopOfLibrary(this);
} else if (this.isDb) {
- spellAbility = AbilityFactoryReveal.createRearrangeTopOfLibraryDrawback(this);
+ spellAbility = AbilityFactoryReveal.createDrawbackRearrangeTopOfLibrary(this);
}
}
@@ -1075,7 +1076,7 @@ public class AbilityFactory {
} else if (this.isSp) {
spellAbility = AbilityFactoryRegenerate.getSpellRegenerate(this);
} else if (this.isDb) {
- spellAbility = AbilityFactoryRegenerate.createDrawbackRegenerate(this);
+ spellAbility = AbilityFactoryRegenerate.getDrawbackRegenerate(this);
}
}
@@ -1085,7 +1086,7 @@ public class AbilityFactory {
} else if (this.isSp) {
spellAbility = AbilityFactoryRegenerate.getSpellRegenerateAll(this);
} else if (this.isDb) {
- spellAbility = AbilityFactoryRegenerate.createDrawbackRegenerateAll(this);
+ spellAbility = AbilityFactoryRegenerate.getDrawbackRegenerateAll(this);
}
}
@@ -1340,6 +1341,12 @@ public class AbilityFactory {
spellAbility.setAbilityFactory(this);
+ if (this.mapParams.containsKey("References")) {
+ for (String svar : this.mapParams.get("References").split(",")) {
+ spellAbility.setSVar(svar, this.hostC.getSVar(svar));
+ }
+ }
+
if (this.hasSubAbility()) {
spellAbility.setSubAbility(this.getSubAbility());
}
@@ -1560,8 +1567,24 @@ public class AbilityFactory {
amount = amount.substring(1);
}
- if (!card.getSVar(amount).equals("")) {
- final String[] calcX = card.getSVar(amount).split("\\$");
+ String svarval;
+ if (ability != null) {
+
+ svarval = ability.getSVar(amount);
+ if (svarval.equals("")) {
+
+ //Print a warning to console to help debug if an ability is not stolen properly.
+ System.out.println("WARNING:SVar fallback to card with ability present!");
+ System.out.println("Card:" + card.getName());
+ System.out.println("Ability:" + ability.toString());
+ svarval = card.getSVar(amount);
+ }
+ } else {
+ svarval = card.getSVar(amount);
+ }
+
+ if (!svarval.equals("")) {
+ final String[] calcX = svarval.split("\\$");
if ((calcX.length == 1) || calcX[1].equals("none")) {
return 0;
}
@@ -1571,7 +1594,7 @@ public class AbilityFactory {
}
if (calcX[0].startsWith("Number")) {
- return CardFactoryUtil.xCount(card, card.getSVar(amount)) * multiplier;
+ return CardFactoryUtil.xCount(card, svarval) * multiplier;
} else if (calcX[0].startsWith("SVar")) {
final String[] l = calcX[1].split("/");
final String[] m = CardFactoryUtil.parseMath(l);
@@ -2636,7 +2659,12 @@ public class AbilityFactory {
@Override
public void resolve() {
- // nothing to do
+ // nothing to do here
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ return null;
}
};
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryAlterLife.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryAlterLife.java
index 6fb8a2c94d4..7be788d5719 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryAlterLife.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryAlterLife.java
@@ -27,6 +27,7 @@ import forge.AllZoneUtil;
import forge.Card;
import forge.Counters;
import forge.Singletons;
+import forge.card.cardfactory.CardFactoryUtil;
import forge.card.cost.Cost;
import forge.card.cost.CostUtil;
import forge.card.spellability.AbilityActivated;
@@ -64,9 +65,19 @@ public class AbilityFactoryAlterLife {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityGainLife(final AbilityFactory abilityFactory) {
+ class AbilityGainLife extends AbilityActivated {
+ public AbilityGainLife(final Card ca, final Cost co, final Target t) {
+ super(ca, co, t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityGainLife(getSourceCard(), getPayCosts(),
+ getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
- final SpellAbility abGainLife = new AbilityActivated(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
- abilityFactory.getAbTgt()) {
private static final long serialVersionUID = 8869422603616247307L;
private final AbilityFactory af = abilityFactory;
@@ -93,7 +104,10 @@ public class AbilityFactoryAlterLife {
return AbilityFactoryAlterLife.gainLifeDoTriggerAI(this.af, this, mandatory);
}
- };
+ }
+ final SpellAbility abGainLife = new AbilityGainLife(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
+ abilityFactory.getAbTgt());
+
return abGainLife;
}
@@ -144,6 +158,7 @@ public class AbilityFactoryAlterLife {
}
};
+
return spGainLife;
}
@@ -157,7 +172,19 @@ public class AbilityFactoryAlterLife {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackGainLife(final AbilityFactory abilityFactory) {
- final SpellAbility dbGainLife = new AbilitySub(abilityFactory.getHostCard(), abilityFactory.getAbTgt()) {
+ class DrawbackGainLife extends AbilitySub {
+ public DrawbackGainLife(final Card ca, final Target t) {
+ super(ca, t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackGainLife(getSourceCard(),
+ getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 6631124959690157874L;
private final AbilityFactory af = abilityFactory;
@@ -193,8 +220,9 @@ public class AbilityFactoryAlterLife {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryAlterLife.gainLifeDoTriggerAI(this.af, this, mandatory);
}
+ }
+ final SpellAbility dbGainLife = new DrawbackGainLife(abilityFactory.getHostCard(), abilityFactory.getAbTgt());
- };
return dbGainLife;
}
@@ -458,8 +486,19 @@ public class AbilityFactoryAlterLife {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityLoseLife(final AbilityFactory abilityFactory) {
- final SpellAbility abLoseLife = new AbilityActivated(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
- abilityFactory.getAbTgt()) {
+ class AbilityLoseLife extends AbilityActivated {
+ public AbilityLoseLife(final Card ca, final Cost co, final Target t) {
+ super(ca, co, t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityLoseLife(getSourceCard(),
+ getPayCosts(), getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 1129762905315395160L;
private final AbilityFactory af = abilityFactory;
@@ -490,7 +529,10 @@ public class AbilityFactoryAlterLife {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryAlterLife.loseLifeDoTriggerAI(this.af, this, mandatory);
}
- };
+ }
+ final SpellAbility abLoseLife = new AbilityLoseLife(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
+ abilityFactory.getAbTgt());
+
return abLoseLife;
}
@@ -540,6 +582,7 @@ public class AbilityFactoryAlterLife {
return AbilityFactoryAlterLife.loseLifeDoTriggerAI(af, this, mandatory);
}
};
+
return spLoseLife;
}
@@ -553,7 +596,19 @@ public class AbilityFactoryAlterLife {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackLoseLife(final AbilityFactory abilityFactory) {
- final SpellAbility dbLoseLife = new AbilitySub(abilityFactory.getHostCard(), abilityFactory.getAbTgt()) {
+ class DrawbackLoseLife extends AbilitySub {
+ public DrawbackLoseLife(final Card ca, final Target t) {
+ super(ca, t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackLoseLife(getSourceCard(),
+ getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -2966932725306192437L;
private final AbilityFactory af = abilityFactory;
@@ -589,7 +644,9 @@ public class AbilityFactoryAlterLife {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryAlterLife.loseLifeDoTriggerAI(this.af, this, mandatory);
}
- };
+ }
+ final SpellAbility dbLoseLife = new DrawbackLoseLife(abilityFactory.getHostCard(), abilityFactory.getAbTgt());
+
return dbLoseLife;
}
@@ -866,8 +923,19 @@ public class AbilityFactoryAlterLife {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityPoison(final AbilityFactory af) {
+ class AbilityPoison extends AbilityActivated {
+ public AbilityPoison(final Card ca, final Cost co, final Target t) {
+ super(ca, co, t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityPoison(getSourceCard(),
+ getPayCosts(), getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
- final SpellAbility abPoison = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
private static final long serialVersionUID = 6598936088284756268L;
@Override
@@ -891,8 +959,9 @@ public class AbilityFactoryAlterLife {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryAlterLife.poisonDoTriggerAI(af, this, mandatory);
}
+ }
+ final SpellAbility abPoison = new AbilityPoison(af.getHostCard(), af.getAbCost(), af.getAbTgt());
- };
return abPoison;
}
@@ -930,6 +999,7 @@ public class AbilityFactoryAlterLife {
}
};
+
return spPoison;
}
@@ -943,7 +1013,19 @@ public class AbilityFactoryAlterLife {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackPoison(final AbilityFactory af) {
- final SpellAbility dbPoison = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackPoison extends AbilitySub {
+ public DrawbackPoison(final Card ca, final Target t) {
+ super(ca, t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackPoison(getSourceCard(),
+ getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -1173479041548558016L;
@Override
@@ -975,8 +1057,9 @@ public class AbilityFactoryAlterLife {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryAlterLife.poisonDoTriggerAI(af, this, mandatory);
}
+ }
+ final SpellAbility dbPoison = new DrawbackPoison(af.getHostCard(), af.getAbTgt());
- };
return dbPoison;
}
@@ -1191,7 +1274,19 @@ public class AbilityFactoryAlterLife {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilitySetLife(final AbilityFactory af) {
- final SpellAbility abSetLife = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilitySetLife extends AbilityActivated {
+ public AbilitySetLife(final Card ca, final Cost co, final Target t) {
+ super(ca, co, t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilitySetLife(getSourceCard(),
+ getPayCosts(), getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -7375434097541097668L;
@Override
@@ -1213,8 +1308,9 @@ public class AbilityFactoryAlterLife {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryAlterLife.setLifeDoTriggerAI(af, this, mandatory);
}
+ }
+ final SpellAbility abSetLife = new AbilitySetLife(af.getHostCard(), af.getAbCost(), af.getAbTgt());
- };
return abSetLife;
}
@@ -1252,6 +1348,7 @@ public class AbilityFactoryAlterLife {
}
};
+
return spSetLife;
}
@@ -1265,7 +1362,19 @@ public class AbilityFactoryAlterLife {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackSetLife(final AbilityFactory af) {
- final SpellAbility dbSetLife = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackSetLife extends AbilitySub {
+ public DrawbackSetLife(final Card ca, final Target t) {
+ super(ca, t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackSetLife(getSourceCard(),
+ getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -7634729949893534023L;
@Override
@@ -1297,8 +1406,9 @@ public class AbilityFactoryAlterLife {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryAlterLife.setLifeDoTriggerAI(af, this, mandatory);
}
+ }
+ final SpellAbility dbSetLife = new DrawbackSetLife(af.getHostCard(), af.getAbTgt());
- };
return dbSetLife;
}
@@ -1558,7 +1668,19 @@ public class AbilityFactoryAlterLife {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityExchangeLife(final AbilityFactory af) {
- final SpellAbility abExLife = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityExchangeLife extends AbilityActivated {
+ public AbilityExchangeLife(final Card ca, final Cost co, final Target t) {
+ super(ca, co, t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityExchangeLife(getSourceCard(),
+ getPayCosts(), getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 212548821691286311L;
@Override
@@ -1580,8 +1702,9 @@ public class AbilityFactoryAlterLife {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryAlterLife.exchangeLifeDoTriggerAI(af, this, mandatory);
}
+ }
+ final SpellAbility abExLife = new AbilityExchangeLife(af.getHostCard(), af.getAbCost(), af.getAbTgt());
- };
return abExLife;
}
@@ -1627,7 +1750,19 @@ public class AbilityFactoryAlterLife {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackExchangeLife(final AbilityFactory af) {
- final SpellAbility dbExLife = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackExchangeLife extends AbilitySub {
+ public DrawbackExchangeLife(final Card ca, final Target t) {
+ super(ca, t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackExchangeLife(getSourceCard(),
+ getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 6951913863491173483L;
@Override
@@ -1654,8 +1789,9 @@ public class AbilityFactoryAlterLife {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryAlterLife.exchangeLifeDoTriggerAI(af, this, mandatory);
}
+ }
+ final SpellAbility dbExLife = new DrawbackExchangeLife(af.getHostCard(), af.getAbTgt());
- };
return dbExLife;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryAnimate.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryAnimate.java
index 21baca469fb..1601915fe1f 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryAnimate.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryAnimate.java
@@ -37,6 +37,8 @@ import forge.card.spellability.AbilitySub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
+import forge.card.cardfactory.CardFactoryUtil;
+import forge.card.cost.Cost;
import forge.card.staticability.StaticAbility;
import forge.card.trigger.Trigger;
import forge.card.trigger.TriggerHandler;
@@ -73,7 +75,19 @@ public final class AbilityFactoryAnimate {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityAnimate(final AbilityFactory af) {
- final SpellAbility abAnimate = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityAnimate extends AbilityActivated {
+ public AbilityAnimate(final Card ca, final Cost co, final Target t) {
+ super(ca, co, t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityAnimate(getSourceCard(),
+ getPayCosts(), getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 1938171749867735155L;
@Override
@@ -95,7 +109,9 @@ public final class AbilityFactoryAnimate {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryAnimate.animateTriggerAI(af, this, mandatory);
}
- };
+ }
+ final SpellAbility abAnimate = new AbilityAnimate(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abAnimate;
}
@@ -140,7 +156,19 @@ public final class AbilityFactoryAnimate {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackAnimate(final AbilityFactory af) {
- final SpellAbility dbAnimate = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackAnimate extends AbilitySub {
+ public DrawbackAnimate(final Card ca, final Target t) {
+ super(ca, t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackAnimate(getSourceCard(),
+ getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -8659938411460952874L;
@Override
@@ -162,7 +190,8 @@ public final class AbilityFactoryAnimate {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryAnimate.animateTriggerAI(af, this, mandatory);
}
- };
+ }
+ final SpellAbility dbAnimate = new DrawbackAnimate(af.getHostCard(), af.getAbTgt());
return dbAnimate;
}
@@ -221,73 +250,79 @@ public final class AbilityFactoryAnimate {
sb.append(sa.getSourceCard().getName()).append(" - ");
}
- final Target tgt = sa.getTarget();
- ArrayList tgts;
- if (tgt != null) {
- tgts = tgt.getTargetCards();
- } else {
- tgts = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
+ if (params.containsKey("StackDescription")) {
+ sb.append(params.get("StackDescription").replaceAll("CARDNAME", host.getName()));
}
+ else {
- for (final Card c : tgts) {
- sb.append(c).append(" ");
- }
- sb.append("become");
- if (tgts.size() == 1) {
- sb.append("s a");
- }
- // if power is -1, we'll assume it's not just setting toughness
- if (power != -1) {
- sb.append(" ").append(power).append("/").append(toughness);
- }
+ final Target tgt = sa.getTarget();
+ ArrayList tgts;
+ if (tgt != null) {
+ tgts = tgt.getTargetCards();
+ } else {
+ tgts = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
+ }
- if (colors.size() > 0) {
+ for (final Card c : tgts) {
+ sb.append(c).append(" ");
+ }
+ sb.append("become");
+ if (tgts.size() == 1) {
+ sb.append("s a");
+ }
+ // if power is -1, we'll assume it's not just setting toughness
+ if (power != -1) {
+ sb.append(" ").append(power).append("/").append(toughness);
+ }
+
+ if (colors.size() > 0) {
+ sb.append(" ");
+ }
+ if (colors.contains("ChosenColor")) {
+ sb.append("color of that player's choice");
+ } else {
+ for (int i = 0; i < colors.size(); i++) {
+ sb.append(colors.get(i));
+ if (i < (colors.size() - 1)) {
+ sb.append(" and ");
+ }
+ }
+ }
sb.append(" ");
- }
- if (colors.contains("ChosenColor")) {
- sb.append("color of that player's choice");
- } else {
- for (int i = 0; i < colors.size(); i++) {
- sb.append(colors.get(i));
- if (i < (colors.size() - 1)) {
+ if (types.contains("ChosenType")) {
+ sb.append("type of player's choice ");
+ } else {
+ for (int i = types.size() - 1; i >= 0; i--) {
+ sb.append(types.get(i));
+ sb.append(" ");
+ }
+ }
+ if (keywords.size() > 0) {
+ sb.append("with ");
+ }
+ for (int i = 0; i < keywords.size(); i++) {
+ sb.append(keywords.get(i));
+ if (i < (keywords.size() - 1)) {
sb.append(" and ");
}
}
- }
- sb.append(" ");
- if (types.contains("ChosenType")) {
- sb.append("type of player's choice ");
- } else {
- for (int i = types.size() - 1; i >= 0; i--) {
- sb.append(types.get(i));
- sb.append(" ");
- }
- }
- if (keywords.size() > 0) {
- sb.append("with ");
- }
- for (int i = 0; i < keywords.size(); i++) {
- sb.append(keywords.get(i));
- if (i < (keywords.size() - 1)) {
- sb.append(" and ");
- }
- }
- // sb.append(abilities)
- // sb.append(triggers)
- if (!permanent) {
- if (params.containsKey("UntilEndOfCombat")) {
- sb.append(" until end of combat.");
- } else if (params.containsKey("UntilHostLeavesPlay")) {
- sb.append(" until ").append(host).append(" leaves the battlefield.");
- } else if (params.containsKey("UntilYourNextUpkeep")) {
- sb.append(" until your next upkeep.");
- } else if (params.containsKey("UntilControllerNextUntap")) {
- sb.append(" until its controller's next untap step.");
+ // sb.append(abilities)
+ // sb.append(triggers)
+ if (!permanent) {
+ if (params.containsKey("UntilEndOfCombat")) {
+ sb.append(" until end of combat.");
+ } else if (params.containsKey("UntilHostLeavesPlay")) {
+ sb.append(" until ").append(host).append(" leaves the battlefield.");
+ } else if (params.containsKey("UntilYourNextUpkeep")) {
+ sb.append(" until your next upkeep.");
+ } else if (params.containsKey("UntilControllerNextUntap")) {
+ sb.append(" until its controller's next untap step.");
+ } else {
+ sb.append(" until end of turn.");
+ }
} else {
- sb.append(" until end of turn.");
+ sb.append(".");
}
- } else {
- sb.append(".");
}
final AbilitySub abSub = sa.getSubAbility();
@@ -964,7 +999,19 @@ public final class AbilityFactoryAnimate {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityAnimateAll(final AbilityFactory af) {
- final SpellAbility abAnimateAll = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityAnimateAll extends AbilityActivated {
+ public AbilityAnimateAll(final Card ca, final Cost co, final Target t) {
+ super(ca, co, t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityAnimateAll(getSourceCard(),
+ getPayCosts(), getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -4969632476557290609L;
@Override
@@ -986,7 +1033,9 @@ public final class AbilityFactoryAnimate {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryAnimate.animateAllTriggerAI(af, this, mandatory);
}
- };
+ }
+ final SpellAbility abAnimateAll = new AbilityAnimateAll(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abAnimateAll;
}
@@ -1031,7 +1080,19 @@ public final class AbilityFactoryAnimate {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackAnimateAll(final AbilityFactory af) {
- final SpellAbility dbAnimateAll = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackAnimateAll extends AbilitySub {
+ public DrawbackAnimateAll(final Card ca, final Target t) {
+ super(ca, t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackAnimateAll(getSourceCard(),
+ getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 2056843302051205632L;
@Override
@@ -1053,7 +1114,9 @@ public final class AbilityFactoryAnimate {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryAnimate.animateAllTriggerAI(af, this, mandatory);
}
- };
+ }
+ final SpellAbility dbAnimateAll = new DrawbackAnimateAll(af.getHostCard(), af.getAbTgt());
+
return dbAnimateAll;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryAttach.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryAttach.java
index f7211c49c87..7f1b03bd259 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryAttach.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryAttach.java
@@ -140,8 +140,19 @@ public class AbilityFactoryAttach {
* @return the spell ability
*/
public static SpellAbility createAbilityAttach(final AbilityFactory abilityFactory) {
- final SpellAbility abAttach = new AbilityActivated(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
- abilityFactory.getAbTgt()) {
+ class AbilityAttach extends AbilityActivated {
+ public AbilityAttach(final Card ca, final Cost co, final Target t) {
+ super(ca, co, t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityAttach(getSourceCard(),
+ getPayCosts(), getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 2116313811316915141L;
@Override
@@ -163,8 +174,9 @@ public class AbilityFactoryAttach {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryAttach.attachDoTriggerAI(abilityFactory, this, mandatory);
}
-
- }; // SpellAbility
+ }
+ final SpellAbility abAttach = new AbilityAttach(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
+ abilityFactory.getAbTgt());
return abAttach;
}
@@ -178,7 +190,19 @@ public class AbilityFactoryAttach {
* @return the spell ability
*/
public static SpellAbility createDrawbackAttach(final AbilityFactory abilityFactory) {
- final SpellAbility dbAttach = new AbilitySub(abilityFactory.getHostCard(), abilityFactory.getAbTgt()) {
+ class DrawbackAttach extends AbilitySub {
+ public DrawbackAttach(final Card ca, final Target t) {
+ super(ca, t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackAttach(getSourceCard(),
+ getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 7211414518191821125L;
private final AbilityFactory af = abilityFactory;
@@ -210,8 +234,9 @@ public class AbilityFactoryAttach {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryAttach.attachDoTriggerAI(this.af, this, mandatory);
}
+ }
+ final SpellAbility dbAttach = new DrawbackAttach(abilityFactory.getHostCard(), abilityFactory.getAbTgt());
- };
return dbAttach;
}
@@ -1266,7 +1291,19 @@ public class AbilityFactoryAttach {
* @return the spell ability
*/
public static SpellAbility createAbilityUnattachAll(final AbilityFactory af) {
- final SpellAbility abUnattachAll = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityUnattachAll extends AbilityActivated {
+ public AbilityUnattachAll(final Card ca, final Cost co, final Target t) {
+ super(ca, co, t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityUnattachAll(getSourceCard(),
+ getPayCosts(), getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 5946312226232487294L;
@Override
@@ -1288,7 +1325,9 @@ public class AbilityFactoryAttach {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryAttach.unattachAllDoTriggerAI(af, this, mandatory);
}
- };
+ }
+ final SpellAbility abUnattachAll = new AbilityUnattachAll(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abUnattachAll;
}
@@ -1330,7 +1369,19 @@ public class AbilityFactoryAttach {
* @return the spell ability
*/
public static SpellAbility createDrawbackUnattachAll(final AbilityFactory af) {
- final SpellAbility dbUnattachAll = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackUnattachAll extends AbilitySub {
+ public DrawbackUnattachAll(final Card ca, final Target t) {
+ super(ca, t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackUnattachAll(getSourceCard(),
+ getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 9007743612927046143L;
@Override
@@ -1352,7 +1403,9 @@ public class AbilityFactoryAttach {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryAttach.unattachAllDoTriggerAI(af, this, mandatory);
}
- };
+ }
+ final SpellAbility dbUnattachAll = new DrawbackUnattachAll(af.getHostCard(), af.getAbTgt());
+
return dbUnattachAll;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryBond.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryBond.java
index e07f7e0003d..a29d23056e4 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryBond.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryBond.java
@@ -25,6 +25,9 @@ import forge.CardList;
import forge.card.spellability.AbilityActivated;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
+import forge.card.spellability.Target;
+import forge.card.cardfactory.CardFactoryUtil;
+import forge.card.cost.Cost;
import forge.game.player.ComputerUtil;
import forge.game.zone.ZoneType;
import forge.gui.GuiUtils;
@@ -57,7 +60,19 @@ public final class AbilityFactoryBond {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityBond(final AbilityFactory af) {
- final SpellAbility abBond = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityBond extends AbilityActivated {
+ public AbilityBond(final Card ca, final Cost co, final Target t) {
+ super(ca, co, t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityBond(getSourceCard(),
+ getPayCosts(), getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 1938171749867735256L;
@Override
@@ -79,7 +94,9 @@ public final class AbilityFactoryBond {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryBond.bondTriggerAI(af, this, mandatory);
}
- };
+ }
+ final SpellAbility abBond = new AbilityBond(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abBond;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryChangeZone.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryChangeZone.java
index 3ca8415d720..e11ef76232e 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryChangeZone.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryChangeZone.java
@@ -80,7 +80,20 @@ public final class AbilityFactoryChangeZone {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityChangeZone(final AbilityFactory af) {
- final SpellAbility abChangeZone = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityChangeZone extends AbilityActivated {
+ public AbilityChangeZone(final Card ca, final Cost co, final Target t) {
+ super(ca, co, t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityChangeZone(getSourceCard(),
+ getPayCosts(), getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ AbilityFactoryChangeZone.setMiscellaneous(af, res);
+ return res;
+ }
+
private static final long serialVersionUID = 3728332812890211671L;
@Override
@@ -102,8 +115,9 @@ public final class AbilityFactoryChangeZone {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryChangeZone.changeZoneTriggerAI(af, this, mandatory);
}
+ }
+ final SpellAbility abChangeZone = new AbilityChangeZone(af.getHostCard(), af.getAbCost(), af.getAbTgt());
- };
AbilityFactoryChangeZone.setMiscellaneous(af, abChangeZone);
return abChangeZone;
}
@@ -158,7 +172,19 @@ public final class AbilityFactoryChangeZone {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackChangeZone(final AbilityFactory af) {
- final SpellAbility dbChangeZone = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackChangeZone extends AbilitySub {
+ public DrawbackChangeZone(final Card ca, final Target t) {
+ super(ca, t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackChangeZone(getSourceCard(),
+ getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ AbilityFactoryChangeZone.setMiscellaneous(af, res);
+ return res;
+ }
private static final long serialVersionUID = 3270484211099902059L;
@Override
@@ -185,7 +211,9 @@ public final class AbilityFactoryChangeZone {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryChangeZone.changeZoneTriggerAI(af, this, mandatory);
}
- };
+ }
+ final SpellAbility dbChangeZone = new DrawbackChangeZone(af.getHostCard(), af.getAbTgt());
+
AbilityFactoryChangeZone.setMiscellaneous(af, dbChangeZone);
return dbChangeZone;
}
@@ -866,7 +894,8 @@ public final class AbilityFactoryChangeZone {
if (!params.containsKey("ChangeNum")) {
changeNum = fetchList.size();
}
- } else if (!origin.contains(ZoneType.Library) && !origin.contains(ZoneType.Hand)) {
+ } else if (!origin.contains(ZoneType.Library) && !origin.contains(ZoneType.Hand)
+ && !params.containsKey("DefinedPlayer")) {
fetchList = AllZoneUtil.getCardsIn(origin);
} else {
fetchList = player.getCardsIn(origin);
@@ -1042,7 +1071,8 @@ public final class AbilityFactoryChangeZone {
if (!params.containsKey("ChangeNum")) {
changeNum = fetchList.size();
}
- } else if (!origin.contains(ZoneType.Library) && !origin.contains(ZoneType.Hand)) {
+ } else if (!origin.contains(ZoneType.Library) && !origin.contains(ZoneType.Hand)
+ && !params.containsKey("DefinedPlayer")) {
fetchList = AllZoneUtil.getCardsIn(origin);
fetchList = AbilityFactory.filterListByType(fetchList, type, sa);
} else {
@@ -2168,7 +2198,20 @@ public final class AbilityFactoryChangeZone {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityChangeZoneAll(final AbilityFactory af) {
- final SpellAbility abChangeZone = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityChangeZoneAll extends AbilityActivated {
+ public AbilityChangeZoneAll(final Card ca, final Cost co, final Target t) {
+ super(ca, co, t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityChangeZoneAll(getSourceCard(),
+ getPayCosts(), getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ AbilityFactoryChangeZone.setMiscellaneous(af, res);
+ return res;
+ }
+
private static final long serialVersionUID = 3728332812890211671L;
@Override
@@ -2190,8 +2233,9 @@ public final class AbilityFactoryChangeZone {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryChangeZone.changeZoneAllDoTriggerAI(af, this, mandatory);
}
+ }
+ final SpellAbility abChangeZone = new AbilityChangeZoneAll(af.getHostCard(), af.getAbCost(), af.getAbTgt());
- };
AbilityFactoryChangeZone.setMiscellaneous(af, abChangeZone);
return abChangeZone;
}
@@ -2246,7 +2290,20 @@ public final class AbilityFactoryChangeZone {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackChangeZoneAll(final AbilityFactory af) {
- final SpellAbility dbChangeZone = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackChangeZoneAll extends AbilitySub {
+ public DrawbackChangeZoneAll(final Card ca, final Target t) {
+ super(ca, t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackChangeZoneAll(getSourceCard(),
+ getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ AbilityFactoryChangeZone.setMiscellaneous(af, res);
+ return res;
+ }
+
private static final long serialVersionUID = 3270484211099902059L;
@Override
@@ -2273,7 +2330,9 @@ public final class AbilityFactoryChangeZone {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryChangeZone.changeZoneAllDoTriggerAI(af, this, mandatory);
}
- };
+ }
+ final SpellAbility dbChangeZone = new DrawbackChangeZoneAll(af.getHostCard(), af.getAbTgt());
+
AbilityFactoryChangeZone.setMiscellaneous(af, dbChangeZone);
return dbChangeZone;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryCharm.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryCharm.java
index f68727e4129..122ae4f7273 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryCharm.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryCharm.java
@@ -27,6 +27,9 @@ import forge.card.spellability.AbilityActivated;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
+import forge.card.spellability.Target;
+import forge.card.cardfactory.CardFactoryUtil;
+import forge.card.cost.Cost;
import forge.gui.GuiUtils;
import forge.util.MyRandom;
@@ -56,7 +59,18 @@ public final class AbilityFactoryCharm {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityCharm(final AbilityFactory af) {
- final SpellAbility abCharm = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityCharm extends AbilityActivated {
+ public AbilityCharm(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityCharm(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -4038591081733095021L;
@Override
@@ -78,7 +92,8 @@ public final class AbilityFactoryCharm {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCharm.charmCanPlayAI(af, this, mandatory);
}
- }; // Ability_Activated
+ }
+ final SpellAbility abCharm = new AbilityCharm(af.getHostCard(), af.getAbCost(), af.getAbTgt());
return abCharm;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryChoose.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryChoose.java
index b8c0d33cdf2..fbf044496ee 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryChoose.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryChoose.java
@@ -42,6 +42,7 @@ import forge.card.spellability.AbilitySub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
+import forge.card.cost.Cost;
import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
@@ -78,8 +79,18 @@ public final class AbilityFactoryChoose {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityChooseType(final AbilityFactory af) {
-
- final SpellAbility abChooseType = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityChooseType extends AbilityActivated {
+ public AbilityChooseType(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityChooseType(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -7734286034988741837L;
@Override
@@ -101,8 +112,9 @@ public final class AbilityFactoryChoose {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryChoose.chooseTypeTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abChooseType = new AbilityChooseType(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abChooseType;
}
@@ -148,7 +160,18 @@ public final class AbilityFactoryChoose {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackChooseType(final AbilityFactory af) {
- final SpellAbility dbChooseType = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackChooseType extends AbilitySub {
+ public DrawbackChooseType(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackChooseType(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 5555184803257696143L;
@Override
@@ -170,8 +193,9 @@ public final class AbilityFactoryChoose {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryChoose.chooseTypeTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbChooseType = new DrawbackChooseType(af.getHostCard(), af.getAbTgt());
+
return dbChooseType;
}
@@ -442,8 +466,18 @@ public final class AbilityFactoryChoose {
* @since 1.0.15
*/
public static SpellAbility createAbilityChooseColor(final AbilityFactory af) {
-
- final SpellAbility abChooseColor = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityChooseColor extends AbilityActivated {
+ public AbilityChooseColor(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityChooseColor(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 7069068165774633355L;
@Override
@@ -465,8 +499,9 @@ public final class AbilityFactoryChoose {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryChoose.chooseColorTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abChooseColor = new AbilityChooseColor(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abChooseColor;
}
@@ -514,7 +549,18 @@ public final class AbilityFactoryChoose {
* @since 1.0.15
*/
public static SpellAbility createDrawbackChooseColor(final AbilityFactory af) {
- final SpellAbility dbChooseColor = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackChooseColor extends AbilitySub {
+ public DrawbackChooseColor(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackChooseColor(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 6969618586164278998L;
@Override
@@ -536,8 +582,9 @@ public final class AbilityFactoryChoose {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryChoose.chooseColorTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbChooseColor = new DrawbackChooseColor(af.getHostCard(), af.getAbTgt());
+
return dbChooseColor;
}
@@ -729,8 +776,18 @@ public final class AbilityFactoryChoose {
* @since 1.1.6
*/
public static SpellAbility createAbilityChooseNumber(final AbilityFactory af) {
-
- final SpellAbility abChooseNumber = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityChooseNumber extends AbilityActivated {
+ public AbilityChooseNumber(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityChooseNumber(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -8268155210011368749L;
@Override
@@ -752,8 +809,9 @@ public final class AbilityFactoryChoose {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryChoose.chooseNumberTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abChooseNumber = new AbilityChooseNumber(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abChooseNumber;
}
@@ -801,7 +859,18 @@ public final class AbilityFactoryChoose {
* @since 1.1.6
*/
public static SpellAbility createDrawbackChooseNumber(final AbilityFactory af) {
- final SpellAbility dbChooseNumber = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackChooseNumber extends AbilitySub {
+ public DrawbackChooseNumber(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackChooseNumber(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -1339609900364066904L;
@Override
@@ -823,8 +892,9 @@ public final class AbilityFactoryChoose {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryChoose.chooseNumberTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbChooseNumber = new DrawbackChooseNumber(af.getHostCard(), af.getAbTgt());
+
return dbChooseNumber;
}
@@ -1000,8 +1070,18 @@ public final class AbilityFactoryChoose {
* @since 1.1.6
*/
public static SpellAbility createAbilityChoosePlayer(final AbilityFactory af) {
- final SpellAbility abChoosePlayer = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
-
+ class AbilityChoosePlayer extends AbilityActivated {
+ public AbilityChoosePlayer(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityChoosePlayer(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 7502903475594562552L;
@Override
@@ -1023,8 +1103,9 @@ public final class AbilityFactoryChoose {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryChoose.choosePlayerTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abChoosePlayer = new AbilityChoosePlayer(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abChoosePlayer;
}
@@ -1073,8 +1154,18 @@ public final class AbilityFactoryChoose {
* @since 1.1.6
*/
public static SpellAbility createDrawbackChoosePlayer(final AbilityFactory af) {
- final SpellAbility dbChoosePlayer = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
-
+ class DrawbackChoosePlayer extends AbilitySub {
+ public DrawbackChoosePlayer(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackChoosePlayer(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -766158106632103029L;
@Override
@@ -1096,8 +1187,9 @@ public final class AbilityFactoryChoose {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryChoose.choosePlayerTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbChoosePlayer = new DrawbackChoosePlayer(af.getHostCard(), af.getAbTgt());
+
return dbChoosePlayer;
}
@@ -1241,7 +1333,18 @@ public final class AbilityFactoryChoose {
* @since 1.1.6
*/
public static SpellAbility createAbilityNameCard(final AbilityFactory af) {
- final SpellAbility abNameCard = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityNameCard extends AbilityActivated {
+ public AbilityNameCard(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityNameCard(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 1748714246609515354L;
@Override
@@ -1263,8 +1366,9 @@ public final class AbilityFactoryChoose {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryChoose.nameCardTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abNameCard = new AbilityNameCard(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abNameCard;
}
@@ -1312,7 +1416,18 @@ public final class AbilityFactoryChoose {
* @since 1.1.6
*/
public static SpellAbility createDrawbackNameCard(final AbilityFactory af) {
- final SpellAbility dbNameCard = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackNameCard extends AbilitySub {
+ public DrawbackNameCard(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackNameCard(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -7647726271751061495L;
@Override
@@ -1334,8 +1449,9 @@ public final class AbilityFactoryChoose {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryChoose.nameCardTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbNameCard = new DrawbackNameCard(af.getHostCard(), af.getAbTgt());
+
return dbNameCard;
}
@@ -1547,7 +1663,18 @@ public final class AbilityFactoryChoose {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityChooseCard(final AbilityFactory af) {
- final SpellAbility abChooseCard = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityChooseCard extends AbilityActivated {
+ public AbilityChooseCard(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityChooseCard(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 2399435577106102311L;
@Override
@@ -1569,8 +1696,9 @@ public final class AbilityFactoryChoose {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryChoose.chooseCardTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abChooseCard = new AbilityChooseCard(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abChooseCard;
}
@@ -1617,7 +1745,18 @@ public final class AbilityFactoryChoose {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackChooseCard(final AbilityFactory af) {
- final SpellAbility dbChooseCard = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackChooseCard extends AbilitySub {
+ public DrawbackChooseCard(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackChooseCard(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -3255569671897226555L;
@Override
@@ -1639,8 +1778,9 @@ public final class AbilityFactoryChoose {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryChoose.chooseCardTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbChooseCard = new DrawbackChooseCard(af.getHostCard(), af.getAbTgt());
+
return dbChooseCard;
}
@@ -1816,8 +1956,18 @@ public final class AbilityFactoryChoose {
* @since 1.2.4
*/
public static SpellAbility createAbilityChooseGeneric(final AbilityFactory af) {
-
- final SpellAbility abChooseGeneric = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityChooseGeneric extends AbilityActivated {
+ public AbilityChooseGeneric(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityChooseGeneric(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -459173435583208151L;
@Override
@@ -1839,8 +1989,9 @@ public final class AbilityFactoryChoose {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryChoose.chooseGenericTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abChooseGeneric = new AbilityChooseGeneric(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abChooseGeneric;
}
@@ -1890,7 +2041,18 @@ public final class AbilityFactoryChoose {
* @since 1.2.4
*/
public static SpellAbility createDrawbackChooseGeneric(final AbilityFactory af) {
- final SpellAbility dbChooseGeneric = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackChooseGeneric extends AbilitySub {
+ public DrawbackChooseGeneric(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackChooseGeneric(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 1586980855969921641L;
@Override
@@ -1912,8 +2074,9 @@ public final class AbilityFactoryChoose {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryChoose.chooseGenericTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbChooseGeneric = new DrawbackChooseGeneric(af.getHostCard(), af.getAbTgt());
+
return dbChooseGeneric;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryClash.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryClash.java
index 90117b2798f..10103579827 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryClash.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryClash.java
@@ -33,6 +33,7 @@ import forge.card.spellability.AbilitySub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
+import forge.card.cost.Cost;
import forge.card.trigger.TriggerType;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
@@ -62,8 +63,19 @@ public final class AbilityFactoryClash {
* @return a {@link forge.card.spellability.SpellAbility} object.
* @since 1.0.15
*/
- public static SpellAbility getAbilityClash(final AbilityFactory af) {
- final SpellAbility abClash = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ public static SpellAbility createAbilityClash(final AbilityFactory af) {
+ class AbilityClash extends AbilityActivated {
+ public AbilityClash(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityClash(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -8019637116128196248L;
@Override
@@ -85,7 +97,8 @@ public final class AbilityFactoryClash {
public void resolve() {
AbilityFactoryClash.clashResolve(af, this);
}
- };
+ }
+ final SpellAbility abClash = new AbilityClash(af.getHostCard(), af.getAbCost(), af.getAbTgt());
return abClash;
}
@@ -100,7 +113,7 @@ public final class AbilityFactoryClash {
* @return a {@link forge.card.spellability.SpellAbility} object.
* @since 1.0.15
*/
- public static SpellAbility getSpellClash(final AbilityFactory af) {
+ public static SpellAbility createSpellClash(final AbilityFactory af) {
final SpellAbility spClash = new Spell(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
private static final long serialVersionUID = -4991665176268317172L;
@@ -138,8 +151,19 @@ public final class AbilityFactoryClash {
* @return a {@link forge.card.spellability.SpellAbility} object.
* @since 1.0.15
*/
- public static SpellAbility getDrawbackClash(final AbilityFactory af) {
- final SpellAbility dbClash = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ public static SpellAbility createDrawbackClash(final AbilityFactory af) {
+ class DrawbackClash extends AbilitySub {
+ public DrawbackClash(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackClash(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -3850086157052881360L;
@Override
@@ -166,8 +190,9 @@ public final class AbilityFactoryClash {
public void resolve() {
AbilityFactoryClash.clashResolve(af, this);
}
- };
-
+ }
+ final SpellAbility dbClash = new DrawbackClash(af.getHostCard(), af.getAbTgt());
+
return dbClash;
}
@@ -241,7 +266,18 @@ public final class AbilityFactoryClash {
* @since 1.0.15
*/
public static SpellAbility createAbilityFlip(final AbilityFactory af) {
- final SpellAbility abFlip = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityFlip extends AbilityActivated {
+ public AbilityFlip(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityFlip(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -8293336773930687488L;
@Override
@@ -263,7 +299,8 @@ public final class AbilityFactoryClash {
public void resolve() {
AbilityFactoryClash.flipResolve(af, this);
}
- };
+ }
+ final SpellAbility abFlip = new AbilityFlip(af.getHostCard(), af.getAbCost(), af.getAbTgt());
return abFlip;
}
@@ -317,7 +354,18 @@ public final class AbilityFactoryClash {
* @since 1.0.15
*/
public static SpellAbility createDrawbackFlip(final AbilityFactory af) {
- final SpellAbility dbFlip = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackFlip extends AbilitySub {
+ public DrawbackFlip(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackFlip(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 8581978154811461324L;
@Override
@@ -344,7 +392,8 @@ public final class AbilityFactoryClash {
public void resolve() {
AbilityFactoryClash.flipResolve(af, this);
}
- };
+ }
+ final SpellAbility dbFlip = new DrawbackFlip(af.getHostCard(), af.getAbTgt());
return dbFlip;
}
@@ -458,7 +507,18 @@ public final class AbilityFactoryClash {
* @since 1.1.7
*/
public static SpellAbility createAbilityTwoPiles(final AbilityFactory af) {
- final SpellAbility abTwoPiles = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityTwoPiles extends AbilityActivated {
+ public AbilityTwoPiles(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityTwoPiles(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -2700390539969188516L;
@Override
@@ -480,8 +540,9 @@ public final class AbilityFactoryClash {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryClash.twoPilesTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abTwoPiles = new AbilityTwoPiles(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abTwoPiles;
}
@@ -529,7 +590,18 @@ public final class AbilityFactoryClash {
* @since 1.1.7
*/
public static SpellAbility createDrawbackTwoPiles(final AbilityFactory af) {
- final SpellAbility dbTwoPiles = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackTwoPiles extends AbilitySub {
+ public DrawbackTwoPiles(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackTwoPiles(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 7486255949274716808L;
@Override
@@ -551,8 +623,9 @@ public final class AbilityFactoryClash {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryClash.twoPilesTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbTwoPiles = new DrawbackTwoPiles(af.getHostCard(), af.getAbTgt());
+
return dbTwoPiles;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryCleanup.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryCleanup.java
index 6fbb4072007..326e033102a 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryCleanup.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryCleanup.java
@@ -22,8 +22,10 @@ import java.util.HashMap;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
+import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
+import forge.card.spellability.Target;
// Cleanup is not the same as other AFs, it is only used as a Drawback, and only used to Cleanup particular card states
// That need to be reset. I'm creating this to clear Remembered Cards at the
@@ -53,7 +55,18 @@ public final class AbilityFactoryCleanup {
* @return a {@link forge.card.spellability.AbilitySub} object.
*/
public static AbilitySub getDrawback(final AbilityFactory af) {
- final AbilitySub drawback = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackCleanup extends AbilitySub {
+ public DrawbackCleanup(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackCleanup(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 6192972525033429820L;
@Override
@@ -70,7 +83,8 @@ public final class AbilityFactoryCleanup {
public void resolve() {
AbilityFactoryCleanup.doResolve(af, this);
}
- };
+ }
+ final AbilitySub drawback = new DrawbackCleanup(af.getHostCard(), af.getAbTgt());
return drawback;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryCombat.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryCombat.java
index bba85d4899d..2e87d3193ef 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryCombat.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryCombat.java
@@ -31,6 +31,7 @@ import forge.card.spellability.AbilitySub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
+import forge.card.cost.Cost;
import forge.game.phase.CombatUtil;
import forge.game.phase.PhaseType;
import forge.game.player.ComputerUtil;
@@ -65,7 +66,18 @@ public final class AbilityFactoryCombat {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityFog(final AbilityFactory af) {
- final SpellAbility abFog = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityFog extends AbilityActivated {
+ public AbilityFog(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityFog(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -1933592438783630254L;
@Override
@@ -89,8 +101,9 @@ public final class AbilityFactoryCombat {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCombat.fogDoTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abFog = new AbilityFog(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abFog;
}
@@ -138,7 +151,18 @@ public final class AbilityFactoryCombat {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackFog(final AbilityFactory af) {
- final SpellAbility dbFog = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackFog extends AbilitySub {
+ public DrawbackFog(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackFog(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -5141246507533353605L;
@Override
@@ -155,8 +179,9 @@ public final class AbilityFactoryCombat {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCombat.fogDoTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbFog = new DrawbackFog(af.getHostCard(), af.getAbTgt());
+
return dbFog;
}
@@ -330,7 +355,18 @@ public final class AbilityFactoryCombat {
* @since 1.1.01
*/
public static SpellAbility createAbilityMustAttack(final AbilityFactory af) {
- final SpellAbility abMustAttack = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityMustAttack extends AbilityActivated {
+ public AbilityMustAttack(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityMustAttack(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 4559154732470225755L;
@Override
@@ -352,8 +388,9 @@ public final class AbilityFactoryCombat {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCombat.mustAttackDoTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abMustAttack = new AbilityMustAttack(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abMustAttack;
}
@@ -399,7 +436,18 @@ public final class AbilityFactoryCombat {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackMustAttack(final AbilityFactory af) {
- final SpellAbility dbMustAttack = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackMustAttack extends AbilitySub {
+ public DrawbackMustAttack(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackMustAttack(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 1294949210616598158L;
@Override
@@ -416,8 +464,9 @@ public final class AbilityFactoryCombat {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCombat.mustAttackDoTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbMustAttack = new DrawbackMustAttack(af.getHostCard(), af.getAbTgt());
+
return dbMustAttack;
}
@@ -547,7 +596,18 @@ public final class AbilityFactoryCombat {
* @since 1.1.6
*/
public static SpellAbility createAbilityRemoveFromCombat(final AbilityFactory af) {
- final SpellAbility abRemCombat = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityRemoveFromCombat extends AbilityActivated {
+ public AbilityRemoveFromCombat(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityRemoveFromCombat(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -2472319390656924874L;
@Override
@@ -569,8 +629,9 @@ public final class AbilityFactoryCombat {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCombat.removeFromCombatDoTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abRemCombat = new AbilityRemoveFromCombat(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abRemCombat;
}
@@ -616,7 +677,18 @@ public final class AbilityFactoryCombat {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackRemoveFromCombat(final AbilityFactory af) {
- final SpellAbility dbRemCombat = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackRemoveFromCombat extends AbilitySub {
+ public DrawbackRemoveFromCombat(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackRemoveFromCombat(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 5080737903616292224L;
@Override
@@ -633,8 +705,9 @@ public final class AbilityFactoryCombat {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCombat.removeFromCombatDoTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbRemCombat = new DrawbackRemoveFromCombat(af.getHostCard(), af.getAbTgt());
+
return dbRemCombat;
}
@@ -757,7 +830,18 @@ public final class AbilityFactoryCombat {
* @since 1.1.6
*/
public static SpellAbility createAbilityMustBlock(final AbilityFactory af) {
- final SpellAbility abMustBlock = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityMustBlock extends AbilityActivated {
+ public AbilityMustBlock(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityMustBlock(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 4237190949098526123L;
@Override
@@ -779,8 +863,9 @@ public final class AbilityFactoryCombat {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCombat.mustBlockDoTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abMustBlock = new AbilityMustBlock(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abMustBlock;
}
@@ -830,7 +915,18 @@ public final class AbilityFactoryCombat {
* @since 1.1.6
*/
public static SpellAbility createDrawbackMustBlock(final AbilityFactory af) {
- final SpellAbility dbMustBlock = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackMustBlock extends AbilitySub {
+ public DrawbackMustBlock(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackMustBlock(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -815813765448972775L;
@Override
@@ -847,8 +943,9 @@ public final class AbilityFactoryCombat {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCombat.mustBlockDoTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbMustBlock = new DrawbackMustBlock(af.getHostCard(), af.getAbTgt());
+
return dbMustBlock;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryCopy.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryCopy.java
index e69cfb2722b..428fa16208c 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryCopy.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryCopy.java
@@ -31,6 +31,7 @@ import forge.CardList;
import forge.CardListFilter;
import forge.Command;
import forge.Singletons;
+import forge.card.cost.Cost;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.Ability;
import forge.card.spellability.AbilityActivated;
@@ -74,8 +75,18 @@ public final class AbilityFactoryCopy {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityCopyPermanent(final AbilityFactory af) {
-
- final SpellAbility abCopyPermanent = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityCopyPermanent extends AbilityActivated {
+ public AbilityCopyPermanent(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityCopyPermanent(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 4557071554433108024L;
@Override
@@ -97,8 +108,8 @@ public final class AbilityFactoryCopy {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCopy.copyPermanentTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abCopyPermanent = new AbilityCopyPermanent(af.getHostCard(), af.getAbCost(), af.getAbTgt());
return abCopyPermanent;
}
@@ -144,7 +155,18 @@ public final class AbilityFactoryCopy {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackCopyPermanent(final AbilityFactory af) {
- final SpellAbility dbCopyPermanent = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackCopyPermanent extends AbilitySub {
+ public DrawbackCopyPermanent(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackCopyPermanent(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -7725564505830285184L;
@Override
@@ -166,8 +188,9 @@ public final class AbilityFactoryCopy {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCopy.copyPermanentTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbCopyPermanent = new DrawbackCopyPermanent(af.getHostCard(), af.getAbTgt());
+
return dbCopyPermanent;
}
@@ -501,8 +524,18 @@ public final class AbilityFactoryCopy {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityCopySpell(final AbilityFactory af) {
-
- final SpellAbility abCopySpell = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityCopySpell extends AbilityActivated {
+ public AbilityCopySpell(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityCopySpell(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 5232548517225345052L;
@Override
@@ -524,8 +557,9 @@ public final class AbilityFactoryCopy {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCopy.copySpellTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abCopySpell = new AbilityCopySpell(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abCopySpell;
}
@@ -579,7 +613,18 @@ public final class AbilityFactoryCopy {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackCopySpell(final AbilityFactory af) {
- final SpellAbility dbCopySpell = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackCopySpell extends AbilitySub {
+ public DrawbackCopySpell(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackCopySpell(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 1927508119173644632L;
@Override
@@ -601,8 +646,9 @@ public final class AbilityFactoryCopy {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCopy.copySpellTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbCopySpell = new DrawbackCopySpell(af.getHostCard(), af.getAbTgt());
+
return dbCopySpell;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryCounterMagic.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryCounterMagic.java
index b560f3c2944..812c9a53255 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryCounterMagic.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryCounterMagic.java
@@ -95,8 +95,18 @@ public class AbilityFactoryCounterMagic {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public final SpellAbility getAbilityCounter(final AbilityFactory abilityFactory) {
- final SpellAbility abCounter = new AbilityActivated(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
- abilityFactory.getAbTgt()) {
+ class AbilityCounter extends AbilityActivated {
+ public AbilityCounter(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityCounter(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -3895990436431818899L;
@Override
@@ -121,8 +131,9 @@ public class AbilityFactoryCounterMagic {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCounterMagic.this.counterCanPlayAI(AbilityFactoryCounterMagic.this.af, this);
}
-
- };
+ }
+ final SpellAbility abCounter = new AbilityCounter(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
+ abilityFactory.getAbTgt());
return abCounter;
}
@@ -171,7 +182,18 @@ public class AbilityFactoryCounterMagic {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public final SpellAbility getDrawbackCounter(final AbilityFactory abilityFactory) {
- final SpellAbility dbCounter = new AbilitySub(abilityFactory.getHostCard(), abilityFactory.getAbTgt()) {
+ class DrawbackCounter extends AbilitySub {
+ public DrawbackCounter(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackCounter(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -4272851734871573693L;
@Override
@@ -201,8 +223,9 @@ public class AbilityFactoryCounterMagic {
return AbilityFactoryCounterMagic.this.counterDoTriggerAI(AbilityFactoryCounterMagic.this.af, this,
mandatory);
}
-
- };
+ }
+ final SpellAbility dbCounter = new DrawbackCounter(abilityFactory.getHostCard(), abilityFactory.getAbTgt());
+
return dbCounter;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java
index 0542c29dc53..2b7c50b0b4a 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java
@@ -75,8 +75,18 @@ public class AbilityFactoryCounters {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityPutCounters(final AbilityFactory af) {
-
- final SpellAbility abPutCounter = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityPutCounters extends AbilityActivated {
+ public AbilityPutCounters(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityPutCounters(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -1259638699008542484L;
@Override
@@ -98,8 +108,9 @@ public class AbilityFactoryCounters {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCounters.putDoTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abPutCounter = new AbilityPutCounters(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abPutCounter;
}
@@ -158,7 +169,18 @@ public class AbilityFactoryCounters {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackPutCounters(final AbilityFactory af) {
- final SpellAbility dbPutCounter = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackPutCounters extends AbilitySub {
+ public DrawbackPutCounters(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackPutCounters(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -323471693082498224L;
@Override
@@ -185,8 +207,9 @@ public class AbilityFactoryCounters {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCounters.putDoTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbPutCounter = new DrawbackPutCounters(af.getHostCard(), af.getAbTgt());
+
return dbPutCounter;
}
@@ -753,7 +776,18 @@ public class AbilityFactoryCounters {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityRemoveCounters(final AbilityFactory af) {
- final SpellAbility abRemCounter = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityRemoveCounters extends AbilityActivated {
+ public AbilityRemoveCounters(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityRemoveCounters(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 8581011868395954121L;
@Override
@@ -775,8 +809,9 @@ public class AbilityFactoryCounters {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCounters.removeDoTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abRemCounter = new AbilityRemoveCounters(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abRemCounter;
}
@@ -827,7 +862,18 @@ public class AbilityFactoryCounters {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackRemoveCounters(final AbilityFactory af) {
- final SpellAbility spRemoveCounter = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackRemoveCounters extends AbilitySub {
+ public DrawbackRemoveCounters(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackRemoveCounters(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -5065591869141835456L;
@Override
@@ -849,8 +895,9 @@ public class AbilityFactoryCounters {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCounters.removeDoTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility spRemoveCounter = new DrawbackRemoveCounters(af.getHostCard(), af.getAbTgt());
+
return spRemoveCounter;
}
@@ -1212,7 +1259,18 @@ public class AbilityFactoryCounters {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityProliferate(final AbilityFactory af) {
- final SpellAbility abProliferate = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityProliferate extends AbilityActivated {
+ public AbilityProliferate(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityProliferate(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -6617234927365102930L;
@Override
@@ -1234,7 +1292,8 @@ public class AbilityFactoryCounters {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCounters.proliferateDoTriggerAI(this, mandatory);
}
- };
+ }
+ final SpellAbility abProliferate = new AbilityProliferate(af.getHostCard(), af.getAbCost(), af.getAbTgt());
return abProliferate;
}
@@ -1281,7 +1340,18 @@ public class AbilityFactoryCounters {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackProliferate(final AbilityFactory af) {
- final SpellAbility dbProliferate = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackProliferate extends AbilitySub {
+ public DrawbackProliferate(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackProliferate(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 1265466498444897146L;
@Override
@@ -1308,8 +1378,9 @@ public class AbilityFactoryCounters {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCounters.proliferateDoTriggerAI(this, mandatory);
}
- };
-
+ }
+ final SpellAbility dbProliferate = new DrawbackProliferate(af.getHostCard(), af.getAbTgt());
+
return dbProliferate;
}
@@ -1585,8 +1656,18 @@ public class AbilityFactoryCounters {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityPutCounterAll(final AbilityFactory af) {
-
- final SpellAbility abPutCounterAll = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityPutCounterAll extends AbilityActivated {
+ public AbilityPutCounterAll(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityPutCounterAll(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -712473347429870385L;
@Override
@@ -1608,8 +1689,9 @@ public class AbilityFactoryCounters {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCounters.putAllCanPlayAI(af, this);
}
-
- };
+ }
+ final SpellAbility abPutCounterAll = new AbilityPutCounterAll(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abPutCounterAll;
}
@@ -1655,7 +1737,18 @@ public class AbilityFactoryCounters {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackPutCounterAll(final AbilityFactory af) {
- final SpellAbility dbPutCounterAll = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackPutCounterAll extends AbilitySub {
+ public DrawbackPutCounterAll(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackPutCounterAll(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -3101160929130043022L;
@Override
@@ -1677,8 +1770,9 @@ public class AbilityFactoryCounters {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCounters.putAllPlayDrawbackAI(af, this);
}
-
- };
+ }
+ final SpellAbility dbPutCounterAll = new DrawbackPutCounterAll(af.getHostCard(), af.getAbTgt());
+
return dbPutCounterAll;
}
@@ -1916,8 +2010,18 @@ public class AbilityFactoryCounters {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityRemoveCounterAll(final AbilityFactory af) {
-
- final SpellAbility abRemoveCounterAll = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityRemoveCounterAll extends AbilityActivated {
+ public AbilityRemoveCounterAll(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityRemoveCounterAll(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 1189198508841846311L;
@Override
@@ -1939,8 +2043,9 @@ public class AbilityFactoryCounters {
public boolean doTrigger(final boolean mandatory) {
return true;
}
-
- };
+ }
+ final SpellAbility abRemoveCounterAll = new AbilityRemoveCounterAll(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abRemoveCounterAll;
}
@@ -1986,7 +2091,18 @@ public class AbilityFactoryCounters {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackRemoveCounterAll(final AbilityFactory af) {
- final SpellAbility dbRemoveCounterAll = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackRemoveCounterAll extends AbilitySub {
+ public DrawbackRemoveCounterAll(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackRemoveCounterAll(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 9210702927696563686L;
@Override
@@ -2008,8 +2124,9 @@ public class AbilityFactoryCounters {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCounters.removeCounterAllPlayDrawbackAI(af, this);
}
-
- };
+ }
+ final SpellAbility dbRemoveCounterAll = new DrawbackRemoveCounterAll(af.getHostCard(), af.getAbTgt());
+
return dbRemoveCounterAll;
}
@@ -2138,7 +2255,18 @@ public class AbilityFactoryCounters {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityMoveCounters(final AbilityFactory af) {
- final SpellAbility abMoveCounter = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityMoveCounters extends AbilityActivated {
+ public AbilityMoveCounters(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityMoveCounters(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 4602375375570571305L;
@Override
@@ -2160,8 +2288,9 @@ public class AbilityFactoryCounters {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCounters.moveCounterDoTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abMoveCounter = new AbilityMoveCounters(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abMoveCounter;
}
@@ -2207,7 +2336,18 @@ public class AbilityFactoryCounters {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackMoveCounters(final AbilityFactory af) {
- final SpellAbility dbMoveCounter = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackMoveCounters extends AbilitySub {
+ public DrawbackMoveCounters(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackMoveCounters(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -9185934729634278014L;
@Override
@@ -2229,8 +2369,9 @@ public class AbilityFactoryCounters {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryCounters.moveCounterDoTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbMoveCounter = new DrawbackMoveCounters(af.getHostCard(), af.getAbTgt());
+
return dbMoveCounter;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java
index 6222ba4a893..bc94564921b 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java
@@ -82,8 +82,18 @@ public class AbilityFactoryDealDamage {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public final SpellAbility getAbilityDealDamage() {
- final SpellAbility abDamage = new AbilityActivated(this.abilityFactory.getHostCard(),
- this.abilityFactory.getAbCost(), this.abilityFactory.getAbTgt()) {
+ class AbilityDealDamage extends AbilityActivated {
+ public AbilityDealDamage(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityDealDamage(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -7560349014757367722L;
@Override
@@ -107,7 +117,10 @@ public class AbilityFactoryDealDamage {
return AbilityFactoryDealDamage.this.dealDamageDoTriggerAI(
AbilityFactoryDealDamage.this.abilityFactory, this, mandatory);
}
- }; // Ability_Activated
+ }
+
+ final SpellAbility abDamage = new AbilityDealDamage(this.abilityFactory.getHostCard(),
+ this.abilityFactory.getAbCost(), this.abilityFactory.getAbTgt());
return abDamage;
}
@@ -151,7 +164,7 @@ public class AbilityFactoryDealDamage {
AbilityFactoryDealDamage.this.abilityFactory, this, mandatory);
}
}; // Spell
-
+
return spDealDamage;
}
@@ -163,8 +176,18 @@ public class AbilityFactoryDealDamage {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public final SpellAbility getDrawbackDealDamage() {
- final SpellAbility dbDealDamage = new AbilitySub(this.abilityFactory.getHostCard(),
- this.abilityFactory.getAbTgt()) {
+ class DrawbackDealDamage extends AbilitySub {
+ public DrawbackDealDamage(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackDealDamage(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 7239608350643325111L;
@Override
@@ -194,8 +217,9 @@ public class AbilityFactoryDealDamage {
return AbilityFactoryDealDamage.this.dealDamageDoTriggerAI(
AbilityFactoryDealDamage.this.abilityFactory, this, mandatory);
}
-
- }; // Drawback
+ }
+ final SpellAbility dbDealDamage = new DrawbackDealDamage(this.abilityFactory.getHostCard(),
+ this.abilityFactory.getAbTgt()); // Drawback
return dbDealDamage;
}
@@ -310,7 +334,7 @@ public class AbilityFactoryDealDamage {
private boolean damageDrawback(final SpellAbility sa) {
final Card source = sa.getSourceCard();
int dmg;
- if (this.damage.equals("X") && source.getSVar(this.damage).equals("Count$xPaid")) {
+ if (this.damage.equals("X") && sa.getSVar(this.damage).equals("Count$xPaid")) {
// Set PayX here to maximum value.
dmg = ComputerUtil.determineLeftoverMana(sa);
source.setSVar("PayX", Integer.toString(dmg));
@@ -335,7 +359,7 @@ public class AbilityFactoryDealDamage {
final Card source = saMe.getSourceCard();
int dmg = 0;
- if (this.damage.equals("X") && source.getSVar(this.damage).equals("Count$xPaid")) {
+ if (this.damage.equals("X") && saMe.getSVar(this.damage).equals("Count$xPaid")) {
// Set PayX here to maximum value.
dmg = ComputerUtil.determineLeftoverMana(saMe);
source.setSVar("PayX", Integer.toString(dmg));
@@ -745,7 +769,7 @@ public class AbilityFactoryDealDamage {
final Card source = sa.getSourceCard();
int dmg;
- if (this.damage.equals("X") && source.getSVar(this.damage).equals("Count$xPaid")) {
+ if (this.damage.equals("X") && sa.getSVar(this.damage).equals("Count$xPaid")) {
// Set PayX here to maximum value.
dmg = ComputerUtil.determineLeftoverMana(sa);
source.setSVar("PayX", Integer.toString(dmg));
@@ -877,9 +901,18 @@ public class AbilityFactoryDealDamage {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public final SpellAbility getAbilityDamageAll() {
-
- final SpellAbility abDamageAll = new AbilityActivated(this.abilityFactory.getHostCard(),
- this.abilityFactory.getAbCost(), this.abilityFactory.getAbTgt()) {
+ class AbilityDamageAll extends AbilityActivated {
+ public AbilityDamageAll(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityDamageAll(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -1831356710492849854L;
private final AbilityFactory af = AbilityFactoryDealDamage.this.abilityFactory;
@@ -903,8 +936,10 @@ public class AbilityFactoryDealDamage {
return AbilityFactoryDealDamage.this.damageAllDoTriggerAI(AbilityFactoryDealDamage.this.abilityFactory,
this, mandatory);
}
-
- };
+ }
+ final SpellAbility abDamageAll = new AbilityDamageAll(this.abilityFactory.getHostCard(),
+ this.abilityFactory.getAbCost(), this.abilityFactory.getAbTgt());
+
return abDamageAll;
}
@@ -943,6 +978,7 @@ public class AbilityFactoryDealDamage {
}
};
+
return spDamageAll;
}
@@ -954,8 +990,18 @@ public class AbilityFactoryDealDamage {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public final SpellAbility getDrawbackDamageAll() {
- final SpellAbility dbDamageAll = new AbilitySub(this.abilityFactory.getHostCard(),
- this.abilityFactory.getAbTgt()) {
+ class DrawbackDamageAll extends AbilitySub {
+ public DrawbackDamageAll(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackDamageAll(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -6169562107675964474L;
private final AbilityFactory af = AbilityFactoryDealDamage.this.abilityFactory;
@@ -985,8 +1031,10 @@ public class AbilityFactoryDealDamage {
return AbilityFactoryDealDamage.this.damageAllDoTriggerAI(AbilityFactoryDealDamage.this.abilityFactory,
this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbDamageAll = new DrawbackDamageAll(this.abilityFactory.getHostCard(),
+ this.abilityFactory.getAbTgt());
+
return dbDamageAll;
}
@@ -1062,7 +1110,7 @@ public class AbilityFactoryDealDamage {
String validP = "";
int dmg;
- if (this.damage.equals("X") && source.getSVar(this.damage).equals("Count$xPaid")) {
+ if (this.damage.equals("X") && sa.getSVar(this.damage).equals("Count$xPaid")) {
// Set PayX here to maximum value.
dmg = ComputerUtil.determineLeftoverMana(sa);
source.setSVar("PayX", Integer.toString(dmg));
@@ -1194,7 +1242,7 @@ public class AbilityFactoryDealDamage {
String validP = "";
int dmg;
- if (this.damage.equals("X") && source.getSVar(this.damage).equals("Count$xPaid")) {
+ if (this.damage.equals("X") && sa.getSVar(this.damage).equals("Count$xPaid")) {
// Set PayX here to maximum value.
dmg = ComputerUtil.determineLeftoverMana(sa);
source.setSVar("PayX", Integer.toString(dmg));
@@ -1317,9 +1365,18 @@ public class AbilityFactoryDealDamage {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public final SpellAbility getAbilityEachDamage() {
-
- final SpellAbility abEachDamage = new AbilityActivated(this.abilityFactory.getHostCard(),
- this.abilityFactory.getAbCost(), this.abilityFactory.getAbTgt()) {
+ class AbilityEachDamage extends AbilityActivated {
+ public AbilityEachDamage(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityEachDamage(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -1831356710492849854L;
private final AbilityFactory af = AbilityFactoryDealDamage.this.abilityFactory;
@@ -1343,8 +1400,11 @@ public class AbilityFactoryDealDamage {
return AbilityFactoryDealDamage.this.eachDamageDoTriggerAI(
AbilityFactoryDealDamage.this.abilityFactory, this, mandatory);
}
+ }
- };
+ final SpellAbility abEachDamage = new AbilityEachDamage(this.abilityFactory.getHostCard(),
+ this.abilityFactory.getAbCost(), this.abilityFactory.getAbTgt());
+
return abEachDamage;
}
@@ -1383,6 +1443,7 @@ public class AbilityFactoryDealDamage {
}
};
+
return spEachDamage;
}
@@ -1394,8 +1455,18 @@ public class AbilityFactoryDealDamage {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public final SpellAbility getDrawbackEachDamage() {
- final SpellAbility dbEachDamage = new AbilitySub(this.abilityFactory.getHostCard(),
- this.abilityFactory.getAbTgt()) {
+ class DrawbackEachDamage extends AbilitySub {
+ public DrawbackEachDamage(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackEachDamage(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -6169562107675964474L;
private final AbilityFactory af = AbilityFactoryDealDamage.this.abilityFactory;
@@ -1420,8 +1491,10 @@ public class AbilityFactoryDealDamage {
return AbilityFactoryDealDamage.this.eachDamageDoTriggerAI(
AbilityFactoryDealDamage.this.abilityFactory, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbEachDamage = new DrawbackEachDamage(this.abilityFactory.getHostCard(),
+ this.abilityFactory.getAbTgt());
+
return dbEachDamage;
}
@@ -1534,7 +1607,7 @@ public class AbilityFactoryDealDamage {
for (final Object o : tgts) {
for (final Card source : sources) {
- final int dmg = CardFactoryUtil.xCount(source, card.getSVar("X"));
+ final int dmg = CardFactoryUtil.xCount(source, sa.getSVar("X"));
// System.out.println(source+" deals "+dmg+" damage to "+o.toString());
if (o instanceof Card) {
final Card c = (Card) o;
@@ -1585,9 +1658,18 @@ public class AbilityFactoryDealDamage {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public final SpellAbility getAbilityFight() {
-
- final SpellAbility abFight = new AbilityActivated(this.abilityFactory.getHostCard(),
- this.abilityFactory.getAbCost(), this.abilityFactory.getAbTgt()) {
+ class AbilityFight extends AbilityActivated {
+ public AbilityFight(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityFight(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -1831356710492849854L;
private final AbilityFactory af = AbilityFactoryDealDamage.this.abilityFactory;
@@ -1611,8 +1693,11 @@ public class AbilityFactoryDealDamage {
return AbilityFactoryDealDamage.this.fightDoTriggerAI(
AbilityFactoryDealDamage.this.abilityFactory, this, mandatory);
}
+ }
- };
+ final SpellAbility abFight = new AbilityFight(this.abilityFactory.getHostCard(),
+ this.abilityFactory.getAbCost(), this.abilityFactory.getAbTgt());
+
return abFight;
}
@@ -1662,8 +1747,18 @@ public class AbilityFactoryDealDamage {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public final SpellAbility getDrawbackFight() {
- final SpellAbility dbFight = new AbilitySub(this.abilityFactory.getHostCard(),
- this.abilityFactory.getAbTgt()) {
+ class DrawbackFight extends AbilitySub {
+ public DrawbackFight(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackFight(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -6169562107675964474L;
private final AbilityFactory af = AbilityFactoryDealDamage.this.abilityFactory;
@@ -1688,8 +1783,10 @@ public class AbilityFactoryDealDamage {
return AbilityFactoryDealDamage.this.fightDoTriggerAI(
AbilityFactoryDealDamage.this.abilityFactory, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbFight = new DrawbackFight(this.abilityFactory.getHostCard(),
+ this.abilityFactory.getAbTgt());
+
return dbFight;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryDebuff.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryDebuff.java
index ca7916d340c..e0135963a41 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryDebuff.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryDebuff.java
@@ -73,7 +73,18 @@ public final class AbilityFactoryDebuff {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityDebuff(final AbilityFactory af) {
- final SpellAbility abDebuff = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityDebuff extends AbilityActivated {
+ public AbilityDebuff(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityDebuff(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 3536198601841771383L;
@Override
@@ -95,8 +106,9 @@ public final class AbilityFactoryDebuff {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryDebuff.debuffTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abDebuff = new AbilityDebuff(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abDebuff;
}
@@ -142,7 +154,18 @@ public final class AbilityFactoryDebuff {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackDebuff(final AbilityFactory af) {
- final SpellAbility dbDebuff = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackDebuff extends AbilitySub {
+ public DrawbackDebuff(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackDebuff(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -4728590185604233229L;
@Override
@@ -164,8 +187,9 @@ public final class AbilityFactoryDebuff {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryDebuff.debuffTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbDebuff = new DrawbackDebuff(af.getHostCard(), af.getAbTgt());
+
return dbDebuff;
}
@@ -611,7 +635,18 @@ public final class AbilityFactoryDebuff {
* @since 1.0.15
*/
public static SpellAbility createAbilityDebuffAll(final AbilityFactory af) {
- final SpellAbility abDebuffAll = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityDebuffAll extends AbilityActivated {
+ public AbilityDebuffAll(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityDebuffAll(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -1977027530713097149L;
@Override
@@ -633,8 +668,8 @@ public final class AbilityFactoryDebuff {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryDebuff.debuffAllTriggerAI(af, this, mandatory);
}
-
- }; // SpellAbility
+ }
+ final SpellAbility abDebuffAll = new AbilityDebuffAll(af.getHostCard(), af.getAbCost(), af.getAbTgt());
return abDebuffAll;
}
@@ -683,7 +718,18 @@ public final class AbilityFactoryDebuff {
* @since 1.0.15
*/
public static SpellAbility createDrawbackDebuffAll(final AbilityFactory af) {
- final SpellAbility dbDebuffAll = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackDebuffAll extends AbilitySub {
+ public DrawbackDebuffAll(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackDebuffAll(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 3262199296469706708L;
@Override
@@ -705,8 +751,10 @@ public final class AbilityFactoryDebuff {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryDebuff.debuffAllTriggerAI(af, this, mandatory);
}
- }; // SpellAbility
-
+ }
+
+ final SpellAbility dbDebuffAll = new DrawbackDebuffAll(af.getHostCard(), af.getAbTgt()); // SpellAbility
+
return dbDebuffAll;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryDelayedTrigger.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryDelayedTrigger.java
index 2ea88531435..3f6876556bd 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryDelayedTrigger.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryDelayedTrigger.java
@@ -20,10 +20,14 @@ package forge.card.abilityfactory;
import java.util.HashMap;
import forge.AllZone;
+import forge.Card;
+import forge.card.cardfactory.CardFactoryUtil;
+import forge.card.cost.Cost;
import forge.card.spellability.AbilityActivated;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
+import forge.card.spellability.Target;
import forge.card.trigger.Trigger;
import forge.card.trigger.TriggerHandler;
@@ -49,7 +53,18 @@ public class AbilityFactoryDelayedTrigger {
* @since 1.0.15
*/
public static SpellAbility getAbility(final AbilityFactory af) {
- final SpellAbility ability = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityDelayedTrigger extends AbilityActivated {
+ public AbilityDelayedTrigger(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityDelayedTrigger(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -7502962478028160305L;
@Override
@@ -71,7 +86,9 @@ public class AbilityFactoryDelayedTrigger {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryDelayedTrigger.doTriggerAI(af, this, mandatory);
}
- };
+ }
+ final SpellAbility ability = new AbilityDelayedTrigger(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return ability;
}
@@ -117,7 +134,18 @@ public class AbilityFactoryDelayedTrigger {
* @return a {@link forge.card.spellability.AbilitySub} object.
*/
public static AbilitySub getDrawback(final AbilityFactory abilityFactory) {
- final AbilitySub drawback = new AbilitySub(abilityFactory.getHostCard(), abilityFactory.getAbTgt()) {
+ class DrawbackDelayedTrigger extends AbilitySub {
+ public DrawbackDelayedTrigger(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackDelayedTrigger(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 6192972525033429820L;
@Override
@@ -134,7 +162,8 @@ public class AbilityFactoryDelayedTrigger {
public void resolve() {
AbilityFactoryDelayedTrigger.doResolve(abilityFactory, this);
}
- };
+ }
+ final AbilitySub drawback = new DrawbackDelayedTrigger(abilityFactory.getHostCard(), abilityFactory.getAbTgt());
return drawback;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryDestroy.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryDestroy.java
index 9fc6b626412..e0a117902a1 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryDestroy.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryDestroy.java
@@ -67,7 +67,18 @@ public class AbilityFactoryDestroy {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityDestroy(final AbilityFactory af) {
- final SpellAbility abDestroy = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityDestroy extends AbilityActivated {
+ public AbilityDestroy(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityDestroy(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -4153613567150919283L;
@Override
@@ -89,8 +100,9 @@ public class AbilityFactoryDestroy {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryDestroy.destroyDoTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abDestroy = new AbilityDestroy(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abDestroy;
}
@@ -144,7 +156,18 @@ public class AbilityFactoryDestroy {
* @return a {@link forge.card.spellability.AbilitySub} object.
*/
public static AbilitySub createDrawbackDestroy(final AbilityFactory af) {
- final AbilitySub dbDestroy = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackDestroy extends AbilitySub {
+ public DrawbackDestroy(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackDestroy(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -4153613567150919283L;
@Override
@@ -166,7 +189,9 @@ public class AbilityFactoryDestroy {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryDestroy.destroyDoTriggerAI(af, this, mandatory);
}
- };
+ }
+ final AbilitySub dbDestroy = new DrawbackDestroy(af.getHostCard(), af.getAbTgt());
+
return dbDestroy;
}
@@ -597,8 +622,18 @@ public class AbilityFactoryDestroy {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityDestroyAll(final AbilityFactory af) {
-
- final SpellAbility abDestroyAll = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityDestroyAll extends AbilityActivated {
+ public AbilityDestroyAll(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityDestroyAll(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -1376444173137861437L;
private final HashMap params = af.getMapParams();
@@ -623,8 +658,9 @@ public class AbilityFactoryDestroy {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryDestroy.destroyAllCanPlayAI(af, this, this.noRegen);
}
-
- };
+ }
+ final SpellAbility abDestroyAll = new AbilityDestroyAll(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abDestroyAll;
}
@@ -677,7 +713,18 @@ public class AbilityFactoryDestroy {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackDestroyAll(final AbilityFactory af) {
- final SpellAbility dbDestroyAll = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackDestroyAll extends AbilitySub {
+ public DrawbackDestroyAll(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackDestroyAll(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -242160421677518351L;
private final HashMap params = af.getMapParams();
@@ -707,8 +754,9 @@ public class AbilityFactoryDestroy {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryDestroy.destroyAllTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbDestroyAll = new DrawbackDestroyAll(af.getHostCard(), af.getAbTgt());
+
return dbDestroyAll;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryEffect.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryEffect.java
index 8c996eee991..49dfd77d557 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryEffect.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryEffect.java
@@ -29,6 +29,7 @@ import forge.CardListFilter;
import forge.Command;
import forge.Singletons;
import forge.card.cardfactory.CardFactoryUtil;
+import forge.card.cost.Cost;
import forge.card.replacement.ReplacementEffect;
import forge.card.replacement.ReplacementHandler;
import forge.card.spellability.AbilityActivated;
@@ -66,9 +67,18 @@ public class AbilityFactoryEffect {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityEffect(final AbilityFactory abilityFactory) {
-
- final SpellAbility abEffect = new AbilityActivated(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
- abilityFactory.getAbTgt()) {
+ class AbilityEffect extends AbilityActivated {
+ public AbilityEffect(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityEffect(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 8869422603616247307L;
private final AbilityFactory af = abilityFactory;
@@ -94,8 +104,10 @@ public class AbilityFactoryEffect {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryEffect.effectDoTriggerAI(this.af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abEffect = new AbilityEffect(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
+ abilityFactory.getAbTgt());
+
return abEffect;
}
@@ -146,7 +158,18 @@ public class AbilityFactoryEffect {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackEffect(final AbilityFactory abilityFactory) {
- final SpellAbility dbEffect = new AbilitySub(abilityFactory.getHostCard(), abilityFactory.getAbTgt()) {
+ class DrawbackEffect extends AbilitySub {
+ public DrawbackEffect(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackEffect(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 6631124959690157874L;
private final AbilityFactory af = abilityFactory;
@@ -177,8 +200,9 @@ public class AbilityFactoryEffect {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryEffect.effectDoTriggerAI(this.af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbEffect = new DrawbackEffect(abilityFactory.getHostCard(), abilityFactory.getAbTgt());
+
return dbEffect;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryEndGameCondition.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryEndGameCondition.java
index 2fdb5931447..149064da179 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryEndGameCondition.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryEndGameCondition.java
@@ -26,6 +26,8 @@ import forge.card.spellability.AbilitySub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
+import forge.card.cardfactory.CardFactoryUtil;
+import forge.card.cost.Cost;
import forge.game.GameLossReason;
import forge.game.player.ComputerUtil;
import forge.game.player.Player;
@@ -58,8 +60,18 @@ public final class AbilityFactoryEndGameCondition {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityWinsGame(final AbilityFactory af) {
-
- final SpellAbility abWinsGame = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityWinsGame extends AbilityActivated {
+ public AbilityWinsGame(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityWinsGame(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 8869422603616247307L;
@Override
@@ -83,8 +95,9 @@ public final class AbilityFactoryEndGameCondition {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryEndGameCondition.winsGameDoTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abWinsGame = new AbilityWinsGame(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abWinsGame;
}
@@ -137,7 +150,18 @@ public final class AbilityFactoryEndGameCondition {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackWinsGame(final AbilityFactory af) {
- final SpellAbility dbWinsGame = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackWinsGame extends AbilitySub {
+ public DrawbackWinsGame(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackWinsGame(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 6631124959690157874L;
@Override
@@ -171,8 +195,9 @@ public final class AbilityFactoryEndGameCondition {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryEndGameCondition.winsGameDoTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbWinsGame = new DrawbackWinsGame(af.getHostCard(), af.getAbTgt());
+
return dbWinsGame;
}
@@ -297,8 +322,18 @@ public final class AbilityFactoryEndGameCondition {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityLosesGame(final AbilityFactory af) {
-
- final SpellAbility abLosesGame = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityLosesGame extends AbilityActivated {
+ public AbilityLosesGame(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityLosesGame(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 8869422603616247307L;
@Override
@@ -322,8 +357,9 @@ public final class AbilityFactoryEndGameCondition {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryEndGameCondition.losesGameDoTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abLosesGame = new AbilityLosesGame(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abLosesGame;
}
@@ -376,7 +412,18 @@ public final class AbilityFactoryEndGameCondition {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackLosesGame(final AbilityFactory af) {
- final SpellAbility dbLosesGame = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackLosesGame extends AbilitySub {
+ public DrawbackLosesGame(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackLosesGame(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 6631124959690157874L;
@Override
@@ -410,8 +457,9 @@ public final class AbilityFactoryEndGameCondition {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryEndGameCondition.losesGameDoTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbLosesGame = new DrawbackLosesGame(af.getHostCard(), af.getAbTgt());
+
return dbLosesGame;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryGainControl.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryGainControl.java
index b443c5952bd..80b08d10b1d 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryGainControl.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryGainControl.java
@@ -37,6 +37,7 @@ import forge.card.spellability.AbilitySub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
+import forge.card.cost.Cost;
import forge.game.phase.PhaseType;
import forge.game.player.ComputerUtil;
import forge.game.player.Player;
@@ -149,8 +150,18 @@ public class AbilityFactoryGainControl {
* @since 1.0.15
*/
public final SpellAbility getAbilityGainControl() {
-
- final SpellAbility abControl = new AbilityActivated(this.hostCard, this.af.getAbCost(), this.af.getAbTgt()) {
+ class AbilityGainControl extends AbilityActivated {
+ public AbilityGainControl(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityGainControl(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -4384705198674678831L;
@Override
@@ -172,7 +183,8 @@ public class AbilityFactoryGainControl {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryGainControl.this.gainControlTgtAI(this);
}
- }; // Ability_Activated
+ }
+ final SpellAbility abControl = new AbilityGainControl(this.hostCard, this.af.getAbCost(), this.af.getAbTgt());
return abControl;
}
@@ -186,7 +198,18 @@ public class AbilityFactoryGainControl {
* @since 1.0.15
*/
public final SpellAbility getDrawbackGainControl() {
- final SpellAbility dbControl = new AbilitySub(this.hostCard, this.af.getAbTgt()) {
+ class DrawbackGainControl extends AbilitySub {
+ public DrawbackGainControl(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackGainControl(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -5577742598032345880L;
@Override
@@ -213,7 +236,8 @@ public class AbilityFactoryGainControl {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryGainControl.this.gainControlTriggerAI(this, mandatory);
}
- }; // SpellAbility
+ }
+ final SpellAbility dbControl = new DrawbackGainControl(this.hostCard, this.af.getAbTgt()); // SpellAbility
return dbControl;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryMana.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryMana.java
index 31950525ca0..83ccab937db 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryMana.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryMana.java
@@ -162,7 +162,18 @@ public class AbilityFactoryMana {
*/
public static AbilitySub createDrawbackMana(final AbilityFactory abilityFactory, final String produced) {
final String restrictions = abilityFactory.getMapParams().get("RestrictValid");
- final AbilitySub dbMana = new AbilitySub(abilityFactory.getHostCard(), abilityFactory.getAbTgt()) {
+ class DrawbackMana extends AbilitySub {
+ public DrawbackMana(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackMana(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -5141246507533353605L;
private final AbilityFactory af = abilityFactory;
@@ -201,8 +212,9 @@ public class AbilityFactoryMana {
// TODO Auto-generated method stub
return false;
}
-
- };
+ }
+ final AbilitySub dbMana = new DrawbackMana(abilityFactory.getHostCard(), abilityFactory.getAbTgt());
+
return dbMana;
}
@@ -899,7 +911,18 @@ public class AbilityFactoryMana {
* @since 1.0.15
*/
public static SpellAbility createAbilityDrainMana(final AbilityFactory af) {
- final SpellAbility abDrainMana = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityDrainMana extends AbilityActivated {
+ public AbilityDrainMana(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityDrainMana(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 5669367387381350104L;
@Override
@@ -921,8 +944,10 @@ public class AbilityFactoryMana {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryMana.drainManaTrigger(af, this, mandatory);
}
+ }
- };
+ final SpellAbility abDrainMana = new AbilityDrainMana(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abDrainMana;
}
@@ -970,7 +995,18 @@ public class AbilityFactoryMana {
* @since 1.0.15
*/
public static SpellAbility createDrawbackDrainMana(final AbilityFactory af) {
- final SpellAbility dbDrainMana = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackDrainMana extends AbilitySub {
+ public DrawbackDrainMana(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackDrainMana(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 1458568386420831420L;
@Override
@@ -992,8 +1028,9 @@ public class AbilityFactoryMana {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryMana.drainManaTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbDrainMana = new DrawbackDrainMana(af.getHostCard(), af.getAbTgt());
+
return dbDrainMana;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryPermanentState.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryPermanentState.java
index 404e1fe33b2..ade11264f22 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryPermanentState.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryPermanentState.java
@@ -68,7 +68,18 @@ public class AbilityFactoryPermanentState {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityUntap(final AbilityFactory af) {
- final SpellAbility abUntap = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityUntap extends AbilityActivated {
+ public AbilityUntap(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityUntap(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 5445572699000471299L;
@Override
@@ -90,8 +101,9 @@ public class AbilityFactoryPermanentState {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryPermanentState.untapTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abUntap = new AbilityUntap(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abUntap;
}
@@ -137,7 +149,18 @@ public class AbilityFactoryPermanentState {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackUntap(final AbilityFactory af) {
- final SpellAbility dbUntap = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackUntap extends AbilitySub {
+ public DrawbackUntap(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackUntap(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -4990932993654533449L;
@Override
@@ -164,8 +187,9 @@ public class AbilityFactoryPermanentState {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryPermanentState.untapTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbUntap = new DrawbackUntap(af.getHostCard(), af.getAbTgt());
+
return dbUntap;
}
@@ -637,7 +661,18 @@ public class AbilityFactoryPermanentState {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityTap(final AbilityFactory af) {
- final SpellAbility abTap = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityTap extends AbilityActivated {
+ public AbilityTap(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityTap(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 5445572699000471299L;
@Override
@@ -659,8 +694,9 @@ public class AbilityFactoryPermanentState {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryPermanentState.tapTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abTap = new AbilityTap(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abTap;
}
@@ -706,7 +742,18 @@ public class AbilityFactoryPermanentState {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackTap(final AbilityFactory af) {
- final SpellAbility dbTap = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackTap extends AbilitySub {
+ public DrawbackTap(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackTap(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -4990932993654533449L;
@Override
@@ -733,8 +780,9 @@ public class AbilityFactoryPermanentState {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryPermanentState.tapTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbTap = new DrawbackTap(af.getHostCard(), af.getAbTgt());
+
return dbTap;
}
@@ -1170,7 +1218,18 @@ public class AbilityFactoryPermanentState {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityUntapAll(final AbilityFactory af) {
- final SpellAbility abUntap = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityUntapAll extends AbilityActivated {
+ public AbilityUntapAll(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityUntapAll(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 8914852730903389831L;
@Override
@@ -1192,8 +1251,9 @@ public class AbilityFactoryPermanentState {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryPermanentState.untapAllTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abUntap = new AbilityUntapAll(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abUntap;
}
@@ -1239,7 +1299,18 @@ public class AbilityFactoryPermanentState {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackUntapAll(final AbilityFactory af) {
- final SpellAbility dbUntapAll = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackUntapAll extends AbilitySub {
+ public DrawbackUntapAll(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackUntapAll(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -5187900994680626766L;
@Override
@@ -1261,8 +1332,9 @@ public class AbilityFactoryPermanentState {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryPermanentState.untapAllPlayDrawbackAI(af, this);
}
-
- };
+ }
+ final SpellAbility dbUntapAll = new DrawbackUntapAll(af.getHostCard(), af.getAbTgt());
+
return dbUntapAll;
}
@@ -1413,7 +1485,18 @@ public class AbilityFactoryPermanentState {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityTapAll(final AbilityFactory af) {
- final SpellAbility abUntap = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityTapAll extends AbilityActivated {
+ public AbilityTapAll(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityTapAll(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -2095140656782946737L;
@Override
@@ -1435,8 +1518,9 @@ public class AbilityFactoryPermanentState {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryPermanentState.tapAllTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abUntap = new AbilityTapAll(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abUntap;
}
@@ -1482,7 +1566,18 @@ public class AbilityFactoryPermanentState {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackTapAll(final AbilityFactory af) {
- final SpellAbility dbTap = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackTapAll extends AbilitySub {
+ public DrawbackTapAll(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackTapAll(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -4990932993654533449L;
@Override
@@ -1509,8 +1604,9 @@ public class AbilityFactoryPermanentState {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryPermanentState.tapAllPlayDrawbackAI(af, this);
}
-
- };
+ }
+ final SpellAbility dbTap = new DrawbackTapAll(af.getHostCard(), af.getAbTgt());
+
return dbTap;
}
@@ -1772,7 +1868,18 @@ public class AbilityFactoryPermanentState {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityTapOrUntap(final AbilityFactory af) {
- final SpellAbility abTapOrUntap = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityTapOrUntap extends AbilityActivated {
+ public AbilityTapOrUntap(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityTapOrUntap(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -4713183763302932079L;
@Override
@@ -1794,8 +1901,9 @@ public class AbilityFactoryPermanentState {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryPermanentState.tapOrUntapTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abTapOrUntap = new AbilityTapOrUntap(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abTapOrUntap;
}
@@ -1841,7 +1949,18 @@ public class AbilityFactoryPermanentState {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackTapOrUntap(final AbilityFactory af) {
- final SpellAbility dbTapOrUntap = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackTapOrUntap extends AbilitySub {
+ public DrawbackTapOrUntap(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackTapOrUntap(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -8282868583712773337L;
@Override
@@ -1863,8 +1982,9 @@ public class AbilityFactoryPermanentState {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryPermanentState.tapOrUntapTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbTapOrUntap = new DrawbackTapOrUntap(af.getHostCard(), af.getAbTgt());
+
return dbTapOrUntap;
}
@@ -2107,7 +2227,18 @@ public class AbilityFactoryPermanentState {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityPhases(final AbilityFactory af) {
- final SpellAbility abPhases = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityPhases extends AbilityActivated {
+ public AbilityPhases(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityPhases(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 5445572699000471299L;
@Override
@@ -2129,8 +2260,9 @@ public class AbilityFactoryPermanentState {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryPermanentState.phasesTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abPhases = new AbilityPhases(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abPhases;
}
@@ -2176,7 +2308,18 @@ public class AbilityFactoryPermanentState {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackPhases(final AbilityFactory af) {
- final SpellAbility dbPhases = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackPhases extends AbilitySub {
+ public DrawbackPhases(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackPhases(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -4990932993654533449L;
@Override
@@ -2198,8 +2341,9 @@ public class AbilityFactoryPermanentState {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryPermanentState.phasesTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbPhases = new DrawbackPhases(af.getHostCard(), af.getAbTgt());
+
return dbPhases;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryPlay.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryPlay.java
index 6661707d7ec..49f5cb901ea 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryPlay.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryPlay.java
@@ -70,8 +70,18 @@ public final class AbilityFactoryPlay {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityPlay(final AbilityFactory af) {
-
- final SpellAbility abCopySpell = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityPlay extends AbilityActivated {
+ public AbilityPlay(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityPlay(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 5232548517225345052L;
@Override
@@ -93,8 +103,9 @@ public final class AbilityFactoryPlay {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryPlay.playTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abCopySpell = new AbilityPlay(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abCopySpell;
}
@@ -145,7 +156,18 @@ public final class AbilityFactoryPlay {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackPlay(final AbilityFactory af) {
- final SpellAbility dbCopySpell = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackPlay extends AbilitySub {
+ public DrawbackPlay(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackPlay(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 1927508119173644632L;
@Override
@@ -167,8 +189,9 @@ public final class AbilityFactoryPlay {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryPlay.playTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbCopySpell = new DrawbackPlay(af.getHostCard(), af.getAbTgt());
+
return dbCopySpell;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryPreventDamage.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryPreventDamage.java
index c6108841c42..e7f5394ab95 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryPreventDamage.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryPreventDamage.java
@@ -66,8 +66,18 @@ public class AbilityFactoryPreventDamage {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityPreventDamage(final AbilityFactory af) {
-
- final SpellAbility abPrevent = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityPreventDamage extends AbilityActivated {
+ public AbilityPreventDamage(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityPreventDamage(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -6581723619801399347L;
@Override
@@ -89,8 +99,8 @@ public class AbilityFactoryPreventDamage {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryPreventDamage.preventDamageDoTriggerAI(af, this, mandatory);
}
-
- }; // Ability_Activated
+ }
+ final SpellAbility abPrevent = new AbilityPreventDamage(af.getHostCard(), af.getAbCost(), af.getAbTgt());
return abPrevent;
}
@@ -139,7 +149,18 @@ public class AbilityFactoryPreventDamage {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackPreventDamage(final AbilityFactory af) {
- final SpellAbility dbPrevent = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackPreventDamage extends AbilitySub {
+ public DrawbackPreventDamage(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackPreventDamage(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -2295483806708528744L;
@Override
@@ -161,8 +182,9 @@ public class AbilityFactoryPreventDamage {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryPreventDamage.preventDamageDoTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbPrevent = new DrawbackPreventDamage(af.getHostCard(), af.getAbTgt());
+
return dbPrevent;
}
@@ -542,7 +564,18 @@ public class AbilityFactoryPreventDamage {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityPreventDamageAll(final AbilityFactory af) {
- final SpellAbility abPreventAll = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityPreventDamageAll extends AbilityActivated {
+ public AbilityPreventDamageAll(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityPreventDamageAll(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 5750726631110311462L;
@Override
@@ -564,8 +597,8 @@ public class AbilityFactoryPreventDamage {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryPreventDamage.preventDamageAllDoTriggerAI(af, this, mandatory);
}
-
- }; // Ability_Activated
+ }
+ final SpellAbility abPreventAll = new AbilityPreventDamageAll(af.getHostCard(), af.getAbCost(), af.getAbTgt());
return abPreventAll;
}
@@ -613,7 +646,18 @@ public class AbilityFactoryPreventDamage {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackPreventDamageAll(final AbilityFactory af) {
- final SpellAbility dbPreventAll = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackPreventDamageAll extends AbilitySub {
+ public DrawbackPreventDamageAll(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackPreventDamageAll(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -655573137457133314L;
@Override
@@ -635,8 +679,9 @@ public class AbilityFactoryPreventDamage {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryPreventDamage.preventDamageAllDoTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbPreventAll = new DrawbackPreventDamageAll(af.getHostCard(), af.getAbTgt());
+
return dbPreventAll;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryProtection.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryProtection.java
index 460e104a470..6fd76ec6413 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryProtection.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryProtection.java
@@ -104,7 +104,18 @@ public final class AbilityFactoryProtection {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityProtection(final AbilityFactory af) {
- final SpellAbility abProtect = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityProtection extends AbilityActivated {
+ public AbilityProtection(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityProtection(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -5295298887428747473L;
@Override
@@ -126,8 +137,8 @@ public final class AbilityFactoryProtection {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryProtection.protectTriggerAI(af, this, mandatory);
}
-
- }; // SpellAbility
+ }
+ final SpellAbility abProtect = new AbilityProtection(af.getHostCard(), af.getAbCost(), af.getAbTgt());
return abProtect;
}
@@ -142,7 +153,18 @@ public final class AbilityFactoryProtection {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackProtection(final AbilityFactory af) {
- final SpellAbility dbProtect = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackProtection extends AbilitySub {
+ public DrawbackProtection(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackProtection(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 8342800124705819366L;
@Override
@@ -169,7 +191,8 @@ public final class AbilityFactoryProtection {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryProtection.protectTriggerAI(af, this, mandatory);
}
- }; // SpellAbility
+ }
+ final SpellAbility dbProtect = new DrawbackProtection(af.getHostCard(), af.getAbTgt()); // SpellAbility
return dbProtect;
}
@@ -886,7 +909,18 @@ public final class AbilityFactoryProtection {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityProtectionAll(final AbilityFactory af) {
- final SpellAbility abProtectAll = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityProtectionAll extends AbilityActivated {
+ public AbilityProtectionAll(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityProtectionAll(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -8491026929105907288L;
@Override
@@ -908,8 +942,8 @@ public final class AbilityFactoryProtection {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryProtection.protectAllTriggerAI(af, this, mandatory);
}
-
- }; // SpellAbility
+ }
+ final SpellAbility abProtectAll = new AbilityProtectionAll(af.getHostCard(), af.getAbCost(), af.getAbTgt());
return abProtectAll;
}
@@ -924,7 +958,18 @@ public final class AbilityFactoryProtection {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackProtectionAll(final AbilityFactory af) {
- final SpellAbility dbProtectAll = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackProtectionAll extends AbilitySub {
+ public DrawbackProtectionAll(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackProtectionAll(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 5096939345199247701L;
@Override
@@ -951,7 +996,8 @@ public final class AbilityFactoryProtection {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryProtection.protectAllTriggerAI(af, this, mandatory);
}
- }; // SpellAbility
+ }
+ final SpellAbility dbProtectAll = new DrawbackProtectionAll(af.getHostCard(), af.getAbTgt()); // SpellAbility
return dbProtectAll;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java
index 6a9a203cc8f..6a4c3466baa 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java
@@ -26,6 +26,7 @@ import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
+import forge.CardListUtil;
import forge.CardUtil;
import forge.Command;
import forge.GameEntity;
@@ -152,8 +153,18 @@ public class AbilityFactoryPump {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public final SpellAbility getAbilityPump() {
- final SpellAbility abPump = new AbilityActivated(this.hostCard, this.abilityFactory.getAbCost(),
- this.abilityFactory.getAbTgt()) {
+ class AbilityPump extends AbilityActivated {
+ public AbilityPump(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityPump(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -1118592153328758083L;
@Override
@@ -175,8 +186,9 @@ public class AbilityFactoryPump {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryPump.this.pumpTriggerAI(AbilityFactoryPump.this.abilityFactory, this, mandatory);
}
-
- }; // SpellAbility
+ }
+ final SpellAbility abPump = new AbilityPump(this.hostCard, this.abilityFactory.getAbCost(),
+ this.abilityFactory.getAbTgt());
return abPump;
}
@@ -189,7 +201,18 @@ public class AbilityFactoryPump {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public final SpellAbility getDrawbackPump() {
- final SpellAbility dbPump = new AbilitySub(this.hostCard, this.abilityFactory.getAbTgt()) {
+ class DrawbackPump extends AbilitySub {
+ public DrawbackPump(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackPump(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 42244224L;
@Override
@@ -216,7 +239,8 @@ public class AbilityFactoryPump {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryPump.this.pumpTriggerAI(AbilityFactoryPump.this.abilityFactory, this, mandatory);
}
- }; // SpellAbility
+ }
+ final SpellAbility dbPump = new DrawbackPump(this.hostCard, this.abilityFactory.getAbTgt()); // SpellAbility
return dbPump;
}
@@ -768,8 +792,19 @@ public class AbilityFactoryPump {
final Target tgt = sa.getTarget();
tgt.resetTargets();
- CardList list;
- if (this.abilityFactory.isCurse()) {
+ CardList list = new CardList();
+ if (this.abilityFactory.getMapParams().containsKey("AILogic")) {
+ if (this.abilityFactory.getMapParams().get("AILogic").equals("HighestPower")) {
+ list = AllZoneUtil.getCreaturesInPlay().getValidCards(tgt.getValidTgts(), sa.getActivatingPlayer(), sa.getSourceCard());
+ list = list.getTargetableCards(sa);
+ CardListUtil.sortAttack(list);
+ if (!list.isEmpty()) {
+ tgt.addTarget(list.get(0));
+ } else {
+ return false;
+ }
+ }
+ } else if (this.abilityFactory.isCurse()) {
list = this.getCurseCreatures(sa, defense, attack);
if (sa.canTarget(AllZone.getHumanPlayer())) {
tgt.addTarget(AllZone.getHumanPlayer());
@@ -1303,8 +1338,18 @@ public class AbilityFactoryPump {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public final SpellAbility getAbilityPumpAll() {
- final SpellAbility abPumpAll = new AbilityActivated(this.hostCard, this.abilityFactory.getAbCost(),
- this.abilityFactory.getAbTgt()) {
+ class AbilityPumpAll extends AbilityActivated {
+ public AbilityPumpAll(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityPumpAll(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -8299417521903307630L;
@Override
@@ -1327,8 +1372,9 @@ public class AbilityFactoryPump {
return AbilityFactoryPump.this
.pumpAllTriggerAI(AbilityFactoryPump.this.abilityFactory, this, mandatory);
}
-
- }; // SpellAbility
+ }
+ final SpellAbility abPumpAll = new AbilityPumpAll(this.hostCard, this.abilityFactory.getAbCost(),
+ this.abilityFactory.getAbTgt());
return abPumpAll;
}
@@ -1372,7 +1418,18 @@ public class AbilityFactoryPump {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public final SpellAbility getDrawbackPumpAll() {
- final SpellAbility dbPumpAll = new AbilitySub(this.hostCard, this.abilityFactory.getAbTgt()) {
+ class DrawbackPumpAll extends AbilitySub {
+ public DrawbackPumpAll(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackPumpAll(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 6411531984691660342L;
@Override
@@ -1400,7 +1457,8 @@ public class AbilityFactoryPump {
return AbilityFactoryPump.this
.pumpAllTriggerAI(AbilityFactoryPump.this.abilityFactory, this, mandatory);
}
- }; // SpellAbility
+ }
+ final SpellAbility dbPumpAll = new DrawbackPumpAll(this.hostCard, this.abilityFactory.getAbTgt()); // SpellAbility
return dbPumpAll;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryRegenerate.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryRegenerate.java
index 7db8eaa545e..bd0ddfdc89a 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryRegenerate.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryRegenerate.java
@@ -69,8 +69,18 @@ public class AbilityFactoryRegenerate {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility getAbilityRegenerate(final AbilityFactory af) {
-
- final SpellAbility abRegenerate = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityRegenerate extends AbilityActivated {
+ public AbilityRegenerate(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityRegenerate(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -6386981911243700037L;
@Override
@@ -92,8 +102,8 @@ public class AbilityFactoryRegenerate {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryRegenerate.doTriggerAI(af, this, mandatory);
}
-
- }; // Ability_Activated
+ }
+ final SpellAbility abRegenerate = new AbilityRegenerate(af.getHostCard(), af.getAbCost(), af.getAbTgt());
return abRegenerate;
}
@@ -141,8 +151,19 @@ public class AbilityFactoryRegenerate {
* a {@link forge.card.abilityfactory.AbilityFactory} object.
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
- public static SpellAbility createDrawbackRegenerate(final AbilityFactory af) {
- final SpellAbility dbRegen = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ public static SpellAbility getDrawbackRegenerate(final AbilityFactory af) {
+ class DrawbackRegenerate extends AbilitySub {
+ public DrawbackRegenerate(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackRegenerate(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -2295483806708528744L;
@Override
@@ -164,8 +185,9 @@ public class AbilityFactoryRegenerate {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryRegenerate.doTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbRegen = new DrawbackRegenerate(af.getHostCard(), af.getAbTgt());
+
return dbRegen;
}
@@ -499,8 +521,18 @@ public class AbilityFactoryRegenerate {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility getAbilityRegenerateAll(final AbilityFactory af) {
-
- final SpellAbility abRegenerateAll = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityRegenerateAll extends AbilityActivated {
+ public AbilityRegenerateAll(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityRegenerateAll(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -3001272997209059394L;
@Override
@@ -522,8 +554,8 @@ public class AbilityFactoryRegenerate {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryRegenerate.regenerateAllDoTriggerAI(af, this, mandatory);
}
-
- }; // Ability_Activated
+ }
+ final SpellAbility abRegenerateAll = new AbilityRegenerateAll(af.getHostCard(), af.getAbCost(), af.getAbTgt());
return abRegenerateAll;
}
@@ -571,8 +603,19 @@ public class AbilityFactoryRegenerate {
* a {@link forge.card.abilityfactory.AbilityFactory} object.
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
- public static SpellAbility createDrawbackRegenerateAll(final AbilityFactory af) {
- final SpellAbility dbRegenAll = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ public static SpellAbility getDrawbackRegenerateAll(final AbilityFactory af) {
+ class DrawbackRegenerateAll extends AbilitySub {
+ public DrawbackRegenerateAll(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackRegenerateAll(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 4777861790603705572L;
@Override
@@ -595,7 +638,9 @@ public class AbilityFactoryRegenerate {
return AbilityFactoryRegenerate.regenerateAllDoTriggerAI(af, this, mandatory);
}
- };
+ }
+ final SpellAbility dbRegenAll = new DrawbackRegenerateAll(af.getHostCard(), af.getAbTgt());
+
return dbRegenAll;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryRepeat.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryRepeat.java
index 8b6a344e833..e7ef39cf7ae 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryRepeat.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryRepeat.java
@@ -22,6 +22,7 @@ import java.util.HashMap;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
+import forge.card.cost.Cost;
import forge.CardList;
import forge.GameActionUtil;
import forge.card.cardfactory.CardFactoryUtil;
@@ -57,7 +58,17 @@ public final class AbilityFactoryRepeat {
* @since 1.0.15
*/
public static SpellAbility createAbilityRepeat(final AbilityFactory af) {
- final SpellAbility abRepeat = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityRepeat extends AbilityActivated {
+ public AbilityRepeat(final Card ca, final Cost co, final Target t) {
+ super(ca,co,t);
+ }
+
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityRepeat(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -8019637116128196482L;
@Override
@@ -79,7 +90,8 @@ public final class AbilityFactoryRepeat {
public void resolve() {
AbilityFactoryRepeat.repeatResolve(af, this);
}
- };
+ }
+ final SpellAbility abRepeat = new AbilityRepeat(af.getHostCard(), af.getAbCost(), af.getAbTgt());
return abRepeat;
}
@@ -133,7 +145,18 @@ public final class AbilityFactoryRepeat {
* @since 1.0.15
*/
public static SpellAbility createDrawbackRepeat(final AbilityFactory af) {
- final SpellAbility dbRepeat = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackRepeat extends AbilitySub {
+ public DrawbackRepeat(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackRepeat(getSourceCard(),new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -3850086157052881036L;
@Override
@@ -160,7 +183,8 @@ public final class AbilityFactoryRepeat {
public void resolve() {
AbilityFactoryRepeat.repeatResolve(af, this);
}
- };
+ }
+ final SpellAbility dbRepeat = new DrawbackRepeat(af.getHostCard(), af.getAbTgt());
return dbRepeat;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryReveal.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryReveal.java
index cfb1d351d09..c87e94e1f4b 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryReveal.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryReveal.java
@@ -77,8 +77,18 @@ public final class AbilityFactoryReveal {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityDig(final AbilityFactory af) {
-
- final SpellAbility abDig = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityDig extends AbilityActivated {
+ public AbilityDig(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityDig(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 4239474096624403497L;
@Override
@@ -101,7 +111,8 @@ public final class AbilityFactoryReveal {
return AbilityFactoryReveal.digTriggerAI(af, this, mandatory);
}
- };
+ }
+ final SpellAbility abDig = new AbilityDig(af.getHostCard(), af.getAbCost(), af.getAbTgt());
return abDig;
}
@@ -147,7 +158,18 @@ public final class AbilityFactoryReveal {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackDig(final AbilityFactory af) {
- final SpellAbility dbDig = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackDig extends AbilitySub {
+ public DrawbackDig(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackDig(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -3372788479421357024L;
@Override
@@ -174,8 +196,9 @@ public final class AbilityFactoryReveal {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryReveal.digTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbDig = new DrawbackDig(af.getHostCard(), af.getAbTgt());
+
return dbDig;
}
@@ -664,7 +687,18 @@ public final class AbilityFactoryReveal {
*/
public static SpellAbility createAbilityDigUntil(final AbilityFactory af) {
- final SpellAbility abDig = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityDigUntil extends AbilityActivated {
+ public AbilityDigUntil(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityDigUntil(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 4239474096624403497L;
@Override
@@ -687,7 +721,8 @@ public final class AbilityFactoryReveal {
return AbilityFactoryReveal.digUntilTriggerAI(af, this, mandatory);
}
- };
+ }
+ final SpellAbility abDig = new AbilityDigUntil(af.getHostCard(), af.getAbCost(), af.getAbTgt());
return abDig;
}
@@ -733,7 +768,18 @@ public final class AbilityFactoryReveal {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackDigUntil(final AbilityFactory af) {
- final SpellAbility dbDig = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackDigUntil extends AbilitySub {
+ public DrawbackDigUntil(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackDigUntil(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -3372788479421357024L;
@Override
@@ -755,8 +801,9 @@ public final class AbilityFactoryReveal {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryReveal.digUntilTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbDig = new DrawbackDigUntil(af.getHostCard(), af.getAbTgt());
+
return dbDig;
}
@@ -1040,7 +1087,18 @@ public final class AbilityFactoryReveal {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityRevealHand(final AbilityFactory af) {
- final SpellAbility abRevealHand = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityRevealHand extends AbilityActivated {
+ public AbilityRevealHand(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityRevealHand(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 2785654059206102004L;
@Override
@@ -1062,8 +1120,9 @@ public final class AbilityFactoryReveal {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryReveal.revealHandTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abRevealHand = new AbilityRevealHand(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abRevealHand;
}
@@ -1109,7 +1168,18 @@ public final class AbilityFactoryReveal {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackRevealHand(final AbilityFactory af) {
- final SpellAbility dbRevealHand = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackRevealHand extends AbilitySub {
+ public DrawbackRevealHand(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackRevealHand(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -6079668770576878801L;
@Override
@@ -1133,8 +1203,9 @@ public final class AbilityFactoryReveal {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryReveal.revealHandTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbRevealHand = new DrawbackRevealHand(af.getHostCard(), af.getAbTgt());
+
return dbRevealHand;
}
@@ -1375,7 +1446,18 @@ public final class AbilityFactoryReveal {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityScry(final AbilityFactory af) {
- final SpellAbility abScry = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityScry extends AbilityActivated {
+ public AbilityScry(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityScry(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 2631175859655699419L;
@Override
@@ -1397,8 +1479,9 @@ public final class AbilityFactoryReveal {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryReveal.scryTriggerAI(af, this);
}
-
- };
+ }
+ final SpellAbility abScry = new AbilityScry(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abScry;
}
@@ -1444,7 +1527,18 @@ public final class AbilityFactoryReveal {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackScry(final AbilityFactory af) {
- final SpellAbility dbScry = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackScry extends AbilitySub {
+ public DrawbackScry(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackScry(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 7763043327497404630L;
@Override
@@ -1468,8 +1562,9 @@ public final class AbilityFactoryReveal {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryReveal.scryTriggerAI(af, this);
}
-
- };
+ }
+ final SpellAbility dbScry = new DrawbackScry(af.getHostCard(), af.getAbTgt());
+
return dbScry;
}
@@ -1648,8 +1743,19 @@ public final class AbilityFactoryReveal {
* a {@link forge.card.abilityfactory.AbilityFactory} object.
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
- public static SpellAbility createRearrangeTopOfLibraryAbility(final AbilityFactory af) {
- final SpellAbility rtolAbility = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ public static SpellAbility createAbilityRearrangeTopOfLibrary(final AbilityFactory af) {
+ class AbilityRearrangeTopOfLibrary extends AbilityActivated {
+ public AbilityRearrangeTopOfLibrary(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityRearrangeTopOfLibrary(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -548494891203983219L;
@Override
@@ -1671,8 +1777,8 @@ public final class AbilityFactoryReveal {
public void resolve() {
AbilityFactoryReveal.rearrangeTopOfLibraryResolve(af, this);
}
-
- };
+ }
+ final SpellAbility rtolAbility = new AbilityRearrangeTopOfLibrary(af.getHostCard(), af.getAbCost(), af.getAbTgt());
return rtolAbility;
}
@@ -1686,7 +1792,7 @@ public final class AbilityFactoryReveal {
* a {@link forge.card.abilityfactory.AbilityFactory} object.
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
- public static SpellAbility createRearrangeTopOfLibrarySpell(final AbilityFactory af) {
+ public static SpellAbility createSpellRearrangeTopOfLibrary(final AbilityFactory af) {
final SpellAbility rtolSpell = new Spell(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
private static final long serialVersionUID = 6977502611509431864L;
@@ -1724,8 +1830,19 @@ public final class AbilityFactoryReveal {
* a {@link forge.card.abilityfactory.AbilityFactory} object.
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
- public static SpellAbility createRearrangeTopOfLibraryDrawback(final AbilityFactory af) {
- final SpellAbility dbDraw = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ public static SpellAbility createDrawbackRearrangeTopOfLibrary(final AbilityFactory af) {
+ class DrawbackRearrangeTopOfLibrary extends AbilitySub {
+ public DrawbackRearrangeTopOfLibrary(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackRearrangeTopOfLibrary(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -777856059960750319L;
@Override
@@ -1749,8 +1866,9 @@ public final class AbilityFactoryReveal {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryReveal.rearrangeTopOfLibraryTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbDraw = new DrawbackRearrangeTopOfLibrary(af.getHostCard(), af.getAbTgt());
+
return dbDraw;
}
@@ -1959,7 +2077,18 @@ public final class AbilityFactoryReveal {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityReveal(final AbilityFactory af) {
- final SpellAbility abReveal = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityReveal extends AbilityActivated {
+ public AbilityReveal(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityReveal(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -4417404703197532765L;
@Override
@@ -1981,8 +2110,9 @@ public final class AbilityFactoryReveal {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryReveal.revealTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abReveal = new AbilityReveal(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abReveal;
}
@@ -2028,7 +2158,18 @@ public final class AbilityFactoryReveal {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackReveal(final AbilityFactory af) {
- final SpellAbility dbReveal = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackReveal extends AbilitySub {
+ public DrawbackReveal(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackReveal(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -8059731932417441449L;
@Override
@@ -2053,8 +2194,9 @@ public final class AbilityFactoryReveal {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryReveal.revealTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbReveal = new DrawbackReveal(af.getHostCard(), af.getAbTgt());
+
return dbReveal;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java b/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java
index e561c74e4b2..c247f22967c 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java
@@ -64,7 +64,18 @@ public class AbilityFactorySacrifice {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilitySacrifice(final AbilityFactory af) {
- final SpellAbility abSacrifice = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilitySacrifice extends AbilityActivated {
+ public AbilitySacrifice(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilitySacrifice(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -1933592438783630254L;
@Override
@@ -86,7 +97,9 @@ public class AbilityFactorySacrifice {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactorySacrifice.sacrificeTriggerAI(af, this, mandatory);
}
- };
+ }
+ final SpellAbility abSacrifice = new AbilitySacrifice(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abSacrifice;
}
@@ -131,7 +144,18 @@ public class AbilityFactorySacrifice {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackSacrifice(final AbilityFactory af) {
- final SpellAbility dbSacrifice = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackSacrifice extends AbilitySub {
+ public DrawbackSacrifice(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackSacrifice(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -5141246507533353605L;
@Override
@@ -153,7 +177,9 @@ public class AbilityFactorySacrifice {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactorySacrifice.sacrificeTriggerAI(af, this, mandatory);
}
- };
+ }
+ final SpellAbility dbSacrifice = new DrawbackSacrifice(af.getHostCard(), af.getAbTgt());
+
return dbSacrifice;
}
@@ -610,7 +636,18 @@ public class AbilityFactorySacrifice {
* @since 1.0.15
*/
public static SpellAbility createAbilitySacrificeAll(final AbilityFactory af) {
- final SpellAbility abSacrifice = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilitySacrificeAll extends AbilityActivated {
+ public AbilitySacrificeAll(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilitySacrificeAll(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -1933592438783630254L;
@Override
@@ -632,7 +669,9 @@ public class AbilityFactorySacrifice {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactorySacrifice.sacrificeAllCanPlayAI(af, this);
}
- };
+ }
+ final SpellAbility abSacrifice = new AbilitySacrificeAll(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abSacrifice;
}
@@ -679,7 +718,18 @@ public class AbilityFactorySacrifice {
* @since 1.0.15
*/
public static SpellAbility createDrawbackSacrificeAll(final AbilityFactory af) {
- final SpellAbility dbSacrifice = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackSacrificeAll extends AbilitySub {
+ public DrawbackSacrificeAll(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackSacrificeAll(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -5141246507533353605L;
@Override
@@ -701,7 +751,9 @@ public class AbilityFactorySacrifice {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactorySacrifice.sacrificeAllCanPlayAI(af, this);
}
- };
+ }
+ final SpellAbility dbSacrifice = new DrawbackSacrificeAll(af.getHostCard(), af.getAbTgt());
+
return dbSacrifice;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactorySetState.java b/src/main/java/forge/card/abilityfactory/AbilityFactorySetState.java
index 7ddf065563e..4626f8a868b 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactorySetState.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactorySetState.java
@@ -31,6 +31,8 @@ import forge.card.spellability.AbilitySub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
+import forge.card.cardfactory.CardFactoryUtil;
+import forge.card.cost.Cost;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
@@ -48,8 +50,18 @@ public class AbilityFactorySetState {
* @return the change state ability
*/
public static SpellAbility getSetStateAbility(final AbilityFactory abilityFactory) {
- final SpellAbility ret = new AbilityActivated(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
- abilityFactory.getAbTgt()) {
+ class AbilitySetState extends AbilityActivated {
+ public AbilitySetState(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilitySetState(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -1083427558368639457L;
@Override
@@ -75,7 +87,9 @@ public class AbilityFactorySetState {
return true;
}
- };
+ }
+ final SpellAbility ret = new AbilitySetState(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
+ abilityFactory.getAbTgt());
return ret;
}
@@ -118,8 +132,18 @@ public class AbilityFactorySetState {
* @return the change state drawback
*/
public static SpellAbility getSetStateDrawback(final AbilityFactory abilityFactory) {
- final AbilitySub ret = new AbilitySub(abilityFactory.getHostCard(), abilityFactory.getAbTgt()) {
-
+ class DrawbackSetState extends AbilitySub {
+ public DrawbackSetState(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackSetState(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -3793247725721587468L;
@Override
@@ -153,8 +177,9 @@ public class AbilityFactorySetState {
AbilityFactorySetState.setStateResolve(abilityFactory, this);
}
- };
-
+ }
+ final AbilitySub ret = new DrawbackSetState(abilityFactory.getHostCard(), abilityFactory.getAbTgt());
+
return ret;
}
@@ -299,9 +324,18 @@ public class AbilityFactorySetState {
* @return the change state all ability
*/
public static SpellAbility getSetStateAllAbility(final AbilityFactory abilityFactory) {
- final SpellAbility ret = new AbilityActivated(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
- abilityFactory.getAbTgt()) {
-
+ class AbilitySetStateAll extends AbilityActivated {
+ public AbilitySetStateAll(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilitySetStateAll(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 7841029107610111992L;
@Override
@@ -313,8 +347,9 @@ public class AbilityFactorySetState {
public void resolve() {
AbilityFactorySetState.setStateAllResolve(abilityFactory, this);
}
-
- };
+ }
+ final SpellAbility ret = new AbilitySetStateAll(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
+ abilityFactory.getAbTgt()) ;
return ret;
}
@@ -353,8 +388,18 @@ public class AbilityFactorySetState {
* @return the change state all drawback
*/
public static SpellAbility getSetStateAllDrawback(final AbilityFactory abilityFactory) {
- final AbilitySub ret = new AbilitySub(abilityFactory.getHostCard(), abilityFactory.getAbTgt()) {
-
+ class DrawbackSetStateAll extends AbilitySub {
+ public DrawbackSetStateAll(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackSetStateAll(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 4047514893482113436L;
@Override
@@ -383,8 +428,8 @@ public class AbilityFactorySetState {
public void resolve() {
AbilityFactorySetState.setStateAllResolve(abilityFactory, this);
}
-
- };
+ }
+ final AbilitySub ret = new DrawbackSetStateAll(abilityFactory.getHostCard(), abilityFactory.getAbTgt());
return ret;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryStoreSVar.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryStoreSVar.java
index 7e548959534..7ec253485f1 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryStoreSVar.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryStoreSVar.java
@@ -25,6 +25,8 @@ import forge.card.spellability.AbilityActivated;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
+import forge.card.cost.Cost;
+import forge.card.spellability.Target;
import forge.game.player.ComputerUtil;
/**
@@ -46,10 +48,18 @@ public class AbilityFactoryStoreSVar {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityStoreSVar(final AbilityFactory abilityFactory) {
-
- final SpellAbility abStoreSVar = new AbilityActivated(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
- abilityFactory.getAbTgt()) {
-
+ class AbilityStoreSVar extends AbilityActivated {
+ public AbilityStoreSVar(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityStoreSVar(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -7299561150243337080L;
private final AbilityFactory af = abilityFactory;
@@ -72,8 +82,9 @@ public class AbilityFactoryStoreSVar {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryStoreSVar.storeSVarDoTriggerAI(this.af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abStoreSVar = new AbilityStoreSVar(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
+ abilityFactory.getAbTgt());
return abStoreSVar;
}
@@ -124,7 +135,18 @@ public class AbilityFactoryStoreSVar {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackStoreSVar(final AbilityFactory abilityFactory) {
- final SpellAbility dbStoreSVar = new AbilitySub(abilityFactory.getHostCard(), abilityFactory.getAbTgt()) {
+ class DrawbackStoreSVar extends AbilitySub {
+ public DrawbackStoreSVar(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackStoreSVar(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 6631124959690157874L;
private final AbilityFactory af = abilityFactory;
@@ -161,8 +183,9 @@ public class AbilityFactoryStoreSVar {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryStoreSVar.storeSVarDoTriggerAI(this.af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbStoreSVar = new DrawbackStoreSVar(abilityFactory.getHostCard(), abilityFactory.getAbTgt());
+
return dbStoreSVar;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryToken.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryToken.java
index f5c02f2a995..4ebeda7a30a 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryToken.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryToken.java
@@ -152,9 +152,18 @@ public class AbilityFactoryToken extends AbilityFactory {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public final SpellAbility getAbility() {
-
- final SpellAbility abToken = new AbilityActivated(this.abilityFactory.getHostCard(),
- this.abilityFactory.getAbCost(), this.abilityFactory.getAbTgt()) {
+ class AbilityToken extends AbilityActivated {
+ public AbilityToken(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityToken(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 8460074843405764620L;
@Override
@@ -176,7 +185,9 @@ public class AbilityFactoryToken extends AbilityFactory {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryToken.this.tokenDoTriggerAI(this, mandatory);
}
- };
+ }
+ final SpellAbility abToken = new AbilityToken(this.abilityFactory.getHostCard(),
+ this.abilityFactory.getAbCost(), this.abilityFactory.getAbTgt());
return abToken;
}
@@ -228,8 +239,18 @@ public class AbilityFactoryToken extends AbilityFactory {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public final SpellAbility getDrawback() {
- final SpellAbility dbDealDamage = new AbilitySub(this.abilityFactory.getHostCard(),
- this.abilityFactory.getAbTgt()) {
+ class DrawbackToken extends AbilitySub {
+ public DrawbackToken(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackToken(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 7239608350643325111L;
@Override
@@ -251,10 +272,11 @@ public class AbilityFactoryToken extends AbilityFactory {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryToken.this.tokenDoTriggerAI(this, mandatory);
}
+ }
+ final SpellAbility dbToken = new DrawbackToken(this.abilityFactory.getHostCard(),
+ this.abilityFactory.getAbTgt()); // Spell
- }; // Spell
-
- return dbDealDamage;
+ return dbToken;
}
/**
@@ -504,22 +526,21 @@ public class AbilityFactoryToken extends AbilityFactory {
String colorDesc = "";
for (final String col : substitutedColors) {
if (col.equalsIgnoreCase("White")) {
- colorDesc += "W";
+ colorDesc += "W ";
} else if (col.equalsIgnoreCase("Blue")) {
- colorDesc += "U";
+ colorDesc += "U ";
} else if (col.equalsIgnoreCase("Black")) {
- colorDesc += "B";
+ colorDesc += "B ";
} else if (col.equalsIgnoreCase("Red")) {
- colorDesc += "R";
+ colorDesc += "R ";
} else if (col.equalsIgnoreCase("Green")) {
- colorDesc += "G";
+ colorDesc += "G ";
} else if (col.equalsIgnoreCase("Colorless")) {
colorDesc = "C";
}
}
if (this.tokenImage.equals("")) {
-
- imageName += colorDesc + " " + this.tokenPower + " " + this.tokenToughness + " " + this.tokenName;
+ imageName += colorDesc.trim() + " " + this.tokenPower + " " + this.tokenToughness + " " + this.tokenName;
} else {
imageName = this.tokenImage;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryTurns.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryTurns.java
index b862b213213..bdbf9f281a6 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryTurns.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryTurns.java
@@ -28,6 +28,8 @@ import forge.card.spellability.AbilitySub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
+import forge.card.cardfactory.CardFactoryUtil;
+import forge.card.cost.Cost;
import forge.game.phase.ExtraTurn;
import forge.game.phase.PhaseType;
import forge.game.player.ComputerUtil;
@@ -57,8 +59,18 @@ public class AbilityFactoryTurns {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityAddTurn(final AbilityFactory af) {
-
- final SpellAbility abAddTurn = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityAddTurn extends AbilityActivated {
+ public AbilityAddTurn(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityAddTurn(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -3526200766738015688L;
@Override
@@ -80,8 +92,9 @@ public class AbilityFactoryTurns {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryTurns.addTurnTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abAddTurn = new AbilityAddTurn(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abAddTurn;
}
@@ -135,7 +148,18 @@ public class AbilityFactoryTurns {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackAddTurn(final AbilityFactory af) {
- final SpellAbility dbAddTurn = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackAddTurn extends AbilitySub {
+ public DrawbackAddTurn(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackAddTurn(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -562517287448810951L;
@Override
@@ -157,8 +181,9 @@ public class AbilityFactoryTurns {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryTurns.addTurnTriggerAI(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbAddTurn = new DrawbackAddTurn(af.getHostCard(), af.getAbTgt());
+
return dbAddTurn;
}
@@ -343,8 +368,18 @@ public class AbilityFactoryTurns {
* @return the spell ability
*/
public static SpellAbility createAbilityEndTurn(final AbilityFactory af) {
- final SpellAbility ret = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
-
+ class AbilityEndTurn extends AbilityActivated {
+ public AbilityEndTurn(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityEndTurn(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 72570867940224012L;
@Override
@@ -370,8 +405,8 @@ public class AbilityFactoryTurns {
public void resolve() {
AbilityFactoryTurns.endTurnResolve(af, this);
}
-
- };
+ }
+ final SpellAbility ret = new AbilityEndTurn(af.getHostCard(), af.getAbCost(), af.getAbTgt());
return ret;
}
@@ -414,7 +449,18 @@ public class AbilityFactoryTurns {
* @return the spell ability
*/
public static SpellAbility createDrawbackEndTurn(final AbilityFactory af) {
- final SpellAbility dbEndTurn = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackEndTurn extends AbilitySub {
+ public DrawbackEndTurn(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackEndTurn(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -562517287448810951L;
@Override
@@ -440,8 +486,9 @@ public class AbilityFactoryTurns {
return false;
}
-
- };
+ }
+ final SpellAbility dbEndTurn = new DrawbackEndTurn(af.getHostCard(), af.getAbTgt());
+
return dbEndTurn;
}
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryZoneAffecting.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryZoneAffecting.java
index 02d3e988c6a..8b0ea11e62d 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryZoneAffecting.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryZoneAffecting.java
@@ -1,5 +1,6 @@
/*
- * Forge: Play Magic: the Gathering.
+
+* Forge: Play Magic: the Gathering.
* Copyright (C) 2011 Forge Team
*
* This program is free software: you can redistribute it and/or modify
@@ -67,7 +68,18 @@ public class AbilityFactoryZoneAffecting {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityDraw(final AbilityFactory af) {
- final SpellAbility abDraw = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityDraw extends AbilityActivated {
+ public AbilityDraw(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityDraw(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 5445572699000471299L;
@Override
@@ -89,8 +101,9 @@ public class AbilityFactoryZoneAffecting {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryZoneAffecting.drawTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abDraw = new AbilityDraw(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abDraw;
}
@@ -144,7 +157,18 @@ public class AbilityFactoryZoneAffecting {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackDraw(final AbilityFactory af) {
- final SpellAbility dbDraw = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackDraw extends AbilitySub {
+ public DrawbackDraw(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackDraw(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -4990932993654533449L;
@Override
@@ -171,8 +195,9 @@ public class AbilityFactoryZoneAffecting {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryZoneAffecting.drawTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbDraw = new DrawbackDraw(af.getHostCard(), af.getAbTgt());
+
return dbDraw;
}
@@ -603,7 +628,18 @@ public class AbilityFactoryZoneAffecting {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityMill(final AbilityFactory af) {
- final SpellAbility abMill = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityMill extends AbilityActivated {
+ public AbilityMill(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityMill(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 5445572699000471299L;
@Override
@@ -625,8 +661,9 @@ public class AbilityFactoryZoneAffecting {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryZoneAffecting.millTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abMill = new AbilityMill(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abMill;
}
@@ -672,7 +709,18 @@ public class AbilityFactoryZoneAffecting {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackMill(final AbilityFactory af) {
- final SpellAbility dbMill = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackMill extends AbilitySub {
+ public DrawbackMill(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackMill(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = -4990932993654533449L;
@Override
@@ -694,8 +742,9 @@ public class AbilityFactoryZoneAffecting {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryZoneAffecting.millTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbMill = new DrawbackMill(af.getHostCard(), af.getAbTgt());
+
return dbMill;
}
@@ -1036,7 +1085,18 @@ public class AbilityFactoryZoneAffecting {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityDiscard(final AbilityFactory af) {
- final SpellAbility abDiscard = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityDiscard extends AbilityActivated {
+ public AbilityDiscard(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityDiscard(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 4348585353456736817L;
@Override
@@ -1058,8 +1118,10 @@ public class AbilityFactoryZoneAffecting {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryZoneAffecting.discardTrigger(af, this, mandatory);
}
+ }
- };
+ final SpellAbility abDiscard = new AbilityDiscard(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abDiscard;
}
@@ -1113,7 +1175,18 @@ public class AbilityFactoryZoneAffecting {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackDiscard(final AbilityFactory af) {
- final SpellAbility dbDiscard = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackDiscard extends AbilitySub {
+ public DrawbackDiscard(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackDiscard(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 4348585353456736817L;
@Override
@@ -1140,8 +1213,9 @@ public class AbilityFactoryZoneAffecting {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryZoneAffecting.discardTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbDiscard = new DrawbackDiscard(af.getHostCard(), af.getAbTgt());
+
return dbDiscard;
}
@@ -1644,7 +1718,18 @@ public class AbilityFactoryZoneAffecting {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityShuffle(final AbilityFactory af) {
- final SpellAbility abShuffle = new AbilityActivated(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
+ class AbilityShuffle extends AbilityActivated {
+ public AbilityShuffle(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityShuffle(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -1245185178904838198L;
@Override
@@ -1666,8 +1751,9 @@ public class AbilityFactoryZoneAffecting {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryZoneAffecting.shuffleTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility abShuffle = new AbilityShuffle(af.getHostCard(), af.getAbCost(), af.getAbTgt());
+
return abShuffle;
}
@@ -1713,7 +1799,18 @@ public class AbilityFactoryZoneAffecting {
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackShuffle(final AbilityFactory af) {
- final SpellAbility dbShuffle = new AbilitySub(af.getHostCard(), af.getAbTgt()) {
+ class DrawbackShuffle extends AbilitySub {
+ public DrawbackShuffle(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackShuffle(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 5974307947494280639L;
@Override
@@ -1735,8 +1832,9 @@ public class AbilityFactoryZoneAffecting {
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryZoneAffecting.shuffleTrigger(af, this, mandatory);
}
-
- };
+ }
+ final SpellAbility dbShuffle = new DrawbackShuffle(af.getHostCard(), af.getAbTgt());
+
return dbShuffle;
}
diff --git a/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java b/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java
index 61e37206be1..10b30dc7600 100644
--- a/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java
+++ b/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java
@@ -47,7 +47,10 @@ class CardFactoryArtifacts {
final String[] choices = { "Citizen", "Camarid", "Thrull", "Goblin", "Saproling" };
final Player player = card.getController();
- final SpellAbility ability = new Ability(card, "0") {
+ class SarpadianEmpiresVolVIIETB extends Ability {
+ public SarpadianEmpiresVolVIIETB(final Card c, final String s) {
+ super(c,s);
+ }
@Override
public void resolve() {
String type = "";
@@ -84,25 +87,36 @@ class CardFactoryArtifacts {
}
}
}
- card.setChosenType(type);
+ getSourceCard().setChosenType(type);
final String t = type;
final String in = imageName;
final String col = color;
// card.setChosenType(input[0]);
- final Cost a1Cost = new Cost(card, "3 T", true);
- final AbilityActivated a1 = new AbilityActivated(card, a1Cost, null) {
-
+ class AbilitySarpadianEmpiresVolVII extends AbilityActivated {
+
private static final long serialVersionUID = -2114111483117171609L;
-
+
+ public AbilitySarpadianEmpiresVolVII(Card ca, Cost co, Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilitySarpadianEmpiresVolVII(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
@Override
public void resolve() {
- CardFactoryUtil.makeToken(t, in, card.getController(), col, new String[] { "Creature", t },
+ CardFactoryUtil.makeToken(t, in, getSourceCard().getController(), col, new String[] { "Creature", t },
1, 1, new String[] { "" });
}
-
- };
+ }
+ final Cost a1Cost = new Cost(getSourceCard(), "3 T", true);
+ final AbilityActivated a1 = new AbilitySarpadianEmpiresVolVII(card, a1Cost, null);
final StringBuilder sb = new StringBuilder();
sb.append(card.getName()).append(" - ").append(card.getController());
sb.append(" puts a 1/1 ").append(t).append(" token onto the battlefield");
@@ -111,6 +125,7 @@ class CardFactoryArtifacts {
card.addSpellAbility(a1);
}
}; // ability
+ final SpellAbility ability = new SarpadianEmpiresVolVIIETB(card,"0");
final Command intoPlay = new Command() {
private static final long serialVersionUID = 7202704600935499188L;
@@ -226,7 +241,18 @@ class CardFactoryArtifacts {
// *************** START *********** START **************************
else if (cardName.equals("Goblin Charbelcher")) {
final Cost abCost = new Cost(card, "3 T", true);
- final AbilityActivated ability = new AbilityActivated(card, abCost, new Target(card, "TgtCP")) {
+ class AbilityGoblinCharbelcher extends AbilityActivated {
+ public AbilityGoblinCharbelcher(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityGoblinCharbelcher(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -840041589720758423L;
@Override
@@ -271,7 +297,9 @@ class CardFactoryArtifacts {
this.getTargetPlayer().addDamage(damage, card);
}
}
- };
+ }
+
+ final AbilityActivated ability = new AbilityGoblinCharbelcher(card, abCost, new Target(card, "TgtCP"));
final StringBuilder sb = new StringBuilder();
sb.append(abCost);
@@ -295,9 +323,18 @@ class CardFactoryArtifacts {
* next turn's upkeep.
*/
- final Cost abCost = new Cost(card, "1 T Sac<1/CARDNAME>", true);
- final Target target = new Target(card, "Select target player", new String[] { "Player" });
- final AbilityActivated ability = new AbilityActivated(card, abCost, target) {
+ class AbilityLodestoneBauble extends AbilityActivated {
+ public AbilityLodestoneBauble(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityLodestoneBauble(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -6711849408085138636L;
@Override
@@ -363,7 +400,10 @@ class CardFactoryArtifacts {
final CardList list = AllZone.getComputerPlayer().getCardsIn(ZoneType.Graveyard);
return list.getType("Basic");
}
- }; // ability
+ }
+ final Cost abCost = new Cost(card, "1 T Sac<1/CARDNAME>", true);
+ final Target target = new Target(card, "Select target player", new String[] { "Player" });
+ final AbilityActivated ability = new AbilityLodestoneBauble(card, abCost, target);
final StringBuilder sb = new StringBuilder();
sb.append(abCost);
@@ -376,9 +416,20 @@ class CardFactoryArtifacts {
// *************** START *********** START **************************
else if (cardName.equals("Grindstone")) {
- final Target target = new Target(card, "Select target player", new String[] { "Player" });
- final Cost abCost = new Cost(card, "3 T", true);
- final AbilityActivated ab1 = new AbilityActivated(card, abCost, target) {
+
+ class AbilityGrindstone extends AbilityActivated {
+ public AbilityGrindstone(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityGrindstone(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ res.setChooseTargetAI(CardFactoryUtil.targetHumanAI());
+ return res;
+ }
+
private static final long serialVersionUID = -6281219446216L;
@Override
@@ -418,7 +469,12 @@ class CardFactoryArtifacts {
target.mill(grinding.size());
} while (loop);
}
- };
+ }
+
+ final Target target = new Target(card, "Select target player", new String[] { "Player" });
+ final Cost abCost = new Cost(card, "3 T", true);
+ final AbilityActivated ab1 = new AbilityGrindstone(card, abCost, target);
+
ab1.setChooseTargetAI(CardFactoryUtil.targetHumanAI());
final StringBuilder sb = new StringBuilder();
sb.append(abCost);
@@ -475,8 +531,18 @@ class CardFactoryArtifacts {
// *************** START *********** START **************************
else if (cardName.equals("Scroll Rack")) {
- final Cost abCost = new Cost(card, "1 T", true);
- final AbilityActivated ability = new AbilityActivated(card, abCost, null) {
+ class AbilityScrollRack extends AbilityActivated {
+ public AbilityScrollRack(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityScrollRack(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -5588587187720068547L;
@Override
@@ -549,7 +615,10 @@ class CardFactoryArtifacts {
public boolean canPlayAI() {
return false;
}
- }; // ability
+ }
+ final Cost abCost = new Cost(card, "1 T", true);
+ final AbilityActivated ability = new AbilityScrollRack(card, abCost, null);
+
final StringBuilder sbDesc = new StringBuilder();
sbDesc.append(abCost);
sbDesc.append("Exile any number of cards from your hand face down. Put that many cards ");
@@ -616,8 +685,18 @@ class CardFactoryArtifacts {
sb.append(cardName).append(" - play card without paying its mana cost.");
freeCast.setStackDescription(sb.toString());
- final Cost abCost = new Cost(card, "5 T", true);
- final AbilityActivated ability = new AbilityActivated(card, abCost, null) {
+ class AbilityTemporalAperture extends AbilityActivated {
+ public AbilityTemporalAperture(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityTemporalAperture(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -7328518969488588777L;
@Override
@@ -652,7 +731,10 @@ class CardFactoryArtifacts {
public boolean canPlayAI() {
return false;
}
- };
+ }
+
+ final Cost abCost = new Cost(card, "5 T", true);
+ final AbilityActivated ability = new AbilityTemporalAperture(card, abCost, null);
final StringBuilder sbStack = new StringBuilder();
sbStack.append(card).append(" - Shuffle your library, then reveal the top card.");
diff --git a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java
index e7d547fbc19..d4f29d61102 100644
--- a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java
+++ b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java
@@ -87,7 +87,11 @@ public class CardFactoryCreatures {
private static void getCard_GilderBairn(final Card card, final String cardName) {
final Cost abCost = new Cost(card, "2 GU Untap", true);
final Target tgt = new Target(card, "Select target permanent.", new String[] { "Permanent" });
- final AbilityActivated a1 = new AbilityActivated(card, abCost, tgt) {
+ class GilderBairnAbility extends AbilityActivated {
+ public GilderBairnAbility(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
private static final long serialVersionUID = -1847685865277129366L;
@Override
@@ -105,6 +109,11 @@ public class CardFactoryCreatures {
}
}
}
+
+ @Override
+ public AbilityActivated getCopy() {
+ return new GilderBairnAbility(getSourceCard(),getPayCosts(),new Target(getTarget()));
+ }
@Override
public void chooseTargetAI() {
@@ -130,14 +139,19 @@ public class CardFactoryCreatures {
});
return perms.size() > 0;
}
- }; // SpellAbility
+
+ @Override
+ public String getDescription() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append(getPayCosts());
+ sb.append("For each counter on target permanent, ");
+ sb.append("put another of those counters on that permanent.");
+ return sb.toString();
+ }
+ }
+ final AbilityActivated a1 = new GilderBairnAbility(card, abCost, tgt);
card.addSpellAbility(a1);
- final StringBuilder sb = new StringBuilder();
- sb.append(abCost);
- sb.append("For each counter on target permanent, ");
- sb.append("put another of those counters on that permanent.");
- a1.setDescription(sb.toString());
}
private static void getCard_MinotaurExplorer(final Card card, final String cardName) {
@@ -539,7 +553,16 @@ public class CardFactoryCreatures {
private static void getCard_RhysTheRedeemed(final Card card, final String cardName) {
final Cost abCost = new Cost(card, "4 GW GW T", true);
- final AbilityActivated copyTokens1 = new AbilityActivated(card, abCost, null) {
+ class RhysTheRedeemedAbility extends AbilityActivated {
+ public RhysTheRedeemedAbility(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ return new RhysTheRedeemedAbility(getSourceCard(),getPayCosts(),new Target(getTarget()));
+ }
+
private static final long serialVersionUID = 6297992502069547478L;
@Override
@@ -557,13 +580,19 @@ public class CardFactoryCreatures {
return allTokens.size() >= 2;
}
- };
+
+ @Override
+ public String getDescription() {
+ final StringBuilder sbDesc = new StringBuilder();
+ sbDesc.append(abCost).append("For each creature token you control, ");
+ sbDesc.append("put a token that's a copy of that creature onto the battlefield.");
+ return sbDesc.toString();
+ }
+ }
+ final AbilityActivated copyTokens1 = new RhysTheRedeemedAbility(card, abCost, null);
card.addSpellAbility(copyTokens1);
- final StringBuilder sbDesc = new StringBuilder();
- sbDesc.append(abCost).append("For each creature token you control, ");
- sbDesc.append("put a token that's a copy of that creature onto the battlefield.");
- copyTokens1.setDescription(sbDesc.toString());
+
final StringBuilder sbStack = new StringBuilder();
sbStack.append(card.getName());
@@ -600,13 +629,15 @@ public class CardFactoryCreatures {
return false;
}
}; // ability2
- // card.clearSpellAbility();
- card.addSpellAbility(ability2);
-
final StringBuilder sb2 = new StringBuilder();
sb2.append(card.getName()).append(" - ").append(player);
sb2.append(" gains life equal to permanents of the chosen color.");
ability2.setStackDescription(sb2.toString());
+
+ Trigger dmgTrigger = forge.card.trigger.TriggerHandler.parseTrigger("Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may pay 2 W. If you do, choose a color. You gain 1 life for each permanent of that color.", card, true);
+ dmgTrigger.setOverridingAbility(ability2);
+
+ card.addTrigger(dmgTrigger);
}
private static void getCard_SphinxJwar(final Card card, final String cardName) {
@@ -643,7 +674,16 @@ public class CardFactoryCreatures {
private static void getCard_MasterOfTheWildHunt(final Card card, final String cardName) {
final Cost abCost = new Cost(card, "T", true);
final Target abTgt = new Target(card, "Target a creature to Hunt", "Creature".split(","));
- final AbilityActivated ability = new AbilityActivated(card, abCost, abTgt) {
+ class MasterOfTheWildHuntAbility extends AbilityActivated {
+ public MasterOfTheWildHuntAbility(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ return new MasterOfTheWildHuntAbility(getSourceCard(),getPayCosts(),new Target(getTarget()));
+ }
+
private static final long serialVersionUID = 35050145102566898L;
@Override
@@ -789,15 +829,21 @@ public class CardFactoryCreatures {
}
}
} // resolve()
- }; // SpellAbility
+
+ @Override
+ public String getDescription() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("Tap: Tap all untapped Wolf creatures you control. ");
+ sb.append("Each Wolf tapped this way deals damage equal to its ");
+ sb.append("power to target creature. That creature deals damage ");
+ sb.append("equal to its power divided as its controller ");
+ sb.append("chooses among any number of those Wolves.");
+ return sb.toString();
+ }
+ }
+ final AbilityActivated ability = new MasterOfTheWildHuntAbility(card, abCost, abTgt);
- final StringBuilder sb = new StringBuilder();
- sb.append("Tap: Tap all untapped Wolf creatures you control. ");
- sb.append("Each Wolf tapped this way deals damage equal to its ");
- sb.append("power to target creature. That creature deals damage ");
- sb.append("equal to its power divided as its controller ");
- sb.append("chooses among any number of those Wolves.");
- ability.setDescription(sb.toString());
+
card.addSpellAbility(ability);
}
@@ -831,7 +877,16 @@ public class CardFactoryCreatures {
private static void getCard_MoltenHydra(final Card card, final String cardName) {
final Target target = new Target(card, "TgtCP");
final Cost abCost = new Cost(card, "T", true);
- final AbilityActivated ability2 = new AbilityActivated(card, abCost, target) {
+ class MoltenHydraAbility extends AbilityActivated {
+ public MoltenHydraAbility(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ return new MoltenHydraAbility(getSourceCard(),getPayCosts(),new Target(getTarget()));
+ }
+
private static final long serialVersionUID = 2626619319289064289L;
@Override
@@ -882,16 +937,20 @@ public class CardFactoryCreatures {
}
card.subtractCounter(Counters.P1P1, total);
} // resolve()
- }; // SpellAbility
+
+ @Override
+ public String getDescription() {
+ final StringBuilder sbDesc = new StringBuilder();
+ sbDesc.append(abCost).append("Remove all +1/+1 counters from ");
+ sbDesc.append(cardName).append(": ").append(cardName);
+ sbDesc.append(" deals damage to target creature or player equal to the ");
+ sbDesc.append("number of +1/+1 counters removed this way.");
+ return sbDesc.toString();
+ }
+ }
+ final AbilityActivated ability2 = new MoltenHydraAbility(card, abCost, target);
- card.addSpellAbility(ability2);
-
- final StringBuilder sbDesc = new StringBuilder();
- sbDesc.append(abCost).append("Remove all +1/+1 counters from ");
- sbDesc.append(cardName).append(": ").append(cardName);
- sbDesc.append(" deals damage to target creature or player equal to the ");
- sbDesc.append("number of +1/+1 counters removed this way.");
- ability2.setDescription(sbDesc.toString());
+ card.addSpellAbility(ability2);
final StringBuilder sbStack = new StringBuilder();
sbStack.append("Molten Hydra deals damage to number of +1/+1 ");
@@ -1184,7 +1243,16 @@ public class CardFactoryCreatures {
final Cost cost = new Cost(card, "Sac<1/CARDNAME>", true);
final Target tgt = new Target(card, "Select a permanent", "Permanent".split(","));
- final SpellAbility ability = new AbilityActivated(card, cost, tgt) {
+ class VampireHexmageAbility extends AbilityActivated {
+ public VampireHexmageAbility(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ return new VampireHexmageAbility(getSourceCard(),getPayCosts(),new Target(getTarget()));
+ }
+
private static final long serialVersionUID = -5084369399105353155L;
@Override
@@ -1230,7 +1298,9 @@ public class CardFactoryCreatures {
}
}
}
- };
+ }
+ final SpellAbility ability = new VampireHexmageAbility(card, cost, tgt);
+
card.addSpellAbility(ability);
}
@@ -1803,7 +1873,7 @@ public class CardFactoryCreatures {
}
}
- private static void getCard_Nebuhadnezzar(final Card card, final String cardName) {
+ private static void getCard_Nebuchadnezzar(final Card card, final String cardName) {
/*
* X, T: Name a card. Target opponent reveals X cards at random from
* his or her hand. Then that player discards all cards with that
@@ -1812,7 +1882,18 @@ public class CardFactoryCreatures {
*/
final Cost abCost = new Cost(card, "X T", true);
final Target target = new Target(card, "Select target opponent", "Opponent".split(","));
- final AbilityActivated discard = new AbilityActivated(card, abCost, target) {
+ class NebuchadnezzarAbility extends AbilityActivated {
+ public NebuchadnezzarAbility(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated discard = new NebuchadnezzarAbility(getSourceCard(),getPayCosts(),new Target(getTarget()));
+ discard.getRestrictions().setPlayerTurn(true);
+ return discard;
+ }
+
private static final long serialVersionUID = 4839778470534392198L;
@Override
@@ -1847,17 +1928,21 @@ public class CardFactoryCreatures {
public boolean canPlayAI() {
return false;
}
- };
+
+ @Override
+ public String getDescription() {
+ final StringBuilder sbDesc = new StringBuilder();
+ sbDesc.append(abCost).append("Name a card. ");
+ sbDesc.append("Target opponent reveals X cards at random from his or her hand. ");
+ sbDesc.append("Then that player discards all cards with that name revealed this way. ");
+ sbDesc.append("Activate this ability only during your turn.");
+ return sbDesc.toString();
+ }
+ }
+ final AbilityActivated discard = new NebuchadnezzarAbility(card, abCost, target);
discard.getRestrictions().setPlayerTurn(true);
-
- final StringBuilder sbDesc = new StringBuilder();
- sbDesc.append(abCost).append("Name a card. ");
- sbDesc.append("Target opponent reveals X cards at random from his or her hand. ");
- sbDesc.append("Then that player discards all cards with that name revealed this way. ");
- sbDesc.append("Activate this ability only during your turn.");
- discard.setDescription(sbDesc.toString());
-
+
final StringBuilder sbStack = new StringBuilder();
sbStack.append(cardName).append(" - name a card.");
discard.setStackDescription(sbStack.toString());
@@ -1876,10 +1961,18 @@ public class CardFactoryCreatures {
theCost = "R";
}
- final SpellAbility finalAb = new AbilityActivated(card, new Cost(card, theCost, true), new Target(card,
- "Select target creature.", "Creature")) {
- private static final long serialVersionUID = 2391351140880148283L;
+ class DuctCrawlerAbility extends AbilityActivated {
+ private static final long serialVersionUID = 7914250202245863157L;
+ public DuctCrawlerAbility(final Card ca, final Cost co, Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ return new DuctCrawlerAbility(getSourceCard(),getPayCosts(),new Target(getTarget()));
+ }
+
@Override
public void resolve() {
final StringBuilder keywordBuilder = new StringBuilder("HIDDEN CARDNAME can't block ");
@@ -1902,8 +1995,14 @@ public class CardFactoryCreatures {
return this.getSourceCard().toString() + " - Target creature can't block "
+ this.getSourceCard().getName() + " this turn.";
}
- };
- finalAb.setDescription(theCost + ": Target creature can't block CARDNAME this turn.");
+
+ @Override
+ public String getDescription() {
+ return theCost + ": Target creature can't block CARDNAME this turn.";
+ }
+ }
+ final SpellAbility finalAb = new DuctCrawlerAbility(card, new Cost(card, theCost, true), new Target(card,
+ "Select target creature.", "Creature"));
card.addSpellAbility(finalAb);
}
@@ -1973,7 +2072,7 @@ public class CardFactoryCreatures {
|| cardName.equals("Sakashima the Impostor")) {
getCard_ClonesSeries(card, cardName);
} else if (cardName.equals("Nebuchadnezzar")) {
- getCard_Nebuhadnezzar(card, cardName);
+ getCard_Nebuchadnezzar(card, cardName);
} else if (cardName.equals("Duct Crawler") || cardName.equals("Shrewd Hatchling")
|| cardName.equals("Spin Engine") || cardName.equals("Screeching Griffin")) {
getCard_DuctCrawler(card, cardName);
@@ -2000,7 +2099,18 @@ public class CardFactoryCreatures {
final String[] l = parseMax.split(":");
final int maxLevel = Integer.parseInt(l[1]);
- final SpellAbility levelUp = new AbilityActivated(card, manacost) {
+ class LevelUpAbility extends AbilityActivated {
+ public LevelUpAbility(final Card ca,final String s) {
+ super(ca,new Cost(ca, manacost, true),null);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated levelUp = new LevelUpAbility(getSourceCard(),getPayCosts().toString());
+ levelUp.getRestrictions().setSorcerySpeed(true);
+ return levelUp;
+ }
+
private static final long serialVersionUID = 3998280279949548652L;
@Override
@@ -2013,16 +2123,19 @@ public class CardFactoryCreatures {
// Todo: Improve Level up code
return card.getCounters(Counters.LEVEL) < maxLevel;
}
-
- };
+
+ @Override
+ public String getDescription() {
+ final StringBuilder sbDesc = new StringBuilder();
+ sbDesc.append("Level up ").append(manacost).append(" (").append(manacost);
+ sbDesc.append(": Put a level counter on this. Level up only as a sorcery.)");
+ return sbDesc.toString();
+ }
+ }
+ final SpellAbility levelUp = new LevelUpAbility(card, manacost);
levelUp.getRestrictions().setSorcerySpeed(true);
card.addSpellAbility(levelUp);
- final StringBuilder sbDesc = new StringBuilder();
- sbDesc.append("Level up ").append(manacost).append(" (").append(manacost);
- sbDesc.append(": Put a level counter on this. Level up only as a sorcery.)");
- levelUp.setDescription(sbDesc.toString());
-
final StringBuilder sbStack = new StringBuilder();
sbStack.append(card).append(" - put a level counter on this.");
levelUp.setStackDescription(sbStack.toString());
diff --git a/src/main/java/forge/card/cardfactory/CardFactoryEnchantments.java b/src/main/java/forge/card/cardfactory/CardFactoryEnchantments.java
index e48772380bc..a9229c2b5d3 100644
--- a/src/main/java/forge/card/cardfactory/CardFactoryEnchantments.java
+++ b/src/main/java/forge/card/cardfactory/CardFactoryEnchantments.java
@@ -124,7 +124,7 @@ class CardFactoryEnchantments {
Singletons.getModel().getGameAction().exile(c2);
this.once = true;
- AllZone.getStack().addSimultaneousStackEntry(nightSoil);
+ AllZone.getStack().addAndUnfreeze(nightSoil);
}
}
diff --git a/src/main/java/forge/card/cardfactory/CardFactoryInstants.java b/src/main/java/forge/card/cardfactory/CardFactoryInstants.java
index 933daa4e2eb..8161129ef43 100644
--- a/src/main/java/forge/card/cardfactory/CardFactoryInstants.java
+++ b/src/main/java/forge/card/cardfactory/CardFactoryInstants.java
@@ -498,7 +498,18 @@ public class CardFactoryInstants {
else if (cardName.equals("Wing Puncture")) {
final Target t2 = new Target(card, "Select target creature with flying", "Creature.withFlying".split(","));
- final AbilitySub sub = new AbilitySub(card, t2) {
+ class DrawbackWingPuncture extends AbilitySub {
+ public DrawbackWingPuncture(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackWingPuncture(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 4618047889975691050L;
@Override
@@ -521,7 +532,8 @@ public class CardFactoryInstants {
public boolean doTrigger(final boolean b) {
return false;
}
- };
+ }
+ final AbilitySub sub = new DrawbackWingPuncture(card, t2);
final Cost abCost = new Cost(card, "G", false);
final Target t1 = new Target(card, "Select target creature you control", "Creature.YouCtrl".split(","));
diff --git a/src/main/java/forge/card/cardfactory/CardFactoryLands.java b/src/main/java/forge/card/cardfactory/CardFactoryLands.java
index 73e98ed3c65..0b9a7d67835 100644
--- a/src/main/java/forge/card/cardfactory/CardFactoryLands.java
+++ b/src/main/java/forge/card/cardfactory/CardFactoryLands.java
@@ -33,6 +33,7 @@ import forge.card.spellability.Ability;
import forge.card.spellability.AbilityActivated;
import forge.card.spellability.AbilityMana;
import forge.card.spellability.SpellAbility;
+import forge.card.spellability.Target;
import forge.control.input.Input;
import forge.game.phase.PhaseType;
import forge.game.player.Player;
@@ -142,9 +143,19 @@ class CardFactoryLands {
&& (c.getTurnInZone() == Singletons.getModel().getGameState().getPhaseHandler().getTurn());
}
};
-
- final Cost abCost = new Cost(card, "G U T", true);
- final AbilityActivated ability = new AbilityActivated(card, abCost, null) {
+
+ class AbilityNovijenHeartOfProgress extends AbilityActivated {
+ public AbilityNovijenHeartOfProgress(final Card ca,final Cost co,final Target t) {
+ super(ca,co,t);
+ }
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityNovijenHeartOfProgress(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = 1416258136308898492L;
private final CardList inPlay = new CardList();
@@ -168,7 +179,11 @@ class CardFactoryLands {
targ.addCounter(Counters.P1P1, 1);
}
}
- };
+ }
+
+ final Cost abCost = new Cost(card, "G U T", true);
+ final AbilityActivated ability = new AbilityNovijenHeartOfProgress(card, abCost, null);
+
final StringBuilder sbDesc = new StringBuilder();
sbDesc.append(abCost);
sbDesc.append("Put a +1/+1 counter on each creature that entered the battlefield this turn.");
@@ -569,6 +584,11 @@ class CardFactoryLands {
public boolean canPlay() {
return false;
}
+
+ @Override
+ public AbilityActivated getCopy() {
+ return null;
+ }
};
abMana.setUndoable(false);
diff --git a/src/main/java/forge/card/cardfactory/CardFactorySorceries.java b/src/main/java/forge/card/cardfactory/CardFactorySorceries.java
index 387c6e3efd0..d9c5184ac37 100644
--- a/src/main/java/forge/card/cardfactory/CardFactorySorceries.java
+++ b/src/main/java/forge/card/cardfactory/CardFactorySorceries.java
@@ -677,7 +677,18 @@ public class CardFactorySorceries {
// *************** START *********** START **************************
else if (cardName.equals("Donate")) {
final Target t2 = new Target(card, "Select target Player", "Player".split(","));
- final AbilitySub sub = new AbilitySub(card, t2) {
+ class DrawbackDonate extends AbilitySub {
+ public DrawbackDonate(final Card ca,final Target t) {
+ super(ca,t);
+ }
+
+ @Override
+ public AbilitySub getCopy() {
+ AbilitySub res = new DrawbackDonate(getSourceCard(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this,res);
+ return res;
+ }
+
private static final long serialVersionUID = 4618047889933691050L;
@Override
@@ -696,7 +707,8 @@ public class CardFactorySorceries {
public boolean doTrigger(final boolean b) {
return false;
}
- };
+ }
+ final AbilitySub sub = new DrawbackDonate(card, t2);
final Cost abCost = new Cost(card, "2 U", false);
final Target t1 = new Target(card, "Select target permanent", "Permanent".split(","));
diff --git a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java
index fee13083de3..385cd3da2d8 100644
--- a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java
+++ b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java
@@ -843,7 +843,21 @@ public class CardFactoryUtil {
public static AbilityActivated abilityUnearth(final Card sourceCard, final String manaCost) {
final Cost cost = new Cost(sourceCard, manaCost, true);
- final AbilityActivated unearth = new AbilityActivated(sourceCard, cost, null) {
+ class AbilityUnearth extends AbilityActivated {
+ public AbilityUnearth(final Card ca, final Cost co, final Target t) {
+ super(ca,co,t);
+ }
+
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityUnearth(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ final SpellAbilityRestriction restrict = new SpellAbilityRestriction();
+ restrict.setZone(ZoneType.Graveyard);
+ restrict.setSorcerySpeed(true);
+ res.setRestrictions(restrict);
+ return res;
+ }
+
private static final long serialVersionUID = -5633945565395478009L;
@Override
@@ -863,7 +877,9 @@ public class CardFactoryUtil {
}
return ComputerUtil.canPayCost(this);
}
- };
+ }
+ final AbilityActivated unearth = new AbilityUnearth(sourceCard, cost, null);
+
final SpellAbilityRestriction restrict = new SpellAbilityRestriction();
restrict.setZone(ZoneType.Graveyard);
restrict.setSorcerySpeed(true);
@@ -1040,8 +1056,18 @@ public class CardFactoryUtil {
public static SpellAbility abilityTransmute(final Card sourceCard, String transmuteCost) {
transmuteCost += " Discard<1/CARDNAME>";
final Cost abCost = new Cost(sourceCard, transmuteCost, true);
-
- final SpellAbility transmute = new AbilityActivated(sourceCard, abCost, null) {
+ class AbilityTransmute extends AbilityActivated {
+ public AbilityTransmute(final Card ca, final Cost co, final Target t) {
+ super(ca,co,t);
+ }
+
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityTransmute(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ res.getRestrictions().setZone(ZoneType.Hand);
+ return res;
+ }
+
private static final long serialVersionUID = -4960704261761785512L;
@Override
@@ -1081,8 +1107,9 @@ public class CardFactoryUtil {
}
sourceCard.getController().shuffle();
}
-
- };
+ }
+ final SpellAbility transmute = new AbilityTransmute(sourceCard, abCost, null);
+
final StringBuilder sbDesc = new StringBuilder();
sbDesc.append("Transmute (").append(abCost.toString());
sbDesc.append("Search your library for a card with the same converted mana cost as this card, reveal it, ");
@@ -1174,7 +1201,17 @@ public class CardFactoryUtil {
final String[] extrinsicKeywords, final Cost abCost) {
final Target target = new Target(sourceCard, "Select target creature you control",
"Creature.YouCtrl".split(","));
- final SpellAbility equip = new AbilityActivated(sourceCard, abCost, target) {
+ class AbilityEquip extends AbilityActivated {
+ public AbilityEquip(final Card ca, final Cost co, final Target t) {
+ super(ca,co,t);
+ }
+
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityEquip(getSourceCard(),getPayCosts(),getTarget() == null ? null : new Target(getTarget()));
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
+
private static final long serialVersionUID = -4960704261761785512L;
@Override
@@ -1255,8 +1292,9 @@ public class CardFactoryUtil {
return list;
} // getCreature()
- }; // equip ability
-
+ }
+ final SpellAbility equip = new AbilityEquip(sourceCard, abCost, target); // equip ability
+
String costDesc = abCost.toString();
// get rid of the ": " at the end
costDesc = costDesc.substring(0, costDesc.length() - 2);
@@ -3881,6 +3919,40 @@ public class CardFactoryUtil {
to.setStaticAbilityStrings(from.getStaticAbilityStrings());
}
+
+ public static void copySpellAbility(SpellAbility from,SpellAbility to) {
+ to.setDescription(from.getDescription());
+ to.setStackDescription(from.getDescription());
+ if(from.getAbilityFactory() != null) {
+ to.setAbilityFactory(new AbilityFactory(from.getAbilityFactory()));
+ }
+ if(from.getSubAbility() != null) {
+ to.setSubAbility(from.getSubAbility().getCopy());
+ }
+ if(from.getRestrictions() != null) {
+ to.setRestrictions(from.getRestrictions());
+ }
+ if(from.getConditions() != null) {
+ to.setConditions(from.getConditions());
+ }
+
+ for(String sVar : from.getSVars()) {
+ to.setSVar(sVar, from.getSVar(sVar));
+ }
+ }
+
+ public static void correctAbilityChainSourceCard(final SpellAbility sa, final Card card)
+ {
+ sa.setSourceCard(card);
+ if(sa.getAbilityFactory() != null)
+ {
+ sa.getAbilityFactory().setHostCard(card);
+ }
+ if(sa.getSubAbility() != null)
+ {
+ correctAbilityChainSourceCard(sa.getSubAbility(), card);
+ }
+ }
/**
* Adds the ability factory abilities.
diff --git a/src/main/java/forge/card/cost/Cost.java b/src/main/java/forge/card/cost/Cost.java
index 3f9d7eaf667..718009bc39f 100644
--- a/src/main/java/forge/card/cost/Cost.java
+++ b/src/main/java/forge/card/cost/Cost.java
@@ -48,6 +48,12 @@ public class Cost {
public final ArrayList getCostParts() {
return this.costParts;
}
+
+ private SpellAbility assocSA = null;
+
+ public void setSpellAbility(final SpellAbility sa) {
+ assocSA = sa;
+ }
private boolean sacCost = false;
diff --git a/src/main/java/forge/card/cost/CostDiscard.java b/src/main/java/forge/card/cost/CostDiscard.java
index 90887801670..9b892d74c90 100644
--- a/src/main/java/forge/card/cost/CostDiscard.java
+++ b/src/main/java/forge/card/cost/CostDiscard.java
@@ -188,10 +188,10 @@ public class CostDiscard extends CostPartWithList {
if (discType.equals("Random")) {
if (c == null) {
- final String sVar = source.getSVar(amount);
+ final String sVar = ability.getSVar(amount);
// Generalize this
if (sVar.equals("XChoice")) {
- c = CostUtil.chooseXValue(source, handList.size());
+ c = CostUtil.chooseXValue(source, ability, handList.size());
} else {
c = AbilityFactory.calculateAmount(source, amount, ability);
}
@@ -205,10 +205,10 @@ public class CostDiscard extends CostPartWithList {
handList = handList.getValidCards(validType, activator, ability.getSourceCard());
if (c == null) {
- final String sVar = source.getSVar(amount);
+ final String sVar = ability.getSVar(amount);
// Generalize this
if (sVar.equals("XChoice")) {
- c = CostUtil.chooseXValue(source, handList.size());
+ c = CostUtil.chooseXValue(source, ability, handList.size());
} else {
c = AbilityFactory.calculateAmount(source, amount, ability);
}
@@ -257,7 +257,7 @@ public class CostDiscard extends CostPartWithList {
else {
Integer c = this.convertAmount();
if (c == null) {
- final String sVar = source.getSVar(this.getAmount());
+ final String sVar = ability.getSVar(this.getAmount());
if (sVar.equals("XChoice")) {
return false;
}
diff --git a/src/main/java/forge/card/cost/CostExile.java b/src/main/java/forge/card/cost/CostExile.java
index 64a44dd800a..ad7de0928f1 100644
--- a/src/main/java/forge/card/cost/CostExile.java
+++ b/src/main/java/forge/card/cost/CostExile.java
@@ -185,12 +185,12 @@ public class CostExile extends CostPartWithList {
CardList list = activator.getCardsIn(this.getFrom());
list = list.getValidCards(this.getType().split(";"), activator, source);
if (c == null) {
- final String sVar = source.getSVar(amount);
+ final String sVar = ability.getSVar(amount);
// Generalize this
if (sVar.equals("XChoice")) {
- c = CostUtil.chooseXValue(source, list.size());
+ c = CostUtil.chooseXValue(source, ability, list.size());
} else if (sVar.equals("YChoice")) {
- c = CostUtil.chooseYValue(source, list.size());
+ c = CostUtil.chooseYValue(source, ability, list.size());
} else {
c = AbilityFactory.calculateAmount(source, amount, ability);
}
@@ -222,7 +222,7 @@ public class CostExile extends CostPartWithList {
} else {
Integer c = this.convertAmount();
if (c == null) {
- final String sVar = source.getSVar(this.getAmount());
+ final String sVar = ability.getSVar(this.getAmount());
// Generalize this
if (sVar.equals("XChoice")) {
return false;
diff --git a/src/main/java/forge/card/cost/CostGainLife.java b/src/main/java/forge/card/cost/CostGainLife.java
index 96b19c0d01e..39208911f4b 100644
--- a/src/main/java/forge/card/cost/CostGainLife.java
+++ b/src/main/java/forge/card/cost/CostGainLife.java
@@ -124,10 +124,10 @@ public class CostGainLife extends CostPart {
Integer c = this.convertAmount();
if (c == null) {
- final String sVar = source.getSVar(amount);
+ final String sVar = ability.getSVar(amount);
// Generalize this
if (sVar.equals("XChoice")) {
- c = CostUtil.chooseXValue(source, life);
+ c = CostUtil.chooseXValue(source, ability, life);
} else {
c = AbilityFactory.calculateAmount(source, amount, ability);
}
@@ -161,7 +161,7 @@ public class CostGainLife extends CostPart {
Integer c = this.convertAmount();
if (c == null) {
- final String sVar = source.getSVar(this.getAmount());
+ final String sVar = ability.getSVar(this.getAmount());
// Generalize this
if (sVar.equals("XChoice")) {
return false;
diff --git a/src/main/java/forge/card/cost/CostMana.java b/src/main/java/forge/card/cost/CostMana.java
index 360e1a8f1f0..aaf6d847b6f 100644
--- a/src/main/java/forge/card/cost/CostMana.java
+++ b/src/main/java/forge/card/cost/CostMana.java
@@ -206,7 +206,7 @@ public class CostMana extends CostPart {
int manaToAdd = 0;
if (!this.hasNoXManaCost()) {
// if X cost is a defined value, other than xPaid
- if (!source.getSVar("X").equals("Count$xPaid")) {
+ if (!ability.getSVar("X").equals("Count$xPaid")) {
// this currently only works for things about Targeted object
manaToAdd = AbilityFactory.calculateAmount(source, "X", ability) * this.getXMana();
}
diff --git a/src/main/java/forge/card/cost/CostMill.java b/src/main/java/forge/card/cost/CostMill.java
index 274a6ce651a..751a2b7be5e 100644
--- a/src/main/java/forge/card/cost/CostMill.java
+++ b/src/main/java/forge/card/cost/CostMill.java
@@ -61,7 +61,7 @@ public class CostMill extends CostPartWithList {
Integer i = this.convertAmount();
if (i == null) {
- final String sVar = source.getSVar(this.getAmount());
+ final String sVar = ability.getSVar(this.getAmount());
if (sVar.equals("XChoice")) {
return true;
}
@@ -85,7 +85,7 @@ public class CostMill extends CostPartWithList {
Integer c = this.convertAmount();
if (c == null) {
- final String sVar = source.getSVar(this.getAmount());
+ final String sVar = ability.getSVar(this.getAmount());
// Generalize this
if (sVar.equals("XChoice")) {
return false;
@@ -130,10 +130,10 @@ public class CostMill extends CostPartWithList {
final Player activator = ability.getActivatingPlayer();
if (c == null) {
- final String sVar = source.getSVar(amount);
+ final String sVar = ability.getSVar(amount);
// Generalize this
if (sVar.equals("XChoice")) {
- c = CostUtil.chooseXValue(source, this.getList().size());
+ c = CostUtil.chooseXValue(source, ability, this.getList().size());
} else {
c = AbilityFactory.calculateAmount(source, amount, ability);
}
diff --git a/src/main/java/forge/card/cost/CostPayLife.java b/src/main/java/forge/card/cost/CostPayLife.java
index eaea189f709..cbdcdaea6ae 100644
--- a/src/main/java/forge/card/cost/CostPayLife.java
+++ b/src/main/java/forge/card/cost/CostPayLife.java
@@ -129,10 +129,10 @@ public class CostPayLife extends CostPart {
Integer c = this.convertAmount();
if (c == null) {
- final String sVar = source.getSVar(amount);
+ final String sVar = ability.getSVar(amount);
// Generalize this
if (sVar.equals("XChoice")) {
- c = CostUtil.chooseXValue(source, life);
+ c = CostUtil.chooseXValue(source, ability, life);
} else {
c = AbilityFactory.calculateAmount(source, amount, ability);
}
@@ -166,7 +166,7 @@ public class CostPayLife extends CostPart {
Integer c = this.convertAmount();
if (c == null) {
- final String sVar = source.getSVar(this.getAmount());
+ final String sVar = ability.getSVar(this.getAmount());
// Generalize this
if (sVar.equals("XChoice")) {
return false;
diff --git a/src/main/java/forge/card/cost/CostRemoveCounter.java b/src/main/java/forge/card/cost/CostRemoveCounter.java
index 7a77242a956..3778d6d38dd 100644
--- a/src/main/java/forge/card/cost/CostRemoveCounter.java
+++ b/src/main/java/forge/card/cost/CostRemoveCounter.java
@@ -213,10 +213,10 @@ public class CostRemoveCounter extends CostPartWithList {
c = maxCounters;
} else {
if (c == null) {
- final String sVar = source.getSVar(amount);
+ final String sVar = ability.getSVar(amount);
// Generalize this
if (sVar.equals("XChoice")) {
- c = CostUtil.chooseXValue(source, maxCounters);
+ c = CostUtil.chooseXValue(source, ability, maxCounters);
} else {
c = AbilityFactory.calculateAmount(source, amount, ability);
}
@@ -255,7 +255,7 @@ public class CostRemoveCounter extends CostPartWithList {
}
if (c == null) {
- final String sVar = source.getSVar(amount);
+ final String sVar = ability.getSVar(amount);
if (sVar.equals("XChoice")) {
return false;
}
diff --git a/src/main/java/forge/card/cost/CostReturn.java b/src/main/java/forge/card/cost/CostReturn.java
index 76a07f48c77..5dc4049522f 100644
--- a/src/main/java/forge/card/cost/CostReturn.java
+++ b/src/main/java/forge/card/cost/CostReturn.java
@@ -147,10 +147,10 @@ public class CostReturn extends CostPartWithList {
final Player activator = ability.getActivatingPlayer();
final CardList list = activator.getCardsIn(ZoneType.Battlefield);
if (c == null) {
- final String sVar = source.getSVar(amount);
+ final String sVar = ability.getSVar(amount);
// Generalize this
if (sVar.equals("XChoice")) {
- c = CostUtil.chooseXValue(source, list.size());
+ c = CostUtil.chooseXValue(source, ability, list.size());
} else {
c = AbilityFactory.calculateAmount(source, amount, ability);
}
diff --git a/src/main/java/forge/card/cost/CostReveal.java b/src/main/java/forge/card/cost/CostReveal.java
index 2c490e190a8..4172710e72c 100644
--- a/src/main/java/forge/card/cost/CostReveal.java
+++ b/src/main/java/forge/card/cost/CostReveal.java
@@ -103,7 +103,7 @@ public class CostReveal extends CostPartWithList {
hand = hand.getValidCards(type.split(";"), activator, source);
Integer c = this.convertAmount();
if (c == null) {
- final String sVar = source.getSVar(this.getAmount());
+ final String sVar = ability.getSVar(this.getAmount());
if (sVar.equals("XChoice")) {
c = hand.size();
} else {
@@ -150,9 +150,9 @@ public class CostReveal extends CostPartWithList {
handList = handList.getValidCards(this.getType().split(";"), activator, ability.getSourceCard());
if (c == null) {
- final String sVar = source.getSVar(amount);
+ final String sVar = ability.getSVar(amount);
if (sVar.equals("XChoice")) {
- c = CostUtil.chooseXValue(source, handList.size());
+ c = CostUtil.chooseXValue(source, ability, handList.size());
} else {
c = AbilityFactory.calculateAmount(source, amount, ability);
}
diff --git a/src/main/java/forge/card/cost/CostSacrifice.java b/src/main/java/forge/card/cost/CostSacrifice.java
index 72837eef519..af9224e812c 100644
--- a/src/main/java/forge/card/cost/CostSacrifice.java
+++ b/src/main/java/forge/card/cost/CostSacrifice.java
@@ -170,10 +170,10 @@ public class CostSacrifice extends CostPartWithList {
} else {
Integer c = this.convertAmount();
if (c == null) {
- final String sVar = source.getSVar(amount);
+ final String sVar = ability.getSVar(amount);
// Generalize this
if (sVar.equals("XChoice")) {
- c = CostUtil.chooseXValue(source, list.size());
+ c = CostUtil.chooseXValue(source, ability, list.size());
} else {
c = AbilityFactory.calculateAmount(source, amount, ability);
}
@@ -212,7 +212,7 @@ public class CostSacrifice extends CostPartWithList {
} else {
Integer c = this.convertAmount();
if (c == null) {
- if (source.getSVar(this.getAmount()).equals("XChoice")) {
+ if (ability.getSVar(this.getAmount()).equals("XChoice")) {
return false;
}
diff --git a/src/main/java/forge/card/cost/CostTap.java b/src/main/java/forge/card/cost/CostTap.java
index d9edec8d870..c57a21bf6b1 100644
--- a/src/main/java/forge/card/cost/CostTap.java
+++ b/src/main/java/forge/card/cost/CostTap.java
@@ -51,7 +51,7 @@ public class CostTap extends CostPart {
*/
@Override
public final void refund(final Card source) {
- source.untap();
+ source.setTapped(false);
}
/*
diff --git a/src/main/java/forge/card/cost/CostTapType.java b/src/main/java/forge/card/cost/CostTapType.java
index 241041a9723..4265cbc9e8b 100644
--- a/src/main/java/forge/card/cost/CostTapType.java
+++ b/src/main/java/forge/card/cost/CostTapType.java
@@ -97,7 +97,7 @@ public class CostTapType extends CostPartWithList {
@Override
public final void refund(final Card source) {
for (final Card c : this.getList()) {
- c.untap();
+ c.setTapped(false);
}
this.getList().clear();
@@ -158,10 +158,10 @@ public class CostTapType extends CostPartWithList {
final String amount = this.getAmount();
Integer c = this.convertAmount();
if (c == null) {
- final String sVar = source.getSVar(amount);
+ final String sVar = ability.getSVar(amount);
// Generalize this
if (sVar.equals("XChoice")) {
- c = CostUtil.chooseXValue(source, typeList.size());
+ c = CostUtil.chooseXValue(source, ability, typeList.size());
} else {
c = AbilityFactory.calculateAmount(source, amount, ability);
}
@@ -184,7 +184,7 @@ public class CostTapType extends CostPartWithList {
final String amount = this.getAmount();
Integer c = this.convertAmount();
if (c == null) {
- final String sVar = source.getSVar(amount);
+ final String sVar = ability.getSVar(amount);
if (sVar.equals("XChoice")) {
CardList typeList = ability.getActivatingPlayer().getCardsIn(ZoneType.Battlefield);
typeList = typeList.getValidCards(this.getType().split(";"), ability.getActivatingPlayer(),
diff --git a/src/main/java/forge/card/cost/CostUntap.java b/src/main/java/forge/card/cost/CostUntap.java
index f1e41c41ff1..7bf95755690 100644
--- a/src/main/java/forge/card/cost/CostUntap.java
+++ b/src/main/java/forge/card/cost/CostUntap.java
@@ -51,7 +51,7 @@ public class CostUntap extends CostPart {
*/
@Override
public final void refund(final Card source) {
- source.tap();
+ source.setTapped(true);
}
/*
diff --git a/src/main/java/forge/card/cost/CostUtil.java b/src/main/java/forge/card/cost/CostUtil.java
index e6914f9299c..3a5e226ae7c 100644
--- a/src/main/java/forge/card/cost/CostUtil.java
+++ b/src/main/java/forge/card/cost/CostUtil.java
@@ -269,12 +269,12 @@ public class CostUtil {
final String amount = part.getAmount();
Integer c = part.convertAmount();
if (c == null) {
- final String sVar = source.getSVar(amount);
+ final String sVar = ability.getSVar(amount);
// Generalize this
if (sVar.equals("XChoice")) {
- c = CostUtil.chooseXValue(source, maxChoice);
+ c = CostUtil.chooseXValue(source, ability, maxChoice);
} if (sVar.equals("YChoice")) {
- c = CostUtil.chooseYValue(source, maxChoice);
+ c = CostUtil.chooseYValue(source, ability, maxChoice);
} else {
c = AbilityFactory.calculateAmount(source, amount, ability);
}
@@ -291,8 +291,8 @@ public class CostUtil {
* the max value
* @return the int
*/
- public static int chooseXValue(final Card card, final int maxValue) {
- final String chosen = card.getSVar("ChosenX");
+ public static int chooseXValue(final Card card, final SpellAbility sa, final int maxValue) {
+ final String chosen = sa.getSVar("ChosenX");
if (chosen.length() > 0) {
return AbilityFactory.calculateAmount(card, "ChosenX", null);
}
@@ -303,7 +303,7 @@ public class CostUtil {
}
final Object o = GuiUtils.chooseOne(card.toString() + " - Choose a Value for X", choiceArray);
final int chosenX = (Integer) o;
- card.setSVar("ChosenX", "Number$" + Integer.toString(chosenX));
+ sa.setSVar("ChosenX", "Number$" + Integer.toString(chosenX));
return chosenX;
}
@@ -317,8 +317,8 @@ public class CostUtil {
* the max value
* @return the int
*/
- public static int chooseYValue(final Card card, final int maxValue) {
- final String chosen = card.getSVar("ChosenY");
+ public static int chooseYValue(final Card card, final SpellAbility sa, final int maxValue) {
+ final String chosen = sa.getSVar("ChosenY");
if (chosen.length() > 0) {
return AbilityFactory.calculateAmount(card, "ChosenY", null);
}
diff --git a/src/main/java/forge/card/mana/ManaCostShard.java b/src/main/java/forge/card/mana/ManaCostShard.java
index df87ae38d7f..bf351b031d3 100644
--- a/src/main/java/forge/card/mana/ManaCostShard.java
+++ b/src/main/java/forge/card/mana/ManaCostShard.java
@@ -285,7 +285,7 @@ public class ManaCostShard {
return element;
}
}
- throw new RuntimeException(String.format("Not fount: mana shard with profile = %x", atoms));
+ throw new RuntimeException(String.format("Not found: mana shard with profile = %x", atoms));
}
/*
diff --git a/src/main/java/forge/card/spellability/AbilityActivated.java b/src/main/java/forge/card/spellability/AbilityActivated.java
index 5c232f0c5fd..e2ce48e7b1e 100644
--- a/src/main/java/forge/card/spellability/AbilityActivated.java
+++ b/src/main/java/forge/card/spellability/AbilityActivated.java
@@ -73,8 +73,14 @@ public abstract class AbilityActivated extends SpellAbility implements java.io.S
if ((tgt != null) && tgt.doesTarget()) {
this.setTarget(tgt);
}
+
+ this.getPayCosts().setSpellAbility(this);
}
-
+
+ public abstract AbilityActivated getCopy();/* {
+ return null;
+ }
+
/** {@inheritDoc} */
@Override
public boolean canPlay() {
diff --git a/src/main/java/forge/card/spellability/AbilityMana.java b/src/main/java/forge/card/spellability/AbilityMana.java
index 8e73ab68ad9..6995bd109c8 100644
--- a/src/main/java/forge/card/spellability/AbilityMana.java
+++ b/src/main/java/forge/card/spellability/AbilityMana.java
@@ -24,6 +24,7 @@ import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.card.abilityfactory.AbilityFactory;
+import forge.card.cardfactory.CardFactoryUtil;
import forge.card.cost.Cost;
import forge.card.mana.Mana;
import forge.card.mana.ManaPool;
@@ -39,7 +40,7 @@ import forge.game.player.Player;
* @author Forge
* @version $Id$
*/
-public abstract class AbilityMana extends AbilityActivated implements java.io.Serializable {
+public class AbilityMana extends AbilityActivated implements java.io.Serializable {
/** Constant serialVersionUID=-6816356991224950520L. */
private static final long serialVersionUID = -6816356991224950520L;
@@ -73,6 +74,13 @@ public abstract class AbilityMana extends AbilityActivated implements java.io.Se
public AbilityMana(final Card sourceCard, final String parse, final String produced) {
this(sourceCard, parse, produced, 1);
}
+
+ @Override
+ public AbilityActivated getCopy() {
+ AbilityActivated res = new AbilityMana(getSourceCard(),getPayCosts(),getManaProduced());
+ CardFactoryUtil.copySpellAbility(this, res);
+ return res;
+ }
/**
*
diff --git a/src/main/java/forge/card/spellability/AbilitySub.java b/src/main/java/forge/card/spellability/AbilitySub.java
index 6c84e02281d..41b6626c653 100644
--- a/src/main/java/forge/card/spellability/AbilitySub.java
+++ b/src/main/java/forge/card/spellability/AbilitySub.java
@@ -63,6 +63,8 @@ public abstract class AbilitySub extends SpellAbility implements java.io.Seriali
* @return a boolean.
*/
public abstract boolean chkAIDrawback();
+
+ public abstract AbilitySub getCopy();
/** {@inheritDoc} */
@Override
diff --git a/src/main/java/forge/card/spellability/SpellAbility.java b/src/main/java/forge/card/spellability/SpellAbility.java
index 9c104330d50..77b64480253 100644
--- a/src/main/java/forge/card/spellability/SpellAbility.java
+++ b/src/main/java/forge/card/spellability/SpellAbility.java
@@ -19,6 +19,7 @@ package forge.card.spellability;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Set;
import forge.Card;
import forge.CardList;
@@ -126,6 +127,20 @@ public abstract class SpellAbility {
};
private CardList tappedForConvoke = new CardList();
+
+ private HashMap sVars = new HashMap();
+
+ public final String getSVar(final String name) {
+ return sVars.get(name) != null ? sVars.get(name) : "";
+ }
+
+ public final void setSVar(final String name, final String value) {
+ sVars.put(name,value);
+ }
+
+ public Set getSVars() {
+ return sVars.keySet();
+ }
/**
*
diff --git a/src/main/java/forge/card/staticability/StaticAbility.java b/src/main/java/forge/card/staticability/StaticAbility.java
index a255ddf0945..29c01267874 100644
--- a/src/main/java/forge/card/staticability/StaticAbility.java
+++ b/src/main/java/forge/card/staticability/StaticAbility.java
@@ -147,7 +147,7 @@ public class StaticAbility {
return 5;
}
- if (this.mapParams.containsKey("RemoveAllAbilities")) {
+ if (this.mapParams.containsKey("RemoveAllAbilities") || this.mapParams.containsKey("GainsAbilitiesOf")) {
return 6; // Layer 6
}
@@ -397,6 +397,10 @@ public class StaticAbility {
if (mode.equals("ETBTapped")) {
return StaticAbilityETBTapped.applyETBTappedAbility(this, card);
}
+
+ if (mode.equals("GainAbilitiesOf")) {
+
+ }
return false;
}
diff --git a/src/main/java/forge/card/staticability/StaticAbilityContinuous.java b/src/main/java/forge/card/staticability/StaticAbilityContinuous.java
index 111c792bb6d..43aed66d74e 100644
--- a/src/main/java/forge/card/staticability/StaticAbilityContinuous.java
+++ b/src/main/java/forge/card/staticability/StaticAbilityContinuous.java
@@ -30,6 +30,7 @@ import forge.StaticEffect;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.replacement.ReplacementEffect;
+import forge.card.spellability.AbilityActivated;
import forge.card.spellability.SpellAbility;
import forge.card.trigger.Trigger;
import forge.card.trigger.TriggerHandler;
@@ -215,6 +216,36 @@ public class StaticAbilityContinuous {
}
addTriggers = sVars;
}
+
+ if (params.containsKey("GainsAbilitiesOf")) {
+ final String[] valids = params.get("GainsAbilitiesOf").split(",");
+ ArrayList validZones = new ArrayList();
+ validZones.add(ZoneType.Battlefield);
+ if(params.containsKey("GainsAbilitiesOfZones")) {
+ validZones.clear();
+ for(String s : params.get("GainsAbilitiesOfZones").split(",")) {
+ validZones.add(ZoneType.smartValueOf(s));
+ }
+ }
+
+ CardList cardsIGainedAbilitiesFrom = AllZoneUtil.getCardsIn(validZones);
+ cardsIGainedAbilitiesFrom = cardsIGainedAbilitiesFrom.getValidCards(valids, hostCard.getController(), hostCard);
+
+ for(Card c : cardsIGainedAbilitiesFrom) {
+ for(SpellAbility sa : c.getSpellAbilities()) {
+ if(sa instanceof AbilityActivated) {
+ SpellAbility newSA = ((AbilityActivated)sa).getCopy();
+ if(newSA == null) {
+ System.out.println("Uh-oh...");
+ }
+ newSA.setType("Temporary");
+ CardFactoryUtil.correctAbilityChainSourceCard(newSA, hostCard);
+ hostCard.addSpellAbility(newSA);
+ }
+ }
+ }
+
+ }
// modify players
for (final Player p : affectedPlayers) {
diff --git a/src/main/java/forge/control/bazaar/package-info.java b/src/main/java/forge/control/bazaar/package-info.java
index ddf3248f184..05df9b6f0e0 100644
--- a/src/main/java/forge/control/bazaar/package-info.java
+++ b/src/main/java/forge/control/bazaar/package-info.java
@@ -1,3 +1,3 @@
-/** Controller (as in model-view-controller) for Forge. */
-package forge.control.bazaar;
-
+/** Controller (as in model-view-controller) for Forge. */
+package forge.control.bazaar;
+
diff --git a/src/main/java/forge/game/limited/SealedDeck.java b/src/main/java/forge/game/limited/SealedDeck.java
index 88ba97282ce..18101ca2cf8 100644
--- a/src/main/java/forge/game/limited/SealedDeck.java
+++ b/src/main/java/forge/game/limited/SealedDeck.java
@@ -432,7 +432,6 @@ public class SealedDeck {
if (deck.get(i).getName().equals("Plains") || deck.get(i).getName().equals("Island")
|| deck.get(i).getName().equals("Swamp") || deck.get(i).getName().equals("Mountain")
|| deck.get(i).getName().equals("Forest")) {
- //System.out.println("Heyo!");
}
aiDeck.getMain().add(deck.get(i));
}
diff --git a/src/main/java/forge/game/phase/EndOfTurn.java b/src/main/java/forge/game/phase/EndOfTurn.java
index daf5b42aedf..8565780a60f 100644
--- a/src/main/java/forge/game/phase/EndOfTurn.java
+++ b/src/main/java/forge/game/phase/EndOfTurn.java
@@ -22,7 +22,6 @@ import forge.AllZoneUtil;
import forge.Card;
import forge.CardList;
import forge.CardListFilter;
-import forge.CardListUtil;
import forge.Counters;
import forge.Singletons;
import forge.card.spellability.Ability;
@@ -30,7 +29,6 @@ import forge.card.spellability.SpellAbility;
import forge.game.GameLossReason;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
-import forge.gui.GuiUtils;
/**
*
@@ -56,7 +54,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable {
final CardList all = AllZoneUtil.getCardsIn(ZoneType.Battlefield);
- EndOfTurn.endOfTurnWallOfReverence();
+ //EndOfTurn.endOfTurnWallOfReverence();
EndOfTurn.endOfTurnLighthouseChronologist();
// reset mustAttackEntity for me
@@ -229,7 +227,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable {
} // executeAt()
- private static void endOfTurnWallOfReverence() {
+ /*private static void endOfTurnWallOfReverence() {
final Player player = Singletons.getModel().getGameState().getPhaseHandler().getPlayerTurn();
final CardList list = player.getCardsIn(ZoneType.Battlefield, "Wall of Reverence");
@@ -272,7 +270,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable {
AllZone.getStack().addSimultaneousStackEntry(ability);
}
- } // endOfTurnWallOfReverence()
+ } // endOfTurnWallOfReverence()*/
private static void endOfTurnLighthouseChronologist() {
final Player player = Singletons.getModel().getGameState().getPhaseHandler().getPlayerTurn();
diff --git a/src/main/java/forge/game/phase/package-info.java b/src/main/java/forge/game/phase/package-info.java
index 935a3bae7d9..c7367dbf9ec 100644
--- a/src/main/java/forge/game/phase/package-info.java
+++ b/src/main/java/forge/game/phase/package-info.java
@@ -1,3 +1,3 @@
-/** Forge Card Game. */
-package forge.game.phase;
-
+/** Forge Card Game. */
+package forge.game.phase;
+
diff --git a/src/main/java/forge/game/player/package-info.java b/src/main/java/forge/game/player/package-info.java
index 2f2011c58fb..fe3263c95cb 100644
--- a/src/main/java/forge/game/player/package-info.java
+++ b/src/main/java/forge/game/player/package-info.java
@@ -1,3 +1,3 @@
-/** Forge Card Game. */
-package forge.game.player;
-
+/** Forge Card Game. */
+package forge.game.player;
+
diff --git a/src/main/java/forge/game/zone/MagicStack.java b/src/main/java/forge/game/zone/MagicStack.java
index 2e88f6d6920..9827095fd21 100644
--- a/src/main/java/forge/game/zone/MagicStack.java
+++ b/src/main/java/forge/game/zone/MagicStack.java
@@ -1059,7 +1059,7 @@ public class MagicStack extends MyObservable {
//Setup a Rebound-trigger
final Trigger reboundTrigger = forge.card.trigger.TriggerHandler.parseTrigger("Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | OptionalDecider$ You | TriggerDescription$ At the beginning of your next upkeep, you may cast " + source.toString() + " without paying it's manacost.", source, true);
- final AbilityActivated trigAb = new AbilityActivated(source, "0") {
+ final Ability trigAb = new Ability(source, "0") {
private static final long serialVersionUID = 7497175394128633122L;
diff --git a/src/main/java/forge/game/zone/package-info.java b/src/main/java/forge/game/zone/package-info.java
index 019ead82538..0d4ba0eb13b 100644
--- a/src/main/java/forge/game/zone/package-info.java
+++ b/src/main/java/forge/game/zone/package-info.java
@@ -1,3 +1,3 @@
-/** Forge Card Game. */
-package forge.game.zone;
-
+/** Forge Card Game. */
+package forge.game.zone;
+
diff --git a/src/main/java/forge/gui/GuiDisplayUtil.java b/src/main/java/forge/gui/GuiDisplayUtil.java
index ef9a66cb55e..4f6ae97111b 100644
--- a/src/main/java/forge/gui/GuiDisplayUtil.java
+++ b/src/main/java/forge/gui/GuiDisplayUtil.java
@@ -41,9 +41,15 @@ import forge.CardUtil;
import forge.Constant;
import forge.Counters;
import forge.Singletons;
+import forge.StaticEffects;
+import forge.card.replacement.ReplacementHandler;
import forge.card.spellability.AbilityMana;
+import forge.card.trigger.TriggerHandler;
import forge.card.trigger.TriggerType;
+import forge.control.input.InputControl;
+import forge.game.phase.Combat;
import forge.game.player.Player;
+import forge.game.zone.PlayerZone;
import forge.game.zone.ZoneType;
import forge.item.CardDb;
import forge.item.CardPrinted;
@@ -762,5 +768,36 @@ public final class GuiDisplayUtil {
}
}
}
+
+ public static void devModeBreakpoint() {
+ List Players = AllZone.getPlayersInGame();
+
+ Combat CombatHandler = AllZone.getCombat();
+
+ TriggerHandler Triggers = AllZone.getTriggerHandler();
+
+ InputControl InputHandler = AllZone.getInputControl();
+
+ ReplacementHandler Replacements = AllZone.getReplacementHandler();
+
+ StaticEffects StaticHandler = AllZone.getStaticEffects();
+
+ List Zones = new ArrayList();
+ for(Player p : Players)
+ {
+ Zones.add(p.getZone(ZoneType.Ante));
+ Zones.add(p.getZone(ZoneType.Battlefield));
+ Zones.add(p.getZone(ZoneType.Command));
+ Zones.add(p.getZone(ZoneType.Exile));
+ Zones.add(p.getZone(ZoneType.Graveyard));
+ Zones.add(p.getZone(ZoneType.Hand));
+ Zones.add(p.getZone(ZoneType.Library));
+ Zones.add(p.getZone(ZoneType.Sideboard));
+ Zones.add(p.getZone(ZoneType.Stack));
+ }
+
+ //Set a breakpoint on the following statement
+ System.out.println("Manual Breakpoint");
+ }
} // end class GuiDisplayUtil
diff --git a/src/main/java/forge/gui/deckeditor/controllers/CEditorQuestCardShop.java b/src/main/java/forge/gui/deckeditor/controllers/CEditorQuestCardShop.java
index 0569803411c..9017d8fdded 100644
--- a/src/main/java/forge/gui/deckeditor/controllers/CEditorQuestCardShop.java
+++ b/src/main/java/forge/gui/deckeditor/controllers/CEditorQuestCardShop.java
@@ -71,7 +71,7 @@ public final class CEditorQuestCardShop extends ACEditorBase 0 || (manaCost.getGenericCost() == 0 && width == 0));
+ if (manaCost.getGenericCost() > 0 || (manaCost.getGenericCost() == 0 && width == 0)) {
width++;
-
- /*
- StringTokenizer tok = new StringTokenizer(manaCost, " ");
- while (tok.hasMoreTokens()) {
- String symbol = tok.nextToken();
- width += symbol.length() > 2 ? 10 : 14; // slash.png is only 10
- // pixels wide.
}
- */
+
+ //System.out.println(String.format("%d for %s", width, manaCost.toString()));
return width * 14;
}
}
diff --git a/src/main/java/forge/quest/QuestController.java b/src/main/java/forge/quest/QuestController.java
index 0f0124e8cee..df18a15530f 100644
--- a/src/main/java/forge/quest/QuestController.java
+++ b/src/main/java/forge/quest/QuestController.java
@@ -191,10 +191,11 @@ public class QuestController {
* @param diff the diff
* @param mode the mode
* @param startPool the start type
+ * @param startFormat the format of starting pool
* @param preconName the precon name
*/
public void newGame(final String name, final int diff, final QuestMode mode, final QuestStartPool startPool,
- final String preconName) {
+ final String startFormat, final String preconName) {
this.load(new QuestData(name, diff, mode));
@@ -204,8 +205,8 @@ public class QuestController {
this.myCards.addPreconDeck(QuestController.preconManager.get(preconName));
return;
- case Standard:
- filter = Singletons.getModel().getFormats().getStandard().getFilterPrinted();
+ case Rotating:
+ filter = Singletons.getModel().getFormats().getFormat(startFormat).getFilterPrinted();
break;
default: // Unrestricted
diff --git a/src/main/java/forge/quest/QuestStartPool.java b/src/main/java/forge/quest/QuestStartPool.java
index cf344f3d1df..d8e3a31879f 100644
--- a/src/main/java/forge/quest/QuestStartPool.java
+++ b/src/main/java/forge/quest/QuestStartPool.java
@@ -2,7 +2,6 @@ package forge.quest;
public enum QuestStartPool {
Complete,
- Standard,
- Extended,
+ Rotating,
Precon
}
diff --git a/src/main/java/forge/util/closures/package-info.java b/src/main/java/forge/util/closures/package-info.java
index b1fb48495e3..11f8fe8b617 100644
--- a/src/main/java/forge/util/closures/package-info.java
+++ b/src/main/java/forge/util/closures/package-info.java
@@ -1,3 +1,3 @@
-/** Forge Card Game. */
-package forge.util.closures;
-
+/** Forge Card Game. */
+package forge.util.closures;
+
diff --git a/src/main/java/forge/view/Main.java b/src/main/java/forge/view/Main.java
index 0e88c1772cc..29355be5bba 100644
--- a/src/main/java/forge/view/Main.java
+++ b/src/main/java/forge/view/Main.java
@@ -43,6 +43,9 @@ public final class Main {
* an array of {@link java.lang.String} objects.
*/
public static void main(final String[] args) {
+ //Possible solution to "Comparison method violates it's general contract!" crash
+ System.setProperty("java.util.Arrays.useLegacyMergeSort", "true");
+
ExceptionHandler.registerErrorHandling();
Singletons.setModel(FModel.SINGLETON_INSTANCE);
diff --git a/src/main/java/net/slightlymagic/braids/package-info.java b/src/main/java/net/slightlymagic/braids/package-info.java
index 3197f556095..097e0089cda 100644
--- a/src/main/java/net/slightlymagic/braids/package-info.java
+++ b/src/main/java/net/slightlymagic/braids/package-info.java
@@ -1,3 +1,3 @@
-/** Forge Card Game. */
-package net.slightlymagic.braids;
-
+/** Forge Card Game. */
+package net.slightlymagic.braids;
+