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) {