diff --git a/src/main/java/forge/MagicStack.java b/src/main/java/forge/MagicStack.java
index 7da09072409..d34e3f6d8c5 100644
--- a/src/main/java/forge/MagicStack.java
+++ b/src/main/java/forge/MagicStack.java
@@ -906,7 +906,7 @@ public class MagicStack extends MyObservable {
this.finishResolving(sa, true);
} else if (sa.getAbilityFactory() != null) {
AllZone.getGameLog().add("ResolveStack", sa.getStackDescription(), 2);
- AbilityFactory.handleRemembering(sa.getAbilityFactory());
+ AbilityFactory.handleRemembering(sa, sa.getAbilityFactory());
AbilityFactory.resolve(sa, true);
} else {
AllZone.getGameLog().add("ResolveStack", sa.getStackDescription(), 2);
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactory.java b/src/main/java/forge/card/abilityfactory/AbilityFactory.java
index fbdda581e70..246f6f61e17 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactory.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactory.java
@@ -53,6 +53,37 @@ public class AbilityFactory {
private Card hostC = null;
+ /**
+ *
+ * Constructor for AbilityFactory.
+ *
+ */
+ public AbilityFactory() {
+ }
+
+ /**
+ *
+ * Constructor for AbilityFactory.
+ *
+ *
+ * @param af
+ * a AbilityFactory object.
+ */
+ public AbilityFactory(final AbilityFactory af) {
+ this.abCost = af.getAbCost();
+ this.abTgt = af.getAbTgt();
+ this.api = af.getAPI();
+ this.hasSpDesc = af.hasSpDescription();
+ this.hasSubAb = af.hasSubAbility();
+ this.hasValid = af.hasValid();
+ this.hostC = af.getHostCard();
+ this.isAb = af.isAbility();
+ this.isDb = af.isDrawback();
+ this.isSp = af.isSpell();
+ this.isTargeted = af.isTargeted();
+ this.mapParams = af.getMapParams();
+ }
+
/**
*
* getHostCard.
@@ -64,6 +95,16 @@ public class AbilityFactory {
return this.hostC;
}
+ /**
+ *
+ * setHostCard.
+ *
+ *
+ */
+ public final void setHostCard(Card host) {
+ this.hostC = host;
+ }
+
private HashMap mapParams = new HashMap();
/**
@@ -164,6 +205,17 @@ public class AbilityFactory {
return this.abTgt;
}
+ /**
+ *
+ * Setter for the field abTgt.
+ *
+ * @param target
+ * a target object.
+ */
+ public final void setAbTgt(Target target) {
+ this.abTgt = target;
+ }
+
/**
*
* isCurse.
@@ -2290,10 +2342,12 @@ public class AbilityFactory {
* handleRemembering.
*
*
+ * @param sa
+ * a SpellAbility object.
* @param af
* a {@link forge.card.abilityfactory.AbilityFactory} object.
*/
- public static void handleRemembering(final AbilityFactory af) {
+ public static void handleRemembering(final SpellAbility sa, final AbilityFactory af) {
final HashMap params = af.getMapParams();
Card host;
@@ -2307,7 +2361,7 @@ public class AbilityFactory {
host.clearRemembered();
}
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (params.containsKey("RememberTargets")) {
final ArrayList tgts = (tgt == null) ? new ArrayList() : tgt.getTargets();
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryAlterLife.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryAlterLife.java
index 79ca1568a7b..f9e79e99743 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryAlterLife.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryAlterLife.java
@@ -226,7 +226,7 @@ public class AbilityFactoryAlterLife {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -422,7 +422,7 @@ public class AbilityFactoryAlterLife {
final int lifeAmount = AbilityFactory.calculateAmount(af.getHostCard(), params.get("LifeAmount"), sa);
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if ((tgt != null) && !params.containsKey("Defined")) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -613,7 +613,7 @@ public class AbilityFactoryAlterLife {
}
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -819,7 +819,7 @@ public class AbilityFactoryAlterLife {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -1024,7 +1024,7 @@ public class AbilityFactoryAlterLife {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -1067,7 +1067,7 @@ public class AbilityFactoryAlterLife {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -1315,7 +1315,7 @@ public class AbilityFactoryAlterLife {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -1514,7 +1514,7 @@ public class AbilityFactoryAlterLife {
final int lifeAmount = AbilityFactory.calculateAmount(af.getHostCard(), params.get("LifeAmount"), sa);
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if ((tgt != null) && !params.containsKey("Defined")) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -1667,7 +1667,7 @@ public class AbilityFactoryAlterLife {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -1780,7 +1780,7 @@ public class AbilityFactoryAlterLife {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if ((tgt != null) && !params.containsKey("Defined")) {
tgtPlayers = tgt.getTargetPlayers();
} else {
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryAnimate.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryAnimate.java
index e87340ffe30..cafa614dddc 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryAnimate.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryAnimate.java
@@ -218,7 +218,7 @@ public final class AbilityFactoryAnimate {
sb.append(sa.getSourceCard().getName()).append(" - ");
}
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
ArrayList tgts;
if (tgt != null) {
tgts = tgt.getTargetCards();
@@ -309,7 +309,7 @@ public final class AbilityFactoryAnimate {
private static boolean animateCanPlayAI(final AbilityFactory af, final SpellAbility sa) {
final HashMap params = af.getMapParams();
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
final Card source = sa.getSourceCard();
boolean useAbility = true;
@@ -565,7 +565,7 @@ public final class AbilityFactoryAnimate {
sVars.addAll(Arrays.asList(params.get("sVars").split(",")));
}
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
ArrayList tgts;
if (tgt != null) {
tgts = tgt.getTargetCards();
@@ -1174,7 +1174,7 @@ public final class AbilityFactoryAnimate {
CardList list;
ArrayList tgtPlayers = null;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else if (params.containsKey("Defined")) {
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryAttach.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryAttach.java
index 7db7bc21120..3b14f1af154 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryAttach.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryAttach.java
@@ -239,7 +239,7 @@ public class AbilityFactoryAttach {
ArrayList targets;
// Should never allow more than one Attachment per card
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
targets = tgt.getTargets();
} else {
@@ -956,7 +956,7 @@ public class AbilityFactoryAttach {
// Check if there are any valid targets
ArrayList targets = new ArrayList();
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt == null) {
targets = AbilityFactory.getDefinedObjects(sa.getSourceCard(), params.get("Defined"), sa);
}
@@ -1000,7 +1000,7 @@ public class AbilityFactoryAttach {
ArrayList targets;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
targets = tgt.getTargets();
// TODO Remove invalid targets (although more likely this will just
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryChangeZone.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryChangeZone.java
index bc4d4e51b63..25f23ccf6c1 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryChangeZone.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryChangeZone.java
@@ -217,11 +217,11 @@ public final class AbilityFactoryChangeZone {
final HashMap params = af.getMapParams();
final List origin = Constant.Zone.listValueOf(params.get("Origin"));
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
// Don't set the zone if it targets a player
if ((tgt != null) && !tgt.canTgtPlayer()) {
- af.getAbTgt().setZone(origin);
+ sa.getTarget().setZone(origin);
}
if (!(sa instanceof AbilitySub)) {
@@ -402,7 +402,7 @@ public final class AbilityFactoryChangeZone {
ArrayList pDefined = new ArrayList();
pDefined.add(source.getController());
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if ((tgt != null) && tgt.canTgtPlayer()) {
if (af.isCurse()) {
tgt.addTarget(AllZone.getHumanPlayer());
@@ -471,7 +471,7 @@ public final class AbilityFactoryChangeZone {
private static boolean changeHiddenOriginPlayDrawbackAI(final AbilityFactory af, final SpellAbility sa) {
// if putting cards from hand to library and parent is drawing cards
// make sure this will actually do something:
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if ((tgt != null) && tgt.canTgtPlayer()) {
if (af.isCurse()) {
tgt.addTarget(AllZone.getHumanPlayer());
@@ -515,7 +515,7 @@ public final class AbilityFactoryChangeZone {
}
ArrayList pDefined;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if ((tgt != null) && tgt.canTgtPlayer()) {
if (af.isCurse()) {
if (AllZone.getHumanPlayer().canBeTargetedBy(sa)) {
@@ -707,8 +707,8 @@ public final class AbilityFactoryChangeZone {
Player chooser = null;
if (params.containsKey("Chooser")) {
final String choose = params.get("Chooser");
- if (choose.equals("Targeted") && (af.getAbTgt().getTargetPlayers() != null)) {
- chooser = af.getAbTgt().getTargetPlayers().get(0);
+ if (choose.equals("Targeted") && (sa.getTarget().getTargetPlayers() != null)) {
+ chooser = sa.getTarget().getTargetPlayers().get(0);
} else {
chooser = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), choose, sa).get(0);
}
@@ -744,7 +744,7 @@ public final class AbilityFactoryChangeZone {
final Card card = sa.getSourceCard();
final boolean defined = params.containsKey("Defined");
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
final ArrayList players = tgt.getTargetPlayers();
player = players.get(0);
@@ -926,8 +926,8 @@ public final class AbilityFactoryChangeZone {
*/
private static void changeHiddenOriginResolveAI(final AbilityFactory af, final SpellAbility sa, Player player) {
final HashMap params = af.getMapParams();
- final Target tgt = af.getAbTgt();
- final Card card = af.getHostCard();
+ final Target tgt = sa.getTarget();
+ final Card card = sa.getSourceCard();
final boolean defined = params.containsKey("Defined");
if (tgt != null) {
@@ -1233,7 +1233,7 @@ public final class AbilityFactoryChangeZone {
// prevent run-away activations - first time will always return true
boolean chance = r.nextFloat() <= Math.pow(.6667, sa.getRestrictions().getNumberTurnActivations());
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
if (!AbilityFactoryChangeZone.changeKnownPreferredTarget(af, sa, false)) {
return false;
@@ -1331,7 +1331,7 @@ public final class AbilityFactoryChangeZone {
final Card source = sa.getSourceCard();
final Zone origin = Zone.smartValueOf(params.get("Origin"));
final Zone destination = Zone.smartValueOf(params.get("Destination"));
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
final AbilitySub abSub = sa.getSubAbility();
String subAPI = "";
@@ -1536,7 +1536,7 @@ public final class AbilityFactoryChangeZone {
final Card source = sa.getSourceCard();
final Zone origin = Zone.smartValueOf(params.get("Origin"));
final Zone destination = Zone.smartValueOf(params.get("Destination"));
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
CardList list = AllZoneUtil.getCardsIn(origin);
list = list.getValidCards(tgt.getValidTgts(), AllZone.getComputerPlayer(), source);
@@ -1664,8 +1664,8 @@ public final class AbilityFactoryChangeZone {
final StringBuilder sbTargets = new StringBuilder();
ArrayList tgts;
- if (af.getAbTgt() != null) {
- tgts = af.getAbTgt().getTargetCards();
+ if (sa.getTarget() != null) {
+ tgts = sa.getTarget().getTargetCards();
} else {
// otherwise add self to list and go from there
tgts = new ArrayList();
@@ -1675,7 +1675,7 @@ public final class AbilityFactoryChangeZone {
}
for (final Card c : tgts) {
- sbTargets.append(" ").append(c.getName());
+ sbTargets.append(" ").append(c);
}
final String targetname = sbTargets.toString();
@@ -1776,7 +1776,7 @@ public final class AbilityFactoryChangeZone {
private static void changeKnownOriginResolve(final AbilityFactory af, final SpellAbility sa) {
ArrayList tgtCards;
final HashMap params = af.getMapParams();
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
final Player player = sa.getActivatingPlayer();
final Card hostCard = af.getHostCard();
@@ -2081,7 +2081,7 @@ public final class AbilityFactoryChangeZone {
// TODO improve restrictions on when the AI would want to use this
// spBounceAll has some AI we can compare to.
if (origin.equals(Zone.Hand) || origin.equals(Zone.Library)) {
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
if (AllZone.getHumanPlayer().getCardsIn(Zone.Hand).isEmpty()
|| !AllZone.getHumanPlayer().canBeTargetedBy(sa)) {
@@ -2114,7 +2114,7 @@ public final class AbilityFactoryChangeZone {
return false;
}
} else if (origin.equals(Zone.Graveyard)) {
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
if (AllZone.getHumanPlayer().getCardsIn(Zone.Graveyard).isEmpty()
|| !AllZone.getHumanPlayer().canBeTargetedBy(sa)) {
@@ -2247,7 +2247,7 @@ public final class AbilityFactoryChangeZone {
ArrayList tgtPlayers = null;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else if (params.containsKey("Defined")) {
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryChoose.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryChoose.java
index 15f8feb220a..72505dbe0fd 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryChoose.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryChoose.java
@@ -195,7 +195,7 @@ public final class AbilityFactoryChoose {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -291,7 +291,7 @@ public final class AbilityFactoryChoose {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -557,7 +557,7 @@ public final class AbilityFactoryChoose {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -636,7 +636,7 @@ public final class AbilityFactoryChoose {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -840,7 +840,7 @@ public final class AbilityFactoryChoose {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -919,7 +919,7 @@ public final class AbilityFactoryChoose {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -1089,7 +1089,7 @@ public final class AbilityFactoryChoose {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -1157,7 +1157,7 @@ public final class AbilityFactoryChoose {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -1327,7 +1327,7 @@ public final class AbilityFactoryChoose {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -1415,7 +1415,7 @@ public final class AbilityFactoryChoose {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -1632,7 +1632,7 @@ public final class AbilityFactoryChoose {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -1700,7 +1700,7 @@ public final class AbilityFactoryChoose {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryClash.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryClash.java
index 9f2e63dbf00..ca253c583d8 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryClash.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryClash.java
@@ -171,8 +171,7 @@ public final class AbilityFactoryClash {
}
private static boolean clashCanPlayAI(final SpellAbility sa) {
- final AbilityFactory af = sa.getAbilityFactory();
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
if (!AllZone.getHumanPlayer().canBeTargetedBy(sa)) {
return false;
@@ -578,7 +577,7 @@ public final class AbilityFactoryClash {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -624,7 +623,7 @@ public final class AbilityFactoryClash {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryCombat.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryCombat.java
index 0765d1846fb..19b14339389 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryCombat.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryCombat.java
@@ -435,7 +435,7 @@ public final class AbilityFactoryCombat {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -508,7 +508,7 @@ public final class AbilityFactoryCombat {
ArrayList tgtPlayers;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if ((tgt != null) && !params.containsKey("Defined")) {
tgtPlayers = tgt.getTargetPlayers();
} else {
@@ -651,7 +651,7 @@ public final class AbilityFactoryCombat {
ArrayList tgtCards;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
@@ -721,7 +721,7 @@ public final class AbilityFactoryCombat {
ArrayList tgtCards;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if ((tgt != null) && !params.containsKey("Defined")) {
tgtCards = tgt.getTargetCards();
} else {
@@ -866,7 +866,7 @@ public final class AbilityFactoryCombat {
ArrayList tgtCards;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
@@ -998,7 +998,7 @@ public final class AbilityFactoryCombat {
ArrayList tgtCards;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryCopy.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryCopy.java
index 54c68a63dbd..4fa97faef90 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryCopy.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryCopy.java
@@ -190,7 +190,7 @@ public final class AbilityFactoryCopy {
ArrayList tgtCards;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
@@ -349,7 +349,7 @@ public final class AbilityFactoryCopy {
ArrayList tgtCards;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
@@ -617,7 +617,7 @@ public final class AbilityFactoryCopy {
ArrayList tgtSpells;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtSpells = tgt.getTargetSAs();
} else {
@@ -713,7 +713,7 @@ public final class AbilityFactoryCopy {
ArrayList tgtSpells;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtSpells = tgt.getTargetSAs();
} else {
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryPermanentState.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryPermanentState.java
index 3e13b9dd2b3..5a1d5b501bc 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactoryPermanentState.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryPermanentState.java
@@ -193,7 +193,7 @@ public class AbilityFactoryPermanentState {
sb.append(params.get("UntapType")).append("s");
} else {
ArrayList tgtCards;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
@@ -321,7 +321,7 @@ public class AbilityFactoryPermanentState {
*/
private static boolean untapPlayDrawbackAI(final AbilityFactory af, final SpellAbility sa) {
// AI cannot use this properly until he can use SAs during Humans turn
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
boolean randomReturn = true;
@@ -555,7 +555,7 @@ public class AbilityFactoryPermanentState {
private static void untapResolve(final AbilityFactory af, final SpellAbility sa) {
final HashMap params = af.getMapParams();
final Card card = sa.getSourceCard();
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
ArrayList tgtCards = null;
if (params.containsKey("UntapUpTo")) {
@@ -752,7 +752,7 @@ public class AbilityFactoryPermanentState {
sb.append("Tap ");
ArrayList tgtCards;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
@@ -792,7 +792,7 @@ public class AbilityFactoryPermanentState {
// AI cannot use this properly until he can use SAs during Humans turn
final HashMap params = af.getMapParams();
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
final Card source = sa.getSourceCard();
final Random r = MyRandom.getRandom();
@@ -891,7 +891,7 @@ public class AbilityFactoryPermanentState {
*/
private static boolean tapPlayDrawbackAI(final AbilityFactory af, final SpellAbility sa) {
// AI cannot use this properly until he can use SAs during Humans turn
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
final Card source = sa.getSourceCard();
boolean randomReturn = true;
@@ -1125,7 +1125,7 @@ public class AbilityFactoryPermanentState {
final Card card = sa.getSourceCard();
ArrayList tgtCards;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
@@ -1286,7 +1286,7 @@ public class AbilityFactoryPermanentState {
valid = params.get("ValidCards");
}
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else if (params.containsKey("Defined")) {
@@ -1506,7 +1506,7 @@ public class AbilityFactoryPermanentState {
ArrayList tgtPlayers = null;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else if (params.containsKey("Defined")) {
@@ -1671,7 +1671,7 @@ public class AbilityFactoryPermanentState {
CardList validTappables = AbilityFactoryPermanentState.getTapAllTargets(valid, source);
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgt.resetTargets();
@@ -1861,7 +1861,7 @@ public class AbilityFactoryPermanentState {
sb.append("Tap or untap ");
ArrayList tgtCards;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
@@ -1901,7 +1901,7 @@ public class AbilityFactoryPermanentState {
// AI cannot use this properly until he can use SAs during Humans turn
final HashMap params = af.getMapParams();
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
final Card source = sa.getSourceCard();
final Random r = MyRandom.getRandom();
@@ -1990,7 +1990,7 @@ public class AbilityFactoryPermanentState {
*/
private static boolean tapOrUntapPlayDrawbackAI(final AbilityFactory af, final SpellAbility sa) {
// AI cannot use this properly until he can use SAs during Humans turn
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
final Card source = sa.getSourceCard();
boolean randomReturn = true;
@@ -2194,7 +2194,7 @@ public class AbilityFactoryPermanentState {
}
ArrayList tgtCards;
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
@@ -2311,7 +2311,7 @@ public class AbilityFactoryPermanentState {
*/
private static boolean phasesPlayDrawbackAI(final AbilityFactory af, final SpellAbility sa) {
// AI cannot use this properly until he can use SAs during Humans turn
- final Target tgt = af.getAbTgt();
+ final Target tgt = sa.getTarget();
boolean randomReturn = true;
diff --git a/src/main/java/forge/card/cardfactory/AbstractCardFactory.java b/src/main/java/forge/card/cardfactory/AbstractCardFactory.java
index 822f61e6625..dd425246532 100644
--- a/src/main/java/forge/card/cardfactory/AbstractCardFactory.java
+++ b/src/main/java/forge/card/cardfactory/AbstractCardFactory.java
@@ -43,6 +43,7 @@ import forge.Counters;
import forge.GameActionUtil;
import forge.Player;
import forge.PlayerZone;
+import forge.card.abilityfactory.AbilityFactory;
import forge.card.cost.Cost;
import forge.card.spellability.Ability;
import forge.card.spellability.AbilityActivated;
@@ -264,6 +265,17 @@ public abstract class AbstractCardFactory implements CardFactoryInterface {
c.setCopiedSpell(true);
final SpellAbility copySA = sa.copy();
+ if (sa.getTarget() != null) {
+ Target target = new Target(sa.getTarget());
+ target.setSourceCard(c);
+ copySA.setTarget(target);
+ /*if (copySA.getAbilityFactory() != null) {
+ AbilityFactory af = new AbilityFactory(sa.getAbilityFactory());
+ af.setAbTgt(target);
+ af.setHostCard(source);
+ copySA.setAbilityFactory(af);
+ }*/
+ }
copySA.setSourceCard(c);
if (bCopyDetails) {
diff --git a/src/main/java/forge/card/spellability/Target.java b/src/main/java/forge/card/spellability/Target.java
index eebb31270ac..4a2fc506ca0 100644
--- a/src/main/java/forge/card/spellability/Target.java
+++ b/src/main/java/forge/card/spellability/Target.java
@@ -44,6 +44,29 @@ public class Target {
private boolean uniqueTargets = false;
private boolean singleZone = false;
private TargetChoices choice = null;
+
+ /**
+ *
+ * getSourceCard.
+ *
+ *
+ * @return a Card object.
+ */
+ public final Card getSourceCard() {
+ return this.srcCard;
+ }
+
+ /**
+ *
+ * setSourceCard.
+ *
+ *
+ * @param source
+ * a Card object.
+ */
+ public final void setSourceCard(final Card source) {
+ this.srcCard = source;
+ }
/**
*
@@ -132,6 +155,14 @@ public class Target {
private String minTargets;
private String maxTargets;
+
+ public final String getMinTargets() {
+ return this.minTargets;
+ }
+
+ public final String getMaxTargets() {
+ return this.maxTargets;
+ }
/**
*
@@ -396,6 +427,25 @@ public class Target {
public final void resetTargets() {
this.choice = null;
}
+
+ /**
+ *
+ * Constructor for Target.
+ *
+ *
+ * @param target
+ */
+ public Target(final Target target) {
+
+ this.tgtValid = true;
+ this.srcCard = target.getSourceCard();
+ this.vtSelection = target.getVTSelection();
+ this.validTgts = target.getValidTgts();
+ this.minTargets = target.getMinTargets();
+ this.maxTargets = target.getMaxTargets();
+ this.tgtZone = target.getZone();
+ this.targetSpellAbilityType = target.getTargetSpellAbilityType();
+ }
/**
*
@@ -690,4 +740,21 @@ public class Target {
public final void setSingleZone(final boolean single) {
this.singleZone = single;
}
+
+ /**
+ *
+ * copy.
+ *
+ *
+ * @return a {@link forge.card.spellability.Target} object.
+ */
+ public Target copy() {
+ Target clone = null;
+ try {
+ clone = (Target) this.clone();
+ } catch (final CloneNotSupportedException e) {
+ System.err.println(e);
+ }
+ return clone;
+ }
}