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; + } }