From d243a21296535f79ccb71b93a3c9dddca9ff54b5 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Tue, 12 Feb 2013 05:57:06 +0000 Subject: [PATCH] AbilityFactory.getAbility is now static - no need to create instance of AbilityFactory to parse an ability --- .../forge/card/ability/AbilityFactory.java | 44 +++++-------------- .../java/forge/card/ability/AbilityUtils.java | 1 - .../card/ability/ai/DelayedTriggerAi.java | 7 ++- .../ability/effects/AnimateAllEffect.java | 3 +- .../card/ability/effects/AnimateEffect.java | 3 +- .../card/ability/effects/CharmEffect.java | 3 +- .../ability/effects/ChooseGenericEffect.java | 5 +-- .../card/ability/effects/ClashEffect.java | 5 +-- .../card/ability/effects/EffectEffect.java | 3 +- .../card/ability/effects/FlipCoinEffect.java | 5 +-- .../ability/effects/RepeatEachEffect.java | 3 +- .../card/ability/effects/RepeatEffect.java | 3 +- .../card/ability/effects/TokenEffect.java | 5 +-- .../card/ability/effects/TwoPilesEffect.java | 6 +-- .../cardfactory/CardFactoryCreatures.java | 3 +- .../card/cardfactory/CardFactoryUtil.java | 18 +++----- .../card/replacement/ReplacementHandler.java | 4 +- .../card/spellability/SpellPermanent.java | 3 +- .../StaticAbilityContinuous.java | 3 +- .../forge/card/trigger/TriggerHandler.java | 4 +- .../forge/control/input/InputMulligan.java | 5 +-- src/main/java/forge/game/GameActionUtil.java | 6 +-- 22 files changed, 45 insertions(+), 97 deletions(-) diff --git a/src/main/java/forge/card/ability/AbilityFactory.java b/src/main/java/forge/card/ability/AbilityFactory.java index ccc64c21cfa..9fb66b4c33e 100644 --- a/src/main/java/forge/card/ability/AbilityFactory.java +++ b/src/main/java/forge/card/ability/AbilityFactory.java @@ -17,7 +17,6 @@ */ package forge.card.ability; -import java.util.HashMap; import java.util.Map; @@ -39,17 +38,7 @@ import forge.game.zone.ZoneType; * @author Forge * @version $Id$ */ -public class AbilityFactory { - - /** - *

- * Constructor for AbilityFactory. - *

- */ - public AbilityFactory() { - } - - // ******************************************************* +public final class AbilityFactory { /** *

@@ -62,7 +51,7 @@ public class AbilityFactory { * a {@link forge.Card} object. * @return a {@link forge.card.spellability.SpellAbility} object. */ - public final SpellAbility getAbility(final String abString, final Card hostCard) { + public static final SpellAbility getAbility(final String abString, final Card hostCard) { SpellAbility spellAbility = null; @@ -70,22 +59,17 @@ public class AbilityFactory { boolean isSp = false; boolean isDb = false; - ApiType api = null; - - Card hostC = hostCard; - Map mapParams = new HashMap(); - - + Map mapParams; try { mapParams = AbilityUtils.getMapParams(abString); } catch (RuntimeException ex) { - throw new RuntimeException(hostCard.getName() + ": " + ex.getMessage()); } // parse universal parameters + ApiType api = null; if (mapParams.containsKey("AB")) { isAb = true; api = ApiType.smartValueOf(mapParams.get("AB")); @@ -108,7 +92,7 @@ public class AbilityFactory { } - Target abTgt = mapParams.containsKey("ValidTgts") ? readTarget(hostC, mapParams) : null; + Target abTgt = mapParams.containsKey("ValidTgts") ? readTarget(hostCard, mapParams) : null; // *********************************** // Match API keywords. These are listed in alphabetical order. @@ -151,11 +135,6 @@ public class AbilityFactory { } - // ////////////////////// - // - // End API matching. The above APIs are listed in alphabetical order. - // - // ////////////////////// if (spellAbility == null) { final StringBuilder msg = new StringBuilder(); @@ -172,7 +151,7 @@ public class AbilityFactory { if (mapParams.containsKey("References")) { for (String svar : mapParams.get("References").split(",")) { - spellAbility.setSVar(svar, hostC.getSVar(svar)); + spellAbility.setSVar(svar, hostCard.getSVar(svar)); } } @@ -214,7 +193,7 @@ public class AbilityFactory { return spellAbility; } - private Target readTarget(Card hostC, Map mapParams) { + private static final Target readTarget(Card hostC, Map mapParams) { final String min = mapParams.containsKey("TargetMin") ? mapParams.get("TargetMin") : "1"; final String max = mapParams.containsKey("TargetMax") ? mapParams.get("TargetMax") : "1"; @@ -279,7 +258,7 @@ public class AbilityFactory { * a {@link forge.card.spellability.SpellAbility} object. * @param mapParams */ - private void makeRestrictions(final SpellAbility sa, Map mapParams) { + private static final void makeRestrictions(final SpellAbility sa, Map mapParams) { // SpellAbilityRestrictions should be added in here final SpellAbilityRestriction restrict = sa.getRestrictions(); if (mapParams.containsKey("Flashback")) { @@ -297,7 +276,7 @@ public class AbilityFactory { * a {@link forge.card.spellability.SpellAbility} object. * @param mapParams */ - private void makeConditions(final SpellAbility sa, Map mapParams) { + private static final void makeConditions(final SpellAbility sa, Map mapParams) { // SpellAbilityRestrictions should be added in here final SpellAbilityCondition condition = sa.getConditions(); if (mapParams.containsKey("Flashback")) { @@ -315,11 +294,10 @@ public class AbilityFactory { * * @return a {@link forge.card.spellability.AbilitySub} object. */ - private final AbilitySub getSubAbility(Card hostCard, String sSub) { + private static final AbilitySub getSubAbility(Card hostCard, String sSub) { if (!sSub.equals("")) { - final AbilityFactory afDB = new AbilityFactory(); - return (AbilitySub) afDB.getAbility(sSub, hostCard); + return (AbilitySub) AbilityFactory.getAbility(sSub, hostCard); } System.out.println("SubAbility not found for: " + hostCard); diff --git a/src/main/java/forge/card/ability/AbilityUtils.java b/src/main/java/forge/card/ability/AbilityUtils.java index 8b3b788424e..8eb22821755 100644 --- a/src/main/java/forge/card/ability/AbilityUtils.java +++ b/src/main/java/forge/card/ability/AbilityUtils.java @@ -12,7 +12,6 @@ import forge.CardLists; import forge.CardUtil; import forge.Command; import forge.Constant; -import forge.Constant.Color; import forge.CounterType; import forge.Singletons; import forge.card.cardfactory.CardFactoryUtil; diff --git a/src/main/java/forge/card/ability/ai/DelayedTriggerAi.java b/src/main/java/forge/card/ability/ai/DelayedTriggerAi.java index e40ecf4bfe4..001ea56f15e 100644 --- a/src/main/java/forge/card/ability/ai/DelayedTriggerAi.java +++ b/src/main/java/forge/card/ability/ai/DelayedTriggerAi.java @@ -7,12 +7,11 @@ import forge.card.spellability.SpellAbility; import forge.game.player.AIPlayer; public class DelayedTriggerAi extends SpellAiLogic { - private static AbilityFactory tempCreator = new AbilityFactory(); @Override public boolean chkAIDrawback(SpellAbility sa, AIPlayer ai) { final String svarName = sa.getParam("Execute"); - final SpellAbility trigsa = tempCreator.getAbility(sa.getSourceCard().getSVar(svarName), sa.getSourceCard()); + final SpellAbility trigsa = AbilityFactory.getAbility(sa.getSourceCard().getSVar(svarName), sa.getSourceCard()); trigsa.setActivatingPlayer(ai); if (trigsa instanceof AbilitySub) { @@ -25,7 +24,7 @@ public class DelayedTriggerAi extends SpellAiLogic { @Override protected boolean doTriggerAINoCost(AIPlayer ai, SpellAbility sa, boolean mandatory) { final String svarName = sa.getParam("Execute"); - final SpellAbility trigsa = tempCreator.getAbility(sa.getSourceCard().getSVar(svarName), sa.getSourceCard()); + final SpellAbility trigsa = AbilityFactory.getAbility(sa.getSourceCard().getSVar(svarName), sa.getSourceCard()); trigsa.setActivatingPlayer(ai); if (!sa.hasParam("OptionalDecider")) { @@ -38,7 +37,7 @@ public class DelayedTriggerAi extends SpellAiLogic { @Override protected boolean canPlayAI(AIPlayer ai, SpellAbility sa) { final String svarName = sa.getParam("Execute"); - final SpellAbility trigsa = tempCreator.getAbility(sa.getSourceCard().getSVar(svarName), sa.getSourceCard()); + final SpellAbility trigsa = AbilityFactory.getAbility(sa.getSourceCard().getSVar(svarName), sa.getSourceCard()); trigsa.setActivatingPlayer(ai); return trigsa.canPlayAI(); } diff --git a/src/main/java/forge/card/ability/effects/AnimateAllEffect.java b/src/main/java/forge/card/ability/effects/AnimateAllEffect.java index 26845445c42..ed715ec7bad 100644 --- a/src/main/java/forge/card/ability/effects/AnimateAllEffect.java +++ b/src/main/java/forge/card/ability/effects/AnimateAllEffect.java @@ -149,9 +149,8 @@ public class AnimateAllEffect extends AnimateEffectBase { final ArrayList addedAbilities = new ArrayList(); if (abilities.size() > 0) { for (final String s : abilities) { - final AbilityFactory newAF = new AbilityFactory(); final String actualAbility = host.getSVar(s); - final SpellAbility grantedAbility = newAF.getAbility(actualAbility, c); + final SpellAbility grantedAbility = AbilityFactory.getAbility(actualAbility, c); addedAbilities.add(grantedAbility); c.addSpellAbility(grantedAbility); } diff --git a/src/main/java/forge/card/ability/effects/AnimateEffect.java b/src/main/java/forge/card/ability/effects/AnimateEffect.java index e087cc5726a..d7225a4a407 100644 --- a/src/main/java/forge/card/ability/effects/AnimateEffect.java +++ b/src/main/java/forge/card/ability/effects/AnimateEffect.java @@ -163,9 +163,8 @@ public class AnimateEffect extends AnimateEffectBase { final ArrayList addedAbilities = new ArrayList(); if (abilities.size() > 0) { for (final String s : abilities) { - final AbilityFactory newAF = new AbilityFactory(); final String actualAbility = host.getSVar(s); - final SpellAbility grantedAbility = newAF.getAbility(actualAbility, c); + final SpellAbility grantedAbility = AbilityFactory.getAbility(actualAbility, c); addedAbilities.add(grantedAbility); c.addSpellAbility(grantedAbility); } diff --git a/src/main/java/forge/card/ability/effects/CharmEffect.java b/src/main/java/forge/card/ability/effects/CharmEffect.java index b6c667516e9..753aac63509 100644 --- a/src/main/java/forge/card/ability/effects/CharmEffect.java +++ b/src/main/java/forge/card/ability/effects/CharmEffect.java @@ -21,8 +21,7 @@ public class CharmEffect extends SpellEffect { List choices = new ArrayList(); for (final String saChoice : saChoices) { final String ab = source.getSVar(saChoice); - final AbilityFactory charmAF = new AbilityFactory(); - choices.add((AbilitySub) charmAF.getAbility(ab, source)); + choices.add((AbilitySub) AbilityFactory.getAbility(ab, source)); } return choices; } diff --git a/src/main/java/forge/card/ability/effects/ChooseGenericEffect.java b/src/main/java/forge/card/ability/effects/ChooseGenericEffect.java index 546c7ae1031..a537dc079b5 100644 --- a/src/main/java/forge/card/ability/effects/ChooseGenericEffect.java +++ b/src/main/java/forge/card/ability/effects/ChooseGenericEffect.java @@ -49,12 +49,11 @@ public class ChooseGenericEffect extends SpellEffect { continue; } SpellAbility chosenSA = null; - AbilityFactory afChoice = new AbilityFactory(); if (p.isHuman()) { String choice = GuiChoose.one("Choose one", choices.values()); - chosenSA = afChoice.getAbility(host.getSVar(choices.inverse().get(choice)), host); + chosenSA = AbilityFactory.getAbility(host.getSVar(choices.inverse().get(choice)), host); } else { //Computer AI - chosenSA = afChoice.getAbility(host.getSVar(sa.getParam("Choices").split(",")[0]), host); + chosenSA = AbilityFactory.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/ability/effects/ClashEffect.java b/src/main/java/forge/card/ability/effects/ClashEffect.java index 35ffcf536e6..94c36061ddb 100644 --- a/src/main/java/forge/card/ability/effects/ClashEffect.java +++ b/src/main/java/forge/card/ability/effects/ClashEffect.java @@ -25,7 +25,6 @@ public class ClashEffect extends SpellEffect { */ @Override public void resolve(SpellAbility sa) { - final AbilityFactory afOutcomes = new AbilityFactory(); final boolean victory = sa.getSourceCard().getController().clashWithOpponent(sa.getSourceCard()); // Run triggers @@ -34,7 +33,7 @@ public class ClashEffect extends SpellEffect { if (victory) { if (sa.hasParam("WinSubAbility")) { - final SpellAbility win = afOutcomes.getAbility( + final SpellAbility win = AbilityFactory.getAbility( sa.getSourceCard().getSVar(sa.getParam("WinSubAbility")), sa.getSourceCard()); win.setActivatingPlayer(sa.getSourceCard().getController()); ((AbilitySub) win).setParent(sa); @@ -44,7 +43,7 @@ public class ClashEffect extends SpellEffect { runParams.put("Won", "True"); } else { if (sa.hasParam("OtherwiseSubAbility")) { - final SpellAbility otherwise = afOutcomes.getAbility( + final SpellAbility otherwise = AbilityFactory.getAbility( 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/ability/effects/EffectEffect.java b/src/main/java/forge/card/ability/effects/EffectEffect.java index ff5a1269e91..8f44c9bc012 100644 --- a/src/main/java/forge/card/ability/effects/EffectEffect.java +++ b/src/main/java/forge/card/ability/effects/EffectEffect.java @@ -120,10 +120,9 @@ public class EffectEffect extends SpellEffect { // Grant abilities if (effectAbilities != null) { for (final String s : effectAbilities) { - final AbilityFactory abFactory = new AbilityFactory(); final String actualAbility = hostCard.getSVar(s); - final SpellAbility grantedAbility = abFactory.getAbility(actualAbility, eff); + final SpellAbility grantedAbility = AbilityFactory.getAbility(actualAbility, eff); eff.addSpellAbility(grantedAbility); } } diff --git a/src/main/java/forge/card/ability/effects/FlipCoinEffect.java b/src/main/java/forge/card/ability/effects/FlipCoinEffect.java index 30f30a7ae12..ba30905442e 100644 --- a/src/main/java/forge/card/ability/effects/FlipCoinEffect.java +++ b/src/main/java/forge/card/ability/effects/FlipCoinEffect.java @@ -37,7 +37,6 @@ public class FlipCoinEffect extends SpellEffect { caller.add(player); } - final AbilityFactory afOutcomes = new AbilityFactory(); final boolean victory = GuiDialog.flipCoin(caller.get(0), sa.getSourceCard()); // Run triggers @@ -52,7 +51,7 @@ public class FlipCoinEffect extends SpellEffect { host.addRemembered(host); } if (sa.hasParam("WinSubAbility")) { - final SpellAbility win = afOutcomes.getAbility(host.getSVar(sa.getParam("WinSubAbility")), host); + final SpellAbility win = AbilityFactory.getAbility(host.getSVar(sa.getParam("WinSubAbility")), host); win.setActivatingPlayer(player); ((AbilitySub) win).setParent(sa); @@ -64,7 +63,7 @@ public class FlipCoinEffect extends SpellEffect { host.addRemembered(host); } if (sa.hasParam("LoseSubAbility")) { - final SpellAbility lose = afOutcomes.getAbility(host.getSVar(sa.getParam("LoseSubAbility")), host); + final SpellAbility lose = AbilityFactory.getAbility(host.getSVar(sa.getParam("LoseSubAbility")), host); lose.setActivatingPlayer(player); ((AbilitySub) lose).setParent(sa); diff --git a/src/main/java/forge/card/ability/effects/RepeatEachEffect.java b/src/main/java/forge/card/ability/effects/RepeatEachEffect.java index 35b5a18b3f3..067546b9967 100644 --- a/src/main/java/forge/card/ability/effects/RepeatEachEffect.java +++ b/src/main/java/forge/card/ability/effects/RepeatEachEffect.java @@ -25,11 +25,10 @@ public class RepeatEachEffect extends SpellEffect { */ @Override 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(sa.getParam("RepeatSubAbility")), source); + final SpellAbility repeat = AbilityFactory.getAbility(sa.getSourceCard().getSVar(sa.getParam("RepeatSubAbility")), source); repeat.setActivatingPlayer(sa.getActivatingPlayer()); ((AbilitySub) repeat).setParent(sa); diff --git a/src/main/java/forge/card/ability/effects/RepeatEffect.java b/src/main/java/forge/card/ability/effects/RepeatEffect.java index adbb427ccc2..bb88353d2e2 100644 --- a/src/main/java/forge/card/ability/effects/RepeatEffect.java +++ b/src/main/java/forge/card/ability/effects/RepeatEffect.java @@ -24,11 +24,10 @@ public class RepeatEffect extends SpellEffect { @Override 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(sa.getParam("RepeatSubAbility")), source); + final SpellAbility repeat = AbilityFactory.getAbility(sa.getSourceCard().getSVar(sa.getParam("RepeatSubAbility")), source); repeat.setActivatingPlayer(sa.getActivatingPlayer()); ((AbilitySub) repeat).setParent(sa); diff --git a/src/main/java/forge/card/ability/effects/TokenEffect.java b/src/main/java/forge/card/ability/effects/TokenEffect.java index 8c27c70560c..67481ba5e35 100644 --- a/src/main/java/forge/card/ability/effects/TokenEffect.java +++ b/src/main/java/forge/card/ability/effects/TokenEffect.java @@ -212,11 +212,10 @@ public class TokenEffect extends SpellEffect { // Grant abilities if (this.tokenAbilities != null) { - final AbilityFactory af = new AbilityFactory(); for (final String s : this.tokenAbilities) { final String actualAbility = host.getSVar(s); for (final Card c : tokens) { - final SpellAbility grantedAbility = af.getAbility(actualAbility, c); + final SpellAbility grantedAbility = AbilityFactory.getAbility(actualAbility, c); c.addSpellAbility(grantedAbility); // added ability to intrinsic list so copies and clones work c.getIntrinsicAbilities().add(actualAbility); @@ -234,7 +233,7 @@ public class TokenEffect extends SpellEffect { final Trigger parsedTrigger = TriggerHandler.parseTrigger(actualTrigger, c, true); final String ability = host.getSVar(parsedTrigger.getMapParams().get("Execute")); - parsedTrigger.setOverridingAbility(new AbilityFactory().getAbility(ability, c)); + parsedTrigger.setOverridingAbility(AbilityFactory.getAbility(ability, c)); c.addTrigger(parsedTrigger); } } diff --git a/src/main/java/forge/card/ability/effects/TwoPilesEffect.java b/src/main/java/forge/card/ability/effects/TwoPilesEffect.java index 8b64ad26a6a..11a92d37ac1 100644 --- a/src/main/java/forge/card/ability/effects/TwoPilesEffect.java +++ b/src/main/java/forge/card/ability/effects/TwoPilesEffect.java @@ -137,8 +137,7 @@ public class TwoPilesEffect extends SpellEffect { // take action on the chosen pile if (sa.hasParam("ChosenPile")) { - final AbilityFactory afPile = new AbilityFactory(); - final SpellAbility action = afPile.getAbility(card.getSVar(sa.getParam("ChosenPile")), card); + final SpellAbility action = AbilityFactory.getAbility(card.getSVar(sa.getParam("ChosenPile")), card); action.setActivatingPlayer(sa.getActivatingPlayer()); ((AbilitySub) action).setParent(sa); @@ -158,8 +157,7 @@ public class TwoPilesEffect extends SpellEffect { card.addRemembered(c); } } - final AbilityFactory afPile = new AbilityFactory(); - final SpellAbility action = afPile.getAbility(card.getSVar(sa.getParam("UnchosenPile")), card); + final SpellAbility action = AbilityFactory.getAbility(card.getSVar(sa.getParam("UnchosenPile")), card); action.setActivatingPlayer(sa.getActivatingPlayer()); ((AbilitySub) action).setParent(sa); diff --git a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java index ddbc4617c3d..1ae13242ede 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java @@ -646,13 +646,12 @@ public class CardFactoryCreatures { final StringBuilder keywordBuilder = new StringBuilder("HIDDEN CARDNAME can't block "); keywordBuilder.append(this.getSourceCard().toString()); - final AbilityFactory createAb = new AbilityFactory(); final StringBuilder abilityBuilder = new StringBuilder("AB$Pump | Cost$ "); abilityBuilder.append(theCost); abilityBuilder.append(" | ValidTgts$ Creature | TgtPrompt$ Select target creature | IsCurse$ True | KW$ "); abilityBuilder.append(keywordBuilder.toString()); abilityBuilder.append(" | SpellDescription$ Target creature can't block CARDNAME this turn."); - final SpellAbility myAb = createAb.getAbility(abilityBuilder.toString(), card); + final SpellAbility myAb = AbilityFactory.getAbility(abilityBuilder.toString(), card); myAb.getTarget().setTargetChoices(this.getChosenTarget().getTargetChoices()); myAb.resolve(); diff --git a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java index d2cd10f58d9..7a02a66ce4c 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java @@ -957,8 +957,7 @@ public class CardFactoryUtil { sb.append(" Discard<1/CARDNAME> | ActivationZone$ Hand | PrecostDesc$ Cycling "); sb.append("| SpellDescription$ Draw a card."); - AbilityFactory af = new AbilityFactory(); - SpellAbility cycle = af.getAbility(sb.toString(), sourceCard); + SpellAbility cycle = AbilityFactory.getAbility(sb.toString(), sourceCard); cycle.setIsCycling(true); return cycle; @@ -992,8 +991,7 @@ public class CardFactoryUtil { sb.append(" | SpellDescription$ Search your library for a ").append(desc).append(" card, reveal it,"); sb.append(" and put it into your hand. Then shuffle your library."); - AbilityFactory af = new AbilityFactory(); - SpellAbility cycle = af.getAbility(sb.toString(), sourceCard); + SpellAbility cycle = AbilityFactory.getAbility(sb.toString(), sourceCard); cycle.setIsCycling(true); return cycle; @@ -3685,9 +3683,8 @@ public class CardFactoryUtil { final ArrayList ia = card.getIntrinsicAbilities(); if (ia.size() > 0) { for (int i = 0; i < ia.size(); i++) { - final AbilityFactory af = new AbilityFactory(); // System.out.println(cardName); - final SpellAbility sa = af.getAbility(ia.get(i), card); + final SpellAbility sa = AbilityFactory.getAbility(ia.get(i), card); if (sa.hasParam("SetAsKicked")) { sa.addOptionalAdditionalCosts("Kicker"); } @@ -4154,12 +4151,11 @@ public class CardFactoryUtil { card.addTrigger(haunterETB); card.addTrigger(haunterDies); } else { - final AbilityFactory af = new AbilityFactory(); final String abString = card.getSVar(hauntSVarName).replace("AB$", "SP$") .replace("Cost$ 0", "Cost$ " + card.getManaCost()) + " | SpellDescription$ " + abilityDescription; - final SpellAbility sa = af.getAbility(abString, card); + final SpellAbility sa = AbilityFactory.getAbility(abString, card); card.addSpellAbility(sa); } @@ -4381,8 +4377,7 @@ public class CardFactoryUtil { abilityStr.append("| PrecostDesc$ Equip | SpellDescription$ (Attach to target creature you control. Equip only as a sorcery.)"); } // instantiate attach ability - final AbilityFactory af = new AbilityFactory(); - final SpellAbility sa = af.getAbility(abilityStr.toString(), card); + final SpellAbility sa = AbilityFactory.getAbility(abilityStr.toString(), card); card.addSpellAbility(sa); // add ability to instrinic strings so copies/clones create the ability also card.getIntrinsicAbilities().add(abilityStr.toString()); @@ -4393,8 +4388,7 @@ public class CardFactoryUtil { if (kw.startsWith("ETBReplacement")) { String[] splitkw = kw.split(":"); ReplacementLayer layer = ReplacementLayer.smartValueOf(splitkw[1]); - AbilityFactory af = new AbilityFactory(); - SpellAbility repAb = af.getAbility(card.getSVar(splitkw[2]), card); + SpellAbility repAb = AbilityFactory.getAbility(card.getSVar(splitkw[2]), card); String desc = repAb.getDescription(); setupETBReplacementAbility(repAb); diff --git a/src/main/java/forge/card/replacement/ReplacementHandler.java b/src/main/java/forge/card/replacement/ReplacementHandler.java index 47e2400e515..d85a5ea77b8 100644 --- a/src/main/java/forge/card/replacement/ReplacementHandler.java +++ b/src/main/java/forge/card/replacement/ReplacementHandler.java @@ -184,9 +184,7 @@ public class ReplacementHandler { final String effectSVar = mapParams.get("ReplaceWith"); final String effectAbString = replacementEffect.getHostCard().getSVar(effectSVar); - final AbilityFactory abilityFactory = new AbilityFactory(); - - effectSA = abilityFactory.getAbility(effectAbString, replacementEffect.getHostCard()); + effectSA = AbilityFactory.getAbility(effectAbString, replacementEffect.getHostCard()); effectSA.setTrigger(true); SpellAbility tailend = effectSA; diff --git a/src/main/java/forge/card/spellability/SpellPermanent.java b/src/main/java/forge/card/spellability/SpellPermanent.java index fb984377407..c8f5909319f 100644 --- a/src/main/java/forge/card/spellability/SpellPermanent.java +++ b/src/main/java/forge/card/spellability/SpellPermanent.java @@ -474,12 +474,11 @@ public class SpellPermanent extends Spell { } // Maybe better considerations - final AbilityFactory af = new AbilityFactory(); final String execute = params.get("Execute"); if (execute == null) { continue; } - final SpellAbility exSA = af.getAbility(card.getSVar(execute), card); + final SpellAbility exSA = AbilityFactory.getAbility(card.getSVar(execute), card); if (api != null) { if (exSA.getApi() != api) { diff --git a/src/main/java/forge/card/staticability/StaticAbilityContinuous.java b/src/main/java/forge/card/staticability/StaticAbilityContinuous.java index 2fcd7ab124d..7b689b093c9 100644 --- a/src/main/java/forge/card/staticability/StaticAbilityContinuous.java +++ b/src/main/java/forge/card/staticability/StaticAbilityContinuous.java @@ -390,8 +390,7 @@ public class StaticAbilityContinuous { if (addAbilities != null) { for (final String abilty : addAbilities) { if (abilty.startsWith("AB")) { // grant the ability - final AbilityFactory af = new AbilityFactory(); - final SpellAbility sa = af.getAbility(abilty, affectedCard); + final SpellAbility sa = AbilityFactory.getAbility(abilty, affectedCard); sa.setType("Temporary"); sa.setOriginalHost(hostCard); affectedCard.addSpellAbility(sa); diff --git a/src/main/java/forge/card/trigger/TriggerHandler.java b/src/main/java/forge/card/trigger/TriggerHandler.java index fff2b0e7510..46008c09cf9 100644 --- a/src/main/java/forge/card/trigger/TriggerHandler.java +++ b/src/main/java/forge/card/trigger/TriggerHandler.java @@ -478,8 +478,6 @@ public class TriggerHandler { } } - final AbilityFactory abilityFactory = new AbilityFactory(); - SpellAbility sa = null; Card host = game.getCardState(regtrig.getHostCard()); @@ -496,7 +494,7 @@ public class TriggerHandler { } }; } else { - sa = abilityFactory.getAbility(host.getSVar(triggerParams.get("Execute")), host); + sa = AbilityFactory.getAbility(host.getSVar(triggerParams.get("Execute")), host); } } sa.setTrigger(true); diff --git a/src/main/java/forge/control/input/InputMulligan.java b/src/main/java/forge/control/input/InputMulligan.java index af3e051573f..38ad3e57900 100644 --- a/src/main/java/forge/control/input/InputMulligan.java +++ b/src/main/java/forge/control/input/InputMulligan.java @@ -119,7 +119,6 @@ public class InputMulligan extends Input { // Human Leylines & Chancellors ButtonUtil.reset(); - final AbilityFactory af = new AbilityFactory(); final GameAction ga = game.getAction(); for (Player p : game.getPlayers()) { @@ -134,7 +133,7 @@ public class InputMulligan extends Input { if (kw.startsWith("MayEffectFromOpeningHand")) { final String effName = kw.split(":")[1]; - final SpellAbility effect = af.getAbility(c.getSVar(effName), c); + final SpellAbility effect = AbilityFactory.getAbility(c.getSVar(effName), c); if (GuiDialog.confirm(c, "Use this card's ability?")) { // If we ever let the AI memorize cards in the players // hand, this would be a place to do so. @@ -156,7 +155,7 @@ public class InputMulligan extends Input { if (kw.startsWith("MayEffectFromOpeningHand")) { final String effName = kw.split(":")[1]; - final SpellAbility effect = af.getAbility(c.getSVar(effName), c); + final SpellAbility effect = AbilityFactory.getAbility(c.getSVar(effName), c); // Is there a better way for the AI to decide this? if (effect.doTrigger(false, (AIPlayer)p)) { diff --git a/src/main/java/forge/game/GameActionUtil.java b/src/main/java/forge/game/GameActionUtil.java index 2433738de7b..84f908e23b9 100644 --- a/src/main/java/forge/game/GameActionUtil.java +++ b/src/main/java/forge/game/GameActionUtil.java @@ -1172,8 +1172,7 @@ public final class GameActionUtil { for (String landType : Constant.Color.BASIC_LANDS) { if (land.isType(landType)) { - final AbilityFactory af = new AbilityFactory(); - final SpellAbility sa = af.getAbility("AB$ Mana | Cost$ T | Produced$ " + produces.get(landType) + final SpellAbility sa = AbilityFactory.getAbility("AB$ Mana | Cost$ T | Produced$ " + produces.get(landType) + " | SpellDescription$ Add " + produces.get(landType) + " to your mana pool.", land); sa.setType("BasicLandTypeMana"); land.addSpellAbility(sa); @@ -1336,8 +1335,7 @@ public final class GameActionUtil { } String newSubSAString = c.getCharacteristics().getIntrinsicAbility().get(0); newSubSAString = newSubSAString.replace("SP", "DB"); - final AbilityFactory af = new AbilityFactory(); - final AbilitySub newSubSA = (AbilitySub) af.getAbility(newSubSAString, source); + final AbilitySub newSubSA = (AbilitySub) AbilityFactory.getAbility(newSubSAString, source); ArrayList addSAs = new ArrayList(); // Add the subability to all existing variants for (SpellAbility s : allSAs) {