mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +00:00
AbilityFactory.getAbility is now static - no need to create instance of AbilityFactory to parse an ability
This commit is contained in:
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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)) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user