AbilityFactory.getAbility is now static - no need to create instance of AbilityFactory to parse an ability

This commit is contained in:
Maxmtg
2013-02-12 05:57:06 +00:00
parent 429a5bd110
commit d243a21296
22 changed files with 45 additions and 97 deletions

View File

@@ -17,7 +17,6 @@
*/ */
package forge.card.ability; package forge.card.ability;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
@@ -39,17 +38,7 @@ import forge.game.zone.ZoneType;
* @author Forge * @author Forge
* @version $Id$ * @version $Id$
*/ */
public class AbilityFactory { public final class AbilityFactory {
/**
* <p>
* Constructor for AbilityFactory.
* </p>
*/
public AbilityFactory() {
}
// *******************************************************
/** /**
* <p> * <p>
@@ -62,7 +51,7 @@ public class AbilityFactory {
* a {@link forge.Card} object. * a {@link forge.Card} object.
* @return a {@link forge.card.spellability.SpellAbility} 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; SpellAbility spellAbility = null;
@@ -70,22 +59,17 @@ public class AbilityFactory {
boolean isSp = false; boolean isSp = false;
boolean isDb = false; boolean isDb = false;
ApiType api = null; Map<String, String> mapParams;
Card hostC = hostCard;
Map<String, String> mapParams = new HashMap<String, String>();
try { try {
mapParams = AbilityUtils.getMapParams(abString); mapParams = AbilityUtils.getMapParams(abString);
} }
catch (RuntimeException ex) { catch (RuntimeException ex) {
throw new RuntimeException(hostCard.getName() + ": " + ex.getMessage()); throw new RuntimeException(hostCard.getName() + ": " + ex.getMessage());
} }
// parse universal parameters // parse universal parameters
ApiType api = null;
if (mapParams.containsKey("AB")) { if (mapParams.containsKey("AB")) {
isAb = true; isAb = true;
api = ApiType.smartValueOf(mapParams.get("AB")); 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. // 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) { if (spellAbility == null) {
final StringBuilder msg = new StringBuilder(); final StringBuilder msg = new StringBuilder();
@@ -172,7 +151,7 @@ public class AbilityFactory {
if (mapParams.containsKey("References")) { if (mapParams.containsKey("References")) {
for (String svar : mapParams.get("References").split(",")) { 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; return spellAbility;
} }
private Target readTarget(Card hostC, Map<String, String> mapParams) { private static final Target readTarget(Card hostC, Map<String, String> mapParams) {
final String min = mapParams.containsKey("TargetMin") ? mapParams.get("TargetMin") : "1"; final String min = mapParams.containsKey("TargetMin") ? mapParams.get("TargetMin") : "1";
final String max = mapParams.containsKey("TargetMax") ? mapParams.get("TargetMax") : "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. * a {@link forge.card.spellability.SpellAbility} object.
* @param mapParams * @param mapParams
*/ */
private void makeRestrictions(final SpellAbility sa, Map<String, String> mapParams) { private static final void makeRestrictions(final SpellAbility sa, Map<String, String> mapParams) {
// SpellAbilityRestrictions should be added in here // SpellAbilityRestrictions should be added in here
final SpellAbilityRestriction restrict = sa.getRestrictions(); final SpellAbilityRestriction restrict = sa.getRestrictions();
if (mapParams.containsKey("Flashback")) { if (mapParams.containsKey("Flashback")) {
@@ -297,7 +276,7 @@ public class AbilityFactory {
* a {@link forge.card.spellability.SpellAbility} object. * a {@link forge.card.spellability.SpellAbility} object.
* @param mapParams * @param mapParams
*/ */
private void makeConditions(final SpellAbility sa, Map<String, String> mapParams) { private static final void makeConditions(final SpellAbility sa, Map<String, String> mapParams) {
// SpellAbilityRestrictions should be added in here // SpellAbilityRestrictions should be added in here
final SpellAbilityCondition condition = sa.getConditions(); final SpellAbilityCondition condition = sa.getConditions();
if (mapParams.containsKey("Flashback")) { if (mapParams.containsKey("Flashback")) {
@@ -315,11 +294,10 @@ public class AbilityFactory {
* *
* @return a {@link forge.card.spellability.AbilitySub} object. * @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("")) { if (!sSub.equals("")) {
final AbilityFactory afDB = new AbilityFactory(); return (AbilitySub) AbilityFactory.getAbility(sSub, hostCard);
return (AbilitySub) afDB.getAbility(sSub, hostCard);
} }
System.out.println("SubAbility not found for: " + hostCard); System.out.println("SubAbility not found for: " + hostCard);

View File

@@ -12,7 +12,6 @@ import forge.CardLists;
import forge.CardUtil; import forge.CardUtil;
import forge.Command; import forge.Command;
import forge.Constant; import forge.Constant;
import forge.Constant.Color;
import forge.CounterType; import forge.CounterType;
import forge.Singletons; import forge.Singletons;
import forge.card.cardfactory.CardFactoryUtil; import forge.card.cardfactory.CardFactoryUtil;

View File

@@ -7,12 +7,11 @@ import forge.card.spellability.SpellAbility;
import forge.game.player.AIPlayer; import forge.game.player.AIPlayer;
public class DelayedTriggerAi extends SpellAiLogic { public class DelayedTriggerAi extends SpellAiLogic {
private static AbilityFactory tempCreator = new AbilityFactory();
@Override @Override
public boolean chkAIDrawback(SpellAbility sa, AIPlayer ai) { public boolean chkAIDrawback(SpellAbility sa, AIPlayer ai) {
final String svarName = sa.getParam("Execute"); 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); trigsa.setActivatingPlayer(ai);
if (trigsa instanceof AbilitySub) { if (trigsa instanceof AbilitySub) {
@@ -25,7 +24,7 @@ public class DelayedTriggerAi extends SpellAiLogic {
@Override @Override
protected boolean doTriggerAINoCost(AIPlayer ai, SpellAbility sa, boolean mandatory) { protected boolean doTriggerAINoCost(AIPlayer ai, SpellAbility sa, boolean mandatory) {
final String svarName = sa.getParam("Execute"); 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); trigsa.setActivatingPlayer(ai);
if (!sa.hasParam("OptionalDecider")) { if (!sa.hasParam("OptionalDecider")) {
@@ -38,7 +37,7 @@ public class DelayedTriggerAi extends SpellAiLogic {
@Override @Override
protected boolean canPlayAI(AIPlayer ai, SpellAbility sa) { protected boolean canPlayAI(AIPlayer ai, SpellAbility sa) {
final String svarName = sa.getParam("Execute"); 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); trigsa.setActivatingPlayer(ai);
return trigsa.canPlayAI(); return trigsa.canPlayAI();
} }

View File

@@ -149,9 +149,8 @@ public class AnimateAllEffect extends AnimateEffectBase {
final ArrayList<SpellAbility> addedAbilities = new ArrayList<SpellAbility>(); final ArrayList<SpellAbility> addedAbilities = new ArrayList<SpellAbility>();
if (abilities.size() > 0) { if (abilities.size() > 0) {
for (final String s : abilities) { for (final String s : abilities) {
final AbilityFactory newAF = new AbilityFactory();
final String actualAbility = host.getSVar(s); final String actualAbility = host.getSVar(s);
final SpellAbility grantedAbility = newAF.getAbility(actualAbility, c); final SpellAbility grantedAbility = AbilityFactory.getAbility(actualAbility, c);
addedAbilities.add(grantedAbility); addedAbilities.add(grantedAbility);
c.addSpellAbility(grantedAbility); c.addSpellAbility(grantedAbility);
} }

View File

@@ -163,9 +163,8 @@ public class AnimateEffect extends AnimateEffectBase {
final ArrayList<SpellAbility> addedAbilities = new ArrayList<SpellAbility>(); final ArrayList<SpellAbility> addedAbilities = new ArrayList<SpellAbility>();
if (abilities.size() > 0) { if (abilities.size() > 0) {
for (final String s : abilities) { for (final String s : abilities) {
final AbilityFactory newAF = new AbilityFactory();
final String actualAbility = host.getSVar(s); final String actualAbility = host.getSVar(s);
final SpellAbility grantedAbility = newAF.getAbility(actualAbility, c); final SpellAbility grantedAbility = AbilityFactory.getAbility(actualAbility, c);
addedAbilities.add(grantedAbility); addedAbilities.add(grantedAbility);
c.addSpellAbility(grantedAbility); c.addSpellAbility(grantedAbility);
} }

View File

@@ -21,8 +21,7 @@ public class CharmEffect extends SpellEffect {
List<AbilitySub> choices = new ArrayList<AbilitySub>(); List<AbilitySub> choices = new ArrayList<AbilitySub>();
for (final String saChoice : saChoices) { for (final String saChoice : saChoices) {
final String ab = source.getSVar(saChoice); final String ab = source.getSVar(saChoice);
final AbilityFactory charmAF = new AbilityFactory(); choices.add((AbilitySub) AbilityFactory.getAbility(ab, source));
choices.add((AbilitySub) charmAF.getAbility(ab, source));
} }
return choices; return choices;
} }

View File

@@ -49,12 +49,11 @@ public class ChooseGenericEffect extends SpellEffect {
continue; continue;
} }
SpellAbility chosenSA = null; SpellAbility chosenSA = null;
AbilityFactory afChoice = new AbilityFactory();
if (p.isHuman()) { if (p.isHuman()) {
String choice = GuiChoose.one("Choose one", choices.values()); 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 } 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()); chosenSA.setActivatingPlayer(sa.getSourceCard().getController());
((AbilitySub) chosenSA).setParent(sa); ((AbilitySub) chosenSA).setParent(sa);

View File

@@ -25,7 +25,6 @@ public class ClashEffect extends SpellEffect {
*/ */
@Override @Override
public void resolve(SpellAbility sa) { public void resolve(SpellAbility sa) {
final AbilityFactory afOutcomes = new AbilityFactory();
final boolean victory = sa.getSourceCard().getController().clashWithOpponent(sa.getSourceCard()); final boolean victory = sa.getSourceCard().getController().clashWithOpponent(sa.getSourceCard());
// Run triggers // Run triggers
@@ -34,7 +33,7 @@ public class ClashEffect extends SpellEffect {
if (victory) { if (victory) {
if (sa.hasParam("WinSubAbility")) { if (sa.hasParam("WinSubAbility")) {
final SpellAbility win = afOutcomes.getAbility( final SpellAbility win = AbilityFactory.getAbility(
sa.getSourceCard().getSVar(sa.getParam("WinSubAbility")), sa.getSourceCard()); sa.getSourceCard().getSVar(sa.getParam("WinSubAbility")), sa.getSourceCard());
win.setActivatingPlayer(sa.getSourceCard().getController()); win.setActivatingPlayer(sa.getSourceCard().getController());
((AbilitySub) win).setParent(sa); ((AbilitySub) win).setParent(sa);
@@ -44,7 +43,7 @@ public class ClashEffect extends SpellEffect {
runParams.put("Won", "True"); runParams.put("Won", "True");
} else { } else {
if (sa.hasParam("OtherwiseSubAbility")) { if (sa.hasParam("OtherwiseSubAbility")) {
final SpellAbility otherwise = afOutcomes.getAbility( final SpellAbility otherwise = AbilityFactory.getAbility(
sa.getSourceCard().getSVar(sa.getParam("OtherwiseSubAbility")), sa.getSourceCard()); sa.getSourceCard().getSVar(sa.getParam("OtherwiseSubAbility")), sa.getSourceCard());
otherwise.setActivatingPlayer(sa.getSourceCard().getController()); otherwise.setActivatingPlayer(sa.getSourceCard().getController());
((AbilitySub) otherwise).setParent(sa); ((AbilitySub) otherwise).setParent(sa);

View File

@@ -120,10 +120,9 @@ public class EffectEffect extends SpellEffect {
// Grant abilities // Grant abilities
if (effectAbilities != null) { if (effectAbilities != null) {
for (final String s : effectAbilities) { for (final String s : effectAbilities) {
final AbilityFactory abFactory = new AbilityFactory();
final String actualAbility = hostCard.getSVar(s); final String actualAbility = hostCard.getSVar(s);
final SpellAbility grantedAbility = abFactory.getAbility(actualAbility, eff); final SpellAbility grantedAbility = AbilityFactory.getAbility(actualAbility, eff);
eff.addSpellAbility(grantedAbility); eff.addSpellAbility(grantedAbility);
} }
} }

View File

@@ -37,7 +37,6 @@ public class FlipCoinEffect extends SpellEffect {
caller.add(player); caller.add(player);
} }
final AbilityFactory afOutcomes = new AbilityFactory();
final boolean victory = GuiDialog.flipCoin(caller.get(0), sa.getSourceCard()); final boolean victory = GuiDialog.flipCoin(caller.get(0), sa.getSourceCard());
// Run triggers // Run triggers
@@ -52,7 +51,7 @@ public class FlipCoinEffect extends SpellEffect {
host.addRemembered(host); host.addRemembered(host);
} }
if (sa.hasParam("WinSubAbility")) { 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); win.setActivatingPlayer(player);
((AbilitySub) win).setParent(sa); ((AbilitySub) win).setParent(sa);
@@ -64,7 +63,7 @@ public class FlipCoinEffect extends SpellEffect {
host.addRemembered(host); host.addRemembered(host);
} }
if (sa.hasParam("LoseSubAbility")) { 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); lose.setActivatingPlayer(player);
((AbilitySub) lose).setParent(sa); ((AbilitySub) lose).setParent(sa);

View File

@@ -25,11 +25,10 @@ public class RepeatEachEffect extends SpellEffect {
*/ */
@Override @Override
public void resolve(SpellAbility sa) { public void resolve(SpellAbility sa) {
final AbilityFactory afRepeat = new AbilityFactory();
Card source = sa.getSourceCard(); Card source = sa.getSourceCard();
// setup subability to repeat // 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()); repeat.setActivatingPlayer(sa.getActivatingPlayer());
((AbilitySub) repeat).setParent(sa); ((AbilitySub) repeat).setParent(sa);

View File

@@ -24,11 +24,10 @@ public class RepeatEffect extends SpellEffect {
@Override @Override
public void resolve(SpellAbility sa) { public void resolve(SpellAbility sa) {
final AbilityFactory afRepeat = new AbilityFactory();
Card source = sa.getSourceCard(); Card source = sa.getSourceCard();
// setup subability to repeat // 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()); repeat.setActivatingPlayer(sa.getActivatingPlayer());
((AbilitySub) repeat).setParent(sa); ((AbilitySub) repeat).setParent(sa);

View File

@@ -212,11 +212,10 @@ public class TokenEffect extends SpellEffect {
// Grant abilities // Grant abilities
if (this.tokenAbilities != null) { if (this.tokenAbilities != null) {
final AbilityFactory af = new AbilityFactory();
for (final String s : this.tokenAbilities) { for (final String s : this.tokenAbilities) {
final String actualAbility = host.getSVar(s); final String actualAbility = host.getSVar(s);
for (final Card c : tokens) { for (final Card c : tokens) {
final SpellAbility grantedAbility = af.getAbility(actualAbility, c); final SpellAbility grantedAbility = AbilityFactory.getAbility(actualAbility, c);
c.addSpellAbility(grantedAbility); c.addSpellAbility(grantedAbility);
// added ability to intrinsic list so copies and clones work // added ability to intrinsic list so copies and clones work
c.getIntrinsicAbilities().add(actualAbility); c.getIntrinsicAbilities().add(actualAbility);
@@ -234,7 +233,7 @@ public class TokenEffect extends SpellEffect {
final Trigger parsedTrigger = TriggerHandler.parseTrigger(actualTrigger, c, true); final Trigger parsedTrigger = TriggerHandler.parseTrigger(actualTrigger, c, true);
final String ability = host.getSVar(parsedTrigger.getMapParams().get("Execute")); 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); c.addTrigger(parsedTrigger);
} }
} }

View File

@@ -137,8 +137,7 @@ public class TwoPilesEffect extends SpellEffect {
// take action on the chosen pile // take action on the chosen pile
if (sa.hasParam("ChosenPile")) { if (sa.hasParam("ChosenPile")) {
final AbilityFactory afPile = new AbilityFactory(); final SpellAbility action = AbilityFactory.getAbility(card.getSVar(sa.getParam("ChosenPile")), card);
final SpellAbility action = afPile.getAbility(card.getSVar(sa.getParam("ChosenPile")), card);
action.setActivatingPlayer(sa.getActivatingPlayer()); action.setActivatingPlayer(sa.getActivatingPlayer());
((AbilitySub) action).setParent(sa); ((AbilitySub) action).setParent(sa);
@@ -158,8 +157,7 @@ public class TwoPilesEffect extends SpellEffect {
card.addRemembered(c); card.addRemembered(c);
} }
} }
final AbilityFactory afPile = new AbilityFactory(); final SpellAbility action = AbilityFactory.getAbility(card.getSVar(sa.getParam("UnchosenPile")), card);
final SpellAbility action = afPile.getAbility(card.getSVar(sa.getParam("UnchosenPile")), card);
action.setActivatingPlayer(sa.getActivatingPlayer()); action.setActivatingPlayer(sa.getActivatingPlayer());
((AbilitySub) action).setParent(sa); ((AbilitySub) action).setParent(sa);

View File

@@ -646,13 +646,12 @@ public class CardFactoryCreatures {
final StringBuilder keywordBuilder = new StringBuilder("HIDDEN CARDNAME can't block "); final StringBuilder keywordBuilder = new StringBuilder("HIDDEN CARDNAME can't block ");
keywordBuilder.append(this.getSourceCard().toString()); keywordBuilder.append(this.getSourceCard().toString());
final AbilityFactory createAb = new AbilityFactory();
final StringBuilder abilityBuilder = new StringBuilder("AB$Pump | Cost$ "); final StringBuilder abilityBuilder = new StringBuilder("AB$Pump | Cost$ ");
abilityBuilder.append(theCost); abilityBuilder.append(theCost);
abilityBuilder.append(" | ValidTgts$ Creature | TgtPrompt$ Select target creature | IsCurse$ True | KW$ "); abilityBuilder.append(" | ValidTgts$ Creature | TgtPrompt$ Select target creature | IsCurse$ True | KW$ ");
abilityBuilder.append(keywordBuilder.toString()); abilityBuilder.append(keywordBuilder.toString());
abilityBuilder.append(" | SpellDescription$ Target creature can't block CARDNAME this turn."); 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.getTarget().setTargetChoices(this.getChosenTarget().getTargetChoices());
myAb.resolve(); myAb.resolve();

View File

@@ -957,8 +957,7 @@ public class CardFactoryUtil {
sb.append(" Discard<1/CARDNAME> | ActivationZone$ Hand | PrecostDesc$ Cycling "); sb.append(" Discard<1/CARDNAME> | ActivationZone$ Hand | PrecostDesc$ Cycling ");
sb.append("| SpellDescription$ Draw a card."); sb.append("| SpellDescription$ Draw a card.");
AbilityFactory af = new AbilityFactory(); SpellAbility cycle = AbilityFactory.getAbility(sb.toString(), sourceCard);
SpellAbility cycle = af.getAbility(sb.toString(), sourceCard);
cycle.setIsCycling(true); cycle.setIsCycling(true);
return cycle; 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(" | SpellDescription$ Search your library for a ").append(desc).append(" card, reveal it,");
sb.append(" and put it into your hand. Then shuffle your library."); sb.append(" and put it into your hand. Then shuffle your library.");
AbilityFactory af = new AbilityFactory(); SpellAbility cycle = AbilityFactory.getAbility(sb.toString(), sourceCard);
SpellAbility cycle = af.getAbility(sb.toString(), sourceCard);
cycle.setIsCycling(true); cycle.setIsCycling(true);
return cycle; return cycle;
@@ -3685,9 +3683,8 @@ public class CardFactoryUtil {
final ArrayList<String> ia = card.getIntrinsicAbilities(); final ArrayList<String> ia = card.getIntrinsicAbilities();
if (ia.size() > 0) { if (ia.size() > 0) {
for (int i = 0; i < ia.size(); i++) { for (int i = 0; i < ia.size(); i++) {
final AbilityFactory af = new AbilityFactory();
// System.out.println(cardName); // 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")) { if (sa.hasParam("SetAsKicked")) {
sa.addOptionalAdditionalCosts("Kicker"); sa.addOptionalAdditionalCosts("Kicker");
} }
@@ -4154,12 +4151,11 @@ public class CardFactoryUtil {
card.addTrigger(haunterETB); card.addTrigger(haunterETB);
card.addTrigger(haunterDies); card.addTrigger(haunterDies);
} else { } else {
final AbilityFactory af = new AbilityFactory();
final String abString = card.getSVar(hauntSVarName).replace("AB$", "SP$") final String abString = card.getSVar(hauntSVarName).replace("AB$", "SP$")
.replace("Cost$ 0", "Cost$ " + card.getManaCost()) .replace("Cost$ 0", "Cost$ " + card.getManaCost())
+ " | SpellDescription$ " + abilityDescription; + " | SpellDescription$ " + abilityDescription;
final SpellAbility sa = af.getAbility(abString, card); final SpellAbility sa = AbilityFactory.getAbility(abString, card);
card.addSpellAbility(sa); 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.)"); abilityStr.append("| PrecostDesc$ Equip | SpellDescription$ (Attach to target creature you control. Equip only as a sorcery.)");
} }
// instantiate attach ability // instantiate attach ability
final AbilityFactory af = new AbilityFactory(); final SpellAbility sa = AbilityFactory.getAbility(abilityStr.toString(), card);
final SpellAbility sa = af.getAbility(abilityStr.toString(), card);
card.addSpellAbility(sa); card.addSpellAbility(sa);
// add ability to instrinic strings so copies/clones create the ability also // add ability to instrinic strings so copies/clones create the ability also
card.getIntrinsicAbilities().add(abilityStr.toString()); card.getIntrinsicAbilities().add(abilityStr.toString());
@@ -4393,8 +4388,7 @@ public class CardFactoryUtil {
if (kw.startsWith("ETBReplacement")) { if (kw.startsWith("ETBReplacement")) {
String[] splitkw = kw.split(":"); String[] splitkw = kw.split(":");
ReplacementLayer layer = ReplacementLayer.smartValueOf(splitkw[1]); ReplacementLayer layer = ReplacementLayer.smartValueOf(splitkw[1]);
AbilityFactory af = new AbilityFactory(); SpellAbility repAb = AbilityFactory.getAbility(card.getSVar(splitkw[2]), card);
SpellAbility repAb = af.getAbility(card.getSVar(splitkw[2]), card);
String desc = repAb.getDescription(); String desc = repAb.getDescription();
setupETBReplacementAbility(repAb); setupETBReplacementAbility(repAb);

View File

@@ -184,9 +184,7 @@ public class ReplacementHandler {
final String effectSVar = mapParams.get("ReplaceWith"); final String effectSVar = mapParams.get("ReplaceWith");
final String effectAbString = replacementEffect.getHostCard().getSVar(effectSVar); 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); effectSA.setTrigger(true);
SpellAbility tailend = effectSA; SpellAbility tailend = effectSA;

View File

@@ -474,12 +474,11 @@ public class SpellPermanent extends Spell {
} }
// Maybe better considerations // Maybe better considerations
final AbilityFactory af = new AbilityFactory();
final String execute = params.get("Execute"); final String execute = params.get("Execute");
if (execute == null) { if (execute == null) {
continue; continue;
} }
final SpellAbility exSA = af.getAbility(card.getSVar(execute), card); final SpellAbility exSA = AbilityFactory.getAbility(card.getSVar(execute), card);
if (api != null) { if (api != null) {
if (exSA.getApi() != api) { if (exSA.getApi() != api) {

View File

@@ -390,8 +390,7 @@ public class StaticAbilityContinuous {
if (addAbilities != null) { if (addAbilities != null) {
for (final String abilty : addAbilities) { for (final String abilty : addAbilities) {
if (abilty.startsWith("AB")) { // grant the ability if (abilty.startsWith("AB")) { // grant the ability
final AbilityFactory af = new AbilityFactory(); final SpellAbility sa = AbilityFactory.getAbility(abilty, affectedCard);
final SpellAbility sa = af.getAbility(abilty, affectedCard);
sa.setType("Temporary"); sa.setType("Temporary");
sa.setOriginalHost(hostCard); sa.setOriginalHost(hostCard);
affectedCard.addSpellAbility(sa); affectedCard.addSpellAbility(sa);

View File

@@ -478,8 +478,6 @@ public class TriggerHandler {
} }
} }
final AbilityFactory abilityFactory = new AbilityFactory();
SpellAbility sa = null; SpellAbility sa = null;
Card host = game.getCardState(regtrig.getHostCard()); Card host = game.getCardState(regtrig.getHostCard());
@@ -496,7 +494,7 @@ public class TriggerHandler {
} }
}; };
} else { } else {
sa = abilityFactory.getAbility(host.getSVar(triggerParams.get("Execute")), host); sa = AbilityFactory.getAbility(host.getSVar(triggerParams.get("Execute")), host);
} }
} }
sa.setTrigger(true); sa.setTrigger(true);

View File

@@ -119,7 +119,6 @@ public class InputMulligan extends Input {
// Human Leylines & Chancellors // Human Leylines & Chancellors
ButtonUtil.reset(); ButtonUtil.reset();
final AbilityFactory af = new AbilityFactory();
final GameAction ga = game.getAction(); final GameAction ga = game.getAction();
for (Player p : game.getPlayers()) { for (Player p : game.getPlayers()) {
@@ -134,7 +133,7 @@ public class InputMulligan extends Input {
if (kw.startsWith("MayEffectFromOpeningHand")) { if (kw.startsWith("MayEffectFromOpeningHand")) {
final String effName = kw.split(":")[1]; 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 (GuiDialog.confirm(c, "Use this card's ability?")) {
// If we ever let the AI memorize cards in the players // If we ever let the AI memorize cards in the players
// hand, this would be a place to do so. // hand, this would be a place to do so.
@@ -156,7 +155,7 @@ public class InputMulligan extends Input {
if (kw.startsWith("MayEffectFromOpeningHand")) { if (kw.startsWith("MayEffectFromOpeningHand")) {
final String effName = kw.split(":")[1]; 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? // Is there a better way for the AI to decide this?
if (effect.doTrigger(false, (AIPlayer)p)) { if (effect.doTrigger(false, (AIPlayer)p)) {

View File

@@ -1172,8 +1172,7 @@ public final class GameActionUtil {
for (String landType : Constant.Color.BASIC_LANDS) { for (String landType : Constant.Color.BASIC_LANDS) {
if (land.isType(landType)) { if (land.isType(landType)) {
final AbilityFactory af = new AbilityFactory(); final SpellAbility sa = AbilityFactory.getAbility("AB$ Mana | Cost$ T | Produced$ " + produces.get(landType)
final SpellAbility sa = af.getAbility("AB$ Mana | Cost$ T | Produced$ " + produces.get(landType)
+ " | SpellDescription$ Add " + produces.get(landType) + " to your mana pool.", land); + " | SpellDescription$ Add " + produces.get(landType) + " to your mana pool.", land);
sa.setType("BasicLandTypeMana"); sa.setType("BasicLandTypeMana");
land.addSpellAbility(sa); land.addSpellAbility(sa);
@@ -1336,8 +1335,7 @@ public final class GameActionUtil {
} }
String newSubSAString = c.getCharacteristics().getIntrinsicAbility().get(0); String newSubSAString = c.getCharacteristics().getIntrinsicAbility().get(0);
newSubSAString = newSubSAString.replace("SP", "DB"); newSubSAString = newSubSAString.replace("SP", "DB");
final AbilityFactory af = new AbilityFactory(); final AbilitySub newSubSA = (AbilitySub) AbilityFactory.getAbility(newSubSAString, source);
final AbilitySub newSubSA = (AbilitySub) af.getAbility(newSubSAString, source);
ArrayList<SpellAbility> addSAs = new ArrayList<SpellAbility>(); ArrayList<SpellAbility> addSAs = new ArrayList<SpellAbility>();
// Add the subability to all existing variants // Add the subability to all existing variants
for (SpellAbility s : allSAs) { for (SpellAbility s : allSAs) {