diff --git a/src/main/java/forge/CardUtil.java b/src/main/java/forge/CardUtil.java index a42c365f26f..56518ab7801 100644 --- a/src/main/java/forge/CardUtil.java +++ b/src/main/java/forge/CardUtil.java @@ -926,7 +926,7 @@ public final class CardUtil { * a {@link java.util.ArrayList} object. * @return a {@link java.util.ArrayList} object. */ - public static List getReflectableManaColors(final SpellAbility abMana, final Map params, + public static List getReflectableManaColors(final SpellAbility abMana, final SpellAbility sa, List colors, final List parents) { // Here's the problem with reflectable Mana. If more than one is out, // they need to Reflect each other, @@ -938,12 +938,12 @@ public final class CardUtil { parents.add(card); } - final String colorOrType = params.get("ColorOrType"); // currently Color + final String colorOrType = sa.getParam("ColorOrType"); // currently Color // or // Type, Type is colors // + colorless - final String validCard = params.get("Valid"); - final String reflectProperty = params.get("ReflectProperty"); // Produce + final String validCard = sa.getParam("Valid"); + final String reflectProperty = sa.getParam("ReflectProperty"); // Produce // (Reflecting Pool) or Is (Meteor Crater) int maxChoices = 5; // Color is the default colorOrType @@ -1021,7 +1021,7 @@ public final class CardUtil { break; } - colors = CardUtil.getReflectableManaColors(ab, params, colors, parents); + colors = CardUtil.getReflectableManaColors(ab, sa, colors, parents); } } return colors; diff --git a/src/main/java/forge/GameAction.java b/src/main/java/forge/GameAction.java index 867338e73bf..430fccc6ec8 100644 --- a/src/main/java/forge/GameAction.java +++ b/src/main/java/forge/GameAction.java @@ -1957,8 +1957,7 @@ public class GameAction { public final void playSpellAbility(SpellAbility sa) { sa.setActivatingPlayer(Singletons.getControl().getPlayer()); - AbilityFactory af = sa.getAbilityFactory(); - if (af != null && af.getAPI() == ApiType.Charm && !sa.isWrapper()) { + if (sa.getApi() == ApiType.Charm && !sa.isWrapper()) { CharmEffect.makeChoices(sa); } diff --git a/src/main/java/forge/GameActionUtil.java b/src/main/java/forge/GameActionUtil.java index 2bd401fa5b5..7a4b7aa4f9f 100644 --- a/src/main/java/forge/GameActionUtil.java +++ b/src/main/java/forge/GameActionUtil.java @@ -1493,7 +1493,7 @@ public final class GameActionUtil { allSAs.add(sa); Card source = sa.getSourceCard(); - if (!sa.isSpell() || !source.isType("Arcane") || sa.getAbilityFactory() == null) { + if (!sa.isSpell() || !source.isType("Arcane") || sa.getApi() == null) { return newSAs; } diff --git a/src/main/java/forge/StaticEffects.java b/src/main/java/forge/StaticEffects.java index 7717b7c303b..aaeaf44d739 100644 --- a/src/main/java/forge/StaticEffects.java +++ b/src/main/java/forge/StaticEffects.java @@ -24,7 +24,6 @@ import java.util.List; import com.esotericsoftware.minlog.Log; -import forge.card.cardfactory.CardFactoryUtil; import forge.card.replacement.ReplacementEffect; import forge.card.spellability.SpellAbility; import forge.card.staticability.StaticAbility; diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactory.java b/src/main/java/forge/card/abilityfactory/AbilityFactory.java index 10ec9d8ad74..093f895bdf9 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactory.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactory.java @@ -67,27 +67,6 @@ public class 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.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. @@ -129,78 +108,10 @@ public class AbilityFactory { private boolean isSp = false; private boolean isDb = false; - /** - *

- * isAbility. - *

- * - * @return a boolean. - */ - public final boolean isAbility() { - return this.isAb; - } - - /** - *

- * isSpell. - *

- * - * @return a boolean. - */ - public final boolean isSpell() { - return this.isSp; - } - - /** - *

- * isDrawback. - *

- * - * @return a boolean. - */ - public final boolean isDrawback() { - return this.isDb; - } - - private Cost abCost = null; - - /** - *

- * Getter for the field abCost. - *

- * - * @return a {@link forge.card.cost.Cost} object. - */ - public final Cost getAbCost() { - return this.abCost; - } - private boolean isTargeted = false; private boolean hasValid = false; private Target abTgt = null; - /** - *

- * isTargeted. - *

- * - * @return a boolean. - */ - public final boolean isTargeted() { - return this.isTargeted; - } - - /** - *

- * hasValid. - *

- * - * @return a boolean. - */ - public final boolean hasValid() { - return this.hasValid; - } - /** *

* Getter for the field abTgt. @@ -213,18 +124,6 @@ public class AbilityFactory { } - /** - *

- * isCurse. - *

- * - * @return a boolean. - */ - public final boolean isCurse() { - return this.mapParams.containsKey("IsCurse"); - } - - private ApiType api = null; /** @@ -302,11 +201,12 @@ public class AbilityFactory { throw new RuntimeException("AbilityFactory : getAbility -- no API in " + hostCard.getName()); } + Cost abCost = null; if (!this.isDb) { if (!this.mapParams.containsKey("Cost")) { throw new RuntimeException("AbilityFactory : getAbility -- no Cost in " + hostCard.getName()); } - this.abCost = new Cost(hostCard, this.mapParams.get("Cost"), this.isAb); + abCost = new Cost(hostCard, this.mapParams.get("Cost"), this.isAb); } @@ -399,11 +299,11 @@ public class AbilityFactory { SpellEffect se = api.getSpellEffect(); if (this.isAb) { - spellAbility = new CommonAbility(this.getHostCard(), this.getAbCost(), this.getAbTgt(), this.getMapParams(), se, ai); + spellAbility = new CommonAbility(api, this.getHostCard(), abCost, this.getAbTgt(), this.getMapParams(), se, ai); } else if (this.isSp) { - spellAbility = new CommonSpell(this.getHostCard(), this.getAbCost(), this.getAbTgt(), this.getMapParams(), se, ai); + spellAbility = new CommonSpell(api, this.getHostCard(), abCost, this.getAbTgt(), this.getMapParams(), se, ai); } else if (this.isDb) { - spellAbility = new CommonDrawback(this.getHostCard(), this.getAbTgt(), this.getMapParams(), se, ai); + spellAbility = new CommonDrawback(api, this.getHostCard(), this.getAbTgt(), this.getMapParams(), se, ai); } @@ -424,7 +324,7 @@ public class AbilityFactory { // ********************************************* // set universal properties of the SpellAbility - spellAbility.setAbilityFactory(this); + if (this.mapParams.containsKey("References")) { for (String svar : this.mapParams.get("References").split(",")) { @@ -448,7 +348,7 @@ public class AbilityFactory { if (this.mapParams.containsKey("CostDesc")) { sb.append(this.mapParams.get("CostDesc")).append(" "); } else { - sb.append(this.abCost.toString()); + sb.append(abCost.toString()); } } @@ -541,12 +441,12 @@ public class AbilityFactory { return abSub; } - public static ArrayList getProtectionList(final Map params) { + public static ArrayList getProtectionList(final SpellAbility sa) { final ArrayList gains = new ArrayList(); - final String gainStr = params.get("Gains"); + final String gainStr = sa.getParam("Gains"); if (gainStr.equals("Choice")) { - String choices = params.get("Choices"); + String choices = sa.getParam("Choices"); // Replace AnyColor with the 5 colors if (choices.contains("AnyColor")) { @@ -749,8 +649,7 @@ public class AbilityFactory { if (saTargeting.getTarget() != null) { players.addAll(saTargeting.getTarget().getTargetPlayers()); } else { - players.addAll(AbilityFactory.getDefinedPlayers(card, saTargeting.getAbilityFactory() - .getMapParams().get("Defined"), saTargeting)); + players.addAll(AbilityFactory.getDefinedPlayers(card, saTargeting.getParam("Defined"), saTargeting)); } return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier; } @@ -760,8 +659,7 @@ public class AbilityFactory { if (saTargeting.getTarget() != null) { objects.addAll(saTargeting.getTarget().getTargets()); } else { - objects.addAll(AbilityFactory.getDefinedObjects(card, saTargeting.getAbilityFactory() - .getMapParams().get("Defined"), saTargeting)); + objects.addAll(AbilityFactory.getDefinedObjects(card, saTargeting.getParam("Defined"), saTargeting)); } return CardFactoryUtil.objectXCount(objects, calcX[1], card) * multiplier; } @@ -1398,7 +1296,7 @@ public class AbilityFactory { * @return a {@link java.util.ArrayList} object. * @since 1.0.15 */ - public static ArrayList predictThreatenedObjects(final Player aiPlayer, final AbilityFactory saviourAf) { + public static ArrayList predictThreatenedObjects(final Player aiPlayer, final SpellAbility sa) { final ArrayList objects = new ArrayList(); if (Singletons.getModel().getGame().getStack().size() == 0) { return objects; @@ -1406,7 +1304,7 @@ public class AbilityFactory { // check stack for something that will kill this final SpellAbility topStack = Singletons.getModel().getGame().getStack().peekAbility(); - objects.addAll(AbilityFactory.predictThreatenedObjects(aiPlayer, saviourAf, topStack)); + objects.addAll(AbilityFactory.predictThreatenedObjects(aiPlayer, sa, topStack)); return objects; } @@ -1423,34 +1321,28 @@ public class AbilityFactory { * @return a {@link java.util.ArrayList} object. * @since 1.0.15 */ - public static ArrayList predictThreatenedObjects(final Player aiPlayer, final AbilityFactory saviourAf, final SpellAbility topStack) { + public static ArrayList predictThreatenedObjects(final Player aiPlayer, final SpellAbility saviour, final SpellAbility topStack) { ArrayList objects = new ArrayList(); final ArrayList threatened = new ArrayList(); - ApiType saviourApi = null; - Map saviourParams = null; - if (saviourAf != null) { - saviourApi = saviourAf.getAPI(); - saviourParams = saviourAf.getMapParams(); - } + ApiType saviourApi = saviour.getApi(); if (topStack == null) { return objects; } final Card source = topStack.getSourceCard(); - final AbilityFactory topAf = topStack.getAbilityFactory(); + final ApiType threatApi = topStack.getApi(); // Can only Predict things from AFs - if (topAf != null) { + if (threatApi != null) { final Target tgt = topStack.getTarget(); - final Map threatParams = topAf.getMapParams(); if (tgt == null) { - if (threatParams.containsKey("Defined")) { - objects = AbilityFactory.getDefinedObjects(source, threatParams.get("Defined"), topStack); - } else if (threatParams.containsKey("ValidCards")) { + if (topStack.hasParam("Defined")) { + objects = AbilityFactory.getDefinedObjects(source, topStack.getParam("Defined"), topStack); + } else if (topStack.hasParam("ValidCards")) { List battleField = aiPlayer.getCardsIn(ZoneType.Battlefield); - List cards = CardLists.getValidCards(battleField, threatParams.get("ValidCards").split(","), source.getController(), source); + List cards = CardLists.getValidCards(battleField, topStack.getParam("ValidCards").split(","), source.getController(), source); for (Card card : cards) { objects.add(card); } @@ -1462,13 +1354,11 @@ public class AbilityFactory { // Determine if Defined Objects are "threatened" will be destroyed // due to this SA - final ApiType threatApi = topAf.getAPI(); - // Lethal Damage => prevent damage/regeneration/bounce/shroud if (threatApi == ApiType.DealDamage || threatApi == ApiType.DamageAll) { // If PredictDamage is >= Lethal Damage final int dmg = AbilityFactory.calculateAmount(topStack.getSourceCard(), - topAf.getMapParams().get("NumDmg"), topStack); + topStack.getParam("NumDmg"), topStack); for (final Object o : objects) { if (o instanceof Card) { final Card c = (Card) o; @@ -1489,9 +1379,9 @@ public class AbilityFactory { } // give Shroud to targeted creatures - if (saviourApi == ApiType.Pump && tgt == null && saviourParams.containsKey("KW") - && (saviourParams.get("KW").endsWith("Shroud") - || saviourParams.get("KW").endsWith("Hexproof"))) { + if (saviourApi == ApiType.Pump && tgt == null && saviour.hasParam("KW") + && (saviour.getParam("KW").endsWith("Shroud") + || saviour.getParam("KW").endsWith("Hexproof"))) { continue; } @@ -1520,7 +1410,7 @@ public class AbilityFactory { // Destroy => regeneration/bounce/shroud else if ((threatApi == ApiType.Destroy || threatApi == ApiType.DestroyAll) && (((saviourApi == ApiType.Regenerate || saviourApi == ApiType.RegenerateAll ) - && !threatParams.containsKey("NoRegen")) || saviourApi == ApiType.ChangeZone || saviourApi == ApiType.Pump)) { + && !topStack.hasParam("NoRegen")) || saviourApi == ApiType.ChangeZone || saviourApi == ApiType.Pump)) { for (final Object o : objects) { if (o instanceof Card) { final Card c = (Card) o; @@ -1535,9 +1425,9 @@ public class AbilityFactory { } // give Shroud to targeted creatures - if (saviourApi == ApiType.Pump && tgt == null && saviourParams.containsKey("KW") - && (saviourParams.get("KW").endsWith("Shroud") - || saviourParams.get("KW").endsWith("Hexproof"))) { + if (saviourApi == ApiType.Pump && tgt == null && saviour.hasParam("KW") + && (saviour.getParam("KW").endsWith("Shroud") + || saviour.getParam("KW").endsWith("Hexproof"))) { continue; } @@ -1558,15 +1448,14 @@ public class AbilityFactory { // Exiling => bounce/shroud else if ((threatApi == ApiType.ChangeZone || threatApi == ApiType.ChangeZoneAll) && (saviourApi == ApiType.ChangeZone || saviourApi == ApiType.Pump) - && threatParams.containsKey("Destination") - && threatParams.get("Destination").equals("Exile")) { + && topStack.hasParam("Destination") + && topStack.getParam("Destination").equals("Exile")) { for (final Object o : objects) { if (o instanceof Card) { final Card c = (Card) o; // give Shroud to targeted creatures - if (saviourApi == ApiType.Pump && tgt == null && saviourParams.containsKey("KW") - && (saviourParams.get("KW").endsWith("Shroud") - || saviourParams.get("KW").endsWith("Hexproof"))) { + if (saviourApi == ApiType.Pump && tgt == null && saviour.hasParam("KW") + && (saviour.getParam("KW").endsWith("Shroud") || saviour.getParam("KW").endsWith("Hexproof"))) { continue; } @@ -1582,7 +1471,7 @@ public class AbilityFactory { } } - threatened.addAll(AbilityFactory.predictThreatenedObjects(aiPlayer, saviourAf, topStack.getSubAbility())); + threatened.addAll(AbilityFactory.predictThreatenedObjects(aiPlayer, saviour, topStack.getSubAbility())); return threatened; } @@ -1596,32 +1485,32 @@ public class AbilityFactory { * @param af * a {@link forge.card.abilityfactory.AbilityFactory} object. */ - public static void handleRemembering(final SpellAbility sa, final AbilityFactory af) { - final Map params = af.getMapParams(); + public static void handleRemembering(final SpellAbility sa) { + Card host; - if (!params.containsKey("RememberTargets") && !params.containsKey("RememberToughness") - && !params.containsKey("RememberCostCards")) { + if (!sa.hasParam("RememberTargets") && !sa.hasParam("RememberToughness") + && !sa.hasParam("RememberCostCards")) { return; } host = sa.getSourceCard(); - if (params.containsKey("ForgetOtherTargets")) { + if (sa.hasParam("ForgetOtherTargets")) { host.clearRemembered(); } final Target tgt = sa.getTarget(); - if (params.containsKey("RememberTargets")) { + if (sa.hasParam("RememberTargets")) { final ArrayList tgts = (tgt == null) ? new ArrayList() : tgt.getTargets(); for (final Object o : tgts) { host.addRemembered(o); } } - if (params.containsKey("RememberCostCards")) { - if (params.get("Cost").contains("Exile")) { + if (sa.hasParam("RememberCostCards")) { + if (sa.getParam("Cost").contains("Exile")) { final List paidListExiled = sa.getPaidList("Exiled"); for (final Card exiledAsCost : paidListExiled) { host.addRemembered(exiledAsCost); @@ -1740,30 +1629,28 @@ public class AbilityFactory { */ public static void passUnlessCost(final SpellAbility sa, final boolean usedStack) { final Card source = sa.getSourceCard(); - final AbilityFactory af = sa.getAbilityFactory(); - if (af == null) { + final ApiType api = sa.getApi(); + if (api == null) { sa.resolve(); AbilityFactory.resolveSubAbilities(sa, usedStack); return; } - final Map params = af.getMapParams(); - // Nothing to do - if (params.get("UnlessCost") == null) { + if (sa.getParam("UnlessCost") == null) { sa.resolve(); AbilityFactory.resolveSubAbilities(sa, usedStack); return; } // The player who has the chance to cancel the ability - final String pays = params.containsKey("UnlessPayer") ? params.get("UnlessPayer") : "TargetedController"; + final String pays = sa.hasParam("UnlessPayer") ? sa.getParam("UnlessPayer") : "TargetedController"; final ArrayList payers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), pays, sa); // The cost - String unlessCost = params.get("UnlessCost").trim(); + String unlessCost = sa.getParam("UnlessCost").trim(); try { - String unlessVar = Integer.toString(AbilityFactory.calculateAmount(source, params.get("UnlessCost").replace(" ", ""), sa)); + String unlessVar = Integer.toString(AbilityFactory.calculateAmount(source, sa.getParam("UnlessCost").replace(" ", ""), sa)); unlessCost = unlessVar; } catch (final NumberFormatException n) { } //This try/catch method enables UnlessCost to parse any svar name @@ -1798,7 +1685,7 @@ public class AbilityFactory { @Override public void execute() { sa.resolve(); - if (params.containsKey("PowerSink")) { + if (sa.hasParam("PowerSink")) { GameActionUtil.doPowerSink(sa.getActivatingPlayer()); } AbilityFactory.resolveSubAbilities(sa, usedStack); @@ -1815,7 +1702,7 @@ public class AbilityFactory { if (ComputerUtil.canPayCost(ability, payer) && CostUtil.checkLifeCost(payer, cost, source, 4, sa) && CostUtil.checkDamageCost(payer, cost, source, 4) && (!source.getName().equals("Tyrannize") || payer.getCardsIn(ZoneType.Hand).size() > 2) - && (!params.containsKey("UnlessAI") || !params.get("UnlessAI").equals("Never")) + && (!sa.hasParam("UnlessAI") || !sa.getParam("UnlessAI").equals("Never")) && (!source.getName().equals("Breaking Point") || payer.getCreaturesInPlay().size() > 1)) { // AI was crashing because the blank ability used to pay costs // Didn't have any of the data on the original SA to pay dependant costs @@ -1842,7 +1729,7 @@ public class AbilityFactory { AbilityFactory.resolveSubAbilities(sa, usedStack); } else { sa.resolve(); - if (params.containsKey("PowerSink")) { + if (sa.hasParam("PowerSink")) { GameActionUtil.doPowerSink(payers.get(0)); } AbilityFactory.resolveSubAbilities(sa, usedStack); @@ -1865,8 +1752,8 @@ public class AbilityFactory { if (sa == null) { return; } - final AbilityFactory af = sa.getAbilityFactory(); - if (af == null) { + final ApiType api = sa.getApi(); + if (api == null) { sa.resolve(); if (sa.getSubAbility() != null) { resolve(sa.getSubAbility(), usedStack); diff --git a/src/main/java/forge/card/abilityfactory/CommonAbility.java b/src/main/java/forge/card/abilityfactory/CommonAbility.java index b8671df01af..d86d75e2cfb 100644 --- a/src/main/java/forge/card/abilityfactory/CommonAbility.java +++ b/src/main/java/forge/card/abilityfactory/CommonAbility.java @@ -15,14 +15,14 @@ import forge.card.spellability.Target; public class CommonAbility extends AbilityActivated { private final SpellEffect effect; - private final Map params; private final SpellAiLogic ai; private static final long serialVersionUID = -4183793555528531978L; - public CommonAbility(Card sourceCard, Cost abCost, Target tgt, Map params0, SpellEffect effect0, SpellAiLogic ai0) { + public CommonAbility(ApiType api0, Card sourceCard, Cost abCost, Target tgt, Map params0, SpellEffect effect0, SpellAiLogic ai0) { super(sourceCard, abCost, tgt); params = params0; + api = api0; effect = effect0; ai = ai0; @@ -46,7 +46,7 @@ public class CommonAbility extends AbilityActivated { @Override public AbilityActivated getCopy() { Target tgt = getTarget() == null ? null : new Target(getTarget()); - AbilityActivated res = new CommonAbility(getSourceCard(), getPayCosts(), tgt, params, effect, ai); + AbilityActivated res = new CommonAbility(api, getSourceCard(), getPayCosts(), tgt, params, effect, ai); CardFactoryUtil.copySpellAbility(this, res); return res; } @@ -56,16 +56,16 @@ public class CommonAbility extends AbilityActivated { */ @Override public void resolve() { - effect.resolve(params, this); + effect.resolve(this); } @Override public boolean canPlayAI() { - return ai.canPlayAIWithSubs(getActivatingPlayer(), params, this); + return ai.canPlayAIWithSubs(getActivatingPlayer(), this); } @Override public boolean doTrigger(final boolean mandatory) { - return ai.doTriggerAI(this.getActivatingPlayer(), params, this, mandatory); + return ai.doTriggerAI(this.getActivatingPlayer(), this, mandatory); } } \ No newline at end of file diff --git a/src/main/java/forge/card/abilityfactory/CommonDrawback.java b/src/main/java/forge/card/abilityfactory/CommonDrawback.java index bea177a1e78..bb2bf1c5c08 100644 --- a/src/main/java/forge/card/abilityfactory/CommonDrawback.java +++ b/src/main/java/forge/card/abilityfactory/CommonDrawback.java @@ -29,11 +29,11 @@ import forge.card.spellability.Target; public class CommonDrawback extends AbilitySub { private final SpellEffect effect; private final SpellAiLogic ai; - private final Map params; private static final long serialVersionUID = 6631124959690157874L; - public CommonDrawback(final Card ca, final Target t, Map params0, SpellEffect effect0, SpellAiLogic ai0) { + public CommonDrawback(ApiType api0, final Card ca, final Target t, Map params0, SpellEffect effect0, SpellAiLogic ai0) { super(ca, t); + api = api0; params = params0; ai = ai0; effect = effect0; @@ -44,7 +44,7 @@ public class CommonDrawback extends AbilitySub { @Override public AbilitySub getCopy() { Target t = getTarget() == null ? null : new Target(getTarget()); - AbilitySub res = new CommonDrawback(getSourceCard(),t, params, effect, ai); + AbilitySub res = new CommonDrawback(api, getSourceCard(),t, params, effect, ai); CardFactoryUtil.copySpellAbility(this, res); return res; } @@ -58,17 +58,17 @@ public class CommonDrawback extends AbilitySub { @Override public boolean canPlayAI() { - return ai.canPlayAIWithSubs(getActivatingPlayer(), params, this); + return ai.canPlayAIWithSubs(getActivatingPlayer(), this); } @Override public void resolve() { - effect.resolve(params, this); + effect.resolve(this); } @Override public boolean chkAIDrawback() { - if (!ai.chkAIDrawback(params, this, getActivatingPlayer())) { + if (!ai.chkAIDrawback(this, getActivatingPlayer())) { return false; } final AbilitySub subAb = getSubAbility(); @@ -80,7 +80,7 @@ public class CommonDrawback extends AbilitySub { @Override public boolean doTrigger(final boolean mandatory) { - return ai.doTriggerAI(getActivatingPlayer(), params, this, mandatory); + return ai.doTriggerAI(getActivatingPlayer(), this, mandatory); } } diff --git a/src/main/java/forge/card/abilityfactory/CommonSpell.java b/src/main/java/forge/card/abilityfactory/CommonSpell.java index 0a3fb541bf8..39d62aa9913 100644 --- a/src/main/java/forge/card/abilityfactory/CommonSpell.java +++ b/src/main/java/forge/card/abilityfactory/CommonSpell.java @@ -12,12 +12,12 @@ import forge.card.spellability.Target; public class CommonSpell extends Spell { private static final long serialVersionUID = -6741797239508483250L; private final SpellEffect effect; - private final Map params; private final SpellAiLogic ai; - public CommonSpell(Card sourceCard, Cost abCost, Target tgt, Map params0, SpellEffect effect0, SpellAiLogic ai0) { + public CommonSpell(ApiType api0, Card sourceCard, Cost abCost, Target tgt, Map params0, SpellEffect effect0, SpellAiLogic ai0) { super(sourceCard, abCost, tgt); params = params0; + api = api0; effect = effect0; ai = ai0; @@ -36,21 +36,21 @@ public class CommonSpell extends Spell { @Override public boolean canPlayAI() { - return ai.canPlayAIWithSubs(getActivatingPlayer(), params, this) && super.canPlayAI(); + return ai.canPlayAIWithSubs(getActivatingPlayer(), this) && super.canPlayAI(); } @Override public void resolve() { - effect.resolve(params, this); + effect.resolve(this); } @Override public boolean canPlayFromEffectAI(final boolean mandatory, final boolean withOutManaCost) { boolean chance = false; if (withOutManaCost) { - chance = ai.doTriggerNoCostWithSubs(this.getActivatingPlayer(), params, this, mandatory); + chance = ai.doTriggerNoCostWithSubs(this.getActivatingPlayer(), this, mandatory); } - chance = ai.doTriggerAI(this.getActivatingPlayer(), params, this, mandatory); + chance = ai.doTriggerAI(this.getActivatingPlayer(), this, mandatory); return chance; } } \ No newline at end of file diff --git a/src/main/java/forge/card/abilityfactory/SpellAiLogic.java b/src/main/java/forge/card/abilityfactory/SpellAiLogic.java index 0143534fa15..d9a3fec609f 100644 --- a/src/main/java/forge/card/abilityfactory/SpellAiLogic.java +++ b/src/main/java/forge/card/abilityfactory/SpellAiLogic.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory; -import java.util.Map; import forge.card.spellability.AbilitySub; import forge.card.spellability.SpellAbility; @@ -9,27 +8,27 @@ import forge.game.player.Player; public abstract class SpellAiLogic { - public final boolean canPlayAIWithSubs(final Player aiPlayer, final Map params, final SpellAbility sa) { + public final boolean canPlayAIWithSubs(final Player aiPlayer, final SpellAbility sa) { final AbilitySub subAb = sa.getSubAbility(); if (subAb != null && !subAb.chkAIDrawback()) { return false; } - return canPlayAI(aiPlayer, params, sa); + return canPlayAI(aiPlayer, sa); } - protected abstract boolean canPlayAI(final Player aiPlayer, final Map params, final SpellAbility sa); + protected abstract boolean canPlayAI(final Player aiPlayer, final SpellAbility sa); - public final boolean doTriggerAI(final Player aiPlayer, final Map params, final SpellAbility sa, final boolean mandatory){ + public final boolean doTriggerAI(final Player aiPlayer, final SpellAbility sa, final boolean mandatory){ if (!ComputerUtil.canPayCost(sa, aiPlayer) && !mandatory) { return false; } - return doTriggerNoCostWithSubs(aiPlayer, params, sa, mandatory); + return doTriggerNoCostWithSubs(aiPlayer, sa, mandatory); } - public final boolean doTriggerNoCostWithSubs(final Player aiPlayer, final Map params, final SpellAbility sa, final boolean mandatory) + public final boolean doTriggerNoCostWithSubs(final Player aiPlayer, final SpellAbility sa, final boolean mandatory) { - if (!doTriggerAINoCost(aiPlayer, params, sa, mandatory)) { + if (!doTriggerAINoCost(aiPlayer, sa, mandatory)) { return false; } final AbilitySub subAb = sa.getSubAbility(); @@ -39,11 +38,11 @@ public abstract class SpellAiLogic { return true; } - protected boolean doTriggerAINoCost(final Player aiPlayer, final Map params, final SpellAbility sa, final boolean mandatory) { - return canPlayAI(aiPlayer, params, sa) || mandatory; + protected boolean doTriggerAINoCost(final Player aiPlayer, final SpellAbility sa, final boolean mandatory) { + return canPlayAI(aiPlayer, sa) || mandatory; } - public boolean chkAIDrawback(final Map params, final SpellAbility sa, final Player aiPlayer) { + public boolean chkAIDrawback(final SpellAbility sa, final Player aiPlayer) { return true; } } \ No newline at end of file diff --git a/src/main/java/forge/card/abilityfactory/SpellEffect.java b/src/main/java/forge/card/abilityfactory/SpellEffect.java index 7e87fb04c66..d006582002b 100644 --- a/src/main/java/forge/card/abilityfactory/SpellEffect.java +++ b/src/main/java/forge/card/abilityfactory/SpellEffect.java @@ -24,8 +24,9 @@ import forge.game.player.Player; public abstract class SpellEffect { - public abstract void resolve(final Map params, final SpellAbility sa); - protected String getStackDescription(final Map params, final SpellAbility sa) { + public abstract void resolve(final SpellAbility sa); + + protected String getStackDescription(final SpellAbility sa) { // Unless overriden, let the spell description also be the stack description return sa.getDescription(); } @@ -66,7 +67,7 @@ import forge.game.player.Player; } else if ( spellDesc != null ) { sb.append( spellDesc.replace("CARDNAME", sa.getSourceCard().getName()) ); } else - sb.append(this.getStackDescription(params, sa)); + sb.append(this.getStackDescription(sa)); // This inlcudes all subAbilities @@ -77,21 +78,21 @@ import forge.game.player.Player; return sb.toString(); } - protected List getTargetCards(SpellAbility sa, final Map params) { + protected List getTargetCards(SpellAbility sa) { final Target tgt = sa.getTarget(); - return tgt != null ? tgt.getTargetCards() : AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa); + return tgt != null ? tgt.getTargetCards() : AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa); } - protected List getTargetPlayers(SpellAbility sa, final Map params) { - return getTargetPlayers(sa, params, false, true); + protected List getTargetPlayers(SpellAbility sa) { + return getTargetPlayers(sa, false, true); } - protected List getTargetPlayersEmptyAsDefault(SpellAbility sa, final Map params) { - return getTargetPlayers(sa, params, true, true); + protected List getTargetPlayersEmptyAsDefault(SpellAbility sa) { + return getTargetPlayers(sa, true, true); } - protected List getDefinedPlayersBeforeTargetOnes(SpellAbility sa, final Map params) { - return getTargetPlayers(sa, params, false, false); + protected List getDefinedPlayersBeforeTargetOnes(SpellAbility sa) { + return getTargetPlayers(sa, false, false); } // Each AF used its own preference in choosing target players: @@ -99,9 +100,9 @@ import forge.game.player.Player; // Some wanted empty list when params["Defined"] was not set - @see wantEmptyAsDefault // Poor me had to gather it all in a single place private final static List emptyPlayerList = Collections.unmodifiableList(new ArrayList()); - private List getTargetPlayers(SpellAbility sa, final Map params, final boolean wantEmptyAsDefault, final boolean targetIsPreferred) { + private List getTargetPlayers(SpellAbility sa, final boolean wantEmptyAsDefault, final boolean targetIsPreferred) { final Target tgt = sa.getTarget(); - final String defined = params.get("Defined"); + final String defined = sa.getParam("Defined"); if ( tgt != null && ( targetIsPreferred || ( StringUtils.isEmpty(defined) && !wantEmptyAsDefault ) ) ) return tgt.getTargetPlayers(); if ( StringUtils.isEmpty(defined) && wantEmptyAsDefault ) @@ -109,14 +110,14 @@ import forge.game.player.Player; return AbilityFactory.getDefinedPlayers(sa.getSourceCard(), defined, sa); } - protected List getTargetSpellAbilities(SpellAbility sa, final Map params) { + protected List getTargetSpellAbilities(SpellAbility sa) { final Target tgt = sa.getTarget(); - return tgt != null ? tgt.getTargetSAs() : AbilityFactory.getDefinedSpellAbilities(sa.getSourceCard(), params.get("Defined"), sa); + return tgt != null ? tgt.getTargetSAs() : AbilityFactory.getDefinedSpellAbilities(sa.getSourceCard(), sa.getParam("Defined"), sa); } - protected List getTargetObjects(SpellAbility sa, final Map params) { + protected List getTargetObjects(SpellAbility sa) { final Target tgt = sa.getTarget(); - return tgt != null ? tgt.getTargets() : AbilityFactory.getDefinedObjects(sa.getSourceCard(), params.get("Defined"), sa); + return tgt != null ? tgt.getTargets() : AbilityFactory.getDefinedObjects(sa.getSourceCard(), sa.getParam("Defined"), sa); } diff --git a/src/main/java/forge/card/abilityfactory/ai/AddTurnAi.java b/src/main/java/forge/card/abilityfactory/ai/AddTurnAi.java index d0932826bbb..cc6808e34bb 100644 --- a/src/main/java/forge/card/abilityfactory/ai/AddTurnAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/AddTurnAi.java @@ -18,7 +18,6 @@ package forge.card.abilityfactory.ai; import java.util.ArrayList; -import java.util.Map; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; @@ -38,7 +37,7 @@ public class AddTurnAi extends SpellAiLogic { @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final Player opp = ai.getOpponent(); final Target tgt = sa.getTarget(); @@ -52,8 +51,7 @@ public class AddTurnAi extends SpellAiLogic { return false; } } else { - final ArrayList tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), - params.get("Defined"), sa); + final ArrayList tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), sa.getParam("Defined"), sa); for (final Player p : tgtPlayers) { if (p.isHuman() && !mandatory) { return false; @@ -66,7 +64,7 @@ public class AddTurnAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } @@ -74,8 +72,8 @@ public class AddTurnAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player aiPlayer, Map params, SpellAbility sa) { - return doTriggerAINoCost(aiPlayer, params, sa, false); + protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { + return doTriggerAINoCost(aiPlayer, sa, false); } } \ No newline at end of file diff --git a/src/main/java/forge/card/abilityfactory/ai/AlwaysPlayAi.java b/src/main/java/forge/card/abilityfactory/ai/AlwaysPlayAi.java index 6fd430c2298..827cff285a3 100644 --- a/src/main/java/forge/card/abilityfactory/ai/AlwaysPlayAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/AlwaysPlayAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import forge.card.abilityfactory.SpellAiLogic; import forge.card.spellability.SpellAbility; @@ -11,7 +10,7 @@ public class AlwaysPlayAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player aiPlayer, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { return true; } @@ -20,7 +19,7 @@ public class AlwaysPlayAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#chkAIDrawback(java.util.Map, forge.card.spellability.SpellAbility, forge.game.player.Player) */ @Override - public boolean chkAIDrawback(Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } } \ No newline at end of file diff --git a/src/main/java/forge/card/abilityfactory/ai/AnimateAi.java b/src/main/java/forge/card/abilityfactory/ai/AnimateAi.java index b89dfd0e917..1f2603ca4fb 100644 --- a/src/main/java/forge/card/abilityfactory/ai/AnimateAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/AnimateAi.java @@ -1,8 +1,6 @@ package forge.card.abilityfactory.ai; import java.util.ArrayList; -import java.util.Map; - import com.google.common.collect.Iterables; import forge.Card; @@ -31,7 +29,7 @@ public class AnimateAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player aiPlayer, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { final Target tgt = sa.getTarget(); final Card source = sa.getSourceCard(); @@ -45,7 +43,7 @@ public class AnimateAi extends SpellAiLogic { if (!Singletons.getModel().getGame().getPhaseHandler().is(PhaseType.COMBAT_BEGIN) && Singletons.getModel().getGame().getPhaseHandler().isPlayerTurn(aiPlayer) && !AbilityFactory.isSorcerySpeed(sa) - && !params.containsKey("ActivationPhases") && !params.containsKey("Permanent")) { + && !sa.hasParam("ActivationPhases") && !sa.hasParam("Permanent")) { return false; } @@ -67,26 +65,26 @@ public class AnimateAi extends SpellAiLogic { } // don't activate during main2 unless this effect is permanent - if (Singletons.getModel().getGame().getPhaseHandler().is(PhaseType.MAIN2) && !params.containsKey("Permanent")) { + if (Singletons.getModel().getGame().getPhaseHandler().is(PhaseType.MAIN2) && !sa.hasParam("Permanent")) { return false; } if (null == tgt) { - final ArrayList defined = AbilityFactory.getDefinedCards(source, params.get("Defined"), sa); + final ArrayList defined = AbilityFactory.getDefinedCards(source, sa.getParam("Defined"), sa); boolean bFlag = false; for (final Card c : defined) { bFlag |= (!c.isCreature() && !c.isTapped() && !(c.getTurnInZone() == Singletons.getModel().getGame().getPhaseHandler().getTurn())); // for creatures that could be improved (like Figure of Destiny) - if (c.isCreature() && (params.containsKey("Permanent") || (!c.isTapped() && !c.isSick()))) { + if (c.isCreature() && (sa.hasParam("Permanent") || (!c.isTapped() && !c.isSick()))) { int power = -5; - if (params.containsKey("Power")) { - power = AbilityFactory.calculateAmount(source, params.get("Power"), sa); + if (sa.hasParam("Power")) { + power = AbilityFactory.calculateAmount(source, sa.getParam("Power"), sa); } int toughness = -5; - if (params.containsKey("Toughness")) { - toughness = AbilityFactory.calculateAmount(source, params.get("Toughness"), sa); + if (sa.hasParam("Toughness")) { + toughness = AbilityFactory.calculateAmount(source, sa.getParam("Toughness"), sa); } if ((power + toughness) > (c.getCurrentPower() + c.getCurrentToughness())) { bFlag = true; @@ -101,7 +99,7 @@ public class AnimateAi extends SpellAiLogic { } } else { tgt.resetTargets(); - if (!animateTgtAI(params, sa)) { + if (!animateTgtAI(sa)) { return false; } } @@ -113,10 +111,10 @@ public class AnimateAi extends SpellAiLogic { @Override - public boolean chkAIDrawback(Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { if (sa.getTarget() != null) { sa.getTarget().resetTargets(); - if (!animateTgtAI(params, sa)) { + if (!animateTgtAI(sa)) { return false; } } @@ -128,19 +126,19 @@ public class AnimateAi extends SpellAiLogic { *

* animateTriggerAI. *

- * - * @param af - * a {@link forge.card.abilityfactory.AbilityFactory} object. * @param sa * a {@link forge.card.spellability.SpellAbility} object. * @param mandatory * a boolean. + * @param af + * a {@link forge.card.abilityfactory.AbilityFactory} object. + * * @return a boolean. */ @Override - protected boolean doTriggerAINoCost(Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { - if (sa.getTarget() != null && !animateTgtAI(params, sa) && !mandatory) { + if (sa.getTarget() != null && !animateTgtAI(sa) && !mandatory) { return false; } @@ -165,7 +163,7 @@ public class AnimateAi extends SpellAiLogic { * a {@link forge.card.spellability.SpellAbility} object. * @return a boolean. */ - private boolean animateTgtAI(final Map params, final SpellAbility sa) { + private boolean animateTgtAI(final SpellAbility sa) { // This is reasonable for now. Kamahl, Fist of Krosa and a sorcery or // two are the only things // that animate a target. Those can just use SVar:RemAIDeck:True until diff --git a/src/main/java/forge/card/abilityfactory/ai/AnimateAllAi.java b/src/main/java/forge/card/abilityfactory/ai/AnimateAllAi.java index 6a2544b4f29..0e5e738cebc 100644 --- a/src/main/java/forge/card/abilityfactory/ai/AnimateAllAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/AnimateAllAi.java @@ -7,12 +7,12 @@ import forge.game.player.Player; public class AnimateAllAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player aiPlayer, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { return false; } // end animateAllCanPlayAI() @Override - protected boolean doTriggerAINoCost(Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { return false; } diff --git a/src/main/java/forge/card/abilityfactory/ai/AttachAi.java b/src/main/java/forge/card/abilityfactory/ai/AttachAi.java index 30a3562466b..d096c09e6a1 100644 --- a/src/main/java/forge/card/abilityfactory/ai/AttachAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/AttachAi.java @@ -38,7 +38,7 @@ public class AttachAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final Random r = MyRandom.getRandom(); final Cost abCost = sa.getPayCosts(); final Card source = sa.getSourceCard(); @@ -54,7 +54,7 @@ public class AttachAi extends SpellAiLogic { final Target tgt = sa.getTarget(); if (tgt != null) { tgt.resetTargets(); - if (!attachPreference(sa, params, tgt, false)) { + if (!attachPreference(sa, tgt, false)) { return false; } } @@ -72,7 +72,7 @@ public class AttachAi extends SpellAiLogic { } if (Singletons.getModel().getGame().getPhaseHandler().getPhase().isAfter(PhaseType.COMBAT_DECLARE_BLOCKERS_INSTANT_ABILITY) - && !"Curse".equals(params.get("AILogic"))) { + && !"Curse".equals(sa.getParam("AILogic"))) { return false; } @@ -158,9 +158,9 @@ public class AttachAi extends SpellAiLogic { String type = ""; for (final StaticAbility stAb : attachSource.getStaticAbilities()) { - final HashMap params = stAb.getMapParams(); - if (params.get("Mode").equals("Continuous") && params.containsKey("AddType")) { - type = params.get("AddType"); + final HashMap stab = stAb.getMapParams(); + if (stab.get("Mode").equals("Continuous") && stab.containsKey("AddType")) { + type = stab.get("AddType"); } } @@ -213,10 +213,9 @@ public class AttachAi extends SpellAiLogic { final Iterator itr = auras.iterator(); while (itr.hasNext()) { final Card aura = itr.next(); - final AbilityFactory af = aura.getSpellPermanent().getAbilityFactory(); - if ((af != null) && af.getAPI() == ApiType.Attach) { - final Map params = af.getMapParams(); - if ("KeepTapped".equals(params.get("AILogic"))) { + SpellAbility auraSA = aura.getSpellPermanent(); + if (auraSA.getApi() == ApiType.Attach) { + if ("KeepTapped".equals(auraSA.getParam("AILogic"))) { // Don't attach multiple KeepTapped Auras to one // card return false; @@ -248,11 +247,11 @@ public class AttachAi extends SpellAiLogic { * the mandatory * @return the player */ - private static Player attachToPlayerAIPreferences(final Player aiPlayer, final Map params, final SpellAbility sa, + private static Player attachToPlayerAIPreferences(final Player aiPlayer, final SpellAbility sa, final boolean mandatory) { Player p; - if ("Curse".equals(params.get("AILogic"))) { + if (sa.isCurse()) { p = aiPlayer.getOpponent(); } else { p = aiPlayer; @@ -380,25 +379,25 @@ public class AttachAi extends SpellAiLogic { // boolean grantingAbilities = false; for (final StaticAbility stAbility : attachSource.getStaticAbilities()) { - final Map params = stAbility.getMapParams(); + final Map stabMap = stAbility.getMapParams(); - if (!params.get("Mode").equals("Continuous")) { + if (!stabMap.get("Mode").equals("Continuous")) { continue; } - final String affected = params.get("Affected"); + final String affected = stabMap.get("Affected"); if (affected == null) { continue; } if ((affected.contains(stCheck) || affected.contains("AttachedBy"))) { - totToughness += CardFactoryUtil.parseSVar(attachSource, params.get("AddToughness")); + totToughness += CardFactoryUtil.parseSVar(attachSource, stabMap.get("AddToughness")); // totPower += CardFactoryUtil.parseSVar(attachSource, - // params.get("AddPower")); + // sa.get("AddPower")); - // grantingAbilities |= params.containsKey("AddAbility"); + // grantingAbilities |= sa.containsKey("AddAbility"); - final String kws = params.get("AddKeyword"); + final String kws = stabMap.get("AddKeyword"); if (kws != null) { for (final String kw : kws.split(" & ")) { keywords.add(kw); @@ -459,23 +458,23 @@ public class AttachAi extends SpellAiLogic { /** * Attach do trigger ai. - * - * @param af - * the af * @param sa * the sa * @param mandatory * the mandatory + * @param af + * the af + * * @return true, if successful */ @Override - protected boolean doTriggerAINoCost(final Player ai, final Map params, final SpellAbility sa, final boolean mandatory) { + protected boolean doTriggerAINoCost(final Player ai, final SpellAbility sa, final boolean mandatory) { final Card card = sa.getSourceCard(); // Check if there are any valid targets ArrayList targets = new ArrayList(); final Target tgt = sa.getTarget(); if (tgt == null) { - targets = AbilityFactory.getDefinedObjects(sa.getSourceCard(), params.get("Defined"), sa); + targets = AbilityFactory.getDefinedObjects(sa.getSourceCard(), sa.getParam("Defined"), sa); } if (!mandatory && card.isEquipment() && !targets.isEmpty()) { @@ -504,20 +503,20 @@ public class AttachAi extends SpellAiLogic { * the af * @param sa * the sa - * @param params - * the params + * @param sa + * the sa * @param tgt * the tgt * @param mandatory * the mandatory * @return true, if successful */ - public static boolean attachPreference(final SpellAbility sa, final Map params, final Target tgt, final boolean mandatory) { + public static boolean attachPreference(final SpellAbility sa, final Target tgt, final boolean mandatory) { Object o; if (tgt.canTgtPlayer()) { - o = attachToPlayerAIPreferences(sa.getActivatingPlayer(), params, sa, mandatory); + o = attachToPlayerAIPreferences(sa.getActivatingPlayer(), sa, mandatory); } else { - o = attachToCardAIPreferences(sa.getActivatingPlayer(), sa, params, mandatory); + o = attachToCardAIPreferences(sa.getActivatingPlayer(), sa, mandatory); } if (o == null) { @@ -590,30 +589,30 @@ public class AttachAi extends SpellAiLogic { boolean grantingAbilities = false; for (final StaticAbility stAbility : attachSource.getStaticAbilities()) { - final Map params = stAbility.getMapParams(); + final Map stabMap = stAbility.getMapParams(); - if (!params.get("Mode").equals("Continuous")) { + if (!stabMap.get("Mode").equals("Continuous")) { continue; } - final String affected = params.get("Affected"); + final String affected = stabMap.get("Affected"); if (affected == null) { continue; } if ((affected.contains(stCheck) || affected.contains("AttachedBy"))) { - totToughness += CardFactoryUtil.parseSVar(attachSource, params.get("AddToughness")); - totPower += CardFactoryUtil.parseSVar(attachSource, params.get("AddPower")); + totToughness += CardFactoryUtil.parseSVar(attachSource, stabMap.get("AddToughness")); + totPower += CardFactoryUtil.parseSVar(attachSource, stabMap.get("AddPower")); - grantingAbilities |= params.containsKey("AddAbility"); + grantingAbilities |= stabMap.containsKey("AddAbility"); - String kws = params.get("AddKeyword"); + String kws = stabMap.get("AddKeyword"); if (kws != null) { for (final String kw : kws.split(" & ")) { keywords.add(kw); } } - kws = params.get("AddHiddenKeyword"); + kws = stabMap.get("AddHiddenKeyword"); if (kws != null) { for (final String kw : kws.split(" & ")) { keywords.add(kw); @@ -686,14 +685,13 @@ public class AttachAi extends SpellAiLogic { * * @param sa * the sa - * @param params - * the params + * @param sa + * the sa * @param mandatory * the mandatory * @return the card */ - private static Card attachToCardAIPreferences(final Player aiPlayer, final SpellAbility sa, - final Map params, final boolean mandatory) { + private static Card attachToCardAIPreferences(final Player aiPlayer, final SpellAbility sa, final boolean mandatory) { final Target tgt = sa.getTarget(); final Card attachSource = sa.getSourceCard(); // TODO AttachSource is currently set for the Source of the Spell, but @@ -721,11 +719,11 @@ public class AttachAi extends SpellAiLogic { return null; } List prefList = list; - if (params.containsKey("AITgts")) { - prefList = CardLists.getValidCards(list, params.get("AITgts"), sa.getActivatingPlayer(), attachSource); + if (sa.hasParam("AITgts")) { + prefList = CardLists.getValidCards(list, sa.getParam("AITgts"), sa.getActivatingPlayer(), attachSource); } - Card c = attachGeneralAI(aiPlayer, sa, prefList, mandatory, attachSource, params.get("AILogic")); + Card c = attachGeneralAI(aiPlayer, sa, prefList, mandatory, attachSource, sa.getParam("AILogic")); if ((c == null) && mandatory) { CardLists.shuffle(list); diff --git a/src/main/java/forge/card/abilityfactory/ai/BondAi.java b/src/main/java/forge/card/abilityfactory/ai/BondAi.java index b96fe5bea45..5bef581496e 100644 --- a/src/main/java/forge/card/abilityfactory/ai/BondAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/BondAi.java @@ -34,15 +34,15 @@ public final class BondAi extends SpellAiLogic { *

* bondCanPlayAI. *

- * - * @param af - * a {@link forge.card.abilityfactory.AbilityFactory} object. * @param sa * a {@link forge.card.spellability.SpellAbility} object. + * @param af + * a {@link forge.card.abilityfactory.AbilityFactory} object. + * * @return a boolean. */ @Override - protected boolean canPlayAI(Player aiPlayer, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { return true; } // end bondCanPlayAI() } diff --git a/src/main/java/forge/card/abilityfactory/ai/CanPlayAsDrawbackAi.java b/src/main/java/forge/card/abilityfactory/ai/CanPlayAsDrawbackAi.java index c977e82583d..ca07a0ec071 100644 --- a/src/main/java/forge/card/abilityfactory/ai/CanPlayAsDrawbackAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/CanPlayAsDrawbackAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import forge.card.abilityfactory.SpellAiLogic; import forge.card.spellability.SpellAbility; @@ -12,7 +11,7 @@ public class CanPlayAsDrawbackAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player aiPlayer, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { return false; } @@ -20,7 +19,7 @@ public class CanPlayAsDrawbackAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#chkAIDrawback(java.util.Map, forge.card.spellability.SpellAbility, forge.game.player.Player) */ @Override - public boolean chkAIDrawback(Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } @@ -28,17 +27,17 @@ public class CanPlayAsDrawbackAi extends SpellAiLogic { *

* copySpellTriggerAI. *

- * - * @param af - * a {@link forge.card.abilityfactory.AbilityFactory} object. * @param sa * a {@link forge.card.spellability.SpellAbility} object. * @param mandatory * a boolean. + * @param af + * a {@link forge.card.abilityfactory.AbilityFactory} object. + * * @return a boolean. */ @Override - protected boolean doTriggerAINoCost(Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { return false; } diff --git a/src/main/java/forge/card/abilityfactory/ai/CannotPlayAi.java b/src/main/java/forge/card/abilityfactory/ai/CannotPlayAi.java index c10f5f9bd82..f599bd86a03 100644 --- a/src/main/java/forge/card/abilityfactory/ai/CannotPlayAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/CannotPlayAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import forge.card.abilityfactory.SpellAiLogic; import forge.card.spellability.SpellAbility; @@ -11,7 +10,7 @@ public class CannotPlayAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player aiPlayer, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { return false; } @@ -20,7 +19,7 @@ public class CannotPlayAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#chkAIDrawback(java.util.Map, forge.card.spellability.SpellAbility, forge.game.player.Player) */ @Override - public boolean chkAIDrawback(Map params, SpellAbility sa, Player aiPlayer) { - return canPlayAI(aiPlayer, params, sa); + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { + return canPlayAI(aiPlayer, sa); } } \ No newline at end of file diff --git a/src/main/java/forge/card/abilityfactory/ai/ChangeZoneAi.java b/src/main/java/forge/card/abilityfactory/ai/ChangeZoneAi.java index 4b35c9101aa..95dea473011 100644 --- a/src/main/java/forge/card/abilityfactory/ai/ChangeZoneAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/ChangeZoneAi.java @@ -2,7 +2,6 @@ package forge.card.abilityfactory.ai; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Random; import com.google.common.base.Predicate; @@ -47,24 +46,24 @@ public class ChangeZoneAi extends SpellAiLogic { *

* changeZoneCanPlayAI. *

- * - * @param af - * a {@link forge.card.abilityfactory.AbilityFactory} object. * @param sa * a {@link forge.card.spellability.SpellAbility} object. + * @param af + * a {@link forge.card.abilityfactory.AbilityFactory} object. + * * @return a boolean. */ @Override - protected boolean canPlayAI(Player aiPlayer, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { String origin = ""; - if (params.containsKey("Origin")) { - origin = params.get("Origin"); + if (sa.hasParam("Origin")) { + origin = sa.getParam("Origin"); } - if (ZoneType.isHidden(origin, params.containsKey("Hidden"))) { - return hiddenOriginCanPlayAI(aiPlayer, params, sa); + if (ZoneType.isHidden(origin, sa.hasParam("Hidden"))) { + return hiddenOriginCanPlayAI(aiPlayer, sa); } else if (ZoneType.isKnown(origin)) { - return knownOriginCanPlayAI(aiPlayer, params, sa); + return knownOriginCanPlayAI(aiPlayer, sa); } return false; @@ -74,24 +73,24 @@ public class ChangeZoneAi extends SpellAiLogic { *

* changeZonePlayDrawbackAI. *

- * - * @param af - * a {@link forge.card.abilityfactory.AbilityFactory} object. * @param sa * a {@link forge.card.spellability.SpellAbility} object. + * @param af + * a {@link forge.card.abilityfactory.AbilityFactory} object. + * * @return a boolean. */ @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { String origin = ""; - if (params.containsKey("Origin")) { - origin = params.get("Origin"); + if (sa.hasParam("Origin")) { + origin = sa.getParam("Origin"); } - if (ZoneType.isHidden(origin, params.containsKey("Hidden"))) { - return hiddenOriginPlayDrawbackAI(aiPlayer, params, sa); + if (ZoneType.isHidden(origin, sa.hasParam("Hidden"))) { + return hiddenOriginPlayDrawbackAI(aiPlayer, sa); } else if (ZoneType.isKnown(origin)) { - return knownOriginPlayDrawbackAI(aiPlayer, params, sa); + return knownOriginPlayDrawbackAI(aiPlayer, sa); } return false; @@ -103,26 +102,26 @@ public class ChangeZoneAi extends SpellAiLogic { *

* changeZoneTriggerAINoCost. *

- * - * @param af - * a {@link forge.card.abilityfactory.AbilityFactory} object. * @param sa * a {@link forge.card.spellability.SpellAbility} object. * @param mandatory * a boolean. + * @param af + * a {@link forge.card.abilityfactory.AbilityFactory} object. + * * @return a boolean. */ @Override - protected boolean doTriggerAINoCost(Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { String origin = ""; - if (params.containsKey("Origin")) { - origin = params.get("Origin"); + if (sa.hasParam("Origin")) { + origin = sa.getParam("Origin"); } - if (ZoneType.isHidden(origin, params.containsKey("Hidden"))) { - return hiddenTriggerAI(aiPlayer, params, sa, mandatory); + if (ZoneType.isHidden(origin, sa.hasParam("Hidden"))) { + return hiddenTriggerAI(aiPlayer, sa, mandatory); } else if (ZoneType.isKnown(origin)) { - return knownOriginTriggerAI(aiPlayer, params, sa, mandatory); + return knownOriginTriggerAI(aiPlayer, sa, mandatory); } return false; @@ -154,18 +153,18 @@ public class ChangeZoneAi extends SpellAiLogic { * a {@link forge.card.spellability.SpellAbility} object. * @return a boolean. */ - private static boolean hiddenOriginCanPlayAI(final Player ai, final Map params, final SpellAbility sa) { + private static boolean hiddenOriginCanPlayAI(final Player ai, final SpellAbility sa) { // Fetching should occur fairly often as it helps cast more spells, and // have access to more mana - final Cost abCost = sa.getAbilityFactory().getAbCost(); + final Cost abCost = sa.getPayCosts(); final Card source = sa.getSourceCard(); ZoneType origin = null; final Player opponent = ai.getOpponent(); - if (params.containsKey("Origin")) { - origin = ZoneType.smartValueOf(params.get("Origin")); + if (sa.hasParam("Origin")) { + origin = ZoneType.smartValueOf(sa.getParam("Origin")); } - final String destination = params.get("Destination"); + final String destination = sa.getParam("Destination"); if (abCost != null) { // AI currently disabled for these costs @@ -191,7 +190,7 @@ public class ChangeZoneAi extends SpellAiLogic { } //Ninjutsu - if (params.containsKey("Ninjutsu")) { + if (sa.hasParam("Ninjutsu")) { if (source.isType("Legendary") && !Singletons.getModel().getGame().isCardInPlay("Mirror Gallery")) { final List list = ai.getCardsIn(ZoneType.Battlefield); if (Iterables.any(list, CardPredicates.nameEquals(source.getName()))) { @@ -235,7 +234,7 @@ public class ChangeZoneAi extends SpellAiLogic { pDefined.add(source.getController()); final Target tgt = sa.getTarget(); if ((tgt != null) && tgt.canTgtPlayer()) { - boolean isCurse = sa.getAbilityFactory().isCurse(); + boolean isCurse = sa.isCurse(); if (isCurse && sa.canTarget(opponent)) { tgt.addTarget(opponent); } else if (!isCurse && sa.canTarget(ai)) { @@ -243,14 +242,14 @@ public class ChangeZoneAi extends SpellAiLogic { } pDefined = tgt.getTargetPlayers(); } else { - if (params.containsKey("DefinedPlayer")) { - pDefined = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("DefinedPlayer"), sa); + if (sa.hasParam("DefinedPlayer")) { + pDefined = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), sa.getParam("DefinedPlayer"), sa); } else { - pDefined = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa); + pDefined = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), sa.getParam("Defined"), sa); } } - String type = params.get("ChangeType"); + String type = sa.getParam("ChangeType"); if (type != null) { if (type.contains("X") && source.getSVar("X").equals("Count$xPaid")) { // Set PayX here to maximum value. @@ -275,7 +274,7 @@ public class ChangeZoneAi extends SpellAiLogic { // don't use fetching to top of library/graveyard before main2 if (Singletons.getModel().getGame().getPhaseHandler().getPhase().isBefore(PhaseType.MAIN2) - && !params.containsKey("ActivationPhases")) { + && !sa.hasParam("ActivationPhases")) { if (!destination.equals("Battlefield") && !destination.equals("Hand")) { return false; } @@ -306,13 +305,13 @@ public class ChangeZoneAi extends SpellAiLogic { * a {@link forge.card.spellability.SpellAbility} object. * @return a boolean. */ - private static boolean hiddenOriginPlayDrawbackAI(final Player aiPlayer, Map params, final SpellAbility sa) { + private static boolean hiddenOriginPlayDrawbackAI(final Player aiPlayer, 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 = sa.getTarget(); final Player opp = aiPlayer.getOpponent(); if ((tgt != null) && tgt.canTgtPlayer()) { - boolean isCurse = sa.getAbilityFactory().isCurse(); + boolean isCurse = sa.isCurse(); if (isCurse && sa.canTarget(opp)) { tgt.addTarget(opp); } else if (!isCurse && sa.canTarget(aiPlayer)) { @@ -338,7 +337,7 @@ public class ChangeZoneAi extends SpellAiLogic { * a boolean. * @return a boolean. */ - private static boolean hiddenTriggerAI(final Player ai, final Map params, final SpellAbility sa, final boolean mandatory) { + private static boolean hiddenTriggerAI(final Player ai, final SpellAbility sa, final boolean mandatory) { // Fetching should occur fairly often as it helps cast more spells, and // have access to more mana @@ -346,12 +345,12 @@ public class ChangeZoneAi extends SpellAiLogic { List origin = new ArrayList(); - if (params.containsKey("Origin")) { - origin = ZoneType.listValueOf(params.get("Origin")); + if (sa.hasParam("Origin")) { + origin = ZoneType.listValueOf(sa.getParam("Origin")); } // this works for hidden because the mana is paid first. - final String type = params.get("ChangeType"); + final String type = sa.getParam("ChangeType"); if ((type != null) && type.contains("X") && source.getSVar("X").equals("Count$xPaid")) { // Set PayX here to maximum value. final int xPay = ComputerUtil.determineLeftoverMana(sa, ai); @@ -362,8 +361,7 @@ public class ChangeZoneAi extends SpellAiLogic { final Target tgt = sa.getTarget(); if ((tgt != null) && tgt.canTgtPlayer()) { final Player opp = ai.getOpponent(); - boolean isCurse = sa.getAbilityFactory().isCurse(); - if (isCurse) { + if (sa.isCurse()) { if (sa.canTarget(opp)) { tgt.addTarget(opp); } else if (mandatory && sa.canTarget(ai)) { @@ -390,7 +388,7 @@ public class ChangeZoneAi extends SpellAiLogic { if (mandatory) { return true; } - pDefined = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa); + pDefined = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), sa.getParam("Defined"), sa); } for (final Player p : pDefined) { @@ -398,7 +396,7 @@ public class ChangeZoneAi extends SpellAiLogic { // Computer should "know" his deck if (p.isComputer()) { - list = AbilityFactory.filterListByType(list, params.get("ChangeType"), sa); + list = AbilityFactory.filterListByType(list, sa.getParam("ChangeType"), sa); } if (list.isEmpty()) { @@ -523,13 +521,13 @@ public class ChangeZoneAi extends SpellAiLogic { * a {@link forge.card.spellability.SpellAbility} object. * @return a boolean. */ - private static boolean knownOriginCanPlayAI(final Player ai, final Map params, final SpellAbility sa) { + private static boolean knownOriginCanPlayAI(final Player ai, final SpellAbility sa) { // Retrieve either this card, or target Cards in Graveyard - final Cost abCost = sa.getAbilityFactory().getAbCost(); + final Cost abCost = sa.getPayCosts(); final Card source = sa.getSourceCard(); - final ZoneType origin = ZoneType.smartValueOf(params.get("Origin")); - final ZoneType destination = ZoneType.smartValueOf(params.get("Destination")); + final ZoneType origin = ZoneType.smartValueOf(sa.getParam("Origin")); + final ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination")); final Random r = MyRandom.getRandom(); @@ -557,12 +555,12 @@ public class ChangeZoneAi extends SpellAiLogic { final Target tgt = sa.getTarget(); if (tgt != null) { - if (!isPreferredTarget(ai, params, sa, false)) { + if (!isPreferredTarget(ai, sa, false)) { return false; } } else { // non-targeted retrieval - final List retrieval = sa.knownDetermineDefined(params.get("Defined")); + final List retrieval = sa.knownDetermineDefined(sa.getParam("Defined")); if ((retrieval == null) || retrieval.isEmpty()) { return false; @@ -584,7 +582,7 @@ public class ChangeZoneAi extends SpellAiLogic { final AbilitySub abSub = sa.getSubAbility(); ApiType subAPI = null; if (abSub != null) { - subAPI = abSub.getAbilityFactory().getAPI(); + subAPI = abSub.getApi(); } // only use blink or bounce effects @@ -593,7 +591,7 @@ public class ChangeZoneAi extends SpellAiLogic { return false; } - final ArrayList objects = AbilityFactory.predictThreatenedObjects(ai, sa.getAbilityFactory()); + final ArrayList objects = AbilityFactory.predictThreatenedObjects(ai, sa); boolean contains = false; for (final Card c : retrieval) { if (objects.contains(c)) { @@ -640,12 +638,12 @@ public class ChangeZoneAi extends SpellAiLogic { * a {@link forge.card.spellability.SpellAbility} object. * @return a boolean. */ - private static boolean knownOriginPlayDrawbackAI(final Player aiPlayer, final Map params, final SpellAbility sa) { + private static boolean knownOriginPlayDrawbackAI(final Player aiPlayer, final SpellAbility sa) { if (sa.getTarget() == null) { return true; } - return isPreferredTarget(aiPlayer, params, sa, false); + return isPreferredTarget(aiPlayer, sa, false); } /** @@ -661,29 +659,27 @@ public class ChangeZoneAi extends SpellAiLogic { * a boolean. * @return a boolean. */ - private static boolean isPreferredTarget(final Player ai, final Map params, final SpellAbility sa, + private static boolean isPreferredTarget(final Player ai, final SpellAbility sa, final boolean mandatory) { final Card source = sa.getSourceCard(); - final ZoneType origin = ZoneType.listValueOf(params.get("Origin")).get(0); - final ZoneType destination = ZoneType.smartValueOf(params.get("Destination")); + final ZoneType origin = ZoneType.listValueOf(sa.getParam("Origin")).get(0); + final ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination")); final Target tgt = sa.getTarget(); final AbilitySub abSub = sa.getSubAbility(); ApiType subAPI = null; String subAffected = ""; - Map subParams = null; if (abSub != null) { - subAPI = abSub.getAbilityFactory().getAPI(); - subParams = abSub.getAbilityFactory().getMapParams(); - if (subParams.containsKey("Defined")) { - subAffected = subParams.get("Defined"); + subAPI = abSub.getApi(); + if (abSub.hasParam("Defined")) { + subAffected = abSub.getParam("Defined"); } } tgt.resetTargets(); List list = CardLists.getValidCards(Singletons.getModel().getGame().getCardsIn(origin), tgt.getValidTgts(), ai, source); - if (params.containsKey("AITgts")) { - list = CardLists.getValidCards(list, params.get("AITgts"), sa.getActivatingPlayer(), source); + if (sa.hasParam("AITgts")) { + list = CardLists.getValidCards(list, sa.getParam("AITgts"), sa.getActivatingPlayer(), source); } if (source.isInZone(ZoneType.Hand)) { list = CardLists.filter(list, Predicates.not(CardPredicates.nameEquals(source.getName()))); // Don't get the same card back. @@ -715,7 +711,7 @@ public class ChangeZoneAi extends SpellAiLogic { // check stack for something on the stack that will kill // anything i control if (Singletons.getModel().getGame().getStack().size() > 0) { - final ArrayList objects = AbilityFactory.predictThreatenedObjects(ai, sa.getAbilityFactory()); + final ArrayList objects = AbilityFactory.predictThreatenedObjects(ai, sa); final List threatenedTargets = new ArrayList(); @@ -903,15 +899,15 @@ public class ChangeZoneAi extends SpellAiLogic { * a boolean. * @return a boolean. */ - private static boolean isUnpreferredTarget(final Player ai, final Map params, final SpellAbility sa, + private static boolean isUnpreferredTarget(final Player ai, final SpellAbility sa, final boolean mandatory) { if (!mandatory) { return false; } final Card source = sa.getSourceCard(); - final ZoneType origin = ZoneType.smartValueOf(params.get("Origin")); - final ZoneType destination = ZoneType.smartValueOf(params.get("Destination")); + final ZoneType origin = ZoneType.smartValueOf(sa.getParam("Origin")); + final ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination")); final Target tgt = sa.getTarget(); List list = CardLists.getValidCards(Singletons.getModel().getGame().getCardsIn(origin), tgt.getValidTgts(), ai, source); @@ -1012,14 +1008,14 @@ public class ChangeZoneAi extends SpellAiLogic { * a boolean. * @return a boolean. */ - private static boolean knownOriginTriggerAI(final Player ai, final Map params, final SpellAbility sa, + private static boolean knownOriginTriggerAI(final Player ai, final SpellAbility sa, final boolean mandatory) { if (sa.getTarget() == null) { // Just in case of Defined cases - if (!mandatory && params.containsKey("AttachedTo")) { + if (!mandatory && sa.hasParam("AttachedTo")) { final ArrayList list = AbilityFactory.getDefinedCards(sa.getSourceCard(), - params.get("AttachedTo"), sa); + sa.getParam("AttachedTo"), sa); if (!list.isEmpty()) { final Card attachedTo = list.get(0); // This code is for the Dragon auras @@ -1028,9 +1024,9 @@ public class ChangeZoneAi extends SpellAiLogic { } } } - } else if (isPreferredTarget(ai, params, sa, mandatory)) { + } else if (isPreferredTarget(ai, sa, mandatory)) { // do nothing - } else if (!isUnpreferredTarget(ai, params, sa, mandatory)) { + } else if (!isUnpreferredTarget(ai, sa, mandatory)) { return false; } @@ -1049,10 +1045,10 @@ public class ChangeZoneAi extends SpellAiLogic { * @param player * a {@link forge.game.player.Player} object. */ - public static void hiddenOriginResolveAI(final Player ai, final Map params, final SpellAbility sa, Player player) { + public static void hiddenOriginResolveAI(final Player ai, final SpellAbility sa, Player player) { final Target tgt = sa.getTarget(); final Card card = sa.getSourceCard(); - final boolean defined = params.containsKey("Defined"); + final boolean defined = sa.hasParam("Defined"); if (tgt != null) { if (!tgt.getTargetPlayers().isEmpty()) { @@ -1064,26 +1060,26 @@ public class ChangeZoneAi extends SpellAiLogic { } List origin = new ArrayList(); - if (params.containsKey("Origin")) { - origin = ZoneType.listValueOf(params.get("Origin")); + if (sa.hasParam("Origin")) { + origin = ZoneType.listValueOf(sa.getParam("Origin")); } - String type = params.get("ChangeType"); + String type = sa.getParam("ChangeType"); if (type == null) { type = "Card"; } - int changeNum = params.containsKey("ChangeNum") ? AbilityFactory.calculateAmount(card, params.get("ChangeNum"), + int changeNum = sa.hasParam("ChangeNum") ? AbilityFactory.calculateAmount(card, sa.getParam("ChangeNum"), sa) : 1; List fetchList; if (defined) { - fetchList = new ArrayList(AbilityFactory.getDefinedCards(card, params.get("Defined"), sa)); - if (!params.containsKey("ChangeNum")) { + fetchList = new ArrayList(AbilityFactory.getDefinedCards(card, sa.getParam("Defined"), sa)); + if (!sa.hasParam("ChangeNum")) { changeNum = fetchList.size(); } } else if (!origin.contains(ZoneType.Library) && !origin.contains(ZoneType.Hand) - && !params.containsKey("DefinedPlayer")) { + && !sa.hasParam("DefinedPlayer")) { fetchList = Singletons.getModel().getGame().getCardsIn(origin); fetchList = AbilityFactory.filterListByType(fetchList, type, sa); } else { @@ -1091,18 +1087,18 @@ public class ChangeZoneAi extends SpellAiLogic { fetchList = AbilityFactory.filterListByType(fetchList, type, sa); } - final ZoneType destination = ZoneType.smartValueOf(params.get("Destination")); + final ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination")); final List fetched = new ArrayList(); - final String remember = params.get("RememberChanged"); - final String forget = params.get("ForgetChanged"); - final String imprint = params.get("Imprint"); + final String remember = sa.getParam("RememberChanged"); + final String forget = sa.getParam("ForgetChanged"); + final String imprint = sa.getParam("Imprint"); - if (params.containsKey("Unimprint")) { + if (sa.hasParam("Unimprint")) { card.clearImprinted(); } for (int i = 0; i < changeNum; i++) { - if (params.containsKey("DifferentNames")) { + if (sa.hasParam("DifferentNames")) { for (Card c : fetched) { fetchList = CardLists.filter(fetchList, Predicates.not(CardPredicates.nameEquals(c.getName()))); } @@ -1113,7 +1109,7 @@ public class ChangeZoneAi extends SpellAiLogic { // Improve the AI for fetching. Card c = null; - if (params.containsKey("AtRandom")) { + if (sa.hasParam("AtRandom")) { c = CardUtil.getRandom(fetchList); } else if (defined) { c = fetchList.get(0); @@ -1133,7 +1129,7 @@ public class ChangeZoneAi extends SpellAiLogic { return true; } }); - if (player.isHuman() && params.containsKey("GainControl")) { + if (player.isHuman() && sa.hasParam("GainControl")) { fetchList = CardLists.filter(fetchList, new Predicate() { @Override public boolean apply(final Card c) { @@ -1211,27 +1207,26 @@ public class ChangeZoneAi extends SpellAiLogic { fetchList.remove(c); } - if (origin.contains(ZoneType.Library) && !defined && !"False".equals(params.get("Shuffle"))) { + if (origin.contains(ZoneType.Library) && !defined && !"False".equals(sa.getParam("Shuffle"))) { player.shuffle(); } for (final Card c : fetched) { Card movedCard = null; if (ZoneType.Library.equals(destination)) { - final int libraryPos = params.containsKey("LibraryPosition") ? Integer.parseInt(params - .get("LibraryPosition")) : 0; + final int libraryPos = sa.hasParam("LibraryPosition") ? Integer.parseInt(sa.getParam("LibraryPosition")) : 0; movedCard = Singletons.getModel().getGame().getAction().moveToLibrary(c, libraryPos); } else if (ZoneType.Battlefield.equals(destination)) { - if (params.containsKey("Tapped")) { + if (sa.hasParam("Tapped")) { c.setTapped(true); } - if (params.containsKey("GainControl")) { + if (sa.hasParam("GainControl")) { c.addController(sa.getSourceCard()); } - if (params.containsKey("AttachedTo")) { + if (sa.hasParam("AttachedTo")) { final ArrayList list = AbilityFactory.getDefinedCards(sa.getSourceCard(), - params.get("AttachedTo"), sa); + sa.getParam("AttachedTo"), sa); if (!list.isEmpty()) { final Card attachedTo = list.get(0); if (c.isEnchanting()) { @@ -1246,7 +1241,7 @@ public class ChangeZoneAi extends SpellAiLogic { } } - if (params.containsKey("Attacking")) { + if (sa.hasParam("Attacking")) { Singletons.getModel().getGame().getCombat().addAttacker(c); } // Auras without Candidates stay in their current location @@ -1258,12 +1253,12 @@ public class ChangeZoneAi extends SpellAiLogic { } movedCard = Singletons.getModel().getGame().getAction().moveTo(c.getController().getZone(destination), c); - if (params.containsKey("Tapped")) { + if (sa.hasParam("Tapped")) { movedCard.setTapped(true); } } else if (destination.equals(ZoneType.Exile)) { movedCard = Singletons.getModel().getGame().getAction().exile(c); - if (params.containsKey("ExileFaceDown")) { + if (sa.hasParam("ExileFaceDown")) { movedCard.setState(CardCharacteristicName.FaceDown); } } else { @@ -1283,7 +1278,7 @@ public class ChangeZoneAi extends SpellAiLogic { } if ((origin.contains(ZoneType.Library) && !destination.equals(ZoneType.Library) && !defined) - || (params.containsKey("Shuffle") && "True".equals(params.get("Shuffle")))) { + || (sa.hasParam("Shuffle") && "True".equals(sa.getParam("Shuffle")))) { player.shuffle(); } diff --git a/src/main/java/forge/card/abilityfactory/ai/ChangeZoneAllAi.java b/src/main/java/forge/card/abilityfactory/ai/ChangeZoneAllAi.java index ccf5d92c6b8..3231c414f88 100644 --- a/src/main/java/forge/card/abilityfactory/ai/ChangeZoneAllAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/ChangeZoneAllAi.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.ai; import java.util.List; -import java.util.Map; import java.util.Random; import forge.Card; @@ -25,12 +24,12 @@ public class ChangeZoneAllAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { // Change Zone All, can be any type moving from one zone to another - final Cost abCost = sa.getAbilityFactory().getAbCost(); + final Cost abCost = sa.getPayCosts(); final Card source = sa.getSourceCard(); - final ZoneType destination = ZoneType.smartValueOf(params.get("Destination")); - final ZoneType origin = ZoneType.smartValueOf(params.get("Origin")); + final ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination")); + final ZoneType origin = ZoneType.smartValueOf(sa.getParam("Origin")); if (abCost != null) { // AI currently disabled for these costs @@ -56,9 +55,9 @@ public class ChangeZoneAllAi extends SpellAiLogic { // ex. "Return all blocking/blocked by target creature" final Player opp = ai.getOpponent(); - final List humanType = AbilityFactory.filterListByType(opp.getCardsIn(origin), params.get("ChangeType"), sa); + final List humanType = AbilityFactory.filterListByType(opp.getCardsIn(origin), sa.getParam("ChangeType"), sa); List computerType = ai.getCardsIn(origin); - computerType = AbilityFactory.filterListByType(computerType, params.get("ChangeType"), sa); + computerType = AbilityFactory.filterListByType(computerType, sa.getParam("ChangeType"), sa); final Target tgt = sa.getTarget(); // TODO improve restrictions on when the AI would want to use this @@ -124,7 +123,7 @@ public class ChangeZoneAllAi extends SpellAiLogic { } if (destination.equals(ZoneType.Battlefield)) { - if (params.get("GainControl") != null) { + if (sa.getParam("GainControl") != null) { // Check if the cards are valuable enough if ((CardLists.getNotType(humanType, "Creature").size() == 0) && (CardLists.getNotType(computerType, "Creature").size() == 0)) { if ((CardFactoryUtil.evaluateCreatureList(computerType) + CardFactoryUtil @@ -160,15 +159,15 @@ public class ChangeZoneAllAi extends SpellAiLogic { *

* changeZoneAllPlayDrawbackAI. *

- * - * @param af - * a {@link forge.card.abilityfactory.AbilityFactory} object. * @param sa * a {@link forge.card.spellability.SpellAbility} object. + * @param af + * a {@link forge.card.abilityfactory.AbilityFactory} object. + * * @return a boolean. */ @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { // if putting cards from hand to library and parent is drawing cards // make sure this will actually do something: @@ -177,16 +176,16 @@ public class ChangeZoneAllAi extends SpellAiLogic { @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { // Change Zone All, can be any type moving from one zone to another - final ZoneType destination = ZoneType.smartValueOf(params.get("Destination")); - final ZoneType origin = ZoneType.smartValueOf(params.get("Origin")); + final ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination")); + final ZoneType origin = ZoneType.smartValueOf(sa.getParam("Origin")); final Player opp = ai.getOpponent(); - final List humanType = AbilityFactory.filterListByType(opp.getCardsIn(origin), params.get("ChangeType"), sa); + final List humanType = AbilityFactory.filterListByType(opp.getCardsIn(origin), sa.getParam("ChangeType"), sa); List computerType = ai.getCardsIn(origin); - computerType = AbilityFactory.filterListByType(computerType, params.get("ChangeType"), sa); + computerType = AbilityFactory.filterListByType(computerType, sa.getParam("ChangeType"), sa); // TODO improve restrictions on when the AI would want to use this // spBounceAll has some AI we can compare to. @@ -237,7 +236,7 @@ public class ChangeZoneAllAi extends SpellAiLogic { } if (destination.equals(ZoneType.Battlefield)) { - if (params.get("GainControl") != null) { + if (sa.getParam("GainControl") != null) { // Check if the cards are valuable enough if ((CardLists.getNotType(humanType, "Creature").size() == 0) && (CardLists.getNotType(computerType, "Creature").size() == 0)) { if ((CardFactoryUtil.evaluateCreatureList(computerType) + CardFactoryUtil diff --git a/src/main/java/forge/card/abilityfactory/ai/CharmAi.java b/src/main/java/forge/card/abilityfactory/ai/CharmAi.java index 12ae4d08443..e4cf065d121 100644 --- a/src/main/java/forge/card/abilityfactory/ai/CharmAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/CharmAi.java @@ -14,14 +14,14 @@ import forge.util.MyRandom; public class CharmAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final Random r = MyRandom.getRandom(); - final int num = Integer.parseInt(params.containsKey("CharmNum") ? params.get("CharmNum") : "1"); - final int min = params.containsKey("MinCharmNum") ? Integer.parseInt(params.get("MinCharmNum")) : num; + final int num = Integer.parseInt(sa.hasParam("CharmNum") ? sa.getParam("CharmNum") : "1"); + final int min = sa.hasParam("MinCharmNum") ? Integer.parseInt(sa.getParam("MinCharmNum")) : num; boolean timingRight = sa.isTrigger(); //is there a reason to play the charm now? - List chooseFrom = CharmEffect.makePossibleOptions(sa, params); + List chooseFrom = CharmEffect.makePossibleOptions(sa); List chosenList = chooseOptionsAi(ai, timingRight, chooseFrom, num, min); if (chosenList == null || chosenList.isEmpty()) { diff --git a/src/main/java/forge/card/abilityfactory/ai/ChooseCardAi.java b/src/main/java/forge/card/abilityfactory/ai/ChooseCardAi.java index b2886ea0c45..045efae32dd 100644 --- a/src/main/java/forge/card/abilityfactory/ai/ChooseCardAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/ChooseCardAi.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.ai; import java.util.List; -import java.util.Map; import forge.Card; import forge.CardLists; @@ -18,7 +17,7 @@ public class ChooseCardAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final Card host = sa.getSourceCard(); final Target tgt = sa.getTarget(); @@ -30,27 +29,27 @@ public class ChooseCardAi extends SpellAiLogic { return false; } } - if (params.containsKey("AILogic")) { + if (sa.hasParam("AILogic")) { ZoneType choiceZone = ZoneType.Battlefield; - if (params.containsKey("ChoiceZone")) { - choiceZone = ZoneType.smartValueOf(params.get("ChoiceZone")); + if (sa.hasParam("ChoiceZone")) { + choiceZone = ZoneType.smartValueOf(sa.getParam("ChoiceZone")); } List choices = Singletons.getModel().getGame().getCardsIn(choiceZone); - if (params.containsKey("Choices")) { - choices = CardLists.getValidCards(choices, params.get("Choices"), host.getController(), host); + if (sa.hasParam("Choices")) { + choices = CardLists.getValidCards(choices, sa.getParam("Choices"), host.getController(), host); } - if (params.containsKey("TargetControls")) { + if (sa.hasParam("TargetControls")) { choices = CardLists.filterControlledBy(choices, ai.getOpponent()); } - if (params.get("AILogic").equals("AtLeast1")) { + if (sa.getParam("AILogic").equals("AtLeast1")) { if (choices.isEmpty()) { return false; } - } else if (params.get("AILogic").equals("AtLeast2") || params.get("AILogic").equals("BestBlocker")) { + } else if (sa.getParam("AILogic").equals("AtLeast2") || sa.getParam("AILogic").equals("BestBlocker")) { if (choices.size() < 2) { return false; } - } else if (params.get("AILogic").equals("Clone")) { + } else if (sa.getParam("AILogic").equals("Clone")) { choices = CardLists.getValidCards(choices, "Permanent.YouDontCtrl,Permanent.NonLegendary", host.getController(), host); if (choices.isEmpty()) { return false; @@ -62,7 +61,7 @@ public class ChooseCardAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player ai) { - return canPlayAI(ai, params, sa); + public boolean chkAIDrawback(SpellAbility sa, Player ai) { + return canPlayAI(ai, sa); } } \ No newline at end of file diff --git a/src/main/java/forge/card/abilityfactory/ai/ChooseCardNameAi.java b/src/main/java/forge/card/abilityfactory/ai/ChooseCardNameAi.java index ac74a85c19d..84a0e106c62 100644 --- a/src/main/java/forge/card/abilityfactory/ai/ChooseCardNameAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/ChooseCardNameAi.java @@ -10,15 +10,15 @@ public class ChooseCardNameAi extends SpellAiLogic { @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { - if (params.containsKey("AILogic")) { + if (sa.hasParam("AILogic")) { // Don't tap creatures that may be able to block if (ComputerUtil.waitForBlocking(sa)) { return false; @@ -39,7 +39,7 @@ public class ChooseCardNameAi extends SpellAiLogic { } @Override - protected boolean doTriggerAINoCost(Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { // TODO - there is no AILogic implemented yet return false; } diff --git a/src/main/java/forge/card/abilityfactory/ai/ChooseColorAi.java b/src/main/java/forge/card/abilityfactory/ai/ChooseColorAi.java index e8576a3ef6e..11f182625d5 100644 --- a/src/main/java/forge/card/abilityfactory/ai/ChooseColorAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/ChooseColorAi.java @@ -9,8 +9,8 @@ public class ChooseColorAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player aiPlayer, java.util.Map params, SpellAbility sa) { - if (!params.containsKey("AILogic")) { + protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { + if (!sa.hasParam("AILogic")) { return false; } boolean chance = MyRandom.getRandom().nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); @@ -18,14 +18,14 @@ public class ChooseColorAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { - return mandatory || canPlayAI(ai, params, sa); + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { + return mandatory || canPlayAI(ai, sa); } } \ No newline at end of file diff --git a/src/main/java/forge/card/abilityfactory/ai/ChooseTypeAi.java b/src/main/java/forge/card/abilityfactory/ai/ChooseTypeAi.java index 2ed40e877e3..f0cbd78e98d 100644 --- a/src/main/java/forge/card/abilityfactory/ai/ChooseTypeAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/ChooseTypeAi.java @@ -10,28 +10,28 @@ import forge.game.player.Player; public class ChooseTypeAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player aiPlayer, java.util.Map params, SpellAbility sa) { - if (!params.containsKey("AILogic")) { + protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { + if (!sa.hasParam("AILogic")) { return false; } - return doTriggerAINoCost(aiPlayer, params, sa, false); + return doTriggerAINoCost(aiPlayer, sa, false); } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final Target tgt = sa.getTarget(); if (sa.getTarget() != null) { tgt.resetTargets(); sa.getTarget().addTarget(ai); } else { - final ArrayList tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa); + final ArrayList tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), sa.getParam("Defined"), sa); for (final Player p : tgtPlayers) { if (p.isHuman() && !mandatory) { return false; diff --git a/src/main/java/forge/card/abilityfactory/ai/ClashAi.java b/src/main/java/forge/card/abilityfactory/ai/ClashAi.java index 8bf7c71d3f8..ccccaf81845 100644 --- a/src/main/java/forge/card/abilityfactory/ai/ClashAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/ClashAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import forge.card.abilityfactory.SpellAiLogic; import forge.card.spellability.SpellAbility; @@ -13,7 +12,7 @@ public class ClashAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#doTriggerAINoCost(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility, boolean) */ @Override - protected boolean doTriggerAINoCost(Player aiPlayer, Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { return true; } @@ -21,7 +20,7 @@ public class ClashAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#chkAIDrawback(java.util.Map, forge.card.spellability.SpellAbility, forge.game.player.Player) */ @Override - public boolean chkAIDrawback(Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } @@ -29,7 +28,7 @@ public class ClashAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final Target tgt = sa.getTarget(); final Player opp = ai.getOpponent(); if (tgt != null) { diff --git a/src/main/java/forge/card/abilityfactory/ai/CloneAi.java b/src/main/java/forge/card/abilityfactory/ai/CloneAi.java index 39cd7722456..78bb3c1f97a 100644 --- a/src/main/java/forge/card/abilityfactory/ai/CloneAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/CloneAi.java @@ -1,8 +1,6 @@ package forge.card.abilityfactory.ai; import java.util.ArrayList; -import java.util.Map; - import forge.Card; import forge.Singletons; import forge.card.abilityfactory.AbilityFactory; @@ -16,7 +14,7 @@ import forge.game.player.Player; public class CloneAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final Target tgt = sa.getTarget(); final Card source = sa.getSourceCard(); @@ -39,7 +37,7 @@ public class CloneAi extends SpellAiLogic { // Combat_Begin step if (!phase.is(PhaseType.COMBAT_BEGIN) && phase.isPlayerTurn(ai) && !AbilityFactory.isSorcerySpeed(sa) - && !params.containsKey("ActivationPhases") && !params.containsKey("Permanent")) { + && !sa.hasParam("ActivationPhases") && !sa.hasParam("Permanent")) { return false; } @@ -51,26 +49,26 @@ public class CloneAi extends SpellAiLogic { } // don't activate during main2 unless this effect is permanent - if (phase.is(PhaseType.MAIN2) && !params.containsKey("Permanent")) { + if (phase.is(PhaseType.MAIN2) && !sa.hasParam("Permanent")) { return false; } if (null == tgt) { - final ArrayList defined = AbilityFactory.getDefinedCards(source, params.get("Defined"), sa); + final ArrayList defined = AbilityFactory.getDefinedCards(source, sa.getParam("Defined"), sa); boolean bFlag = false; for (final Card c : defined) { bFlag |= (!c.isCreature() && !c.isTapped() && !(c.getTurnInZone() == phase.getTurn())); // for creatures that could be improved (like Figure of Destiny) - if (c.isCreature() && (params.containsKey("Permanent") || (!c.isTapped() && !c.isSick()))) { + if (c.isCreature() && (sa.hasParam("Permanent") || (!c.isTapped() && !c.isSick()))) { int power = -5; - if (params.containsKey("Power")) { - power = AbilityFactory.calculateAmount(source, params.get("Power"), sa); + if (sa.hasParam("Power")) { + power = AbilityFactory.calculateAmount(source, sa.getParam("Power"), sa); } int toughness = -5; - if (params.containsKey("Toughness")) { - toughness = AbilityFactory.calculateAmount(source, params.get("Toughness"), sa); + if (sa.hasParam("Toughness")) { + toughness = AbilityFactory.calculateAmount(source, sa.getParam("Toughness"), sa); } if ((power + toughness) > (c.getCurrentPower() + c.getCurrentToughness())) { bFlag = true; @@ -85,19 +83,19 @@ public class CloneAi extends SpellAiLogic { } } else { tgt.resetTargets(); - useAbility &= cloneTgtAI(params, sa); + useAbility &= cloneTgtAI(sa); } return useAbility; } // end cloneCanPlayAI() @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { // AI should only activate this during Human's turn boolean chance = true; if (sa.getTarget() != null) { - chance = cloneTgtAI(params, sa); + chance = cloneTgtAI(sa); } @@ -105,12 +103,12 @@ public class CloneAi extends SpellAiLogic { } @Override - protected boolean doTriggerAINoCost(Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { boolean chance = true; if (sa.getTarget() != null) { - chance = cloneTgtAI(params, sa); + chance = cloneTgtAI(sa); } // Improve AI for triggers. If source is a creature with: @@ -134,7 +132,7 @@ public class CloneAi extends SpellAiLogic { * a {@link forge.card.spellability.SpellAbility} object. * @return a boolean. */ - private boolean cloneTgtAI(final Map params, final SpellAbility sa) { + private boolean cloneTgtAI(final SpellAbility sa) { // This is reasonable for now. Kamahl, Fist of Krosa and a sorcery or // two are the only things // that clone a target. Those can just use SVar:RemAIDeck:True until diff --git a/src/main/java/forge/card/abilityfactory/ai/ControlExchangeAi.java b/src/main/java/forge/card/abilityfactory/ai/ControlExchangeAi.java index b1766652106..92241eed22e 100644 --- a/src/main/java/forge/card/abilityfactory/ai/ControlExchangeAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/ControlExchangeAi.java @@ -22,7 +22,7 @@ public class ControlExchangeAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, final SpellAbility sa) { + protected boolean canPlayAI(Player ai, final SpellAbility sa) { Card object1 = null; Card object2 = null; final Target tgt = sa.getTarget(); @@ -40,8 +40,8 @@ public class ControlExchangeAi extends SpellAiLogic { } }); object1 = CardFactoryUtil.getBestAI(list); - if (params.containsKey("Defined")) { - object2 = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa).get(0); + if (sa.hasParam("Defined")) { + object2 = AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa).get(0); } else if (tgt.getMinTargets(sa.getSourceCard(), sa) > 1) { List list2 = ai.getCardsIn(ZoneType.Battlefield); list2 = CardLists.getValidCards(list2, tgt.getValidTgts(), ai, sa.getSourceCard()); @@ -59,7 +59,7 @@ public class ControlExchangeAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { // check AI life before playing this drawback? return true; } @@ -68,7 +68,7 @@ public class ControlExchangeAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#doTriggerAINoCost(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility, boolean) */ @Override - protected boolean doTriggerAINoCost(Player aiPlayer, Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { return false; } } \ No newline at end of file diff --git a/src/main/java/forge/card/abilityfactory/ai/ControlGainAi.java b/src/main/java/forge/card/abilityfactory/ai/ControlGainAi.java index 7531e9bf1ac..5b8cba96499 100644 --- a/src/main/java/forge/card/abilityfactory/ai/ControlGainAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/ControlGainAi.java @@ -39,7 +39,7 @@ import forge.game.zone.ZoneType; //AB:GainControl|ValidTgts$Creature|TgtPrompt$Select target legendary creature|LoseControl$Untap,LoseControl|SpellDescription$Gain control of target xxxxxxx -//GainControl specific params: +//GainControl specific sa: // LoseControl - the lose control conditions (as a comma separated list) // -Untap - source card becomes untapped // -LoseControl - you lose control of source card @@ -62,13 +62,13 @@ import forge.game.zone.ZoneType; */ public class ControlGainAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, final SpellAbility sa) { + protected boolean canPlayAI(Player ai, final SpellAbility sa) { boolean hasCreature = false; boolean hasArtifact = false; boolean hasEnchantment = false; boolean hasLand = false; - final List lose = params.containsKey("LoseControl") ? Arrays.asList(params.get("LoseControl").split(",")) : null; + final List lose = sa.hasParam("LoseControl") ? Arrays.asList(sa.getParam("LoseControl").split(",")) : null; final Target tgt = sa.getTarget(); @@ -163,36 +163,36 @@ public class ControlGainAi extends SpellAiLogic { } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { if (sa.getTarget() == null) { if (mandatory) { return true; } } else { - return this.canPlayAI(ai, params, sa); + return this.canPlayAI(ai, sa); } return true; } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, final Player ai) { + public boolean chkAIDrawback(SpellAbility sa, final Player ai) { if ((sa.getTarget() == null) || !sa.getTarget().doesTarget()) { - if (params.containsKey("AllValid")) { + if (sa.hasParam("AllValid")) { List tgtCards = CardLists.filterControlledBy(Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield), ai.getOpponent()); - tgtCards = AbilityFactory.filterListByType(tgtCards, params.get("AllValid"), sa); + tgtCards = AbilityFactory.filterListByType(tgtCards, sa.getParam("AllValid"), sa); if (tgtCards.isEmpty()) { return false; } } - final List lose = params.containsKey("LoseControl") ? Arrays.asList(params.get("LoseControl").split(",")) : null; + final List lose = sa.hasParam("LoseControl") ? Arrays.asList(sa.getParam("LoseControl").split(",")) : null; if ((lose != null) && lose.contains("EOT") && Singletons.getModel().getGame().getPhaseHandler().getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS)) { return false; } } else { - return this.canPlayAI(ai, params, sa); + return this.canPlayAI(ai, sa); } return true; diff --git a/src/main/java/forge/card/abilityfactory/ai/CopyPermanentAi.java b/src/main/java/forge/card/abilityfactory/ai/CopyPermanentAi.java index 7a18ef58f14..44f2b233e28 100644 --- a/src/main/java/forge/card/abilityfactory/ai/CopyPermanentAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/CopyPermanentAi.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.ai; import java.util.List; -import java.util.Map; import java.util.Random; import forge.Card; @@ -24,11 +23,11 @@ public class CopyPermanentAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player aiPlayer, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { // Card source = sa.getSourceCard(); // TODO - I'm sure someone can do this AI better - if (params.containsKey("AtEOT") && !Singletons.getModel().getGame().getPhaseHandler().is(PhaseType.MAIN1)) { + if (sa.hasParam("AtEOT") && !Singletons.getModel().getGame().getPhaseHandler().is(PhaseType.MAIN1)) { return false; } else { double chance = .4; // 40 percent chance with instant speed stuff @@ -38,7 +37,7 @@ public class CopyPermanentAi extends SpellAiLogic { } final Random r = MyRandom.getRandom(); if (r.nextFloat() <= Math.pow(chance, sa.getActivationsThisTurn() + 1)) { - return this.doTriggerAINoCost(aiPlayer, params, sa, false); + return this.doTriggerAINoCost(aiPlayer, sa, false); } else { return false; } @@ -46,12 +45,12 @@ public class CopyPermanentAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } @Override - protected boolean doTriggerAINoCost(Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { final Card source = sa.getSourceCard(); // //// diff --git a/src/main/java/forge/card/abilityfactory/ai/CounterAi.java b/src/main/java/forge/card/abilityfactory/ai/CounterAi.java index 57bbfdf9941..44ef32e6778 100644 --- a/src/main/java/forge/card/abilityfactory/ai/CounterAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/CounterAi.java @@ -17,9 +17,9 @@ import forge.util.MyRandom; public class CounterAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { boolean toReturn = true; - final Cost abCost = sa.getAbilityFactory().getAbCost(); + final Cost abCost = sa.getPayCosts(); final Card source = sa.getSourceCard(); if (Singletons.getModel().getGame().getStack().size() < 1) { return false; @@ -42,8 +42,8 @@ public class CounterAi extends SpellAiLogic { if (!CardFactoryUtil.isCounterableBy(topSA.getSourceCard(), sa) || topSA.getActivatingPlayer().isComputer()) { return false; } - if (params.containsKey("AITgts") && (topSA.getSourceCard() == null - || !topSA.getSourceCard().isValid(params.get("AITgts"), sa.getActivatingPlayer(), source))) { + if (sa.hasParam("AITgts") && (topSA.getSourceCard() == null + || !topSA.getSourceCard().isValid(sa.getParam("AITgts"), sa.getActivatingPlayer(), source))) { return false; } @@ -57,7 +57,7 @@ public class CounterAi extends SpellAiLogic { return false; } - String unlessCost = params.containsKey("UnlessCost") ? params.get("UnlessCost").trim() : null; + String unlessCost = sa.hasParam("UnlessCost") ? sa.getParam("UnlessCost").trim() : null; if (unlessCost != null && !unlessCost.endsWith(">")) { // Is this Usable Mana Sources? Or Total Available Mana? @@ -100,12 +100,12 @@ public class CounterAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { - return doTriggerAINoCost(aiPlayer, params, sa, true); + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { + return doTriggerAINoCost(aiPlayer, sa, true); } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { boolean toReturn = true; final Target tgt = sa.getTarget(); @@ -122,7 +122,7 @@ public class CounterAi extends SpellAiLogic { return false; } - String unlessCost = params.containsKey("UnlessCost") ? params.get("UnlessCost").trim() : null; + String unlessCost = sa.hasParam("UnlessCost") ? sa.getParam("UnlessCost").trim() : null; final Card source = sa.getSourceCard(); if (unlessCost != null) { diff --git a/src/main/java/forge/card/abilityfactory/ai/CountersMoveAi.java b/src/main/java/forge/card/abilityfactory/ai/CountersMoveAi.java index 562a347cb8f..4c231e038fe 100644 --- a/src/main/java/forge/card/abilityfactory/ai/CountersMoveAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/CountersMoveAi.java @@ -18,12 +18,12 @@ import forge.util.MyRandom; public class CountersMoveAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { // AI needs to be expanded, since this function can be pretty complex // based on what // the expected targets could be final Random r = MyRandom.getRandom(); - final String amountStr = params.get("CounterNum"); + final String amountStr = sa.getParam("CounterNum"); // TODO handle proper calculation of X values based on Cost final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), amountStr, sa); @@ -44,18 +44,18 @@ public class CountersMoveAi extends SpellAiLogic { } // moveCounterCanPlayAI @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final Card host = sa.getSourceCard(); final Target abTgt = sa.getTarget(); - final String type = params.get("CounterType"); - final String amountStr = params.get("CounterNum"); - final int amount = AbilityFactory.calculateAmount(sa.getAbilityFactory().getHostCard(), amountStr, sa); + final String type = sa.getParam("CounterType"); + final String amountStr = sa.getParam("CounterNum"); + final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), amountStr, sa); boolean chance = false; boolean preferred = true; - final Counters cType = Counters.valueOf(params.get("CounterType")); - final ArrayList srcCards = AbilityFactory.getDefinedCards(host, params.get("Source"), sa); - final ArrayList destCards = AbilityFactory.getDefinedCards(host, params.get("Defined"), sa); + final Counters cType = Counters.valueOf(sa.getParam("CounterType")); + final ArrayList srcCards = AbilityFactory.getDefinedCards(host, sa.getParam("Source"), sa); + final ArrayList destCards = AbilityFactory.getDefinedCards(host, sa.getParam("Defined"), sa); if (abTgt == null) { if ((srcCards.size() > 0) && cType.equals(Counters.P1P1) // move +1/+1 counters away @@ -68,8 +68,7 @@ public class CountersMoveAi extends SpellAiLogic { chance = true; } } else { // targeted - boolean isCurse = sa.getAbilityFactory().isCurse(); - final Player player = isCurse ? ai.getOpponent() : ai; + final Player player = sa.isCurse() ? ai.getOpponent() : ai; List list = CardLists.getTargetableCards(player.getCardsIn(ZoneType.Battlefield), sa); list = CardLists.getValidCards(list, abTgt.getValidTgts(), host.getController(), host); if (list.isEmpty() && mandatory) { @@ -89,7 +88,7 @@ public class CountersMoveAi extends SpellAiLogic { Card choice = null; // Choose targets here: - if (isCurse) { + if (sa.isCurse()) { if (preferred) { choice = CountersAi.chooseCursedTarget(list, type, amount); } diff --git a/src/main/java/forge/card/abilityfactory/ai/CountersProliferateAi.java b/src/main/java/forge/card/abilityfactory/ai/CountersProliferateAi.java index 50b29b31477..eda5e0d1e99 100644 --- a/src/main/java/forge/card/abilityfactory/ai/CountersProliferateAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/CountersProliferateAi.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.ai; import java.util.List; -import java.util.Map; import com.google.common.base.Predicate; @@ -17,7 +16,7 @@ import forge.game.zone.ZoneType; public class CountersProliferateAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { boolean chance = true; List cperms = CardLists.filter(ai.getCardsIn(ZoneType.Battlefield), new Predicate() { @@ -51,7 +50,7 @@ public class CountersProliferateAi extends SpellAiLogic { } @Override - protected boolean doTriggerAINoCost(Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { boolean chance = true; // TODO Make sure Human has poison counters or there are some counters @@ -64,8 +63,8 @@ public class CountersProliferateAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#chkAIDrawback(java.util.Map, forge.card.spellability.SpellAbility, forge.game.player.Player) */ @Override - public boolean chkAIDrawback(Map params, SpellAbility sa, Player ai) { - return canPlayAI(ai, params, sa); + public boolean chkAIDrawback(SpellAbility sa, Player ai) { + return canPlayAI(ai, sa); } } \ No newline at end of file diff --git a/src/main/java/forge/card/abilityfactory/ai/CountersPutAi.java b/src/main/java/forge/card/abilityfactory/ai/CountersPutAi.java index e68f759bdcc..9395b499a12 100644 --- a/src/main/java/forge/card/abilityfactory/ai/CountersPutAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/CountersPutAi.java @@ -2,7 +2,6 @@ package forge.card.abilityfactory.ai; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Random; import com.google.common.base.Predicate; @@ -26,7 +25,7 @@ import forge.util.MyRandom; public class CountersPutAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, final SpellAbility sa) { + protected boolean canPlayAI(Player ai, final SpellAbility sa) { // AI needs to be expanded, since this function can be pretty complex // based on // what the expected targets could be @@ -36,11 +35,10 @@ public class CountersPutAi extends SpellAiLogic { final Card source = sa.getSourceCard(); List list; Card choice = null; - final String type = params.get("CounterType"); - final String amountStr = params.get("CounterNum"); + final String type = sa.getParam("CounterType"); + final String amountStr = sa.getParam("CounterNum"); - boolean isCurse = sa.getAbilityFactory().isCurse(); - final Player player = isCurse ? ai.getOpponent() : ai; + final Player player = sa.isCurse() ? ai.getOpponent() : ai; if (ComputerUtil.preventRunAwayActivations(sa)) { return false; @@ -115,7 +113,7 @@ public class CountersPutAi extends SpellAiLogic { } } - if (isCurse) { + if (sa.isCurse()) { choice = CountersAi.chooseCursedTarget(list, type, amount); } else { choice = CountersAi.chooseBoonTarget(list, type); @@ -136,7 +134,7 @@ public class CountersPutAi extends SpellAiLogic { } } else { final ArrayList cards = AbilityFactory.getDefinedCards(sa.getSourceCard(), - params.get("Defined"), sa); + sa.getParam("Defined"), sa); // Don't activate Curse abilities on my cards and non-curse abilites // on my opponents if (cards.isEmpty() || !cards.get(0).getController().equals(player)) { @@ -154,7 +152,7 @@ public class CountersPutAi extends SpellAiLogic { // Don't use non P1P1/M1M1 counters before main 2 if possible if (Singletons.getModel().getGame().getPhaseHandler().getPhase().isBefore(PhaseType.MAIN2) - && !params.containsKey("ActivationPhases") + && !sa.hasParam("ActivationPhases") && !(type.equals("P1P1") || type.equals("M1M1"))) { return false; } @@ -167,17 +165,16 @@ public class CountersPutAi extends SpellAiLogic { } // putCanPlayAI @Override - public boolean chkAIDrawback(Map params, final SpellAbility sa, Player ai) { + public boolean chkAIDrawback(final SpellAbility sa, Player ai) { boolean chance = true; final Target abTgt = sa.getTarget(); final Card source = sa.getSourceCard(); Card choice = null; - final String type = params.get("CounterType"); - final String amountStr = params.get("CounterNum"); + final String type = sa.getParam("CounterType"); + final String amountStr = sa.getParam("CounterNum"); final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), amountStr, sa); - boolean isCurse = sa.getAbilityFactory().isCurse(); - final Player player = isCurse ? ai.getOpponent() : ai; + final Player player = sa.isCurse() ? ai.getOpponent() : ai; if (abTgt != null) { List list = @@ -206,7 +203,7 @@ public class CountersPutAi extends SpellAiLogic { } } - if (isCurse) { + if (sa.isCurse()) { choice = CountersAi.chooseCursedTarget(list, type, amount); } else { choice = CountersAi.chooseBoonTarget(list, type); @@ -231,21 +228,21 @@ public class CountersPutAi extends SpellAiLogic { } // putPlayDrawbackAI @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final Target abTgt = sa.getTarget(); final Card source = sa.getSourceCard(); // boolean chance = true; boolean preferred = true; List list; - boolean isCurse = sa.getAbilityFactory().isCurse(); + boolean isCurse = sa.isCurse(); final Player player = isCurse ? ai.getOpponent() : ai; - final String type = params.get("CounterType"); - final String amountStr = params.get("CounterNum"); + final String type = sa.getParam("CounterType"); + final String amountStr = sa.getParam("CounterNum"); final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), amountStr, sa); if (abTgt == null) { // No target. So must be defined - list = new ArrayList(AbilityFactory.getDefinedCards(source, params.get("Defined"), sa)); + list = new ArrayList(AbilityFactory.getDefinedCards(source, sa.getParam("Defined"), sa)); if (!mandatory) { // TODO - If Trigger isn't mandatory, when wouldn't we want to diff --git a/src/main/java/forge/card/abilityfactory/ai/CountersPutAllAi.java b/src/main/java/forge/card/abilityfactory/ai/CountersPutAllAi.java index 2593056e82e..bb34db7bdc7 100644 --- a/src/main/java/forge/card/abilityfactory/ai/CountersPutAllAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/CountersPutAllAi.java @@ -24,7 +24,7 @@ import forge.util.MyRandom; public class CountersPutAllAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { // AI needs to be expanded, since this function can be pretty complex // based on what // the expected targets could be @@ -33,10 +33,10 @@ public class CountersPutAllAi extends SpellAiLogic { final Card source = sa.getSourceCard(); List hList; List cList; - final String type = params.get("CounterType"); - final String amountStr = params.get("CounterNum"); - final String valid = params.get("ValidCards"); - final boolean curse = sa.getAbilityFactory().isCurse(); + final String type = sa.getParam("CounterType"); + final String amountStr = sa.getParam("CounterNum"); + final String valid = sa.getParam("ValidCards"); + final boolean curse = sa.isCurse(); final Target tgt = sa.getTarget(); hList = CardLists.getValidCards(ai.getOpponent().getCardsIn(ZoneType.Battlefield), valid, source.getController(), source); @@ -131,7 +131,7 @@ public class CountersPutAllAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player ai) { - return canPlayAI(ai, params, sa); + public boolean chkAIDrawback(SpellAbility sa, Player ai) { + return canPlayAI(ai, sa); } } \ No newline at end of file diff --git a/src/main/java/forge/card/abilityfactory/ai/CountersRemoveAi.java b/src/main/java/forge/card/abilityfactory/ai/CountersRemoveAi.java index 05821f654f4..68830c43c98 100644 --- a/src/main/java/forge/card/abilityfactory/ai/CountersRemoveAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/CountersRemoveAi.java @@ -17,7 +17,7 @@ import forge.util.MyRandom; public class CountersRemoveAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { // AI needs to be expanded, since this function can be pretty complex // based on what // the expected targets could be @@ -28,8 +28,8 @@ public class CountersRemoveAi extends SpellAiLogic { // List list; // Card choice = null; - final String type = params.get("CounterType"); - // String amountStr = params.get("CounterNum"); + final String type = sa.getParam("CounterType"); + // String amountStr = sa.get("CounterNum"); // TODO - currently, not targeted, only for Self @@ -67,7 +67,7 @@ public class CountersRemoveAi extends SpellAiLogic { } if (Singletons.getModel().getGame().getPhaseHandler().getPhase().isBefore(PhaseType.MAIN2) - && !params.containsKey("ActivationPhases") + && !sa.hasParam("ActivationPhases") && !type.equals("M1M1")) { return false; } @@ -83,7 +83,7 @@ public class CountersRemoveAi extends SpellAiLogic { } @Override - protected boolean doTriggerAINoCost(Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { // AI needs to be expanded, since this function can be pretty complex // based on what the // expected targets could be diff --git a/src/main/java/forge/card/abilityfactory/ai/DamageAiBase.java b/src/main/java/forge/card/abilityfactory/ai/DamageAiBase.java index 30abf942884..3dfb251a0a0 100644 --- a/src/main/java/forge/card/abilityfactory/ai/DamageAiBase.java +++ b/src/main/java/forge/card/abilityfactory/ai/DamageAiBase.java @@ -26,9 +26,9 @@ public abstract class DamageAiBase extends SpellAiLogic { } if (!noPrevention) { - restDamage = enemy.predictDamage(restDamage, sa.getAbilityFactory().getHostCard(), false); + restDamage = enemy.predictDamage(restDamage, sa.getSourceCard(), false); } else { - restDamage = enemy.staticReplaceDamage(restDamage, sa.getAbilityFactory().getHostCard(), false); + restDamage = enemy.staticReplaceDamage(restDamage, sa.getSourceCard(), false); } if (restDamage == 0) { @@ -41,7 +41,7 @@ public abstract class DamageAiBase extends SpellAiLogic { final List hand = comp.getCardsIn(ZoneType.Hand); - if (sa.getAbilityFactory().isSpell()) { + if (sa.isSpell()) { // If this is a spell, cast it instead of discarding if ((Singletons.getModel().getGame().getPhaseHandler().is(PhaseType.END_OF_TURN) || Singletons.getModel().getGame().getPhaseHandler().is(PhaseType.MAIN2)) && Singletons.getModel().getGame().getPhaseHandler().isPlayerTurn(comp) && (hand.size() > comp.getMaxHandSize())) { diff --git a/src/main/java/forge/card/abilityfactory/ai/DamageAllAi.java b/src/main/java/forge/card/abilityfactory/ai/DamageAllAi.java index dc42306c200..21f0761a05b 100644 --- a/src/main/java/forge/card/abilityfactory/ai/DamageAllAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/DamageAllAi.java @@ -2,7 +2,6 @@ package forge.card.abilityfactory.ai; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Random; import com.google.common.base.Predicate; @@ -26,7 +25,7 @@ public class DamageAllAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { // AI needs to be expanded, since this function can be pretty complex // based on what the expected targets could be final Random r = MyRandom.getRandom(); @@ -35,7 +34,7 @@ public class DamageAllAi extends SpellAiLogic String validP = ""; - final String damage = params.get("NumDmg"); + final String damage = sa.getParam("NumDmg"); int dmg = AbilityFactory.calculateAmount(sa.getSourceCard(), damage, sa); @@ -45,14 +44,14 @@ public class DamageAllAi extends SpellAiLogic source.setSVar("PayX", Integer.toString(dmg)); } - if (params.containsKey("ValidPlayers")) { - validP = params.get("ValidPlayers"); + if (sa.hasParam("ValidPlayers")) { + validP = sa.getParam("ValidPlayers"); } Player opp = ai.getOpponent(); - final List humanList = this.getKillableCreatures(params, sa.getSourceCard(), opp, dmg); - List computerList = this.getKillableCreatures(params, sa.getSourceCard(), opp, dmg); + final List humanList = this.getKillableCreatures(sa, opp, dmg); + List computerList = this.getKillableCreatures(sa, ai, dmg); final Target tgt = sa.getTarget(); @@ -107,7 +106,7 @@ public class DamageAllAi extends SpellAiLogic } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { // check AI life before playing this drawback? return true; } @@ -127,8 +126,9 @@ public class DamageAllAi extends SpellAiLogic * a int. * @return a {@link forge.CardList} object. */ - private List getKillableCreatures(final Map params, final Card source, final Player player, final int dmg) { - String validC = params.containsKey("ValidCards") ? params.get("ValidCards") : ""; + private List getKillableCreatures(final SpellAbility sa, final Player player, final int dmg) { + final Card source = sa.getSourceCard(); + String validC = sa.hasParam("ValidCards") ? sa.getParam("ValidCards") : ""; // TODO: X may be something different than X paid List list = @@ -148,11 +148,11 @@ public class DamageAllAi extends SpellAiLogic } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final Card source = sa.getSourceCard(); String validP = ""; - final String damage = params.get("NumDmg"); + final String damage = sa.getParam("NumDmg"); int dmg = AbilityFactory.calculateAmount(sa.getSourceCard(), damage, sa); @@ -162,8 +162,8 @@ public class DamageAllAi extends SpellAiLogic source.setSVar("PayX", Integer.toString(dmg)); } - if (params.containsKey("ValidPlayers")) { - validP = params.get("ValidPlayers"); + if (sa.hasParam("ValidPlayers")) { + validP = sa.getParam("ValidPlayers"); } Player enemy = ai.getOpponent(); @@ -190,8 +190,8 @@ public class DamageAllAi extends SpellAiLogic } // Evaluate creatures getting killed - final List humanList = this.getKillableCreatures(params, sa.getSourceCard(), enemy, dmg); - final List computerList = this.getKillableCreatures(params, sa.getSourceCard(), ai, dmg); + final List humanList = this.getKillableCreatures(sa, enemy, dmg); + final List computerList = this.getKillableCreatures(sa, ai, dmg); if ((CardFactoryUtil.evaluateCreatureList(computerList) + 50) >= CardFactoryUtil .evaluateCreatureList(humanList)) { return false; diff --git a/src/main/java/forge/card/abilityfactory/ai/DamageDealAi.java b/src/main/java/forge/card/abilityfactory/ai/DamageDealAi.java index 8d1714eb6d9..3814239a354 100644 --- a/src/main/java/forge/card/abilityfactory/ai/DamageDealAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/DamageDealAi.java @@ -2,7 +2,6 @@ package forge.card.abilityfactory.ai; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Random; import com.google.common.base.Predicate; @@ -26,8 +25,8 @@ import forge.util.MyRandom; public class DamageDealAi extends DamageAiBase { @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player ai) { - final String damage = params.get("NumDmg"); + public boolean chkAIDrawback(SpellAbility sa, Player ai) { + final String damage = sa.getParam("NumDmg"); int dmg = AbilityFactory.calculateAmount(sa.getSourceCard(), damage, sa); final Card source = sa.getSourceCard(); @@ -37,19 +36,19 @@ public class DamageDealAi extends DamageAiBase { dmg = ComputerUtil.determineLeftoverMana(sa, ai); source.setSVar("PayX", Integer.toString(dmg)); } - if(!this.damageTargetAI(ai, params, sa, dmg)) { + if(!this.damageTargetAI(ai, sa, dmg)) { return false; } return true; } @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { - final Cost abCost = sa.getAbilityFactory().getAbCost(); + final Cost abCost = sa.getPayCosts(); final Card source = sa.getSourceCard(); - final String damage = params.get("NumDmg"); + final String damage = sa.getParam("NumDmg"); int dmg = AbilityFactory.calculateAmount(sa.getSourceCard(), damage, sa); if (damage.equals("X") && sa.getSVar(damage).equals("Count$xPaid")) { @@ -81,7 +80,7 @@ public class DamageDealAi extends DamageAiBase { return Singletons.getModel().getGame().getPhaseHandler().is(PhaseType.END_OF_TURN, ai.getOpponent()); } - if (sa.getAbilityFactory().isAbility()) { + if (sa.isAbility()) { final Random r = MyRandom.getRandom(); // prevent run-away // activations if (r.nextFloat() > Math.pow(.9, sa.getActivationsThisTurn())) { @@ -89,7 +88,7 @@ public class DamageDealAi extends DamageAiBase { } } - if (!this.damageTargetAI(ai, params, sa, dmg)) { + if (!this.damageTargetAI(ai, sa, dmg)) { return false; } @@ -98,7 +97,7 @@ public class DamageDealAi extends DamageAiBase { final Target tgt = sa.getTarget(); if (tgt != null && tgt.getTargetPlayers().isEmpty()) { int actualPay = 0; - final boolean noPrevention = params.containsKey("NoPrevention"); + final boolean noPrevention = sa.hasParam("NoPrevention"); final ArrayList cards = tgt.getTargetCards(); for (final Card c : cards) { final int adjDamage = c.getEnoughDamageToKill(dmg, source, false, noPrevention); @@ -127,7 +126,7 @@ public class DamageDealAi extends DamageAiBase { * a boolean. * @return a {@link forge.Card} object. */ - private Card dealDamageChooseTgtC(final Player ai, final Map params, final SpellAbility saMe, final int d, final boolean noPrevention, + private Card dealDamageChooseTgtC(final Player ai, final SpellAbility saMe, final int d, final boolean noPrevention, final Player pl, final boolean mandatory) { // wait until stack is empty (prevents duplicate kills) @@ -139,7 +138,7 @@ public class DamageDealAi extends DamageAiBase { List hPlay = CardLists.getValidCards(pl.getCardsIn(ZoneType.Battlefield), tgt.getValidTgts(), ai, source); final ArrayList objects = tgt.getTargets(); - if (params.containsKey("TargetUnique")) { + if (saMe.hasParam("TargetUnique")) { objects.addAll(TargetSelection.getUniqueTargets(saMe)); } for (final Object o : objects) { @@ -195,14 +194,14 @@ public class DamageDealAi extends DamageAiBase { * a int. * @return a boolean. */ - private boolean damageTargetAI(final Player ai, final Map params, final SpellAbility saMe, final int dmg) { + private boolean damageTargetAI(final Player ai, final SpellAbility saMe, final int dmg) { final Target tgt = saMe.getTarget(); if (tgt == null) { - return this.damageChooseNontargeted(saMe, params, dmg); + return this.damageChooseNontargeted(saMe, dmg); } - return this.damageChoosingTargets(ai, params, saMe, tgt, dmg, false, false); + return this.damageChoosingTargets(ai, saMe, tgt, dmg, false, false); } /** @@ -220,9 +219,9 @@ public class DamageDealAi extends DamageAiBase { * a boolean. * @return a boolean. */ - private boolean damageChoosingTargets(final Player ai, final Map params, final SpellAbility saMe, final Target tgt, final int dmg, + private boolean damageChoosingTargets(final Player ai, final SpellAbility saMe, final Target tgt, final int dmg, final boolean isTrigger, final boolean mandatory) { - final boolean noPrevention = params.containsKey("NoPrevention"); + final boolean noPrevention = saMe.hasParam("NoPrevention"); final PhaseHandler phase = Singletons.getModel().getGame().getPhaseHandler(); // target loop @@ -239,7 +238,7 @@ public class DamageDealAi extends DamageAiBase { } } - final Card c = this.dealDamageChooseTgtC(ai, params, saMe, dmg, noPrevention, enemy, false); + final Card c = this.dealDamageChooseTgtC(ai, saMe, dmg, noPrevention, enemy, false); if (c != null) { tgt.addTarget(c); continue; @@ -260,7 +259,7 @@ public class DamageDealAi extends DamageAiBase { continue; } } else if (tgt.canTgtCreature()) { - final Card c = this.dealDamageChooseTgtC(ai, params, saMe, dmg, noPrevention, enemy, mandatory); + final Card c = this.dealDamageChooseTgtC(ai, saMe, dmg, noPrevention, enemy, mandatory); if (c != null) { tgt.addTarget(c); continue; @@ -290,7 +289,7 @@ public class DamageDealAi extends DamageAiBase { } else { // If the trigger is mandatory, gotta choose my own stuff // now - return this.damageChooseRequiredTargets(ai, params, saMe, tgt, dmg, mandatory); + return this.damageChooseRequiredTargets(ai, saMe, tgt, dmg, mandatory); } } else { // TODO is this good enough? for up to amounts? @@ -311,16 +310,16 @@ public class DamageDealAi extends DamageAiBase { * a int. * @return a boolean. */ - private boolean damageChooseNontargeted(final SpellAbility saMe, final Map params, final int dmg) { + private boolean damageChooseNontargeted(final SpellAbility saMe, final int dmg) { // TODO: Improve circumstances where the Defined Damage is unwanted - final ArrayList objects = AbilityFactory.getDefinedObjects(saMe.getSourceCard(), params.get("Defined"), saMe); + final ArrayList objects = AbilityFactory.getDefinedObjects(saMe.getSourceCard(), saMe.getParam("Defined"), saMe); for (final Object o : objects) { if (o instanceof Card) { // Card c = (Card)o; } else if (o instanceof Player) { final Player p = (Player) o; - final int restDamage = p.predictDamage(dmg, saMe.getAbilityFactory().getHostCard(), false); + final int restDamage = p.predictDamage(dmg, saMe.getSourceCard(), false); if (p.isComputer() && p.canLoseLife() && ((restDamage + 3) >= p.getLife()) && (restDamage > 0)) { // from this spell will kill me return false; @@ -348,15 +347,15 @@ public class DamageDealAi extends DamageAiBase { * a boolean. * @return a boolean. */ - private boolean damageChooseRequiredTargets(final Player ai, final Map params, final SpellAbility saMe, final Target tgt, final int dmg, + private boolean damageChooseRequiredTargets(final Player ai, final SpellAbility saMe, final Target tgt, final int dmg, final boolean mandatory) { // this is for Triggered targets that are mandatory - final boolean noPrevention = params.containsKey("NoPrevention"); + final boolean noPrevention = saMe.hasParam("NoPrevention"); while (tgt.getNumTargeted() < tgt.getMinTargets(saMe.getSourceCard(), saMe)) { // TODO: Consider targeting the planeswalker if (tgt.canTgtCreature()) { - final Card c = this.dealDamageChooseTgtC(ai, params, saMe, dmg, noPrevention, ai, + final Card c = this.dealDamageChooseTgtC(ai, saMe, dmg, noPrevention, ai, mandatory); if (c != null) { tgt.addTarget(c); @@ -378,10 +377,10 @@ public class DamageDealAi extends DamageAiBase { } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final Card source = sa.getSourceCard(); - final String damage = params.get("NumDmg"); + final String damage = sa.getParam("NumDmg"); int dmg = AbilityFactory.calculateAmount(sa.getSourceCard(), damage, sa); if (damage.equals("X") && sa.getSVar(damage).equals("Count$xPaid")) { @@ -393,18 +392,18 @@ public class DamageDealAi extends DamageAiBase { final Target tgt = sa.getTarget(); if (tgt == null) { // If it's not mandatory check a few things - if (!mandatory && !this.damageChooseNontargeted(sa, params, dmg)) { + if (!mandatory && !this.damageChooseNontargeted(sa, dmg)) { return false; } } else { - if (!this.damageChoosingTargets(ai, params, sa, tgt, dmg, true, mandatory) && !mandatory) { + if (!this.damageChoosingTargets(ai, sa, tgt, dmg, true, mandatory) && !mandatory) { return false; } if (damage.equals("X") && source.getSVar(damage).equals("Count$xPaid")) { // If I can kill my target by paying less mana, do it int actualPay = 0; - final boolean noPrevention = params.containsKey("NoPrevention"); + final boolean noPrevention = sa.hasParam("NoPrevention"); final ArrayList cards = tgt.getTargetCards(); //target is a player if (cards.isEmpty()) { diff --git a/src/main/java/forge/card/abilityfactory/ai/DamageEachAi.java b/src/main/java/forge/card/abilityfactory/ai/DamageEachAi.java index 3366b5e9005..1af2549d741 100644 --- a/src/main/java/forge/card/abilityfactory/ai/DamageEachAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/DamageEachAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import forge.card.abilityfactory.AbilityFactory; import forge.card.spellability.SpellAbility; @@ -13,7 +12,7 @@ public class DamageEachAi extends DamageAiBase { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final Target tgt = sa.getTarget(); if (tgt != null && sa.canTarget(ai.getOpponent())) { @@ -21,13 +20,13 @@ public class DamageEachAi extends DamageAiBase { sa.getTarget().addTarget(ai.getOpponent()); } - final String damage = params.get("NumDmg"); + final String damage = sa.getParam("NumDmg"); final int iDmg = AbilityFactory.calculateAmount(sa.getSourceCard(), damage, sa); return this.shouldTgtP(ai, sa, iDmg, false); } @Override - public boolean chkAIDrawback(Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { // check AI life before playing this drawback? return true; } @@ -36,9 +35,9 @@ public class DamageEachAi extends DamageAiBase { * @see forge.card.abilityfactory.SpellAiLogic#doTriggerAINoCost(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility, boolean) */ @Override - protected boolean doTriggerAINoCost(Player ai, Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { - return canPlayAI(ai, params, sa); + return canPlayAI(ai, sa); } } \ No newline at end of file diff --git a/src/main/java/forge/card/abilityfactory/ai/DamagePreventAi.java b/src/main/java/forge/card/abilityfactory/ai/DamagePreventAi.java index fe424d18f1e..6c659e5d069 100644 --- a/src/main/java/forge/card/abilityfactory/ai/DamagePreventAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/DamagePreventAi.java @@ -22,13 +22,13 @@ import forge.game.zone.ZoneType; public class DamagePreventAi extends SpellAiLogic { @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { - final Card hostCard = sa.getAbilityFactory().getHostCard(); + protected boolean canPlayAI(Player ai, SpellAbility sa) { + final Card hostCard = sa.getSourceCard(); boolean chance = false; final Cost cost = sa.getPayCosts(); @@ -55,11 +55,11 @@ public class DamagePreventAi extends SpellAiLogic { // As far as I can tell these Defined Cards will only have one of // them final ArrayList objects = AbilityFactory.getDefinedObjects(sa.getSourceCard(), - params.get("Defined"), sa); + sa.getParam("Defined"), sa); // react to threats on the stack if (Singletons.getModel().getGame().getStack().size() > 0) { - final ArrayList threatenedObjects = AbilityFactory.predictThreatenedObjects(sa.getActivatingPlayer(), sa.getAbilityFactory()); + final ArrayList threatenedObjects = AbilityFactory.predictThreatenedObjects(sa.getActivatingPlayer(), sa); for (final Object o : objects) { if (threatenedObjects.contains(o)) { chance = true; @@ -151,7 +151,7 @@ public class DamagePreventAi extends SpellAiLogic { } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { boolean chance = false; final Target tgt = sa.getTarget(); if (tgt == null) { @@ -183,7 +183,7 @@ public class DamagePreventAi extends SpellAiLogic { tgt.resetTargets(); // filter AIs battlefield by what I can target List targetables = Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield); - targetables = CardLists.getValidCards(targetables, tgt.getValidTgts(), ai, sa.getAbilityFactory().getHostCard()); + targetables = CardLists.getValidCards(targetables, tgt.getValidTgts(), ai, sa.getSourceCard()); final List compTargetables = CardLists.filterControlledBy(targetables, ai); if (targetables.size() == 0) { diff --git a/src/main/java/forge/card/abilityfactory/ai/DamagePreventAllAi.java b/src/main/java/forge/card/abilityfactory/ai/DamagePreventAllAi.java index c028d704107..4e1b5dc65e7 100644 --- a/src/main/java/forge/card/abilityfactory/ai/DamagePreventAllAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/DamagePreventAllAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import forge.Card; import forge.Singletons; @@ -17,7 +16,7 @@ public class DamagePreventAllAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#chkAIDrawback(java.util.Map, forge.card.spellability.SpellAbility, forge.game.player.Player) */ @Override - public boolean chkAIDrawback(Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } @@ -25,8 +24,8 @@ public class DamagePreventAllAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { - final Card hostCard = sa.getAbilityFactory().getHostCard(); + protected boolean canPlayAI(Player ai, SpellAbility sa) { + final Card hostCard = sa.getSourceCard(); boolean chance = false; final Cost cost = sa.getPayCosts(); @@ -61,7 +60,7 @@ public class DamagePreventAllAi extends SpellAiLogic { } @Override - protected boolean doTriggerAINoCost(Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { boolean chance = true; return chance; diff --git a/src/main/java/forge/card/abilityfactory/ai/DebuffAi.java b/src/main/java/forge/card/abilityfactory/ai/DebuffAi.java index ceb6092b8b3..97093857eb4 100644 --- a/src/main/java/forge/card/abilityfactory/ai/DebuffAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/DebuffAi.java @@ -28,7 +28,7 @@ public class DebuffAi extends SpellAiLogic { // ************************************************************************* @Override - protected boolean canPlayAI(final Player ai, final java.util.Map params, final SpellAbility sa) { + protected boolean canPlayAI(final Player ai, final SpellAbility sa) { // if there is no target and host card isn't in play, don't activate final Card source = sa.getSourceCard(); if ((sa.getTarget() == null) && !source.isInPlay()) { @@ -72,7 +72,7 @@ public class DebuffAi extends SpellAiLogic { } if ((sa.getTarget() == null) || !sa.getTarget().doesTarget()) { - List cards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa); + List cards = AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa); if (!cards.isEmpty()) { cards = CardLists.filter(cards, new Predicate() { @@ -82,7 +82,7 @@ public class DebuffAi extends SpellAiLogic { return false; } // don't add duplicate negative keywords - return params.containsKey("Keywords") && c.hasAnyKeyword(Arrays.asList(params.get("Keywords").split(" & "))); + return sa.hasParam("Keywords") && c.hasAnyKeyword(Arrays.asList(sa.getParam("Keywords").split(" & "))); } }); } @@ -90,19 +90,19 @@ public class DebuffAi extends SpellAiLogic { return false; } } else { - return debuffTgtAI(ai, sa, params.containsKey("Keywords") ? Arrays.asList(params.get("Keywords").split(" & ")) : new ArrayList(), false); + return debuffTgtAI(ai, sa, sa.hasParam("Keywords") ? Arrays.asList(sa.getParam("Keywords").split(" & ")) : new ArrayList(), false); } return true; } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player ai) { + public boolean chkAIDrawback(SpellAbility sa, Player ai) { if ((sa.getTarget() == null) || !sa.getTarget().doesTarget()) { // TODO - copied from AF_Pump.pumpDrawbackAI() - what should be // here? } else { - return debuffTgtAI(ai, sa, params.containsKey("Keywords") ? Arrays.asList(params.get("Keywords").split(" & ")) : new ArrayList(), false); + return debuffTgtAI(ai, sa, sa.hasParam("Keywords") ? Arrays.asList(sa.getParam("Keywords").split(" & ")) : new ArrayList(), false); } return true; @@ -279,8 +279,8 @@ public class DebuffAi extends SpellAiLogic { } // pumpMandatoryTarget() @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { - final List kws = params.containsKey("Keywords") ? Arrays.asList(params.get("Keywords").split(" & ")) : new ArrayList(); + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { + final List kws = sa.hasParam("Keywords") ? Arrays.asList(sa.getParam("Keywords").split(" & ")) : new ArrayList(); if (sa.getTarget() == null) { if (mandatory) { diff --git a/src/main/java/forge/card/abilityfactory/ai/DebuffAllAi.java b/src/main/java/forge/card/abilityfactory/ai/DebuffAllAi.java index 85f4ef549b1..09ed29a9a52 100644 --- a/src/main/java/forge/card/abilityfactory/ai/DebuffAllAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/DebuffAllAi.java @@ -18,11 +18,11 @@ import forge.util.MyRandom; public class DebuffAllAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { String valid = ""; final Random r = MyRandom.getRandom(); // final Card source = sa.getSourceCard(); - final Card hostCard = sa.getAbilityFactory().getHostCard(); + final Card hostCard = sa.getSourceCard(); final Player opp = ai.getOpponent(); final boolean chance = r.nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn()); // to @@ -30,8 +30,8 @@ public class DebuffAllAi extends SpellAiLogic { // runaway // activations - if (params.containsKey("ValidCards")) { - valid = params.get("ValidCards"); + if (sa.hasParam("ValidCards")) { + valid = sa.getParam("ValidCards"); } List comp = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), valid, hostCard.getController(), hostCard); @@ -60,7 +60,7 @@ public class DebuffAllAi extends SpellAiLogic { } // debuffAllCanPlayAI() @Override - protected boolean doTriggerAINoCost(Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { return true; } @@ -68,15 +68,15 @@ public class DebuffAllAi extends SpellAiLogic { *

* debuffAllChkDrawbackAI. *

- * - * @param af - * a {@link forge.card.abilityfactory.AbilityFactory} object. * @param sa * a {@link forge.card.spellability.SpellAbility} object. + * @param af + * a {@link forge.card.abilityfactory.AbilityFactory} object. + * * @return a boolean. */ @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } diff --git a/src/main/java/forge/card/abilityfactory/ai/DelayedTriggerAi.java b/src/main/java/forge/card/abilityfactory/ai/DelayedTriggerAi.java index 330cb8ee53d..4f4bfc49f81 100644 --- a/src/main/java/forge/card/abilityfactory/ai/DelayedTriggerAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/DelayedTriggerAi.java @@ -9,10 +9,9 @@ public class DelayedTriggerAi extends SpellAiLogic { private static AbilityFactory tempCreator = new AbilityFactory(); @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, forge.game.player.Player aiPlayer) { - final String svarName = params.get("Execute"); - final SpellAbility trigsa = tempCreator.getAbility(sa.getAbilityFactory().getHostCard() - .getSVar(svarName), sa.getAbilityFactory().getHostCard()); + public boolean chkAIDrawback(SpellAbility sa, forge.game.player.Player aiPlayer) { + final String svarName = sa.getParam("Execute"); + final SpellAbility trigsa = tempCreator.getAbility(sa.getSourceCard().getSVar(svarName), sa.getSourceCard()); if (trigsa instanceof AbilitySub) { return ((AbilitySub) trigsa).chkAIDrawback(); @@ -22,22 +21,21 @@ public class DelayedTriggerAi extends SpellAiLogic { } @Override - protected boolean doTriggerAINoCost(forge.game.player.Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { - final String svarName = params.get("Execute"); - final SpellAbility trigsa = tempCreator.getAbility(sa.getAbilityFactory().getHostCard() - .getSVar(svarName), sa.getAbilityFactory().getHostCard()); + protected boolean doTriggerAINoCost(forge.game.player.Player aiPlayer, SpellAbility sa, boolean mandatory) { + final String svarName = sa.getParam("Execute"); + final SpellAbility trigsa = tempCreator.getAbility(sa.getSourceCard().getSVar(svarName), sa.getSourceCard()); - if (!params.containsKey("OptionalDecider")) { + if (!sa.hasParam("OptionalDecider")) { return trigsa.doTrigger(true); } else { - return trigsa.doTrigger(!params.get("OptionalDecider").equals("You")); + return trigsa.doTrigger(!sa.getParam("OptionalDecider").equals("You")); } } @Override - protected boolean canPlayAI(forge.game.player.Player aiPlayer, java.util.Map params, SpellAbility sa) { - final String svarName = params.get("Execute"); - final SpellAbility trigsa = tempCreator.getAbility(sa.getAbilityFactory().getHostCard().getSVar(svarName), sa.getAbilityFactory().getHostCard()); + protected boolean canPlayAI(forge.game.player.Player aiPlayer, SpellAbility sa) { + final String svarName = sa.getParam("Execute"); + final SpellAbility trigsa = tempCreator.getAbility(sa.getSourceCard().getSVar(svarName), sa.getSourceCard()); return trigsa.canPlayAI(); } diff --git a/src/main/java/forge/card/abilityfactory/ai/DestroyAi.java b/src/main/java/forge/card/abilityfactory/ai/DestroyAi.java index 890b2358501..bef8e82fe85 100644 --- a/src/main/java/forge/card/abilityfactory/ai/DestroyAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/DestroyAi.java @@ -2,7 +2,6 @@ package forge.card.abilityfactory.ai; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Random; import com.google.common.base.Predicate; @@ -30,21 +29,21 @@ public class DestroyAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#chkAIDrawback(java.util.Map, forge.card.spellability.SpellAbility, forge.game.player.Player) */ @Override - public boolean chkAIDrawback(Map params, SpellAbility sa, Player ai) { - return canPlayAI(ai, params, sa); + public boolean chkAIDrawback(SpellAbility sa, Player ai) { + return canPlayAI(ai, sa); } /* (non-Javadoc) * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { // AI needs to be expanded, since this function can be pretty complex // based on what the expected targets could be final Random r = MyRandom.getRandom(); final Cost abCost = sa.getPayCosts(); final Target abTgt = sa.getTarget(); final Card source = sa.getSourceCard(); - final boolean noRegen = params.containsKey("NoRegen"); + final boolean noRegen = sa.hasParam("NoRegen"); List list; if (abCost != null) { @@ -69,8 +68,8 @@ public class DestroyAi extends SpellAiLogic { abTgt.resetTargets(); list = CardLists.getTargetableCards(ai.getOpponent().getCardsIn(ZoneType.Battlefield), sa); list = CardLists.getValidCards(list, abTgt.getValidTgts(), source.getController(), source); - if (params.containsKey("AITgts")) { - list = CardLists.getValidCards(list, params.get("AITgts"), sa.getActivatingPlayer(), source); + if (sa.hasParam("AITgts")) { + list = CardLists.getValidCards(list, sa.getParam("AITgts"), sa.getActivatingPlayer(), source); } list = CardLists.getNotKeyword(list, "Indestructible"); if (!AbilityFactory.playReusable(ai, sa)) { @@ -135,8 +134,8 @@ public class DestroyAi extends SpellAiLogic { abTgt.addTarget(choice); } } else { - if (params.containsKey("Defined")) { - list = new ArrayList(AbilityFactory.getDefinedCards(source, params.get("Defined"), sa)); + if (sa.hasParam("Defined")) { + list = new ArrayList(AbilityFactory.getDefinedCards(source, sa.getParam("Defined"), sa)); if (list.isEmpty() || !CardLists.filterControlledBy(list, ai).isEmpty() || CardLists.getNotKeyword(list, "Indestructible").isEmpty()) { @@ -149,10 +148,10 @@ public class DestroyAi extends SpellAiLogic { } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final Target tgt = sa.getTarget(); final Card source = sa.getSourceCard(); - final boolean noRegen = params.containsKey("NoRegen"); + final boolean noRegen = sa.hasParam("NoRegen"); final Player opp = ai.getOpponent(); if (tgt != null) { List list; diff --git a/src/main/java/forge/card/abilityfactory/ai/DestroyAllAi.java b/src/main/java/forge/card/abilityfactory/ai/DestroyAllAi.java index fcd004251a3..cb18aab7339 100644 --- a/src/main/java/forge/card/abilityfactory/ai/DestroyAllAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/DestroyAllAi.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.ai; import java.util.List; -import java.util.Map; import java.util.Random; import com.google.common.base.Predicate; @@ -32,15 +31,15 @@ public class DestroyAllAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#doTriggerAINoCost(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility, boolean) */ @Override - protected boolean doTriggerAINoCost(Player ai, Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final Card source = sa.getSourceCard(); final Target tgt = sa.getTarget(); String valid = ""; if (mandatory) { return true; } - if (params.containsKey("ValidCards")) { - valid = params.get("ValidCards"); + if (sa.hasParam("ValidCards")) { + valid = sa.getParam("ValidCards"); } List humanlist = CardLists.getValidCards(ai.getOpponent().getCardsIn(ZoneType.Battlefield), valid.split(","), source.getController(), source); @@ -74,12 +73,12 @@ public class DestroyAllAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } @Override - protected boolean canPlayAI(final Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(final Player ai, SpellAbility sa) { // AI needs to be expanded, since this function can be pretty complex // based on what the expected targets could be final Random r = MyRandom.getRandom(); @@ -87,8 +86,8 @@ public class DestroyAllAi extends SpellAiLogic { final Card source = sa.getSourceCard(); String valid = ""; - if (params.containsKey("ValidCards")) { - valid = params.get("ValidCards"); + if (sa.hasParam("ValidCards")) { + valid = sa.getParam("ValidCards"); } if (valid.contains("X") && source.getSVar("X").equals("Count$xPaid")) { diff --git a/src/main/java/forge/card/abilityfactory/ai/DigAi.java b/src/main/java/forge/card/abilityfactory/ai/DigAi.java index c666144c8cc..aedb528e908 100644 --- a/src/main/java/forge/card/abilityfactory/ai/DigAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/DigAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import java.util.Random; import forge.Singletons; @@ -19,7 +18,7 @@ public class DigAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { double chance = .4; // 40 percent chance with instant speed stuff if (AbilityFactory.isSorcerySpeed(sa)) { chance = .667; // 66.7% chance for sorcery speed (since it will @@ -48,8 +47,8 @@ public class DigAi extends SpellAiLogic { } // Don't use draw abilities before main 2 if possible - if (Singletons.getModel().getGame().getPhaseHandler().getPhase().isBefore(PhaseType.MAIN2) && !params.containsKey("ActivationPhases") - && !params.containsKey("DestinationZone")) { + if (Singletons.getModel().getGame().getPhaseHandler().getPhase().isBefore(PhaseType.MAIN2) && !sa.hasParam("ActivationPhases") + && !sa.hasParam("DestinationZone")) { return false; } @@ -61,12 +60,12 @@ public class DigAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final Target tgt = sa.getTarget(); if (sa.getTarget() != null) { diff --git a/src/main/java/forge/card/abilityfactory/ai/DigUntilAi.java b/src/main/java/forge/card/abilityfactory/ai/DigUntilAi.java index e7a08ae2166..94bcee09ecb 100644 --- a/src/main/java/forge/card/abilityfactory/ai/DigUntilAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/DigUntilAi.java @@ -14,7 +14,7 @@ public class DigUntilAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { double chance = .4; // 40 percent chance with instant speed stuff if (AbilityFactory.isSorcerySpeed(sa)) { chance = .667; // 66.7% chance for sorcery speed (since it will @@ -46,12 +46,12 @@ public class DigUntilAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final Target tgt = sa.getTarget(); diff --git a/src/main/java/forge/card/abilityfactory/ai/DiscardAi.java b/src/main/java/forge/card/abilityfactory/ai/DiscardAi.java index 17b14fa3b20..09ef1008ebd 100644 --- a/src/main/java/forge/card/abilityfactory/ai/DiscardAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/DiscardAi.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.ai; import java.util.List; -import java.util.Map; import java.util.Random; import forge.Card; @@ -21,7 +20,7 @@ import forge.util.MyRandom; public class DiscardAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final Target tgt = sa.getTarget(); final Card source = sa.getSourceCard(); final Cost abCost = sa.getPayCosts(); @@ -55,7 +54,7 @@ public class DiscardAi extends SpellAiLogic { } else { // TODO: Add appropriate restrictions final List players = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), - params.get("Defined"), sa); + sa.getParam("Defined"), sa); if (players.size() == 1) { if (players.get(0).isComputer()) { @@ -75,8 +74,8 @@ public class DiscardAi extends SpellAiLogic { } } - if (!params.get("Mode").equals("Hand") && !params.get("Mode").equals("RevealDiscardAll")) { - if (params.get("NumCards").equals("X") && source.getSVar("X").equals("Count$xPaid")) { + if (!sa.getParam("Mode").equals("Hand") && !sa.getParam("Mode").equals("RevealDiscardAll")) { + if (sa.getParam("NumCards").equals("X") && source.getSVar("X").equals("Count$xPaid")) { // Set PayX here to maximum value. final int cardsToDiscard = Math.min(ComputerUtil.determineLeftoverMana(sa, ai), ai.getOpponent() .getCardsIn(ZoneType.Hand).size()); @@ -86,12 +85,12 @@ public class DiscardAi extends SpellAiLogic { // Don't use draw abilities before main 2 if possible if (Singletons.getModel().getGame().getPhaseHandler().getPhase().isBefore(PhaseType.MAIN2) - && !params.containsKey("ActivationPhases")) { + && !sa.hasParam("ActivationPhases")) { return false; } // Don't tap creatures that may be able to block - if (ComputerUtil.waitForBlocking(sa) && !params.containsKey("ActivationPhases")) { + if (ComputerUtil.waitForBlocking(sa) && !sa.hasParam("ActivationPhases")) { return false; } @@ -121,7 +120,7 @@ public class DiscardAi extends SpellAiLogic { @Override - protected boolean doTriggerAINoCost(Player ai, Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final Target tgt = sa.getTarget(); if (tgt != null) { Player opp = ai.getOpponent(); @@ -140,7 +139,7 @@ public class DiscardAi extends SpellAiLogic { } // discardTrigger() @Override - public boolean chkAIDrawback(Map params, SpellAbility sa, Player ai) { + public boolean chkAIDrawback(SpellAbility sa, Player ai) { // Drawback AI improvements // if parent draws cards, make sure cards in hand + cards drawn > 0 final Target tgt = sa.getTarget(); diff --git a/src/main/java/forge/card/abilityfactory/ai/DrainManaAi.java b/src/main/java/forge/card/abilityfactory/ai/DrainManaAi.java index 4880b76d93f..cf398044ea2 100644 --- a/src/main/java/forge/card/abilityfactory/ai/DrainManaAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/DrainManaAi.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.ai; import java.util.ArrayList; -import java.util.Map; import java.util.Random; import forge.Card; @@ -15,7 +14,7 @@ import forge.util.MyRandom; public class DrainManaAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { // AI cannot use this properly until he can use SAs during Humans turn final Target tgt = sa.getTarget(); @@ -28,7 +27,7 @@ public class DrainManaAi extends SpellAiLogic { // assume we are looking to tap human's stuff // TODO - check for things with untap abilities, and don't tap // those. - final ArrayList defined = AbilityFactory.getDefinedPlayers(source, params.get("Defined"), sa); + final ArrayList defined = AbilityFactory.getDefinedPlayers(source, sa.getParam("Defined"), sa); if (!defined.contains(opp)) { return false; @@ -42,7 +41,7 @@ public class DrainManaAi extends SpellAiLogic { } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final Player opp = ai.getOpponent(); final Target tgt = sa.getTarget(); @@ -52,7 +51,7 @@ public class DrainManaAi extends SpellAiLogic { if (mandatory) { return true; } else { - final ArrayList defined = AbilityFactory.getDefinedPlayers(source, params.get("Defined"), sa); + final ArrayList defined = AbilityFactory.getDefinedPlayers(source, sa.getParam("Defined"), sa); if (!defined.contains(opp)) { return false; @@ -69,7 +68,7 @@ public class DrainManaAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(Map params, SpellAbility sa, Player ai) { + public boolean chkAIDrawback(SpellAbility sa, Player ai) { // AI cannot use this properly until he can use SAs during Humans turn final Target tgt = sa.getTarget(); final Card source = sa.getSourceCard(); @@ -77,7 +76,7 @@ public class DrainManaAi extends SpellAiLogic { boolean randomReturn = true; if (tgt == null) { - final ArrayList defined = AbilityFactory.getDefinedPlayers(source, params.get("Defined"), sa); + final ArrayList defined = AbilityFactory.getDefinedPlayers(source, sa.getParam("Defined"), sa); if (defined.contains(ai)) { return false; diff --git a/src/main/java/forge/card/abilityfactory/ai/DrawAi.java b/src/main/java/forge/card/abilityfactory/ai/DrawAi.java index 52bc90fbc77..c35f85c955f 100644 --- a/src/main/java/forge/card/abilityfactory/ai/DrawAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/DrawAi.java @@ -20,7 +20,6 @@ package forge.card.abilityfactory.ai; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Random; @@ -48,7 +47,7 @@ public class DrawAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final Target tgt = sa.getTarget(); final Card source = sa.getSourceCard(); @@ -85,7 +84,7 @@ public class DrawAi extends SpellAiLogic { } - final boolean bFlag = targetAI(ai, params, sa, false); + final boolean bFlag = targetAI(ai, sa, false); if (!bFlag) { return false; @@ -100,7 +99,7 @@ public class DrawAi extends SpellAiLogic { // Don't use draw abilities before main 2 if possible if (Singletons.getModel().getGame().getPhaseHandler().getPhase().isBefore(PhaseType.MAIN2) - && !params.containsKey("ActivationPhases")) { + && !sa.hasParam("ActivationPhases")) { return false; } @@ -128,7 +127,7 @@ public class DrawAi extends SpellAiLogic { return randomReturn; } - private boolean targetAI(final Player ai, final Map params, final SpellAbility sa, final boolean mandatory) { + private boolean targetAI(final Player ai, final SpellAbility sa, final boolean mandatory) { final Target tgt = sa.getTarget(); final Card source = sa.getSourceCard(); @@ -145,12 +144,12 @@ public class DrawAi extends SpellAiLogic { } int numCards = 1; - if (params.containsKey("NumCards")) { - numCards = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumCards"), sa); + if (sa.hasParam("NumCards")) { + numCards = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("NumCards"), sa); } boolean xPaid = false; - final String num = params.get("NumCards"); + final String num = sa.getParam("NumCards"); if ((num != null) && num.equals("X") && source.getSVar(num).equals("Count$xPaid")) { // Set PayX here to maximum value. if (sa instanceof AbilitySub) { @@ -206,7 +205,7 @@ public class DrawAi extends SpellAiLogic { } else { // Don't draw too many cards and then risk discarding cards // at EOT - if (!(params.containsKey("NextUpkeep") || (sa instanceof AbilitySub)) && !mandatory) { + if (!(sa.hasParam("NextUpkeep") || (sa instanceof AbilitySub)) && !mandatory) { return false; } } @@ -243,7 +242,7 @@ public class DrawAi extends SpellAiLogic { && !sa.isTrigger()) { // Don't draw too many cards and then risk discarding cards at // EOT - if (!(params.containsKey("NextUpkeep") || (sa instanceof AbilitySub)) && !mandatory) { + if (!(sa.hasParam("NextUpkeep") || (sa instanceof AbilitySub)) && !mandatory) { return false; } } @@ -253,8 +252,8 @@ public class DrawAi extends SpellAiLogic { @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { - return targetAI(ai, params, sa, mandatory); + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { + return targetAI(ai, sa, mandatory); } } diff --git a/src/main/java/forge/card/abilityfactory/ai/EffectAi.java b/src/main/java/forge/card/abilityfactory/ai/EffectAi.java index e725a9a7188..4096a79d30b 100644 --- a/src/main/java/forge/card/abilityfactory/ai/EffectAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/EffectAi.java @@ -22,15 +22,15 @@ import forge.util.MyRandom; public class EffectAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final GameState game = Singletons.getModel().getGame(); final Random r = MyRandom.getRandom(); boolean randomReturn = r.nextFloat() <= .6667; final Player opp = ai.getOpponent(); String logic = ""; - if (params.containsKey("AILogic")) { - logic = params.get("AILogic"); + if (sa.hasParam("AILogic")) { + logic = sa.getParam("AILogic"); final PhaseHandler phase = game.getPhaseHandler(); if (logic.equals("BeginningOfOppTurn")) { if (phase.isPlayerTurn(ai) || phase.getPhase().isAfter(PhaseType.DRAW)) { @@ -93,10 +93,10 @@ public class EffectAi extends SpellAiLogic { return false; } - final String stackable = params.get("Stackable"); + final String stackable = sa.getParam("Stackable"); if ((stackable != null) && stackable.equals("False")) { - String name = params.get("Name"); + String name = sa.getParam("Name"); if (name == null) { name = sa.getSourceCard().getName() + "'s Effect"; } @@ -120,7 +120,7 @@ public class EffectAi extends SpellAiLogic { } @Override - protected boolean doTriggerAINoCost(Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { // TODO: Add targeting effects return true; diff --git a/src/main/java/forge/card/abilityfactory/ai/EndTurnAi.java b/src/main/java/forge/card/abilityfactory/ai/EndTurnAi.java index fa46cd9c3d7..d2e116b5dec 100644 --- a/src/main/java/forge/card/abilityfactory/ai/EndTurnAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/EndTurnAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import forge.card.abilityfactory.SpellAiLogic; import forge.card.spellability.SpellAbility; @@ -13,18 +12,18 @@ import forge.game.player.Player; public class EndTurnAi extends SpellAiLogic { @Override - protected boolean doTriggerAINoCost(Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { return mandatory; } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { return false; } + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return false; } /* (non-Javadoc) * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player aiPlayer, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { return false; } } diff --git a/src/main/java/forge/card/abilityfactory/ai/FightAi.java b/src/main/java/forge/card/abilityfactory/ai/FightAi.java index df3cdd9b182..070c77274a0 100644 --- a/src/main/java/forge/card/abilityfactory/ai/FightAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/FightAi.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.ai; import java.util.List; -import java.util.Map; import java.util.Random; import com.google.common.base.Predicate; @@ -20,7 +19,7 @@ public class FightAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { Target tgt = sa.getTarget(); tgt.resetTargets(); @@ -41,7 +40,7 @@ public class FightAi extends SpellAiLogic { return false; } - if (params.containsKey("TargetsFromDifferentZone")) { + if (sa.hasParam("TargetsFromDifferentZone")) { if (humCreatures.size() > 0 && aiCreatures.size() > 0) { for (Card humanCreature : humCreatures) { for (Card aiCreature : aiCreatures) { @@ -66,7 +65,7 @@ public class FightAi extends SpellAiLogic { if (creature1.equals(creature2)) { continue; } - if (params.containsKey("TargetsWithoutSameCreatureType") + if (sa.hasParam("TargetsWithoutSameCreatureType") && creature1.sharesCreatureTypeWith(creature2)) { continue; } @@ -84,7 +83,7 @@ public class FightAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { // check AI life before playing this drawback? return true; } @@ -93,7 +92,7 @@ public class FightAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#doTriggerAINoCost(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility, boolean) */ @Override - protected boolean doTriggerAINoCost(Player aiPlayer, Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { return false; } diff --git a/src/main/java/forge/card/abilityfactory/ai/FogAi.java b/src/main/java/forge/card/abilityfactory/ai/FogAi.java index 427f7e3d2b2..f7ed5203061 100644 --- a/src/main/java/forge/card/abilityfactory/ai/FogAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/FogAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import forge.Singletons; import forge.card.abilityfactory.SpellAiLogic; @@ -15,7 +14,7 @@ public class FogAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { // AI should only activate this during Human's Declare Blockers phase if (Singletons.getModel().getGame().getPhaseHandler().isPlayerTurn(sa.getActivatingPlayer())) { return false; @@ -39,7 +38,7 @@ public class FogAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player ai) { + public boolean chkAIDrawback(SpellAbility sa, Player ai) { // AI should only activate this during Human's turn boolean chance; @@ -54,7 +53,7 @@ public class FogAi extends SpellAiLogic { } @Override - protected boolean doTriggerAINoCost(Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { boolean chance; if (Singletons.getModel().getGame().getPhaseHandler().isPlayerTurn(sa.getActivatingPlayer().getOpponent())) { chance = Singletons.getModel().getGame().getPhaseHandler().getPhase().isBefore(PhaseType.COMBAT_FIRST_STRIKE_DAMAGE); diff --git a/src/main/java/forge/card/abilityfactory/ai/GameLossAi.java b/src/main/java/forge/card/abilityfactory/ai/GameLossAi.java index 38b23871b0b..7947902ad8d 100644 --- a/src/main/java/forge/card/abilityfactory/ai/GameLossAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/GameLossAi.java @@ -7,7 +7,7 @@ import forge.game.player.Player; public class GameLossAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final Player opp = ai.getOpponent(); if (opp.cantLose()) { return false; @@ -28,12 +28,12 @@ public class GameLossAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { // Phage the Untouchable // (Final Fortune would need to attach it's delayed trigger to a diff --git a/src/main/java/forge/card/abilityfactory/ai/GameWinAi.java b/src/main/java/forge/card/abilityfactory/ai/GameWinAi.java index 32416b0bafb..2e1f622f61c 100644 --- a/src/main/java/forge/card/abilityfactory/ai/GameWinAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/GameWinAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import forge.card.abilityfactory.SpellAiLogic; import forge.card.spellability.SpellAbility; @@ -11,7 +10,7 @@ public class GameWinAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { if (ai.cantWin()) { return false; } @@ -27,12 +26,12 @@ public class GameWinAi extends SpellAiLogic { @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } @Override - protected boolean doTriggerAINoCost(Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { return true; } diff --git a/src/main/java/forge/card/abilityfactory/ai/LifeExchangeAi.java b/src/main/java/forge/card/abilityfactory/ai/LifeExchangeAi.java index 89287638ebc..4eaf2add8f0 100644 --- a/src/main/java/forge/card/abilityfactory/ai/LifeExchangeAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/LifeExchangeAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import java.util.Random; import forge.card.abilityfactory.SpellAiLogic; @@ -20,7 +19,7 @@ public class LifeExchangeAi extends SpellAiLogic { * forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player aiPlayer, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { final Random r = MyRandom.getRandom(); final int myLife = aiPlayer.getLife(); Player opponent = aiPlayer.getOpponent(); diff --git a/src/main/java/forge/card/abilityfactory/ai/LifeGainAi.java b/src/main/java/forge/card/abilityfactory/ai/LifeGainAi.java index 730ee9bfd06..8cdb4a170f4 100644 --- a/src/main/java/forge/card/abilityfactory/ai/LifeGainAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/LifeGainAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import java.util.Random; import forge.Card; @@ -29,13 +28,13 @@ public class LifeGainAi extends SpellAiLogic { * @see forge.card.abilityfactory.AbilityFactoryAlterLife.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final Random r = MyRandom.getRandom(); final Cost abCost = sa.getPayCosts(); final Card source = sa.getSourceCard(); final int life = ai.getLife(); - final String amountStr = params.get("LifeAmount"); + final String amountStr = sa.getParam("LifeAmount"); int lifeAmount = 0; if (amountStr.equals("X") && source.getSVar(amountStr).equals("Count$xPaid")) { // Set PayX here to maximum value. @@ -63,7 +62,7 @@ public class LifeGainAi extends SpellAiLogic { } } if (Singletons.getModel().getGame().getPhaseHandler().getPhase().isBefore(PhaseType.COMBAT_DECLARE_BLOCKERS) - && !params.containsKey("ActivationPhases")) { + && !sa.hasParam("ActivationPhases")) { return false; } boolean lifeCritical = life <= 5; @@ -94,7 +93,7 @@ public class LifeGainAi extends SpellAiLogic { // Don't use lifegain before main 2 if possible if (!lifeCritical && Singletons.getModel().getGame().getPhaseHandler().getPhase().isBefore(PhaseType.MAIN2) - && !params.containsKey("ActivationPhases")) { + && !sa.hasParam("ActivationPhases")) { return false; } @@ -133,18 +132,18 @@ public class LifeGainAi extends SpellAiLogic { *

* gainLifeDoTriggerAINoCost. *

- * - * @param af - * a {@link forge.card.abilityfactory.AbilityFactory} object. * @param sa * a {@link forge.card.spellability.SpellAbility} object. * @param mandatory * a boolean. + * @param af + * a {@link forge.card.abilityfactory.AbilityFactory} object. + * * @return a boolean. */ @Override - protected boolean doTriggerAINoCost(final Player ai, final Map params, - final SpellAbility sa, final boolean mandatory) { + protected boolean doTriggerAINoCost(final Player ai, final SpellAbility sa, + final boolean mandatory) { // If the Target is gaining life, target self. // if the Target is modifying how much life is gained, this needs to be @@ -162,7 +161,7 @@ public class LifeGainAi extends SpellAiLogic { } final Card source = sa.getSourceCard(); - final String amountStr = params.get("LifeAmount"); + final String amountStr = sa.getParam("LifeAmount"); if (amountStr.equals("X") && source.getSVar(amountStr).equals("Count$xPaid")) { // Set PayX here to maximum value. final int xPay = ComputerUtil.determineLeftoverMana(sa, ai); diff --git a/src/main/java/forge/card/abilityfactory/ai/LifeLoseAi.java b/src/main/java/forge/card/abilityfactory/ai/LifeLoseAi.java index 8c90d0fec50..a130b7c1713 100644 --- a/src/main/java/forge/card/abilityfactory/ai/LifeLoseAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/LifeLoseAi.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.ai; import java.util.ArrayList; -import java.util.Map; import java.util.Random; import forge.Card; @@ -23,14 +22,14 @@ public class LifeLoseAi extends SpellAiLogic { * @see forge.card.abilityfactory.AbilityFactoryAlterLife.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final Random r = MyRandom.getRandom(); final Cost abCost = sa.getPayCosts(); final Card source = sa.getSourceCard(); boolean priority = false; - final String amountStr = params.get("LifeAmount"); + final String amountStr = sa.getParam("LifeAmount"); // TODO handle proper calculation of X values based on Cost and what // would be paid @@ -81,7 +80,7 @@ public class LifeLoseAi extends SpellAiLogic { // Don't use loselife before main 2 if possible if (Singletons.getModel().getGame().getPhaseHandler().getPhase().isBefore(PhaseType.MAIN2) - && !params.containsKey("ActivationPhases") && !priority) { + && !sa.hasParam("ActivationPhases") && !priority) { return false; } @@ -110,8 +109,8 @@ public class LifeLoseAi extends SpellAiLogic { } @Override - protected boolean doTriggerAINoCost(final Player ai, final Map params, - final SpellAbility sa, final boolean mandatory) { + protected boolean doTriggerAINoCost(final Player ai, final SpellAbility sa, + final boolean mandatory) { final Target tgt = sa.getTarget(); if (tgt != null) { if (sa.canTarget(ai.getOpponent())) { @@ -124,7 +123,7 @@ public class LifeLoseAi extends SpellAiLogic { } final Card source = sa.getSourceCard(); - final String amountStr = params.get("LifeAmount"); + final String amountStr = sa.getParam("LifeAmount"); int amount = 0; if (amountStr.equals("X") && source.getSVar(amountStr).equals("Count$xPaid")) { // Set PayX here to maximum value. @@ -139,7 +138,7 @@ public class LifeLoseAi extends SpellAiLogic { if (tgt != null) { tgtPlayers = tgt.getTargetPlayers(); } else { - tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa); + tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), sa.getParam("Defined"), sa); } if (!mandatory && tgtPlayers.contains(ai)) { diff --git a/src/main/java/forge/card/abilityfactory/ai/LifeSetAi.java b/src/main/java/forge/card/abilityfactory/ai/LifeSetAi.java index 1e922919b2c..502d2dcc9dc 100644 --- a/src/main/java/forge/card/abilityfactory/ai/LifeSetAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/LifeSetAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import java.util.Random; import forge.Card; @@ -18,14 +17,14 @@ import forge.util.MyRandom; public class LifeSetAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final Random r = MyRandom.getRandom(); // Ability_Cost abCost = sa.getPayCosts(); final Card source = sa.getSourceCard(); final int myLife = ai.getLife(); final Player opponent = ai.getOpponent(); final int hlife = opponent.getLife(); - final String amountStr = params.get("LifeAmount"); + final String amountStr = sa.getParam("LifeAmount"); if (!ai.canGainLife()) { return false; @@ -33,7 +32,7 @@ public class LifeSetAi extends SpellAiLogic { // Don't use setLife before main 2 if possible if (Singletons.getModel().getGame().getPhaseHandler().getPhase().isBefore(PhaseType.MAIN2) - && !params.containsKey("ActivationPhases")) { + && !sa.hasParam("ActivationPhases")) { return false; } @@ -79,7 +78,7 @@ public class LifeSetAi extends SpellAiLogic { } } } else { - if (params.containsKey("Each") && params.get("Defined").equals("Each")) { + if (sa.hasParam("Each") && sa.getParam("Defined").equals("Each")) { if (amount == 0) { return false; } else if (myLife > amount) { // will decrease computer's @@ -103,13 +102,13 @@ public class LifeSetAi extends SpellAiLogic { } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final int myLife = ai.getLife(); final Player opponent = ai.getOpponent(); final int hlife = opponent.getLife(); final Card source = sa.getSourceCard(); - final String amountStr = params.get("LifeAmount"); + final String amountStr = sa.getParam("LifeAmount"); int amount; if (amountStr.equals("X") && source.getSVar(amountStr).equals("Count$xPaid")) { diff --git a/src/main/java/forge/card/abilityfactory/ai/MillAi.java b/src/main/java/forge/card/abilityfactory/ai/MillAi.java index ea86472454e..8dadbd51517 100644 --- a/src/main/java/forge/card/abilityfactory/ai/MillAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/MillAi.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.ai; import java.util.List; -import java.util.Map; import java.util.Random; import forge.Card; @@ -21,7 +20,7 @@ import forge.util.MyRandom; public class MillAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final Card source = sa.getSourceCard(); final Cost abCost = sa.getPayCosts(); @@ -45,14 +44,14 @@ public class MillAi extends SpellAiLogic { } - if (!targetAI(ai, params, sa, false)) { + if (!targetAI(ai, sa, false)) { return false; } final Random r = MyRandom.getRandom(); // Don't use draw abilities before main 2 if possible - if (Singletons.getModel().getGame().getPhaseHandler().getPhase().isBefore(PhaseType.MAIN2) && !params.containsKey("ActivationPhases")) { + if (Singletons.getModel().getGame().getPhaseHandler().getPhase().isBefore(PhaseType.MAIN2) && !sa.hasParam("ActivationPhases")) { return false; } @@ -74,7 +73,7 @@ public class MillAi extends SpellAiLogic { boolean randomReturn = r.nextFloat() <= Math.pow(chance, sa.getActivationsThisTurn() + 1); - if (params.get("NumCards").equals("X") && source.getSVar("X").startsWith("Count$xPaid")) { + if (sa.getParam("NumCards").equals("X") && source.getSVar("X").startsWith("Count$xPaid")) { // Set PayX here to maximum value. final int cardsToDiscard = Math.min(ComputerUtil.determineLeftoverMana(sa, ai), ai.getOpponent().getCardsIn(ZoneType.Library).size()); @@ -92,7 +91,7 @@ public class MillAi extends SpellAiLogic { return randomReturn; } - private boolean targetAI(final Player ai, final Map params, final SpellAbility sa, final boolean mandatory) { + private boolean targetAI(final Player ai, final SpellAbility sa, final boolean mandatory) { final Target tgt = sa.getTarget(); Player opp = ai.getOpponent(); @@ -106,7 +105,7 @@ public class MillAi extends SpellAiLogic { return false; } - final int numCards = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumCards"), sa); + final int numCards = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("NumCards"), sa); final List pLibrary = opp.getCardsIn(ZoneType.Library); @@ -136,19 +135,19 @@ public class MillAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(Map params, SpellAbility sa, Player aiPlayer) { - return targetAI(aiPlayer, params, sa, true); + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { + return targetAI(aiPlayer, sa, true); } @Override - protected boolean doTriggerAINoCost(Player aiPlayer, Map params, SpellAbility sa, boolean mandatory) { - if (!targetAI(aiPlayer, params, sa, mandatory)) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { + if (!targetAI(aiPlayer, sa, mandatory)) { return false; } final Card source = sa.getSourceCard(); - if (params.get("NumCards").equals("X") && source.getSVar("X").equals("Count$xPaid")) { + if (sa.getParam("NumCards").equals("X") && source.getSVar("X").equals("Count$xPaid")) { // Set PayX here to maximum value. final int cardsToDiscard = Math.min(ComputerUtil.determineLeftoverMana(sa, aiPlayer), aiPlayer.getOpponent() .getCardsIn(ZoneType.Library).size()); diff --git a/src/main/java/forge/card/abilityfactory/ai/MustAttackAi.java b/src/main/java/forge/card/abilityfactory/ai/MustAttackAi.java index 0598df7b063..a1659f94570 100644 --- a/src/main/java/forge/card/abilityfactory/ai/MustAttackAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/MustAttackAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import forge.card.abilityfactory.SpellAiLogic; import forge.card.spellability.SpellAbility; @@ -9,13 +8,13 @@ import forge.game.player.Player; public class MustAttackAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player aiPlayer, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { // disabled for the AI for now. Only for Gideon Jura at this time. return false; } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { // AI should only activate this during Human's turn // TODO - implement AI return false; @@ -25,7 +24,7 @@ public class MustAttackAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#doTriggerAINoCost(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility, boolean) */ @Override - protected boolean doTriggerAINoCost(Player aiPlayer, Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { boolean chance; diff --git a/src/main/java/forge/card/abilityfactory/ai/MustBlockAi.java b/src/main/java/forge/card/abilityfactory/ai/MustBlockAi.java index a5d91e68aea..88b2e9bab0e 100644 --- a/src/main/java/forge/card/abilityfactory/ai/MustBlockAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/MustBlockAi.java @@ -22,19 +22,19 @@ import forge.game.zone.ZoneType; public class MustBlockAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player aiPlayer, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { // disabled for the AI until he/she can make decisions about who to make // block return false; } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return false; } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final Card source = sa.getSourceCard(); final Target abTgt = sa.getTarget(); @@ -44,9 +44,9 @@ public class MustBlockAi extends SpellAiLogic { } Card attacker = null; - if (params.containsKey("DefinedAttacker")) { + if (sa.hasParam("DefinedAttacker")) { final ArrayList cards = AbilityFactory.getDefinedCards(sa.getSourceCard(), - params.get("DefinedAttacker"), sa); + sa.getParam("DefinedAttacker"), sa); if (cards.isEmpty()) { return false; } diff --git a/src/main/java/forge/card/abilityfactory/ai/PhasesAi.java b/src/main/java/forge/card/abilityfactory/ai/PhasesAi.java index a8083626851..b011cbcb41c 100644 --- a/src/main/java/forge/card/abilityfactory/ai/PhasesAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/PhasesAi.java @@ -2,7 +2,6 @@ package forge.card.abilityfactory.ai; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Random; import forge.Card; @@ -22,7 +21,7 @@ public class PhasesAi extends SpellAiLogic * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player aiPlayer, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { // This still needs to be fleshed out final Target tgt = sa.getTarget(); final Card source = sa.getSourceCard(); @@ -32,7 +31,7 @@ public class PhasesAi extends SpellAiLogic ArrayList tgtCards; if (tgt == null) { - tgtCards = AbilityFactory.getDefinedCards(source, params.get("Defined"), sa); + tgtCards = AbilityFactory.getDefinedCards(source, sa.getParam("Defined"), sa); if (tgtCards.contains(source)) { // Protect it from something } else { @@ -52,7 +51,7 @@ public class PhasesAi extends SpellAiLogic } @Override - protected boolean doTriggerAINoCost(Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { final Target tgt = sa.getTarget(); if (tgt == null) @@ -69,7 +68,7 @@ public class PhasesAi extends SpellAiLogic } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { final Target tgt = sa.getTarget(); boolean randomReturn = true; diff --git a/src/main/java/forge/card/abilityfactory/ai/PlayAi.java b/src/main/java/forge/card/abilityfactory/ai/PlayAi.java index d875f5667d8..0463499f00b 100644 --- a/src/main/java/forge/card/abilityfactory/ai/PlayAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/PlayAi.java @@ -2,7 +2,6 @@ package forge.card.abilityfactory.ai; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Random; import forge.Card; @@ -25,14 +24,14 @@ public class PlayAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#chkAIDrawback(java.util.Map, forge.card.spellability.SpellAbility, forge.game.player.Player) */ @Override - public boolean chkAIDrawback(Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { - final Cost abCost = sa.getAbilityFactory().getAbCost(); - final Card source = sa.getAbilityFactory().getHostCard(); + protected boolean canPlayAI(Player ai, SpellAbility sa) { + final Cost abCost = sa.getPayCosts(); + final Card source = sa.getSourceCard(); final Random r = MyRandom.getRandom(); @@ -72,8 +71,8 @@ public class PlayAi extends SpellAiLogic { return false; } tgt.addTarget(CardFactoryUtil.getBestAI(cards)); - } else if (!params.containsKey("Valid")) { - cards = new ArrayList(AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa)); + } else if (!sa.hasParam("Valid")) { + cards = new ArrayList(AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa)); if (cards.isEmpty()) { return false; } diff --git a/src/main/java/forge/card/abilityfactory/ai/PoisonAi.java b/src/main/java/forge/card/abilityfactory/ai/PoisonAi.java index d32b5775c87..88e20548f25 100644 --- a/src/main/java/forge/card/abilityfactory/ai/PoisonAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/PoisonAi.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.ai; import java.util.ArrayList; -import java.util.Map; import forge.Card; import forge.Singletons; @@ -26,7 +25,7 @@ public class PoisonAi extends SpellAiLogic { * forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final Cost abCost = sa.getPayCosts(); final Card source = sa.getSourceCard(); // int humanPoison = AllZone.getHumanPlayer().getPoisonCounters(); @@ -52,7 +51,7 @@ public class PoisonAi extends SpellAiLogic { // Don't use poison before main 2 if possible if (Singletons.getModel().getGame().getPhaseHandler().getPhase().isBefore(PhaseType.MAIN2) - && !params.containsKey("ActivationPhases")) { + && !sa.hasParam("ActivationPhases")) { return false; } @@ -72,14 +71,14 @@ public class PoisonAi extends SpellAiLogic { } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final Target tgt = sa.getTarget(); if (tgt != null) { tgt.addTarget(ai.getOpponent()); } else { final ArrayList players = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), - params.get("Defined"), sa); + sa.getParam("Defined"), sa); for (final Player p : players) { if (!mandatory && p.isComputer() && (p.getPoisonCounters() > p.getOpponent().getPoisonCounters())) { return false; diff --git a/src/main/java/forge/card/abilityfactory/ai/ProtectAi.java b/src/main/java/forge/card/abilityfactory/ai/ProtectAi.java index a8cfb171668..169da40f714 100644 --- a/src/main/java/forge/card/abilityfactory/ai/ProtectAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/ProtectAi.java @@ -3,8 +3,6 @@ package forge.card.abilityfactory.ai; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Map; - import com.google.common.base.Predicate; import forge.Card; @@ -66,8 +64,8 @@ public class ProtectAi extends SpellAiLogic { * a {@link forge.card.abilityfactory.AbilityFactory} object. * @return a {@link forge.CardList} object. */ - private static List getProtectCreatures(final Player ai, final Map params, final SpellAbility sa) { - final ArrayList gains = AbilityFactory.getProtectionList(params); + private static List getProtectCreatures(final Player ai, final SpellAbility sa) { + final ArrayList gains = AbilityFactory.getProtectionList(sa); List list = ai.getCreaturesInPlay(); list = CardLists.filter(list, new Predicate() { @@ -110,8 +108,8 @@ public class ProtectAi extends SpellAiLogic { } // getProtectCreatures() @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { - final Card hostCard = sa.getAbilityFactory().getHostCard(); + protected boolean canPlayAI(Player ai, SpellAbility sa) { + final Card hostCard = sa.getSourceCard(); // if there is no target and host card isn't in play, don't activate if ((sa.getTarget() == null) && !hostCard.isInPlay()) { return false; @@ -150,7 +148,7 @@ public class ProtectAi extends SpellAiLogic { } if ((sa.getTarget() == null) || !sa.getTarget().doesTarget()) { - final ArrayList cards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa); + final ArrayList cards = AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa); if (cards.size() == 0) { return false; @@ -164,13 +162,13 @@ public class ProtectAi extends SpellAiLogic { * } */ } else { - return protectTgtAI(ai, params, sa, false); + return protectTgtAI(ai, sa, false); } return false; } // protectPlayAI() - private boolean protectTgtAI(final Player ai, final Map params, final SpellAbility sa, final boolean mandatory) { + private boolean protectTgtAI(final Player ai, final SpellAbility sa, final boolean mandatory) { if (!mandatory && Singletons.getModel().getGame().getPhaseHandler().getPhase().isAfter(PhaseType.COMBAT_DECLARE_BLOCKERS_INSTANT_ABILITY)) { return false; } @@ -179,7 +177,7 @@ public class ProtectAi extends SpellAiLogic { final Target tgt = sa.getTarget(); tgt.resetTargets(); - List list = getProtectCreatures(ai, params, sa); + List list = getProtectCreatures(ai, sa); list = CardLists.getValidCards(list, tgt.getValidTgts(), sa.getActivatingPlayer(), sa.getSourceCard()); @@ -210,7 +208,7 @@ public class ProtectAi extends SpellAiLogic { } if (list.isEmpty()) { - return mandatory && protectMandatoryTarget(ai, params, sa, mandatory); + return mandatory && protectMandatoryTarget(ai, sa, mandatory); } // Don't target cards that will die. @@ -229,7 +227,7 @@ public class ProtectAi extends SpellAiLogic { if (list.isEmpty()) { if ((tgt.getNumTargeted() < tgt.getMinTargets(source, sa)) || (tgt.getNumTargeted() == 0)) { if (mandatory) { - return protectMandatoryTarget(ai, params, sa, mandatory); + return protectMandatoryTarget(ai, sa, mandatory); } tgt.resetTargets(); @@ -248,7 +246,7 @@ public class ProtectAi extends SpellAiLogic { return true; } // protectTgtAI() - private static boolean protectMandatoryTarget(final Player ai, final Map params, final SpellAbility sa, final boolean mandatory) { + private static boolean protectMandatoryTarget(final Player ai, final SpellAbility sa, final boolean mandatory) { List list = Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield); @@ -269,14 +267,14 @@ public class ProtectAi extends SpellAiLogic { pref = CardLists.filter(pref, new Predicate() { @Override public boolean apply(final Card c) { - return !hasProtectionFromAll(c, AbilityFactory.getProtectionList(params)); + return !hasProtectionFromAll(c, AbilityFactory.getProtectionList(sa)); } }); final List pref2 = CardLists.filterControlledBy(list, ai); pref = CardLists.filter(pref, new Predicate() { @Override public boolean apply(final Card c) { - return !hasProtectionFromAny(c, AbilityFactory.getProtectionList(params)); + return !hasProtectionFromAny(c, AbilityFactory.getProtectionList(sa)); } }); final List forced = CardLists.filterControlledBy(list, ai); @@ -342,27 +340,27 @@ public class ProtectAi extends SpellAiLogic { } // protectMandatoryTarget() @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { if (sa.getTarget() == null) { if (mandatory) { return true; } } else { - return protectTgtAI(ai, params, sa, mandatory); + return protectTgtAI(ai, sa, mandatory); } return true; } // protectTriggerAI @Override - public boolean chkAIDrawback(Map params, SpellAbility sa, Player ai) { - final Card host = sa.getAbilityFactory().getHostCard(); + public boolean chkAIDrawback(SpellAbility sa, Player ai) { + final Card host = sa.getSourceCard(); if ((sa.getTarget() == null) || !sa.getTarget().doesTarget()) { if (host.isCreature()) { // TODO } } else { - return protectTgtAI(ai, params, sa, false); + return protectTgtAI(ai, sa, false); } return true; diff --git a/src/main/java/forge/card/abilityfactory/ai/ProtectAllAi.java b/src/main/java/forge/card/abilityfactory/ai/ProtectAllAi.java index d4ed838cbbf..c1845fecaa2 100644 --- a/src/main/java/forge/card/abilityfactory/ai/ProtectAllAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/ProtectAllAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import forge.Card; import forge.card.abilityfactory.SpellAiLogic; @@ -12,8 +11,8 @@ import forge.game.player.Player; public class ProtectAllAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { - final Card hostCard = sa.getAbilityFactory().getHostCard(); + protected boolean canPlayAI(Player ai, SpellAbility sa) { + final Card hostCard = sa.getSourceCard(); // if there is no target and host card isn't in play, don't activate if ((sa.getTarget() == null) && !hostCard.isInPlay()) { return false; @@ -43,7 +42,7 @@ public class ProtectAllAi extends SpellAiLogic { @Override - protected boolean doTriggerAINoCost(Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { return true; } @@ -51,7 +50,7 @@ public class ProtectAllAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#chkAIDrawback(java.util.Map, forge.card.spellability.SpellAbility, forge.game.player.Player) */ @Override - public boolean chkAIDrawback(Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } // protectAllDrawbackAI() } \ No newline at end of file diff --git a/src/main/java/forge/card/abilityfactory/ai/PumpAi.java b/src/main/java/forge/card/abilityfactory/ai/PumpAi.java index b2fd1608e32..a08bc58e758 100644 --- a/src/main/java/forge/card/abilityfactory/ai/PumpAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/PumpAi.java @@ -3,8 +3,6 @@ package forge.card.abilityfactory.ai; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Map; - import com.google.common.base.Predicate; import forge.Card; @@ -30,12 +28,12 @@ public class PumpAi extends PumpAiBase { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final Cost cost = sa.getPayCosts(); final PhaseHandler ph = Singletons.getModel().getGame().getPhaseHandler(); - final List keywords = params.containsKey("KW") ? Arrays.asList(params.get("KW").split(" & ")) : new ArrayList(); - final String numDefense = params.containsKey("NumDef") ? params.get("NumDef") : ""; - final String numAttack = params.containsKey("NumAtt") ? params.get("NumAtt") : ""; + final List keywords = sa.hasParam("KW") ? Arrays.asList(sa.getParam("KW").split(" & ")) : new ArrayList(); + final String numDefense = sa.hasParam("NumDef") ? sa.getParam("NumDef") : ""; + final String numAttack = sa.hasParam("NumAtt") ? sa.getParam("NumAtt") : ""; if (!CostUtil.checkLifeCost(ai, cost, sa.getSourceCard(), 4, null)) { return false; @@ -69,7 +67,7 @@ public class PumpAi extends PumpAiBase { if ((Singletons.getModel().getGame().getStack().size() == 0) && ph.getPhase().isBefore(PhaseType.COMBAT_BEGIN)) { // Instant-speed pumps should not be cast outside of combat when the // stack is empty - if (!sa.getAbilityFactory().isCurse() && !AbilityFactory.isSorcerySpeed(sa)) { + if (!sa.isCurse() && !AbilityFactory.isSorcerySpeed(sa)) { return false; } } else if (Singletons.getModel().getGame().getStack().size() > 0) { @@ -126,9 +124,9 @@ public class PumpAi extends PumpAiBase { } //Untargeted - if ((sa.getAbilityFactory().getAbTgt() == null) || !sa.getAbilityFactory().getAbTgt().doesTarget()) { + if ((sa.getTarget() == null) || !sa.getTarget().doesTarget()) { final ArrayList cards = AbilityFactory.getDefinedCards(sa.getSourceCard(), - params.get("Defined"), sa); + sa.getParam("Defined"), sa); if (cards.size() == 0) { return false; @@ -137,7 +135,7 @@ public class PumpAi extends PumpAiBase { // when this happens we need to expand AI to consider if its ok for // everything? for (final Card card : cards) { - if (sa.getAbilityFactory().isCurse()) { + if (sa.isCurse()) { if (card.getController().isComputer()) { return false; } @@ -155,22 +153,22 @@ public class PumpAi extends PumpAiBase { return false; } //Targeted - if (!this.pumpTgtAI(ai, sa, params, defense, attack, false)) { + if (!this.pumpTgtAI(ai, sa, defense, attack, false)) { return false; } return true; } // pumpPlayAI() - private boolean pumpTgtAI(final Player ai, final SpellAbility sa, final Map params, final int defense, final int attack, final boolean mandatory) { - final List keywords = params.containsKey("KW") ? Arrays.asList(params.get("KW").split(" & ")) : new ArrayList(); + private boolean pumpTgtAI(final Player ai, final SpellAbility sa, final int defense, final int attack, final boolean mandatory) { + final List keywords = sa.hasParam("KW") ? Arrays.asList(sa.getParam("KW").split(" & ")) : new ArrayList(); if (!mandatory && !sa.isTrigger() && Singletons.getModel().getGame().getPhaseHandler().getPhase().isAfter(PhaseType.COMBAT_DECLARE_BLOCKERS_INSTANT_ABILITY) - && !(sa.getAbilityFactory().isCurse() && (defense < 0)) + && !(sa.isCurse() && (defense < 0)) && !this.containsNonCombatKeyword(keywords) - && !sa.getAbilityFactory().getMapParams().containsKey("UntilYourNextTurn")) { + && !sa.hasParam("UntilYourNextTurn")) { return false; } @@ -178,8 +176,8 @@ public class PumpAi extends PumpAiBase { final Target tgt = sa.getTarget(); tgt.resetTargets(); List list = new ArrayList(); - if (params.containsKey("AILogic")) { - if (params.get("AILogic").equals("HighestPower")) { + if (sa.hasParam("AILogic")) { + if (sa.getParam("AILogic").equals("HighestPower")) { list = CardLists.getValidCards(CardLists.filter(Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield), Presets.CREATURES), tgt.getValidTgts(), sa.getActivatingPlayer(), sa.getSourceCard()); list = CardLists.getTargetableCards(list, sa); CardLists.sortAttack(list); @@ -190,7 +188,7 @@ public class PumpAi extends PumpAiBase { return false; } } - } else if (sa.getAbilityFactory().isCurse()) { + } else if (sa.isCurse()) { if (sa.canTarget(opp)) { tgt.addTarget(opp); return true; @@ -229,7 +227,7 @@ public class PumpAi extends PumpAiBase { return mandatory && this.pumpMandatoryTarget(ai, sa, mandatory); } - if (!sa.getAbilityFactory().isCurse()) { + if (!sa.isCurse()) { // Don't target cards that will die. list = CardLists.filter(list, new Predicate() { @Override @@ -286,7 +284,7 @@ public class PumpAi extends PumpAiBase { List forced; final Card source = sa.getSourceCard(); - if (sa.getAbilityFactory().isCurse()) { + if (sa.isCurse()) { pref = CardLists.filterControlledBy(list, opp); forced = CardLists.filterControlledBy(list, ai); } else { @@ -337,10 +335,10 @@ public class PumpAi extends PumpAiBase { } // pumpMandatoryTarget() @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final Card source = sa.getSourceCard(); - final String numDefense = params.containsKey("NumDef") ? params.get("NumDef") : ""; - final String numAttack = params.containsKey("NumAtt") ? params.get("NumAtt") : ""; + final String numDefense = sa.hasParam("NumDef") ? sa.getParam("NumDef") : ""; + final String numAttack = sa.hasParam("NumAtt") ? sa.getParam("NumAtt") : ""; int defense; if (numDefense.contains("X") && source.getSVar("X").equals("Count$xPaid")) { @@ -373,19 +371,19 @@ public class PumpAi extends PumpAiBase { return true; } } else { - return this.pumpTgtAI(ai, sa, params, defense, attack, mandatory); + return this.pumpTgtAI(ai, sa, defense, attack, mandatory); } return true; } // pumpTriggerAI @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player ai) { + public boolean chkAIDrawback(SpellAbility sa, Player ai) { final Card source = sa.getSourceCard(); - final String numDefense = params.containsKey("NumDef") ? params.get("NumDef") : ""; - final String numAttack = params.containsKey("NumAtt") ? params.get("NumAtt") : ""; + final String numDefense = sa.hasParam("NumDef") ? sa.getParam("NumDef") : ""; + final String numAttack = sa.hasParam("NumAtt") ? sa.getParam("NumAtt") : ""; int defense; if (numDefense.contains("X") && source.getSVar("X").equals("Count$xPaid")) { @@ -401,7 +399,7 @@ public class PumpAi extends PumpAiBase { attack = AbilityFactory.calculateAmount(sa.getSourceCard(), numAttack, sa); } - if ((sa.getAbilityFactory().getAbTgt() == null) || !sa.getAbilityFactory().getAbTgt().doesTarget()) { + if ((sa.getTarget() == null) || !sa.getTarget().doesTarget()) { if (source.isCreature()) { if (!source.hasKeyword("Indestructible") && ((source.getNetDefense() + defense) <= source.getDamage())) { @@ -413,7 +411,7 @@ public class PumpAi extends PumpAiBase { } } else { //Targeted - if (!this.pumpTgtAI(ai, sa, params, defense, attack, false)) { + if (!this.pumpTgtAI(ai, sa, defense, attack, false)) { return false; } } diff --git a/src/main/java/forge/card/abilityfactory/ai/PumpAiBase.java b/src/main/java/forge/card/abilityfactory/ai/PumpAiBase.java index 6f9264d0545..7e670d57e6f 100644 --- a/src/main/java/forge/card/abilityfactory/ai/PumpAiBase.java +++ b/src/main/java/forge/card/abilityfactory/ai/PumpAiBase.java @@ -28,10 +28,10 @@ public abstract class PumpAiBase extends SpellAiLogic { public boolean containsUsefulKeyword(final Player ai, final List keywords, final Card card, final SpellAbility sa, final int attack) { for (final String keyword : keywords) { - if (!sa.getAbilityFactory().isCurse() && isUsefulPumpKeyword(ai, keyword, card, sa, attack)) { + if (!sa.isCurse() && isUsefulPumpKeyword(ai, keyword, card, sa, attack)) { return true; } - if (sa.getAbilityFactory().isCurse() && isUsefulCurseKeyword(ai, keyword, card, sa)) { + if (sa.isCurse() && isUsefulCurseKeyword(ai, keyword, card, sa)) { return true; } } @@ -63,7 +63,7 @@ public abstract class PumpAiBase extends SpellAiLogic { return false; } } else if (keyword.endsWith("CARDNAME can't attack or block.")) { - if (sa.getAbilityFactory().getMapParams().containsKey("UntilYourNextTurn")) { + if (sa.hasParam("UntilYourNextTurn")) { if (CombatUtil.canAttack(card, human) || CombatUtil.canBlock(card, true)) { return true; } @@ -328,7 +328,7 @@ public abstract class PumpAiBase extends SpellAiLogic { return false; } } else if (keyword.equals("Shroud") || keyword.equals("Hexproof")) { - if (!AbilityFactory.predictThreatenedObjects(sa.getActivatingPlayer(), sa.getAbilityFactory()).contains(card)) { + if (!AbilityFactory.predictThreatenedObjects(sa.getActivatingPlayer(), sa).contains(card)) { return false; } } else if (keyword.equals("Islandwalk")) { diff --git a/src/main/java/forge/card/abilityfactory/ai/PumpAllAi.java b/src/main/java/forge/card/abilityfactory/ai/PumpAllAi.java index 2fd24c76760..eff28e523be 100644 --- a/src/main/java/forge/card/abilityfactory/ai/PumpAllAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/PumpAllAi.java @@ -3,7 +3,6 @@ package forge.card.abilityfactory.ai; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Map; import com.google.common.base.Predicate; @@ -26,13 +25,13 @@ public class PumpAllAi extends PumpAiBase { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(final Player ai, Map params, final SpellAbility sa) { + protected boolean canPlayAI(final Player ai, final SpellAbility sa) { String valid = ""; final Card source = sa.getSourceCard(); - final int power = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumAtt"), sa); - final int defense = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumDef"), sa); - final List keywords = params.containsKey("KW") ? Arrays.asList(params.get("KW").split(" & ")) : new ArrayList(); + final int power = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("NumAtt"), sa); + final int defense = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("NumDef"), sa); + final List keywords = sa.hasParam("KW") ? Arrays.asList(sa.getParam("KW").split(" & ")) : new ArrayList(); final PhaseType phase = Singletons.getModel().getGame().getPhaseHandler().getPhase(); @@ -40,8 +39,8 @@ public class PumpAllAi extends PumpAiBase { return false; } - if (params.containsKey("ValidCards")) { - valid = params.get("ValidCards"); + if (sa.hasParam("ValidCards")) { + valid = sa.getParam("ValidCards"); } final Player opp = ai.getOpponent(); @@ -49,13 +48,13 @@ public class PumpAllAi extends PumpAiBase { List human = CardLists.getValidCards(opp.getCardsIn(ZoneType.Battlefield), valid, source.getController(), source); final Target tgt = sa.getTarget(); - if (tgt != null && sa.canTarget(opp) && params.containsKey("IsCurse")) { + if (tgt != null && sa.canTarget(opp) && sa.hasParam("IsCurse")) { tgt.resetTargets(); sa.getTarget().addTarget(opp); comp = new ArrayList(); } - if (params.containsKey("IsCurse")) { + if (sa.hasParam("IsCurse")) { if (defense < 0) { // try to destroy creatures comp = CardLists.filter(comp, new Predicate() { @Override @@ -141,7 +140,7 @@ public class PumpAllAi extends PumpAiBase { } // pumpAllCanPlayAI() @Override - public boolean chkAIDrawback(Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } @@ -149,7 +148,7 @@ public class PumpAllAi extends PumpAiBase { * @see forge.card.abilityfactory.SpellAiLogic#doTriggerAINoCost(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility, boolean) */ @Override - protected boolean doTriggerAINoCost(Player aiPlayer, Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { return true; } diff --git a/src/main/java/forge/card/abilityfactory/ai/RearrangeTopOfLibraryAi.java b/src/main/java/forge/card/abilityfactory/ai/RearrangeTopOfLibraryAi.java index a35fdb24bce..d44a547f534 100644 --- a/src/main/java/forge/card/abilityfactory/ai/RearrangeTopOfLibraryAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/RearrangeTopOfLibraryAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import forge.card.abilityfactory.SpellAiLogic; import forge.card.spellability.SpellAbility; @@ -12,7 +11,7 @@ public class RearrangeTopOfLibraryAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player aiPlayer, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { return false; } @@ -20,7 +19,7 @@ public class RearrangeTopOfLibraryAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#doTriggerAINoCost(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility, boolean) */ @Override - protected boolean doTriggerAINoCost(Player ai, Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final Target tgt = sa.getTarget(); diff --git a/src/main/java/forge/card/abilityfactory/ai/RegenerateAi.java b/src/main/java/forge/card/abilityfactory/ai/RegenerateAi.java index 971edd91b43..48a81b366f5 100644 --- a/src/main/java/forge/card/abilityfactory/ai/RegenerateAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/RegenerateAi.java @@ -56,10 +56,10 @@ public class RegenerateAi extends SpellAiLogic { // ************************************************************** @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { - final Card hostCard = sa.getAbilityFactory().getHostCard(); + protected boolean canPlayAI(Player ai, SpellAbility sa) { + final Card hostCard = sa.getSourceCard(); boolean chance = false; - final Cost abCost = sa.getAbilityFactory().getAbCost(); + final Cost abCost = sa.getPayCosts(); if (abCost != null) { // AI currently disabled for these costs if (!CostUtil.checkLifeCost(ai, abCost, hostCard, 4, null)) { @@ -79,10 +79,10 @@ public class RegenerateAi extends SpellAiLogic { if (tgt == null) { // As far as I can tell these Defined Cards will only have one of // them - final ArrayList list = AbilityFactory.getDefinedCards(hostCard, params.get("Defined"), sa); + final ArrayList list = AbilityFactory.getDefinedCards(hostCard, sa.getParam("Defined"), sa); if (Singletons.getModel().getGame().getStack().size() > 0) { - final ArrayList objects = AbilityFactory.predictThreatenedObjects(sa.getActivatingPlayer(),sa.getAbilityFactory()); + final ArrayList objects = AbilityFactory.predictThreatenedObjects(sa.getActivatingPlayer(),sa); for (final Card c : list) { if (objects.contains(c)) { @@ -118,7 +118,7 @@ public class RegenerateAi extends SpellAiLogic { if (Singletons.getModel().getGame().getStack().size() > 0) { // check stack for something on the stack will kill anything i // control - final ArrayList objects = AbilityFactory.predictThreatenedObjects(sa.getActivatingPlayer(), sa.getAbilityFactory()); + final ArrayList objects = AbilityFactory.predictThreatenedObjects(sa.getActivatingPlayer(), sa); final List threatenedTargets = new ArrayList(); @@ -153,7 +153,7 @@ public class RegenerateAi extends SpellAiLogic { } // regenerateCanPlayAI @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { boolean chance = false; final Target tgt = sa.getTarget(); @@ -168,12 +168,12 @@ public class RegenerateAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } private static boolean regenMandatoryTarget(final Player ai, final SpellAbility sa, final boolean mandatory) { - final Card hostCard = sa.getAbilityFactory().getHostCard(); + final Card hostCard = sa.getSourceCard(); final Target tgt = sa.getTarget(); tgt.resetTargets(); // filter AIs battlefield by what I can target diff --git a/src/main/java/forge/card/abilityfactory/ai/RegenerateAllAi.java b/src/main/java/forge/card/abilityfactory/ai/RegenerateAllAi.java index be8875be1e0..4eda2056381 100644 --- a/src/main/java/forge/card/abilityfactory/ai/RegenerateAllAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/RegenerateAllAi.java @@ -20,10 +20,10 @@ import forge.game.zone.ZoneType; public class RegenerateAllAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { - final Card hostCard = sa.getAbilityFactory().getHostCard(); + protected boolean canPlayAI(Player ai, SpellAbility sa) { + final Card hostCard = sa.getSourceCard(); boolean chance = false; - final Cost abCost = sa.getAbilityFactory().getAbCost(); + final Cost abCost = sa.getPayCosts(); if (abCost != null) { // AI currently disabled for these costs if (!CostUtil.checkSacrificeCost(ai, abCost, hostCard)) { @@ -42,8 +42,8 @@ public class RegenerateAllAi extends SpellAiLogic { // filter AIs battlefield by what I can target String valid = ""; - if (params.containsKey("ValidCards")) { - valid = params.get("ValidCards"); + if (sa.hasParam("ValidCards")) { + valid = sa.getParam("ValidCards"); } List list = Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield); @@ -56,7 +56,7 @@ public class RegenerateAllAi extends SpellAiLogic { int numSaved = 0; if (Singletons.getModel().getGame().getStack().size() > 0) { - final ArrayList objects = AbilityFactory.predictThreatenedObjects(sa.getActivatingPlayer(),sa.getAbilityFactory()); + final ArrayList objects = AbilityFactory.predictThreatenedObjects(sa.getActivatingPlayer(),sa); for (final Card c : list) { if (objects.contains(c) && c.getShield() == 0) { @@ -83,12 +83,12 @@ public class RegenerateAllAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } @Override - protected boolean doTriggerAINoCost(Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { boolean chance = true; return chance; diff --git a/src/main/java/forge/card/abilityfactory/ai/RemoveFromCombatAi.java b/src/main/java/forge/card/abilityfactory/ai/RemoveFromCombatAi.java index 2b7f458ebde..6805f7ea7f6 100644 --- a/src/main/java/forge/card/abilityfactory/ai/RemoveFromCombatAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/RemoveFromCombatAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import forge.card.abilityfactory.SpellAiLogic; import forge.card.spellability.SpellAbility; @@ -9,13 +8,13 @@ import forge.game.player.Player; public class RemoveFromCombatAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player aiPlayer, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { // disabled for the AI for now. Only for Gideon Jura at this time. return false; } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { // AI should only activate this during Human's turn // TODO - implement AI @@ -26,7 +25,7 @@ public class RemoveFromCombatAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#doTriggerAINoCost(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility, boolean) */ @Override - protected boolean doTriggerAINoCost(Player aiPlayer, Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { boolean chance; // TODO - implement AI diff --git a/src/main/java/forge/card/abilityfactory/ai/RepeatAi.java b/src/main/java/forge/card/abilityfactory/ai/RepeatAi.java index d0e511b1c19..c151b64df80 100644 --- a/src/main/java/forge/card/abilityfactory/ai/RepeatAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/RepeatAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import forge.card.abilityfactory.SpellAiLogic; import forge.card.spellability.SpellAbility; @@ -10,7 +9,7 @@ import forge.game.player.Player; public class RepeatAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final Target tgt = sa.getTarget(); final Player opp = ai.getOpponent(); if (tgt != null) { @@ -27,7 +26,7 @@ public class RepeatAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#chkAIDrawback(java.util.Map, forge.card.spellability.SpellAbility, forge.game.player.Player) */ @Override - public boolean chkAIDrawback(Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } diff --git a/src/main/java/forge/card/abilityfactory/ai/RestartGameAi.java b/src/main/java/forge/card/abilityfactory/ai/RestartGameAi.java index 192ffface41..dfd0b83c2cf 100644 --- a/src/main/java/forge/card/abilityfactory/ai/RestartGameAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/RestartGameAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import forge.card.abilityfactory.SpellAiLogic; import forge.card.spellability.SpellAbility; import forge.game.player.Player; @@ -16,7 +15,7 @@ public class RestartGameAi extends SpellAiLogic { * forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { // The only card that uses this is Karn Liberated // TODO Add Logic, check if AI is losing game state, or life @@ -27,7 +26,7 @@ public class RestartGameAi extends SpellAiLogic { } @Override - protected boolean doTriggerAINoCost(Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { // This trigger AI is completely unused, but return true just in case return true; } diff --git a/src/main/java/forge/card/abilityfactory/ai/RevealAi.java b/src/main/java/forge/card/abilityfactory/ai/RevealAi.java index 9928813d90d..61a67a64f18 100644 --- a/src/main/java/forge/card/abilityfactory/ai/RevealAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/RevealAi.java @@ -12,7 +12,7 @@ import forge.util.MyRandom; public class RevealAi extends RevealAiBase { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { // AI cannot use this properly until he can use SAs during Humans turn final Cost abCost = sa.getPayCosts(); final Card source = sa.getSourceCard(); @@ -54,7 +54,7 @@ public class RevealAi extends RevealAiBase { } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { if (!revealHandTargetAI(ai, sa, false, mandatory)) { return false; diff --git a/src/main/java/forge/card/abilityfactory/ai/RevealAiBase.java b/src/main/java/forge/card/abilityfactory/ai/RevealAiBase.java index 41c0e60028f..98c10f0be7d 100644 --- a/src/main/java/forge/card/abilityfactory/ai/RevealAiBase.java +++ b/src/main/java/forge/card/abilityfactory/ai/RevealAiBase.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import forge.card.abilityfactory.SpellAiLogic; import forge.card.spellability.SpellAbility; @@ -38,7 +37,7 @@ public abstract class RevealAiBase extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#chkAIDrawback(java.util.Map, forge.card.spellability.SpellAbility, forge.game.player.Player) */ @Override - public boolean chkAIDrawback(Map params, SpellAbility sa, Player ai) { + public boolean chkAIDrawback(SpellAbility sa, Player ai) { return revealHandTargetAI(ai, sa, false, false); } } \ No newline at end of file diff --git a/src/main/java/forge/card/abilityfactory/ai/RevealHandAi.java b/src/main/java/forge/card/abilityfactory/ai/RevealHandAi.java index de746b0c9b9..3bd41879954 100644 --- a/src/main/java/forge/card/abilityfactory/ai/RevealHandAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/RevealHandAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import java.util.Random; import forge.Card; @@ -17,7 +16,7 @@ public class RevealHandAi extends RevealAiBase { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { // AI cannot use this properly until he can use SAs during Humans turn final Cost abCost = sa.getPayCosts(); final Card source = sa.getSourceCard(); @@ -59,7 +58,7 @@ public class RevealHandAi extends RevealAiBase { } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { if (!revealHandTargetAI(ai, sa, false, mandatory)) { return false; diff --git a/src/main/java/forge/card/abilityfactory/ai/SacrificeAi.java b/src/main/java/forge/card/abilityfactory/ai/SacrificeAi.java index bf9baa4083b..e736b2a8e12 100644 --- a/src/main/java/forge/card/abilityfactory/ai/SacrificeAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/SacrificeAi.java @@ -1,8 +1,6 @@ package forge.card.abilityfactory.ai; import java.util.List; -import java.util.Map; - import forge.Card; import forge.CardLists; import forge.card.abilityfactory.AbilityFactory; @@ -20,15 +18,15 @@ public class SacrificeAi extends SpellAiLogic { // ************************************************************** @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { - boolean chance = sacrificeTgtAI(ai, params, sa); + protected boolean canPlayAI(Player ai, SpellAbility sa) { + boolean chance = sacrificeTgtAI(ai, sa); // Some additional checks based on what is being sacrificed, and who is // sacrificing final Target tgt = sa.getTarget(); if (tgt != null) { - final String valid = params.get("SacValid"); - String num = params.get("Amount"); + final String valid = sa.getParam("SacValid"); + String num = sa.getParam("Amount"); num = (num == null) ? "1" : num; final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), num, sa); @@ -60,16 +58,16 @@ public class SacrificeAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player ai) { + public boolean chkAIDrawback(SpellAbility sa, Player ai) { // AI should only activate this during Human's turn - return sacrificeTgtAI(ai, params, sa); + return sacrificeTgtAI(ai, sa); } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { // AI should only activate this during Human's turn - boolean chance = sacrificeTgtAI(ai, params, sa); + boolean chance = sacrificeTgtAI(ai, sa); // Improve AI for triggers. If source is a creature with: // When ETB, sacrifice a creature. Check to see if the AI has something @@ -81,7 +79,7 @@ public class SacrificeAi extends SpellAiLogic { return chance || mandatory; } - private boolean sacrificeTgtAI(final Player ai, final Map params, final SpellAbility sa) { + private boolean sacrificeTgtAI(final Player ai, final SpellAbility sa) { final Card card = sa.getSourceCard(); final Target tgt = sa.getTarget(); @@ -97,8 +95,8 @@ public class SacrificeAi extends SpellAiLogic { } } - final String defined = params.get("Defined"); - final String valid = params.get("SacValid"); + final String defined = sa.getParam("Defined"); + final String valid = sa.getParam("SacValid"); if (defined == null) { // Self Sacrifice. } else if (defined.equals("Each") @@ -108,7 +106,7 @@ public class SacrificeAi extends SpellAiLogic { // Only cast it if AI doesn't have the full amount of Valid // TODO: Cast if the type is favorable: my "worst" valid is // worse than his "worst" valid - final String num = params.containsKey("Amount") ? params.get("Amount") : "1"; + final String num = sa.hasParam("Amount") ? sa.getParam("Amount") : "1"; int amount = AbilityFactory.calculateAmount(card, num, sa); final Card source = sa.getSourceCard(); diff --git a/src/main/java/forge/card/abilityfactory/ai/SacrificeAllAi.java b/src/main/java/forge/card/abilityfactory/ai/SacrificeAllAi.java index cc001790412..a2cce2ff97f 100644 --- a/src/main/java/forge/card/abilityfactory/ai/SacrificeAllAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/SacrificeAllAi.java @@ -18,7 +18,7 @@ import forge.util.MyRandom; public class SacrificeAllAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { // AI needs to be expanded, since this function can be pretty complex // based on what the expected targets could be final Random r = MyRandom.getRandom(); @@ -26,8 +26,8 @@ public class SacrificeAllAi extends SpellAiLogic final Card source = sa.getSourceCard(); String valid = ""; - if (params.containsKey("ValidCards")) { - valid = params.get("ValidCards"); + if (sa.hasParam("ValidCards")) { + valid = sa.getParam("ValidCards"); } if (valid.contains("X") && source.getSVar("X").equals("Count$xPaid")) { @@ -76,7 +76,7 @@ public class SacrificeAllAi extends SpellAiLogic } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } } \ No newline at end of file diff --git a/src/main/java/forge/card/abilityfactory/ai/ScryAi.java b/src/main/java/forge/card/abilityfactory/ai/ScryAi.java index 074630629dc..898a4e4933f 100644 --- a/src/main/java/forge/card/abilityfactory/ai/ScryAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/ScryAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import java.util.Random; import forge.card.abilityfactory.AbilityFactory; @@ -16,7 +15,7 @@ public class ScryAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#doTriggerAINoCost(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility, boolean) */ @Override - protected boolean doTriggerAINoCost(Player ai, Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final Target tgt = sa.getTarget(); if (tgt != null) { // It doesn't appear that Scry ever targets @@ -30,13 +29,13 @@ public class ScryAi extends SpellAiLogic { } // scryTargetAI() @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player ai) { - return doTriggerAINoCost(ai, params, sa, false); + public boolean chkAIDrawback(SpellAbility sa, Player ai) { + return doTriggerAINoCost(ai, sa, false); } @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { // Card source = sa.getSourceCard(); double chance = .4; // 40 percent chance of milling with instant speed diff --git a/src/main/java/forge/card/abilityfactory/ai/SetStateAi.java b/src/main/java/forge/card/abilityfactory/ai/SetStateAi.java index df455f71b96..bbcd8313943 100644 --- a/src/main/java/forge/card/abilityfactory/ai/SetStateAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/SetStateAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import forge.card.abilityfactory.SpellAiLogic; import forge.card.spellability.SpellAbility; @@ -8,12 +7,12 @@ import forge.game.player.Player; public class SetStateAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player aiPlayer, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { return false; } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { // Gross generalization, but this always considers alternate // states more powerful return !sa.getSourceCard().isInAlternateState(); @@ -24,7 +23,7 @@ public class SetStateAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#doTriggerAINoCost(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility, boolean) */ @Override - protected boolean doTriggerAINoCost(Player aiPlayer, Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { return true; } } \ No newline at end of file diff --git a/src/main/java/forge/card/abilityfactory/ai/SetStateAllAi.java b/src/main/java/forge/card/abilityfactory/ai/SetStateAllAi.java index 6b0c4bbf641..b00f81a7155 100644 --- a/src/main/java/forge/card/abilityfactory/ai/SetStateAllAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/SetStateAllAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import forge.card.abilityfactory.SpellAiLogic; import forge.card.spellability.SpellAbility; @@ -11,7 +10,7 @@ public class SetStateAllAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player aiPlayer, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { return true; } @@ -19,7 +18,7 @@ public class SetStateAllAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#chkAIDrawback(java.util.Map, forge.card.spellability.SpellAbility, forge.game.player.Player) */ @Override - public boolean chkAIDrawback(Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { // Gross generalization, but this always considers alternate // states more powerful if (sa.getSourceCard().isInAlternateState()) { @@ -33,7 +32,7 @@ public class SetStateAllAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#doTriggerAINoCost(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility, boolean) */ @Override - protected boolean doTriggerAINoCost(Player aiPlayer, Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { return true; } diff --git a/src/main/java/forge/card/abilityfactory/ai/ShuffleAi.java b/src/main/java/forge/card/abilityfactory/ai/ShuffleAi.java index 3f622f11114..1e28aee60bd 100644 --- a/src/main/java/forge/card/abilityfactory/ai/ShuffleAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/ShuffleAi.java @@ -6,7 +6,7 @@ import forge.game.player.Player; public class ShuffleAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player aiPlayer, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { // not really sure when the compy would use this; maybe only after a // human // deliberately put a card on top of their library @@ -27,7 +27,7 @@ public class ShuffleAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return shuffleTargetAI(sa, false, false); } @@ -42,7 +42,7 @@ public class ShuffleAi extends SpellAiLogic { } // shuffleTargetAI() @Override - protected boolean doTriggerAINoCost(Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { if (!shuffleTargetAI(sa, false, mandatory)) { return false; } diff --git a/src/main/java/forge/card/abilityfactory/ai/StoreSVarAi.java b/src/main/java/forge/card/abilityfactory/ai/StoreSVarAi.java index a3c7d71edb0..6bf225a5932 100644 --- a/src/main/java/forge/card/abilityfactory/ai/StoreSVarAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/StoreSVarAi.java @@ -11,7 +11,7 @@ import forge.game.player.Player; public class StoreSVarAi extends SpellAiLogic { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { //Tree of Redemption final Card source = sa.getSourceCard(); @@ -24,14 +24,14 @@ public class StoreSVarAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; }; @Override - protected boolean doTriggerAINoCost(Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { return true; } diff --git a/src/main/java/forge/card/abilityfactory/ai/TapAi.java b/src/main/java/forge/card/abilityfactory/ai/TapAi.java index 3d18dd076c1..c99e0f24ef9 100644 --- a/src/main/java/forge/card/abilityfactory/ai/TapAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/TapAi.java @@ -15,7 +15,7 @@ import forge.util.MyRandom; public class TapAi extends TapAiBase { @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final Target tgt = sa.getTarget(); final Card source = sa.getSourceCard(); @@ -37,7 +37,7 @@ public class TapAi extends TapAiBase { } if (tgt == null) { - final ArrayList defined = AbilityFactory.getDefinedCards(source, params.get("Defined"), sa); + final ArrayList defined = AbilityFactory.getDefinedCards(source, sa.getParam("Defined"), sa); boolean bFlag = false; for (final Card c : defined) { @@ -58,7 +58,7 @@ public class TapAi extends TapAiBase { } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final Target tgt = sa.getTarget(); final Card source = sa.getSourceCard(); @@ -84,7 +84,7 @@ public class TapAi extends TapAiBase { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player ai) { + public boolean chkAIDrawback(SpellAbility sa, Player ai) { final Target tgt = sa.getTarget(); final Card source = sa.getSourceCard(); diff --git a/src/main/java/forge/card/abilityfactory/ai/TapAllAi.java b/src/main/java/forge/card/abilityfactory/ai/TapAllAi.java index 0060de45d17..c8881bcbce7 100644 --- a/src/main/java/forge/card/abilityfactory/ai/TapAllAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/TapAllAi.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.ai; import java.util.List; -import java.util.Map; import java.util.Random; import com.google.common.base.Predicate; @@ -24,7 +23,7 @@ public class TapAllAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(final Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(final Player ai, SpellAbility sa) { // If tapping all creatures do it either during declare attackers of AIs // turn // or during upkeep/begin combat? @@ -37,8 +36,8 @@ public class TapAllAi extends SpellAiLogic { } String valid = ""; - if (params.containsKey("ValidCards")) { - valid = params.get("ValidCards"); + if (sa.hasParam("ValidCards")) { + valid = sa.getParam("ValidCards"); } List validTappables = Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield); @@ -99,12 +98,12 @@ public class TapAllAi extends SpellAiLogic { } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final Card source = sa.getSourceCard(); String valid = ""; - if (params.containsKey("ValidCards")) { - valid = params.get("ValidCards"); + if (sa.hasParam("ValidCards")) { + valid = sa.getParam("ValidCards"); } List validTappables = getTapAllTargets(valid, source); @@ -149,7 +148,7 @@ public class TapAllAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } diff --git a/src/main/java/forge/card/abilityfactory/ai/TapOrUntapAi.java b/src/main/java/forge/card/abilityfactory/ai/TapOrUntapAi.java index 013efac59f0..04bbf705090 100644 --- a/src/main/java/forge/card/abilityfactory/ai/TapOrUntapAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/TapOrUntapAi.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.ai; import java.util.ArrayList; -import java.util.Map; import java.util.Random; import forge.Card; @@ -17,7 +16,7 @@ public class TapOrUntapAi extends TapAiBase { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final Target tgt = sa.getTarget(); final Card source = sa.getSourceCard(); @@ -28,7 +27,7 @@ public class TapOrUntapAi extends TapAiBase { // assume we are looking to tap human's stuff // TODO - check for things with untap abilities, and don't tap // those. - final ArrayList defined = AbilityFactory.getDefinedCards(source, params.get("Defined"), sa); + final ArrayList defined = AbilityFactory.getDefinedCards(source, sa.getParam("Defined"), sa); boolean bFlag = false; for (final Card c : defined) { @@ -49,7 +48,7 @@ public class TapOrUntapAi extends TapAiBase { } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final Target tgt = sa.getTarget(); final Card source = sa.getSourceCard(); @@ -74,7 +73,7 @@ public class TapOrUntapAi extends TapAiBase { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player ai) { + public boolean chkAIDrawback(SpellAbility sa, Player ai) { final Target tgt = sa.getTarget(); final Card source = sa.getSourceCard(); diff --git a/src/main/java/forge/card/abilityfactory/ai/TokenAi.java b/src/main/java/forge/card/abilityfactory/ai/TokenAi.java index 2fb7d944f11..2de6807d269 100644 --- a/src/main/java/forge/card/abilityfactory/ai/TokenAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/TokenAi.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.ai; -import java.util.Map; import java.util.Random; import forge.Card; @@ -43,30 +42,30 @@ public class TokenAi extends SpellAiLogic { * @param af * a {@link forge.card.abilityfactory.AbilityFactory} object. */ - private void readParameters(final Map mapParams ) { + private void readParameters(final SpellAbility mapParams ) { String[] keywords; - if (mapParams.containsKey("TokenKeywords")) { + if (mapParams.hasParam("TokenKeywords")) { // TODO: Change this Split to a semicolon or something else - keywords = mapParams.get("TokenKeywords").split("<>"); + keywords = mapParams.getParam("TokenKeywords").split("<>"); } else { keywords = new String[0]; } - this.tokenAmount = mapParams.get("TokenAmount"); - this.tokenPower = mapParams.get("TokenPower"); - this.tokenToughness = mapParams.get("TokenToughness"); - this.tokenName = mapParams.get("TokenName"); - this.tokenTypes = mapParams.get("TokenTypes").split(","); + this.tokenAmount = mapParams.getParam("TokenAmount"); + this.tokenPower = mapParams.getParam("TokenPower"); + this.tokenToughness = mapParams.getParam("TokenToughness"); + this.tokenName = mapParams.getParam("TokenName"); + this.tokenTypes = mapParams.getParam("TokenTypes").split(","); this.tokenKeywords = keywords; } @Override - protected boolean canPlayAI(Player ai, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final Cost cost = sa.getPayCosts(); - readParameters(params); + readParameters(sa); if (ComputerUtil.preventRunAwayActivations(sa)) { return false; @@ -98,13 +97,13 @@ public class TokenAi extends SpellAiLogic { // Don't generate tokens without haste before main 2 if possible if (ph.getPhase().isBefore(PhaseType.MAIN2) && ph.isPlayerTurn(ai) && !haste - && !params.containsKey("ActivationPhases")) { + && !sa.hasParam("ActivationPhases")) { return false; } if ((ph.isPlayerTurn(ai) || ph.getPhase().isBefore( PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY)) - && !params.containsKey("ActivationPhases") && !params.containsKey("PlayerTurn") + && !sa.hasParam("ActivationPhases") && !sa.hasParam("PlayerTurn") && !AbilityFactory.isSorcerySpeed(sa) && !haste) { return false; } @@ -173,8 +172,8 @@ public class TokenAi extends SpellAiLogic { } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { - readParameters(params); + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { + readParameters(sa); final Card source = sa.getSourceCard(); final Target tgt = sa.getTarget(); if (tgt != null) { diff --git a/src/main/java/forge/card/abilityfactory/ai/TwoPilesAi.java b/src/main/java/forge/card/abilityfactory/ai/TwoPilesAi.java index 222ed0b5c34..f9541079d05 100644 --- a/src/main/java/forge/card/abilityfactory/ai/TwoPilesAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/TwoPilesAi.java @@ -2,7 +2,6 @@ package forge.card.abilityfactory.ai; import java.util.ArrayList; import java.util.List; -import java.util.Map; import forge.Card; import forge.CardLists; @@ -19,17 +18,17 @@ public class TwoPilesAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final Card card = sa.getSourceCard(); ZoneType zone = null; - if (params.containsKey("Zone")) { - zone = ZoneType.smartValueOf(params.get("Zone")); + if (sa.hasParam("Zone")) { + zone = ZoneType.smartValueOf(sa.getParam("Zone")); } String valid = ""; - if (params.containsKey("ValidCards")) { - valid = params.get("ValidCards"); + if (sa.hasParam("ValidCards")) { + valid = sa.getParam("ValidCards"); } ArrayList tgtPlayers; @@ -43,13 +42,13 @@ public class TwoPilesAi extends SpellAiLogic { } tgtPlayers = tgt.getTargetPlayers(); } else { - tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa); + tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), sa.getParam("Defined"), sa); } final Player p = tgtPlayers.get(0); List pool = new ArrayList(); - if (params.containsKey("DefinedCards")) { - pool = new ArrayList(AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("DefinedCards"), sa)); + if (sa.hasParam("DefinedCards")) { + pool = new ArrayList(AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("DefinedCards"), sa)); } else { pool = p.getCardsIn(zone); } @@ -59,7 +58,7 @@ public class TwoPilesAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } @@ -67,7 +66,7 @@ public class TwoPilesAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#doTriggerAINoCost(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility, boolean) */ @Override - protected boolean doTriggerAINoCost(Player aiPlayer, Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { return false; } } \ No newline at end of file diff --git a/src/main/java/forge/card/abilityfactory/ai/UnattachAllAi.java b/src/main/java/forge/card/abilityfactory/ai/UnattachAllAi.java index 14c171732c5..f99f970ed30 100644 --- a/src/main/java/forge/card/abilityfactory/ai/UnattachAllAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/UnattachAllAi.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.ai; import java.util.ArrayList; -import java.util.Map; import java.util.Random; import forge.Card; @@ -24,7 +23,7 @@ public class UnattachAllAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final Random r = MyRandom.getRandom(); final Cost abCost = sa.getPayCosts(); final Card source = sa.getSourceCard(); @@ -53,7 +52,7 @@ public class UnattachAllAi extends SpellAiLogic { } if (Singletons.getModel().getGame().getPhaseHandler().getPhase().isAfter(PhaseType.COMBAT_DECLARE_BLOCKERS_INSTANT_ABILITY) - && !"Curse".equals(params.get("AILogic"))) { + && !"Curse".equals(sa.getParam("AILogic"))) { return false; } @@ -65,14 +64,14 @@ public class UnattachAllAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#doTriggerAINoCost(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility, boolean) */ @Override - protected boolean doTriggerAINoCost(Player ai, Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final Card card = sa.getSourceCard(); final Player opp = ai.getOpponent(); // Check if there are any valid targets ArrayList targets = new ArrayList(); final Target tgt = sa.getTarget(); if (tgt == null) { - targets = AbilityFactory.getDefinedObjects(sa.getSourceCard(), params.get("Defined"), sa); + targets = AbilityFactory.getDefinedObjects(sa.getSourceCard(), sa.getParam("Defined"), sa); } if (!mandatory && card.isEquipment() && !targets.isEmpty()) { @@ -95,9 +94,9 @@ public class UnattachAllAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player ai) { + public boolean chkAIDrawback(SpellAbility sa, Player ai) { // AI should only activate this during Human's turn - return canPlayAI(ai, params, sa); + return canPlayAI(ai, sa); } } \ No newline at end of file diff --git a/src/main/java/forge/card/abilityfactory/ai/UntapAi.java b/src/main/java/forge/card/abilityfactory/ai/UntapAi.java index 5fde057b7f7..c3f32994eac 100644 --- a/src/main/java/forge/card/abilityfactory/ai/UntapAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/UntapAi.java @@ -2,7 +2,6 @@ package forge.card.abilityfactory.ai; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Random; import forge.Card; @@ -27,7 +26,7 @@ public class UntapAi extends SpellAiLogic { * @see forge.card.abilityfactory.SpellAiLogic#canPlayAI(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected boolean canPlayAI(Player ai, Map params, SpellAbility sa) { + protected boolean canPlayAI(Player ai, SpellAbility sa) { final Target tgt = sa.getTarget(); final Card source = sa.getSourceCard(); final Cost cost = sa.getPayCosts(); @@ -40,7 +39,7 @@ public class UntapAi extends SpellAiLogic { boolean randomReturn = r.nextFloat() <= Math.pow(.6667, sa.getActivationsThisTurn() + 1); if (tgt == null) { - final ArrayList pDefined = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), + final ArrayList pDefined = AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa); if ((pDefined != null) && pDefined.get(0).isUntapped() && pDefined.get(0).getController().isComputer()) { return false; @@ -55,7 +54,7 @@ public class UntapAi extends SpellAiLogic { } @Override - protected boolean doTriggerAINoCost(Player ai, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { final Target tgt = sa.getTarget(); if (tgt == null) { @@ -64,7 +63,7 @@ public class UntapAi extends SpellAiLogic { } // TODO: use Defined to determine, if this is an unfavorable result - final ArrayList pDefined = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), + final ArrayList pDefined = AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa); if ((pDefined != null) && pDefined.get(0).isUntapped() && pDefined.get(0).getController().isComputer()) { return false; @@ -84,7 +83,7 @@ public class UntapAi extends SpellAiLogic { } @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player ai) { + public boolean chkAIDrawback(SpellAbility sa, Player ai) { final Target tgt = sa.getTarget(); boolean randomReturn = true; @@ -120,7 +119,7 @@ public class UntapAi extends SpellAiLogic { Player targetController = ai; - if (sa.getAbilityFactory().isCurse()) { + if (sa.isCurse()) { targetController = ai.getOpponent(); } diff --git a/src/main/java/forge/card/abilityfactory/ai/UntapAllAi.java b/src/main/java/forge/card/abilityfactory/ai/UntapAllAi.java index c2381cfb565..f9b53e771e4 100644 --- a/src/main/java/forge/card/abilityfactory/ai/UntapAllAi.java +++ b/src/main/java/forge/card/abilityfactory/ai/UntapAllAi.java @@ -8,12 +8,12 @@ import forge.game.player.Player; public class UntapAllAi extends SpellAiLogic { @Override - public boolean chkAIDrawback(java.util.Map params, SpellAbility sa, Player aiPlayer) { + public boolean chkAIDrawback(SpellAbility sa, Player aiPlayer) { return true; } @Override - protected boolean canPlayAI(Player aiPlayer, java.util.Map params, SpellAbility sa) { + protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { // check SubAbilities DoTrigger? final AbilitySub abSub = sa.getSubAbility(); if (abSub != null) { @@ -23,7 +23,7 @@ public class UntapAllAi extends SpellAiLogic { } @Override - protected boolean doTriggerAINoCost(Player aiPlayer, java.util.Map params, SpellAbility sa, boolean mandatory) { + protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { return mandatory; } diff --git a/src/main/java/forge/card/abilityfactory/effects/AddTurnEffect.java b/src/main/java/forge/card/abilityfactory/effects/AddTurnEffect.java index 3e9d56a4a0c..ef40fda5b70 100644 --- a/src/main/java/forge/card/abilityfactory/effects/AddTurnEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/AddTurnEffect.java @@ -14,12 +14,12 @@ import forge.game.player.Player; public class AddTurnEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final int numTurns = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumTurns"), sa); + final int numTurns = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("NumTurns"), sa); - List tgtPlayers = getTargetPlayers(sa, params); + List tgtPlayers = getTargetPlayers(sa); for (final Player player : tgtPlayers) { @@ -38,8 +38,8 @@ public class AddTurnEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { - final int numTurns = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumTurns"), sa); + public void resolve(SpellAbility sa) { + final int numTurns = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("NumTurns"), sa); ArrayList tgtPlayers; @@ -47,17 +47,17 @@ public class AddTurnEffect extends SpellEffect { if (tgt != null) { tgtPlayers = tgt.getTargetPlayers(); } else { - tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa); + tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), sa.getParam("Defined"), sa); } for (final Player p : tgtPlayers) { if ((tgt == null) || p.canBeTargetedBy(sa)) { for (int i = 0; i < numTurns; i++) { ExtraTurn extra = Singletons.getModel().getGame().getPhaseHandler().addExtraTurn(p); - if (params.containsKey("LoseAtEndStep")) { + if (sa.hasParam("LoseAtEndStep")) { extra.setLoseAtEndStep(true); } - if (params.containsKey("SkipUntap")) { + if (sa.hasParam("SkipUntap")) { extra.setSkipUntap(true); } } diff --git a/src/main/java/forge/card/abilityfactory/effects/AnimateAllEffect.java b/src/main/java/forge/card/abilityfactory/effects/AnimateAllEffect.java index 3b870379b15..ead7dc775b2 100644 --- a/src/main/java/forge/card/abilityfactory/effects/AnimateAllEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/AnimateAllEffect.java @@ -23,24 +23,24 @@ import forge.game.zone.ZoneType; public class AnimateAllEffect extends AnimateEffectBase { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { return "Animate all valid cards."; } @Override - public void resolve(final java.util.Map params, SpellAbility sa) { + public void resolve(final SpellAbility sa) { final Card host = sa.getSourceCard(); final Map svars = host.getSVars(); long timest = -1; - // AF specific params + // AF specific sa int power = -1; - if (params.containsKey("Power")) { - power = AbilityFactory.calculateAmount(host, params.get("Power"), sa); + if (sa.hasParam("Power")) { + power = AbilityFactory.calculateAmount(host, sa.getParam("Power"), sa); } int toughness = -1; - if (params.containsKey("Toughness")) { - toughness = AbilityFactory.calculateAmount(host, params.get("Toughness"), sa); + if (sa.hasParam("Toughness")) { + toughness = AbilityFactory.calculateAmount(host, sa.getParam("Toughness"), sa); } // Every Animate event needs a unique time stamp @@ -48,16 +48,16 @@ public class AnimateAllEffect extends AnimateEffectBase final long timestamp = timest; - final boolean permanent = params.containsKey("Permanent"); + final boolean permanent = sa.hasParam("Permanent"); final ArrayList types = new ArrayList(); - if (params.containsKey("Types")) { - types.addAll(Arrays.asList(params.get("Types").split(","))); + if (sa.hasParam("Types")) { + types.addAll(Arrays.asList(sa.getParam("Types").split(","))); } final ArrayList removeTypes = new ArrayList(); - if (params.containsKey("RemoveTypes")) { - removeTypes.addAll(Arrays.asList(params.get("RemoveTypes").split(","))); + if (sa.hasParam("RemoveTypes")) { + removeTypes.addAll(Arrays.asList(sa.getParam("RemoveTypes").split(","))); } // allow ChosenType - overrides anything else specified @@ -67,13 +67,13 @@ public class AnimateAllEffect extends AnimateEffectBase } final ArrayList keywords = new ArrayList(); - if (params.containsKey("Keywords")) { - keywords.addAll(Arrays.asList(params.get("Keywords").split(" & "))); + if (sa.hasParam("Keywords")) { + keywords.addAll(Arrays.asList(sa.getParam("Keywords").split(" & "))); } final ArrayList hiddenKeywords = new ArrayList(); - if (params.containsKey("HiddenKeywords")) { - hiddenKeywords.addAll(Arrays.asList(params.get("HiddenKeywords").split(" & "))); + if (sa.hasParam("HiddenKeywords")) { + hiddenKeywords.addAll(Arrays.asList(sa.getParam("HiddenKeywords").split(" & "))); } // allow SVar substitution for keywords for (int i = 0; i < keywords.size(); i++) { @@ -86,8 +86,8 @@ public class AnimateAllEffect extends AnimateEffectBase // colors to be added or changed to String tmpDesc = ""; - if (params.containsKey("Colors")) { - final String colors = params.get("Colors"); + if (sa.hasParam("Colors")) { + final String colors = sa.getParam("Colors"); if (colors.equals("ChosenColor")) { tmpDesc = CardUtil.getShortColorsString(host.getChosenColor()); } else { @@ -98,26 +98,26 @@ public class AnimateAllEffect extends AnimateEffectBase // abilities to add to the animated being final ArrayList abilities = new ArrayList(); - if (params.containsKey("Abilities")) { - abilities.addAll(Arrays.asList(params.get("Abilities").split(","))); + if (sa.hasParam("Abilities")) { + abilities.addAll(Arrays.asList(sa.getParam("Abilities").split(","))); } // triggers to add to the animated being final ArrayList triggers = new ArrayList(); - if (params.containsKey("Triggers")) { - triggers.addAll(Arrays.asList(params.get("Triggers").split(","))); + if (sa.hasParam("Triggers")) { + triggers.addAll(Arrays.asList(sa.getParam("Triggers").split(","))); } // sVars to add to the animated being final ArrayList sVars = new ArrayList(); - if (params.containsKey("sVars")) { - sVars.addAll(Arrays.asList(params.get("sVars").split(","))); + if (sa.hasParam("sVars")) { + sVars.addAll(Arrays.asList(sa.getParam("sVars").split(","))); } String valid = ""; - if (params.containsKey("ValidCards")) { - valid = params.get("ValidCards"); + if (sa.hasParam("ValidCards")) { + valid = sa.getParam("ValidCards"); } List list; @@ -126,9 +126,9 @@ public class AnimateAllEffect extends AnimateEffectBase final Target tgt = sa.getTarget(); if (tgt != null) { tgtPlayers = tgt.getTargetPlayers(); - } else if (params.containsKey("Defined")) { + } else if (sa.hasParam("Defined")) { // use it - tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa); + tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), sa.getParam("Defined"), sa); } if ((tgtPlayers == null) || tgtPlayers.isEmpty()) { @@ -141,7 +141,7 @@ public class AnimateAllEffect extends AnimateEffectBase for (final Card c : list) { - final long colorTimestamp = doAnimate(c, params, power, toughness, types, removeTypes, + final long colorTimestamp = doAnimate(c, sa, power, toughness, types, removeTypes, finalDesc, keywords, null, hiddenKeywords, timestamp); // give abilities @@ -158,7 +158,7 @@ public class AnimateAllEffect extends AnimateEffectBase // remove abilities final ArrayList removedAbilities = new ArrayList(); - if (params.containsKey("OverwriteAbilities") || params.containsKey("RemoveAllAbilities")) { + if (sa.hasParam("OverwriteAbilities") || sa.hasParam("RemoveAllAbilities")) { for (final SpellAbility ab : c.getSpellAbilities()) { if (ab.isAbility()) { c.removeSpellAbility(ab); @@ -179,7 +179,7 @@ public class AnimateAllEffect extends AnimateEffectBase // suppress triggers from the animated card final ArrayList removedTriggers = new ArrayList(); - if (params.containsKey("OverwriteTriggers") || params.containsKey("RemoveAllAbilities")) { + if (sa.hasParam("OverwriteTriggers") || sa.hasParam("RemoveAllAbilities")) { final List triggersToRemove = c.getTriggers(); for (final Trigger trigger : triggersToRemove) { trigger.setSuppressed(true); @@ -189,7 +189,7 @@ public class AnimateAllEffect extends AnimateEffectBase // suppress static abilities from the animated card final ArrayList removedStatics = new ArrayList(); - if (params.containsKey("OverwriteStatics") || params.containsKey("RemoveAllAbilities")) { + if (sa.hasParam("OverwriteStatics") || sa.hasParam("RemoveAllAbilities")) { final ArrayList staticsToRemove = c.getStaticAbilities(); for (final StaticAbility stAb : staticsToRemove) { stAb.setTemporarilySuppressed(true); @@ -199,7 +199,7 @@ public class AnimateAllEffect extends AnimateEffectBase // suppress static abilities from the animated card final ArrayList removedReplacements = new ArrayList(); - if (params.containsKey("OverwriteReplacements") || params.containsKey("RemoveAllAbilities")) { + if (sa.hasParam("OverwriteReplacements") || sa.hasParam("RemoveAllAbilities")) { final ArrayList replacementsToRemove = c.getReplacementEffects(); for (final ReplacementEffect re : replacementsToRemove) { re.setTemporarilySuppressed(true); @@ -220,7 +220,7 @@ public class AnimateAllEffect extends AnimateEffectBase @Override public void execute() { - doUnanimate(c, params, finalDesc, hiddenKeywords, addedAbilities, addedTriggers, + doUnanimate(c, sa, finalDesc, hiddenKeywords, addedAbilities, addedTriggers, colorTimestamp, false, removedAbilities, timestamp); // give back suppressed triggers @@ -241,7 +241,7 @@ public class AnimateAllEffect extends AnimateEffectBase }; if (!permanent) { - if (params.containsKey("UntilEndOfCombat")) { + if (sa.hasParam("UntilEndOfCombat")) { Singletons.getModel().getGame().getEndOfCombat().addUntil(unanimate); } else { Singletons.getModel().getGame().getEndOfTurn().addUntil(unanimate); diff --git a/src/main/java/forge/card/abilityfactory/effects/AnimateEffect.java b/src/main/java/forge/card/abilityfactory/effects/AnimateEffect.java index c75b6baa78a..b9f7ec033f9 100644 --- a/src/main/java/forge/card/abilityfactory/effects/AnimateEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/AnimateEffect.java @@ -23,7 +23,7 @@ public class AnimateEffect extends AnimateEffectBase { * @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(final Map params, SpellAbility sa) { + public void resolve(final SpellAbility sa) { final Card source = sa.getSourceCard(); final Card host = sa.getSourceCard(); final Map svars = host.getSVars(); @@ -31,24 +31,24 @@ public class AnimateEffect extends AnimateEffectBase { String animateRemembered = null; //if host is not on the battlefield don't apply - if (params.containsKey("UntilHostLeavesPlay") + if (sa.hasParam("UntilHostLeavesPlay") && !sa.getSourceCard().isInPlay()) { return; } // Remember Objects - if (params.containsKey("RememberObjects")) { - animateRemembered = params.get("RememberObjects"); + if (sa.hasParam("RememberObjects")) { + animateRemembered = sa.getParam("RememberObjects"); } - // AF specific params + // AF specific sa int power = -1; - if (params.containsKey("Power")) { - power = AbilityFactory.calculateAmount(host, params.get("Power"), sa); + if (sa.hasParam("Power")) { + power = AbilityFactory.calculateAmount(host, sa.getParam("Power"), sa); } int toughness = -1; - if (params.containsKey("Toughness")) { - toughness = AbilityFactory.calculateAmount(host, params.get("Toughness"), sa); + if (sa.hasParam("Toughness")) { + toughness = AbilityFactory.calculateAmount(host, sa.getParam("Toughness"), sa); } // Every Animate event needs a unique time stamp @@ -56,16 +56,16 @@ public class AnimateEffect extends AnimateEffectBase { final long timestamp = timest; - final boolean permanent = params.containsKey("Permanent"); + final boolean permanent = sa.hasParam("Permanent"); final ArrayList types = new ArrayList(); - if (params.containsKey("Types")) { - types.addAll(Arrays.asList(params.get("Types").split(","))); + if (sa.hasParam("Types")) { + types.addAll(Arrays.asList(sa.getParam("Types").split(","))); } final ArrayList removeTypes = new ArrayList(); - if (params.containsKey("RemoveTypes")) { - removeTypes.addAll(Arrays.asList(params.get("RemoveTypes").split(","))); + if (sa.hasParam("RemoveTypes")) { + removeTypes.addAll(Arrays.asList(sa.getParam("RemoveTypes").split(","))); } // allow ChosenType - overrides anything else specified @@ -75,18 +75,18 @@ public class AnimateEffect extends AnimateEffectBase { } final ArrayList keywords = new ArrayList(); - if (params.containsKey("Keywords")) { - keywords.addAll(Arrays.asList(params.get("Keywords").split(" & "))); + if (sa.hasParam("Keywords")) { + keywords.addAll(Arrays.asList(sa.getParam("Keywords").split(" & "))); } final ArrayList removeKeywords = new ArrayList(); - if (params.containsKey("RemoveKeywords")) { - removeKeywords.addAll(Arrays.asList(params.get("RemoveKeywords").split(" & "))); + if (sa.hasParam("RemoveKeywords")) { + removeKeywords.addAll(Arrays.asList(sa.getParam("RemoveKeywords").split(" & "))); } final ArrayList hiddenKeywords = new ArrayList(); - if (params.containsKey("HiddenKeywords")) { - hiddenKeywords.addAll(Arrays.asList(params.get("HiddenKeywords").split(" & "))); + if (sa.hasParam("HiddenKeywords")) { + hiddenKeywords.addAll(Arrays.asList(sa.getParam("HiddenKeywords").split(" & "))); } // allow SVar substitution for keywords for (int i = 0; i < keywords.size(); i++) { @@ -99,8 +99,8 @@ public class AnimateEffect extends AnimateEffectBase { // colors to be added or changed to String tmpDesc = ""; - if (params.containsKey("Colors")) { - final String colors = params.get("Colors"); + if (sa.hasParam("Colors")) { + final String colors = sa.getParam("Colors"); if (colors.equals("ChosenColor")) { tmpDesc = CardUtil.getShortColorsString(host.getChosenColor()); @@ -112,26 +112,26 @@ public class AnimateEffect extends AnimateEffectBase { // abilities to add to the animated being final ArrayList abilities = new ArrayList(); - if (params.containsKey("Abilities")) { - abilities.addAll(Arrays.asList(params.get("Abilities").split(","))); + if (sa.hasParam("Abilities")) { + abilities.addAll(Arrays.asList(sa.getParam("Abilities").split(","))); } // triggers to add to the animated being final ArrayList triggers = new ArrayList(); - if (params.containsKey("Triggers")) { - triggers.addAll(Arrays.asList(params.get("Triggers").split(","))); + if (sa.hasParam("Triggers")) { + triggers.addAll(Arrays.asList(sa.getParam("Triggers").split(","))); } // static abilities to add to the animated being final ArrayList stAbs = new ArrayList(); - if (params.containsKey("staticAbilities")) { - stAbs.addAll(Arrays.asList(params.get("staticAbilities").split(","))); + if (sa.hasParam("staticAbilities")) { + stAbs.addAll(Arrays.asList(sa.getParam("staticAbilities").split(","))); } // sVars to add to the animated being final ArrayList sVars = new ArrayList(); - if (params.containsKey("sVars")) { - sVars.addAll(Arrays.asList(params.get("sVars").split(","))); + if (sa.hasParam("sVars")) { + sVars.addAll(Arrays.asList(sa.getParam("sVars").split(","))); } final Target tgt = sa.getTarget(); @@ -139,12 +139,12 @@ public class AnimateEffect extends AnimateEffectBase { if (tgt != null) { tgts = tgt.getTargetCards(); } else { - tgts = AbilityFactory.getDefinedCards(source, params.get("Defined"), sa); + tgts = AbilityFactory.getDefinedCards(source, sa.getParam("Defined"), sa); } for (final Card c : tgts) { - final long colorTimestamp = doAnimate(c, params, power, toughness, types, removeTypes, + final long colorTimestamp = doAnimate(c, sa, power, toughness, types, removeTypes, finalDesc, keywords, removeKeywords, hiddenKeywords, timestamp); // give abilities @@ -161,7 +161,7 @@ public class AnimateEffect extends AnimateEffectBase { // remove abilities final ArrayList removedAbilities = new ArrayList(); - if (params.containsKey("OverwriteAbilities") || params.containsKey("RemoveAllAbilities")) { + if (sa.hasParam("OverwriteAbilities") || sa.hasParam("RemoveAllAbilities")) { for (final SpellAbility ab : c.getSpellAbilities()) { if (ab.isAbility()) { c.removeSpellAbility(ab); @@ -182,7 +182,7 @@ public class AnimateEffect extends AnimateEffectBase { // suppress triggers from the animated card final ArrayList removedTriggers = new ArrayList(); - if (params.containsKey("OverwriteTriggers") || params.containsKey("RemoveAllAbilities")) { + if (sa.hasParam("OverwriteTriggers") || sa.hasParam("RemoveAllAbilities")) { final List triggersToRemove = c.getTriggers(); for (final Trigger trigger : triggersToRemove) { trigger.setSuppressed(true); @@ -209,7 +209,7 @@ public class AnimateEffect extends AnimateEffectBase { // suppress static abilities from the animated card final ArrayList removedStatics = new ArrayList(); - if (params.containsKey("OverwriteStatics") || params.containsKey("RemoveAllAbilities")) { + if (sa.hasParam("OverwriteStatics") || sa.hasParam("RemoveAllAbilities")) { final ArrayList staticsToRemove = c.getStaticAbilities(); for (final StaticAbility stAb : staticsToRemove) { stAb.setTemporarilySuppressed(true); @@ -219,7 +219,7 @@ public class AnimateEffect extends AnimateEffectBase { // suppress static abilities from the animated card final ArrayList removedReplacements = new ArrayList(); - if (params.containsKey("OverwriteReplacements") || params.containsKey("RemoveAllAbilities")) { + if (sa.hasParam("OverwriteReplacements") || sa.hasParam("RemoveAllAbilities")) { final ArrayList replacementsToRemove = c.getReplacementEffects(); for (final ReplacementEffect re : replacementsToRemove) { re.setTemporarilySuppressed(true); @@ -241,7 +241,7 @@ public class AnimateEffect extends AnimateEffectBase { @Override public void execute() { - doUnanimate(c, params, finalDesc, hiddenKeywords, addedAbilities, addedTriggers, + doUnanimate(c, sa, finalDesc, hiddenKeywords, addedAbilities, addedTriggers, colorTimestamp, givesStAbs, removedAbilities, timestamp); // give back suppressed triggers @@ -262,15 +262,15 @@ public class AnimateEffect extends AnimateEffectBase { }; if (!permanent) { - if (params.containsKey("UntilEndOfCombat")) { + if (sa.hasParam("UntilEndOfCombat")) { Singletons.getModel().getGame().getEndOfCombat().addUntil(unanimate); - } else if (params.containsKey("UntilHostLeavesPlay")) { + } else if (sa.hasParam("UntilHostLeavesPlay")) { host.addLeavesPlayCommand(unanimate); - } else if (params.containsKey("UntilYourNextUpkeep")) { + } else if (sa.hasParam("UntilYourNextUpkeep")) { Singletons.getModel().getGame().getUpkeep().addUntil(host.getController(), unanimate); - } else if (params.containsKey("UntilControllerNextUntap")) { + } else if (sa.hasParam("UntilControllerNextUntap")) { Singletons.getModel().getGame().getUntap().addUntil(c.getController(), unanimate); - } else if (params.containsKey("UntilYourNextTurn")) { + } else if (sa.hasParam("UntilYourNextTurn")) { Singletons.getModel().getGame().getCleanup().addUntilYourNextTurn(host.getController(), unanimate); } else { Singletons.getModel().getGame().getEndOfTurn().addUntil(unanimate); @@ -283,27 +283,27 @@ public class AnimateEffect extends AnimateEffectBase { * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final Card host = sa.getSourceCard(); final Map svars = host.getSVars(); int power = -1; - if (params.containsKey("Power")) { - power = AbilityFactory.calculateAmount(host, params.get("Power"), sa); + if (sa.hasParam("Power")) { + power = AbilityFactory.calculateAmount(host, sa.getParam("Power"), sa); } int toughness = -1; - if (params.containsKey("Toughness")) { - toughness = AbilityFactory.calculateAmount(host, params.get("Toughness"), sa); + if (sa.hasParam("Toughness")) { + toughness = AbilityFactory.calculateAmount(host, sa.getParam("Toughness"), sa); } - final boolean permanent = params.containsKey("Permanent"); + final boolean permanent = sa.hasParam("Permanent"); final ArrayList types = new ArrayList(); - if (params.containsKey("Types")) { - types.addAll(Arrays.asList(params.get("Types").split(","))); + if (sa.hasParam("Types")) { + types.addAll(Arrays.asList(sa.getParam("Types").split(","))); } final ArrayList keywords = new ArrayList(); - if (params.containsKey("Keywords")) { - keywords.addAll(Arrays.asList(params.get("Keywords").split(" & "))); + if (sa.hasParam("Keywords")) { + keywords.addAll(Arrays.asList(sa.getParam("Keywords").split(" & "))); } // allow SVar substitution for keywords for (int i = 0; i < keywords.size(); i++) { @@ -314,14 +314,14 @@ public class AnimateEffect extends AnimateEffectBase { } } final ArrayList colors = new ArrayList(); - if (params.containsKey("Colors")) { - colors.addAll(Arrays.asList(params.get("Colors").split(","))); + if (sa.hasParam("Colors")) { + colors.addAll(Arrays.asList(sa.getParam("Colors").split(","))); } final StringBuilder sb = new StringBuilder(); final Target tgt = sa.getTarget(); - final List tgts = tgt != null ? tgt.getTargetCards() : AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa); + final List tgts = tgt != null ? tgt.getTargetCards() : AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa); for (final Card c : tgts) { sb.append(c).append(" "); @@ -369,13 +369,13 @@ public class AnimateEffect extends AnimateEffectBase { // sb.append(abilities) // sb.append(triggers) if (!permanent) { - if (params.containsKey("UntilEndOfCombat")) { + if (sa.hasParam("UntilEndOfCombat")) { sb.append(" until end of combat."); - } else if (params.containsKey("UntilHostLeavesPlay")) { + } else if (sa.hasParam("UntilHostLeavesPlay")) { sb.append(" until ").append(host).append(" leaves the battlefield."); - } else if (params.containsKey("UntilYourNextUpkeep")) { + } else if (sa.hasParam("UntilYourNextUpkeep")) { sb.append(" until your next upkeep."); - } else if (params.containsKey("UntilControllerNextUntap")) { + } else if (sa.hasParam("UntilControllerNextUntap")) { sb.append(" until its controller's next untap step."); } else { sb.append(" until end of turn."); diff --git a/src/main/java/forge/card/abilityfactory/effects/AnimateEffectBase.java b/src/main/java/forge/card/abilityfactory/effects/AnimateEffectBase.java index c776e978dd6..9986b06a7c6 100644 --- a/src/main/java/forge/card/abilityfactory/effects/AnimateEffectBase.java +++ b/src/main/java/forge/card/abilityfactory/effects/AnimateEffectBase.java @@ -18,9 +18,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; -import java.util.Map; - - import forge.Card; import forge.card.abilityfactory.SpellEffect; @@ -51,7 +48,7 @@ public abstract class AnimateEffectBase extends SpellEffect { * a {@link java.util.ArrayList} object. * @return a long. */ - long doAnimate(final Card c, final Map params, final int power, final int toughness, + long doAnimate(final Card c, final SpellAbility sa, final int power, final int toughness, final ArrayList types, final ArrayList removeTypes, final String colors, final ArrayList keywords, final ArrayList removeKeywords, final ArrayList hiddenKeywords, final long timestamp) { @@ -61,34 +58,34 @@ public abstract class AnimateEffectBase extends SpellEffect { boolean removeSubTypes = false; boolean removeCreatureTypes = false; - if (params.containsKey("OverwriteTypes")) { + if (sa.hasParam("OverwriteTypes")) { removeSuperTypes = true; removeCardTypes = true; removeSubTypes = true; removeCreatureTypes = true; } - if (params.containsKey("KeepSupertypes")) { + if (sa.hasParam("KeepSupertypes")) { removeSuperTypes = false; } - if (params.containsKey("KeepCardTypes")) { + if (sa.hasParam("KeepCardTypes")) { removeCardTypes = false; } - if (params.containsKey("RemoveSuperTypes")) { + if (sa.hasParam("RemoveSuperTypes")) { removeSuperTypes = true; } - if (params.containsKey("RemoveCardTypes")) { + if (sa.hasParam("RemoveCardTypes")) { removeCardTypes = true; } - if (params.containsKey("RemoveSubTypes")) { + if (sa.hasParam("RemoveSubTypes")) { removeSubTypes = true; } - if (params.containsKey("RemoveCreatureTypes")) { + if (sa.hasParam("RemoveCreatureTypes")) { removeCreatureTypes = true; } @@ -101,13 +98,13 @@ public abstract class AnimateEffectBase extends SpellEffect { removeCreatureTypes, timestamp); } - c.addChangedCardKeywords(keywords, removeKeywords, params.containsKey("RemoveAllAbilities"), timestamp); + c.addChangedCardKeywords(keywords, removeKeywords, sa.hasParam("RemoveAllAbilities"), timestamp); for (final String k : hiddenKeywords) { c.addExtrinsicKeyword(k); } - final long colorTimestamp = c.addColor(colors, c, !params.containsKey("OverwriteColors"), true); + final long colorTimestamp = c.addColor(colors, c, !sa.hasParam("OverwriteColors"), true); return colorTimestamp; } @@ -135,7 +132,7 @@ public abstract class AnimateEffectBase extends SpellEffect { * @param timestamp * a long. */ - void doUnanimate(final Card c, final Map params, final String colorDesc, + void doUnanimate(final Card c, SpellAbility sa, final String colorDesc, final ArrayList addedKeywords, final ArrayList addedAbilities, final ArrayList addedTriggers, final long colorTimestamp, final boolean givesStAbs, final ArrayList removedAbilities, final long timestamp) { @@ -149,23 +146,23 @@ public abstract class AnimateEffectBase extends SpellEffect { c.setStaticAbilities(new ArrayList()); } - if (params.containsKey("Types") || params.containsKey("RemoveTypes") - || params.containsKey("RemoveCreatureTypes")) { + if (sa.hasParam("Types") || sa.hasParam("RemoveTypes") + || sa.hasParam("RemoveCreatureTypes")) { c.removeChangedCardTypes(timestamp); } - c.removeColor(colorDesc, c, !params.containsKey("OverwriteColors"), colorTimestamp); + c.removeColor(colorDesc, c, !sa.hasParam("OverwriteColors"), colorTimestamp); for (final String k : addedKeywords) { c.removeExtrinsicKeyword(k); } - for (final SpellAbility sa : addedAbilities) { - c.removeSpellAbility(sa); + for (final SpellAbility saAdd : addedAbilities) { + c.removeSpellAbility(saAdd); } - for (final SpellAbility sa : removedAbilities) { - c.addSpellAbility(sa); + for (final SpellAbility saRem : removedAbilities) { + c.addSpellAbility(saRem); } for (final Trigger t : addedTriggers) { diff --git a/src/main/java/forge/card/abilityfactory/effects/AttachEffect.java b/src/main/java/forge/card/abilityfactory/effects/AttachEffect.java index b36999abbd0..43e046ac72c 100644 --- a/src/main/java/forge/card/abilityfactory/effects/AttachEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/AttachEffect.java @@ -2,8 +2,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.List; -import java.util.Map; - import forge.Card; import forge.CardLists; import forge.Command; @@ -26,7 +24,7 @@ public class AttachEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { if( sa.getSourceCard().isAura() ) { // The Spell_Permanent (Auras) version of this AF needs to @@ -39,37 +37,37 @@ public class AttachEffect extends SpellEffect { Card source = sa.getSourceCard(); Card card = sa.getSourceCard(); - final List targets = getTargetObjects(sa, params); + final List targets = getTargetObjects(sa); - if (params.containsKey("Object")) { - card = AbilityFactory.getDefinedCards(source, params.get("Object"), sa).get(0); + if (sa.hasParam("Object")) { + card = AbilityFactory.getDefinedCards(source, sa.getParam("Object"), sa).get(0); } final StringBuilder sb = new StringBuilder(); sb.append("Do you want to attach " + card + " to " + targets + "?"); - if (sa.getActivatingPlayer().isHuman() && params.containsKey("Optional") + if (sa.getActivatingPlayer().isHuman() && sa.hasParam("Optional") && !GameActionUtil.showYesNoDialog(source, sb.toString())) { return; } // If Cast Targets will be checked on the Stack for (final Object o : targets) { - handleAttachment(card, o, params); + handleAttachment(card, o, sa); } } @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final String conditionDesc = params.get("ConditionDescription"); + final String conditionDesc = sa.getParam("ConditionDescription"); if (conditionDesc != null) { sb.append(conditionDesc).append(" "); } sb.append(" Attach to "); - final List targets = getTargetObjects(sa, params); + final List targets = getTargetObjects(sa); // Should never allow more than one Attachment per card for (final Object o : targets) { @@ -89,7 +87,7 @@ public class AttachEffect extends SpellEffect { * @param af * the af */ - public static void handleAttachment(final Card card, final Object o, final Map params) { + public static void handleAttachment(final Card card, final Object o, final SpellAbility sa) { if (o instanceof Card) { final Card c = (Card) o; @@ -99,7 +97,7 @@ public class AttachEffect extends SpellEffect { // Spellweaver Volute, Dance of the Dead, Animate Dead // Although honestly, I'm not sure if the three of those could // handle being scripted - final boolean gainControl = "GainControl".equals(params.get("AILogic")); + final boolean gainControl = "GainControl".equals(sa.getParam("AILogic")); handleAura(card, c, gainControl); } else if (card.isEquipment()) { card.equipCard(c); @@ -232,10 +230,8 @@ public class AttachEffect extends SpellEffect { */ public static SpellAbility getAttachSpellAbility(final Card source) { SpellAbility aura = null; - AbilityFactory af = null; for (final SpellAbility sa : source.getSpells()) { - af = sa.getAbilityFactory(); - if ((af != null) && af.getAPI() == ApiType.Attach) { + if (sa.getApi() == ApiType.Attach) { aura = sa; break; } @@ -259,9 +255,8 @@ public class AttachEffect extends SpellEffect { return false; } aura.setActivatingPlayer(source.getController()); - final AbilityFactory af = aura.getAbilityFactory(); final Target tgt = aura.getTarget(); - final boolean gainControl = "GainControl".equals(af.getMapParams().get("AILogic")); + final boolean gainControl = "GainControl".equals(aura.getParam("AILogic")); if (source.getController().isHuman()) { if (tgt.canTgtPlayer()) { @@ -292,7 +287,7 @@ public class AttachEffect extends SpellEffect { } } - else if (AttachAi.attachPreference(aura, af.getMapParams(), tgt, true)) { + else if (AttachAi.attachPreference(aura, tgt, true)) { final Object o = aura.getTarget().getTargets().get(0); if (o instanceof Card) { //source.enchantEntity((Card) o); diff --git a/src/main/java/forge/card/abilityfactory/effects/BondEffect.java b/src/main/java/forge/card/abilityfactory/effects/BondEffect.java index 53d019a308a..33ee2c14166 100644 --- a/src/main/java/forge/card/abilityfactory/effects/BondEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/BondEffect.java @@ -14,10 +14,10 @@ import forge.gui.GuiChoose; public class BondEffect extends SpellEffect { @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { // find card that triggered pairing first ArrayList trigCards; - trigCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa); + trigCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa); // Check that this card hasn't already become paired by an earlier trigger if (trigCards.get(0).isPaired() || !trigCards.get(0).isInZone(ZoneType.Battlefield)) { @@ -26,7 +26,7 @@ public class BondEffect extends SpellEffect { // find list of valid cards to pair with List cards = Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield); - cards = AbilityFactory.filterListByType(cards, params.get("ValidCards"), sa); + cards = AbilityFactory.filterListByType(cards, sa.getParam("ValidCards"), sa); if (cards.isEmpty()) { return; } @@ -50,9 +50,9 @@ public class BondEffect extends SpellEffect { } @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { ArrayList tgts; - tgts = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa); + tgts = AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa); final StringBuilder sb = new StringBuilder(); diff --git a/src/main/java/forge/card/abilityfactory/effects/ChangeZoneAllEffect.java b/src/main/java/forge/card/abilityfactory/effects/ChangeZoneAllEffect.java index bb235605754..fe966b400fa 100644 --- a/src/main/java/forge/card/abilityfactory/effects/ChangeZoneAllEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/ChangeZoneAllEffect.java @@ -20,7 +20,7 @@ public class ChangeZoneAllEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { // TODO build Stack Description will need expansion as more cards are added final String[] desc = sa.getDescription().split(":"); @@ -33,9 +33,9 @@ public class ChangeZoneAllEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { - final ZoneType destination = ZoneType.smartValueOf(params.get("Destination")); - final List origin = ZoneType.listValueOf(params.get("Origin")); + public void resolve(SpellAbility sa) { + final ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination")); + final List origin = ZoneType.listValueOf(sa.getParam("Origin")); List cards = null; @@ -44,8 +44,8 @@ public class ChangeZoneAllEffect extends SpellEffect { final Target tgt = sa.getTarget(); if (tgt != null) { tgtPlayers = tgt.getTargetPlayers(); - } else if (params.containsKey("Defined")) { - tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa); + } else if (sa.hasParam("Defined")) { + tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), sa.getParam("Defined"), sa); } if ((tgtPlayers == null) || tgtPlayers.isEmpty()) { @@ -54,17 +54,17 @@ public class ChangeZoneAllEffect extends SpellEffect { cards = tgtPlayers.get(0).getCardsIn(origin); } - cards = AbilityFactory.filterListByType(cards, params.get("ChangeType"), sa); + cards = AbilityFactory.filterListByType(cards, sa.getParam("ChangeType"), sa); - if (params.containsKey("ForgetOtherRemembered")) { + if (sa.hasParam("ForgetOtherRemembered")) { sa.getSourceCard().clearRemembered(); } - final String remember = params.get("RememberChanged"); + final String remember = sa.getParam("RememberChanged"); // I don't know if library position is necessary. It's here if it is, // just in case - final int libraryPos = params.containsKey("LibraryPosition") ? Integer.parseInt(params.get("LibraryPosition")) + final int libraryPos = sa.hasParam("LibraryPosition") ? Integer.parseInt(sa.getParam("LibraryPosition")) : 0; for (final Card c : cards) { if (destination.equals(ZoneType.Battlefield)) { @@ -75,20 +75,20 @@ public class ChangeZoneAllEffect extends SpellEffect { continue; } } - if (params.containsKey("Tapped")) { + if (sa.hasParam("Tapped")) { c.setTapped(true); } } - if (params.containsKey("GainControl")) { + if (sa.hasParam("GainControl")) { c.addController(sa.getSourceCard()); Singletons.getModel().getGame().getAction().moveToPlay(c, sa.getActivatingPlayer()); } else { final Card movedCard = Singletons.getModel().getGame().getAction().moveTo(destination, c, libraryPos); - if (params.containsKey("ExileFaceDown")) { + if (sa.hasParam("ExileFaceDown")) { movedCard.setState(CardCharacteristicName.FaceDown); } - if (params.containsKey("Tapped")) { + if (sa.hasParam("Tapped")) { movedCard.setTapped(true); } } @@ -100,7 +100,7 @@ public class ChangeZoneAllEffect extends SpellEffect { // if Shuffle parameter exists, and any amount of cards were owned by // that player, then shuffle that library - if (params.containsKey("Shuffle")) { + if (sa.hasParam("Shuffle")) { for( Player p : Singletons.getModel().getGame().getPlayers()) { if (Iterables.any(cards, CardPredicates.isOwner(p))) { p.shuffle(); diff --git a/src/main/java/forge/card/abilityfactory/effects/ChangeZoneEffect.java b/src/main/java/forge/card/abilityfactory/effects/ChangeZoneEffect.java index 7f1f38fbce8..c4cf24f0093 100644 --- a/src/main/java/forge/card/abilityfactory/effects/ChangeZoneEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/ChangeZoneEffect.java @@ -2,8 +2,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.List; -import java.util.Map; - import com.google.common.base.Predicates; import forge.Card; @@ -28,17 +26,17 @@ import forge.gui.GuiChoose; public class ChangeZoneEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { String origin = ""; - if (params.containsKey("Origin")) { - origin = params.get("Origin"); + if (sa.hasParam("Origin")) { + origin = sa.getParam("Origin"); } - if (ZoneType.isHidden(origin, params.containsKey("Hidden"))) { - return changeHiddenOriginStackDescription(params, sa); + if (ZoneType.isHidden(origin, sa.hasParam("Hidden"))) { + return changeHiddenOriginStackDescription(sa); } else if (ZoneType.isKnown(origin)) { - return changeKnownOriginStackDescription(params, sa); + return changeKnownOriginStackDescription(sa); } return ""; @@ -55,7 +53,7 @@ public class ChangeZoneEffect extends SpellEffect { * a {@link forge.card.spellability.SpellAbility} object. * @return a {@link java.lang.String} object. */ - private static String changeHiddenOriginStackDescription(final Map params, final SpellAbility sa) { + private static String changeHiddenOriginStackDescription(final SpellAbility sa) { // TODO build Stack Description will need expansion as more cards are // added @@ -68,32 +66,32 @@ public class ChangeZoneEffect extends SpellEffect { sb.append(" "); - if (params.containsKey("StackDescription")) { - String stackDesc = params.get("StackDescription"); + if (sa.hasParam("StackDescription")) { + String stackDesc = sa.getParam("StackDescription"); if (stackDesc.equals("None")) { // Intentionally blank to avoid double spaces, otherwise: sb.append(""); } else if (stackDesc.equals("SpellDescription")) { - sb.append(params.get("SpellDescription")); + sb.append(sa.getParam("SpellDescription")); } else { sb.append(stackDesc); } } else { String origin = ""; - if (params.containsKey("Origin")) { - origin = params.get("Origin"); + if (sa.hasParam("Origin")) { + origin = sa.getParam("Origin"); } - final String destination = params.get("Destination"); + final String destination = sa.getParam("Destination"); - final String type = params.containsKey("ChangeType") ? params.get("ChangeType") : "Card"; - final int num = params.containsKey("ChangeNum") ? AbilityFactory.calculateAmount(host, - params.get("ChangeNum"), sa) : 1; + final String type = sa.hasParam("ChangeType") ? sa.getParam("ChangeType") : "Card"; + final int num = sa.hasParam("ChangeNum") ? AbilityFactory.calculateAmount(host, + sa.getParam("ChangeNum"), sa) : 1; - if (origin.equals("Library") && params.containsKey("Defined")) { + if (origin.equals("Library") && sa.hasParam("Defined")) { // for now, just handle the Exile from top of library case, but // this can be expanded... if (destination.equals("Exile")) { sb.append("Exile the top card of your library"); - if (params.containsKey("ExileFaceDown")) { + if (sa.hasParam("ExileFaceDown")) { sb.append(" face down"); } } else if (destination.equals("Ante")) { @@ -111,7 +109,7 @@ public class ChangeZoneEffect extends SpellEffect { if (destination.equals("Battlefield")) { sb.append("onto the battlefield"); - if (params.containsKey("Tapped")) { + if (sa.hasParam("Tapped")) { sb.append(" tapped"); } @@ -133,8 +131,7 @@ public class ChangeZoneEffect extends SpellEffect { sb.append("onto the battlefield."); } if (destination.equals("Library")) { - final int libraryPos = params.containsKey("LibraryPosition") ? Integer.parseInt(params - .get("LibraryPosition")) : 0; + final int libraryPos = sa.hasParam("LibraryPosition") ? Integer.parseInt(sa.getParam("LibraryPosition")) : 0; if (libraryPos == 0) { sb.append("on top"); @@ -173,7 +170,7 @@ public class ChangeZoneEffect extends SpellEffect { * a {@link forge.card.spellability.SpellAbility} object. * @return a {@link java.lang.String} object. */ - private static String changeKnownOriginStackDescription(final Map params, final SpellAbility sa) { + private static String changeKnownOriginStackDescription(final SpellAbility sa) { final StringBuilder sb = new StringBuilder(); final Card host = sa.getSourceCard(); @@ -184,8 +181,8 @@ public class ChangeZoneEffect extends SpellEffect { sb.append(" "); - final ZoneType destination = ZoneType.smartValueOf(params.get("Destination")); - final ZoneType origin = ZoneType.smartValueOf(params.get("Origin")); + final ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination")); + final ZoneType origin = ZoneType.smartValueOf(sa.getParam("Origin")); final StringBuilder sbTargets = new StringBuilder(); @@ -195,7 +192,7 @@ public class ChangeZoneEffect extends SpellEffect { } else { // otherwise add self to list and go from there tgts = new ArrayList(); - for (final Card c : sa.knownDetermineDefined(params.get("Defined"))) { + for (final Card c : sa.knownDetermineDefined(sa.getParam("Defined"))) { tgts.add(c); } } @@ -217,10 +214,10 @@ public class ChangeZoneEffect extends SpellEffect { } sb.append(" onto the battlefield"); - if (params.containsKey("Tapped")) { + if (sa.hasParam("Tapped")) { sb.append(" tapped"); } - if (params.containsKey("GainControl")) { + if (sa.hasParam("GainControl")) { sb.append(" under your control"); } sb.append("."); @@ -235,7 +232,7 @@ public class ChangeZoneEffect extends SpellEffect { } if (destination.equals(ZoneType.Library)) { - if (params.containsKey("Shuffle")) { // for things like Gaea's + if (sa.hasParam("Shuffle")) { // for things like Gaea's // Blessing sb.append("Shuffle").append(targetname); @@ -248,8 +245,7 @@ public class ChangeZoneEffect extends SpellEffect { // this needs to be zero indexed. Top = 0, Third = 2, -1 = // Bottom - final int libraryPosition = params.containsKey("LibraryPosition") ? Integer.parseInt(params - .get("LibraryPosition")) : 0; + final int libraryPosition = sa.hasParam("LibraryPosition") ? Integer.parseInt(sa.getParam("LibraryPosition")) : 0; if (libraryPosition == -1) { sb.append(" on the bottom of").append(pronoun).append("owner's library."); @@ -293,26 +289,25 @@ public class ChangeZoneEffect extends SpellEffect { *

* changeZoneResolve. *

- * - * @param af - * a {@link forge.card.abilityfactory.AbilityFactory} object. * @param sa * a {@link forge.card.spellability.SpellAbility} object. + * @param af + * a {@link forge.card.abilityfactory.AbilityFactory} object. */ @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { String origin = ""; - if (params.containsKey("Origin")) { - origin = params.get("Origin"); + if (sa.hasParam("Origin")) { + origin = sa.getParam("Origin"); } - if (ZoneType.isHidden(origin, params.containsKey("Hidden")) && !params.containsKey("Ninjutsu")) { - changeHiddenOriginResolve(params, sa); + if (ZoneType.isHidden(origin, sa.hasParam("Hidden")) && !sa.hasParam("Ninjutsu")) { + changeHiddenOriginResolve(sa); } else { - //else if (isKnown(origin) || params.containsKey("Ninjutsu")) { + //else if (isKnown(origin) || sa.containsKey("Ninjutsu")) { // Why is this an elseif and not just an else? - changeKnownOriginResolve(params, sa); + changeKnownOriginResolve(sa); } } @@ -326,7 +321,7 @@ public class ChangeZoneEffect extends SpellEffect { * @param sa * a {@link forge.card.spellability.SpellAbility} object. */ - private static void changeKnownOriginResolve(final Map params, final SpellAbility sa) { + private static void changeKnownOriginResolve(final SpellAbility sa) { ArrayList tgtCards; ArrayList sas; @@ -334,15 +329,15 @@ public class ChangeZoneEffect extends SpellEffect { final Player player = sa.getActivatingPlayer(); final Card hostCard = sa.getSourceCard(); - final ZoneType destination = ZoneType.smartValueOf(params.get("Destination")); - final List origin = ZoneType.listValueOf(params.get("Origin")); + final ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination")); + final List origin = ZoneType.listValueOf(sa.getParam("Origin")); if (tgt != null) { tgtCards = tgt.getTargetCards(); } else { tgtCards = new ArrayList(); for(ZoneType o : origin) { - for (final Card c : sa.knownDetermineDefined(params.get("Defined"))) { + for (final Card c : sa.knownDetermineDefined(sa.getParam("Defined"))) { tgtCards.add(c); } } @@ -352,7 +347,7 @@ public class ChangeZoneEffect extends SpellEffect { if (tgt != null) { sas = tgt.getTargetSAs(); } else { - sas = AbilityFactory.getDefinedSpellAbilities(sa.getSourceCard(), params.get("Defined"), sa); + sas = AbilityFactory.getDefinedSpellAbilities(sa.getSourceCard(), sa.getParam("Defined"), sa); } for (final SpellAbility tgtSA : sas) { @@ -368,18 +363,18 @@ public class ChangeZoneEffect extends SpellEffect { removeFromStack(tgtSA, sa, si); } // End of change from stack - final String remember = params.get("RememberChanged"); - final String imprint = params.get("Imprint"); + final String remember = sa.getParam("RememberChanged"); + final String imprint = sa.getParam("Imprint"); - if (params.containsKey("Unimprint")) { + if (sa.hasParam("Unimprint")) { hostCard.clearImprinted(); } - if (params.containsKey("ForgetOtherRemembered")) { + if (sa.hasParam("ForgetOtherRemembered")) { hostCard.clearRemembered(); } - boolean optional = params.containsKey("Optional"); + boolean optional = sa.hasParam("Optional"); if (tgtCards.size() != 0) { for (final Card tgtC : tgtCards) { @@ -401,26 +396,25 @@ public class ChangeZoneEffect extends SpellEffect { if (destination.equals(ZoneType.Library)) { // library position is zero indexed - final int libraryPosition = params.containsKey("LibraryPosition") ? Integer.parseInt(params - .get("LibraryPosition")) : 0; + final int libraryPosition = sa.hasParam("LibraryPosition") ? Integer.parseInt(sa.getParam("LibraryPosition")) : 0; movedCard = Singletons.getModel().getGame().getAction().moveToLibrary(tgtC, libraryPosition); // for things like Gaea's Blessing - if (params.containsKey("Shuffle")) { + if (sa.hasParam("Shuffle")) { tgtC.getOwner().shuffle(); } } else { if (destination.equals(ZoneType.Battlefield)) { - if (params.containsKey("Tapped") || params.containsKey("Ninjutsu")) { + if (sa.hasParam("Tapped") || sa.hasParam("Ninjutsu")) { tgtC.setTapped(true); } - if (params.containsKey("GainControl")) { + if (sa.hasParam("GainControl")) { tgtC.addController(sa.getSourceCard()); } - if (params.containsKey("AttachedTo")) { + if (sa.hasParam("AttachedTo")) { final ArrayList list = AbilityFactory.getDefinedCards(sa.getSourceCard(), - params.get("AttachedTo"), sa); + sa.getParam("AttachedTo"), sa); if (!list.isEmpty()) { final Card attachedTo = list.get(0); if (tgtC.isEnchanting()) { @@ -448,17 +442,17 @@ public class ChangeZoneEffect extends SpellEffect { movedCard = Singletons.getModel().getGame().getAction() .moveTo(tgtC.getController().getZone(destination), tgtC); - if (params.containsKey("Ninjutsu") || params.containsKey("Attacking")) { + if (sa.hasParam("Ninjutsu") || sa.hasParam("Attacking")) { Singletons.getModel().getGame().getCombat().addAttacker(tgtC); Singletons.getModel().getGame().getCombat().addUnblockedAttacker(tgtC); } - if (params.containsKey("Tapped") || params.containsKey("Ninjutsu")) { + if (sa.hasParam("Tapped") || sa.hasParam("Ninjutsu")) { tgtC.setTapped(true); } } else { movedCard = Singletons.getModel().getGame().getAction().moveTo(destination, tgtC); // If a card is Exiled from the stack, remove its spells from the stack - if (params.containsKey("Fizzle")) { + if (sa.hasParam("Fizzle")) { ArrayList spells = tgtC.getSpellAbilities(); for (SpellAbility spell : spells) { if (tgtC.isInZone(ZoneType.Exile)) { @@ -467,7 +461,7 @@ public class ChangeZoneEffect extends SpellEffect { } } } - if (params.containsKey("ExileFaceDown")) { + if (sa.hasParam("ExileFaceDown")) { movedCard.setState(CardCharacteristicName.FaceDown); } } @@ -492,13 +486,13 @@ public class ChangeZoneEffect extends SpellEffect { * @param sa * a {@link forge.card.spellability.SpellAbility} object. */ - private static void changeHiddenOriginResolve(final Map params, final SpellAbility sa) { + private static void changeHiddenOriginResolve(final SpellAbility sa) { ArrayList fetchers; - if (params.containsKey("DefinedPlayer")) { - fetchers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("DefinedPlayer"), sa); + if (sa.hasParam("DefinedPlayer")) { + fetchers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), sa.getParam("DefinedPlayer"), sa); } else { - fetchers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa); + fetchers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), sa.getParam("Defined"), sa); } // handle case when Defined is for a Card @@ -507,8 +501,8 @@ public class ChangeZoneEffect extends SpellEffect { } Player chooser = null; - if (params.containsKey("Chooser")) { - final String choose = params.get("Chooser"); + if (sa.hasParam("Chooser")) { + final String choose = sa.getParam("Chooser"); if (choose.equals("Targeted") && (sa.getTarget().getTargetPlayers() != null)) { chooser = sa.getTarget().getTargetPlayers().get(0); } else { @@ -522,9 +516,9 @@ public class ChangeZoneEffect extends SpellEffect { decider = player; } if (decider.isComputer()) { - ChangeZoneAi.hiddenOriginResolveAI(decider, params, sa, player); + ChangeZoneAi.hiddenOriginResolveAI(decider, sa, player); } else { - changeHiddenOriginResolveHuman(params, sa, player); + changeHiddenOriginResolveHuman(sa, player); } } } @@ -541,10 +535,10 @@ public class ChangeZoneEffect extends SpellEffect { * @param player * a {@link forge.game.player.Player} object. */ - private static void changeHiddenOriginResolveHuman(final Map params, final SpellAbility sa, Player player) { + private static void changeHiddenOriginResolveHuman(final SpellAbility sa, Player player) { final Card card = sa.getSourceCard(); final List movedCards = new ArrayList(); - final boolean defined = params.containsKey("Defined"); + final boolean defined = sa.hasParam("Defined"); final Target tgt = sa.getTarget(); if (tgt != null) { @@ -556,22 +550,22 @@ public class ChangeZoneEffect extends SpellEffect { } List origin = new ArrayList(); - if (params.containsKey("Origin")) { - origin = ZoneType.listValueOf(params.get("Origin")); + if (sa.hasParam("Origin")) { + origin = ZoneType.listValueOf(sa.getParam("Origin")); } - ZoneType destination = ZoneType.smartValueOf(params.get("Destination")); + ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination")); // this needs to be zero indexed. Top = 0, Third = 2 - int libraryPos = params.containsKey("LibraryPosition") ? Integer.parseInt(params.get("LibraryPosition")) : 0; + int libraryPos = sa.hasParam("LibraryPosition") ? Integer.parseInt(sa.getParam("LibraryPosition")) : 0; - if (params.containsKey("OriginChoice")) { + if (sa.hasParam("OriginChoice")) { // Currently only used for Mishra, but may be used by other things // Improve how this message reacts for other cards - final List alt = ZoneType.listValueOf(params.get("OriginAlternative")); + final List alt = ZoneType.listValueOf(sa.getParam("OriginAlternative")); List altFetchList = player.getCardsIn(alt); - altFetchList = AbilityFactory.filterListByType(altFetchList, params.get("ChangeType"), sa); + altFetchList = AbilityFactory.filterListByType(altFetchList, sa.getParam("ChangeType"), sa); final StringBuilder sb = new StringBuilder(); - sb.append(params.get("AlternativeMessage")).append(" "); + sb.append(sa.getParam("AlternativeMessage")).append(" "); sb.append(altFetchList.size()).append(" cards match your searching type in Alternate Zones."); if (!GameActionUtil.showYesNoDialog(card, sb.toString())) { @@ -579,36 +573,35 @@ public class ChangeZoneEffect extends SpellEffect { } } - if (params.containsKey("DestinationAlternative")) { + if (sa.hasParam("DestinationAlternative")) { final StringBuilder sb = new StringBuilder(); - sb.append(params.get("AlternativeDestinationMessage")); + sb.append(sa.getParam("AlternativeDestinationMessage")); if (!GameActionUtil.showYesNoDialog(card, sb.toString())) { - destination = ZoneType.smartValueOf(params.get("DestinationAlternative")); - libraryPos = params.containsKey("LibraryPositionAlternative") ? Integer.parseInt(params - .get("LibraryPositionAlternative")) : 0; + destination = ZoneType.smartValueOf(sa.getParam("DestinationAlternative")); + libraryPos = sa.hasParam("LibraryPositionAlternative") ? Integer.parseInt(sa.getParam("LibraryPositionAlternative")) : 0; } } - int changeNum = params.containsKey("ChangeNum") ? AbilityFactory.calculateAmount(card, params.get("ChangeNum"), + int changeNum = sa.hasParam("ChangeNum") ? AbilityFactory.calculateAmount(card, sa.getParam("ChangeNum"), sa) : 1; List fetchList; if (defined) { - fetchList = new ArrayList(AbilityFactory.getDefinedCards(card, params.get("Defined"), sa)); - if (!params.containsKey("ChangeNum")) { + fetchList = new ArrayList(AbilityFactory.getDefinedCards(card, sa.getParam("Defined"), sa)); + if (!sa.hasParam("ChangeNum")) { changeNum = fetchList.size(); } } else if (!origin.contains(ZoneType.Library) && !origin.contains(ZoneType.Hand) - && !params.containsKey("DefinedPlayer")) { + && !sa.hasParam("DefinedPlayer")) { fetchList = Singletons.getModel().getGame().getCardsIn(origin); } else { fetchList = player.getCardsIn(origin); } if (!defined) { - if (origin.contains(ZoneType.Library) && !defined && !params.containsKey("NoLooking")) { + if (origin.contains(ZoneType.Library) && !defined && !sa.hasParam("NoLooking")) { // Look at whole library before moving onto choosing a card GuiChoose.oneOrNone(sa.getSourceCard().getName() + " - Looking at Library", player.getCardsIn(ZoneType.Library)); @@ -619,20 +612,20 @@ public class ChangeZoneEffect extends SpellEffect { GuiChoose.oneOrNone(sa.getSourceCard().getName() + " - Looking at Opponent's Hand", player .getCardsIn(ZoneType.Hand)); } - fetchList = AbilityFactory.filterListByType(fetchList, params.get("ChangeType"), sa); + fetchList = AbilityFactory.filterListByType(fetchList, sa.getParam("ChangeType"), sa); } - final String remember = params.get("RememberChanged"); - final String forget = params.get("ForgetChanged"); - final String imprint = params.get("Imprint"); - final String selectPrompt = params.containsKey("SelectPrompt") ? params.get("SelectPrompt") : "Select a card"; + final String remember = sa.getParam("RememberChanged"); + final String forget = sa.getParam("ForgetChanged"); + final String imprint = sa.getParam("Imprint"); + final String selectPrompt = sa.hasParam("SelectPrompt") ? sa.getParam("SelectPrompt") : "Select a card"; - if (params.containsKey("Unimprint")) { + if (sa.hasParam("Unimprint")) { card.clearImprinted(); } for (int i = 0; i < changeNum; i++) { - if (params.containsKey("DifferentNames")) { + if (sa.hasParam("DifferentNames")) { for (Card c : movedCards) { fetchList = CardLists.filter(fetchList, Predicates.not(CardPredicates.nameEquals(c.getName()))); } @@ -642,11 +635,11 @@ public class ChangeZoneEffect extends SpellEffect { } Object o; - if (params.containsKey("AtRandom")) { + if (sa.hasParam("AtRandom")) { o = CardUtil.getRandom(fetchList); - } else if (params.containsKey("Mandatory")) { + } else if (sa.hasParam("Mandatory")) { o = GuiChoose.one(selectPrompt, fetchList); - } else if (params.containsKey("Defined")) { + } else if (sa.hasParam("Defined")) { o = fetchList.get(0); } else { o = GuiChoose.oneOrNone(selectPrompt, fetchList); @@ -660,21 +653,21 @@ public class ChangeZoneEffect extends SpellEffect { if (destination.equals(ZoneType.Library)) { // do not shuffle the library once we have placed a fetched // card on top. - if (origin.contains(ZoneType.Library) && (i < 1) && "False".equals(params.get("Shuffle"))) { + if (origin.contains(ZoneType.Library) && (i < 1) && "False".equals(sa.getParam("Shuffle"))) { player.shuffle(); } movedCard = Singletons.getModel().getGame().getAction().moveToLibrary(c, libraryPos); } else if (destination.equals(ZoneType.Battlefield)) { - if (params.containsKey("Tapped")) { + if (sa.hasParam("Tapped")) { c.setTapped(true); } - if (params.containsKey("GainControl")) { + if (sa.hasParam("GainControl")) { c.addController(sa.getSourceCard()); } - if (params.containsKey("AttachedTo")) { + if (sa.hasParam("AttachedTo")) { final ArrayList list = AbilityFactory.getDefinedCards(sa.getSourceCard(), - params.get("AttachedTo"), sa); + sa.getParam("AttachedTo"), sa); if (!list.isEmpty()) { final Card attachedTo = list.get(0); if (c.isEnchanting()) { @@ -691,17 +684,17 @@ public class ChangeZoneEffect extends SpellEffect { } } - if (params.containsKey("Attacking")) { + if (sa.hasParam("Attacking")) { Singletons.getModel().getGame().getCombat().addAttacker(c); } movedCard = Singletons.getModel().getGame().getAction().moveTo(c.getController().getZone(destination), c); - if (params.containsKey("Tapped")) { + if (sa.hasParam("Tapped")) { movedCard.setTapped(true); } } else if (destination.equals(ZoneType.Exile)) { movedCard = Singletons.getModel().getGame().getAction().exile(c); - if (params.containsKey("ExileFaceDown")) { + if (sa.hasParam("ExileFaceDown")) { movedCard.setState(CardCharacteristicName.FaceDown); } } else { @@ -730,12 +723,12 @@ public class ChangeZoneEffect extends SpellEffect { } } } - if (params.containsKey("Reveal") && !movedCards.isEmpty()) { + if (sa.hasParam("Reveal") && !movedCards.isEmpty()) { GuiChoose.one(card + " - Revealed card: ", movedCards.toArray()); } if ((origin.contains(ZoneType.Library) && !destination.equals(ZoneType.Library) && !defined) - || (params.containsKey("Shuffle") && "True".equals(params.get("Shuffle")))) { + || (sa.hasParam("Shuffle") && "True".equals(sa.getParam("Shuffle")))) { player.shuffle(); } } @@ -756,25 +749,22 @@ public class ChangeZoneEffect extends SpellEffect { private static void removeFromStack(final SpellAbility tgtSA, final SpellAbility srcSA, final SpellAbilityStackInstance si) { Singletons.getModel().getGame().getStack().remove(si); - final AbilityFactory af = srcSA.getAbilityFactory(); - final Map params = af.getMapParams(); - - if (params.containsKey("Destination")) { + if (srcSA.hasParam("Destination")) { if (tgtSA.isAbility()) { // Shouldn't be able to target Abilities but leaving this in for now } else if (tgtSA.isFlashBackAbility()) { Singletons.getModel().getGame().getAction().exile(tgtSA.getSourceCard()); - } else if (params.get("Destination").equals("Graveyard")) { + } else if (srcSA.getParam("Destination").equals("Graveyard")) { Singletons.getModel().getGame().getAction().moveToGraveyard(tgtSA.getSourceCard()); - } else if (params.get("Destination").equals("Exile")) { + } else if (srcSA.getParam("Destination").equals("Exile")) { Singletons.getModel().getGame().getAction().exile(tgtSA.getSourceCard()); - } else if (params.get("Destination").equals("TopOfLibrary")) { + } else if (srcSA.getParam("Destination").equals("TopOfLibrary")) { Singletons.getModel().getGame().getAction().moveToLibrary(tgtSA.getSourceCard()); - } else if (params.get("Destination").equals("Hand")) { + } else if (srcSA.getParam("Destination").equals("Hand")) { Singletons.getModel().getGame().getAction().moveToHand(tgtSA.getSourceCard()); - } else if (params.get("Destination").equals("BottomOfLibrary")) { + } else if (srcSA.getParam("Destination").equals("BottomOfLibrary")) { Singletons.getModel().getGame().getAction().moveToBottomOfLibrary(tgtSA.getSourceCard()); - } else if (params.get("Destination").equals("ShuffleIntoLibrary")) { + } else if (srcSA.getParam("Destination").equals("ShuffleIntoLibrary")) { Singletons.getModel().getGame().getAction().moveToBottomOfLibrary(tgtSA.getSourceCard()); tgtSA.getSourceCard().getController().shuffle(); } else { @@ -783,7 +773,7 @@ public class ChangeZoneEffect extends SpellEffect { } if (!tgtSA.isAbility()) { - System.out.println("Moving spell to " + params.get("Destination")); + System.out.println("Moving spell to " + srcSA.getParam("Destination")); } } } diff --git a/src/main/java/forge/card/abilityfactory/effects/CharmEffect.java b/src/main/java/forge/card/abilityfactory/effects/CharmEffect.java index a32092bc668..d3c6465ce38 100644 --- a/src/main/java/forge/card/abilityfactory/effects/CharmEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/CharmEffect.java @@ -2,8 +2,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.List; -import java.util.Map; - import forge.Card; import forge.card.abilityfactory.AbilityFactory; import forge.card.abilityfactory.SpellEffect; @@ -15,10 +13,10 @@ import forge.gui.GuiChoose; public class CharmEffect extends SpellEffect { - public static List makePossibleOptions(final SpellAbility sa, final Map params) { + public static List makePossibleOptions(final SpellAbility sa) { final Card source = sa.getSourceCard(); - final String[] saChoices = params.get("Choices").split(","); + final String[] saChoices = sa.getParam("Choices").split(","); List choices = new ArrayList(); for (final String saChoice : saChoices) { final String ab = source.getSVar(saChoice); @@ -29,14 +27,14 @@ public class CharmEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { // all chosen modes have been chained as subabilities to this sa. // so nothing to do in this resolve } @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); // nothing stack specific for Charm @@ -44,14 +42,12 @@ public class CharmEffect extends SpellEffect { } public static void makeChoices(SpellAbility sa) { - AbilityFactory af = sa.getAbilityFactory(); - final Map params = af.getMapParams(); //this resets all previous choices sa.setSubAbility(null); - final int num = Integer.parseInt(params.containsKey("CharmNum") ? params.get("CharmNum") : "1"); - final int min = params.containsKey("MinCharmNum") ? Integer.parseInt(params.get("MinCharmNum")) : num; - final List choices = makePossibleOptions(sa, params); + final int num = Integer.parseInt(sa.hasParam("CharmNum") ? sa.getParam("CharmNum") : "1"); + final int min = sa.hasParam("MinCharmNum") ? Integer.parseInt(sa.getParam("MinCharmNum")) : num; + final List choices = makePossibleOptions(sa); List chosen = null; diff --git a/src/main/java/forge/card/abilityfactory/effects/ChooseCardEffect.java b/src/main/java/forge/card/abilityfactory/effects/ChooseCardEffect.java index d905aa8a55d..6e5c8b5c338 100644 --- a/src/main/java/forge/card/abilityfactory/effects/ChooseCardEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/ChooseCardEffect.java @@ -18,10 +18,10 @@ import forge.gui.GuiChoose; public class ChooseCardEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getTargetPlayers(sa)) { sb.append(p).append(" "); } sb.append("chooses a card."); @@ -30,30 +30,30 @@ public class ChooseCardEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card host = sa.getSourceCard(); final ArrayList chosen = new ArrayList(); final Target tgt = sa.getTarget(); - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); ZoneType choiceZone = ZoneType.Battlefield; - if (params.containsKey("ChoiceZone")) { - choiceZone = ZoneType.smartValueOf(params.get("ChoiceZone")); + if (sa.hasParam("ChoiceZone")) { + choiceZone = ZoneType.smartValueOf(sa.getParam("ChoiceZone")); } List choices = Singletons.getModel().getGame().getCardsIn(choiceZone); - if (params.containsKey("Choices")) { - choices = CardLists.getValidCards(choices, params.get("Choices"), host.getController(), host); + if (sa.hasParam("Choices")) { + choices = CardLists.getValidCards(choices, sa.getParam("Choices"), host.getController(), host); } - if (params.containsKey("TargetControls")) { + if (sa.hasParam("TargetControls")) { choices = CardLists.filterControlledBy(choices, tgtPlayers.get(0)); } - final String numericAmount = params.containsKey("Amount") ? params.get("Amount") : "1"; + final String numericAmount = sa.hasParam("Amount") ? sa.getParam("Amount") : "1"; final int validAmount = !numericAmount.matches("[0-9][0-9]?") - ? CardFactoryUtil.xCount(host, host.getSVar(params.get("Amount"))) : Integer.parseInt(numericAmount); + ? CardFactoryUtil.xCount(host, host.getSVar(sa.getParam("Amount"))) : Integer.parseInt(numericAmount); - if (params.containsKey("SunderingTitan")) { + if (sa.hasParam("SunderingTitan")) { final List land = Singletons.getModel().getGame().getLandsInPlay(); final ArrayList basic = CardUtil.getBasicTypes(); @@ -76,7 +76,7 @@ public class ChooseCardEffect extends SpellEffect { if ((tgt == null) || p.canBeTargetedBy(sa)) { for (int i = 0; i < validAmount; i++) { if (p.isHuman()) { - final String choiceTitle = params.containsKey("ChoiceTitle") ? params.get("ChoiceTitle") : "Choose a card "; + final String choiceTitle = sa.hasParam("ChoiceTitle") ? sa.getParam("ChoiceTitle") : "Choose a card "; final Card o = GuiChoose.oneOrNone(choiceTitle, choices); if (o != null) { chosen.add(o); @@ -85,12 +85,12 @@ public class ChooseCardEffect extends SpellEffect { break; } } else { // Computer - if (params.containsKey("AILogic") && params.get("AILogic").equals("BestBlocker")) { + if (sa.hasParam("AILogic") && sa.getParam("AILogic").equals("BestBlocker")) { if (!CardLists.filter(choices, Presets.UNTAPPED).isEmpty()) { choices = CardLists.filter(choices, Presets.UNTAPPED); } chosen.add(CardFactoryUtil.getBestCreatureAI(choices)); - } else if (params.containsKey("AILogic") && params.get("AILogic").equals("Clone")) { + } else if (sa.hasParam("AILogic") && sa.getParam("AILogic").equals("Clone")) { if (!CardLists.getValidCards(choices, "Permanent.YouDontCtrl,Permanent.NonLegendary", host.getController(), host).isEmpty()) { choices = CardLists.getValidCards(choices, "Permanent.YouDontCtrl,Permanent.NonLegendary", host.getController(), host); } @@ -101,7 +101,7 @@ public class ChooseCardEffect extends SpellEffect { } } host.setChosenCard(chosen); - if (params.containsKey("RememberChosen")) { + if (sa.hasParam("RememberChosen")) { for (final Card rem : chosen) { host.addRemembered(rem); } diff --git a/src/main/java/forge/card/abilityfactory/effects/ChooseCardNameEffect.java b/src/main/java/forge/card/abilityfactory/effects/ChooseCardNameEffect.java index 9d99cdd5918..36a8e4a3c9b 100644 --- a/src/main/java/forge/card/abilityfactory/effects/ChooseCardNameEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/ChooseCardNameEffect.java @@ -24,10 +24,10 @@ import forge.item.CardPrinted; public class ChooseCardNameEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getTargetPlayers(sa)) { sb.append(p).append(" "); } sb.append("names a card."); @@ -36,17 +36,17 @@ public class ChooseCardNameEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card host = sa.getSourceCard(); final Target tgt = sa.getTarget(); - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); String valid = "Card"; String validDesc = "card"; - if (params.containsKey("ValidCards")) { - valid = params.get("ValidCards"); - validDesc = params.get("ValidDesc"); + if (sa.hasParam("ValidCards")) { + valid = sa.getParam("ValidCards"); + validDesc = sa.getParam("ValidDesc"); } for (final Player p : tgtPlayers) { @@ -86,8 +86,8 @@ public class ChooseCardNameEffect extends SpellEffect { } } else { String chosen = ""; - if (params.containsKey("AILogic")) { - final String logic = params.get("AILogic"); + if (sa.hasParam("AILogic")) { + final String logic = sa.getParam("AILogic"); if (logic.equals("MostProminentInComputerDeck")) { chosen = CardFactoryUtil.getMostProminentCardName(p.getCardsIn(ZoneType.Library)); } else if (logic.equals("MostProminentInHumanDeck")) { diff --git a/src/main/java/forge/card/abilityfactory/effects/ChooseColorEffect.java b/src/main/java/forge/card/abilityfactory/effects/ChooseColorEffect.java index 9e418d24ed0..9323c3cdbf6 100644 --- a/src/main/java/forge/card/abilityfactory/effects/ChooseColorEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/ChooseColorEffect.java @@ -19,14 +19,14 @@ import forge.gui.GuiChoose; public class ChooseColorEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getTargetPlayers(sa)) { sb.append(p).append(" "); } sb.append("chooses a color"); - if (params.containsKey("OrColors")) { + if (sa.hasParam("OrColors")) { sb.append(" or colors"); } sb.append("."); @@ -35,21 +35,21 @@ public class ChooseColorEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card card = sa.getSourceCard(); - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); final Target tgt = sa.getTarget(); for (final Player p : tgtPlayers) { if ((tgt == null) || p.canBeTargetedBy(sa)) { if (sa.getActivatingPlayer().isHuman()) { - if (params.containsKey("OrColors")) { + if (sa.hasParam("OrColors")) { final List o = GuiChoose.oneOrMany("Choose a color or colors", Constant.Color.ONLY_COLORS); card.setChosenColor(new ArrayList(o)); - } else if (params.containsKey("TwoColors")) { + } else if (sa.hasParam("TwoColors")) { final List o = GuiChoose.amount("Choose two colors", Constant.Color.ONLY_COLORS, 2); card.setChosenColor(new ArrayList(o)); } else { @@ -66,8 +66,8 @@ public class ChooseColorEffect extends SpellEffect { List chosen = new ArrayList(); Player ai = sa.getActivatingPlayer(); Player opp = ai.getOpponent(); - if (params.containsKey("AILogic")) { - final String logic = params.get("AILogic"); + if (sa.hasParam("AILogic")) { + final String logic = sa.getParam("AILogic"); if (logic.equals("MostProminentInHumanDeck")) { chosen.add(CardFactoryUtil.getMostProminentColor(CardLists.filterControlledBy(Singletons.getModel().getGame().getCardsInGame(), opp))); } else if (logic.equals("MostProminentInComputerDeck")) { diff --git a/src/main/java/forge/card/abilityfactory/effects/ChooseGenericEffect.java b/src/main/java/forge/card/abilityfactory/effects/ChooseGenericEffect.java index 41a60220649..42f8ca87052 100644 --- a/src/main/java/forge/card/abilityfactory/effects/ChooseGenericEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/ChooseGenericEffect.java @@ -19,10 +19,10 @@ import forge.gui.GuiChoose; public class ChooseGenericEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getTargetPlayers(sa)) { sb.append(p).append(" "); } sb.append("chooses from a list."); @@ -31,15 +31,15 @@ public class ChooseGenericEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card host = sa.getSourceCard(); final BiMap choices = HashBiMap.create(); - for (String s : Arrays.asList(params.get("Choices").split(","))) { + for (String s : Arrays.asList(sa.getParam("Choices").split(","))) { final Map theseParams = AbilityFactory.getMapParams(host.getSVar(s)); choices.put(s, theseParams.get("ChoiceDescription")); } - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); final Target tgt = sa.getTarget(); @@ -53,7 +53,7 @@ public class ChooseGenericEffect extends SpellEffect { String choice = GuiChoose.one("Choose one", choices.values()); chosenSA = afChoice.getAbility(host.getSVar(choices.inverse().get(choice)), host); } else { //Computer AI - chosenSA = afChoice.getAbility(host.getSVar(params.get("Choices").split(",")[0]), host); + chosenSA = afChoice.getAbility(host.getSVar(sa.getParam("Choices").split(",")[0]), host); } chosenSA.setActivatingPlayer(sa.getSourceCard().getController()); ((AbilitySub) chosenSA).setParent(sa); diff --git a/src/main/java/forge/card/abilityfactory/effects/ChooseNumberEffect.java b/src/main/java/forge/card/abilityfactory/effects/ChooseNumberEffect.java index 12927951e1b..bf5d69460cb 100644 --- a/src/main/java/forge/card/abilityfactory/effects/ChooseNumberEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/ChooseNumberEffect.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.effects; import java.util.List; -import java.util.Map; import java.util.Random; import javax.swing.JOptionPane; @@ -21,10 +20,10 @@ public class ChooseNumberEffect extends SpellEffect * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getTargetPlayers(sa)) { sb.append(p).append(" "); } sb.append("chooses a number."); @@ -33,28 +32,28 @@ public class ChooseNumberEffect extends SpellEffect } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card card = sa.getSourceCard(); - //final int min = params.containsKey("Min") ? Integer.parseInt(params.get("Min")) : 0; - //final int max = params.containsKey("Max") ? Integer.parseInt(params.get("Max")) : 99; - final boolean random = params.containsKey("Random"); + //final int min = sa.containsKey("Min") ? Integer.parseInt(sa.get("Min")) : 0; + //final int max = sa.containsKey("Max") ? Integer.parseInt(sa.get("Max")) : 99; + final boolean random = sa.hasParam("Random"); final int min; - if (!params.containsKey("Min")) { + if (!sa.hasParam("Min")) { min = Integer.parseInt("0"); - } else if (params.get("Min").matches("[0-9][0-9]?")) { - min = Integer.parseInt(params.get("Min")); + } else if (sa.getParam("Min").matches("[0-9][0-9]?")) { + min = Integer.parseInt(sa.getParam("Min")); } else { - min = CardFactoryUtil.xCount(card, card.getSVar(params.get("Min"))); + min = CardFactoryUtil.xCount(card, card.getSVar(sa.getParam("Min"))); } // Allow variables for Min final int max; - if (!params.containsKey("Max")) { + if (!sa.hasParam("Max")) { max = Integer.parseInt("99"); - } else if (params.get("Max").matches("[0-9][0-9]?")) { - max = Integer.parseInt(params.get("Max")); + } else if (sa.getParam("Max").matches("[0-9][0-9]?")) { + max = Integer.parseInt(sa.getParam("Max")); } else { - max = CardFactoryUtil.xCount(card, card.getSVar(params.get("Max"))); + max = CardFactoryUtil.xCount(card, card.getSVar(sa.getParam("Max"))); } // Allow variables for Max final String[] choices = new String[max + 1]; @@ -65,7 +64,7 @@ public class ChooseNumberEffect extends SpellEffect } } - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); final Target tgt = sa.getTarget(); for (final Player p : tgtPlayers) { @@ -77,8 +76,8 @@ public class ChooseNumberEffect extends SpellEffect chosen = randomGen.nextInt(max - min) + min; final String message = "Randomly chosen number: " + chosen; JOptionPane.showMessageDialog(null, message, "" + card, JOptionPane.PLAIN_MESSAGE); - } else if (params.containsKey("ListTitle")) { - final Object o = GuiChoose.one(params.get("ListTitle"), choices); + } else if (sa.hasParam("ListTitle")) { + final Object o = GuiChoose.one(sa.getParam("ListTitle"), choices); if (null == o) { return; } diff --git a/src/main/java/forge/card/abilityfactory/effects/ChoosePlayerEffect.java b/src/main/java/forge/card/abilityfactory/effects/ChoosePlayerEffect.java index 1495f3eada3..2d377e2ec08 100644 --- a/src/main/java/forge/card/abilityfactory/effects/ChoosePlayerEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/ChoosePlayerEffect.java @@ -15,10 +15,10 @@ import forge.gui.GuiChoose; public class ChoosePlayerEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getTargetPlayers(sa)) { sb.append(p).append(" "); } sb.append("chooses a player."); @@ -27,17 +27,17 @@ public class ChoosePlayerEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card card = sa.getSourceCard(); - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); final Target tgt = sa.getTarget(); - final ArrayList choices = params.containsKey("Choices") ? AbilityFactory.getDefinedPlayers( - sa.getSourceCard(), params.get("Choices"), sa) : new ArrayList(Singletons.getModel().getGame().getPlayers()); + final ArrayList choices = sa.hasParam("Choices") ? AbilityFactory.getDefinedPlayers( + sa.getSourceCard(), sa.getParam("Choices"), sa) : new ArrayList(Singletons.getModel().getGame().getPlayers()); - final String choiceDesc = params.containsKey("ChoiceTitle") ? params.get("ChoiceTitle") : "Choose a player"; + final String choiceDesc = sa.hasParam("ChoiceTitle") ? sa.getParam("ChoiceTitle") : "Choose a player"; for (final Player p : tgtPlayers) { if ((tgt == null) || p.canBeTargetedBy(sa)) { @@ -53,8 +53,8 @@ public class ChoosePlayerEffect extends SpellEffect { card.setChosenPlayer(chosen); } else { - if (params.containsKey("AILogic")) { - if (params.get("AILogic").equals("Curse")) { + if (sa.hasParam("AILogic")) { + if (sa.getParam("AILogic").equals("Curse")) { card.setChosenPlayer(p.getOpponent()); } else { card.setChosenPlayer(p); diff --git a/src/main/java/forge/card/abilityfactory/effects/ChooseTypeEffect.java b/src/main/java/forge/card/abilityfactory/effects/ChooseTypeEffect.java index 297383dc38f..86d0df697d4 100644 --- a/src/main/java/forge/card/abilityfactory/effects/ChooseTypeEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/ChooseTypeEffect.java @@ -21,10 +21,10 @@ public class ChooseTypeEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getTargetPlayers(sa)) { sb.append(p).append(" "); } sb.append("chooses a type."); @@ -33,16 +33,16 @@ public class ChooseTypeEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card card = sa.getSourceCard(); - final String type = params.get("Type"); + final String type = sa.getParam("Type"); final ArrayList invalidTypes = new ArrayList(); - if (params.containsKey("InvalidTypes")) { - invalidTypes.addAll(Arrays.asList(params.get("InvalidTypes").split(","))); + if (sa.hasParam("InvalidTypes")) { + invalidTypes.addAll(Arrays.asList(sa.getParam("InvalidTypes").split(","))); } final Target tgt = sa.getTarget(); - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); for (final Player p : tgtPlayers) { if ((tgt == null) || p.canBeTargetedBy(sa)) { @@ -90,8 +90,8 @@ public class ChooseTypeEffect extends SpellEffect { Player ai = sa.getActivatingPlayer(); Player opp = ai.getOpponent(); String chosen = ""; - if (params.containsKey("AILogic")) { - final String logic = params.get("AILogic"); + if (sa.hasParam("AILogic")) { + final String logic = sa.getParam("AILogic"); if (logic.equals("MostProminentOnBattlefield")) { chosen = CardFactoryUtil.getMostProminentCreatureType(Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield)); } diff --git a/src/main/java/forge/card/abilityfactory/effects/ClashEffect.java b/src/main/java/forge/card/abilityfactory/effects/ClashEffect.java index d9e68154a16..2afd46738c3 100644 --- a/src/main/java/forge/card/abilityfactory/effects/ClashEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/ClashEffect.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.effects; import java.util.HashMap; -import java.util.Map; import forge.Singletons; import forge.card.abilityfactory.AbilityFactory; @@ -16,7 +15,7 @@ public class ClashEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { return sa.getSourceCard().getName() + " - Clash with an opponent."; } @@ -24,7 +23,7 @@ public class ClashEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final AbilityFactory afOutcomes = new AbilityFactory(); final boolean victory = sa.getSourceCard().getController().clashWithOpponent(sa.getSourceCard()); @@ -33,9 +32,9 @@ public class ClashEffect extends SpellEffect { runParams.put("Player", sa.getSourceCard().getController()); if (victory) { - if (params.containsKey("WinSubAbility")) { + if (sa.hasParam("WinSubAbility")) { final SpellAbility win = afOutcomes.getAbility( - sa.getSourceCard().getSVar(params.get("WinSubAbility")), sa.getSourceCard()); + sa.getSourceCard().getSVar(sa.getParam("WinSubAbility")), sa.getSourceCard()); win.setActivatingPlayer(sa.getSourceCard().getController()); ((AbilitySub) win).setParent(sa); @@ -43,9 +42,9 @@ public class ClashEffect extends SpellEffect { } runParams.put("Won", "True"); } else { - if (params.containsKey("OtherwiseSubAbility")) { + if (sa.hasParam("OtherwiseSubAbility")) { final SpellAbility otherwise = afOutcomes.getAbility( - sa.getSourceCard().getSVar(params.get("OtherwiseSubAbility")), sa.getSourceCard()); + sa.getSourceCard().getSVar(sa.getParam("OtherwiseSubAbility")), sa.getSourceCard()); otherwise.setActivatingPlayer(sa.getSourceCard().getController()); ((AbilitySub) otherwise).setParent(sa); diff --git a/src/main/java/forge/card/abilityfactory/effects/CleanUpEffect.java b/src/main/java/forge/card/abilityfactory/effects/CleanUpEffect.java index 68b0518fec7..d0d83dfb705 100644 --- a/src/main/java/forge/card/abilityfactory/effects/CleanUpEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/CleanUpEffect.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.effects; -import java.util.Map; import forge.Card; import forge.Singletons; @@ -13,23 +12,23 @@ public class CleanUpEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { Card source = sa.getSourceCard(); - if (params.containsKey("ClearRemembered")) { + if (sa.hasParam("ClearRemembered")) { source.clearRemembered(); Singletons.getModel().getGame().getCardState(source).clearRemembered(); } - if (params.containsKey("ClearImprinted")) { + if (sa.hasParam("ClearImprinted")) { source.clearImprinted(); } - if (params.containsKey("ClearChosenX")) { + if (sa.hasParam("ClearChosenX")) { source.setSVar("ChosenX", ""); } - if (params.containsKey("ClearChosenY")) { + if (sa.hasParam("ClearChosenY")) { source.setSVar("ChosenY", ""); } - if (params.containsKey("ClearTriggered")) { + if (sa.hasParam("ClearTriggered")) { Singletons.getModel().getGame().getTriggerHandler().clearDelayedTrigger(source); } } diff --git a/src/main/java/forge/card/abilityfactory/effects/CloneEffect.java b/src/main/java/forge/card/abilityfactory/effects/CloneEffect.java index 785857cfe6b..d393ef10577 100644 --- a/src/main/java/forge/card/abilityfactory/effects/CloneEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/CloneEffect.java @@ -21,10 +21,10 @@ public class CloneEffect extends SpellEffect { // TODO update this method @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final List tgts = getTargetCards(sa, params); + final List tgts = getTargetCards(sa); sb.append(sa.getSourceCard()); sb.append(" becomes a copy of "); @@ -38,7 +38,7 @@ public class CloneEffect extends SpellEffect { } // end cloneStackDescription() @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { Card tgtCard; final Card host = sa.getSourceCard(); Map origSVars = host.getSVars(); @@ -50,8 +50,8 @@ public class CloneEffect extends SpellEffect { if (tgt != null) { cardToCopy = tgt.getTargetCards().get(0); } - else if (params.containsKey("Defined")) { - ArrayList cloneSources = AbilityFactory.getDefinedCards(host, params.get("Defined"), sa); + else if (sa.hasParam("Defined")) { + ArrayList cloneSources = AbilityFactory.getDefinedCards(host, sa.getParam("Defined"), sa); if (!cloneSources.isEmpty()) { cardToCopy = cloneSources.get(0); } @@ -62,14 +62,14 @@ public class CloneEffect extends SpellEffect { final StringBuilder sb = new StringBuilder(); sb.append("Do you want to copy " + cardToCopy + "?"); - boolean optional = params.containsKey("Optional"); + boolean optional = sa.hasParam("Optional"); if (host.getController().isHuman() && optional && !GameActionUtil.showYesNoDialog(host, sb.toString())) { return; } // find target of cloning i.e. card becoming a clone - ArrayList cloneTargets = AbilityFactory.getDefinedCards(host, params.get("CloneTarget"), sa); + ArrayList cloneTargets = AbilityFactory.getDefinedCards(host, sa.getParam("CloneTarget"), sa); if (!cloneTargets.isEmpty()) { tgtCard = cloneTargets.get(0); } @@ -79,7 +79,7 @@ public class CloneEffect extends SpellEffect { String imageFileName = host.getImageFilename(); - boolean keepName = params.containsKey("KeepName"); + boolean keepName = sa.hasParam("KeepName"); String originalName = tgtCard.getName(); boolean copyingSelf = (tgtCard == cardToCopy); @@ -116,7 +116,7 @@ public class CloneEffect extends SpellEffect { CardFactoryUtil.copyState(cardToCopy, stateToCopy, tgtCard); // must call this before addAbilityFactoryAbilities so cloned added abilities are handled correctly - addExtraCharacteristics(tgtCard, params, origSVars); + addExtraCharacteristics(tgtCard, sa, origSVars); CardFactoryUtil.addAbilityFactoryAbilities(tgtCard); for (int i = 0; i < tgtCard.getStaticAbilityStrings().size(); i++) { tgtCard.addStaticAbility(tgtCard.getStaticAbilityStrings().get(i)); @@ -133,7 +133,7 @@ public class CloneEffect extends SpellEffect { tgtCard.setState(CardCharacteristicName.Flipped); } CardFactoryUtil.copyState(cardToCopy, CardCharacteristicName.Flipped, tgtCard); - addExtraCharacteristics(tgtCard, params, origSVars); + addExtraCharacteristics(tgtCard, sa, origSVars); CardFactoryUtil.addAbilityFactoryAbilities(tgtCard); for (int i = 0; i < tgtCard.getStaticAbilityStrings().size(); i++) { tgtCard.addStaticAbility(tgtCard.getStaticAbilityStrings().get(i)); @@ -171,18 +171,18 @@ public class CloneEffect extends SpellEffect { } // cloneResolve - private void addExtraCharacteristics(final Card tgtCard, final Map params, final Map origSVars) { + private void addExtraCharacteristics(final Card tgtCard, final SpellAbility sa, final Map origSVars) { // additional types to clone - if (params.containsKey("AddTypes")) { - for (final String type : Arrays.asList(params.get("AddTypes").split(","))) { + if (sa.hasParam("AddTypes")) { + for (final String type : Arrays.asList(sa.getParam("AddTypes").split(","))) { tgtCard.addType(type); } } // triggers to add to clone final ArrayList triggers = new ArrayList(); - if (params.containsKey("AddTriggers")) { - triggers.addAll(Arrays.asList(params.get("AddTriggers").split(","))); + if (sa.hasParam("AddTriggers")) { + triggers.addAll(Arrays.asList(sa.getParam("AddTriggers").split(","))); for (final String s : triggers) { if (origSVars.containsKey(s)) { final String actualTrigger = origSVars.get(s); @@ -193,8 +193,8 @@ public class CloneEffect extends SpellEffect { } // SVars to add to clone - if (params.containsKey("AddSVars")) { - for (final String s : Arrays.asList(params.get("AddSVars").split(","))) { + if (sa.hasParam("AddSVars")) { + for (final String s : Arrays.asList(sa.getParam("AddSVars").split(","))) { if (origSVars.containsKey(s)) { final String actualsVar = origSVars.get(s); tgtCard.setSVar(s, actualsVar); @@ -203,8 +203,8 @@ public class CloneEffect extends SpellEffect { } // abilities to add to clone - if (params.containsKey("AddAbilities")) { - for (final String s : Arrays.asList(params.get("AddAbilities").split(","))) { + if (sa.hasParam("AddAbilities")) { + for (final String s : Arrays.asList(sa.getParam("AddAbilities").split(","))) { if (origSVars.containsKey(s)) { //final AbilityFactory newAF = new AbilityFactory(); final String actualAbility = origSVars.get(s); @@ -217,8 +217,8 @@ public class CloneEffect extends SpellEffect { // keywords to add to clone final ArrayList keywords = new ArrayList(); - if (params.containsKey("AddKeywords")) { - keywords.addAll(Arrays.asList(params.get("AddKeywords").split(" & "))); + if (sa.hasParam("AddKeywords")) { + keywords.addAll(Arrays.asList(sa.getParam("AddKeywords").split(" & "))); // allow SVar substitution for keywords for (int i = 0; i < keywords.size(); i++) { final String k = keywords.get(i); @@ -236,13 +236,13 @@ public class CloneEffect extends SpellEffect { } // set power of clone - if (params.containsKey("IntoPlayTapped")) { + if (sa.hasParam("IntoPlayTapped")) { tgtCard.setTapped(true); } // set power of clone - if (params.containsKey("SetPower")) { - String rhs = params.get("SetPower"); + if (sa.hasParam("SetPower")) { + String rhs = sa.getParam("SetPower"); int power = -1; try { power = Integer.parseInt(rhs); @@ -253,8 +253,8 @@ public class CloneEffect extends SpellEffect { } // set toughness of clone - if (params.containsKey("SetToughness")) { - String rhs = params.get("SetToughness"); + if (sa.hasParam("SetToughness")) { + String rhs = sa.getParam("SetToughness"); int toughness = -1; try { toughness = Integer.parseInt(rhs); @@ -266,15 +266,15 @@ public class CloneEffect extends SpellEffect { // colors to be added or changed to String shortColors = ""; - if (params.containsKey("Colors")) { - final String colors = params.get("Colors"); + if (sa.hasParam("Colors")) { + final String colors = sa.getParam("Colors"); if (colors.equals("ChosenColor")) { shortColors = CardUtil.getShortColorsString(tgtCard.getChosenColor()); } else { shortColors = CardUtil.getShortColorsString(new ArrayList(Arrays.asList(colors.split(",")))); } } - tgtCard.addColor(shortColors, tgtCard, !params.containsKey("OverwriteColors"), true); + tgtCard.addColor(shortColors, tgtCard, !sa.hasParam("OverwriteColors"), true); } diff --git a/src/main/java/forge/card/abilityfactory/effects/ControlExchangeEffect.java b/src/main/java/forge/card/abilityfactory/effects/ControlExchangeEffect.java index 06de6e87699..e3926934dcb 100644 --- a/src/main/java/forge/card/abilityfactory/effects/ControlExchangeEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/ControlExchangeEffect.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; -import java.util.Map; import forge.Card; import forge.card.abilityfactory.AbilityFactory; @@ -17,7 +16,7 @@ public class ControlExchangeEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { Card object1 = null; Card object2 = null; final Target tgt = sa.getTarget(); @@ -25,8 +24,8 @@ public class ControlExchangeEffect extends SpellEffect { if (tgts.size() > 0) { object1 = tgts.get(0); } - if (params.containsKey("Defined")) { - object2 = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa).get(0); + if (sa.hasParam("Defined")) { + object2 = AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa).get(0); } else if (tgts.size() > 1) { object2 = tgts.get(1); } @@ -38,7 +37,7 @@ public class ControlExchangeEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { Card object1 = null; Card object2 = null; final Target tgt = sa.getTarget(); @@ -46,8 +45,8 @@ public class ControlExchangeEffect extends SpellEffect { if (tgts.size() > 0) { object1 = tgts.get(0); } - if (params.containsKey("Defined")) { - object2 = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa).get(0); + if (sa.hasParam("Defined")) { + object2 = AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa).get(0); } else if (tgts.size() > 1) { object2 = tgts.get(1); } diff --git a/src/main/java/forge/card/abilityfactory/effects/ControlGainEffect.java b/src/main/java/forge/card/abilityfactory/effects/ControlGainEffect.java index fc095c1dbcf..b88961e0645 100644 --- a/src/main/java/forge/card/abilityfactory/effects/ControlGainEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/ControlGainEffect.java @@ -3,7 +3,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Map; import forge.Card; import forge.Command; @@ -22,14 +21,14 @@ public class ControlGainEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); final Target tgt = sa.getTarget(); ArrayList newController = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), - params.get("NewController"), sa); + sa.getParam("NewController"), sa); if ((tgt != null) && tgt.getTargetPlayers() != null && !tgt.getTargetPlayers().isEmpty()) { newController = tgt.getTargetPlayers(); } @@ -39,7 +38,7 @@ public class ControlGainEffect extends SpellEffect { sb.append(newController).append(" gains control of "); - for (final Card c : getTargetCards(sa, params)) { + for (final Card c : getTargetCards(sa)) { sb.append(" "); if (c.isFaceDown()) { sb.append("Morph"); @@ -77,29 +76,29 @@ public class ControlGainEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { List tgtCards = new ArrayList(); Card source = sa.getSourceCard(); - final boolean bUntap = params.containsKey("Untap"); - final boolean bTapOnLose = params.containsKey("TapOnLose"); - final boolean bNoRegen = params.containsKey("NoRegen"); - final List destroyOn = params.containsKey("DestroyTgt") ? Arrays.asList(params.get("DestroyTgt").split(",")) : null; - final List kws = params.containsKey("AddKWs") ? Arrays.asList(params.get("AddKWs").split(" & ")) : null ; - final List lose = params.containsKey("LoseControl") ? Arrays.asList(params.get("LoseControl").split(",")) : null; + final boolean bUntap = sa.hasParam("Untap"); + final boolean bTapOnLose = sa.hasParam("TapOnLose"); + final boolean bNoRegen = sa.hasParam("NoRegen"); + final List destroyOn = sa.hasParam("DestroyTgt") ? Arrays.asList(sa.getParam("DestroyTgt").split(",")) : null; + final List kws = sa.hasParam("AddKWs") ? Arrays.asList(sa.getParam("AddKWs").split(" & ")) : null ; + final List lose = sa.hasParam("LoseControl") ? Arrays.asList(sa.getParam("LoseControl").split(",")) : null; final Target tgt = sa.getTarget(); - if (params.containsKey("AllValid")) { + if (sa.hasParam("AllValid")) { tgtCards = Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield); - tgtCards = AbilityFactory.filterListByType(tgtCards, params.get("AllValid"), sa); + tgtCards = AbilityFactory.filterListByType(tgtCards, sa.getParam("AllValid"), sa); } else - tgtCards = getTargetCards(sa, params); + tgtCards = getTargetCards(sa); ArrayList controllers = new ArrayList(); - if (params.containsKey("NewController")) { - controllers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("NewController"), sa); + if (sa.hasParam("NewController")) { + controllers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), sa.getParam("NewController"), sa); } else if ((tgt != null) && (tgt.getTargetPlayers() != null) && tgt.canTgtPlayer()) { controllers = tgt.getTargetPlayers(); } @@ -153,7 +152,7 @@ public class ControlGainEffect extends SpellEffect { // end copied - final Card hostCard = sa.getAbilityFactory().getHostCard(); + final Card hostCard = sa.getSourceCard(); if (lose != null) { if (lose.contains("LeavesPlay")) { sa.getSourceCard().addLeavesPlayCommand(this.getLoseControlCommand(tgtC, originalController, newController, bTapOnLose, hostCard, kws)); diff --git a/src/main/java/forge/card/abilityfactory/effects/CopyPermanentEffect.java b/src/main/java/forge/card/abilityfactory/effects/CopyPermanentEffect.java index 8f9fcb2a2f7..8e2468c6d9a 100644 --- a/src/main/java/forge/card/abilityfactory/effects/CopyPermanentEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/CopyPermanentEffect.java @@ -21,11 +21,11 @@ import forge.item.CardDb; public class CopyPermanentEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final List tgtCards = getTargetCards(sa, params); + final List tgtCards = getTargetCards(sa); sb.append("Copy "); sb.append(StringUtils.join(tgtCards, ", ")); @@ -34,16 +34,16 @@ public class CopyPermanentEffect extends SpellEffect { } @Override - public void resolve(final java.util.Map params, final SpellAbility sa) { + public void resolve(final SpellAbility sa) { final Card hostCard = sa.getSourceCard(); final ArrayList keywords = new ArrayList(); - if (params.containsKey("Keywords")) { - keywords.addAll(Arrays.asList(params.get("Keywords").split(" & "))); + if (sa.hasParam("Keywords")) { + keywords.addAll(Arrays.asList(sa.getParam("Keywords").split(" & "))); } - final int numCopies = params.containsKey("NumCopies") ? AbilityFactory.calculateAmount(hostCard, - params.get("NumCopies"), sa) : 1; + final int numCopies = sa.hasParam("NumCopies") ? AbilityFactory.calculateAmount(hostCard, + sa.getParam("NumCopies"), sa) : 1; - final List tgtCards = getTargetCards(sa, params); + final List tgtCards = getTargetCards(sa); final Target tgt = sa.getTarget(); hostCard.clearClones(); @@ -95,7 +95,7 @@ public class CopyPermanentEffect extends SpellEffect { copy.setBaseDefense(c.getBaseDefense()); } - // add keywords from params + // add keywords from sa for (final String kw : keywords) { copy.addIntrinsicKeyword(kw); } @@ -145,11 +145,11 @@ public class CopyPermanentEffect extends SpellEffect { // technically your opponent could steal the token // and the token shouldn't be sacrificed if (target[index].isInPlay()) { - if (params.get("AtEOT").equals("Sacrifice")) { + if (sa.getParam("AtEOT").equals("Sacrifice")) { // maybe do a setSacrificeAtEOT, but // probably not. Singletons.getModel().getGame().getAction().sacrifice(target[index], sa); - } else if (params.get("AtEOT").equals("Exile")) { + } else if (sa.getParam("AtEOT").equals("Exile")) { Singletons.getModel().getGame().getAction().exile(target[index]); } @@ -162,11 +162,11 @@ public class CopyPermanentEffect extends SpellEffect { @Override public void execute() { - sac.setStackDescription(params.get("AtEOT") + " " + target[index] + "."); + sac.setStackDescription(sa.getParam("AtEOT") + " " + target[index] + "."); Singletons.getModel().getGame().getStack().addSimultaneousStackEntry(sac); } }; // Command - if (params.containsKey("AtEOT")) { + if (sa.hasParam("AtEOT")) { Singletons.getModel().getGame().getEndOfTurn().addAt(atEOT); } // end copied Kiki code diff --git a/src/main/java/forge/card/abilityfactory/effects/CopySpellEffect.java b/src/main/java/forge/card/abilityfactory/effects/CopySpellEffect.java index b42c3b00978..cdcfa30efbf 100644 --- a/src/main/java/forge/card/abilityfactory/effects/CopySpellEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/CopySpellEffect.java @@ -3,7 +3,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import java.util.Map; import forge.Card; import forge.Singletons; @@ -20,9 +19,9 @@ public class CopySpellEffect extends SpellEffect { // ************************************************************************* @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final List tgtSpells = getTargetSpellAbilities(sa, params); + final List tgtSpells = getTargetSpellAbilities(sa); sb.append("Copy "); // TODO Someone fix this Description when Copying Charms @@ -34,8 +33,8 @@ public class CopySpellEffect extends SpellEffect { } } int amount = 1; - if (params.containsKey("Amount")) { - amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("Amount"), sa); + if (sa.hasParam("Amount")) { + amount = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("Amount"), sa); } if (amount > 1) { sb.append(amount).append(" times"); @@ -49,28 +48,28 @@ public class CopySpellEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card card = sa.getSourceCard(); Player controller = sa.getActivatingPlayer(); int amount = 1; - if (params.containsKey("Amount")) { - amount = AbilityFactory.calculateAmount(card, params.get("Amount"), sa); + if (sa.hasParam("Amount")) { + amount = AbilityFactory.calculateAmount(card, sa.getParam("Amount"), sa); } - if (params.containsKey("Controller")) { - controller = AbilityFactory.getDefinedPlayers(card, params.get("Controller"), sa).get(0); + if (sa.hasParam("Controller")) { + controller = AbilityFactory.getDefinedPlayers(card, sa.getParam("Controller"), sa).get(0); } - final List tgtSpells = getTargetSpellAbilities(sa, params); + final List tgtSpells = getTargetSpellAbilities(sa); if (tgtSpells.size() == 0) { return; } - if (params.containsKey("CopyMultipleSpells")) { - final int spellCount = Integer.parseInt(params.get("CopyMultipleSpells")); + if (sa.hasParam("CopyMultipleSpells")) { + final int spellCount = Integer.parseInt(sa.getParam("CopyMultipleSpells")); ArrayList chosenSAs = new ArrayList(); SpellAbility chosenSAtmp = null; for (int multi = 0; multi < spellCount; multi++) { diff --git a/src/main/java/forge/card/abilityfactory/effects/CounterEffect.java b/src/main/java/forge/card/abilityfactory/effects/CounterEffect.java index 8872ef4f7d3..ddfeb6c6bfd 100644 --- a/src/main/java/forge/card/abilityfactory/effects/CounterEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/CounterEffect.java @@ -2,8 +2,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.List; -import java.util.Map; - import forge.Card; import forge.Singletons; import forge.card.abilityfactory.SpellEffect; @@ -14,27 +12,27 @@ import forge.card.spellability.SpellPermanent; public class CounterEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); final List sas; - if (params.containsKey("AllType")) { + if (sa.hasParam("AllType")) { sas = new ArrayList(); for (int i=0; i < Singletons.getModel().getGame().getStack().size(); i++) { SpellAbility spell = Singletons.getModel().getGame().getStack().peekAbility(i); - if (params.get("AllType").equals("Spell") && !spell.isSpell()) { + if (sa.getParam("AllType").equals("Spell") && !spell.isSpell()) { continue; } - if (params.containsKey("AllValid")) { - if (!spell.getSourceCard().isValid(params.get("AllValid"), sa.getActivatingPlayer(), sa.getSourceCard())) { + if (sa.hasParam("AllValid")) { + if (!spell.getSourceCard().isValid(sa.getParam("AllValid"), sa.getActivatingPlayer(), sa.getSourceCard())) { continue; } } sas.add(spell); } } else - sas = getTargetSpellAbilities(sa, params); + sas = getTargetSpellAbilities(sa); sb.append("countering"); @@ -48,7 +46,7 @@ public class CounterEffect extends SpellEffect { } } - if (isAbility && params.containsKey("DestroyPermanent")) { + if (isAbility && sa.hasParam("DestroyPermanent")) { sb.append(" and destroy it"); } @@ -57,30 +55,30 @@ public class CounterEffect extends SpellEffect { } // end counterStackDescription @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { // TODO Before this resolves we should see if any of our targets are // still on the stack final List sas; - if (params.containsKey("AllType")) { + if (sa.hasParam("AllType")) { sas = new ArrayList(); for (int i=0; i < Singletons.getModel().getGame().getStack().size(); i++) { SpellAbility spell = Singletons.getModel().getGame().getStack().peekAbility(i); - if (params.get("AllType").equals("Spell") && !spell.isSpell()) { + if (sa.getParam("AllType").equals("Spell") && !spell.isSpell()) { continue; } - if (params.containsKey("AllValid")) { - if (!spell.getSourceCard().isValid(params.get("AllValid"), sa.getActivatingPlayer(), sa.getSourceCard())) { + if (sa.hasParam("AllValid")) { + if (!spell.getSourceCard().isValid(sa.getParam("AllValid"), sa.getActivatingPlayer(), sa.getSourceCard())) { continue; } } sas.add(spell); } } else - sas = getTargetSpellAbilities(sa, params); + sas = getTargetSpellAbilities(sa); - if (params.containsKey("ForgetOtherTargets")) { - if (params.get("ForgetOtherTargets").equals("True")) { + if (sa.hasParam("ForgetOtherTargets")) { + if (sa.getParam("ForgetOtherTargets").equals("True")) { sa.getSourceCard().clearRemembered(); } } @@ -97,15 +95,15 @@ public class CounterEffect extends SpellEffect { continue; } - this.removeFromStack(tgtSA, sa, si, params); + this.removeFromStack(tgtSA, sa, si); // Destroy Permanent may be able to be turned into a SubAbility - if (tgtSA.isAbility() && params.containsKey("DestroyPermanent")) { + if (tgtSA.isAbility() && sa.hasParam("DestroyPermanent")) { Singletons.getModel().getGame().getAction().destroy(tgtSACard); } - if (params.containsKey("RememberTargets")) { - if (params.get("RememberTargets").equals("True")) { + if (sa.hasParam("RememberTargets")) { + if (sa.getParam("RememberTargets").equals("True")) { sa.getSourceCard().addRemembered(tgtSACard); } } @@ -124,12 +122,12 @@ public class CounterEffect extends SpellEffect { * @param si * a {@link forge.card.spellability.SpellAbilityStackInstance} * object. - * @param params + * @param sa */ - private void removeFromStack(final SpellAbility tgtSA, final SpellAbility srcSA, final SpellAbilityStackInstance si, final Map params) { + private void removeFromStack(final SpellAbility tgtSA, final SpellAbility srcSA, final SpellAbilityStackInstance si) { Singletons.getModel().getGame().getStack().remove(si); - String destination = params.containsKey("Destination") ? params.get("Destination") : "Graveyard"; + String destination = srcSA.hasParam("Destination") ? srcSA.getParam("Destination") : "Graveyard"; if (tgtSA.isAbility()) { // For Ability-targeted counterspells - do not move it anywhere, diff --git a/src/main/java/forge/card/abilityfactory/effects/CountersMoveEffect.java b/src/main/java/forge/card/abilityfactory/effects/CountersMoveEffect.java index 759a901ef10..626a9901572 100644 --- a/src/main/java/forge/card/abilityfactory/effects/CountersMoveEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/CountersMoveEffect.java @@ -13,25 +13,25 @@ import forge.card.spellability.Target; public class CountersMoveEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); final Card host = sa.getSourceCard(); Card source = null; ArrayList srcCards; final Target tgt = sa.getTarget(); - if (!params.containsKey("Source") && tgt != null) { + if (!sa.hasParam("Source") && tgt != null) { srcCards = tgt.getTargetCards(); } else { - srcCards = AbilityFactory.getDefinedCards(host, params.get("Source"), sa); + srcCards = AbilityFactory.getDefinedCards(host, sa.getParam("Source"), sa); } if (srcCards.size() > 0) { source = srcCards.get(0); } - final List tgtCards = getTargetCards(sa, params); + final List tgtCards = getTargetCards(sa); - final Counters cType = Counters.valueOf(params.get("CounterType")); - final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("CounterNum"), sa); + final Counters cType = Counters.valueOf(sa.getParam("CounterType")); + final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("CounterNum"), sa); sb.append("Move ").append(amount).append(" ").append(cType.getName()).append(" counter"); if (amount != 1) { @@ -45,28 +45,28 @@ public class CountersMoveEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { - final Card host = sa.getAbilityFactory().getHostCard(); + public void resolve(SpellAbility sa) { + final Card host = sa.getSourceCard(); - final Counters cType = Counters.valueOf(params.get("CounterType")); - final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("CounterNum"), sa); + final Counters cType = Counters.valueOf(sa.getParam("CounterType")); + final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("CounterNum"), sa); Card source = null; ArrayList srcCards; final Target tgt = sa.getTarget(); - if (!params.containsKey("Source") && tgt != null) { + if (!sa.hasParam("Source") && tgt != null) { srcCards = tgt.getTargetCards(); } else { - srcCards = AbilityFactory.getDefinedCards(host, params.get("Source"), sa); + srcCards = AbilityFactory.getDefinedCards(host, sa.getParam("Source"), sa); } if (srcCards.size() > 0) { source = srcCards.get(0); } ArrayList tgtCards; - if (!params.containsKey("Defined") && tgt != null) { + if (!sa.hasParam("Defined") && tgt != null) { tgtCards = tgt.getTargetCards(); } else { - tgtCards = AbilityFactory.getDefinedCards(host, params.get("Defined"), sa); + tgtCards = AbilityFactory.getDefinedCards(host, sa.getParam("Defined"), sa); } for (final Card dest : tgtCards) { diff --git a/src/main/java/forge/card/abilityfactory/effects/CountersProliferateEffect.java b/src/main/java/forge/card/abilityfactory/effects/CountersProliferateEffect.java index 6fee9e697b2..87eca001740 100644 --- a/src/main/java/forge/card/abilityfactory/effects/CountersProliferateEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/CountersProliferateEffect.java @@ -2,7 +2,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Map.Entry; import com.google.common.base.Predicate; @@ -25,7 +24,7 @@ import forge.view.ButtonUtil; public class CountersProliferateEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); sb.append("Proliferate."); sb.append(" (You choose any number of permanents and/or players with "); @@ -35,7 +34,7 @@ public class CountersProliferateEffect extends SpellEffect { } @Override - public void resolve(Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { Player controller = sa.getSourceCard().getController(); if (controller.isHuman()) resolveHuman(sa); diff --git a/src/main/java/forge/card/abilityfactory/effects/CountersPutAllEffect.java b/src/main/java/forge/card/abilityfactory/effects/CountersPutAllEffect.java index d9198e495e7..12bb0119647 100644 --- a/src/main/java/forge/card/abilityfactory/effects/CountersPutAllEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/CountersPutAllEffect.java @@ -16,12 +16,12 @@ import forge.game.zone.ZoneType; public class CountersPutAllEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final Counters cType = Counters.valueOf(params.get("CounterType")); - final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("CounterNum"), sa); - final String zone = params.containsKey("ValidZone") ? params.get("ValidZone") : "Battlefield"; + final Counters cType = Counters.valueOf(sa.getParam("CounterType")); + final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("CounterNum"), sa); + final String zone = sa.hasParam("ValidZone") ? sa.getParam("ValidZone") : "Battlefield"; sb.append("Put ").append(amount).append(" ").append(cType.getName()).append(" counter"); if (amount != 1) { @@ -38,11 +38,11 @@ public class CountersPutAllEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { - final String type = params.get("CounterType"); - final int counterAmount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("CounterNum"), sa); - final String valid = params.get("ValidCards"); - final ZoneType zone = params.containsKey("ValidZone") ? ZoneType.smartValueOf(params.get("ValidZone")) : ZoneType.Battlefield; + public void resolve(SpellAbility sa) { + final String type = sa.getParam("CounterType"); + final int counterAmount = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("CounterNum"), sa); + final String valid = sa.getParam("ValidCards"); + final ZoneType zone = sa.hasParam("ValidZone") ? ZoneType.smartValueOf(sa.getParam("ValidZone")) : ZoneType.Battlefield; List cards = Singletons.getModel().getGame().getCardsIn(zone); cards = CardLists.getValidCards(cards, valid, sa.getSourceCard().getController(), sa.getSourceCard()); diff --git a/src/main/java/forge/card/abilityfactory/effects/CountersPutEffect.java b/src/main/java/forge/card/abilityfactory/effects/CountersPutEffect.java index 207a0b0b9c8..fff91e22259 100644 --- a/src/main/java/forge/card/abilityfactory/effects/CountersPutEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/CountersPutEffect.java @@ -17,15 +17,15 @@ import forge.gui.GuiChoose; public class CountersPutEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); final Card card = sa.getSourceCard(); - final Counters cType = Counters.valueOf(params.get("CounterType")); - final int amount = AbilityFactory.calculateAmount(card, params.get("CounterNum"), sa); + final Counters cType = Counters.valueOf(sa.getParam("CounterType")); + final int amount = AbilityFactory.calculateAmount(card, sa.getParam("CounterNum"), sa); sb.append("Put "); - if (params.containsKey("UpTo")) { + if (sa.hasParam("UpTo")) { sb.append("up to "); } sb.append(amount).append(" ").append(cType.getName()).append(" counter"); @@ -34,7 +34,7 @@ public class CountersPutEffect extends SpellEffect { } sb.append(" on "); final Target tgt = sa.getTarget(); - final List tgtCards = tgt != null ? tgt.getTargetCards() : AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa); + final List tgtCards = tgt != null ? tgt.getTargetCards() : AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa); final Iterator it = tgtCards.iterator(); while (it.hasNext()) { @@ -55,13 +55,13 @@ public class CountersPutEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card card = sa.getSourceCard(); - final String type = params.get("CounterType"); - int counterAmount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("CounterNum"), sa); - final int max = params.containsKey("MaxFromEffect") ? Integer.parseInt(params.get("MaxFromEffect")) : -1; + final String type = sa.getParam("CounterType"); + int counterAmount = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("CounterNum"), sa); + final int max = sa.hasParam("MaxFromEffect") ? Integer.parseInt(sa.getParam("MaxFromEffect")) : -1; - if (params.containsKey("UpTo")) { + if (sa.hasParam("UpTo")) { final Integer[] integers = new Integer[counterAmount + 1]; for (int j = 0; j <= counterAmount; j++) { integers[j] = Integer.valueOf(j); @@ -80,7 +80,7 @@ public class CountersPutEffect extends SpellEffect { if (tgt != null) { tgtCards = tgt.getTargetCards(); } else { - tgtCards = AbilityFactory.getDefinedCards(card, params.get("Defined"), sa); + tgtCards = AbilityFactory.getDefinedCards(card, sa.getParam("Defined"), sa); } for (final Card tgtCard : tgtCards) { diff --git a/src/main/java/forge/card/abilityfactory/effects/CountersRemoveAllEffect.java b/src/main/java/forge/card/abilityfactory/effects/CountersRemoveAllEffect.java index 0bc6a04947e..0cf912957d6 100644 --- a/src/main/java/forge/card/abilityfactory/effects/CountersRemoveAllEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/CountersRemoveAllEffect.java @@ -15,15 +15,15 @@ import forge.game.zone.ZoneType; public class CountersRemoveAllEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final Counters cType = Counters.valueOf(params.get("CounterType")); - final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("CounterNum"), sa); - final String zone = params.containsKey("ValidZone") ? params.get("ValidZone") : "Battlefield"; + final Counters cType = Counters.valueOf(sa.getParam("CounterType")); + final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("CounterNum"), sa); + final String zone = sa.hasParam("ValidZone") ? sa.getParam("ValidZone") : "Battlefield"; String amountString = Integer.toString(amount); - if (params.containsKey("AllCounters")) { + if (sa.hasParam("AllCounters")) { amountString = "all"; } @@ -42,11 +42,11 @@ public class CountersRemoveAllEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { - final String type = params.get("CounterType"); - int counterAmount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("CounterNum"), sa); - final String valid = params.get("ValidCards"); - final ZoneType zone = params.containsKey("ValidZone") ? ZoneType.smartValueOf(params.get("ValidZone")) : ZoneType.Battlefield; + public void resolve(SpellAbility sa) { + final String type = sa.getParam("CounterType"); + int counterAmount = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("CounterNum"), sa); + final String valid = sa.getParam("ValidCards"); + final ZoneType zone = sa.hasParam("ValidZone") ? ZoneType.smartValueOf(sa.getParam("ValidZone")) : ZoneType.Battlefield; List cards = Singletons.getModel().getGame().getCardsIn(zone); cards = CardLists.getValidCards(cards, valid, sa.getSourceCard().getController(), sa.getSourceCard()); @@ -58,7 +58,7 @@ public class CountersRemoveAllEffect extends SpellEffect { } for (final Card tgtCard : cards) { - if (params.containsKey("AllCounters")) { + if (sa.hasParam("AllCounters")) { counterAmount = tgtCard.getCounters(Counters.valueOf(type)); } diff --git a/src/main/java/forge/card/abilityfactory/effects/CountersRemoveEffect.java b/src/main/java/forge/card/abilityfactory/effects/CountersRemoveEffect.java index a56adec7711..fb4da639f26 100644 --- a/src/main/java/forge/card/abilityfactory/effects/CountersRemoveEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/CountersRemoveEffect.java @@ -17,15 +17,15 @@ import forge.gui.GuiChoose; public class CountersRemoveEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final String counterName = params.get("CounterType"); + final String counterName = sa.getParam("CounterType"); - final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("CounterNum"), sa); + final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("CounterNum"), sa); sb.append("Remove "); - if (params.containsKey("UpTo")) { + if (sa.hasParam("UpTo")) { sb.append("up to "); } if ("Any".matches(counterName)) { @@ -44,7 +44,7 @@ public class CountersRemoveEffect extends SpellEffect { } sb.append(" from"); - for (final Card c : getTargetCards(sa, params)) { + for (final Card c : getTargetCards(sa)) { sb.append(" ").append(c); } @@ -54,25 +54,25 @@ public class CountersRemoveEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card card = sa.getSourceCard(); - final String type = params.get("CounterType"); + final String type = sa.getParam("CounterType"); int counterAmount = 0; - if (!params.get("CounterNum").equals("All")) { - counterAmount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("CounterNum"), sa); + if (!sa.getParam("CounterNum").equals("All")) { + counterAmount = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("CounterNum"), sa); } final Target tgt = sa.getTarget(); boolean rememberRemoved = false; - if (params.containsKey("RememberRemoved")) { + if (sa.hasParam("RememberRemoved")) { rememberRemoved = true; } - for (final Card tgtCard : getTargetCards(sa, params)) { + for (final Card tgtCard : getTargetCards(sa)) { if ((tgt == null) || tgtCard.canBeTargetedBy(sa)) { final Zone zone = Singletons.getModel().getGame().getZoneOf(tgtCard); - if (params.get("CounterNum").equals("All")) { + if (sa.getParam("CounterNum").equals("All")) { counterAmount = tgtCard.getCounters(Counters.valueOf(type)); } @@ -137,7 +137,7 @@ public class CountersRemoveEffect extends SpellEffect { } else { if (zone.is(ZoneType.Battlefield) || zone.is(ZoneType.Exile)) { - if (params.containsKey("UpTo") && sa.getActivatingPlayer().isHuman()) { + if (sa.hasParam("UpTo") && sa.getActivatingPlayer().isHuman()) { final ArrayList choices = new ArrayList(); for (int i = 0; i <= counterAmount; i++) { choices.add("" + i); diff --git a/src/main/java/forge/card/abilityfactory/effects/DamageAllEffect.java b/src/main/java/forge/card/abilityfactory/effects/DamageAllEffect.java index 9682a0d518d..52667d1dac1 100644 --- a/src/main/java/forge/card/abilityfactory/effects/DamageAllEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/DamageAllEffect.java @@ -15,20 +15,20 @@ import forge.game.zone.ZoneType; public class DamageAllEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); String desc = ""; - if (params.containsKey("ValidDescription")) { - desc = params.get("ValidDescription"); + if (sa.hasParam("ValidDescription")) { + desc = sa.getParam("ValidDescription"); } - final String damage = params.get("NumDmg"); + final String damage = sa.getParam("NumDmg"); final int dmg = AbilityFactory.calculateAmount(sa.getSourceCard(), damage, sa); - final ArrayList definedSources = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("DamageSource"), sa); + final ArrayList definedSources = AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("DamageSource"), sa); final Card source = definedSources.get(0); if (source != sa.getSourceCard()) { @@ -43,13 +43,13 @@ public class DamageAllEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final ArrayList definedSources = AbilityFactory.getDefinedCards(sa.getSourceCard(), - params.get("DamageSource"), sa); + sa.getParam("DamageSource"), sa); final Card card = definedSources.get(0); final Card source = sa.getSourceCard(); - final String damage = params.get("NumDmg"); + final String damage = sa.getParam("NumDmg"); final int dmg = AbilityFactory.calculateAmount(sa.getSourceCard(), damage, sa); final Target tgt = sa.getTarget(); @@ -61,11 +61,11 @@ public class DamageAllEffect extends SpellEffect { String players = ""; List list = new ArrayList(); - if (params.containsKey("ValidPlayers")) { - players = params.get("ValidPlayers"); + if (sa.hasParam("ValidPlayers")) { + players = sa.getParam("ValidPlayers"); } - if (params.containsKey("ValidCards")) { + if (sa.hasParam("ValidCards")) { list = Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield); } @@ -73,10 +73,10 @@ public class DamageAllEffect extends SpellEffect { list = CardLists.filterControlledBy(list, targetPlayer); } - list = AbilityFactory.filterListByType(list, params.get("ValidCards"), sa); + list = AbilityFactory.filterListByType(list, sa.getParam("ValidCards"), sa); for (final Card c : list) { - if (c.addDamage(dmg, card) && params.containsKey("RememberDamaged")) { + if (c.addDamage(dmg, card) && sa.hasParam("RememberDamaged")) { source.addRemembered(c); } } @@ -84,7 +84,7 @@ public class DamageAllEffect extends SpellEffect { if (!players.equals("")) { final ArrayList playerList = AbilityFactory.getDefinedPlayers(card, players, sa); for (final Player p : playerList) { - if (p.addDamage(dmg, card) && params.containsKey("RememberDamaged")) { + if (p.addDamage(dmg, card) && sa.hasParam("RememberDamaged")) { source.addRemembered(p); } } diff --git a/src/main/java/forge/card/abilityfactory/effects/DamageDealEffect.java b/src/main/java/forge/card/abilityfactory/effects/DamageDealEffect.java index 18a188ec0e0..52ceff0502f 100644 --- a/src/main/java/forge/card/abilityfactory/effects/DamageDealEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/DamageDealEffect.java @@ -3,7 +3,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.Map; import forge.Card; import forge.CardUtil; @@ -18,22 +17,22 @@ public class DamageDealEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { // when damageStackDescription is called, just build exactly what is happening final StringBuilder sb = new StringBuilder(); - final String damage = params.get("NumDmg"); + final String damage = sa.getParam("NumDmg"); final int dmg = AbilityFactory.calculateAmount(sa.getSourceCard(), damage, sa); - List tgts = getTargetObjects(sa, params); + List tgts = getTargetObjects(sa); if (tgts.size() > 0) { - final String conditionDesc = params.get("ConditionDescription"); + final String conditionDesc = sa.getParam("ConditionDescription"); if (conditionDesc != null) { sb.append(conditionDesc).append(" "); } - final ArrayList definedSources = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("DamageSource"), sa); + final ArrayList definedSources = AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("DamageSource"), sa); final Card source = definedSources.get(0); if (source != sa.getSourceCard()) { @@ -44,7 +43,7 @@ public class DamageDealEffect extends SpellEffect { sb.append(" ").append(dmg).append(" damage "); - if (params.containsKey("DivideEvenly")) { + if (sa.hasParam("DivideEvenly")) { sb.append("divided evenly (rounded down) "); } @@ -59,8 +58,8 @@ public class DamageDealEffect extends SpellEffect { } } - if (params.containsKey("Radiance")) { - sb.append(" and each other ").append(params.get("ValidTgts")) + if (sa.hasParam("Radiance")) { + sb.append(" and each other ").append(sa.getParam("ValidTgts")) .append(" that shares a color with "); if (tgts.size() > 1) { sb.append("them"); @@ -77,23 +76,23 @@ public class DamageDealEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { - final String damage = params.get("NumDmg"); + public void resolve(SpellAbility sa) { + final String damage = sa.getParam("NumDmg"); int dmg = AbilityFactory.calculateAmount(sa.getSourceCard(), damage, sa); - final boolean noPrevention = params.containsKey("NoPrevention"); - final boolean combatDmg = params.containsKey("CombatDamage"); + final boolean noPrevention = sa.hasParam("NoPrevention"); + final boolean combatDmg = sa.hasParam("CombatDamage"); ArrayList tgts; if (sa.getTarget() == null) { - tgts = AbilityFactory.getDefinedObjects(sa.getSourceCard(), params.get("Defined"), sa); + tgts = AbilityFactory.getDefinedObjects(sa.getSourceCard(), sa.getParam("Defined"), sa); } else { tgts = sa.getTarget().getTargets(); } // Right now for Fireball, maybe later for other stuff - if (params.containsKey("DivideEvenly")) { - String evenly = params.get("DivideEvenly"); + if (sa.hasParam("DivideEvenly")) { + String evenly = sa.getParam("DivideEvenly"); if (evenly.equals("RoundedDown")) { dmg = tgts.isEmpty() ? 0 : dmg / tgts.size(); } @@ -101,7 +100,7 @@ public class DamageDealEffect extends SpellEffect { final boolean targeted = (sa.getTarget() != null); - if (params.containsKey("Radiance") && targeted) { + if (sa.hasParam("Radiance") && targeted) { Card origin = null; for (int i = 0; i < tgts.size(); i++) { if (tgts.get(i) instanceof Card) { @@ -112,14 +111,14 @@ public class DamageDealEffect extends SpellEffect { // Can't radiate from a player if (origin != null) { for (final Card c : CardUtil.getRadiance(sa.getSourceCard(), origin, - params.get("ValidTgts").split(","))) { + sa.getParam("ValidTgts").split(","))) { tgts.add(c); } } } final ArrayList definedSources = AbilityFactory.getDefinedCards(sa.getSourceCard(), - params.get("DamageSource"), sa); + sa.getParam("DamageSource"), sa); if (definedSources == null) { return; } diff --git a/src/main/java/forge/card/abilityfactory/effects/DamageEachEffect.java b/src/main/java/forge/card/abilityfactory/effects/DamageEachEffect.java index ca68eff8b66..2424e0ec3f9 100644 --- a/src/main/java/forge/card/abilityfactory/effects/DamageEachEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/DamageEachEffect.java @@ -2,7 +2,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.List; -import java.util.Map; import forge.Card; import forge.CardLists; @@ -20,32 +19,32 @@ public class DamageEachEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final String damage = params.get("NumDmg"); + final String damage = sa.getParam("NumDmg"); final int iDmg = AbilityFactory.calculateAmount(sa.getSourceCard(), damage, sa); - String desc = params.get("ValidCards"); - if (params.containsKey("ValidDescription")) { - desc = params.get("ValidDescription"); + String desc = sa.getParam("ValidCards"); + if (sa.hasParam("ValidDescription")) { + desc = sa.getParam("ValidDescription"); } String dmg = ""; - if (params.containsKey("DamageDesc")) { - dmg = params.get("DamageDesc"); + if (sa.hasParam("DamageDesc")) { + dmg = sa.getParam("DamageDesc"); } else { dmg += iDmg + " damage"; } - if (params.containsKey("StackDescription")) { - sb.append(params.get("StackDescription")); + if (sa.hasParam("StackDescription")) { + sb.append(sa.getParam("StackDescription")); } else { sb.append("Each ").append(desc).append(" deals ").append(dmg).append(" to "); - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getTargetPlayers(sa)) { sb.append(p); } - if (params.containsKey("DefinedCards")) { - if (params.get("DefinedCards").equals("Self")) { + if (sa.hasParam("DefinedCards")) { + if (sa.getParam("DefinedCards").equals("Self")) { sb.append(" itself"); } } @@ -59,17 +58,17 @@ public class DamageEachEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card card = sa.getSourceCard(); List sources = Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield); - if (params.containsKey("ValidCards")) { - sources = CardLists.getValidCards(sources, params.get("ValidCards"), card.getController(), card); + if (sa.hasParam("ValidCards")) { + sources = CardLists.getValidCards(sources, sa.getParam("ValidCards"), card.getController(), card); } ArrayList tgts = new ArrayList(); if (sa.getTarget() == null) { - tgts = AbilityFactory.getDefinedObjects(sa.getSourceCard(), params.get("DefinedPlayers"), sa); + tgts = AbilityFactory.getDefinedObjects(sa.getSourceCard(), sa.getParam("DefinedPlayers"), sa); } else { tgts = sa.getTarget().getTargets(); } @@ -95,15 +94,15 @@ public class DamageEachEffect extends SpellEffect { } } - if (params.containsKey("DefinedCards")) { - if (params.get("DefinedCards").equals("Self")) { + if (sa.hasParam("DefinedCards")) { + if (sa.getParam("DefinedCards").equals("Self")) { for (final Card source : sources) { final int dmg = CardFactoryUtil.xCount(source, card.getSVar("X")); // System.out.println(source+" deals "+dmg+" damage to "+source); source.addDamage(dmg, source); } } - if (params.get("DefinedCards").equals("Remembered")) { + if (sa.getParam("DefinedCards").equals("Remembered")) { for (final Card source : sources) { final int dmg = CardFactoryUtil.xCount(source, card.getSVar("X")); Card rememberedcard; diff --git a/src/main/java/forge/card/abilityfactory/effects/DamagePreventAllEffect.java b/src/main/java/forge/card/abilityfactory/effects/DamagePreventAllEffect.java index a9b10a4efd8..7560c520e21 100644 --- a/src/main/java/forge/card/abilityfactory/effects/DamagePreventAllEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/DamagePreventAllEffect.java @@ -2,7 +2,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.List; -import java.util.Map; import forge.Card; import forge.Singletons; @@ -18,22 +17,22 @@ public class DamagePreventAllEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card source = sa.getSourceCard(); - final int numDam = AbilityFactory.calculateAmount(sa.getAbilityFactory().getHostCard(), params.get("Amount"), sa); + final int numDam = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("Amount"), sa); String players = ""; List list = new ArrayList(); - if (params.containsKey("ValidPlayers")) { - players = params.get("ValidPlayers"); + if (sa.hasParam("ValidPlayers")) { + players = sa.getParam("ValidPlayers"); } - if (params.containsKey("ValidCards")) { + if (sa.hasParam("ValidCards")) { list = Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield); } - list = AbilityFactory.filterListByType(list, params.get("ValidCards"), sa); + list = AbilityFactory.filterListByType(list, sa.getParam("ValidCards"), sa); for (final Card c : list) { c.addPreventNextDamage(numDam); @@ -50,7 +49,7 @@ public class DamagePreventAllEffect extends SpellEffect { } // preventDamageAllResolve @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); String desc = sa.getDescription(); diff --git a/src/main/java/forge/card/abilityfactory/effects/DamagePreventEffect.java b/src/main/java/forge/card/abilityfactory/effects/DamagePreventEffect.java index 8cbb60101d4..bbc1dc24fe0 100644 --- a/src/main/java/forge/card/abilityfactory/effects/DamagePreventEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/DamagePreventEffect.java @@ -2,7 +2,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.List; -import java.util.Map; import forge.Card; import forge.CardUtil; @@ -14,13 +13,13 @@ import forge.game.player.Player; public class DamagePreventEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final List tgts = getTargetObjects(sa, params); + final List tgts = getTargetObjects(sa); sb.append("Prevent the next "); - sb.append(params.get("Amount")); + sb.append(sa.getParam("Amount")); sb.append(" damage that would be dealt to "); for (int i = 0; i < tgts.size(); i++) { if (i != 0) { @@ -40,8 +39,8 @@ public class DamagePreventEffect extends SpellEffect } } - if (params.containsKey("Radiance") && (sa.getTarget() != null)) { - sb.append(" and each other ").append(params.get("ValidTgts")) + if (sa.hasParam("Radiance") && (sa.getTarget() != null)) { + sb.append(" and each other ").append(sa.getParam("ValidTgts")) .append(" that shares a color with "); if (tgts.size() > 1) { sb.append("them"); @@ -57,19 +56,19 @@ public class DamagePreventEffect extends SpellEffect * @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(Map params, SpellAbility sa) { - Card host = sa.getAbilityFactory().getHostCard(); - final int numDam = AbilityFactory.calculateAmount(host, params.get("Amount"), sa); + public void resolve(SpellAbility sa) { + Card host = sa.getSourceCard(); + final int numDam = AbilityFactory.calculateAmount(host, sa.getParam("Amount"), sa); ArrayList tgts; final ArrayList untargetedCards = new ArrayList(); if (sa.getTarget() == null) { - tgts = AbilityFactory.getDefinedObjects(sa.getSourceCard(), params.get("Defined"), sa); + tgts = AbilityFactory.getDefinedObjects(sa.getSourceCard(), sa.getParam("Defined"), sa); } else { tgts = sa.getTarget().getTargets(); } - if (params.containsKey("Radiance") && (sa.getTarget() != null)) { + if (sa.hasParam("Radiance") && (sa.getTarget() != null)) { Card origin = null; for (int i = 0; i < tgts.size(); i++) { if (tgts.get(i) instanceof Card) { @@ -79,7 +78,7 @@ public class DamagePreventEffect extends SpellEffect } if (origin != null) { // Can't radiate from a player - for (final Card c : CardUtil.getRadiance(host, origin, params.get("ValidTgts").split(","))) { + for (final Card c : CardUtil.getRadiance(host, origin, sa.getParam("ValidTgts").split(","))) { untargetedCards.add(c); } } diff --git a/src/main/java/forge/card/abilityfactory/effects/DebuffAllEffect.java b/src/main/java/forge/card/abilityfactory/effects/DebuffAllEffect.java index 57a3f681a19..4982613a514 100644 --- a/src/main/java/forge/card/abilityfactory/effects/DebuffAllEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/DebuffAllEffect.java @@ -3,7 +3,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Map; import forge.Card; import forge.CardLists; @@ -19,9 +18,9 @@ public class DebuffAllEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { - if (params.containsKey("DebuffAllDescription")) { - return params.get("DebuffAllDescription"); + protected String getStackDescription(SpellAbility sa) { + if (sa.hasParam("DebuffAllDescription")) { + return sa.getParam("DebuffAllDescription"); } return ""; @@ -31,22 +30,21 @@ public class DebuffAllEffect extends SpellEffect { *

* debuffAllResolve. *

- * - * @param af - * a {@link forge.card.abilityfactory.AbilityFactory} object. * @param sa * a {@link forge.card.spellability.SpellAbility} object. + * @param af + * a {@link forge.card.abilityfactory.AbilityFactory} object. */ @Override - public void resolve(java.util.Map params, SpellAbility sa) { - final Card hostCard = sa.getAbilityFactory().getHostCard(); - final List kws = params.containsKey("Keywords") ? Arrays.asList(params.get("Keywords").split(" & ")) : new ArrayList(); + public void resolve(SpellAbility sa) { + final Card hostCard = sa.getSourceCard(); + final List kws = sa.hasParam("Keywords") ? Arrays.asList(sa.getParam("Keywords").split(" & ")) : new ArrayList(); String valid = ""; - if (params.containsKey("ValidCards")) { - valid = params.get("ValidCards"); + if (sa.hasParam("ValidCards")) { + valid = sa.getParam("ValidCards"); } List list = Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield); @@ -63,7 +61,7 @@ public class DebuffAllEffect extends SpellEffect { tgtC.removeExtrinsicKeyword(kw); } } - if (!params.containsKey("Permanent")) { + if (!sa.hasParam("Permanent")) { Singletons.getModel().getGame().getEndOfTurn().addUntil(new Command() { private static final long serialVersionUID = 7486231071095628674L; diff --git a/src/main/java/forge/card/abilityfactory/effects/DebuffEffect.java b/src/main/java/forge/card/abilityfactory/effects/DebuffEffect.java index 6c574463816..4e7a064b5a1 100644 --- a/src/main/java/forge/card/abilityfactory/effects/DebuffEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/DebuffEffect.java @@ -14,11 +14,11 @@ import forge.card.spellability.SpellAbility; public class DebuffEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { - final List kws = params.containsKey("Keywords") ? Arrays.asList(params.get("Keywords").split(" & ")) : new ArrayList(); + protected String getStackDescription(SpellAbility sa) { + final List kws = sa.hasParam("Keywords") ? Arrays.asList(sa.getParam("Keywords").split(" & ")) : new ArrayList(); final StringBuilder sb = new StringBuilder(); - final List tgtCards = getTargetCards(sa, params); + final List tgtCards = getTargetCards(sa); if (tgtCards.size() > 0) { @@ -44,7 +44,7 @@ public class DebuffEffect extends SpellEffect { * sb.append(" "); } */ sb.append(kws); - if (!params.containsKey("Permanent")) { + if (!sa.hasParam("Permanent")) { sb.append(" until end of turn"); } sb.append("."); @@ -54,10 +54,10 @@ public class DebuffEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { - final List kws = params.containsKey("Keywords") ? Arrays.asList(params.get("Keywords").split(" & ")) : new ArrayList(); + public void resolve(SpellAbility sa) { + final List kws = sa.hasParam("Keywords") ? Arrays.asList(sa.getParam("Keywords").split(" & ")) : new ArrayList(); - for (final Card tgtC : getTargetCards(sa, params)) { + for (final Card tgtC : getTargetCards(sa)) { final ArrayList hadIntrinsic = new ArrayList(); if (tgtC.isInPlay() && tgtC.canBeTargetedBy(sa)) { for (final String kw : kws) { @@ -68,7 +68,7 @@ public class DebuffEffect extends SpellEffect { tgtC.removeAllExtrinsicKeyword(kw); } } - if (!params.containsKey("Permanent")) { + if (!sa.hasParam("Permanent")) { Singletons.getModel().getGame().getEndOfTurn().addUntil(new Command() { private static final long serialVersionUID = 5387486776282932314L; diff --git a/src/main/java/forge/card/abilityfactory/effects/DelayedTriggerEffect.java b/src/main/java/forge/card/abilityfactory/effects/DelayedTriggerEffect.java index 27c11eea1e9..9e6f4f91c2a 100644 --- a/src/main/java/forge/card/abilityfactory/effects/DelayedTriggerEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/DelayedTriggerEffect.java @@ -1,5 +1,8 @@ package forge.card.abilityfactory.effects; +import java.util.HashMap; +import java.util.Map; + import forge.Singletons; import forge.card.abilityfactory.SpellEffect; import forge.card.spellability.SpellAbility; @@ -12,9 +15,9 @@ public class DelayedTriggerEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(java.util.Map mapParams, SpellAbility sa) { - if (mapParams.containsKey("TriggerDescription")) { - return mapParams.get("TriggerDescription"); + protected String getStackDescription(SpellAbility sa) { + if (sa.hasParam("TriggerDescription")) { + return sa.getParam("TriggerDescription"); } return ""; @@ -22,8 +25,10 @@ public class DelayedTriggerEffect extends SpellEffect { } @Override - public void resolve(java.util.Map mapParams, SpellAbility sa) { + public void resolve(SpellAbility sa) { + Map mapParams = new HashMap(); + sa.copyParamsToMap(mapParams); if (mapParams.containsKey("Cost")) { mapParams.remove("Cost"); } diff --git a/src/main/java/forge/card/abilityfactory/effects/DestroyAllEffect.java b/src/main/java/forge/card/abilityfactory/effects/DestroyAllEffect.java index 9314f47f1d9..5391cc84bfa 100644 --- a/src/main/java/forge/card/abilityfactory/effects/DestroyAllEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/DestroyAllEffect.java @@ -2,7 +2,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.List; -import java.util.Map; import forge.Card; import forge.CardLists; @@ -17,13 +16,13 @@ import forge.game.zone.ZoneType; public class DestroyAllEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final boolean noRegen = params.containsKey("NoRegen"); + final boolean noRegen = sa.hasParam("NoRegen"); - final String conditionDesc = params.get("ConditionDescription"); + final String conditionDesc = sa.getParam("ConditionDescription"); if (conditionDesc != null) { sb.append(conditionDesc).append(" "); } @@ -51,9 +50,9 @@ public class DestroyAllEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { - final boolean noRegen = params.containsKey("NoRegen"); + final boolean noRegen = sa.hasParam("NoRegen"); final Card card = sa.getSourceCard(); final Target tgt = sa.getTarget(); @@ -68,8 +67,8 @@ public class DestroyAllEffect extends SpellEffect { String valid = ""; - if (params.containsKey("ValidCards")) { - valid = params.get("ValidCards"); + if (sa.hasParam("ValidCards")) { + valid = sa.getParam("ValidCards"); } // Ugh. If calculateAmount needs to be called with DestroyAll it _needs_ @@ -87,7 +86,7 @@ public class DestroyAllEffect extends SpellEffect { list = AbilityFactory.filterListByType(list, valid, sa); - final boolean remDestroyed = params.containsKey("RememberDestroyed"); + final boolean remDestroyed = sa.hasParam("RememberDestroyed"); if (remDestroyed) { card.clearRemembered(); } diff --git a/src/main/java/forge/card/abilityfactory/effects/DestroyEffect.java b/src/main/java/forge/card/abilityfactory/effects/DestroyEffect.java index 09d5a975678..ea452afb916 100644 --- a/src/main/java/forge/card/abilityfactory/effects/DestroyEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/DestroyEffect.java @@ -3,7 +3,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import java.util.Map; import forge.Card; import forge.CardUtil; @@ -18,18 +17,18 @@ public class DestroyEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { - final boolean noRegen = params.containsKey("NoRegen"); + protected String getStackDescription(SpellAbility sa) { + final boolean noRegen = sa.hasParam("NoRegen"); final StringBuilder sb = new StringBuilder(); - final String conditionDesc = params.get("ConditionDescription"); + final String conditionDesc = sa.getParam("ConditionDescription"); if (conditionDesc != null) { sb.append(conditionDesc).append(" "); } - final List tgtCards = getTargetCards(sa, params); + final List tgtCards = getTargetCards(sa); - if (params.containsKey("Sacrifice")) { + if (sa.hasParam("Sacrifice")) { sb.append("Sacrifice "); } else { sb.append("Destroy "); @@ -49,8 +48,8 @@ public class DestroyEffect extends SpellEffect { } } - if (params.containsKey("Radiance")) { - sb.append(" and each other ").append(params.get("ValidTgts")) + if (sa.hasParam("Radiance")) { + sb.append(" and each other ").append(sa.getParam("ValidTgts")) .append(" that shares a color with "); if (tgtCards.size() > 1) { sb.append("them"); @@ -79,25 +78,25 @@ public class DestroyEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card card = sa.getSourceCard(); - final boolean remDestroyed = params.containsKey("RememberDestroyed"); + final boolean remDestroyed = sa.hasParam("RememberDestroyed"); if (remDestroyed) { card.clearRemembered(); } - final boolean noRegen = params.containsKey("NoRegen"); - final boolean sac = params.containsKey("Sacrifice"); + final boolean noRegen = sa.hasParam("NoRegen"); + final boolean sac = sa.hasParam("Sacrifice"); - final List tgtCards = getTargetCards(sa, params); + final List tgtCards = getTargetCards(sa); final ArrayList untargetedCards = new ArrayList(); final Target tgt = sa.getTarget(); - if (params.containsKey("Radiance")) { + if (sa.hasParam("Radiance")) { for (final Card c : CardUtil.getRadiance(card, tgtCards.get(0), - params.get("ValidTgts").split(","))) { + sa.getParam("ValidTgts").split(","))) { untargetedCards.add(c); } } diff --git a/src/main/java/forge/card/abilityfactory/effects/DigEffect.java b/src/main/java/forge/card/abilityfactory/effects/DigEffect.java index 8e790e1193d..f93baf85fb9 100644 --- a/src/main/java/forge/card/abilityfactory/effects/DigEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/DigEffect.java @@ -23,13 +23,13 @@ import forge.gui.GuiChoose; public class DigEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { - final Card host = sa.getAbilityFactory().getHostCard(); + protected String getStackDescription(SpellAbility sa) { + final Card host = sa.getSourceCard(); final StringBuilder sb = new StringBuilder(); - final int numToDig = AbilityFactory.calculateAmount(host, params.get("DigNum"), sa); + final int numToDig = AbilityFactory.calculateAmount(host, sa.getParam("DigNum"), sa); - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); sb.append(host.getController()).append(" looks at the top ").append(numToDig); @@ -50,49 +50,46 @@ public class DigEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card host = sa.getSourceCard(); final Player player = sa.getActivatingPlayer(); Player choser = player; - int numToDig = AbilityFactory.calculateAmount(host, params.get("DigNum"), sa); - final ZoneType destZone1 = params.containsKey("DestinationZone") ? ZoneType.smartValueOf(params.get("DestinationZone")) + int numToDig = AbilityFactory.calculateAmount(host, sa.getParam("DigNum"), sa); + final ZoneType destZone1 = sa.hasParam("DestinationZone") ? ZoneType.smartValueOf(sa.getParam("DestinationZone")) : ZoneType.Hand; - final ZoneType destZone2 = params.containsKey("DestinationZone2") ? ZoneType.smartValueOf(params - .get("DestinationZone2")) : ZoneType.Library; + final ZoneType destZone2 = sa.hasParam("DestinationZone2") ? ZoneType.smartValueOf(sa.getParam("DestinationZone2")) : ZoneType.Library; - final int libraryPosition = params.containsKey("LibraryPosition") ? Integer.parseInt(params - .get("LibraryPosition")) : -1; + final int libraryPosition = sa.hasParam("LibraryPosition") ? Integer.parseInt(sa.getParam("LibraryPosition")) : -1; int destZone1ChangeNum = 1; - final boolean mitosis = params.containsKey("Mitosis"); - String changeValid = params.containsKey("ChangeValid") ? params.get("ChangeValid") : ""; + final boolean mitosis = sa.hasParam("Mitosis"); + String changeValid = sa.hasParam("ChangeValid") ? sa.getParam("ChangeValid") : ""; //andOrValid is for cards with "creature card and/or a land card" - String andOrValid = params.containsKey("AndOrValid") ? params.get("AndOrValid") : ""; - final boolean anyNumber = params.containsKey("AnyNumber"); + String andOrValid = sa.hasParam("AndOrValid") ? sa.getParam("AndOrValid") : ""; + final boolean anyNumber = sa.hasParam("AnyNumber"); - final int libraryPosition2 = params.containsKey("LibraryPosition2") ? Integer.parseInt(params - .get("LibraryPosition2")) : -1; - final boolean optional = params.containsKey("Optional"); - final boolean noMove = params.containsKey("NoMove"); + final int libraryPosition2 = sa.hasParam("LibraryPosition2") ? Integer.parseInt(sa.getParam("LibraryPosition2")) : -1; + final boolean optional = sa.hasParam("Optional"); + final boolean noMove = sa.hasParam("NoMove"); boolean changeAll = false; final ArrayList keywords = new ArrayList(); - if (params.containsKey("Keywords")) { - keywords.addAll(Arrays.asList(params.get("Keywords").split(" & "))); + if (sa.hasParam("Keywords")) { + keywords.addAll(Arrays.asList(sa.getParam("Keywords").split(" & "))); } - if (params.containsKey("ChangeNum")) { - if (params.get("ChangeNum").equalsIgnoreCase("All")) { + if (sa.hasParam("ChangeNum")) { + if (sa.getParam("ChangeNum").equalsIgnoreCase("All")) { changeAll = true; } else { - destZone1ChangeNum = Integer.parseInt(params.get("ChangeNum")); + destZone1ChangeNum = Integer.parseInt(sa.getParam("ChangeNum")); } } final Target tgt = sa.getTarget(); - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); - if (params.containsKey("Choser")) { + if (sa.hasParam("Choser")) { final ArrayList chosers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), - params.get("Choser"), sa); + sa.getParam("Choser"), sa); if (!chosers.isEmpty()) { choser = chosers.get(0); } @@ -116,11 +113,11 @@ public class DigEffect extends SpellEffect { final Card dummy = new Card(); dummy.setName("[No valid cards]"); - if (params.containsKey("Reveal")) { + if (sa.hasParam("Reveal")) { GuiChoose.one("Revealing cards from library", top); // Singletons.getModel().getGameAction().revealToCopmuter(top.toArray()); // - for when it exists - } else if (params.containsKey("RevealOptional")) { + } else if (sa.hasParam("RevealOptional")) { String question = "Reveal: "; for (final Card c : top) { question += c + " "; @@ -131,12 +128,12 @@ public class DigEffect extends SpellEffect { } else if (p.isComputer() && (top.get(0).isInstant() || top.get(0).isSorcery())) { GuiChoose.one(host + "Revealing cards from library", top); } - } else if (params.containsKey("RevealValid")) { - final String revealValid = params.get("RevealValid"); + } else if (sa.hasParam("RevealValid")) { + final String revealValid = sa.getParam("RevealValid"); final List toReveal = CardLists.getValidCards(top, revealValid, host.getController(), host); if (!toReveal.isEmpty()) { GuiChoose.one("Revealing cards from library", toReveal); - if (params.containsKey("RememberRevealed")) { + if (sa.hasParam("RememberRevealed")) { for (final Card one : toReveal) { host.addRemembered(one); } @@ -149,7 +146,7 @@ public class DigEffect extends SpellEffect { GuiChoose.one("Looking at cards from library", top); } - if ((params.containsKey("RememberRevealed")) && !params.containsKey("RevealValid")) { + if ((sa.hasParam("RememberRevealed")) && !sa.hasParam("RevealValid")) { for (final Card one : top) { host.addRemembered(one); } @@ -182,7 +179,7 @@ public class DigEffect extends SpellEffect { if (changeAll) { movedCards.addAll(valid); - } else if (params.containsKey("RandomChange")) { + } else if (sa.hasParam("RandomChange")) { int numChanging = Math.min(destZone1ChangeNum, valid.size()); movedCards = CardLists.getRandomSubList(valid, numChanging); } else { @@ -253,7 +250,7 @@ public class DigEffect extends SpellEffect { } } } - if (params.containsKey("ForgetOtherRemembered")) { + if (sa.hasParam("ForgetOtherRemembered")) { host.clearRemembered(); } Collections.reverse(movedCards); @@ -270,21 +267,21 @@ public class DigEffect extends SpellEffect { for (final String kw : keywords) { c.addExtrinsicKeyword(kw); } - if (params.containsKey("Tapped")) { + if (sa.hasParam("Tapped")) { c.setTapped(true); } } - if (params.containsKey("ExileFaceDown")) { + if (sa.hasParam("ExileFaceDown")) { c.setState(CardCharacteristicName.FaceDown); } - if (params.containsKey("Imprint")) { + if (sa.hasParam("Imprint")) { host.addImprinted(c); } } - if (params.containsKey("ForgetOtherRemembered")) { + if (sa.hasParam("ForgetOtherRemembered")) { host.clearRemembered(); } - if (params.containsKey("RememberChanged")) { + if (sa.hasParam("RememberChanged")) { host.addRemembered(c); } rest.remove(c); diff --git a/src/main/java/forge/card/abilityfactory/effects/DigUntilEffect.java b/src/main/java/forge/card/abilityfactory/effects/DigUntilEffect.java index 55e3a7b3064..cba948cb0f3 100644 --- a/src/main/java/forge/card/abilityfactory/effects/DigUntilEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/DigUntilEffect.java @@ -3,7 +3,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import java.util.Map; import forge.Card; import forge.Singletons; @@ -23,20 +22,20 @@ public class DigUntilEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); String desc = "Card"; - if (params.containsKey("ValidDescription")) { - desc = params.get("ValidDescription"); + if (sa.hasParam("ValidDescription")) { + desc = sa.getParam("ValidDescription"); } int untilAmount = 1; - if (params.containsKey("Amount")) { - untilAmount = AbilityFactory.calculateAmount(sa.getAbilityFactory().getHostCard(), params.get("Amount"), sa); + if (sa.hasParam("Amount")) { + untilAmount = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("Amount"), sa); } - for (final Player pl : getTargetPlayers(sa, params)) { + for (final Player pl : getTargetPlayers(sa)) { sb.append(pl).append(" "); } @@ -47,8 +46,8 @@ public class DigUntilEffect extends SpellEffect { } sb.append(". Put "); - final ZoneType found = ZoneType.smartValueOf(params.get("FoundDestination")); - final ZoneType revealed = ZoneType.smartValueOf(params.get("RevealedDestination")); + final ZoneType found = ZoneType.smartValueOf(sa.getParam("FoundDestination")); + final ZoneType revealed = ZoneType.smartValueOf(sa.getParam("RevealedDestination")); if (found != null) { sb.append(untilAmount > 1 ? "those cards" : "that card"); @@ -73,34 +72,34 @@ public class DigUntilEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card host = sa.getSourceCard(); String type = "Card"; - if (params.containsKey("Valid")) { - type = params.get("Valid"); + if (sa.hasParam("Valid")) { + type = sa.getParam("Valid"); } int untilAmount = 1; - if (params.containsKey("Amount")) { - untilAmount = AbilityFactory.calculateAmount(host, params.get("Amount"), sa); + if (sa.hasParam("Amount")) { + untilAmount = AbilityFactory.calculateAmount(host, sa.getParam("Amount"), sa); } Integer maxRevealed = null; - if (params.containsKey("MaxRevealed")) { - maxRevealed = AbilityFactory.calculateAmount(host, params.get("MaxRevealed"), sa); + if (sa.hasParam("MaxRevealed")) { + maxRevealed = AbilityFactory.calculateAmount(host, sa.getParam("MaxRevealed"), sa); } - final boolean remember = params.containsKey("RememberFound"); + final boolean remember = sa.hasParam("RememberFound"); final Target tgt = sa.getTarget(); - final ZoneType foundDest = ZoneType.smartValueOf(params.get("FoundDestination")); - final int foundLibPos = AbilityFactory.calculateAmount(host, params.get("FoundLibraryPosition"), sa); - final ZoneType revealedDest = ZoneType.smartValueOf(params.get("RevealedDestination")); - final int revealedLibPos = AbilityFactory.calculateAmount(host, params.get("RevealedLibraryPosition"), sa); + final ZoneType foundDest = ZoneType.smartValueOf(sa.getParam("FoundDestination")); + final int foundLibPos = AbilityFactory.calculateAmount(host, sa.getParam("FoundLibraryPosition"), sa); + final ZoneType revealedDest = ZoneType.smartValueOf(sa.getParam("RevealedDestination")); + final int revealedLibPos = AbilityFactory.calculateAmount(host, sa.getParam("RevealedLibraryPosition"), sa); - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getTargetPlayers(sa)) { if ((tgt == null) || p.canBeTargetedBy(sa)) { final List found = new ArrayList(); final List revealed = new ArrayList(); @@ -132,8 +131,8 @@ public class DigUntilEffect extends SpellEffect { final Iterator itr = found.iterator(); while (itr.hasNext()) { final Card c = itr.next(); - if (params.containsKey("GainControl") && foundDest.equals(ZoneType.Battlefield)) { - c.addController(sa.getAbilityFactory().getHostCard()); + if (sa.hasParam("GainControl") && foundDest.equals(ZoneType.Battlefield)) { + c.addController(sa.getSourceCard()); Singletons.getModel().getGame().getAction().moveTo(c.getController().getZone(foundDest), c); } else { Singletons.getModel().getGame().getAction().moveTo(foundDest, c, foundLibPos); @@ -142,7 +141,7 @@ public class DigUntilEffect extends SpellEffect { } } - if (params.containsKey("RememberRevealed")) { + if (sa.hasParam("RememberRevealed")) { for (final Card c : revealed) { host.addRemembered(c); } @@ -154,7 +153,7 @@ public class DigUntilEffect extends SpellEffect { Singletons.getModel().getGame().getAction().moveTo(revealedDest, c, revealedLibPos); } - if (params.containsKey("Shuffle")) { + if (sa.hasParam("Shuffle")) { p.shuffle(); } } // end foreach player diff --git a/src/main/java/forge/card/abilityfactory/effects/DiscardEffect.java b/src/main/java/forge/card/abilityfactory/effects/DiscardEffect.java index 890fccb8bfc..6677f9e5391 100644 --- a/src/main/java/forge/card/abilityfactory/effects/DiscardEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/DiscardEffect.java @@ -21,14 +21,14 @@ import forge.gui.GuiChoose; public class DiscardEffect extends RevealEffectBase { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { - final String mode = params.get("Mode"); + protected String getStackDescription(SpellAbility sa) { + final String mode = sa.getParam("Mode"); final StringBuilder sb = new StringBuilder(); - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); - final String conditionDesc = params.get("ConditionDescription"); + final String conditionDesc = sa.getParam("ConditionDescription"); if (conditionDesc != null) { sb.append(conditionDesc).append(" "); } @@ -48,8 +48,8 @@ public class DiscardEffect extends RevealEffectBase { } int numCards = 1; - if (params.containsKey("NumCards")) { - numCards = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumCards"), sa); + if (sa.hasParam("NumCards")) { + numCards = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("NumCards"), sa); } if (mode.equals("Hand")) { @@ -65,7 +65,7 @@ public class DiscardEffect extends RevealEffectBase { if (mode.equals("RevealYouChoose")) { sb.append(" to discard"); } else if (mode.equals("RevealDiscardAll")) { - String valid = params.get("DiscardValid"); + String valid = sa.getParam("DiscardValid"); if (valid == null) { valid = "Card"; } @@ -86,23 +86,23 @@ public class DiscardEffect extends RevealEffectBase { } // discardStackDescription() @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card source = sa.getSourceCard(); - final String mode = params.get("Mode"); + final String mode = sa.getParam("Mode"); final Target tgt = sa.getTarget(); final List discarded = new ArrayList(); - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getTargetPlayers(sa)) { if ((tgt == null) || p.canBeTargetedBy(sa)) { if (mode.equals("Defined")) { - final ArrayList toDiscard = AbilityFactory.getDefinedCards(source, params.get("DefinedCards"), + final ArrayList toDiscard = AbilityFactory.getDefinedCards(source, sa.getParam("DefinedCards"), sa); for (final Card c : toDiscard) { discarded.addAll(p.discard(c, sa)); } - if (params.containsKey("RememberDiscarded")) { + if (sa.hasParam("RememberDiscarded")) { for (final Card c : discarded) { source.addRemembered(c); } @@ -112,7 +112,7 @@ public class DiscardEffect extends RevealEffectBase { if (mode.equals("Hand")) { final List list = p.discardHand(sa); - if (params.containsKey("RememberDiscarded")) { + if (sa.hasParam("RememberDiscarded")) { for (final Card c : list) { source.addRemembered(c); } @@ -130,8 +130,8 @@ public class DiscardEffect extends RevealEffectBase { } int numCards = 1; - if (params.containsKey("NumCards")) { - numCards = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumCards"), sa); + if (sa.hasParam("NumCards")) { + numCards = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("NumCards"), sa); if (p.getCardsIn(ZoneType.Hand).size() > 0 && p.getCardsIn(ZoneType.Hand).size() < numCards) { // System.out.println("Scale down discard from " + numCards + " to " + p.getCardsIn(ZoneType.Hand).size()); @@ -141,7 +141,7 @@ public class DiscardEffect extends RevealEffectBase { if (mode.equals("Random")) { boolean runDiscard = true; - if (params.containsKey("Optional")) { + if (sa.hasParam("Optional")) { if (p.isHuman()) { // TODO Ask if Human would like to discard a card at Random StringBuilder sb = new StringBuilder("Would you like to discard "); @@ -155,11 +155,11 @@ public class DiscardEffect extends RevealEffectBase { } if (runDiscard) { - final String valid = params.containsKey("DiscardValid") ? params.get("DiscardValid") : "Card"; + final String valid = sa.hasParam("DiscardValid") ? sa.getParam("DiscardValid") : "Card"; discarded.addAll(p.discardRandom(numCards, sa, valid)); } - } else if (mode.equals("TgtChoose") && params.containsKey("UnlessType")) { - p.discardUnless(numCards, params.get("UnlessType"), sa); + } else if (mode.equals("TgtChoose") && sa.hasParam("UnlessType")) { + p.discardUnless(numCards, sa.getParam("UnlessType"), sa); } else if (mode.equals("RevealDiscardAll")) { // Reveal final List dPHand = p.getCardsIn(ZoneType.Hand); @@ -170,7 +170,7 @@ public class DiscardEffect extends RevealEffectBase { GuiChoose.oneOrNone("Revealed computer hand", dPHand); } - String valid = params.get("DiscardValid"); + String valid = sa.getParam("DiscardValid"); if (valid == null) { valid = "Card"; } @@ -190,16 +190,16 @@ public class DiscardEffect extends RevealEffectBase { // being used? List dPHand = new ArrayList(p.getCardsIn(ZoneType.Hand)); if (dPHand.size() != 0) { - if (params.containsKey("RevealNumber")) { - String amountString = params.get("RevealNumber"); + if (sa.hasParam("RevealNumber")) { + String amountString = sa.getParam("RevealNumber"); int amount = amountString.matches("[0-9][0-9]?") ? Integer.parseInt(amountString) : CardFactoryUtil.xCount(source, source.getSVar(amountString)); dPHand = getRevealedList(p, dPHand, amount, false); } List dPChHand = new ArrayList(dPHand); String[] dValid = null; - if (params.containsKey("DiscardValid")) { // Restrict card choices - dValid = params.get("DiscardValid").split(","); + if (sa.hasParam("DiscardValid")) { // Restrict card choices + dValid = sa.getParam("DiscardValid").split(","); dPChHand = CardLists.getValidCards(dPHand, dValid, source.getController(), source); } Player chooser = p; @@ -242,8 +242,8 @@ public class DiscardEffect extends RevealEffectBase { goodChoices = dPChHand; } final List dChoices = new ArrayList(); - if (params.containsKey("DiscardValid")) { - final String validString = params.get("DiscardValid"); + if (sa.hasParam("DiscardValid")) { + final String validString = sa.getParam("DiscardValid"); if (validString.contains("Creature") && !validString.contains("nonCreature")) { final Card c = CardFactoryUtil.getBestCreatureAI(goodChoices); if (c != null) { @@ -278,7 +278,7 @@ public class DiscardEffect extends RevealEffectBase { for (int i = 0; i < numCards; i++) { if (dPChHand.size() > 0) { Card dC = null; - if (params.containsKey("Optional")) { + if (sa.hasParam("Optional")) { dC = GuiChoose.oneOrNone("Choose a card to be discarded", dPChHand); } else { dC = GuiChoose.one("Choose a card to be discarded", dPChHand); @@ -295,7 +295,7 @@ public class DiscardEffect extends RevealEffectBase { } } - if (params.containsKey("RememberDiscarded")) { + if (sa.hasParam("RememberDiscarded")) { for (final Card c : discarded) { source.addRemembered(c); } diff --git a/src/main/java/forge/card/abilityfactory/effects/DrainManaEffect.java b/src/main/java/forge/card/abilityfactory/effects/DrainManaEffect.java index 2c2d120e6d7..400cdc1a572 100644 --- a/src/main/java/forge/card/abilityfactory/effects/DrainManaEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/DrainManaEffect.java @@ -11,10 +11,10 @@ import forge.game.player.Player; public class DrainManaEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); sb.append(StringUtils.join(tgtPlayers, ", ")); sb.append(" empties his or her mana pool."); @@ -23,10 +23,10 @@ public class DrainManaEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Target tgt = sa.getTarget(); - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getTargetPlayers(sa)) { if ((tgt == null) || p.canBeTargetedBy(sa)) { p.getManaPool().clearPool(false); } diff --git a/src/main/java/forge/card/abilityfactory/effects/DrawEffect.java b/src/main/java/forge/card/abilityfactory/effects/DrawEffect.java index 917bf17e089..9ac7cbaa153 100644 --- a/src/main/java/forge/card/abilityfactory/effects/DrawEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/DrawEffect.java @@ -16,15 +16,15 @@ import forge.gui.GuiChoose; public class DrawEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final String conditionDesc = params.get("ConditionDescription"); + final String conditionDesc = sa.getParam("ConditionDescription"); if (conditionDesc != null) { sb.append(conditionDesc).append(" "); } - final List tgtPlayers = getDefinedPlayersBeforeTargetOnes(sa, params); + final List tgtPlayers = getDefinedPlayersBeforeTargetOnes(sa); if (!tgtPlayers.isEmpty()) { @@ -32,8 +32,8 @@ public class DrawEffect extends SpellEffect { sb.append(StringUtils.join(tgtPlayers, " and ")); int numCards = 1; - if (params.containsKey("NumCards")) { - numCards = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumCards"), sa); + if (sa.hasParam("NumCards")) { + numCards = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("NumCards"), sa); } if (tgtPlayers.size() > 1) { @@ -45,7 +45,7 @@ public class DrawEffect extends SpellEffect { } sb.append(" (").append(numCards).append(")"); - if (params.containsKey("NextUpkeep")) { + if (sa.hasParam("NextUpkeep")) { sb.append(" at the beginning of the next upkeep"); } @@ -56,19 +56,19 @@ public class DrawEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card source = sa.getSourceCard(); int numCards = 1; - if (params.containsKey("NumCards")) { - numCards = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumCards"), sa); + if (sa.hasParam("NumCards")) { + numCards = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("NumCards"), sa); } final Target tgt = sa.getTarget(); - final boolean optional = params.containsKey("OptionalDecider"); - final boolean slowDraw = params.containsKey("NextUpkeep"); + final boolean optional = sa.hasParam("OptionalDecider"); + final boolean slowDraw = sa.hasParam("NextUpkeep"); - for (final Player p : getDefinedPlayersBeforeTargetOnes(sa, params)) { + for (final Player p : getDefinedPlayersBeforeTargetOnes(sa)) { if ((tgt == null) || p.canBeTargetedBy(sa)) { if (optional) { if (p.isComputer()) { @@ -98,10 +98,10 @@ public class DrawEffect extends SpellEffect { } } else { final List drawn = p.drawCards(numCards); - if (params.containsKey("Reveal")) { + if (sa.hasParam("Reveal")) { GuiChoose.one("Revealing drawn cards", drawn); } - if (params.containsKey("RememberDrawn")) { + if (sa.hasParam("RememberDrawn")) { for (final Card c : drawn) { source.addRemembered(c); } diff --git a/src/main/java/forge/card/abilityfactory/effects/EffectEffect.java b/src/main/java/forge/card/abilityfactory/effects/EffectEffect.java index e9fa130cbf4..f4b075546a4 100644 --- a/src/main/java/forge/card/abilityfactory/effects/EffectEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/EffectEffect.java @@ -18,7 +18,7 @@ import forge.game.player.Player; public class EffectEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { return sa.getDescription(); } @@ -26,16 +26,15 @@ public class EffectEffect extends SpellEffect { *

* effectResolve. *

- * - * @param af - * a {@link forge.card.abilityfactory.AbilityFactory} object. * @param sa * a {@link forge.card.spellability.SpellAbility} object. + * @param af + * a {@link forge.card.abilityfactory.AbilityFactory} object. */ @Override - public void resolve(java.util.Map params, SpellAbility sa) { - final Card hostCard = sa.getAbilityFactory().getHostCard(); + public void resolve(SpellAbility sa) { + final Card hostCard = sa.getSourceCard(); String[] effectAbilities = null; String[] effectTriggers = null; @@ -47,56 +46,56 @@ public class EffectEffect extends SpellEffect { String effectImprinted = null; Player ownerEff = null; - if (params.containsKey("Abilities")) { - effectAbilities = params.get("Abilities").split(","); + if (sa.hasParam("Abilities")) { + effectAbilities = sa.getParam("Abilities").split(","); } - if (params.containsKey("Triggers")) { - effectTriggers = params.get("Triggers").split(","); + if (sa.hasParam("Triggers")) { + effectTriggers = sa.getParam("Triggers").split(","); } - if (params.containsKey("StaticAbilities")) { - effectStaticAbilities = params.get("StaticAbilities").split(","); + if (sa.hasParam("StaticAbilities")) { + effectStaticAbilities = sa.getParam("StaticAbilities").split(","); } - if (params.containsKey("ReplacementEffects")) { - effectReplacementEffects = params.get("ReplacementEffects").split(","); + if (sa.hasParam("ReplacementEffects")) { + effectReplacementEffects = sa.getParam("ReplacementEffects").split(","); } - if (params.containsKey("SVars")) { - effectSVars = params.get("SVars").split(","); + if (sa.hasParam("SVars")) { + effectSVars = sa.getParam("SVars").split(","); } - if (params.containsKey("Keywords")) { - effectKeywords = params.get("Keywords").split(","); + if (sa.hasParam("Keywords")) { + effectKeywords = sa.getParam("Keywords").split(","); } - if (params.containsKey("RememberObjects")) { - effectRemembered = params.get("RememberObjects"); + if (sa.hasParam("RememberObjects")) { + effectRemembered = sa.getParam("RememberObjects"); } - if (params.containsKey("ImprintCards")) { - effectImprinted = params.get("ImprintCards"); + if (sa.hasParam("ImprintCards")) { + effectImprinted = sa.getParam("ImprintCards"); } // Effect eff = new Effect(); - String name = params.get("Name"); + String name = sa.getParam("Name"); if (name == null) { name = sa.getSourceCard().getName() + "'s Effect"; } // Unique Effects shouldn't be duplicated - if (params.containsKey("Unique") && Singletons.getModel().getGame().isCardInPlay(name)) { + if (sa.hasParam("Unique") && Singletons.getModel().getGame().isCardInPlay(name)) { return; } - if (params.containsKey("EffectOwner")) { + if (sa.hasParam("EffectOwner")) { ArrayList effectOwner; - effectOwner = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("EffectOwner"), sa); + effectOwner = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), sa.getParam("EffectOwner"), sa); ownerEff = effectOwner.get(0); } - final Player controller = params.containsKey("EffectOwner") ? ownerEff : sa.getActivatingPlayer(); + final Player controller = sa.hasParam("EffectOwner") ? ownerEff : sa.getActivatingPlayer(); final Card eff = new Card(); eff.setName(name); eff.addType("Effect"); // Or Emblem @@ -108,8 +107,8 @@ public class EffectEffect extends SpellEffect { eff.setColor(hostCard.getColor()); eff.setImmutable(true); eff.setEffectSource(hostCard); - if (params.containsKey("Image")) { - eff.setImageName(params.get("Image")); + if (sa.hasParam("Image")) { + eff.setImageName(sa.getParam("Image")); } // Effects should be Orange or something probably @@ -191,12 +190,12 @@ public class EffectEffect extends SpellEffect { } // Remember created effect - if (params.containsKey("RememberEffect")) { + if (sa.hasParam("RememberEffect")) { Singletons.getModel().getGame().getCardState(hostCard).addRemembered(eff); } // Duration - final String duration = params.get("Duration"); + final String duration = sa.getParam("Duration"); if ((duration == null) || !duration.equals("Permanent")) { final Command endEffect = new Command() { private static final long serialVersionUID = -5861759814760561373L; diff --git a/src/main/java/forge/card/abilityfactory/effects/EndTurnEffect.java b/src/main/java/forge/card/abilityfactory/effects/EndTurnEffect.java index eaad731bcc6..07a466b74e3 100644 --- a/src/main/java/forge/card/abilityfactory/effects/EndTurnEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/EndTurnEffect.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.effects; -import java.util.Map; import forge.Card; import forge.Singletons; @@ -20,7 +19,7 @@ public class EndTurnEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { GameState game = Singletons.getModel().getGame(); // Steps taken from gatherer's rulings on Time Stop. @@ -58,7 +57,7 @@ public class EndTurnEffect extends SpellEffect { */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { return "End the turn."; } diff --git a/src/main/java/forge/card/abilityfactory/effects/FightEffect.java b/src/main/java/forge/card/abilityfactory/effects/FightEffect.java index a3e6eeb7663..34ab28d9404 100644 --- a/src/main/java/forge/card/abilityfactory/effects/FightEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/FightEffect.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; -import java.util.Map; import forge.Card; import forge.card.abilityfactory.AbilityFactory; @@ -13,7 +12,7 @@ import forge.card.spellability.Target; public class FightEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); Card fighter1 = null; @@ -26,8 +25,8 @@ public class FightEffect extends SpellEffect { fighter1 = tgts.get(0); } } - if (params.containsKey("Defined")) { - ArrayList defined = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa); + if (sa.hasParam("Defined")) { + ArrayList defined = AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa); // Allow both fighters to come from defined list if first fighter not already found if (defined.size() > 1 && fighter1 == null) { fighter1 = defined.get(0); @@ -54,7 +53,7 @@ public class FightEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { Card fighter1 = null; Card fighter2 = null; final Target tgt = sa.getTarget(); @@ -65,8 +64,8 @@ public class FightEffect extends SpellEffect { fighter1 = tgts.get(0); } } - if (params.containsKey("Defined")) { - ArrayList defined = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa); + if (sa.hasParam("Defined")) { + ArrayList defined = AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa); // Allow both fighters to come from defined list if first fighter not already found if (defined.size() > 1 && fighter1 == null) { fighter1 = defined.get(0); diff --git a/src/main/java/forge/card/abilityfactory/effects/FlipCoinEffect.java b/src/main/java/forge/card/abilityfactory/effects/FlipCoinEffect.java index f316f535f32..f192df74d0e 100644 --- a/src/main/java/forge/card/abilityfactory/effects/FlipCoinEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/FlipCoinEffect.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; -import java.util.Map; import forge.Card; import forge.GameActionUtil; @@ -17,9 +16,9 @@ public class FlipCoinEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final Card host = sa.getSourceCard(); - final Player player = params.containsKey("OpponentCalls") ? host.getController().getOpponent() : host + final Player player = sa.hasParam("OpponentCalls") ? host.getController().getOpponent() : host .getController(); final StringBuilder sb = new StringBuilder(); @@ -29,11 +28,11 @@ public class FlipCoinEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card host = sa.getSourceCard(); final Player player = host.getController(); - final ArrayList caller = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Caller"), sa); + final ArrayList caller = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), sa.getParam("Caller"), sa); if (caller.size() == 0) { caller.add(player); } @@ -44,16 +43,16 @@ public class FlipCoinEffect extends SpellEffect { // Run triggers // HashMap runParams = new HashMap(); // runParams.put("Player", player); - if (params.get("RememberAll") != null) { + if (sa.getParam("RememberAll") != null) { host.addRemembered(host); } if (victory) { - if (params.get("RememberWinner") != null) { + if (sa.getParam("RememberWinner") != null) { host.addRemembered(host); } - if (params.containsKey("WinSubAbility")) { - final SpellAbility win = afOutcomes.getAbility(host.getSVar(params.get("WinSubAbility")), host); + if (sa.hasParam("WinSubAbility")) { + final SpellAbility win = afOutcomes.getAbility(host.getSVar(sa.getParam("WinSubAbility")), host); win.setActivatingPlayer(player); ((AbilitySub) win).setParent(sa); @@ -61,11 +60,11 @@ public class FlipCoinEffect extends SpellEffect { } // runParams.put("Won","True"); } else { - if (params.get("RememberLoser") != null) { + if (sa.getParam("RememberLoser") != null) { host.addRemembered(host); } - if (params.containsKey("LoseSubAbility")) { - final SpellAbility lose = afOutcomes.getAbility(host.getSVar(params.get("LoseSubAbility")), host); + if (sa.hasParam("LoseSubAbility")) { + final SpellAbility lose = afOutcomes.getAbility(host.getSVar(sa.getParam("LoseSubAbility")), host); lose.setActivatingPlayer(player); ((AbilitySub) lose).setParent(sa); diff --git a/src/main/java/forge/card/abilityfactory/effects/FogEffect.java b/src/main/java/forge/card/abilityfactory/effects/FogEffect.java index fdc42acd0f2..fcffeae469a 100644 --- a/src/main/java/forge/card/abilityfactory/effects/FogEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/FogEffect.java @@ -8,13 +8,13 @@ public class FogEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { return sa.getSourceCard().getController() + " prevents all combat damage this turn."; } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { // Expand Fog keyword here depending on what we need out of it. Singletons.getModel().getGame().getPhaseHandler().setPreventCombatDamageThisTurn(true); } diff --git a/src/main/java/forge/card/abilityfactory/effects/GameLossEffect.java b/src/main/java/forge/card/abilityfactory/effects/GameLossEffect.java index d819dfc895e..27e124cee9f 100644 --- a/src/main/java/forge/card/abilityfactory/effects/GameLossEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/GameLossEffect.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.effects; import java.util.List; -import java.util.Map; import forge.Card; import forge.card.abilityfactory.SpellEffect; @@ -15,10 +14,10 @@ public class GameLossEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); for (final Player p : tgtPlayers) { sb.append(p.getName()).append(" "); } @@ -28,10 +27,10 @@ public class GameLossEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { - final Card card = sa.getAbilityFactory().getHostCard(); + public void resolve(SpellAbility sa) { + final Card card = sa.getSourceCard(); - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getTargetPlayers(sa)) { p.loseConditionMet(GameLossReason.SpellEffect, card.getName()); } } diff --git a/src/main/java/forge/card/abilityfactory/effects/GameWinEffect.java b/src/main/java/forge/card/abilityfactory/effects/GameWinEffect.java index 3d38b6dab9f..9b85f28aae2 100644 --- a/src/main/java/forge/card/abilityfactory/effects/GameWinEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/GameWinEffect.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.effects; -import java.util.Map; import forge.Card; import forge.card.abilityfactory.SpellEffect; @@ -14,10 +13,10 @@ public class GameWinEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(Map params, SpellAbility sa) { - final Card card = sa.getAbilityFactory().getHostCard(); + public void resolve(SpellAbility sa) { + final Card card = sa.getSourceCard(); - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getTargetPlayers(sa)) { p.altWinBySpellEffect(card.getName()); } } diff --git a/src/main/java/forge/card/abilityfactory/effects/LifeExchangeEffect.java b/src/main/java/forge/card/abilityfactory/effects/LifeExchangeEffect.java index 51df4e1fc21..12652382408 100644 --- a/src/main/java/forge/card/abilityfactory/effects/LifeExchangeEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/LifeExchangeEffect.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.effects; import java.util.List; -import java.util.Map; import forge.Card; import forge.card.abilityfactory.SpellEffect; @@ -24,10 +23,10 @@ public class LifeExchangeEffect extends SpellEffect { * @see forge.card.abilityfactory.AbilityFactoryAlterLife.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); final Player activatingPlayer = sa.getActivatingPlayer(); - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); if (tgtPlayers.size() == 1) { @@ -45,12 +44,12 @@ public class LifeExchangeEffect extends SpellEffect { * @see forge.card.abilityfactory.AbilityFactoryAlterLife.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card source = sa.getSourceCard(); Player p1; Player p2; - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); if (tgtPlayers.size() == 1) { p1 = sa.getActivatingPlayer(); diff --git a/src/main/java/forge/card/abilityfactory/effects/LifeGainEffect.java b/src/main/java/forge/card/abilityfactory/effects/LifeGainEffect.java index 4b15378bd1f..0b354d75f87 100644 --- a/src/main/java/forge/card/abilityfactory/effects/LifeGainEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/LifeGainEffect.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.effects; -import java.util.Map; import forge.card.abilityfactory.AbilityFactory; import forge.card.abilityfactory.SpellEffect; @@ -14,16 +13,16 @@ public class LifeGainEffect extends SpellEffect { * @see forge.card.abilityfactory.AbilityFactoryAlterLife.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("LifeAmount"), sa); + final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("LifeAmount"), sa); - final String conditionDesc = params.get("ConditionDescription"); + final String conditionDesc = sa.getParam("ConditionDescription"); if (conditionDesc != null) { sb.append(conditionDesc).append(" "); } - for (final Player player : getTargetPlayers(sa, params)) { + for (final Player player : getTargetPlayers(sa)) { sb.append(player).append(" "); } @@ -36,12 +35,12 @@ public class LifeGainEffect extends SpellEffect { * @see forge.card.abilityfactory.AbilityFactoryAlterLife.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(Map params, SpellAbility sa) { - final int lifeAmount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("LifeAmount"), sa); + public void resolve(SpellAbility sa) { + final int lifeAmount = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("LifeAmount"), sa); final Target tgt = sa.getTarget(); - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getTargetPlayers(sa)) { if ((tgt == null) || p.canBeTargetedBy(sa)) { p.gainLife(lifeAmount, sa.getSourceCard()); } diff --git a/src/main/java/forge/card/abilityfactory/effects/LifeLoseEffect.java b/src/main/java/forge/card/abilityfactory/effects/LifeLoseEffect.java index 8c19acccbe2..5876c8f0eb5 100644 --- a/src/main/java/forge/card/abilityfactory/effects/LifeLoseEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/LifeLoseEffect.java @@ -1,6 +1,5 @@ package forge.card.abilityfactory.effects; -import java.util.Map; import forge.card.abilityfactory.AbilityFactory; import forge.card.abilityfactory.SpellEffect; @@ -14,18 +13,18 @@ public class LifeLoseEffect extends SpellEffect { * @see forge.card.abilityfactory.AbilityFactoryAlterLife.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("LifeAmount"), sa); + final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("LifeAmount"), sa); - final String conditionDesc = params.get("ConditionDescription"); + final String conditionDesc = sa.getParam("ConditionDescription"); if (conditionDesc != null) { sb.append(conditionDesc).append(" "); } - for (final Player player : getTargetPlayers(sa, params)) { + for (final Player player : getTargetPlayers(sa)) { sb.append(player).append(" "); } @@ -38,14 +37,14 @@ public class LifeLoseEffect extends SpellEffect { * @see forge.card.abilityfactory.AbilityFactoryAlterLife.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { int lifeLost = 0; - final int lifeAmount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("LifeAmount"), sa); + final int lifeAmount = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("LifeAmount"), sa); final Target tgt = sa.getTarget(); - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getTargetPlayers(sa)) { if ((tgt == null) || p.canBeTargetedBy(sa)) { lifeLost += p.loseLife(lifeAmount, sa.getSourceCard()); } diff --git a/src/main/java/forge/card/abilityfactory/effects/LifeSetEffect.java b/src/main/java/forge/card/abilityfactory/effects/LifeSetEffect.java index a145a633498..52251027bbc 100644 --- a/src/main/java/forge/card/abilityfactory/effects/LifeSetEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/LifeSetEffect.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.effects; import java.util.List; -import java.util.Map; import forge.card.abilityfactory.AbilityFactory; import forge.card.abilityfactory.SpellEffect; @@ -15,11 +14,11 @@ public class LifeSetEffect extends SpellEffect { * @see forge.card.abilityfactory.AbilityFactoryAlterLife.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(Map params, SpellAbility sa) { - final int lifeAmount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("LifeAmount"), sa); + public void resolve(SpellAbility sa) { + final int lifeAmount = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("LifeAmount"), sa); final Target tgt = sa.getTarget(); - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getTargetPlayers(sa)) { if ((tgt == null) || p.canBeTargetedBy(sa)) { p.setLife(lifeAmount, sa.getSourceCard()); } @@ -30,18 +29,18 @@ public class LifeSetEffect extends SpellEffect { * @see forge.card.abilityfactory.AbilityFactoryAlterLife.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("LifeAmount"), sa); + final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("LifeAmount"), sa); - final String conditionDesc = params.get("ConditionDescription"); + final String conditionDesc = sa.getParam("ConditionDescription"); if (conditionDesc != null) { sb.append(conditionDesc).append(" "); } - List tgtPlayers = getTargetPlayers(sa, params); + List tgtPlayers = getTargetPlayers(sa); for (final Player player : tgtPlayers) { sb.append(player).append(" "); diff --git a/src/main/java/forge/card/abilityfactory/effects/ManaEffect.java b/src/main/java/forge/card/abilityfactory/effects/ManaEffect.java index fae0c282b96..13cd03ae8c5 100644 --- a/src/main/java/forge/card/abilityfactory/effects/ManaEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/ManaEffect.java @@ -1,8 +1,6 @@ package forge.card.abilityfactory.effects; import java.util.List; -import java.util.Map; - import com.google.common.collect.Iterables; import forge.Card; @@ -42,7 +40,7 @@ public class ManaEffect extends SpellEffect { @Override - public void resolve(Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card card = sa.getSourceCard(); @@ -53,15 +51,15 @@ public class ManaEffect extends SpellEffect { } // Spells are not undoable - abMana.setUndoable(sa.getAbilityFactory().isAbility() && abMana.isUndoable()); + abMana.setUndoable(sa.isAbility() && abMana.isUndoable()); - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); final Target tgt = sa.getTarget(); if (abMana.isComboMana()) { for (Player p : tgtPlayers) { - int amount = params.containsKey("Amount") ? AbilityFactory.calculateAmount(card, params.get("Amount"), sa) : 1; + int amount = sa.hasParam("Amount") ? AbilityFactory.calculateAmount(card, sa.getParam("Amount"), sa) : 1; if (tgt == null || p.canBeTargetedBy(sa)) { Player activator = sa.getActivatingPlayer(); // AI color choice is set in ComputerUtils so only human players need to make a choice @@ -100,8 +98,8 @@ public class ManaEffect extends SpellEffect { } else { // TODO: Add some logic for AI choice (ArsenalNut 2012/09/16) - if (params.containsKey("AILogic")) { - final String logic = params.get("AILogic"); + if (sa.hasParam("AILogic")) { + final String logic = sa.getParam("AILogic"); String chosen = Constant.Color.BLACK; if (logic.equals("MostProminentInComputerHand")) { chosen = CardFactoryUtil.getMostProminentColor(activator.getCardsIn( @@ -159,8 +157,8 @@ public class ManaEffect extends SpellEffect { abMana.setExpressChoice(choice); } else { - if (params.containsKey("AILogic")) { - final String logic = params.get("AILogic"); + if (sa.hasParam("AILogic")) { + final String logic = sa.getParam("AILogic"); String chosen = Constant.Color.BLACK; if (logic.equals("MostProminentInComputerHand")) { chosen = CardFactoryUtil.getMostProminentColor(act.getCardsIn(ZoneType.Hand)); @@ -180,19 +178,19 @@ public class ManaEffect extends SpellEffect { } for (final Player player : tgtPlayers) { - abMana.produceMana(generatedMana(params, sa), player, sa); + abMana.produceMana(generatedMana(sa), player, sa); } // Only clear express choice after mana has been produced abMana.clearExpressChoice(); // convert these to SubAbilities when appropriate - if (params.containsKey("Stuck")) { + if (sa.hasParam("Stuck")) { abMana.setUndoable(false); card.addExtrinsicKeyword("This card doesn't untap during your next untap step."); } - final String deplete = params.get("Deplete"); + final String deplete = sa.getParam("Deplete"); if (deplete != null) { final int num = card.getCounters(Counters.getType(deplete)); if (num == 0) { @@ -219,10 +217,10 @@ public class ManaEffect extends SpellEffect { * a {@link forge.card.spellability.SpellAbility} object. * @return a {@link java.lang.String} object. */ - private String generatedMana(final Map params, final SpellAbility sa) { + private String generatedMana(final SpellAbility sa) { // Calculate generated mana here for stack description and resolving - int amount = params.containsKey("Amount") ? AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("Amount"), sa) : 1; + int amount = sa.hasParam("Amount") ? AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("Amount"), sa) : 1; AbilityManaPart abMana = sa.getManaPart(); String baseMana; @@ -242,14 +240,14 @@ public class ManaEffect extends SpellEffect { baseMana = abMana.mana(); } - if (params.containsKey("Bonus")) { + if (sa.hasParam("Bonus")) { // For mana abilities that get a bonus // Bonus currently MULTIPLIES the base amount. Base Amounts should // ALWAYS be Base int bonus = 0; - if (params.get("Bonus").equals("UrzaLands")) { + if (sa.getParam("Bonus").equals("UrzaLands")) { if (hasUrzaLands(sa.getActivatingPlayer())) { - bonus = Integer.parseInt(params.get("BonusProduced")); + bonus = Integer.parseInt(sa.getParam("BonusProduced")); } } @@ -257,7 +255,7 @@ public class ManaEffect extends SpellEffect { } try { - if ((params.get("Amount") != null) && (amount != Integer.parseInt(params.get("Amount")))) { + if ((sa.getParam("Amount") != null) && (amount != Integer.parseInt(sa.getParam("Amount")))) { abMana.setUndoable(false); } } catch (final NumberFormatException n) { @@ -295,20 +293,20 @@ public class ManaEffect extends SpellEffect { *

* manaStackDescription. *

- * + * @param sa + * a {@link forge.card.spellability.SpellAbility} object. * @param abMana * a {@link forge.card.spellability.AbilityMana} object. * @param af * a {@link forge.card.abilityfactory.AbilityFactory} object. - * @param sa - * a {@link forge.card.spellability.SpellAbility} object. + * * @return a {@link java.lang.String} object. */ @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - sb.append("Add ").append(generatedMana(params, sa)).append(" to your mana pool."); + sb.append("Add ").append(generatedMana(sa)).append(" to your mana pool."); return sb.toString(); } } \ No newline at end of file diff --git a/src/main/java/forge/card/abilityfactory/effects/ManaReflectedEffect.java b/src/main/java/forge/card/abilityfactory/effects/ManaReflectedEffect.java index 7474071e202..7348d041c79 100644 --- a/src/main/java/forge/card/abilityfactory/effects/ManaReflectedEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/ManaReflectedEffect.java @@ -2,8 +2,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.List; -import java.util.Map; - import forge.Card; import forge.CardUtil; import forge.card.abilityfactory.AbilityFactory; @@ -21,18 +19,18 @@ public class ManaReflectedEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { // Spells are not undoable AbilityManaPart ma = sa.getManaPart(); - ma.setUndoable(sa.getAbilityFactory().isAbility() && ma.isUndoable()); + ma.setUndoable(sa.isAbility() && ma.isUndoable()); - final List colors = CardUtil.getReflectableManaColors(sa, params, new ArrayList(), + final List colors = CardUtil.getReflectableManaColors(sa, sa, new ArrayList(), new ArrayList()); - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); for (final Player player : tgtPlayers) { - final String generated = generatedReflectedMana(params, sa, colors, player); + final String generated = generatedReflectedMana(sa, colors, player); if (ma.getCanceled()) { ma.undo(); ma.setCanceled(false); @@ -63,9 +61,9 @@ public class ManaReflectedEffect extends SpellEffect { * a {@link forge.game.player.Player} object. * @return a {@link java.lang.String} object. */ - private static String generatedReflectedMana(final Map params, final SpellAbility sa, final List colors, final Player player) { + private static String generatedReflectedMana(final SpellAbility sa, final List colors, final Player player) { // Calculate generated mana here for stack description and resolving - final int amount = params.containsKey("Amount") ? AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("Amount"), sa) : 1; + final int amount = sa.hasParam("Amount") ? AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("Amount"), sa) : 1; String baseMana = ""; diff --git a/src/main/java/forge/card/abilityfactory/effects/MillEffect.java b/src/main/java/forge/card/abilityfactory/effects/MillEffect.java index f94850dfdd4..8a265e61961 100644 --- a/src/main/java/forge/card/abilityfactory/effects/MillEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/MillEffect.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.effects; import java.util.List; -import java.util.Map; import forge.Card; import forge.card.abilityfactory.AbilityFactory; @@ -14,31 +13,31 @@ import forge.game.zone.ZoneType; public class MillEffect extends SpellEffect { @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card source = sa.getSourceCard(); - final int numCards = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumCards"), sa); - final boolean bottom = params.containsKey("FromBottom"); + final int numCards = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("NumCards"), sa); + final boolean bottom = sa.hasParam("FromBottom"); - if (params.containsKey("ForgetOtherRemembered")) { + if (sa.hasParam("ForgetOtherRemembered")) { source.clearRemembered(); } final Target tgt = sa.getTarget(); - ZoneType destination = ZoneType.smartValueOf(params.get("Destination")); + ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination")); if (destination == null) { destination = ZoneType.Graveyard; } - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getTargetPlayers(sa)) { if ((tgt == null) || p.canBeTargetedBy(sa)) { final List milled = p.mill(numCards, destination, bottom); - if (params.containsKey("RememberMilled")) { + if (sa.hasParam("RememberMilled")) { for (final Card c : milled) { source.addRemembered(c); } } - if (params.containsKey("Imprint")) { + if (sa.hasParam("Imprint")) { for (final Card c : milled) { source.addImprinted(c); } @@ -48,12 +47,12 @@ public class MillEffect extends SpellEffect { } @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final int numCards = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumCards"), sa); + final int numCards = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("NumCards"), sa); - final List tgtPlayers = getTargetPlayers(sa, params); - final String conditionDesc = params.get("ConditionDescription"); + final List tgtPlayers = getTargetPlayers(sa); + final String conditionDesc = sa.getParam("ConditionDescription"); if (conditionDesc != null) { sb.append(conditionDesc).append(" "); } @@ -63,7 +62,7 @@ public class MillEffect extends SpellEffect { sb.append(p.toString()).append(" "); } - final ZoneType dest = ZoneType.smartValueOf(params.get("Destination")); + final ZoneType dest = ZoneType.smartValueOf(sa.getParam("Destination")); if ((dest == null) || dest.equals(ZoneType.Graveyard)) { sb.append("mills "); } else if (dest.equals(ZoneType.Exile)) { @@ -76,7 +75,7 @@ public class MillEffect extends SpellEffect { if (numCards != 1) { sb.append("s"); } - final String millPosition = params.containsKey("FromBottom") ? "bottom" : "top"; + final String millPosition = sa.hasParam("FromBottom") ? "bottom" : "top"; sb.append(" from the " + millPosition + " of his or her library."); diff --git a/src/main/java/forge/card/abilityfactory/effects/MustAttackEffect.java b/src/main/java/forge/card/abilityfactory/effects/MustAttackEffect.java index fb9f1dc00a5..1cc7b483297 100644 --- a/src/main/java/forge/card/abilityfactory/effects/MustAttackEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/MustAttackEffect.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.effects; import java.util.List; -import java.util.Map; import forge.Card; import forge.GameEntity; @@ -16,18 +15,18 @@ public class MustAttackEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final Card host = sa.getSourceCard(); final StringBuilder sb = new StringBuilder(); // end standard pre- - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); String defender = null; - if (params.get("Defender").equals("Self")) { + if (sa.getParam("Defender").equals("Self")) { defender = host.toString(); } else { // TODO - if more needs arise in the future @@ -42,14 +41,14 @@ public class MustAttackEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { - final List tgtPlayers = getTargetPlayers(sa, params); + public void resolve(SpellAbility sa) { + final List tgtPlayers = getTargetPlayers(sa); final Target tgt = sa.getTarget(); for (final Player p : tgtPlayers) { if ((tgt == null) || p.canBeTargetedBy(sa)) { GameEntity entity; - if (params.get("Defender").equals("Self")) { + if (sa.getParam("Defender").equals("Self")) { entity = sa.getSourceCard(); } else { entity = p.getOpponent(); diff --git a/src/main/java/forge/card/abilityfactory/effects/MustBlockEffect.java b/src/main/java/forge/card/abilityfactory/effects/MustBlockEffect.java index 86aba6b7949..ebdc9f622e4 100644 --- a/src/main/java/forge/card/abilityfactory/effects/MustBlockEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/MustBlockEffect.java @@ -12,7 +12,7 @@ import forge.card.spellability.Target; public class MustBlockEffect extends SpellEffect { @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card host = sa.getSourceCard(); ArrayList tgtCards; @@ -21,12 +21,12 @@ public class MustBlockEffect extends SpellEffect { if (tgt != null) { tgtCards = tgt.getTargetCards(); } else { - tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa); + tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa); } ArrayList cards; - if (params.containsKey("DefinedAttacker")) { - cards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("DefinedAttacker"), sa); + if (sa.hasParam("DefinedAttacker")) { + cards = AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("DefinedAttacker"), sa); } else { cards = new ArrayList(); cards.add(host); @@ -43,18 +43,18 @@ public class MustBlockEffect extends SpellEffect { } // mustBlockResolve() @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final Card host = sa.getSourceCard(); final StringBuilder sb = new StringBuilder(); // end standard pre- - final List tgtCards = getTargetCards(sa, params); + final List tgtCards = getTargetCards(sa); String attacker = null; - if (params.containsKey("DefinedAttacker")) { + if (sa.hasParam("DefinedAttacker")) { final ArrayList cards = AbilityFactory.getDefinedCards(sa.getSourceCard(), - params.get("DefinedAttacker"), sa); + sa.getParam("DefinedAttacker"), sa); attacker = cards.get(0).toString(); } else { attacker = host.toString(); diff --git a/src/main/java/forge/card/abilityfactory/effects/PhasesEffect.java b/src/main/java/forge/card/abilityfactory/effects/PhasesEffect.java index 3e82b436ba0..1669d752184 100644 --- a/src/main/java/forge/card/abilityfactory/effects/PhasesEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/PhasesEffect.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.effects; import java.util.List; -import java.util.Map; import org.apache.commons.lang3.StringUtils; @@ -21,10 +20,10 @@ public class PhasesEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { // when getStackDesc is called, just build exactly what is happening final StringBuilder sb = new StringBuilder(); - final List tgtCards = getTargetCards(sa, params); + final List tgtCards = getTargetCards(sa); sb.append(StringUtils.join(tgtCards, ", ")); sb.append(" Phases Out."); return sb.toString(); @@ -34,15 +33,14 @@ public class PhasesEffect extends SpellEffect { *

* phasesResolve. *

- * - * @param af - * a {@link forge.card.abilityfactory.AbilityFactory} object. * @param sa * a {@link forge.card.spellability.SpellAbility} object. + * @param af + * a {@link forge.card.abilityfactory.AbilityFactory} object. */ @Override - public void resolve(java.util.Map params, SpellAbility sa) { - final List tgtCards = getTargetCards(sa, params); + public void resolve(SpellAbility sa) { + final List tgtCards = getTargetCards(sa); for (final Card tgtC : tgtCards) { if (!tgtC.isPhasedOut()) { diff --git a/src/main/java/forge/card/abilityfactory/effects/PlayEffect.java b/src/main/java/forge/card/abilityfactory/effects/PlayEffect.java index 521a4127a36..851f8b013b9 100644 --- a/src/main/java/forge/card/abilityfactory/effects/PlayEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/PlayEffect.java @@ -2,7 +2,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.apache.commons.lang3.StringUtils; @@ -30,18 +29,18 @@ import forge.item.CardDb; public class PlayEffect extends SpellEffect { @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); sb.append("Play "); - final List tgtCards = getTargetCards(sa, params); + final List tgtCards = getTargetCards(sa); - if (params.containsKey("Valid")) { + if (sa.hasParam("Valid")) { sb.append("cards"); } else { sb.append(StringUtils.join(tgtCards, ", ")); } - if (params.containsKey("WithoutManaCost")) { + if (sa.hasParam("WithoutManaCost")) { sb.append(" without paying the mana cost"); } sb.append("."); @@ -49,39 +48,39 @@ public class PlayEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card source = sa.getSourceCard(); Player activator = sa.getActivatingPlayer(); - boolean optional = params.containsKey("Optional"); - boolean remember = params.containsKey("RememberPlayed"); + boolean optional = sa.hasParam("Optional"); + boolean remember = sa.hasParam("RememberPlayed"); boolean wasFaceDown = false; int amount = 1; - if (params.containsKey("Amount") && !params.get("Amount").equals("All")) { - amount = AbilityFactory.calculateAmount(source, params.get("Amount"), sa); + if (sa.hasParam("Amount") && !sa.getParam("Amount").equals("All")) { + amount = AbilityFactory.calculateAmount(source, sa.getParam("Amount"), sa); } - if (params.containsKey("Controller")) { - activator = AbilityFactory.getDefinedPlayers(source, params.get("Controller"), sa).get(0); + if (sa.hasParam("Controller")) { + activator = AbilityFactory.getDefinedPlayers(source, sa.getParam("Controller"), sa).get(0); } final Player controller = activator; List tgtCards = new ArrayList(); - if (params.containsKey("Valid")) { + if (sa.hasParam("Valid")) { ZoneType zone = ZoneType.Hand; - if (params.containsKey("ValidZone")) { - zone = ZoneType.smartValueOf(params.get("ValidZone")); + if (sa.hasParam("ValidZone")) { + zone = ZoneType.smartValueOf(sa.getParam("ValidZone")); } tgtCards = Singletons.getModel().getGame().getCardsIn(zone); - tgtCards = AbilityFactory.filterListByType(tgtCards, params.get("Valid"), sa); + tgtCards = AbilityFactory.filterListByType(tgtCards, sa.getParam("Valid"), sa); } else - tgtCards = getTargetCards(sa, params); + tgtCards = getTargetCards(sa); if (tgtCards.isEmpty()) { return; } - if (params.containsKey("Amount") && params.get("Amount").equals("All")) { + if (sa.hasParam("Amount") && sa.getParam("Amount").equals("All")) { amount = tgtCards.size(); } @@ -134,10 +133,10 @@ public class PlayEffect extends SpellEffect { } continue; } - if (params.containsKey("ForgetRemembered")) { + if (sa.hasParam("ForgetRemembered")) { source.clearRemembered(); } - if (params.containsKey("CopyCard")) { + if (sa.hasParam("CopyCard")) { tgtCard = Singletons.getModel().getCardFactory().getCard(CardDb.instance().getCard(tgtCard), sa.getActivatingPlayer()); // when copying something stolen: tgtCard.addController(sa.getActivatingPlayer()); @@ -190,7 +189,7 @@ public class PlayEffect extends SpellEffect { tgtSA.getTarget().setMandatory(true); } - if (params.containsKey("WithoutManaCost")) { + if (sa.hasParam("WithoutManaCost")) { if (controller.isHuman()) { final SpellAbility newSA = tgtSA.copy(); final Cost cost = new Cost(tgtCard, "", false); diff --git a/src/main/java/forge/card/abilityfactory/effects/PoisonEffect.java b/src/main/java/forge/card/abilityfactory/effects/PoisonEffect.java index 46d41a80eb1..3f60eb8f351 100644 --- a/src/main/java/forge/card/abilityfactory/effects/PoisonEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/PoisonEffect.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.effects; import java.util.List; -import java.util.Map; import org.apache.commons.lang3.StringUtils; @@ -22,11 +21,11 @@ import forge.game.player.Player; * @see forge.card.abilityfactory.AbilityFactoryAlterLife.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(Map params, SpellAbility sa) { - final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("Num"), sa); + public void resolve(SpellAbility sa) { + final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("Num"), sa); final Target tgt = sa.getTarget(); - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getTargetPlayers(sa)) { if ((tgt == null) || p.canBeTargetedBy(sa)) { p.addPoisonCounters(amount, sa.getSourceCard()); } @@ -37,17 +36,17 @@ import forge.game.player.Player; * @see forge.card.abilityfactory.AbilityFactoryAlterLife.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("Num"), sa); + final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("Num"), sa); - final String conditionDesc = params.get("ConditionDescription"); + final String conditionDesc = sa.getParam("ConditionDescription"); if (conditionDesc != null) { sb.append(conditionDesc).append(" "); } - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); sb.append(StringUtils.join(tgtPlayers, ", ")); sb.append(" "); diff --git a/src/main/java/forge/card/abilityfactory/effects/ProtectAllEffect.java b/src/main/java/forge/card/abilityfactory/effects/ProtectAllEffect.java index 80f63f52f34..4bd5ca31e5f 100644 --- a/src/main/java/forge/card/abilityfactory/effects/ProtectAllEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/ProtectAllEffect.java @@ -2,7 +2,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.List; -import java.util.Map; import javax.swing.JOptionPane; @@ -20,14 +19,14 @@ import forge.gui.GuiChoose; public class ProtectAllEffect extends SpellEffect { @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final List tgtCards = getTargetCards(sa, params); + final List tgtCards = getTargetCards(sa); if (tgtCards.size() > 0) { sb.append("Valid card gain protection"); - if (!params.containsKey("Permanent")) { + if (!sa.hasParam("Permanent")) { sb.append(" until end of turn"); } sb.append("."); @@ -37,11 +36,11 @@ public class ProtectAllEffect extends SpellEffect { } // protectStackDescription() @Override - public void resolve(java.util.Map params, SpellAbility sa) { - final Card host = sa.getAbilityFactory().getHostCard(); + public void resolve(SpellAbility sa) { + final Card host = sa.getSourceCard(); - final boolean isChoice = params.get("Gains").contains("Choice"); - final ArrayList choices = AbilityFactory.getProtectionList(params); + final boolean isChoice = sa.getParam("Gains").contains("Choice"); + final ArrayList choices = AbilityFactory.getProtectionList(sa); final ArrayList gains = new ArrayList(); if (isChoice) { if (sa.getActivatingPlayer().isHuman()) { @@ -57,7 +56,7 @@ public class ProtectAllEffect extends SpellEffect { JOptionPane.showMessageDialog(null, "Computer chooses " + gains, "" + host, JOptionPane.PLAIN_MESSAGE); } } else { - if (params.get("Gains").equals("ChosenColor")) { + if (sa.getParam("Gains").equals("ChosenColor")) { for (final String color : host.getChosenColor()) { gains.add(color.toLowerCase()); } @@ -68,8 +67,8 @@ public class ProtectAllEffect extends SpellEffect { // Deal with permanents String valid = ""; - if (params.containsKey("ValidCards")) { - valid = params.get("ValidCards"); + if (sa.hasParam("ValidCards")) { + valid = sa.getParam("ValidCards"); } if (!valid.equals("")) { List list = Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield); @@ -81,7 +80,7 @@ public class ProtectAllEffect extends SpellEffect { tgtC.addExtrinsicKeyword("Protection from " + gain); } - if (!params.containsKey("Permanent")) { + if (!sa.hasParam("Permanent")) { // If not Permanent, remove protection at EOT final Command untilEOT = new Command() { private static final long serialVersionUID = -6573962672873853565L; @@ -95,7 +94,7 @@ public class ProtectAllEffect extends SpellEffect { } } }; - if (params.containsKey("UntilEndOfCombat")) { + if (sa.hasParam("UntilEndOfCombat")) { Singletons.getModel().getGame().getEndOfCombat().addUntil(untilEOT); } else { Singletons.getModel().getGame().getEndOfTurn().addUntil(untilEOT); @@ -107,8 +106,8 @@ public class ProtectAllEffect extends SpellEffect { // Deal with Players String players = ""; - if (params.containsKey("ValidPlayers")) { - players = params.get("ValidPlayers"); + if (sa.hasParam("ValidPlayers")) { + players = sa.getParam("ValidPlayers"); } if (!players.equals("")) { final ArrayList playerList = AbilityFactory.getDefinedPlayers(host, players, sa); @@ -117,7 +116,7 @@ public class ProtectAllEffect extends SpellEffect { player.addKeyword("Protection from " + gain); } - if (!params.containsKey("Permanent")) { + if (!sa.hasParam("Permanent")) { // If not Permanent, remove protection at EOT final Command untilEOT = new Command() { private static final long serialVersionUID = -6573962672873853565L; @@ -129,7 +128,7 @@ public class ProtectAllEffect extends SpellEffect { } } }; - if (params.containsKey("UntilEndOfCombat")) { + if (sa.hasParam("UntilEndOfCombat")) { Singletons.getModel().getGame().getEndOfCombat().addUntil(untilEOT); } else { Singletons.getModel().getGame().getEndOfTurn().addUntil(untilEOT); diff --git a/src/main/java/forge/card/abilityfactory/effects/ProtectEffect.java b/src/main/java/forge/card/abilityfactory/effects/ProtectEffect.java index cfcfbec9998..641a670836c 100644 --- a/src/main/java/forge/card/abilityfactory/effects/ProtectEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/ProtectEffect.java @@ -3,7 +3,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import java.util.Map; import javax.swing.JOptionPane; @@ -27,15 +26,15 @@ public class ProtectEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { - final ArrayList gains = AbilityFactory.getProtectionList(params); - final boolean choose = (params.containsKey("Choices")) ? true : false; + final ArrayList gains = AbilityFactory.getProtectionList(sa); + final boolean choose = (sa.hasParam("Choices")) ? true : false; final String joiner = choose ? "or" : "and"; final StringBuilder sb = new StringBuilder(); - List tgtCards = getTargetCards(sa, params); + List tgtCards = getTargetCards(sa); if (tgtCards.size() > 0) { @@ -54,8 +53,8 @@ public class ProtectEffect extends SpellEffect { } } - if (params.containsKey("Radiance") && (sa.getTarget() != null)) { - sb.append(" and each other ").append(params.get("ValidTgts")) + if (sa.hasParam("Radiance") && (sa.getTarget() != null)) { + sb.append(" and each other ").append(sa.getParam("ValidTgts")) .append(" that shares a color with "); if (tgtCards.size() > 1) { sb.append("them"); @@ -86,7 +85,7 @@ public class ProtectEffect extends SpellEffect { sb.append(gains.get(i)); } - if (!params.containsKey("Permanent")) { + if (!sa.hasParam("Permanent")) { sb.append(" until end of turn"); } @@ -97,11 +96,11 @@ public class ProtectEffect extends SpellEffect { } // protectStackDescription() @Override - public void resolve(java.util.Map params, SpellAbility sa) { - final Card host = sa.getAbilityFactory().getHostCard(); + public void resolve(SpellAbility sa) { + final Card host = sa.getSourceCard(); - final boolean isChoice = params.get("Gains").contains("Choice"); - final ArrayList choices = AbilityFactory.getProtectionList(params); + final boolean isChoice = sa.getParam("Gains").contains("Choice"); + final ArrayList choices = AbilityFactory.getProtectionList(sa); final ArrayList gains = new ArrayList(); if (isChoice) { @@ -114,8 +113,8 @@ public class ProtectEffect extends SpellEffect { } else { Player ai = sa.getActivatingPlayer(); String choice = choices.get(0); - if (params.containsKey("AILogic")) { - final String logic = params.get("AILogic"); + if (sa.hasParam("AILogic")) { + final String logic = sa.getParam("AILogic"); if (logic.equals("MostProminentHumanCreatures")) { List list = ai.getOpponent().getCreaturesInPlay(); if (list.isEmpty()) { @@ -130,7 +129,7 @@ public class ProtectEffect extends SpellEffect { JOptionPane.showMessageDialog(null, "Computer chooses " + gains, "" + host, JOptionPane.PLAIN_MESSAGE); } } else { - if (params.get("Gains").equals("ChosenColor")) { + if (sa.getParam("Gains").equals("ChosenColor")) { for (final String color : host.getChosenColor()) { gains.add(color.toLowerCase()); } @@ -139,13 +138,13 @@ public class ProtectEffect extends SpellEffect { } } - final List tgtCards = getTargetCards(sa, params); + final List tgtCards = getTargetCards(sa); final ArrayList untargetedCards = new ArrayList(); final Target tgt = sa.getTarget(); - if (params.containsKey("Radiance") && (tgt != null)) { + if (sa.hasParam("Radiance") && (tgt != null)) { for (final Card c : CardUtil.getRadiance(host, tgtCards.get(0), - params.get("ValidTgts").split(","))) { + sa.getParam("ValidTgts").split(","))) { untargetedCards.add(c); } } @@ -166,7 +165,7 @@ public class ProtectEffect extends SpellEffect { tgtC.addExtrinsicKeyword("Protection from " + gain); } - if (!params.containsKey("Permanent")) { + if (!sa.hasParam("Permanent")) { // If not Permanent, remove protection at EOT final Command untilEOT = new Command() { private static final long serialVersionUID = 7682700789217703789L; @@ -180,7 +179,7 @@ public class ProtectEffect extends SpellEffect { } } }; - if (params.containsKey("UntilEndOfCombat")) { + if (sa.hasParam("UntilEndOfCombat")) { Singletons.getModel().getGame().getEndOfCombat().addUntil(untilEOT); } else { Singletons.getModel().getGame().getEndOfTurn().addUntil(untilEOT); @@ -198,7 +197,7 @@ public class ProtectEffect extends SpellEffect { unTgtC.addExtrinsicKeyword("Protection from " + gain); } - if (!params.containsKey("Permanent")) { + if (!sa.hasParam("Permanent")) { // If not Permanent, remove protection at EOT final Command untilEOT = new Command() { private static final long serialVersionUID = 7682700789217703789L; @@ -212,7 +211,7 @@ public class ProtectEffect extends SpellEffect { } } }; - if (params.containsKey("UntilEndOfCombat")) { + if (sa.hasParam("UntilEndOfCombat")) { Singletons.getModel().getGame().getEndOfCombat().addUntil(untilEOT); } else { Singletons.getModel().getGame().getEndOfTurn().addUntil(untilEOT); diff --git a/src/main/java/forge/card/abilityfactory/effects/PumpAllEffect.java b/src/main/java/forge/card/abilityfactory/effects/PumpAllEffect.java index 00de1848671..deed13d8226 100644 --- a/src/main/java/forge/card/abilityfactory/effects/PumpAllEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/PumpAllEffect.java @@ -16,12 +16,12 @@ import forge.game.zone.ZoneType; public class PumpAllEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); String desc = ""; - if (params.containsKey("PumpAllDescription")) { - desc = params.get("PumpAllDescription"); + if (sa.hasParam("PumpAllDescription")) { + desc = sa.getParam("PumpAllDescription"); } @@ -36,14 +36,14 @@ public class PumpAllEffect extends SpellEffect { } // pumpAllStackDescription() @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { List list; - final List tgtPlayers = getTargetPlayersEmptyAsDefault(sa, params); + final List tgtPlayers = getTargetPlayersEmptyAsDefault(sa); final ArrayList affectedZones = new ArrayList(); - if (params.containsKey("PumpZone")) { - for (final String zone : params.get("PumpZone").split(",")) { + if (sa.hasParam("PumpZone")) { + for (final String zone : sa.getParam("PumpZone").split(",")) { affectedZones.add(ZoneType.valueOf(zone)); } } else { @@ -64,15 +64,15 @@ public class PumpAllEffect extends SpellEffect { } String valid = ""; - if (params.containsKey("ValidCards")) { - valid = params.get("ValidCards"); + if (sa.hasParam("ValidCards")) { + valid = sa.getParam("ValidCards"); } list = AbilityFactory.filterListByType(list, valid, sa); - final List keywords = params.containsKey("KW") ? Arrays.asList(params.get("KW").split(" & ")) : new ArrayList(); - final int a = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumAtt"), sa); - final int d = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumDef"), sa); + final List keywords = sa.hasParam("KW") ? Arrays.asList(sa.getParam("KW").split(" & ")) : new ArrayList(); + final int a = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("NumAtt"), sa); + final int d = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("NumDef"), sa); for (final Card tgtC : list) { @@ -95,7 +95,7 @@ public class PumpAllEffect extends SpellEffect { tgtC.addExtrinsicKeyword(keywords.get(i)); } - if (!params.containsKey("Permanent")) { + if (!sa.hasParam("Permanent")) { // If not Permanent, remove Pumped at EOT final Command untilEOT = new Command() { private static final long serialVersionUID = 5415795460189457660L; @@ -112,7 +112,7 @@ public class PumpAllEffect extends SpellEffect { } } }; - if (params.containsKey("UntilUntaps")) { + if (sa.hasParam("UntilUntaps")) { sa.getSourceCard().addUntapCommand(untilEOT); } else { Singletons.getModel().getGame().getEndOfTurn().addUntil(untilEOT); diff --git a/src/main/java/forge/card/abilityfactory/effects/PumpEffect.java b/src/main/java/forge/card/abilityfactory/effects/PumpEffect.java index c04cd321a98..201edf774f7 100644 --- a/src/main/java/forge/card/abilityfactory/effects/PumpEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/PumpEffect.java @@ -3,8 +3,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Map; - import forge.Card; import forge.CardUtil; import forge.Command; @@ -20,9 +18,9 @@ import forge.game.zone.ZoneType; public class PumpEffect extends SpellEffect { - private void applyPump(final SpellAbility sa, final Card applyTo, final Map params, final int a, final int d, final List keywords) { + private void applyPump(final SpellAbility sa, final Card applyTo, final int a, final int d, final List keywords) { //if host is not on the battlefield don't apply - if (params.containsKey("UntilLoseControlOfHost") + if (sa.hasParam("UntilLoseControlOfHost") && !sa.getSourceCard().isInPlay()) { return; } @@ -37,7 +35,7 @@ public class PumpEffect extends SpellEffect { } } - if (!params.containsKey("Permanent")) { + if (!sa.hasParam("Permanent")) { // If not Permanent, remove Pumped at EOT final Command untilEOT = new Command() { private static final long serialVersionUID = -42244224L; @@ -54,18 +52,18 @@ public class PumpEffect extends SpellEffect { } } }; - if (params.containsKey("UntilEndOfCombat")) { + if (sa.hasParam("UntilEndOfCombat")) { Singletons.getModel().getGame().getEndOfCombat().addUntil(untilEOT); - } else if (params.containsKey("UntilYourNextUpkeep")) { + } else if (sa.hasParam("UntilYourNextUpkeep")) { Singletons.getModel().getGame().getUpkeep().addUntil(sa.getActivatingPlayer(), untilEOT); - } else if (params.containsKey("UntilHostLeavesPlay")) { + } else if (sa.hasParam("UntilHostLeavesPlay")) { sa.getSourceCard().addLeavesPlayCommand(untilEOT); - } else if (params.containsKey("UntilLoseControlOfHost")) { + } else if (sa.hasParam("UntilLoseControlOfHost")) { sa.getSourceCard().addLeavesPlayCommand(untilEOT); sa.getSourceCard().addChangeControllerCommand(untilEOT); - } else if (params.containsKey("UntilYourNextTurn")) { + } else if (sa.hasParam("UntilYourNextTurn")) { Singletons.getModel().getGame().getCleanup().addUntilYourNextTurn(sa.getActivatingPlayer(), untilEOT); - } else if (params.containsKey("UntilUntaps")) { + } else if (sa.hasParam("UntilUntaps")) { sa.getSourceCard().addUntapCommand(untilEOT); } else { Singletons.getModel().getGame().getEndOfTurn().addUntil(untilEOT); @@ -73,13 +71,13 @@ public class PumpEffect extends SpellEffect { } } - private void applyPump(final SpellAbility sa, final Player p, final Map params, final List keywords) { + private void applyPump(final SpellAbility sa, final Player p, final List keywords) { for (int i = 0; i < keywords.size(); i++) { p.addKeyword(keywords.get(i)); } - if (!params.containsKey("Permanent")) { + if (!sa.hasParam("Permanent")) { // If not Permanent, remove Pumped at EOT final Command untilEOT = new Command() { private static final long serialVersionUID = -32453460L; @@ -94,9 +92,9 @@ public class PumpEffect extends SpellEffect { } } }; - if (params.containsKey("UntilEndOfCombat")) { + if (sa.hasParam("UntilEndOfCombat")) { Singletons.getModel().getGame().getEndOfCombat().addUntil(untilEOT); - } else if (params.containsKey("UntilYourNextUpkeep")) { + } else if (sa.hasParam("UntilYourNextUpkeep")) { Singletons.getModel().getGame().getUpkeep().addUntil(sa.getActivatingPlayer(), untilEOT); } else { Singletons.getModel().getGame().getEndOfTurn().addUntil(untilEOT); @@ -105,7 +103,7 @@ public class PumpEffect extends SpellEffect { } @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); ArrayList tgts = new ArrayList(); @@ -115,11 +113,11 @@ public class PumpEffect extends SpellEffect { tgts.addAll(tgt.getTargetCards()); tgts.addAll(tgt.getTargetPlayers()); } else { - if (params.containsKey("Defined")) { - tgts.addAll(AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa)); + if (sa.hasParam("Defined")) { + tgts.addAll(AbilityFactory.getDefinedPlayers(sa.getSourceCard(), sa.getParam("Defined"), sa)); } if (tgts.isEmpty()) { - tgts.addAll(AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa)); + tgts.addAll(AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa)); } } @@ -129,8 +127,8 @@ public class PumpEffect extends SpellEffect { sb.append(c).append(" "); } - if (params.containsKey("Radiance")) { - sb.append(" and each other ").append(params.get("ValidTgts")) + if (sa.hasParam("Radiance")) { + sb.append(" and each other ").append(sa.getParam("ValidTgts")) .append(" that shares a color with "); if (tgts.size() > 1) { sb.append("them "); @@ -139,9 +137,9 @@ public class PumpEffect extends SpellEffect { } } - final List keywords = params.containsKey("KW") ? Arrays.asList(params.get("KW").split(" & ")) : new ArrayList(); - final int atk = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumAtt"), sa); - final int def = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumDef"), sa); + final List keywords = sa.hasParam("KW") ? Arrays.asList(sa.getParam("KW").split(" & ")) : new ArrayList(); + final int atk = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("NumAtt"), sa); + final int def = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("NumDef"), sa); sb.append("gains "); if ((atk != 0) || (def != 0)) { @@ -161,7 +159,7 @@ public class PumpEffect extends SpellEffect { sb.append(keywords.get(i)).append(" "); } - if (!params.containsKey("Permanent")) { + if (!sa.hasParam("Permanent")) { sb.append("until end of turn."); } @@ -171,31 +169,31 @@ public class PumpEffect extends SpellEffect { } // pumpStackDescription() @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { ArrayList tgtCards = new ArrayList(); final ArrayList untargetedCards = new ArrayList(); final Target tgt = sa.getTarget(); ArrayList tgtPlayers = new ArrayList(); String pumpRemembered = null; - final List keywords = params.containsKey("KW") ? Arrays.asList(params.get("KW").split(" & ")) : new ArrayList(); - final int a = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumAtt"), sa); - final int d = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumDef"), sa); + final List keywords = sa.hasParam("KW") ? Arrays.asList(sa.getParam("KW").split(" & ")) : new ArrayList(); + final int a = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("NumAtt"), sa); + final int d = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("NumDef"), sa); if (tgt != null) { tgtCards = tgt.getTargetCards(); tgtPlayers = tgt.getTargetPlayers(); } else { - if (params.containsKey("Defined")) { - tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa); + if (sa.hasParam("Defined")) { + tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), sa.getParam("Defined"), sa); } if (tgtPlayers.isEmpty()) { - tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa); + tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa); } } - if (params.containsKey("Optional")) { + if (sa.hasParam("Optional")) { if (sa.getActivatingPlayer().isHuman()) { final StringBuilder targets = new StringBuilder(); for (final Card tc : tgtCards) { @@ -203,8 +201,8 @@ public class PumpEffect extends SpellEffect { } final StringBuilder sb = new StringBuilder(); final String descBasic = "Apply pump to " + targets + "?"; - final String pumpDesc = params.containsKey("OptionQuestion") - ? params.get("OptionQuestion").replace("TARGETS", targets) : descBasic; + final String pumpDesc = sa.hasParam("OptionQuestion") + ? sa.getParam("OptionQuestion").replace("TARGETS", targets) : descBasic; sb.append(pumpDesc); if (!GameActionUtil.showYesNoDialog(sa.getSourceCard(), sb.toString())) { return; @@ -216,8 +214,8 @@ public class PumpEffect extends SpellEffect { } } - if (params.containsKey("RememberObjects")) { - pumpRemembered = params.get("RememberObjects"); + if (sa.hasParam("RememberObjects")) { + pumpRemembered = sa.getParam("RememberObjects"); } if (pumpRemembered != null) { @@ -228,14 +226,14 @@ public class PumpEffect extends SpellEffect { } } - if (params.containsKey("Radiance")) { - for (final Card c : CardUtil.getRadiance(sa.getSourceCard(), tgtCards.get(0), params.get("ValidTgts") + if (sa.hasParam("Radiance")) { + for (final Card c : CardUtil.getRadiance(sa.getSourceCard(), tgtCards.get(0), sa.getParam("ValidTgts") .split(","))) { untargetedCards.add(c); } } - final ZoneType pumpZone = params.containsKey("PumpZone") ? ZoneType.smartValueOf(params.get("PumpZone")) + final ZoneType pumpZone = sa.hasParam("PumpZone") ? ZoneType.smartValueOf(sa.getParam("PumpZone")) : ZoneType.Battlefield; final int size = tgtCards.size(); @@ -252,7 +250,7 @@ public class PumpEffect extends SpellEffect { continue; } - this.applyPump(sa, tgtC, params, a, d, keywords); + this.applyPump(sa, tgtC, a, d, keywords); } for (int i = 0; i < untargetedCards.size(); i++) { @@ -262,7 +260,7 @@ public class PumpEffect extends SpellEffect { continue; } - this.applyPump(sa, tgtC, params, a, d, keywords); + this.applyPump(sa, tgtC, a, d, keywords); } for (Player p : tgtPlayers) { @@ -270,7 +268,7 @@ public class PumpEffect extends SpellEffect { continue; } - this.applyPump(sa, p, params, keywords); + this.applyPump(sa, p, keywords); } } // pumpResolve() } \ No newline at end of file diff --git a/src/main/java/forge/card/abilityfactory/effects/RearrangeTopOfLibraryEffect.java b/src/main/java/forge/card/abilityfactory/effects/RearrangeTopOfLibraryEffect.java index 21c8612c7c6..4de7f46eb0d 100644 --- a/src/main/java/forge/card/abilityfactory/effects/RearrangeTopOfLibraryEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/RearrangeTopOfLibraryEffect.java @@ -22,14 +22,14 @@ public class RearrangeTopOfLibraryEffect extends SpellEffect { */ @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { int numCards = 0; - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); boolean shuffle = false; - Card host = sa.getAbilityFactory().getHostCard(); + Card host = sa.getSourceCard(); - numCards = AbilityFactory.calculateAmount(host, params.get("NumCards"), sa); - shuffle = params.containsKey("MayShuffle"); + numCards = AbilityFactory.calculateAmount(host, sa.getParam("NumCards"), sa); + shuffle = sa.hasParam("MayShuffle"); final StringBuilder ret = new StringBuilder(); ret.append("Look at the top "); @@ -62,27 +62,26 @@ public class RearrangeTopOfLibraryEffect extends SpellEffect { *

* rearrangeTopOfLibraryResolve. *

- * - * @param af - * a {@link forge.card.abilityfactory.AbilityFactory} object. * @param sa * a {@link forge.card.spellability.SpellAbility} object. + * @param af + * a {@link forge.card.abilityfactory.AbilityFactory} object. */ @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { int numCards = 0; - Card host = sa.getAbilityFactory().getHostCard(); + Card host = sa.getSourceCard(); boolean shuffle = false; if (sa.getActivatingPlayer().isHuman()) { final Target tgt = sa.getTarget(); - numCards = AbilityFactory.calculateAmount(host, params.get("NumCards"), sa); - shuffle = params.containsKey("MayShuffle"); + numCards = AbilityFactory.calculateAmount(host, sa.getParam("NumCards"), sa); + shuffle = sa.hasParam("MayShuffle"); - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getTargetPlayers(sa)) { if ((tgt == null) || p.canBeTargetedBy(sa)) { rearrangeTopOfLibrary(host, p, numCards, shuffle); } diff --git a/src/main/java/forge/card/abilityfactory/effects/RegenerateAllEffect.java b/src/main/java/forge/card/abilityfactory/effects/RegenerateAllEffect.java index b1daa0496f3..b0484506d8b 100644 --- a/src/main/java/forge/card/abilityfactory/effects/RegenerateAllEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/RegenerateAllEffect.java @@ -12,17 +12,17 @@ import forge.game.zone.ZoneType; public class RegenerateAllEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { return "Regenerate all valid cards."; } @Override - public void resolve(java.util.Map params, SpellAbility sa) { - final Card hostCard = sa.getAbilityFactory().getHostCard(); + public void resolve(SpellAbility sa) { + final Card hostCard = sa.getSourceCard(); String valid = ""; - if (params.containsKey("ValidCards")) { - valid = params.get("ValidCards"); + if (sa.hasParam("ValidCards")) { + valid = sa.getParam("ValidCards"); } List list = Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield); diff --git a/src/main/java/forge/card/abilityfactory/effects/RegenerateEffect.java b/src/main/java/forge/card/abilityfactory/effects/RegenerateEffect.java index a442cb5c84a..4b3c1bb6e69 100644 --- a/src/main/java/forge/card/abilityfactory/effects/RegenerateEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/RegenerateEffect.java @@ -2,7 +2,6 @@ package forge.card.abilityfactory.effects; import java.util.Iterator; import java.util.List; -import java.util.Map; import forge.Card; import forge.Command; @@ -18,9 +17,9 @@ public class RegenerateEffect extends SpellEffect * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final List tgtCards = getTargetCards(sa, params); + final List tgtCards = getTargetCards(sa); if (tgtCards.size() > 0) { sb.append("Regenerate "); @@ -45,10 +44,10 @@ public class RegenerateEffect extends SpellEffect } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Target tgt = sa.getTarget(); - for (final Card tgtC : getTargetCards(sa, params)) { + for (final Card tgtC : getTargetCards(sa)) { final Command untilEOT = new Command() { private static final long serialVersionUID = 1922050611313909200L; diff --git a/src/main/java/forge/card/abilityfactory/effects/RemoveFromCombatEffect.java b/src/main/java/forge/card/abilityfactory/effects/RemoveFromCombatEffect.java index f11eabaad33..91a5ca16002 100644 --- a/src/main/java/forge/card/abilityfactory/effects/RemoveFromCombatEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/RemoveFromCombatEffect.java @@ -13,10 +13,10 @@ import forge.card.spellability.Target; public class RemoveFromCombatEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final List tgtCards = getTargetCards(sa, params); + final List tgtCards = getTargetCards(sa); sb.append("Remove "); sb.append(StringUtils.join(tgtCards, ", ")); @@ -26,10 +26,10 @@ public class RemoveFromCombatEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Target tgt = sa.getTarget(); - for (final Card c : getTargetCards(sa, params)) { + for (final Card c : getTargetCards(sa)) { if ((tgt == null) || c.canBeTargetedBy(sa)) { Singletons.getModel().getGame().getCombat().removeFromCombat(c); } diff --git a/src/main/java/forge/card/abilityfactory/effects/RepeatEffect.java b/src/main/java/forge/card/abilityfactory/effects/RepeatEffect.java index 159ade805a6..243624ad313 100644 --- a/src/main/java/forge/card/abilityfactory/effects/RepeatEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/RepeatEffect.java @@ -2,8 +2,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.List; -import java.util.Map; - import forge.Card; import forge.CardLists; import forge.GameActionUtil; @@ -19,23 +17,23 @@ import forge.util.Expressions; public class RepeatEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { return "Repeat something. Somebody should really write a better StackDescription!"; } // end repeatStackDescription() @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final AbilityFactory afRepeat = new AbilityFactory(); Card source = sa.getSourceCard(); // setup subability to repeat - final SpellAbility repeat = afRepeat.getAbility(sa.getSourceCard().getSVar(params.get("RepeatSubAbility")), source); + final SpellAbility repeat = afRepeat.getAbility(sa.getSourceCard().getSVar(sa.getParam("RepeatSubAbility")), source); repeat.setActivatingPlayer(sa.getActivatingPlayer()); ((AbilitySub) repeat).setParent(sa); Integer maxRepeat = null; - if (params.containsKey("MaxRepeat")) { - maxRepeat = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("MaxRepeat"), sa); + if (sa.hasParam("MaxRepeat")) { + maxRepeat = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("MaxRepeat"), sa); } //execute repeat ability at least once @@ -53,7 +51,7 @@ public class RepeatEffect extends SpellEffect { System.out.println(infLoop.toString()); break; } - } while (checkRepeatConditions(params, sa)); + } while (checkRepeatConditions(sa)); } // end class AbilityFactory_Repeat @@ -68,20 +66,20 @@ public class RepeatEffect extends SpellEffect { * @param SA * a {@link forge.card.spellability.SpellAbility} object. */ - private boolean checkRepeatConditions(final Map params, final SpellAbility sa) { + private boolean checkRepeatConditions(final SpellAbility sa) { //boolean doAgain = false; - if (params.containsKey("RepeatPresent")) { - final String repeatPresent = params.get("RepeatPresent"); + if (sa.hasParam("RepeatPresent")) { + final String repeatPresent = sa.getParam("RepeatPresent"); List list = new ArrayList(); String repeatCompare = "GE1"; - if (params.containsKey("RepeatCompare")) { - repeatCompare = params.get("RepeatCompare"); + if (sa.hasParam("RepeatCompare")) { + repeatCompare = sa.getParam("RepeatCompare"); } - if (params.containsKey("RepeatDefined")) { - list.addAll(AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("RepeatDefined"), sa)); + if (sa.hasParam("RepeatDefined")) { + list.addAll(AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("RepeatDefined"), sa)); } else { list = Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield); } @@ -105,14 +103,14 @@ public class RepeatEffect extends SpellEffect { } } - if (params.containsKey("RepeatCheckSVar")) { + if (sa.hasParam("RepeatCheckSVar")) { String sVarOperator = "GE"; String sVarOperand = "1"; - if (params.containsKey("RepeatSVarCompare")) { - sVarOperator = params.get("RepeatSVarCompare").substring(0, 2); - sVarOperand = params.get("RepeatSVarCompare").substring(2); + if (sa.hasParam("RepeatSVarCompare")) { + sVarOperator = sa.getParam("RepeatSVarCompare").substring(0, 2); + sVarOperand = sa.getParam("RepeatSVarCompare").substring(2); } - final int svarValue = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("RepeatCheckSVar"), sa); + final int svarValue = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("RepeatCheckSVar"), sa); final int operandValue = AbilityFactory.calculateAmount(sa.getSourceCard(), sVarOperand, sa); if (!Expressions.compare(svarValue, sVarOperator, operandValue)) { @@ -120,7 +118,7 @@ public class RepeatEffect extends SpellEffect { } } - if (params.containsKey("RepeatOptional")) { + if (sa.hasParam("RepeatOptional")) { if (sa.getActivatingPlayer().isComputer()) { //TODO add logic to have computer make better choice (ArsenalNut) return false; diff --git a/src/main/java/forge/card/abilityfactory/effects/RestartGameEffect.java b/src/main/java/forge/card/abilityfactory/effects/RestartGameEffect.java index c9192e32093..b951ffb3a46 100644 --- a/src/main/java/forge/card/abilityfactory/effects/RestartGameEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/RestartGameEffect.java @@ -23,7 +23,7 @@ public class RestartGameEffect extends SpellEffect { * @see forge.card.abilityfactory.AbilityFactoryAlterLife.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { GameState game = Singletons.getModel().getGame(); List players = game.getPlayers(); Map> playerLibraries = new HashMap>(); @@ -32,9 +32,9 @@ public class RestartGameEffect extends SpellEffect { List restartZones = new ArrayList(Arrays.asList(ZoneType.Battlefield, ZoneType.Library, ZoneType.Graveyard, ZoneType.Hand, ZoneType.Exile, ZoneType.Command)); - ZoneType leaveZone = ZoneType.smartValueOf(params.containsKey("RestrictFromZone") ? params.get("RestrictFromZone") : null); + ZoneType leaveZone = ZoneType.smartValueOf(sa.hasParam("RestrictFromZone") ? sa.getParam("RestrictFromZone") : null); restartZones.remove(leaveZone); - String leaveRestriction = params.containsKey("RestrictFromValid") ? params.get("RestrictFromValid") : "Card"; + String leaveRestriction = sa.hasParam("RestrictFromValid") ? sa.getParam("RestrictFromValid") : "Card"; for(Player p : players) { List newLibrary = new ArrayList(p.getCardsIn(restartZones)); @@ -55,8 +55,8 @@ public class RestartGameEffect extends SpellEffect { * @see forge.card.abilityfactory.AbilityFactoryAlterLife.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public String getStackDescription(Map params, SpellAbility sa) { - String desc = params.get("SpellDescription"); + public String getStackDescription(SpellAbility sa) { + String desc = sa.getParam("SpellDescription"); if (desc == null) { desc = "Restart the game."; diff --git a/src/main/java/forge/card/abilityfactory/effects/RevealEffect.java b/src/main/java/forge/card/abilityfactory/effects/RevealEffect.java index 2f8f5655f34..e12bf480e55 100644 --- a/src/main/java/forge/card/abilityfactory/effects/RevealEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/RevealEffect.java @@ -14,27 +14,27 @@ import forge.gui.GuiChoose; public class RevealEffect extends RevealEffectBase { @Override - public void resolve(java.util.Map params, SpellAbility sa) { - final Card host = sa.getAbilityFactory().getHostCard(); - final boolean anyNumber = params.containsKey("AnyNumber"); + public void resolve(SpellAbility sa) { + final Card host = sa.getSourceCard(); + final boolean anyNumber = sa.hasParam("AnyNumber"); final Target tgt = sa.getTarget(); - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getTargetPlayers(sa)) { if ((tgt == null) || p.canBeTargetedBy(sa)) { final List handChoices = p.getCardsIn(ZoneType.Hand); if (handChoices.size() > 0) { final List revealed = new ArrayList(); - if (params.containsKey("Random")) { + if (sa.hasParam("Random")) { revealed.add(CardUtil.getRandom(handChoices)); GuiChoose.oneOrNone("Revealed card(s)", revealed); } else { List valid = new ArrayList(handChoices); int max = 1; - if (params.containsKey("RevealValid")) { - valid = CardLists.getValidCards(valid, params.get("RevealValid"), p, host); + if (sa.hasParam("RevealValid")) { + valid = CardLists.getValidCards(valid, sa.getParam("RevealValid"), p, host); } - if (params.containsKey("AnyNumber")) { + if (sa.hasParam("AnyNumber")) { max = valid.size(); } revealed.addAll(getRevealedList(sa.getActivatingPlayer(), valid, max, anyNumber)); @@ -43,7 +43,7 @@ public class RevealEffect extends RevealEffectBase { } } - if (params.containsKey("RememberRevealed")) { + if (sa.hasParam("RememberRevealed")) { for (final Card rem : revealed) { host.addRemembered(rem); } @@ -55,19 +55,19 @@ public class RevealEffect extends RevealEffectBase { } @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); if (tgtPlayers.size() > 0) { sb.append(tgtPlayers.get(0)).append(" reveals "); - if (params.containsKey("AnyNumber")) { + if (sa.hasParam("AnyNumber")) { sb.append("any number of cards "); } else { sb.append("a card "); } - if (params.containsKey("Random")) { + if (sa.hasParam("Random")) { sb.append("at random "); } sb.append("from his or her hand."); diff --git a/src/main/java/forge/card/abilityfactory/effects/RevealHandEffect.java b/src/main/java/forge/card/abilityfactory/effects/RevealHandEffect.java index a926dca3a29..8a2aeaaf426 100644 --- a/src/main/java/forge/card/abilityfactory/effects/RevealHandEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/RevealHandEffect.java @@ -15,11 +15,11 @@ import forge.gui.GuiChoose; public class RevealHandEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); sb.append(sa.getActivatingPlayer()).append(" looks at "); @@ -37,12 +37,12 @@ public class RevealHandEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { - final Card host = sa.getAbilityFactory().getHostCard(); + public void resolve(SpellAbility sa) { + final Card host = sa.getSourceCard(); final Target tgt = sa.getTarget(); - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getTargetPlayers(sa)) { if ((tgt == null) || p.canBeTargetedBy(sa)) { final List hand = p.getCardsIn(ZoneType.Hand); if (sa.getActivatingPlayer().isHuman()) { @@ -58,7 +58,7 @@ public class RevealHandEffect extends SpellEffect { // reveal to Computer (when computer can keep track of seen // cards...) } - if (params.containsKey("RememberRevealed")) { + if (sa.hasParam("RememberRevealed")) { for (final Card c : hand) { host.addRemembered(c); } diff --git a/src/main/java/forge/card/abilityfactory/effects/SacrificeAllEffect.java b/src/main/java/forge/card/abilityfactory/effects/SacrificeAllEffect.java index 14aac2b480b..251172493ca 100644 --- a/src/main/java/forge/card/abilityfactory/effects/SacrificeAllEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/SacrificeAllEffect.java @@ -12,13 +12,13 @@ import forge.game.zone.ZoneType; public class SacrificeAllEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { // when getStackDesc is called, just build exactly what is happening final StringBuilder sb = new StringBuilder(); - final String conditionDesc = params.get("ConditionDescription"); + final String conditionDesc = sa.getParam("ConditionDescription"); if (conditionDesc != null) { sb.append(conditionDesc).append(" "); } @@ -29,7 +29,7 @@ public class SacrificeAllEffect extends SpellEffect { * Target tgt = af.getAbTgt(); if (tgt != null) tgtPlayers = * tgt.getTargetPlayers(); else tgtPlayers = * AbilityFactory.getDefinedPlayers(sa.getSourceCard(), - * params.get("Defined"), sa); + * sa.get("Defined"), sa); */ sb.append("Sacrifice permanents."); @@ -37,14 +37,14 @@ public class SacrificeAllEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card card = sa.getSourceCard(); String valid = ""; - if (params.containsKey("ValidCards")) { - valid = params.get("ValidCards"); + if (sa.hasParam("ValidCards")) { + valid = sa.getParam("ValidCards"); } // Ugh. If calculateAmount needs to be called with DestroyAll it _needs_ @@ -55,13 +55,13 @@ public class SacrificeAllEffect extends SpellEffect { } List list; - if (params.containsKey("Defined")) { - list = new ArrayList(AbilityFactory.getDefinedCards(sa.getAbilityFactory().getHostCard(), params.get("Defined"), sa)); + if (sa.hasParam("Defined")) { + list = new ArrayList(AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa)); } else { list = Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield); } - final boolean remSacrificed = params.containsKey("RememberSacrificed"); + final boolean remSacrificed = sa.hasParam("RememberSacrificed"); if (remSacrificed) { card.clearRemembered(); } diff --git a/src/main/java/forge/card/abilityfactory/effects/SacrificeEffect.java b/src/main/java/forge/card/abilityfactory/effects/SacrificeEffect.java index a7e059f22e7..9ba4d9b4c3e 100644 --- a/src/main/java/forge/card/abilityfactory/effects/SacrificeEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/SacrificeEffect.java @@ -17,28 +17,28 @@ import forge.gui.GuiChoose; public class SacrificeEffect extends SpellEffect { @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card card = sa.getSourceCard(); // Expand Sacrifice keyword here depending on what we need out of it. - final String num = params.containsKey("Amount") ? params.get("Amount") : "1"; + final String num = sa.hasParam("Amount") ? sa.getParam("Amount") : "1"; final int amount = AbilityFactory.calculateAmount(card, num, sa); - final List tgts = getTargetPlayers(sa, params); + final List tgts = getTargetPlayers(sa); - String valid = params.get("SacValid"); + String valid = sa.getParam("SacValid"); if (valid == null) { valid = "Self"; } - String msg = params.get("SacMessage"); + String msg = sa.getParam("SacMessage"); if (msg == null) { msg = valid; } msg = "Sacrifice a " + msg; - final boolean destroy = params.containsKey("Destroy"); - final boolean remSacrificed = params.containsKey("RememberSacrificed"); + final boolean destroy = sa.hasParam("Destroy"); + final boolean remSacrificed = sa.hasParam("RememberSacrificed"); if (valid.equals("Self")) { if (Singletons.getModel().getGame().getZoneOf(card).is(ZoneType.Battlefield)) { @@ -50,16 +50,16 @@ public class SacrificeEffect extends SpellEffect { else { List sacList = null; for (final Player p : tgts) { - if (params.containsKey("Random")) { + if (sa.hasParam("Random")) { sacList = sacrificeRandom(p, amount, valid, sa, destroy); } else if (p.isComputer()) { - if (params.containsKey("Optional") && sa.getActivatingPlayer().isHuman()) { + if (sa.hasParam("Optional") && sa.getActivatingPlayer().isHuman()) { continue; } sacList = sacrificeAI(p, amount, valid, sa, destroy); } else { sacList = sacrificeHuman(p, amount, valid, sa, destroy, - params.containsKey("Optional")); + sa.hasParam("Optional")); } if (remSacrificed) { for (int i = 0; i < sacList.size(); i++) { @@ -72,22 +72,22 @@ public class SacrificeEffect extends SpellEffect { } @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final String conditionDesc = params.get("ConditionDescription"); + final String conditionDesc = sa.getParam("ConditionDescription"); if (conditionDesc != null) { sb.append(conditionDesc).append(" "); } - final List tgts = getTargetPlayers(sa, params); + final List tgts = getTargetPlayers(sa); - String valid = params.get("SacValid"); + String valid = sa.getParam("SacValid"); if (valid == null) { valid = "Self"; } - String num = params.get("Amount"); + String num = sa.getParam("Amount"); num = (num == null) ? "1" : num; final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), num, sa); @@ -101,12 +101,12 @@ public class SacrificeEffect extends SpellEffect { sb.append(p.getName()).append(" "); } - String msg = params.get("SacMessage"); + String msg = sa.getParam("SacMessage"); if (msg == null) { msg = valid; } - if (params.containsKey("Destroy")) { + if (sa.hasParam("Destroy")) { sb.append("Destroys "); } else { sb.append("Sacrifices "); diff --git a/src/main/java/forge/card/abilityfactory/effects/ScryEffect.java b/src/main/java/forge/card/abilityfactory/effects/ScryEffect.java index 3faa6f8f6a7..f1318326d1f 100644 --- a/src/main/java/forge/card/abilityfactory/effects/ScryEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/ScryEffect.java @@ -11,18 +11,18 @@ import forge.game.player.Player; public class ScryEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); for (final Player p : tgtPlayers) { sb.append(p.toString()).append(" "); } int num = 1; - if (params.containsKey("ScryNum")) { - num = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("ScryNum"), sa); + if (sa.hasParam("ScryNum")) { + num = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("ScryNum"), sa); } sb.append("scrys (").append(num).append(")."); @@ -30,15 +30,15 @@ public class ScryEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { int num = 1; - if (params.containsKey("ScryNum")) { - num = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("ScryNum"), sa); + if (sa.hasParam("ScryNum")) { + num = AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("ScryNum"), sa); } final Target tgt = sa.getTarget(); - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); for (final Player p : tgtPlayers) { if ((tgt == null) || p.canBeTargetedBy(sa)) { diff --git a/src/main/java/forge/card/abilityfactory/effects/SetStateAllEffect.java b/src/main/java/forge/card/abilityfactory/effects/SetStateAllEffect.java index cec77f94bbc..2a76d6d7212 100644 --- a/src/main/java/forge/card/abilityfactory/effects/SetStateAllEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/SetStateAllEffect.java @@ -16,7 +16,7 @@ import forge.game.zone.ZoneType; public class SetStateAllEffect extends SpellEffect { @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card card = sa.getSourceCard(); @@ -28,8 +28,8 @@ public class SetStateAllEffect extends SpellEffect { String valid = ""; - if (params.containsKey("ValidCards")) { - valid = params.get("ValidCards"); + if (sa.hasParam("ValidCards")) { + valid = sa.getParam("ValidCards"); } // Ugh. If calculateAmount needs to be called with DestroyAll it _needs_ @@ -47,13 +47,13 @@ public class SetStateAllEffect extends SpellEffect { list = AbilityFactory.filterListByType(list, valid, sa); - final boolean remChanged = params.containsKey("RememberChanged"); + final boolean remChanged = sa.hasParam("RememberChanged"); if (remChanged) { card.clearRemembered(); } for (Card c : list) { - final String mode = params.get("Mode"); + final String mode = sa.getParam("Mode"); if (mode != null) { if (mode.equals("Transform")) { if (c.hasKeyword("CARDNAME can't transform")) { @@ -103,20 +103,20 @@ public class SetStateAllEffect extends SpellEffect { } } } else { - c.changeToState(CardCharacteristicName.smartValueOf(params.get("NewState"))); + c.changeToState(CardCharacteristicName.smartValueOf(sa.getParam("NewState"))); } } } @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - if (params.containsKey("Mode")) { - sb.append(params.get("Mode")); + if (sa.hasParam("Mode")) { + sb.append(sa.getParam("Mode")); } else { - sb.append(params.get("NewState")); + sb.append(sa.getParam("NewState")); } sb.append(" permanents."); diff --git a/src/main/java/forge/card/abilityfactory/effects/SetStateEffect.java b/src/main/java/forge/card/abilityfactory/effects/SetStateEffect.java index ae5cd8d8c15..46fd945cc1d 100644 --- a/src/main/java/forge/card/abilityfactory/effects/SetStateEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/SetStateEffect.java @@ -11,17 +11,17 @@ import forge.card.spellability.SpellAbility; public class SetStateEffect extends SpellEffect { @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final String conditionDesc = params.get("ConditionDescription"); + final String conditionDesc = sa.getParam("ConditionDescription"); if (conditionDesc != null) { sb.append(conditionDesc).append(" "); } - final List tgtCards = getTargetCards(sa, params); + final List tgtCards = getTargetCards(sa); - if (params.containsKey("Flip")) { + if (sa.hasParam("Flip")) { sb.append("Flip"); } else { sb.append("Transform "); @@ -45,12 +45,12 @@ public class SetStateEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { - final Card host = sa.getAbilityFactory().getHostCard(); - final List tgtCards = getTargetCards(sa, params); + final Card host = sa.getSourceCard(); + final List tgtCards = getTargetCards(sa); - final boolean remChanged = params.containsKey("RememberChanged"); + final boolean remChanged = sa.hasParam("RememberChanged"); for (final Card tgt : tgtCards) { if (sa.getTarget() != null) { @@ -59,7 +59,7 @@ public class SetStateEffect extends SpellEffect { } } - final String mode = params.get("Mode"); + final String mode = sa.getParam("Mode"); if (mode != null) { if (mode.equals("Transform")) { @@ -113,7 +113,7 @@ public class SetStateEffect extends SpellEffect { } } } else { - tgt.changeToState(CardCharacteristicName.smartValueOf(params.get("NewState"))); + tgt.changeToState(CardCharacteristicName.smartValueOf(sa.getParam("NewState"))); } } diff --git a/src/main/java/forge/card/abilityfactory/effects/ShuffleEffect.java b/src/main/java/forge/card/abilityfactory/effects/ShuffleEffect.java index d010bb672d5..8922bd30cdf 100644 --- a/src/main/java/forge/card/abilityfactory/effects/ShuffleEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/ShuffleEffect.java @@ -12,11 +12,11 @@ import forge.game.player.Player; public class ShuffleEffect extends SpellEffect { @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card host = sa.getSourceCard(); - final boolean optional = params.containsKey("Optional"); + final boolean optional = sa.hasParam("Optional"); - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); final Target tgt = sa.getTarget(); @@ -32,16 +32,16 @@ public class ShuffleEffect extends SpellEffect { } @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final String conditionDesc = params.get("ConditionDescription"); + final String conditionDesc = sa.getParam("ConditionDescription"); if (conditionDesc != null) { sb.append(conditionDesc).append(" "); } - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); if (tgtPlayers.size() > 0) { final Iterator it = tgtPlayers.iterator(); diff --git a/src/main/java/forge/card/abilityfactory/effects/StoreSVarEffect.java b/src/main/java/forge/card/abilityfactory/effects/StoreSVarEffect.java index 0fe0aea3352..fcc1b57f65b 100644 --- a/src/main/java/forge/card/abilityfactory/effects/StoreSVarEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/StoreSVarEffect.java @@ -8,7 +8,7 @@ import forge.card.spellability.SpellAbility; public class StoreSVarEffect extends SpellEffect { @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { //SVar$ OldToughness | Type$ Count | Expression$ CardToughness Card source = sa.getSourceCard(); @@ -16,16 +16,16 @@ public class StoreSVarEffect extends SpellEffect { String type = null; String expr = null; - if (params.containsKey("SVar")) { - key = params.get("SVar"); + if (sa.hasParam("SVar")) { + key = sa.getParam("SVar"); } - if (params.containsKey("Type")) { - type = params.get("Type"); + if (sa.hasParam("Type")) { + type = sa.getParam("Type"); } - if (params.containsKey("Expression")) { - expr = params.get("Expression"); + if (sa.hasParam("Expression")) { + expr = sa.getParam("Expression"); } if (key == null || type == null || expr == null) { diff --git a/src/main/java/forge/card/abilityfactory/effects/TapAllEffect.java b/src/main/java/forge/card/abilityfactory/effects/TapAllEffect.java index 96e52840d3a..af459c3e42a 100644 --- a/src/main/java/forge/card/abilityfactory/effects/TapAllEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/TapAllEffect.java @@ -2,7 +2,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.List; -import java.util.Map; import forge.Card; import forge.Singletons; @@ -19,25 +18,25 @@ public class TapAllEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { if (sa instanceof AbilitySub) { return "Tap all valid cards."; } else { - return params.get("SpellDescription"); + return sa.getParam("SpellDescription"); } } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card card = sa.getSourceCard(); - final boolean remTapped = params.containsKey("RememberTapped"); + final boolean remTapped = sa.hasParam("RememberTapped"); if (remTapped) { card.clearRemembered(); } List cards = null; - final List tgtPlayers = getTargetPlayersEmptyAsDefault(sa, params); + final List tgtPlayers = getTargetPlayersEmptyAsDefault(sa); if ((tgtPlayers == null) || tgtPlayers.isEmpty()) { cards = Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield); @@ -47,7 +46,7 @@ public class TapAllEffect extends SpellEffect { cards.addAll(p.getCardsIn(ZoneType.Battlefield)); } - cards = AbilityFactory.filterListByType(cards, params.get("ValidCards"), sa); + cards = AbilityFactory.filterListByType(cards, sa.getParam("ValidCards"), sa); for (final Card c : cards) { if (remTapped) { diff --git a/src/main/java/forge/card/abilityfactory/effects/TapEffect.java b/src/main/java/forge/card/abilityfactory/effects/TapEffect.java index 4ed612e6523..46b861857bc 100644 --- a/src/main/java/forge/card/abilityfactory/effects/TapEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/TapEffect.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.effects; import java.util.List; -import java.util.Map; import org.apache.commons.lang3.StringUtils; @@ -16,22 +15,22 @@ public class TapEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card card = sa.getSourceCard(); - final boolean remTapped = params.containsKey("RememberTapped"); + final boolean remTapped = sa.hasParam("RememberTapped"); if (remTapped) { card.clearRemembered(); } final Target tgt = sa.getTarget(); - final List tgtCards = getTargetCards(sa, params); + final List tgtCards = getTargetCards(sa); for (final Card tgtC : tgtCards) { if (tgt != null && !tgtC.canBeTargetedBy(sa)) { continue; } - if (params.containsKey("ETB") || tgtC.isInPlay()) { + if (sa.hasParam("ETB") || tgtC.isInPlay()) { if (tgtC.isUntapped() && (remTapped)) { card.addRemembered(tgtC); } @@ -41,11 +40,11 @@ public class TapEffect extends SpellEffect { } @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); sb.append("Tap "); - final List tgtCards = getTargetCards(sa, params); + final List tgtCards = getTargetCards(sa); sb.append(StringUtils.join(tgtCards, ", ")); sb.append("."); return sb.toString(); diff --git a/src/main/java/forge/card/abilityfactory/effects/TapOrUntapEffect.java b/src/main/java/forge/card/abilityfactory/effects/TapOrUntapEffect.java index d8cb0cb647b..8df5ce8463b 100644 --- a/src/main/java/forge/card/abilityfactory/effects/TapOrUntapEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/TapOrUntapEffect.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.effects; import java.util.List; -import java.util.Map; import org.apache.commons.lang3.StringUtils; @@ -17,22 +16,22 @@ public class TapOrUntapEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { // when getStackDesc is called, just build exactly what is happening final StringBuilder sb = new StringBuilder(); sb.append("Tap or untap "); - final List tgtCards = getTargetCards(sa, params); + final List tgtCards = getTargetCards(sa); sb.append(StringUtils.join(tgtCards, ", ")); sb.append("."); return sb.toString(); } @Override - public void resolve(java.util.Map params, SpellAbility sa) { - final List tgtCards = getTargetCards(sa, params); + public void resolve(SpellAbility sa) { + final List tgtCards = getTargetCards(sa); final Target tgt = sa.getTarget(); diff --git a/src/main/java/forge/card/abilityfactory/effects/TokenEffect.java b/src/main/java/forge/card/abilityfactory/effects/TokenEffect.java index 84989c63cfb..e8d0e108928 100644 --- a/src/main/java/forge/card/abilityfactory/effects/TokenEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/TokenEffect.java @@ -19,8 +19,6 @@ package forge.card.abilityfactory.effects; import java.util.Arrays; import java.util.List; -import java.util.Map; - import forge.Card; import forge.Singletons; @@ -50,68 +48,68 @@ public class TokenEffect extends SpellEffect { private String tokenName; private String[] tokenKeywords; - private void readParameters(final Map mapParams) { + private void readParameters(final SpellAbility mapParams) { String image; String[] keywords; - if (mapParams.containsKey("TokenKeywords")) { + if (mapParams.hasParam("TokenKeywords")) { // TODO: Change this Split to a semicolon or something else - keywords = mapParams.get("TokenKeywords").split("<>"); + keywords = mapParams.getParam("TokenKeywords").split("<>"); } else { keywords = new String[0]; } - if (mapParams.containsKey("TokenImage")) { - image = mapParams.get("TokenImage"); + if (mapParams.hasParam("TokenImage")) { + image = mapParams.getParam("TokenImage"); } else { image = ""; } - this.tokenTapped = mapParams.containsKey("TokenTapped") && mapParams.get("TokenTapped").equals("True"); - this.tokenAttacking = mapParams.containsKey("TokenAttacking") && mapParams.get("TokenAttacking").equals("True"); + this.tokenTapped = mapParams.hasParam("TokenTapped") && mapParams.getParam("TokenTapped").equals("True"); + this.tokenAttacking = mapParams.hasParam("TokenAttacking") && mapParams.getParam("TokenAttacking").equals("True"); - if (mapParams.containsKey("TokenAbilities")) { - this.tokenAbilities = mapParams.get("TokenAbilities").split(","); + if (mapParams.hasParam("TokenAbilities")) { + this.tokenAbilities = mapParams.getParam("TokenAbilities").split(","); } else { this.tokenAbilities = null; } - if (mapParams.containsKey("TokenTriggers")) { - this.tokenTriggers = mapParams.get("TokenTriggers").split(","); + if (mapParams.hasParam("TokenTriggers")) { + this.tokenTriggers = mapParams.getParam("TokenTriggers").split(","); } else { this.tokenTriggers = null; } - if (mapParams.containsKey("TokenSVars")) { - this.tokenSVars = mapParams.get("TokenSVars").split(","); + if (mapParams.hasParam("TokenSVars")) { + this.tokenSVars = mapParams.getParam("TokenSVars").split(","); } else { this.tokenSVars = null; } - if (mapParams.containsKey("TokenStaticAbilities")) { - this.tokenStaticAbilities = mapParams.get("TokenStaticAbilities").split(","); + if (mapParams.hasParam("TokenStaticAbilities")) { + this.tokenStaticAbilities = mapParams.getParam("TokenStaticAbilities").split(","); } else { this.tokenStaticAbilities = null; } - this.tokenAmount = mapParams.get("TokenAmount"); - this.tokenPower = mapParams.get("TokenPower"); - this.tokenToughness = mapParams.get("TokenToughness"); - this.tokenName = mapParams.get("TokenName"); - this.tokenTypes = mapParams.get("TokenTypes").split(","); - this.tokenColors = mapParams.get("TokenColors").split(","); + this.tokenAmount = mapParams.getParam("TokenAmount"); + this.tokenPower = mapParams.getParam("TokenPower"); + this.tokenToughness = mapParams.getParam("TokenToughness"); + this.tokenName = mapParams.getParam("TokenName"); + this.tokenTypes = mapParams.getParam("TokenTypes").split(","); + this.tokenColors = mapParams.getParam("TokenColors").split(","); this.tokenKeywords = keywords; this.tokenImage = image; - if (mapParams.containsKey("TokenOwner")) { - this.tokenOwner = mapParams.get("TokenOwner"); + if (mapParams.hasParam("TokenOwner")) { + this.tokenOwner = mapParams.getParam("TokenOwner"); } else { this.tokenOwner = "You"; } } @Override - protected String getStackDescription(java.util.Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); final Card host = sa.getSourceCard(); - readParameters(params); + readParameters(sa); final int finalPower = AbilityFactory.calculateAmount(host, this.tokenPower, sa); final int finalToughness = AbilityFactory.calculateAmount(host, this.tokenToughness, sa); @@ -136,9 +134,9 @@ public class TokenEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card host = sa.getSourceCard(); - readParameters(params); + readParameters(sa); String imageName = ""; Player controller; @@ -194,7 +192,7 @@ public class TokenEffect extends SpellEffect { } final String substitutedName = this.tokenName.equals("ChosenType") ? host.getChosenType() : this.tokenName; - final String remember = params.get("RememberTokens"); + final String remember = sa.getParam("RememberTokens"); for (int i = 0; i < finalAmount; i++) { final List tokens = CardFactoryUtil.makeToken(substitutedName, imageName, controller, cost, substitutedTypes, finalPower, finalToughness, this.tokenKeywords); @@ -263,7 +261,7 @@ public class TokenEffect extends SpellEffect { if (remember != null) { Singletons.getModel().getGame().getCardState(sa.getSourceCard()).addRemembered(c); } - if (params.get("RememberSource") != null) { + if (sa.getParam("RememberSource") != null) { Singletons.getModel().getGame().getCardState(c).addRemembered(host); } } diff --git a/src/main/java/forge/card/abilityfactory/effects/TwoPilesEffect.java b/src/main/java/forge/card/abilityfactory/effects/TwoPilesEffect.java index 144a66eccef..f03eb7d546f 100644 --- a/src/main/java/forge/card/abilityfactory/effects/TwoPilesEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/TwoPilesEffect.java @@ -2,8 +2,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.List; -import java.util.Map; - import javax.swing.JOptionPane; import forge.Card; @@ -28,14 +26,14 @@ public class TwoPilesEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); String valid = ""; - if (params.containsKey("ValidCards")) { - valid = params.get("ValidCards"); + if (sa.hasParam("ValidCards")) { + valid = sa.getParam("ValidCards"); } sb.append("Separate all ").append(valid).append(" cards "); @@ -51,31 +49,31 @@ public class TwoPilesEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card card = sa.getSourceCard(); ZoneType zone = null; boolean pile1WasChosen = true; - if (params.containsKey("Zone")) { - zone = ZoneType.smartValueOf(params.get("Zone")); + if (sa.hasParam("Zone")) { + zone = ZoneType.smartValueOf(sa.getParam("Zone")); } String valid = ""; - if (params.containsKey("ValidCards")) { - valid = params.get("ValidCards"); + if (sa.hasParam("ValidCards")) { + valid = sa.getParam("ValidCards"); } final Target tgt = sa.getTarget(); - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getTargetPlayers(sa); Player separator = card.getController(); - if (params.containsKey("Separator")) { - separator = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Separator"), sa).get(0); + if (sa.hasParam("Separator")) { + separator = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), sa.getParam("Separator"), sa).get(0); } Player chooser = tgtPlayers.get(0); - if (params.containsKey("Chooser")) { - chooser = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Chooser"), sa).get(0); + if (sa.hasParam("Chooser")) { + chooser = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), sa.getParam("Chooser"), sa).get(0); } for (final Player p : tgtPlayers) { @@ -83,8 +81,8 @@ public class TwoPilesEffect extends SpellEffect { final ArrayList pile1 = new ArrayList(); final ArrayList pile2 = new ArrayList(); List pool = new ArrayList(); - if (params.containsKey("DefinedCards")) { - pool = new ArrayList(AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("DefinedCards"), sa)); + if (sa.hasParam("DefinedCards")) { + pool = new ArrayList(AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("DefinedCards"), sa)); } else { pool = p.getCardsIn(zone); } @@ -134,12 +132,12 @@ public class TwoPilesEffect extends SpellEffect { System.out.println("Pile 2:" + pile2); card.clearRemembered(); - pile1WasChosen = selectPiles(params, sa, pile1, pile2, chooser, card, pool); + pile1WasChosen = selectPiles(sa, pile1, pile2, chooser, card, pool); // take action on the chosen pile - if (params.containsKey("ChosenPile")) { + if (sa.hasParam("ChosenPile")) { final AbilityFactory afPile = new AbilityFactory(); - final SpellAbility action = afPile.getAbility(card.getSVar(params.get("ChosenPile")), card); + final SpellAbility action = afPile.getAbility(card.getSVar(sa.getParam("ChosenPile")), card); action.setActivatingPlayer(sa.getActivatingPlayer()); ((AbilitySub) action).setParent(sa); @@ -147,7 +145,7 @@ public class TwoPilesEffect extends SpellEffect { } // take action on the chosen pile - if (params.containsKey("UnchosenPile")) { + if (sa.hasParam("UnchosenPile")) { //switch the remembered cards card.clearRemembered(); if (pile1WasChosen) { @@ -160,7 +158,7 @@ public class TwoPilesEffect extends SpellEffect { } } final AbilityFactory afPile = new AbilityFactory(); - final SpellAbility action = afPile.getAbility(card.getSVar(params.get("UnchosenPile")), card); + final SpellAbility action = afPile.getAbility(card.getSVar(sa.getParam("UnchosenPile")), card); action.setActivatingPlayer(sa.getActivatingPlayer()); ((AbilitySub) action).setParent(sa); @@ -170,12 +168,12 @@ public class TwoPilesEffect extends SpellEffect { } } // end twoPiles resolve - private boolean selectPiles(final Map params, final SpellAbility sa, ArrayList pile1, ArrayList pile2, + private boolean selectPiles(final SpellAbility sa, ArrayList pile1, ArrayList pile2, Player chooser, Card card, List pool) { boolean pile1WasChosen = true; // then, the chooser picks a pile - if (params.containsKey("FaceDown")) { + if (sa.hasParam("FaceDown")) { // Used for Phyrexian Portal, FaceDown Pile choosing if (chooser.isHuman()) { final String p1Str = String.format("Pile 1 (%s cards)", pile1.size()); diff --git a/src/main/java/forge/card/abilityfactory/effects/UnattachAllEffect.java b/src/main/java/forge/card/abilityfactory/effects/UnattachAllEffect.java index 1290d53f27d..4310bddc46e 100644 --- a/src/main/java/forge/card/abilityfactory/effects/UnattachAllEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/UnattachAllEffect.java @@ -1,7 +1,6 @@ package forge.card.abilityfactory.effects; import java.util.List; -import java.util.Map; import org.apache.commons.lang3.StringUtils; @@ -137,10 +136,10 @@ public class UnattachAllEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { final StringBuilder sb = new StringBuilder(); sb.append("Unattach all valid Equipment and Auras from "); - final List targets = getTargetObjects(sa, params); + final List targets = getTargetObjects(sa); sb.append(StringUtils.join(targets, " ")); return sb.toString(); } @@ -149,15 +148,15 @@ public class UnattachAllEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { Card source = sa.getSourceCard(); - final List targets = getTargetObjects(sa, params); + final List targets = getTargetObjects(sa); // If Cast Targets will be checked on the Stack for (final Object o : targets) { if (!( o instanceof GameEntity )) continue; - String valid = params.get("UnattachValid"); + String valid = sa.getParam("UnattachValid"); List unattachList = Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield); unattachList = CardLists.getValidCards(unattachList, valid.split(","), source.getController(), source); for (final Card c : unattachList) { diff --git a/src/main/java/forge/card/abilityfactory/effects/UntapAllEffect.java b/src/main/java/forge/card/abilityfactory/effects/UntapAllEffect.java index 97e44bd51ac..43ef4b6da31 100644 --- a/src/main/java/forge/card/abilityfactory/effects/UntapAllEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/UntapAllEffect.java @@ -2,7 +2,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.List; -import java.util.Map; import forge.Card; import forge.CardLists; @@ -19,25 +18,25 @@ public class UntapAllEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { if (sa instanceof AbilitySub) { return "Untap all valid cards."; } else { - return params.get("SpellDescription"); + return sa.getParam("SpellDescription"); } } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Card card = sa.getSourceCard(); String valid = ""; List list = null; - List tgtPlayers = getTargetPlayersEmptyAsDefault(sa, params); + List tgtPlayers = getTargetPlayersEmptyAsDefault(sa); - if (params.containsKey("ValidCards")) { - valid = params.get("ValidCards"); + if (sa.hasParam("ValidCards")) { + valid = sa.getParam("ValidCards"); } if (tgtPlayers.isEmpty()) { @@ -49,7 +48,7 @@ public class UntapAllEffect extends SpellEffect { } list = CardLists.getValidCards(list, valid.split(","), card.getController(), card); - boolean remember = params.containsKey("RememberUntapped"); + boolean remember = sa.hasParam("RememberUntapped"); for(Card c : list) { c.untap(); if (remember) { diff --git a/src/main/java/forge/card/abilityfactory/effects/UntapEffect.java b/src/main/java/forge/card/abilityfactory/effects/UntapEffect.java index 46f04829c37..f05160e2452 100644 --- a/src/main/java/forge/card/abilityfactory/effects/UntapEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/UntapEffect.java @@ -2,8 +2,6 @@ package forge.card.abilityfactory.effects; import java.util.ArrayList; import java.util.List; -import java.util.Map; - import org.apache.commons.lang3.StringUtils; import forge.Card; @@ -24,17 +22,17 @@ public class UntapEffect extends SpellEffect { * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(Map params, SpellAbility sa) { + protected String getStackDescription(SpellAbility sa) { // when getStackDesc is called, just build exactly what is happening final StringBuilder sb = new StringBuilder(); sb.append("Untap "); - if (params.containsKey("UntapUpTo")) { - sb.append("up to ").append(params.get("Amount")).append(" "); - sb.append(params.get("UntapType")).append("s"); + if (sa.hasParam("UntapUpTo")) { + sb.append("up to ").append(sa.getParam("Amount")).append(" "); + sb.append(sa.getParam("UntapType")).append("s"); } else { - List tgtCards = getTargetCards(sa, params); + List tgtCards = getTargetCards(sa); sb.append(StringUtils.join(tgtCards, ", ")); } sb.append("."); @@ -42,14 +40,14 @@ public class UntapEffect extends SpellEffect { } @Override - public void resolve(java.util.Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { final Target tgt = sa.getTarget(); - if (params.containsKey("UntapUpTo")) { - untapChooseUpTo(sa, params); + if (sa.hasParam("UntapUpTo")) { + untapChooseUpTo(sa); } else { - final List tgtCards = getTargetCards(sa, params); + final List tgtCards = getTargetCards(sa); for (final Card tgtC : tgtCards) { if (tgtC.isInPlay() && ((tgt == null) || tgtC.canBeTargetedBy(sa))) { @@ -68,15 +66,15 @@ public class UntapEffect extends SpellEffect { * a {@link forge.card.abilityfactory.AbilityFactory} object. * @param sa * a {@link forge.card.spellability.SpellAbility} object. - * @param params + * @param sa * a {@link java.util.HashMap} object. */ - private void untapChooseUpTo(final SpellAbility sa, final Map params) { - final int num = Integer.parseInt(params.get("Amount")); - final String valid = params.get("UntapType"); + private void untapChooseUpTo(final SpellAbility sa) { + final int num = Integer.parseInt(sa.getParam("Amount")); + final String valid = sa.getParam("UntapType"); final ArrayList definedPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), - params.get("Defined"), sa); + sa.getParam("Defined"), sa); for (final Player p : definedPlayers) { if (p.isHuman()) { diff --git a/src/main/java/forge/card/cardfactory/CardFactory.java b/src/main/java/forge/card/cardfactory/CardFactory.java index c4bccaf0b3c..81271656516 100644 --- a/src/main/java/forge/card/cardfactory/CardFactory.java +++ b/src/main/java/forge/card/cardfactory/CardFactory.java @@ -21,8 +21,6 @@ import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Map; - import forge.Card; import forge.CardCharacteristicName; import forge.CardUtil; @@ -160,21 +158,18 @@ public class CardFactory implements CardFactoryInterface { // change the color of the copy (eg: Fork) // Currently won't work for abilities, only for spells - if (null != source.getFirstSpellAbility() && null != source.getFirstSpellAbility().getAbilityFactory()) { - final SpellAbility sourceSA = source.getFirstSpellAbility(); - if (sourceSA.getAbilityFactory().getMapParams().containsKey("CopyIsColor")) { - String tmp = ""; - final Map params = sourceSA.getAbilityFactory().getMapParams(); - final String newColor = params.get("CopyIsColor"); - if (newColor.equals("ChosenColor")) { - tmp = CardUtil.getShortColorsString(source.getChosenColor()); - } else { - tmp = CardUtil.getShortColorsString(new ArrayList(Arrays.asList(newColor.split(",")))); - } - final String finalColors = tmp; - - c.addColor(finalColors, c, !params.containsKey("OverwriteColors"), true); + final SpellAbility sourceSA = source.getFirstSpellAbility(); + if (null != sourceSA && sourceSA.hasParam("CopyIsColor")) { + String tmp = ""; + final String newColor = sourceSA.getParam("CopyIsColor"); + if (newColor.equals("ChosenColor")) { + tmp = CardUtil.getShortColorsString(source.getChosenColor()); + } else { + tmp = CardUtil.getShortColorsString(new ArrayList(Arrays.asList(newColor.split(",")))); } + final String finalColors = tmp; + + c.addColor(finalColors, c, !sourceSA.hasParam("OverwriteColors"), true); } c.addController(controller); diff --git a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java index ec63ceabf33..4b9b290acc6 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java @@ -3600,9 +3600,7 @@ public class CardFactoryUtil { 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()); } @@ -3621,12 +3619,8 @@ public class CardFactoryUtil { 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); } } @@ -3646,7 +3640,7 @@ public class CardFactoryUtil { final AbilityFactory af = new AbilityFactory(); // System.out.println(cardName); final SpellAbility sa = af.getAbility(ia.get(i), card); - if (sa.getAbilityFactory().getMapParams().containsKey("SetAsKicked")) { + if (sa.hasParam("SetAsKicked")) { sa.addOptionalAdditionalCosts("Kicker"); } card.addSpellAbility(sa); @@ -4376,12 +4370,12 @@ public class CardFactoryUtil { class ETBReplacementEffect extends SpellEffect { @Override - public void resolve(Map params, SpellAbility sa) { + public void resolve(SpellAbility sa) { forge.Singletons.getModel().getGame().getAction().moveToPlay(((Card) sa.getReplacingObject("Card"))); } } - tailend.setSubAbility(new CommonDrawback(sa.getSourceCard(), null, null, new ETBReplacementEffect(), new CanPlayAsDrawbackAi())); + tailend.setSubAbility(new CommonDrawback(null, sa.getSourceCard(), null, null, new ETBReplacementEffect(), new CanPlayAsDrawbackAi())); // ETBReplacementMove(sa.getSourceCard(), null)); } diff --git a/src/main/java/forge/card/spellability/AbilityActivated.java b/src/main/java/forge/card/spellability/AbilityActivated.java index 114a210ace2..26a3c45f0ca 100644 --- a/src/main/java/forge/card/spellability/AbilityActivated.java +++ b/src/main/java/forge/card/spellability/AbilityActivated.java @@ -81,7 +81,7 @@ public abstract class AbilityActivated extends SpellAbility implements java.io.S /** {@inheritDoc} */ @Override public boolean canPlay() { - if (Singletons.getModel().getGame().getStack().isSplitSecondOnStack()) { + if (Singletons.getModel().getGame().getStack().isSplitSecondOnStack() && null == this.getManaPart()) { return false; } diff --git a/src/main/java/forge/card/spellability/Spell.java b/src/main/java/forge/card/spellability/Spell.java index 1abd906a424..544b966cf91 100644 --- a/src/main/java/forge/card/spellability/Spell.java +++ b/src/main/java/forge/card/spellability/Spell.java @@ -90,7 +90,7 @@ public abstract class Spell extends SpellAbility implements java.io.Serializable /** {@inheritDoc} */ @Override public boolean canPlay() { - if (Singletons.getModel().getGame().getStack().isSplitSecondOnStack()) { + if (Singletons.getModel().getGame().getStack().isSplitSecondOnStack() && null == this.getManaPart()) { return false; } diff --git a/src/main/java/forge/card/spellability/SpellAbility.java b/src/main/java/forge/card/spellability/SpellAbility.java index 09db36ef58d..310efc67555 100644 --- a/src/main/java/forge/card/spellability/SpellAbility.java +++ b/src/main/java/forge/card/spellability/SpellAbility.java @@ -20,6 +20,7 @@ package forge.card.spellability; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; import forge.Card; @@ -29,6 +30,7 @@ import forge.GameEntity; import forge.Singletons; import forge.card.CardManaCost; import forge.card.abilityfactory.AbilityFactory; +import forge.card.abilityfactory.ApiType; import forge.card.cost.Cost; import forge.card.mana.Mana; import forge.control.input.Input; @@ -103,7 +105,8 @@ public abstract class SpellAbility { private SpellAbilityCondition conditions = new SpellAbilityCondition(); private AbilitySub subAbility = null; - private AbilityFactory abilityFactory = null; + protected Map params = null; + protected ApiType api = null; private final ArrayList payingMana = new ArrayList(); private final List paidAbilities = new ArrayList(); @@ -570,6 +573,31 @@ public abstract class SpellAbility { return this.originalHost; } + public String getParam(String key) { + return params == null ? null : params.get(key); + } + public boolean hasParam(String key) { + return params == null ? false: params.containsKey(key); + } + + /** + * TODO: Write javadoc for this method. + * @param mapParams + */ + public void copyParamsToMap(Map mapParams) { + if ( null != params ) + mapParams.putAll(params); + } + + // If this is not null, then ability was made in a factory + public final ApiType getApi() { + return api; + } + + public final boolean isCurse() { + return this.hasParam("IsCurse"); + } + /** *

* Getter for the field beforePayManaAI. @@ -747,29 +775,6 @@ public abstract class SpellAbility { return this.conditions; } - /** - *

- * Setter for the field abilityFactory. - *

- * - * @param af - * a {@link forge.card.abilityfactory.AbilityFactory} object. - */ - public void setAbilityFactory(final AbilityFactory af) { - this.abilityFactory = af; - } - - /** - *

- * Getter for the field abilityFactory. - *

- * - * @return a {@link forge.card.abilityfactory.AbilityFactory} object. - */ - public AbilityFactory getAbilityFactory() { - return this.abilityFactory; - } - /** *

* Getter for the field payingMana. @@ -1835,5 +1840,7 @@ public abstract class SpellAbility { parent = parent.getParent(); } return parent; - } + } + + } diff --git a/src/main/java/forge/card/staticability/StaticAbility.java b/src/main/java/forge/card/staticability/StaticAbility.java index b7c5b7531c8..ad17a439e0d 100644 --- a/src/main/java/forge/card/staticability/StaticAbility.java +++ b/src/main/java/forge/card/staticability/StaticAbility.java @@ -40,7 +40,7 @@ public class StaticAbility { private Card hostCard = null; - private HashMap mapParams = new HashMap(); + private HashMap params = new HashMap(); private int layer = 0; @@ -69,7 +69,7 @@ public class StaticAbility { * @return a {@link java.util.HashMap} object. */ public final HashMap getMapParams() { - return this.mapParams; + return this.params; } // ******************************************************* @@ -132,37 +132,37 @@ public class StaticAbility { */ public final int generateLayer() { - if (!this.mapParams.get("Mode").equals("Continuous")) { + if (!this.params.get("Mode").equals("Continuous")) { return 0; } - if (this.mapParams.containsKey("AddType") || this.mapParams.containsKey("RemoveType") - || this.mapParams.containsKey("RemoveCardType") || this.mapParams.containsKey("RemoveSubType") - || this.mapParams.containsKey("RemoveSuperType")) { + if (this.params.containsKey("AddType") || this.params.containsKey("RemoveType") + || this.params.containsKey("RemoveCardType") || this.params.containsKey("RemoveSubType") + || this.params.containsKey("RemoveSuperType")) { return 4; } - if (this.mapParams.containsKey("AddColor") || this.mapParams.containsKey("RemoveColor") - || this.mapParams.containsKey("SetColor")) { + if (this.params.containsKey("AddColor") || this.params.containsKey("RemoveColor") + || this.params.containsKey("SetColor")) { return 5; } - if (this.mapParams.containsKey("RemoveAllAbilities") || this.mapParams.containsKey("GainsAbilitiesOf")) { + if (this.params.containsKey("RemoveAllAbilities") || this.params.containsKey("GainsAbilitiesOf")) { return 6; // Layer 6 } - if (this.mapParams.containsKey("AddKeyword") || this.mapParams.containsKey("AddAbility") - || this.mapParams.containsKey("AddTrigger") || this.mapParams.containsKey("RemoveTriggers") - || this.mapParams.containsKey("RemoveKeyword")) { + if (this.params.containsKey("AddKeyword") || this.params.containsKey("AddAbility") + || this.params.containsKey("AddTrigger") || this.params.containsKey("RemoveTriggers") + || this.params.containsKey("RemoveKeyword")) { return 7; // Layer 6 (dependent) } - if (this.mapParams.containsKey("CharacteristicDefining")) { + if (this.params.containsKey("CharacteristicDefining")) { return 8; // Layer 7a } - if (this.mapParams.containsKey("AddPower") || this.mapParams.containsKey("AddToughness") - || this.mapParams.containsKey("SetPower") || this.mapParams.containsKey("SetToughness")) { + if (this.params.containsKey("AddPower") || this.params.containsKey("AddToughness") + || this.params.containsKey("SetPower") || this.params.containsKey("SetToughness")) { return 9; // This is the collection of 7b and 7c } @@ -178,8 +178,8 @@ public class StaticAbility { */ @Override public final String toString() { - if (this.mapParams.containsKey("Description") && !this.isSuppressed()) { - return this.mapParams.get("Description").replace("CARDNAME", this.hostCard.getName()); + if (this.params.containsKey("Description") && !this.isSuppressed()) { + return this.params.get("Description").replace("CARDNAME", this.hostCard.getName()); } else { return ""; } @@ -195,7 +195,7 @@ public class StaticAbility { * the host */ public StaticAbility(final String params, final Card host) { - this.mapParams = this.getMapParams(params, host); + this.params = this.getMapParams(params, host); this.hostCard = host; this.layer = this.generateLayer(); } @@ -209,9 +209,9 @@ public class StaticAbility { * the host */ public StaticAbility(final HashMap params, final Card host) { - this.mapParams = new HashMap(); + this.params = new HashMap(); for (final Map.Entry entry : params.entrySet()) { - this.mapParams.put(entry.getKey(), entry.getValue()); + this.params.put(entry.getKey(), entry.getValue()); } this.layer = this.generateLayer(); this.hostCard = host; @@ -227,7 +227,7 @@ public class StaticAbility { public final void applyAbility(final String mode) { // don't apply the ability if it hasn't got the right mode - if (!this.mapParams.get("Mode").equals(mode)) { + if (!this.params.get("Mode").equals(mode)) { return; } @@ -260,7 +260,7 @@ public class StaticAbility { final boolean b) { // don't apply the ability if it hasn't got the right mode - if (!this.mapParams.get("Mode").equals(mode)) { + if (!this.params.get("Mode").equals(mode)) { return in; } @@ -290,7 +290,7 @@ public class StaticAbility { public final boolean applyAbility(final String mode, final Card card, final Player activator) { // don't apply the ability if it hasn't got the right mode - if (!this.mapParams.get("Mode").equals(mode)) { + if (!this.params.get("Mode").equals(mode)) { return false; } @@ -323,7 +323,7 @@ public class StaticAbility { public final boolean applyAbility(final String mode, final Card card, final SpellAbility spellAbility) { // don't apply the ability if it hasn't got the right mode - if (!this.mapParams.get("Mode").equals(mode)) { + if (!this.params.get("Mode").equals(mode)) { return false; } @@ -356,7 +356,7 @@ public class StaticAbility { public final ManaCost applyAbility(final String mode, final SpellAbility sa, final ManaCost originalCost) { // don't apply the ability if it hasn't got the right mode - if (!this.mapParams.get("Mode").equals(mode)) { + if (!this.params.get("Mode").equals(mode)) { return originalCost; } @@ -389,7 +389,7 @@ public class StaticAbility { public final boolean applyAbility(final String mode, final Card card) { // don't apply the ability if it hasn't got the right mode - if (!this.mapParams.get("Mode").equals(mode)) { + if (!this.params.get("Mode").equals(mode)) { return false; } @@ -422,7 +422,7 @@ public class StaticAbility { public final boolean applyAbility(final String mode, final Card card, final GameEntity target) { // don't apply the ability if it hasn't got the right mode - if (!this.mapParams.get("Mode").equals(mode)) { + if (!this.params.get("Mode").equals(mode)) { return false; } @@ -451,7 +451,7 @@ public class StaticAbility { public final Cost getCostAbility(final String mode, final Card card, final GameEntity target) { // don't apply the ability if it hasn't got the right mode - if (!this.mapParams.get("Mode").equals(mode)) { + if (!this.params.get("Mode").equals(mode)) { return null; } @@ -482,9 +482,9 @@ public class StaticAbility { return false; } - if (this.mapParams.containsKey("EffectZone")) { - if (!this.mapParams.get("EffectZone").equals("All") - && !ZoneType.listValueOf(this.mapParams.get("EffectZone")) + if (this.params.containsKey("EffectZone")) { + if (!this.params.get("EffectZone").equals("All") + && !ZoneType.listValueOf(this.params.get("EffectZone")) .contains(Singletons.getModel().getGame().getZoneOf(this.hostCard).getZoneType())) { return false; } @@ -494,48 +494,48 @@ public class StaticAbility { } } - if (this.mapParams.containsKey("FatefulHour") && controller.getLife() > 5) { + if (this.params.containsKey("FatefulHour") && controller.getLife() > 5) { return false; } - if (this.mapParams.containsKey("Threshold") && !controller.hasThreshold()) { + if (this.params.containsKey("Threshold") && !controller.hasThreshold()) { return false; } - if (this.mapParams.containsKey("Hellbent") && !controller.hasHellbent()) { + if (this.params.containsKey("Hellbent") && !controller.hasHellbent()) { return false; } - if (this.mapParams.containsKey("Metalcraft") && !controller.hasMetalcraft()) { + if (this.params.containsKey("Metalcraft") && !controller.hasMetalcraft()) { return false; } - if (this.mapParams.containsKey("PlayerTurn") && !Singletons.getModel().getGame().getPhaseHandler().isPlayerTurn(controller)) { + if (this.params.containsKey("PlayerTurn") && !Singletons.getModel().getGame().getPhaseHandler().isPlayerTurn(controller)) { return false; } - if (this.mapParams.containsKey("OpponentTurn") && !Singletons.getModel().getGame().getPhaseHandler().isPlayerTurn(controller.getOpponent())) { + if (this.params.containsKey("OpponentTurn") && !Singletons.getModel().getGame().getPhaseHandler().isPlayerTurn(controller.getOpponent())) { return false; } - if (this.mapParams.containsKey("OpponentAttackedWithCreatureThisTurn") + if (this.params.containsKey("OpponentAttackedWithCreatureThisTurn") && !controller.getOpponent().getAttackedWithCreatureThisTurn()) { return false; } - if (this.mapParams.containsKey("Phases")) { - List phases = PhaseType.parseRange(this.mapParams.get("Phases")); + if (this.params.containsKey("Phases")) { + List phases = PhaseType.parseRange(this.params.get("Phases")); if (!phases.contains(Singletons.getModel().getGame().getPhaseHandler().getPhase())) { return false; } } - if (this.mapParams.containsKey("TopCardOfLibraryIs")) { + if (this.params.containsKey("TopCardOfLibraryIs")) { if (controller.getCardsIn(ZoneType.Library).isEmpty()) { return false; } final Card topCard = controller.getCardsIn(ZoneType.Library).get(0); - if (!topCard.isValid(this.mapParams.get("TopCardOfLibraryIs").split(","), controller, this.hostCard)) { + if (!topCard.isValid(this.params.get("TopCardOfLibraryIs").split(","), controller, this.hostCard)) { return false; } } @@ -551,11 +551,11 @@ public class StaticAbility { * } */ - if (this.mapParams.containsKey("CheckSVar")) { - final int sVar = AbilityFactory.calculateAmount(this.hostCard, this.mapParams.get("CheckSVar"), null); + if (this.params.containsKey("CheckSVar")) { + final int sVar = AbilityFactory.calculateAmount(this.hostCard, this.params.get("CheckSVar"), null); String comparator = "GE1"; - if (this.mapParams.containsKey("SVarCompare")) { - comparator = this.mapParams.get("SVarCompare"); + if (this.params.containsKey("SVarCompare")) { + comparator = this.params.get("SVarCompare"); } final String svarOperator = comparator.substring(0, 2); final String svarOperand = comparator.substring(2); @@ -565,11 +565,11 @@ public class StaticAbility { } } - if (this.mapParams.containsKey("CheckSecondSVar")) { - final int sVar = AbilityFactory.calculateAmount(this.hostCard, this.mapParams.get("CheckSecondSVar"), null); + if (this.params.containsKey("CheckSecondSVar")) { + final int sVar = AbilityFactory.calculateAmount(this.hostCard, this.params.get("CheckSecondSVar"), null); String comparator = "GE1"; - if (this.mapParams.containsKey("SecondSVarCompare")) { - comparator = this.mapParams.get("SecondSVarCompare"); + if (this.params.containsKey("SecondSVarCompare")) { + comparator = this.params.get("SecondSVarCompare"); } final String svarOperator = comparator.substring(0, 2); final String svarOperand = comparator.substring(2); @@ -579,11 +579,11 @@ public class StaticAbility { } } - if (this.mapParams.containsKey("CheckThirdSVar")) { - final int sVar = AbilityFactory.calculateAmount(this.hostCard, this.mapParams.get("CheckThirdSVar"), null); + if (this.params.containsKey("CheckThirdSVar")) { + final int sVar = AbilityFactory.calculateAmount(this.hostCard, this.params.get("CheckThirdSVar"), null); String comparator = "GE1"; - if (this.mapParams.containsKey("ThirdSVarCompare")) { - comparator = this.mapParams.get("ThirdSVarCompare"); + if (this.params.containsKey("ThirdSVarCompare")) { + comparator = this.params.get("ThirdSVarCompare"); } final String svarOperator = comparator.substring(0, 2); final String svarOperand = comparator.substring(2); @@ -593,11 +593,11 @@ public class StaticAbility { } } - if (this.mapParams.containsKey("CheckFourthSVar")) { - final int sVar = AbilityFactory.calculateAmount(this.hostCard, this.mapParams.get("CheckFourthSVar"), null); + if (this.params.containsKey("CheckFourthSVar")) { + final int sVar = AbilityFactory.calculateAmount(this.hostCard, this.params.get("CheckFourthSVar"), null); String comparator = "GE1"; - if (this.mapParams.containsKey("FourthSVarCompare")) { - comparator = this.mapParams.get("FourthSVarCompare"); + if (this.params.containsKey("FourthSVarCompare")) { + comparator = this.params.get("FourthSVarCompare"); } final String svarOperator = comparator.substring(0, 2); final String svarOperand = comparator.substring(2); diff --git a/src/main/java/forge/card/trigger/TriggerHandler.java b/src/main/java/forge/card/trigger/TriggerHandler.java index 62472d1b94f..29e1030d338 100644 --- a/src/main/java/forge/card/trigger/TriggerHandler.java +++ b/src/main/java/forge/card/trigger/TriggerHandler.java @@ -388,7 +388,7 @@ public class TriggerHandler { * @return false if trigger is not happening. */ private boolean runSingleTrigger(final Trigger regtrig, final TriggerType mode, final Map runParams) { - final Map params = regtrig.getMapParams(); + final Map triggerParams = regtrig.getMapParams(); if (regtrig.getMode() != mode) { return false; // Not the right mode. @@ -463,14 +463,14 @@ public class TriggerHandler { sa[0] = regtrig.getOverridingAbility(); if (sa[0] == null) { - if (!params.containsKey("Execute")) { + if (!triggerParams.containsKey("Execute")) { sa[0] = new Ability(regtrig.getHostCard(), "0") { @Override public void resolve() { } }; } else { - sa[0] = abilityFactory.getAbility(host.getSVar(params.get("Execute")), host); + sa[0] = abilityFactory.getAbility(host.getSVar(triggerParams.get("Execute")), host); } } sa[0].setTrigger(true); @@ -482,24 +482,23 @@ public class TriggerHandler { controller[0] = host.getController(); sa[0].setActivatingPlayer(host.getController()); - if (params.containsKey("TriggerController")) { - Player p = AbilityFactory.getDefinedPlayers(regtrig.getHostCard(), params.get("TriggerController"), sa[0]).get(0); + if (triggerParams.containsKey("TriggerController")) { + Player p = AbilityFactory.getDefinedPlayers(regtrig.getHostCard(), triggerParams.get("TriggerController"), sa[0]).get(0); controller[0] = p; sa[0].setActivatingPlayer(p); } sa[0].setStackDescription(sa[0].toString()); // ---TODO - for Charms to supports AI, this needs to be removed //if (sa[0].getActivatingPlayer().isHuman()) { - final AbilityFactory af = sa[0].getAbilityFactory(); - if (af != null && af.getAPI() == ApiType.Charm && !sa[0].isWrapper()) { + if (sa[0].getApi() == ApiType.Charm && !sa[0].isWrapper()) { CharmEffect.makeChoices(sa[0]); } //} boolean mand = false; - if (params.containsKey("OptionalDecider")) { + if (triggerParams.containsKey("OptionalDecider")) { sa[0].setOptionalTrigger(true); mand = false; - decider[0] = AbilityFactory.getDefinedPlayers(host, params.get("OptionalDecider"), sa[0]).get(0); + decider[0] = AbilityFactory.getDefinedPlayers(host, triggerParams.get("OptionalDecider"), sa[0]).get(0); } else { mand = true; @@ -608,11 +607,6 @@ public class TriggerHandler { return sa[0].doTrigger(mandatory); } - @Override - public AbilityFactory getAbilityFactory() { - return sa[0].getAbilityFactory(); - } - @Override public Player getActivatingPlayer() { return sa[0].getActivatingPlayer(); @@ -779,11 +773,6 @@ public class TriggerHandler { // sa[0].resetOnceResolved(); } - @Override - public void setAbilityFactory(final AbilityFactory af) { - sa[0].setAbilityFactory(af); - } - @Override public void setActivatingPlayer(final Player player) { sa[0].setActivatingPlayer(player); @@ -960,7 +949,7 @@ public class TriggerHandler { buildQuestion.append(regtrig.getHostCard().getName()).append("(") .append(regtrig.getHostCard().getUniqueNumber()).append(")?"); buildQuestion.append("\r\n("); - buildQuestion.append(params.get("TriggerDescription").replace("CARDNAME", + buildQuestion.append(triggerParams.get("TriggerDescription").replace("CARDNAME", regtrig.getHostCard().getName())); buildQuestion.append(")\r\n"); if (sa[0].getTriggeringObjects().containsKey("Attacker")) { @@ -1000,8 +989,8 @@ public class TriggerHandler { } // Add eventual delayed trigger. - if (params.containsKey("DelayedTrigger")) { - final String sVarName = params.get("DelayedTrigger"); + if (triggerParams.containsKey("DelayedTrigger")) { + final String sVarName = triggerParams.get("DelayedTrigger"); final Trigger deltrig = TriggerHandler.parseTrigger(regtrig.getHostCard().getSVar(sVarName), regtrig.getHostCard(), true); deltrig.setStoredTriggeredObjects(this.getTriggeringObjects()); diff --git a/src/main/java/forge/control/input/InputPayManaCostUtil.java b/src/main/java/forge/control/input/InputPayManaCostUtil.java index dc422d3de87..60322b2de47 100644 --- a/src/main/java/forge/control/input/InputPayManaCostUtil.java +++ b/src/main/java/forge/control/input/InputPayManaCostUtil.java @@ -93,7 +93,7 @@ public class InputPayManaCostUtil { AbilityManaPart m = ma.getManaPart(); if (!ma.canPlay()) { continue; - } else if (!InputPayManaCostUtil.canMake(ma, ma.getAbilityFactory().getMapParams(), cneeded.toString())) { + } else if (!InputPayManaCostUtil.canMake(ma, cneeded.toString())) { continue; } else if (AbilityFactory.isInstantSpeed(ma)) { continue; @@ -156,8 +156,7 @@ public class InputPayManaCostUtil { for (final AbilityActivated am : abilities) { AbilityManaPart m = am.getManaPart(); if (m.isReflectedMana()) { - final List reflectableColors = CardUtil.getReflectableManaColors(am, - am.getAbilityFactory().getMapParams(), new ArrayList(), new ArrayList()); + final List reflectableColors = CardUtil.getReflectableManaColors(am, am, new ArrayList(), new ArrayList()); for (final String color : reflectableColors) { if (manaCost.isColor(color)) { // checking if color @@ -247,7 +246,7 @@ public class InputPayManaCostUtil { * a {@link java.lang.String} object. * @return a boolean. */ - public static boolean canMake(final AbilityActivated am, final Map params, final String mana) { + public static boolean canMake(final AbilityActivated am, final String mana) { if (mana.contains("1")) { return true; } @@ -259,7 +258,7 @@ public class InputPayManaCostUtil { return true; } if (m.isReflectedMana()) { - final List reflectableColors = CardUtil.getReflectableManaColors(am, params, new ArrayList(), new ArrayList()); + final List reflectableColors = CardUtil.getReflectableManaColors(am, am, new ArrayList(), new ArrayList()); for (final String color : reflectableColors) { if (mana.contains(InputPayManaCostUtil.getShortColorString(color))) { return true; diff --git a/src/main/java/forge/game/phase/CombatUtil.java b/src/main/java/forge/game/phase/CombatUtil.java index 5a604941529..85dd20c5f84 100644 --- a/src/main/java/forge/game/phase/CombatUtil.java +++ b/src/main/java/forge/game/phase/CombatUtil.java @@ -1690,22 +1690,19 @@ public class CombatUtil { return power; } for (SpellAbility ability : defender.getAllSpellAbilities()) { - if (!(ability instanceof AbilityActivated) || ability.getAbilityFactory() == null - || ability.getPayCosts() == null) { + if (!(ability instanceof AbilityActivated) || ability.getPayCosts() == null) { + continue; + } + if (ability.getApi() != ApiType.Pump) { continue; } - AbilityFactory af = ability.getAbilityFactory(); - if (af.getAPI() != ApiType.Pump) { - continue; - } - Map params = af.getMapParams(); - if (!params.containsKey("NumAtt")) { + if (!ability.hasParam("NumAtt")) { continue; } if (ComputerUtil.canPayCost(ability, defender.getController())) { - int pBonus = AbilityFactory.calculateAmount(ability.getSourceCard(), params.get("NumAtt"), ability); + int pBonus = AbilityFactory.calculateAmount(ability.getSourceCard(), ability.getParam("NumAtt"), ability); if (pBonus > 0) { power += pBonus; } @@ -1808,22 +1805,16 @@ public class CombatUtil { return toughness; } for (SpellAbility ability : defender.getAllSpellAbilities()) { - if (!(ability instanceof AbilityActivated) || ability.getAbilityFactory() == null - || ability.getPayCosts() == null) { + if (!(ability instanceof AbilityActivated) || ability.getPayCosts() == null) { continue; } - AbilityFactory af = ability.getAbilityFactory(); - if (af.getAPI() != ApiType.Pump) { - continue; - } - Map params = af.getMapParams(); - if (!params.containsKey("NumDef")) { + if (ability.getApi() != ApiType.Pump || !ability.hasParam("NumDef")) { continue; } if (ComputerUtil.canPayCost(ability, defender.getController())) { - int tBonus = AbilityFactory.calculateAmount(ability.getSourceCard(), params.get("NumDef"), ability); + int tBonus = AbilityFactory.calculateAmount(ability.getSourceCard(), ability.getParam("NumDef"), ability); if (tBonus > 0) { toughness += tBonus; } diff --git a/src/main/java/forge/game/player/ComputerAIGeneral.java b/src/main/java/forge/game/player/ComputerAIGeneral.java index b5463f21b5b..e70fd4ac69c 100644 --- a/src/main/java/forge/game/player/ComputerAIGeneral.java +++ b/src/main/java/forge/game/player/ComputerAIGeneral.java @@ -20,13 +20,10 @@ package forge.game.player; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.Map; - import com.esotericsoftware.minlog.Log; import forge.Card; -import forge.card.abilityfactory.AbilityFactory; import forge.card.abilityfactory.ApiType; import forge.card.cardfactory.CardFactoryUtil; import forge.card.replacement.ReplaceMoved; @@ -105,18 +102,21 @@ public class ComputerAIGeneral implements Computer { for (final Card c : all) { for (final SpellAbility sa : c.getSpellAbility()) { - if (sa.getAbilityFactory() == null) { + + if (sa.getApi() == null) { continue; } - final AbilityFactory af = sa.getAbilityFactory(); - final Map abilityParams = af.getMapParams(); - if (abilityParams.containsKey("AB") && !abilityParams.get("AB").equals("Pump")) { + + /// ???? + // if ( sa.isAbility() || sa.isSpell() && sa.getApi() != ApiType.Pump ) continue + if (sa.hasParam("AB") && !sa.getParam("AB").equals("Pump")) { continue; } - if (abilityParams.containsKey("SP") && !abilityParams.get("SP").equals("Pump")) { + if (sa.hasParam("SP") && !sa.getParam("SP").equals("Pump")) { continue; } - if (abilityParams.containsKey("KW") && abilityParams.get("KW").contains("Haste")) { + + if (sa.hasParam("KW") && sa.getParam("KW").contains("Haste")) { return true; } } @@ -269,7 +269,7 @@ public class ComputerAIGeneral implements Computer { for (final Card c : l) { for (final SpellAbility sa : c.getNonManaSpellAbilities()) { // Check if this AF is a Counterpsell - if ((sa.getAbilityFactory() != null) && sa.getAbilityFactory().getAPI() == ApiType.Counter) { + if (sa.getApi() == ApiType.Counter) { spellAbility.add(sa); } } diff --git a/src/main/java/forge/game/player/ComputerUtil.java b/src/main/java/forge/game/player/ComputerUtil.java index c1236f3d89c..f3a1155bf57 100644 --- a/src/main/java/forge/game/player/ComputerUtil.java +++ b/src/main/java/forge/game/player/ComputerUtil.java @@ -105,8 +105,7 @@ public class ComputerUtil { abilities = newAbilities; for (final SpellAbility sa : abilities) { // Don't add Counterspells to the "normal" playcard lookups - final AbilityFactory af = sa.getAbilityFactory(); - if ((af != null) && af.getAPI() == ApiType.Counter) { + if (sa.getApi() == ApiType.Counter) { continue; } sa.setActivatingPlayer(ai); @@ -190,8 +189,7 @@ public class ComputerUtil { final Card source = sa.getSourceCard(); final Target tgt = sa.getTarget(); - final AbilityFactory af = sa.getAbilityFactory(); - final Map params = af.getMapParams(); + // Play higher costing spells first? final Cost cost = sa.getPayCosts(); @@ -205,7 +203,7 @@ public class ComputerUtil { } // Abilities before Spells (card advantage) - if (af.isAbility()) { + if (sa.isAbility()) { restrict += 40; } @@ -215,7 +213,7 @@ public class ComputerUtil { } // Unless Cost gets significant bonus + 10-Payment Amount - final String unless = params.get("UnlessCost"); + final String unless = sa.getParam("UnlessCost"); if (unless != null && !unless.endsWith(">")) { final int amount = AbilityFactory.calculateAmount(source, unless, sa); @@ -670,7 +668,7 @@ public class ComputerUtil { if (m.isComboMana()) { String colorChoice = costParts[nPart]; m.setExpressChoice(colorChoice); - colorChoice = getComboManaChoice(ai, ma.getAbilityFactory().getMapParams(), ma.getSourceCard(), m, sa, cost); + colorChoice = getComboManaChoice(ai, ma, sa, cost); m.setExpressChoice(colorChoice); } // check if ability produces any color @@ -1159,19 +1157,22 @@ public class ComputerUtil { * * @param abMana * a {@link forge.card.spellability.AbilityMana} object. - * @param sa + * @param saRoot * a {@link forge.card.spellability.SpellAbility} object. * @param cost * a {@link forge.card.mana.ManaCost} object. * @return String */ - public static String getComboManaChoice(final Player ai, final Map params, - final Card source, final AbilityManaPart abMana, final SpellAbility sa, final ManaCost cost) { + public static String getComboManaChoice(final Player ai, final SpellAbility manaAb, final SpellAbility saRoot, final ManaCost cost) { final StringBuilder choiceString = new StringBuilder(); + + final Card source = manaAb.getSourceCard(); + final AbilityManaPart abMana = manaAb.getManaPart(); + if (abMana.isComboMana()) { - int amount = params.containsKey("Amount") ? AbilityFactory.calculateAmount(source, params.get("Amount"), sa) : 1; + int amount = manaAb.hasParam("Amount") ? AbilityFactory.calculateAmount(source, manaAb.getParam("Amount"), saRoot) : 1; final ManaCost testCost = new ManaCost(cost.toString().replace("X ", "")); final String[] comboColors = abMana.getComboColors().split(" "); for (int nMana = 1; nMana <= amount; nMana++) { @@ -1824,16 +1825,12 @@ public class ComputerUtil { } // sort planeswalker abilities for ultimate if (sa.getRestrictions().getPlaneswalker()) { - if ((sa.getAbilityFactory() != null) && sa.getAbilityFactory().getMapParams().containsKey("Ultimate")) { + if (sa.hasParam("Ultimate")) { p += 9; } } - AbilityFactory af = sa.getAbilityFactory(); - if (af == null) { - return p; - } - if (ApiType.DestroyAll == af.getAPI()) { + if (ApiType.DestroyAll == sa.getApi()) { p += 4; } @@ -1945,9 +1942,8 @@ public class ComputerUtil { for (final SpellAbility sa : c.getSpellAbility()) { // This try/catch should fix the "computer is thinking" bug try { - final AbilityFactory af = sa.getAbilityFactory(); - if (!sa.isAbility() || (af == null) || af.getAPI() != ApiType.Regenerate) { + if (!sa.isAbility() || sa.getApi() != ApiType.Regenerate) { continue; // Not a Regenerate ability } @@ -1956,14 +1952,13 @@ public class ComputerUtil { continue; // Can't play ability } - final Map mapParams = af.getMapParams(); final Target tgt = sa.getTarget(); if (tgt != null) { if (CardLists.getValidCards(Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield), tgt.getValidTgts(), controller, sa.getSourceCard()).contains(card)) { return true; } - } else if (AbilityFactory.getDefinedCards(sa.getSourceCard(), mapParams.get("Defined"), sa) + } else if (AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa) .contains(card)) { return true; } @@ -1997,24 +1992,21 @@ public class ComputerUtil { // if SA is from AF_Counter don't add to getPlayable // This try/catch should fix the "computer is thinking" bug try { - if ((sa.getAbilityFactory() != null) && sa.isAbility()) { - final AbilityFactory af = sa.getAbilityFactory(); - final Map mapParams = af.getMapParams(); - if (mapParams.get("AB").equals("PreventDamage") && sa.canPlay() - && ComputerUtil.canPayCost(sa, controller)) { - if (AbilityFactory.getDefinedCards(sa.getSourceCard(), mapParams.get("Defined"), sa) - .contains(card)) { - prevented += AbilityFactory.calculateAmount(af.getHostCard(), mapParams.get("Amount"), - sa); + if (sa.getApi() == null || !sa.isAbility()) { + continue; + } + + if (sa.getApi() == ApiType.PreventDamage && sa.canPlay() + && ComputerUtil.canPayCost(sa, controller)) { + if (AbilityFactory.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa).contains(card)) { + prevented += AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("Amount"), sa); + } + final Target tgt = sa.getTarget(); + if (tgt != null) { + if (CardLists.getValidCards(Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield), tgt.getValidTgts(), controller, sa.getSourceCard()).contains(card)) { + prevented += AbilityFactory.calculateAmount(sa.getSourceCard(), sa.getParam("Amount"), sa); } - final Target tgt = sa.getTarget(); - if (tgt != null) { - if (CardLists.getValidCards(Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield), tgt.getValidTgts(), controller, af.getHostCard()).contains(card)) { - prevented += AbilityFactory.calculateAmount(af.getHostCard(), - mapParams.get("Amount"), sa); - } - } } } } catch (final Exception ex) { diff --git a/src/main/java/forge/game/zone/MagicStack.java b/src/main/java/forge/game/zone/MagicStack.java index d23e33899bb..4d7323cf910 100644 --- a/src/main/java/forge/game/zone/MagicStack.java +++ b/src/main/java/forge/game/zone/MagicStack.java @@ -901,9 +901,9 @@ public class MagicStack extends MyObservable { Log.debug(source.getName() + " ability fizzles."); game.getGameLog().add("ResolveStack", source.getName() + " ability fizzles.", 2); this.finishResolving(sa, true); - } else if (sa.getAbilityFactory() != null) { + } else if (sa.getApi() != null) { game.getGameLog().add("ResolveStack", sa.getStackDescription(), 2); - AbilityFactory.handleRemembering(sa, sa.getAbilityFactory()); + AbilityFactory.handleRemembering(sa); AbilityFactory.resolve(sa, true); } else { game.getGameLog().add("ResolveStack", sa.getStackDescription(), 2);