getStackDescription routines now use common routines for string collection

any spelleffect class can use common routines to get defined targets
This commit is contained in:
Maxmtg
2012-11-03 22:07:36 +00:00
parent ee911645d4
commit 8bb12d8d0d
79 changed files with 732 additions and 2109 deletions

View File

@@ -1,9 +1,13 @@
package forge.card.abilityfactory;
import java.util.List;
import java.util.Map;
import forge.Card;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
/**
* <p>
@@ -16,21 +20,67 @@ import forge.card.spellability.SpellAbility;
public abstract class SpellEffect {
public abstract void resolve(final Map<String, String> params, final SpellAbility sa);
protected abstract String getStackDescription(final Map<String, String> params, final SpellAbility sa);
@SuppressWarnings("unused")
protected String getStackDescription(final Map<String, String> params, final SpellAbility sa) {
// If not overriden, let the spell description also be the stack description
return sa.getDescription();
}
/**
* TODO: Write javadoc for this method.
* Returns this effect description with needed prelude and epilogue
* @param params
* @param commonSpell
* @return
*/
public final String getStackDescriptionWithSubs(final Map<String, String> params, final SpellAbility sa) {
final String s1 = this.getStackDescription(params, sa);
StringBuilder sb = new StringBuilder();
// prelude for when this is root ability
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard()).append(" -");
}
sb.append(" ");
// Own description
String stackDesc = params.get("StackDescription");
String spellDesc = params.get("SpellDescription");
if ( stackDesc != null ) {
if ( !"None".equalsIgnoreCase(stackDesc) ) // by typing "none" they want to suppress output
sb.append( stackDesc.replace("CARDNAME", sa.getSourceCard().getName()));
} else if ( spellDesc != null ) {
sb.append( spellDesc.replace("CARDNAME", sa.getSourceCard().getName()) );
} else
sb.append(this.getStackDescription(params, sa));
// This inlcudes all subAbilities
final AbilitySub abSub = sa.getSubAbility();
if (abSub != null) {
return s1 + abSub.getStackDescription();
sb.append(abSub.getStackDescription());
}
return s1;
return sb.toString();
}
protected List<Card> getTargetCards(SpellAbility sa, final Map<String, String> params) {
final Target tgt = sa.getTarget();
return tgt != null ? tgt.getTargetCards() : AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
}
protected List<Player> getTargetPlayers(SpellAbility sa, final Map<String, String> params) {
final Target tgt = sa.getTarget();
return tgt != null ? tgt.getTargetPlayers() : AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
protected List<SpellAbility> getTargetSpellAbilities(SpellAbility sa, final Map<String, String> params) {
final Target tgt = sa.getTarget();
return tgt != null ? tgt.getTargetSAs() : AbilityFactory.getDefinedSpellAbilities(sa.getSourceCard(), params.get("Defined"), sa);
}
protected List<Object> getTargetObjects(SpellAbility sa, final Map<String, String> params) {
final Target tgt = sa.getTarget();
return tgt != null ? tgt.getTargets() : AbilityFactory.getDefinedObjects(sa.getSourceCard(), params.get("Defined"), sa);
}
}

View File

@@ -1,11 +1,11 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.List;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.phase.ExtraTurn;
@@ -13,6 +13,30 @@ import forge.game.player.Player;
public class AddTurnEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
final int numTurns = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumTurns"), sa);
List<Player> tgtPlayers = getTargetPlayers(sa, params);
for (final Player player : tgtPlayers) {
sb.append(player).append(" ");
}
sb.append("takes ");
sb.append(numTurns > 1 ? numTurns : "an");
sb.append(" extra turn");
if (numTurns > 1) {
sb.append("s");
}
sb.append(" after this one.");
return sb.toString();
}
@Override
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
final int numTurns = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumTurns"), sa);
@@ -41,43 +65,4 @@ public class AddTurnEffect extends SpellEffect {
}
}
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
final int numTurns = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumTurns"), sa);
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard()).append(" - ");
} else {
sb.append(" ");
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Player player : tgtPlayers) {
sb.append(player).append(" ");
}
sb.append("takes ");
if (numTurns > 1) {
sb.append(numTurns);
} else {
sb.append("an");
}
sb.append(" extra turn");
if (numTurns > 1) {
sb.append("s");
}
sb.append(" after this one.");
return sb.toString();
}
}

View File

@@ -12,7 +12,6 @@ import forge.Command;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.replacement.ReplacementEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.card.staticability.StaticAbility;
@@ -25,23 +24,7 @@ public class AnimateAllEffect extends AnimateEffectBase
{
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" - ");
}
String desc = "";
if (params.containsKey("SpellDescription")) {
desc = params.get("SpellDescription");
} else {
desc = "Animate all valid cards.";
}
sb.append(desc);
return sb.toString();
return "Animate all valid cards.";
}
@Override

View File

@@ -11,7 +11,6 @@ import forge.Command;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.replacement.ReplacementEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.card.staticability.StaticAbility;
@@ -321,86 +320,70 @@ public class AnimateEffect extends AnimateEffectBase {
final StringBuilder sb = new StringBuilder();
if (sa instanceof AbilitySub) {
final Target tgt = sa.getTarget();
final List<Card> tgts = tgt != null ? tgt.getTargetCards() : AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
for (final Card c : tgts) {
sb.append(c).append(" ");
}
sb.append("become");
if (tgts.size() == 1) {
sb.append("s a");
}
// if power is -1, we'll assume it's not just setting toughness
if (power != -1) {
sb.append(" ").append(power).append("/").append(toughness);
}
if (colors.size() > 0) {
sb.append(" ");
}
if (colors.contains("ChosenColor")) {
sb.append("color of that player's choice");
} else {
sb.append(sa.getSourceCard().getName()).append(" - ");
}
if (params.containsKey("StackDescription")) {
sb.append(params.get("StackDescription").replaceAll("CARDNAME", host.getName()));
}
else {
final Target tgt = sa.getTarget();
ArrayList<Card> tgts;
if (tgt != null) {
tgts = tgt.getTargetCards();
} else {
tgts = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Card c : tgts) {
sb.append(c).append(" ");
}
sb.append("become");
if (tgts.size() == 1) {
sb.append("s a");
}
// if power is -1, we'll assume it's not just setting toughness
if (power != -1) {
sb.append(" ").append(power).append("/").append(toughness);
}
if (colors.size() > 0) {
sb.append(" ");
}
if (colors.contains("ChosenColor")) {
sb.append("color of that player's choice");
} else {
for (int i = 0; i < colors.size(); i++) {
sb.append(colors.get(i));
if (i < (colors.size() - 1)) {
sb.append(" and ");
}
}
}
sb.append(" ");
if (types.contains("ChosenType")) {
sb.append("type of player's choice ");
} else {
for (int i = types.size() - 1; i >= 0; i--) {
sb.append(types.get(i));
sb.append(" ");
}
}
if (keywords.size() > 0) {
sb.append("with ");
}
for (int i = 0; i < keywords.size(); i++) {
sb.append(keywords.get(i));
if (i < (keywords.size() - 1)) {
for (int i = 0; i < colors.size(); i++) {
sb.append(colors.get(i));
if (i < (colors.size() - 1)) {
sb.append(" and ");
}
}
// sb.append(abilities)
// sb.append(triggers)
if (!permanent) {
if (params.containsKey("UntilEndOfCombat")) {
sb.append(" until end of combat.");
} else if (params.containsKey("UntilHostLeavesPlay")) {
sb.append(" until ").append(host).append(" leaves the battlefield.");
} else if (params.containsKey("UntilYourNextUpkeep")) {
sb.append(" until your next upkeep.");
} else if (params.containsKey("UntilControllerNextUntap")) {
sb.append(" until its controller's next untap step.");
} else {
sb.append(" until end of turn.");
}
} else {
sb.append(".");
}
sb.append(" ");
if (types.contains("ChosenType")) {
sb.append("type of player's choice ");
} else {
for (int i = types.size() - 1; i >= 0; i--) {
sb.append(types.get(i));
sb.append(" ");
}
}
if (keywords.size() > 0) {
sb.append("with ");
}
for (int i = 0; i < keywords.size(); i++) {
sb.append(keywords.get(i));
if (i < (keywords.size() - 1)) {
sb.append(" and ");
}
}
// sb.append(abilities)
// sb.append(triggers)
if (!permanent) {
if (params.containsKey("UntilEndOfCombat")) {
sb.append(" until end of combat.");
} else if (params.containsKey("UntilHostLeavesPlay")) {
sb.append(" until ").append(host).append(" leaves the battlefield.");
} else if (params.containsKey("UntilYourNextUpkeep")) {
sb.append(" until your next upkeep.");
} else if (params.containsKey("UntilControllerNextUntap")) {
sb.append(" until its controller's next untap step.");
} else {
sb.append(" until end of turn.");
}
} else {
sb.append(".");
}
return sb.toString();
}

View File

@@ -8,10 +8,8 @@ import forge.CardLists;
import forge.CardUtil;
import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -22,23 +20,8 @@ public class ChooseCardEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" - ");
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Player p : tgtPlayers) {
for (final Player p : getTargetPlayers(sa, params)) {
sb.append(p).append(" ");
}
sb.append("chooses a card.");
@@ -51,14 +34,9 @@ public class ChooseCardEffect extends SpellEffect {
final Card host = sa.getSourceCard();
final ArrayList<Card> chosen = new ArrayList<Card>();
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
ZoneType choiceZone = ZoneType.Battlefield;
if (params.containsKey("ChoiceZone")) {
choiceZone = ZoneType.smartValueOf(params.get("ChoiceZone"));

View File

@@ -10,10 +10,8 @@ import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -29,22 +27,7 @@ public class ChooseCardNameEffect extends SpellEffect {
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" - ");
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Player p : tgtPlayers) {
for (final Player p : getTargetPlayers(sa, params)) {
sb.append(p).append(" ");
}
sb.append("names a card.");
@@ -56,14 +39,8 @@ public class ChooseCardNameEffect extends SpellEffect {
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
final Card host = sa.getSourceCard();
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
String valid = "Card";
String validDesc = "card";

View File

@@ -8,10 +8,8 @@ import forge.CardLists;
import forge.CardPredicates;
import forge.Constant;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -24,22 +22,7 @@ public class ChooseColorEffect extends SpellEffect {
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard()).append(" - ");
} else {
sb.append(" ");
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Player p : tgtPlayers) {
for (final Player p : getTargetPlayers(sa, params)) {
sb.append(p).append(" ");
}
sb.append("chooses a color");
@@ -55,14 +38,9 @@ public class ChooseColorEffect extends SpellEffect {
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
final Card card = sa.getSourceCard();
ArrayList<Player> tgtPlayers;
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Player p : tgtPlayers) {
if ((tgt == null) || p.canBeTargetedBy(sa)) {

View File

@@ -1,8 +1,8 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
@@ -22,32 +22,11 @@ public class ChooseGenericEffect extends SpellEffect {
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard()).append(" - ");
} else {
sb.append(" ");
}
if (params.containsKey("StackDescription")) {
sb.append(params.get("StackDescription"));
}
else {
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Player p : tgtPlayers) {
sb.append(p).append(" ");
}
sb.append("chooses from a list.");
for (final Player p : getTargetPlayers(sa, params)) {
sb.append(p).append(" ");
}
sb.append("chooses from a list.");
return sb.toString();
}
@@ -60,14 +39,9 @@ public class ChooseGenericEffect extends SpellEffect {
choices.put(s, theseParams.get("ChoiceDescription"));
}
ArrayList<Player> tgtPlayers;
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
final Target tgt = sa.getTarget();
if (!params.containsKey("Defined")) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Player p : tgtPlayers) {
if (tgt != null && !p.canBeTargetedBy(sa)) {

View File

@@ -1,16 +1,14 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Random;
import javax.swing.JOptionPane;
import forge.Card;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -26,22 +24,7 @@ public class ChooseNumberEffect extends SpellEffect
protected String getStackDescription(Map<String, String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" - ");
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Player p : tgtPlayers) {
for (final Player p : getTargetPlayers(sa, params)) {
sb.append(p).append(" ");
}
sb.append("chooses a number.");
@@ -82,14 +65,8 @@ public class ChooseNumberEffect extends SpellEffect
}
}
ArrayList<Player> tgtPlayers;
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Player p : tgtPlayers) {
if ((tgt == null) || p.canBeTargetedBy(sa)) {

View File

@@ -1,12 +1,12 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -17,23 +17,8 @@ public class ChoosePlayerEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" - ");
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Player p : tgtPlayers) {
for (final Player p : getTargetPlayers(sa, params)) {
sb.append(p).append(" ");
}
sb.append("chooses a player.");
@@ -45,14 +30,9 @@ public class ChoosePlayerEffect extends SpellEffect {
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
final Card card = sa.getSourceCard();
ArrayList<Player> tgtPlayers;
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
final ArrayList<Player> choices = params.containsKey("Choices") ? AbilityFactory.getDefinedPlayers(
sa.getSourceCard(), params.get("Choices"), sa) : new ArrayList<Player>(Singletons.getModel().getGame().getPlayers());

View File

@@ -2,16 +2,15 @@ package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.CardUtil;
import forge.Constant;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -24,23 +23,8 @@ public class ChooseTypeEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard()).append(" - ");
} else {
sb.append(" ");
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Player p : tgtPlayers) {
for (final Player p : getTargetPlayers(sa, params)) {
sb.append(p).append(" ");
}
sb.append("chooses a type.");
@@ -56,15 +40,9 @@ public class ChooseTypeEffect extends SpellEffect {
if (params.containsKey("InvalidTypes")) {
invalidTypes.addAll(Arrays.asList(params.get("InvalidTypes").split(",")));
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
for (final Player p : tgtPlayers) {
if ((tgt == null) || p.canBeTargetedBy(sa)) {

View File

@@ -57,19 +57,4 @@ public class ClashEffect extends SpellEffect {
Singletons.getModel().getGame().getTriggerHandler().runTrigger(TriggerType.Clashed, runParams);
}
// *************************************************************************
// ************************* FlipACoin *************************************
// *************************************************************************
/**
* <p>
* flipGetStackDescription.
* </p>
*
* @param af
* a {@link forge.card.abilityfactory.AbilityFactory} object.
* @param sa
* a {@link forge.card.spellability.SpellAbility} object.
* @return a {@link java.lang.String} object.
*/
}

View File

@@ -2,6 +2,7 @@ package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import forge.Card;
@@ -12,7 +13,6 @@ import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.AbilityFactoryAttach;
import forge.card.abilityfactory.SpellEffect;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.card.trigger.Trigger;
@@ -23,22 +23,10 @@ public class CloneEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard().getName()).append(" - ");
}
final Target tgt = sa.getTarget();
ArrayList<Card> tgts;
if (tgt != null) {
tgts = tgt.getTargetCards();
} else {
tgts = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
}
final StringBuilder sb = new StringBuilder();
final List<Card> tgts = getTargetCards(sa, params);
sb.append(sa.getSourceCard());
sb.append(" becomes a copy of ");
if (!tgts.isEmpty()) {

View File

@@ -6,7 +6,6 @@ import java.util.Map;
import forge.Card;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -19,7 +18,6 @@ public class ControlExchangeEffect extends SpellEffect {
*/
@Override
protected String getStackDescription(Map<String, String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
Card object1 = null;
Card object2 = null;
final Target tgt = sa.getTarget();
@@ -32,15 +30,8 @@ public class ControlExchangeEffect extends SpellEffect {
} else if (tgts.size() > 1) {
object2 = tgts.get(1);
}
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" - ");
}
sb.append(object1 + " exchanges controller with " + object2);
return sb.toString();
return object1 + " exchanges controller with " + object2;
}
/* (non-Javadoc)

View File

@@ -12,7 +12,6 @@ import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.Ability;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -26,20 +25,8 @@ public class ControlGainEffect extends SpellEffect {
protected String getStackDescription(Map<String, String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard()).append(" - ");
} else {
sb.append(" ");
}
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if ((tgt != null) && !params.containsKey("Defined")) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
}
ArrayList<Player> newController = AbilityFactory.getDefinedPlayers(sa.getSourceCard(),
params.get("NewController"), sa);
@@ -52,7 +39,7 @@ public class ControlGainEffect extends SpellEffect {
sb.append(newController).append(" gains control of ");
for (final Card c : tgtCards) {
for (final Card c : getTargetCards(sa, params)) {
sb.append(" ");
if (c.isFaceDown()) {
sb.append("Morph");
@@ -62,11 +49,6 @@ public class ControlGainEffect extends SpellEffect {
}
sb.append(".");
final AbilitySub abSub = sa.getSubAbility();
if (abSub != null) {
sb.append(abSub.getStackDescription());
}
return sb.toString();
}
@@ -111,11 +93,8 @@ public class ControlGainEffect extends SpellEffect {
if (params.containsKey("AllValid")) {
tgtCards = Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield);
tgtCards = AbilityFactory.filterListByType(tgtCards, params.get("AllValid"), sa);
} else if ((tgt != null) && !params.containsKey("Defined")) {
tgtCards.addAll(tgt.getTargetCards());
} else {
tgtCards.addAll(AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa));
}
} else
tgtCards = getTargetCards(sa, params);
ArrayList<Player> controllers = new ArrayList<Player>();

View File

@@ -3,6 +3,7 @@ package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import forge.Card;
import forge.CardCharacteristicName;
@@ -12,7 +13,6 @@ import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.Ability;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.item.CardDb;
@@ -23,22 +23,9 @@ public class CopyPermanentEffect extends SpellEffect {
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard()).append(" - ");
} else {
sb.append(" ");
}
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Card> tgtCards = getTargetCards(sa, params);
sb.append("Copy ");
final Iterator<Card> it = tgtCards.iterator();
while (it.hasNext()) {

View File

@@ -2,20 +2,56 @@ package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import forge.Card;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
import forge.gui.GuiChoose;
public class CopySpellEffect extends SpellEffect {
/**
* <p>
* copySpellStackDescription.
* </p>
*
* @param af
* a {@link forge.card.abilityfactory.AbilityFactory} object.
* @param sa
* a {@link forge.card.spellability.SpellAbility} object.
* @return a {@link java.lang.String} object.
*/
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
final List<SpellAbility> tgtSpells = getTargetSpellAbilities(sa, params);
sb.append("Copy ");
// TODO Someone fix this Description when Copying Charms
final Iterator<SpellAbility> it = tgtSpells.iterator();
while (it.hasNext()) {
sb.append(it.next().getSourceCard());
if (it.hasNext()) {
sb.append(", ");
}
}
int amount = 1;
if (params.containsKey("Amount")) {
amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("Amount"), sa);
}
if (amount > 1) {
sb.append(amount).append(" times");
}
sb.append(".");
// TODO probably add an optional "You may choose new targets..."
return sb.toString();
}
/* (non-Javadoc)
* @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility)
*/
@@ -33,14 +69,8 @@ public class CopySpellEffect extends SpellEffect {
controller = AbilityFactory.getDefinedPlayers(card, params.get("Controller"), sa).get(0);
}
ArrayList<SpellAbility> tgtSpells;
final List<SpellAbility> tgtSpells = getTargetSpellAbilities(sa, params);
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtSpells = tgt.getTargetSAs();
} else {
tgtSpells = AbilityFactory.getDefinedSpellAbilities(sa.getSourceCard(), params.get("Defined"), sa);
}
if (tgtSpells.size() == 0) {
return;
@@ -98,55 +128,4 @@ public class CopySpellEffect extends SpellEffect {
}
} // end resolve
/**
* <p>
* copySpellStackDescription.
* </p>
*
* @param af
* a {@link forge.card.abilityfactory.AbilityFactory} object.
* @param sa
* a {@link forge.card.spellability.SpellAbility} object.
* @return a {@link java.lang.String} object.
*/
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard().getName()).append(" - ");
} else {
sb.append(" ");
}
ArrayList<SpellAbility> tgtSpells;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtSpells = tgt.getTargetSAs();
} else {
tgtSpells = AbilityFactory.getDefinedSpellAbilities(sa.getSourceCard(), params.get("Defined"), sa);
}
sb.append("Copy ");
// TODO Someone fix this Description when Copying Charms
final Iterator<SpellAbility> it = tgtSpells.iterator();
while (it.hasNext()) {
sb.append(it.next().getSourceCard());
if (it.hasNext()) {
sb.append(", ");
}
}
int amount = 1;
if (params.containsKey("Amount")) {
amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("Amount"), sa);
}
if (amount > 1) {
sb.append(amount).append(" times");
}
sb.append(".");
// TODO probably add an optional "You may choose new targets..."
return sb.toString();
}
} // end class AbilityFactory_Copy

View File

@@ -1,27 +1,24 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import forge.Card;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellAbilityStackInstance;
import forge.card.spellability.SpellPermanent;
import forge.card.spellability.Target;
public class CounterEffect extends SpellEffect {
@Override
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
// TODO Before this resolves we should see if any of our targets are
// still on the stack
ArrayList<SpellAbility> sas;
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
final List<SpellAbility> sas;
final Target tgt = sa.getTarget();
if (params.containsKey("AllType")) {
sas = new ArrayList<SpellAbility>();
for (int i=0; i < Singletons.getModel().getGame().getStack().size(); i++) {
@@ -36,12 +33,52 @@ public class CounterEffect extends SpellEffect {
}
sas.add(spell);
}
} else if (tgt != null) {
sas = tgt.getTargetSAs();
} else {
sas = AbilityFactory.getDefinedSpellAbilities(sa.getSourceCard(), params.get("Defined"), sa);
} else
sas = getTargetSpellAbilities(sa, params);
sb.append("countering");
boolean isAbility = false;
for (final SpellAbility tgtSA : sas) {
sb.append(" ");
sb.append(tgtSA.getSourceCard());
isAbility = tgtSA.isAbility();
if (isAbility) {
sb.append("'s ability");
}
}
if (isAbility && params.containsKey("DestroyPermanent")) {
sb.append(" and destroy it");
}
sb.append(".");
return sb.toString();
} // end counterStackDescription
@Override
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
// TODO Before this resolves we should see if any of our targets are
// still on the stack
final List<SpellAbility> sas;
if (params.containsKey("AllType")) {
sas = new ArrayList<SpellAbility>();
for (int i=0; i < Singletons.getModel().getGame().getStack().size(); i++) {
SpellAbility spell = Singletons.getModel().getGame().getStack().peekAbility(i);
if (params.get("AllType").equals("Spell") && !spell.isSpell()) {
continue;
}
if (params.containsKey("AllValid")) {
if (!spell.getSourceCard().isValid(params.get("AllValid"), sa.getActivatingPlayer(), sa.getSourceCard())) {
continue;
}
}
sas.add(spell);
}
} else
sas = getTargetSpellAbilities(sa, params);
if (params.containsKey("ForgetOtherTargets")) {
if (params.get("ForgetOtherTargets").equals("True")) {
sa.getSourceCard().clearRemembered();
@@ -75,60 +112,6 @@ public class CounterEffect extends SpellEffect {
}
} // end counterResolve
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard().getName()).append(" - ");
} else {
sb.append(" ");
}
ArrayList<SpellAbility> sas;
final Target tgt = sa.getTarget();
if (params.containsKey("AllType")) {
sas = new ArrayList<SpellAbility>();
for (int i=0; i < Singletons.getModel().getGame().getStack().size(); i++) {
SpellAbility spell = Singletons.getModel().getGame().getStack().peekAbility(i);
if (params.get("AllType").equals("Spell") && !spell.isSpell()) {
continue;
}
if (params.containsKey("AllValid")) {
if (!spell.getSourceCard().isValid(params.get("AllValid"), sa.getActivatingPlayer(), sa.getSourceCard())) {
continue;
}
}
sas.add(spell);
}
} else if (tgt != null) {
sas = tgt.getTargetSAs();
} else {
sas = AbilityFactory.getDefinedSpellAbilities(sa.getSourceCard(), params.get("Defined"), sa);
}
sb.append("countering");
boolean isAbility = false;
for (final SpellAbility tgtSA : sas) {
sb.append(" ");
sb.append(tgtSA.getSourceCard());
isAbility = tgtSA.isAbility();
if (isAbility) {
sb.append("'s ability");
}
}
if (isAbility && params.containsKey("DestroyPermanent")) {
sb.append(" and destroy it");
}
sb.append(".");
return sb.toString();
} // end counterStackDescription
/**
* <p>
* removeFromStack.

View File

@@ -1,12 +1,12 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.Counters;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
@@ -17,12 +17,6 @@ public class CountersMoveEffect extends SpellEffect {
final StringBuilder sb = new StringBuilder();
final Card host = sa.getSourceCard();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard().getName()).append(" - ");
}
Card source = null;
ArrayList<Card> srcCards;
final Target tgt = sa.getTarget();
@@ -34,12 +28,7 @@ public class CountersMoveEffect extends SpellEffect {
if (srcCards.size() > 0) {
source = srcCards.get(0);
}
ArrayList<Card> tgtCards;
if (!params.containsKey("Defined") && tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(host, params.get("Defined"), sa);
}
final List<Card> tgtCards = getTargetCards(sa, params);
final Counters cType = Counters.valueOf(params.get("CounterType"));
final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("CounterNum"), sa);

View File

@@ -14,7 +14,6 @@ import forge.Counters;
import forge.Singletons;
import forge.card.abilityfactory.SpellEffect;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.control.input.Input;
import forge.game.player.Player;
@@ -28,11 +27,6 @@ public class CountersProliferateEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard()).append(" - ");
} else {
sb.append(" ");
}
sb.append("Proliferate.");
sb.append(" (You choose any number of permanents and/or players with ");
sb.append("counters on them, then give each another counter of a kind already there.)");

View File

@@ -8,7 +8,6 @@ import forge.Counters;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -16,6 +15,28 @@ import forge.game.zone.ZoneType;
public class CountersPutAllEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
final Counters cType = Counters.valueOf(params.get("CounterType"));
final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("CounterNum"), sa);
final String zone = params.containsKey("ValidZone") ? params.get("ValidZone") : "Battlefield";
sb.append("Put ").append(amount).append(" ").append(cType.getName()).append(" counter");
if (amount != 1) {
sb.append("s");
}
sb.append(" on each valid ");
if (zone.matches("Battlefield")) {
sb.append("permanent.");
} else {
sb.append("card in ").append(zone).append(".");
}
return sb.toString();
}
@Override
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
final String type = params.get("CounterType");
@@ -42,32 +63,4 @@ public class CountersPutAllEffect extends SpellEffect {
}
}
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard().getName()).append(" - ");
} else {
sb.append(" ");
}
final Counters cType = Counters.valueOf(params.get("CounterType"));
final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("CounterNum"), sa);
final String zone = params.containsKey("ValidZone") ? params.get("ValidZone") : "Battlefield";
sb.append("Put ").append(amount).append(" ").append(cType.getName()).append(" counter");
if (amount != 1) {
sb.append("s");
}
sb.append(" on each valid ");
if (zone.matches("Battlefield")) {
sb.append("permanent.");
} else {
sb.append("card in ").append(zone).append(".");
}
return sb.toString();
}
}

View File

@@ -2,13 +2,13 @@ package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import forge.Card;
import forge.Counters;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.zone.Zone;
@@ -16,6 +16,44 @@ import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
public class CountersPutEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
final Card card = sa.getSourceCard();
final Counters cType = Counters.valueOf(params.get("CounterType"));
final int amount = AbilityFactory.calculateAmount(card, params.get("CounterNum"), sa);
sb.append("Put ");
if (params.containsKey("UpTo")) {
sb.append("up to ");
}
sb.append(amount).append(" ").append(cType.getName()).append(" counter");
if (amount != 1) {
sb.append("s");
}
sb.append(" on ");
final Target tgt = sa.getTarget();
final List<Card> tgtCards = tgt != null ? tgt.getTargetCards() : AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
final Iterator<Card> it = tgtCards.iterator();
while (it.hasNext()) {
final Card tgtC = it.next();
if (tgtC.isFaceDown()) {
sb.append("Morph");
} else {
sb.append(tgtC);
}
if (it.hasNext()) {
sb.append(", ");
}
}
sb.append(".");
return sb.toString();
}
@Override
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
final Card card = sa.getSourceCard();
@@ -63,55 +101,4 @@ public class CountersPutEffect extends SpellEffect {
}
}
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
final Card card = sa.getSourceCard();
if (!(sa instanceof AbilitySub)) {
sb.append(card.getName()).append(" - ");
} else {
sb.append(" ");
}
if (params.containsKey("StackDescription")) {
sb.append(params.get("StackDescription"));
} else {
final Counters cType = Counters.valueOf(params.get("CounterType"));
final int amount = AbilityFactory.calculateAmount(card, params.get("CounterNum"), sa);
sb.append("Put ");
if (params.containsKey("UpTo")) {
sb.append("up to ");
}
sb.append(amount).append(" ").append(cType.getName()).append(" counter");
if (amount != 1) {
sb.append("s");
}
sb.append(" on ");
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(card, params.get("Defined"), sa);
}
final Iterator<Card> it = tgtCards.iterator();
while (it.hasNext()) {
final Card tgtC = it.next();
if (tgtC.isFaceDown()) {
sb.append("Morph");
} else {
sb.append(tgtC);
}
if (it.hasNext()) {
sb.append(", ");
}
}
sb.append(".");
}
return sb.toString();
}
}

View File

@@ -8,7 +8,6 @@ import forge.Counters;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -18,13 +17,7 @@ public class CountersRemoveAllEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard()).append(" - ");
} else {
sb.append(" ");
}
final Counters cType = Counters.valueOf(params.get("CounterType"));
final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("CounterNum"), sa);
final String zone = params.containsKey("ValidZone") ? params.get("ValidZone") : "Battlefield";

View File

@@ -9,7 +9,6 @@ import forge.Counters;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.zone.Zone;
@@ -17,6 +16,43 @@ import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
public class CountersRemoveEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
final String counterName = params.get("CounterType");
final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("CounterNum"), sa);
sb.append("Remove ");
if (params.containsKey("UpTo")) {
sb.append("up to ");
}
if ("Any".matches(counterName)) {
if (amount == 1) {
sb.append("a counter");
}
else {
sb.append(amount).append(" ").append(" counter");
}
}
else {
sb.append(amount).append(" ").append(Counters.valueOf(counterName).getName()).append(" counter");
}
if (amount != 1) {
sb.append("s");
}
sb.append(" from");
for (final Card c : getTargetCards(sa, params)) {
sb.append(" ").append(c);
}
sb.append(".");
return sb.toString();
}
@Override
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
@@ -27,20 +63,13 @@ public class CountersRemoveEffect extends SpellEffect {
counterAmount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("CounterNum"), sa);
}
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(card, params.get("Defined"), sa);
}
boolean rememberRemoved = false;
if (params.containsKey("RememberRemoved")) {
rememberRemoved = true;
}
for (final Card tgtCard : tgtCards) {
for (final Card tgtCard : getTargetCards(sa, params)) {
if ((tgt == null) || tgtCard.canBeTargetedBy(sa)) {
final Zone zone = Singletons.getModel().getGame().getZoneOf(tgtCard);
if (params.get("CounterNum").equals("All")) {
@@ -129,56 +158,4 @@ public class CountersRemoveEffect extends SpellEffect {
}
}
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final Card card = sa.getSourceCard();
final StringBuilder sb = new StringBuilder();
if (!(sa instanceof AbilitySub)) {
sb.append(card).append(" - ");
} else {
sb.append(" ");
}
final String counterName = params.get("CounterType");
final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("CounterNum"), sa);
sb.append("Remove ");
if (params.containsKey("UpTo")) {
sb.append("up to ");
}
if ("Any".matches(counterName)) {
if (amount == 1) {
sb.append("a counter");
}
else {
sb.append(amount).append(" ").append(" counter");
}
}
else {
sb.append(amount).append(" ").append(Counters.valueOf(counterName).getName()).append(" counter");
}
if (amount != 1) {
sb.append("s");
}
sb.append(" from");
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(card, params.get("Defined"), sa);
}
for (final Card c : tgtCards) {
sb.append(" ").append(c);
}
sb.append(".");
return sb.toString();
}
}

View File

@@ -8,7 +8,6 @@ import forge.CardLists;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -39,27 +38,20 @@ public class DamageAllEffect extends SpellEffect {
final String damage = params.get("NumDmg");
final int dmg = AbilityFactory.calculateAmount(sa.getSourceCard(), damage, sa);
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard().getName()).append(" -");
}
sb.append(" ");
if (params.containsKey("StackDescription")) {
sb.append(params.get("StackDescription"));
final ArrayList<Card> definedSources = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("DamageSource"), sa);
final Card source = definedSources.get(0);
if (source != sa.getSourceCard()) {
sb.append(source.toString()).append(" deals");
} else {
final ArrayList<Card> definedSources = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("DamageSource"), sa);
final Card source = definedSources.get(0);
if (source != sa.getSourceCard()) {
sb.append(source.toString()).append(" deals");
} else {
sb.append("Deals");
}
sb.append(" ").append(dmg).append(" damage to ").append(desc);
sb.append("Deals");
}
return sb.toString();
sb.append(" ").append(dmg).append(" damage to ").append(desc);
return sb.toString();
}
/**

View File

@@ -2,13 +2,13 @@ package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import forge.Card;
import forge.CardUtil;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.game.player.Player;
@@ -24,66 +24,53 @@ public class DamageDealEffect extends SpellEffect {
final String damage = params.get("NumDmg");
final int dmg = AbilityFactory.calculateAmount(sa.getSourceCard(), damage, sa);
ArrayList<Object> tgts;
if (sa.getTarget() == null) {
tgts = AbilityFactory.getDefinedObjects(sa.getSourceCard(), params.get("Defined"), sa);
} else {
tgts = sa.getTarget().getTargets();
}
List<Object> tgts = getTargetObjects(sa, params);
if (tgts.size() > 0) {
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard().getName()).append(" -");
final String conditionDesc = params.get("ConditionDescription");
if (conditionDesc != null) {
sb.append(conditionDesc).append(" ");
}
sb.append(" ");
if (params.containsKey("StackDescription")) {
sb.append(params.get("StackDescription"));
final ArrayList<Card> definedSources = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("DamageSource"), sa);
final Card source = definedSources.get(0);
if (source != sa.getSourceCard()) {
sb.append(source.toString()).append(" deals");
} else {
sb.append("Deals");
}
else {
final String conditionDesc = params.get("ConditionDescription");
if (conditionDesc != null) {
sb.append(conditionDesc).append(" ");
sb.append(" ").append(dmg).append(" damage ");
if (params.containsKey("DivideEvenly")) {
sb.append("divided evenly (rounded down) ");
}
sb.append("to");
for (int i = 0; i < tgts.size(); i++) {
sb.append(" ");
final Object o = tgts.get(i);
if ((o instanceof Card) || (o instanceof Player)) {
sb.append(o.toString());
}
final ArrayList<Card> definedSources = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("DamageSource"), sa);
final Card source = definedSources.get(0);
if (source != sa.getSourceCard()) {
sb.append(source.toString()).append(" deals");
}
if (params.containsKey("Radiance")) {
sb.append(" and each other ").append(params.get("ValidTgts"))
.append(" that shares a color with ");
if (tgts.size() > 1) {
sb.append("them");
} else {
sb.append("Deals");
sb.append("it");
}
sb.append(" ").append(dmg).append(" damage ");
if (params.containsKey("DivideEvenly")) {
sb.append("divided evenly (rounded down) ");
}
sb.append("to");
for (int i = 0; i < tgts.size(); i++) {
sb.append(" ");
final Object o = tgts.get(i);
if ((o instanceof Card) || (o instanceof Player)) {
sb.append(o.toString());
}
}
if (params.containsKey("Radiance")) {
sb.append(" and each other ").append(params.get("ValidTgts"))
.append(" that shares a color with ");
if (tgts.size() > 1) {
sb.append("them");
} else {
sb.append("it");
}
}
sb.append(". ");
}
sb.append(". ");
}
return sb.toString();

View File

@@ -10,9 +10,7 @@ import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
@@ -27,21 +25,6 @@ public class DamageEachEffect extends SpellEffect {
final String damage = params.get("NumDmg");
final int iDmg = AbilityFactory.calculateAmount(sa.getSourceCard(), damage, sa);
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" - ");
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("DefinedPlayers"), sa);
}
String desc = params.get("ValidCards");
if (params.containsKey("ValidDescription")) {
desc = params.get("ValidDescription");
@@ -58,7 +41,7 @@ public class DamageEachEffect extends SpellEffect {
sb.append(params.get("StackDescription"));
} else {
sb.append("Each ").append(desc).append(" deals ").append(dmg).append(" to ");
for (final Player p : tgtPlayers) {
for (final Player p : getTargetPlayers(sa, params)) {
sb.append(p);
}
if (params.containsKey("DefinedCards")) {

View File

@@ -8,15 +8,11 @@ import forge.Card;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
public class DamagePreventAllEffect extends SpellEffect {
/* (non-Javadoc)
* @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility)
*/
/* (non-Javadoc)
* @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility)
@@ -56,20 +52,11 @@ public class DamagePreventAllEffect extends SpellEffect {
@Override
protected String getStackDescription(Map<String, String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
final Card host = sa.getAbilityFactory().getHostCard();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(host).append(" - ");
}
String desc = sa.getDescription();
if (desc.contains(":")) {
desc = desc.split(":")[1];
}
sb.append(desc);
return sb.toString();

View File

@@ -1,13 +1,13 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import forge.Card;
import forge.CardUtil;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.game.player.Player;
@@ -16,21 +16,9 @@ public class DamagePreventEffect extends SpellEffect
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
final Card host = sa.getAbilityFactory().getHostCard();
ArrayList<Object> tgts;
if (sa.getTarget() == null) {
tgts = AbilityFactory.getDefinedObjects(sa.getSourceCard(), params.get("Defined"), sa);
} else {
tgts = sa.getTarget().getTargets();
}
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(host).append(" - ");
}
final List<Object> tgts = getTargetObjects(sa, params);
sb.append("Prevent the next ");
sb.append(params.get("Amount"));
sb.append(" damage that would be dealt to ");

View File

@@ -10,7 +10,6 @@ import forge.CardLists;
import forge.Command;
import forge.Singletons;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.game.zone.ZoneType;
@@ -21,23 +20,11 @@ public class DebuffAllEffect extends SpellEffect {
*/
@Override
protected String getStackDescription(Map<String, String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
String desc = "";
if (params.containsKey("SpellDescription")) {
desc = params.get("SpellDescription");
} else if (params.containsKey("DebuffAllDescription")) {
desc = params.get("DebuffAllDescription");
if (params.containsKey("DebuffAllDescription")) {
return params.get("DebuffAllDescription");
}
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" - ");
}
sb.append(desc);
return sb.toString();
return "";
} // debuffAllStackDescription()
/**

View File

@@ -8,34 +8,21 @@ import java.util.List;
import forge.Card;
import forge.Command;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
public class DebuffEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final Card host = sa.getAbilityFactory().getHostCard();
final List<String> kws = params.containsKey("Keywords") ? Arrays.asList(params.get("Keywords").split(" & ")) : new ArrayList<String>();
final StringBuilder sb = new StringBuilder();
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Card> tgtCards = getTargetCards(sa, params);
if (tgtCards.size() > 0) {
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(host).append(" - ");
}
final Iterator<Card> it = tgtCards.iterator();
while (it.hasNext()) {
@@ -68,19 +55,9 @@ public class DebuffEffect extends SpellEffect {
@Override
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
final Card host = sa.getAbilityFactory().getHostCard();
final List<String> kws = params.containsKey("Keywords") ? Arrays.asList(params.get("Keywords").split(" & ")) : new ArrayList<String>();
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(host, params.get("Defined"), sa);
}
for (final Card tgtC : tgtCards) {
for (final Card tgtC : getTargetCards(sa, params)) {
final ArrayList<String> hadIntrinsic = new ArrayList<String>();
if (tgtC.isInPlay() && tgtC.canBeTargetedBy(sa)) {
for (final String kw : kws) {

View File

@@ -2,7 +2,6 @@ package forge.card.abilityfactory.effects;
import forge.Singletons;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.trigger.Trigger;
import forge.card.trigger.TriggerHandler;
@@ -14,21 +13,11 @@ public class DelayedTriggerEffect extends SpellEffect {
*/
@Override
protected String getStackDescription(java.util.Map<String,String> mapParams, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" - ");
if (mapParams.containsKey("TriggerDescription")) {
return mapParams.get("TriggerDescription");
}
if (mapParams.containsKey("SpellDescription")) {
sb.append(mapParams.get("SpellDescription"));
} else if (mapParams.containsKey("TriggerDescription")) {
sb.append(mapParams.get("TriggerDescription"));
}
return sb.toString();
return "";
}

View File

@@ -9,7 +9,6 @@ import forge.CardLists;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -17,6 +16,37 @@ import forge.game.zone.ZoneType;
public class DestroyAllEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
final boolean noRegen = params.containsKey("NoRegen");
final String conditionDesc = params.get("ConditionDescription");
if (conditionDesc != null) {
sb.append(conditionDesc).append(" ");
}
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = new ArrayList<Card>();
tgtCards.add(sa.getSourceCard());
}
sb.append(sa.getSourceCard().getName()).append(" - Destroy permanents.");
if (noRegen) {
sb.append(" They can't be regenerated");
}
return sb.toString();
}
/* (non-Javadoc)
* @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility)
*/
@@ -77,43 +107,4 @@ public class DestroyAllEffect extends SpellEffect {
}
}
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
final String name = sa.getAbilityFactory().getHostCard().getName();
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard().getName()).append(" - ");
} else {
sb.append(" ");
}
final boolean noRegen = params.containsKey("NoRegen");
if (params.containsKey("SpellDescription")) {
sb.append(params.get("SpellDescription"));
} else {
final String conditionDesc = params.get("ConditionDescription");
if (conditionDesc != null) {
sb.append(conditionDesc).append(" ");
}
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = new ArrayList<Card>();
tgtCards.add(sa.getSourceCard());
}
sb.append(name).append(" - Destroy permanents.");
if (noRegen) {
sb.append(" They can't be regenerated");
}
}
return sb.toString();
}
}

View File

@@ -2,12 +2,12 @@ package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import forge.Card;
import forge.CardUtil;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
@@ -21,27 +21,13 @@ public class DestroyEffect extends SpellEffect {
protected String getStackDescription(Map<String, String> params, SpellAbility sa) {
final boolean noRegen = params.containsKey("NoRegen");
final StringBuilder sb = new StringBuilder();
final Card host = sa.getAbilityFactory().getHostCard();
final String conditionDesc = params.get("ConditionDescription");
if (conditionDesc != null) {
sb.append(conditionDesc).append(" ");
}
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
}
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(host).append(" - ");
}
final List<Card> tgtCards = getTargetCards(sa, params);
if (params.containsKey("Sacrifice")) {
sb.append("Sacrifice ");
@@ -104,15 +90,10 @@ public class DestroyEffect extends SpellEffect {
final boolean noRegen = params.containsKey("NoRegen");
final boolean sac = params.containsKey("Sacrifice");
ArrayList<Card> tgtCards;
final List<Card> tgtCards = getTargetCards(sa, params);
final ArrayList<Card> untargetedCards = new ArrayList<Card>();
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
}
if (params.containsKey("Radiance")) {
for (final Card c : CardUtil.getRadiance(card, tgtCards.get(0),

View File

@@ -13,7 +13,6 @@ import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -29,25 +28,9 @@ public class DigEffect extends SpellEffect {
final StringBuilder sb = new StringBuilder();
final int numToDig = AbilityFactory.calculateAmount(host, params.get("DigNum"), sa);
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard()).append(" - ");
} else {
sb.append(" ");
}
if (params.containsKey("StackDescription")) {
sb.append(params.get("StackDescription"));
return sb.toString();
}
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
sb.append(host.getController()).append(" looks at the top ").append(numToDig);
sb.append(" card");
@@ -104,14 +87,8 @@ public class DigEffect extends SpellEffect {
}
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
if (params.containsKey("Choser")) {
final ArrayList<Player> chosers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(),

View File

@@ -9,7 +9,6 @@ import forge.Card;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -25,7 +24,6 @@ public class DigUntilEffect extends SpellEffect {
*/
@Override
protected String getStackDescription(Map<String, String> params, SpellAbility sa) {
final Card host = sa.getSourceCard();
final StringBuilder sb = new StringBuilder();
String desc = "Card";
@@ -37,23 +35,8 @@ public class DigUntilEffect extends SpellEffect {
if (params.containsKey("Amount")) {
untilAmount = AbilityFactory.calculateAmount(sa.getAbilityFactory().getHostCard(), params.get("Amount"), sa);
}
if (!(sa instanceof AbilitySub)) {
sb.append(host).append(" - ");
} else {
sb.append(" ");
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Player pl : tgtPlayers) {
for (final Player pl : getTargetPlayers(sa, params)) {
sb.append(pl).append(" ");
}
@@ -110,21 +93,14 @@ public class DigUntilEffect extends SpellEffect {
final boolean remember = params.containsKey("RememberFound");
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(host, params.get("Defined"), sa);
}
final ZoneType foundDest = ZoneType.smartValueOf(params.get("FoundDestination"));
final int foundLibPos = AbilityFactory.calculateAmount(host, params.get("FoundLibraryPosition"), sa);
final ZoneType revealedDest = ZoneType.smartValueOf(params.get("RevealedDestination"));
final int revealedLibPos = AbilityFactory.calculateAmount(host, params.get("RevealedLibraryPosition"), sa);
for (final Player p : tgtPlayers) {
for (final Player p : getTargetPlayers(sa, params)) {
if ((tgt == null) || p.canBeTargetedBy(sa)) {
final List<Card> found = new ArrayList<Card>();
final List<Card> revealed = new ArrayList<Card>();

View File

@@ -12,7 +12,6 @@ import forge.CardUtil;
import forge.GameActionUtil;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.ComputerUtil;
@@ -26,20 +25,8 @@ public class DiscardEffect extends RevealEffectBase {
final String mode = params.get("Mode");
final StringBuilder sb = new StringBuilder();
ArrayList<Player> tgtPlayers;
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard().getName()).append(" - ");
} else {
sb.append(" ");
}
final String conditionDesc = params.get("ConditionDescription");
if (conditionDesc != null) {
@@ -103,18 +90,11 @@ public class DiscardEffect extends RevealEffectBase {
final Card source = sa.getSourceCard();
final String mode = params.get("Mode");
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Card> discarded = new ArrayList<Card>();
for (final Player p : tgtPlayers) {
for (final Player p : getTargetPlayers(sa, params)) {
if ((tgt == null) || p.canBeTargetedBy(sa)) {
if (mode.equals("Defined")) {
final ArrayList<Card> toDiscard = AbilityFactory.getDefinedCards(source, params.get("DefinedCards"),

View File

@@ -1,65 +1,36 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import forge.Card;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
public class DrainManaEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
sb.append(StringUtils.join(tgtPlayers, ", "));
sb.append(" empties his or her mana pool.");
return sb.toString();
}
@Override
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
final Card card = sa.getSourceCard();
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(card, params.get("Defined"), sa);
}
for (final Player p : tgtPlayers) {
for (final Player p : getTargetPlayers(sa, params)) {
if ((tgt == null) || p.canBeTargetedBy(sa)) {
p.getManaPool().clearPool(false);
}
}
}
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" - ");
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
final Iterator<Player> it = tgtPlayers.iterator();
while (it.hasNext()) {
sb.append(it.next());
if (it.hasNext()) {
sb.append(", ");
}
}
sb.append(" empties his or her mana pool.");
return sb.toString();
}
}

View File

@@ -1,14 +1,13 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import forge.Card;
import forge.GameActionUtil;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -20,35 +19,18 @@ public class DrawEffect extends SpellEffect {
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard().getName()).append(" - ");
} else {
sb.append(" ");
}
final String conditionDesc = params.get("ConditionDescription");
if (conditionDesc != null) {
sb.append(conditionDesc).append(" ");
}
ArrayList<Player> tgtPlayers;
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
final Target tgt = sa.getTarget();
if (!params.containsKey("Defined") && tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
if (tgtPlayers.size() > 0) {
final Iterator<Player> it = tgtPlayers.iterator();
while (it.hasNext()) {
sb.append(it.next().toString());
if (it.hasNext()) {
sb.append(" and ");
}
}
if (!tgtPlayers.isEmpty()) {
sb.append(StringUtils.join(tgtPlayers, " and "));
int numCards = 1;
if (params.containsKey("NumCards")) {
numCards = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumCards"), sa);
@@ -81,19 +63,12 @@ public class DrawEffect extends SpellEffect {
numCards = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumCards"), sa);
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (!params.containsKey("Defined") && tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(source, params.get("Defined"), sa);
}
final boolean optional = params.containsKey("OptionalDecider");
final boolean slowDraw = params.containsKey("NextUpkeep");
for (final Player p : tgtPlayers) {
for (final Player p : getTargetPlayers(sa, params)) {
if ((tgt == null) || p.canBeTargetedBy(sa)) {
if (optional) {
if (p.isComputer()) {

View File

@@ -9,7 +9,6 @@ import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.replacement.ReplacementEffect;
import forge.card.replacement.ReplacementHandler;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.trigger.Trigger;
import forge.card.trigger.TriggerHandler;
@@ -20,17 +19,7 @@ public class EffectEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard().getName()).append(" - ");
}
sb.append(sa.getDescription());
return sb.toString();
return sa.getDescription();
}
/**

View File

@@ -15,42 +15,38 @@ public class FightEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (params.containsKey("StackDescription")) {
sb.append(params.get("StackDescription").replaceAll("CARDNAME", sa.getSourceCard().getName()));
Card fighter1 = null;
Card fighter2 = null;
final Target tgt = sa.getTarget();
ArrayList<Card> tgts = null;
if (tgt != null) {
tgts = tgt.getTargetCards();
if (tgts.size() > 0) {
fighter1 = tgts.get(0);
}
}
else {
Card fighter1 = null;
Card fighter2 = null;
final Target tgt = sa.getTarget();
ArrayList<Card> tgts = null;
if (tgt != null) {
tgts = tgt.getTargetCards();
if (tgts.size() > 0) {
fighter1 = tgts.get(0);
}
if (params.containsKey("Defined")) {
ArrayList<Card> defined = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
// Allow both fighters to come from defined list if first fighter not already found
if (defined.size() > 1 && fighter1 == null) {
fighter1 = defined.get(0);
fighter2 = defined.get(1);
}
if (params.containsKey("Defined")) {
ArrayList<Card> defined = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
// Allow both fighters to come from defined list if first fighter not already found
if (defined.size() > 1 && fighter1 == null) {
fighter1 = defined.get(0);
fighter2 = defined.get(1);
}
else {
fighter2 = defined.get(0);
}
} else if (tgts.size() > 1) {
fighter2 = tgts.get(1);
else {
fighter2 = defined.get(0);
}
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" - ");
}
sb.append(fighter1 + " fights " + fighter2);
} else if (tgts.size() > 1) {
fighter2 = tgts.get(1);
}
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" - ");
}
sb.append(fighter1 + " fights " + fighter2);
return sb.toString();
}

View File

@@ -24,12 +24,6 @@ public class FlipCoinEffect extends SpellEffect {
final StringBuilder sb = new StringBuilder();
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard()).append(" - ");
} else {
sb.append(" ");
}
sb.append(player).append(" flips a coin.");
return sb.toString();
}

View File

@@ -2,7 +2,6 @@ package forge.card.abilityfactory.effects;
import forge.Singletons;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
public class FogEffect extends SpellEffect {
@@ -10,17 +9,7 @@ public class FogEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard().getName()).append(" - ");
} else {
sb.append(" ");
}
sb.append(sa.getSourceCard().getController());
sb.append(" prevents all combat damage this turn.");
return sb.toString();
return sa.getSourceCard().getController() + " prevents all combat damage this turn.";
}

View File

@@ -1,14 +1,11 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import forge.Card;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.GameLossReason;
import forge.game.player.Player;
@@ -20,23 +17,9 @@ public class GameLossEffect extends SpellEffect {
@Override
protected String getStackDescription(Map<String, String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
final Card source = sa.getSourceCard();
if (!(sa instanceof AbilitySub)) {
sb.append(source.getName()).append(" - ");
} else {
sb.append(" ");
}
final Target tgt = sa.getTarget();
ArrayList<Player> players = null;
if (sa.getTarget() != null) {
players = tgt.getTargetPlayers();
} else {
players = AbilityFactory.getDefinedPlayers(source, params.get("Defined"), sa);
}
for (final Player p : players) {
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
for (final Player p : tgtPlayers) {
sb.append(p.getName()).append(" ");
}
@@ -48,15 +31,7 @@ public class GameLossEffect extends SpellEffect {
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
final Card card = sa.getAbilityFactory().getHostCard();
final Target tgt = sa.getTarget();
ArrayList<Player> players = null;
if (sa.getTarget() != null) {
players = tgt.getTargetPlayers();
} else {
players = AbilityFactory.getDefinedPlayers(card, params.get("Defined"), sa);
}
for (final Player p : players) {
for (final Player p : getTargetPlayers(sa, params)) {
p.loseConditionMet(GameLossReason.SpellEffect, card.getName());
}
}

View File

@@ -1,12 +1,9 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.Map;
import forge.Card;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.game.player.Player;
@@ -18,29 +15,11 @@ public class GameWinEffect extends SpellEffect {
*/
@Override
public void resolve(Map<String, String> params, SpellAbility sa) {
final Card card = sa.getAbilityFactory().getHostCard();
final ArrayList<Player> players = AbilityFactory.getDefinedPlayers(card, params.get("Defined"), sa);
for (final Player p : players) {
for (final Player p : getTargetPlayers(sa, params)) {
p.altWinBySpellEffect(card.getName());
}
}
@Override
protected String getStackDescription(java.util.Map<String, String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard().getName()).append(" - ");
} else {
sb.append(" ");
}
// Let the spell description also be the stack description
sb.append(sa.getDescription());
return sb.toString();
}
}

View File

@@ -1,14 +1,11 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import forge.Card;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
public class LifeExchangeEffect extends SpellEffect {
@@ -30,21 +27,8 @@ public class LifeExchangeEffect extends SpellEffect {
protected String getStackDescription(Map<String, String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
final Player activatingPlayer = sa.getActivatingPlayer();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" -");
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
if (tgtPlayers.size() == 1) {
sb.append(activatingPlayer).append(" exchanges life totals with ");
@@ -66,14 +50,7 @@ public class LifeExchangeEffect extends SpellEffect {
Player p1;
Player p2;
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if ((tgt != null) && !params.containsKey("Defined")) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
if (tgtPlayers.size() == 1) {
p1 = sa.getActivatingPlayer();

View File

@@ -1,27 +1,15 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.Map;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
public class LifeGainEffect extends SpellEffect {
// *************************************************************************
// ************************ EXCHANGE LIFE **********************************
// *************************************************************************
// *************************************************************************
// ************************* LOSE LIFE *************************************
// *************************************************************************
/* (non-Javadoc)
* @see forge.card.abilityfactory.AbilityFactoryAlterLife.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility)
*/
@@ -30,36 +18,16 @@ public class LifeGainEffect extends SpellEffect {
final StringBuilder sb = new StringBuilder();
final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("LifeAmount"), sa);
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard().getName()).append(" - ");
} else {
sb.append(" ");
final String conditionDesc = params.get("ConditionDescription");
if (conditionDesc != null) {
sb.append(conditionDesc).append(" ");
}
if (params.containsKey("StackDescription")) {
sb.append(params.get("StackDescription"));
}
else {
final String conditionDesc = params.get("ConditionDescription");
if (conditionDesc != null) {
sb.append(conditionDesc).append(" ");
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null && !params.containsKey("Defined")) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Player player : tgtPlayers) {
sb.append(player).append(" ");
}
sb.append("gains ").append(amount).append(" life.");
for (final Player player : getTargetPlayers(sa, params)) {
sb.append(player).append(" ");
}
sb.append("gains ").append(amount).append(" life.");
return sb.toString();
}
@@ -69,19 +37,11 @@ public class LifeGainEffect extends SpellEffect {
*/
@Override
public void resolve(Map<String, String> params, SpellAbility sa) {
final int lifeAmount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("LifeAmount"), sa);
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if ((tgt != null) && !params.containsKey("Defined")) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Player p : tgtPlayers) {
for (final Player p : getTargetPlayers(sa, params)) {
if ((tgt == null) || p.canBeTargetedBy(sa)) {
p.gainLife(lifeAmount, sa.getSourceCard());
}

View File

@@ -1,11 +1,9 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.Map;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -20,27 +18,14 @@ public class LifeLoseEffect extends SpellEffect {
final StringBuilder sb = new StringBuilder();
final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("LifeAmount"), sa);
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard().getName()).append(" - ");
} else {
sb.append(" ");
}
final String conditionDesc = params.get("ConditionDescription");
if (conditionDesc != null) {
sb.append(conditionDesc).append(" ");
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Player player : tgtPlayers) {
for (final Player player : getTargetPlayers(sa, params)) {
sb.append(player).append(" ");
}
@@ -58,17 +43,9 @@ public class LifeLoseEffect extends SpellEffect {
int lifeLost = 0;
final int lifeAmount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("LifeAmount"), sa);
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Player p : tgtPlayers) {
for (final Player p : getTargetPlayers(sa, params)) {
if ((tgt == null) || p.canBeTargetedBy(sa)) {
lifeLost += p.loseLife(lifeAmount, sa.getSourceCard());
}

View File

@@ -1,11 +1,10 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -18,16 +17,9 @@ public class LifeSetEffect extends SpellEffect {
@Override
public void resolve(Map<String, String> params, SpellAbility sa) {
final int lifeAmount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("LifeAmount"), sa);
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if ((tgt != null) && !params.containsKey("Defined")) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Player p : tgtPlayers) {
for (final Player p : getTargetPlayers(sa, params)) {
if ((tgt == null) || p.canBeTargetedBy(sa)) {
p.setLife(lifeAmount, sa.getSourceCard());
}
@@ -42,25 +34,14 @@ public class LifeSetEffect extends SpellEffect {
final StringBuilder sb = new StringBuilder();
final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("LifeAmount"), sa);
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard()).append(" -");
} else {
sb.append(" ");
}
final String conditionDesc = params.get("ConditionDescription");
if (conditionDesc != null) {
sb.append(conditionDesc).append(" ");
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
List<Player> tgtPlayers = getTargetPlayers(sa, params);
for (final Player player : tgtPlayers) {
sb.append(player).append(" ");

View File

@@ -1,13 +1,11 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import forge.Card;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -25,21 +23,14 @@ public class MillEffect extends SpellEffect {
source.clearRemembered();
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
ZoneType destination = ZoneType.smartValueOf(params.get("Destination"));
if (destination == null) {
destination = ZoneType.Graveyard;
}
for (final Player p : tgtPlayers) {
for (final Player p : getTargetPlayers(sa, params)) {
if ((tgt == null) || p.canBeTargetedBy(sa)) {
final List<Card> milled = p.mill(numCards, destination, bottom);
if (params.containsKey("RememberMilled")) {
@@ -61,54 +52,34 @@ public class MillEffect extends SpellEffect {
final StringBuilder sb = new StringBuilder();
final int numCards = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumCards"), sa);
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard().getName()).append(" - ");
} else {
sb.append(" ");
}
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
final String conditionDesc = params.get("ConditionDescription");
if (conditionDesc != null) {
sb.append(conditionDesc).append(" ");
}
if (params.containsKey("StackDescription")) {
if (params.get("StackDescription").equals("None")) {
sb.append("");
} else {
sb.append(params.get("StackDescription"));
}
} else {
for (final Player p : tgtPlayers) {
sb.append(p.toString()).append(" ");
}
final ZoneType dest = ZoneType.smartValueOf(params.get("Destination"));
if ((dest == null) || dest.equals(ZoneType.Graveyard)) {
sb.append("mills ");
} else if (dest.equals(ZoneType.Exile)) {
sb.append("exiles ");
} else if (dest.equals(ZoneType.Ante)) {
sb.append("antes ");
}
sb.append(numCards);
sb.append(" card");
if (numCards != 1) {
sb.append("s");
}
final String millPosition = params.containsKey("FromBottom") ? "bottom" : "top";
sb.append(" from the " + millPosition + " of his or her library.");
for (final Player p : tgtPlayers) {
sb.append(p.toString()).append(" ");
}
final ZoneType dest = ZoneType.smartValueOf(params.get("Destination"));
if ((dest == null) || dest.equals(ZoneType.Graveyard)) {
sb.append("mills ");
} else if (dest.equals(ZoneType.Exile)) {
sb.append("exiles ");
} else if (dest.equals(ZoneType.Ante)) {
sb.append("antes ");
}
sb.append(numCards);
sb.append(" card");
if (numCards != 1) {
sb.append("s");
}
final String millPosition = params.containsKey("FromBottom") ? "bottom" : "top";
sb.append(" from the " + millPosition + " of his or her library.");
return sb.toString();
}
}

View File

@@ -1,13 +1,11 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import forge.Card;
import forge.GameEntity;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -21,23 +19,12 @@ public class MustAttackEffect extends SpellEffect {
protected String getStackDescription(Map<String, String> params, SpellAbility sa) {
final Card host = sa.getSourceCard();
final StringBuilder sb = new StringBuilder();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" - ");
}
// end standard pre-
ArrayList<Player> tgtPlayers;
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
String defender = null;
if (params.get("Defender").equals("Self")) {
@@ -56,14 +43,8 @@ public class MustAttackEffect extends SpellEffect {
@Override
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
ArrayList<Player> tgtPlayers;
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
final Target tgt = sa.getTarget();
if ((tgt != null) && !params.containsKey("Defined")) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Player p : tgtPlayers) {
if ((tgt == null) || p.canBeTargetedBy(sa)) {

View File

@@ -1,11 +1,11 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.List;
import forge.Card;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
@@ -47,22 +47,9 @@ public class MustBlockEffect extends SpellEffect {
final Card host = sa.getSourceCard();
final StringBuilder sb = new StringBuilder();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" - ");
}
// end standard pre-
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Card> tgtCards = getTargetCards(sa, params);
String attacker = null;
if (params.containsKey("DefinedAttacker")) {

View File

@@ -1,15 +1,13 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import forge.Card;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
public class PhasesEffect extends SpellEffect {
@@ -26,29 +24,8 @@ public class PhasesEffect extends SpellEffect {
protected String getStackDescription(Map<String, String> params, SpellAbility sa) {
// when getStackDesc is called, just build exactly what is happening
final StringBuilder sb = new StringBuilder();
final Card source = sa.getSourceCard();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" - ");
}
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(source, params.get("Defined"), sa);
}
final Iterator<Card> it = tgtCards.iterator();
while (it.hasNext()) {
sb.append(it.next());
if (it.hasNext()) {
sb.append(", ");
}
}
final List<Card> tgtCards = getTargetCards(sa, params);
sb.append(StringUtils.join(tgtCards, ", "));
sb.append(" Phases Out.");
return sb.toString();
}
@@ -65,15 +42,7 @@ public class PhasesEffect extends SpellEffect {
*/
@Override
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
final Card card = sa.getSourceCard();
final Target tgt = sa.getTarget();
ArrayList<Card> tgtCards = null;
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(card, params.get("Defined"), sa);
}
final List<Card> tgtCards = getTargetCards(sa, params);
for (final Card tgtC : tgtCards) {
if (!tgtC.isPhasedOut()) {

View File

@@ -1,10 +1,11 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import com.google.common.base.Predicate;
import forge.Card;
@@ -18,11 +19,9 @@ import forge.card.cardfactory.CardFactoryUtil;
import forge.card.cost.Cost;
import forge.card.cost.CostMana;
import forge.card.cost.CostPart;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellAbilityRestriction;
import forge.card.spellability.Target;
import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
@@ -33,32 +32,14 @@ public class PlayEffect extends SpellEffect {
@Override
protected String getStackDescription(Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard().getName()).append(" - ");
} else {
sb.append(" ");
}
sb.append("Play ");
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Card> tgtCards = getTargetCards(sa, params);
if (params.containsKey("Valid")) {
sb.append("cards");
} else {
final Iterator<Card> it = tgtCards.iterator();
while (it.hasNext()) {
sb.append(it.next());
if (it.hasNext()) {
sb.append(", ");
}
}
sb.append(StringUtils.join(tgtCards, ", "));
}
if (params.containsKey("WithoutManaCost")) {
sb.append(" without paying the mana cost");
@@ -86,7 +67,6 @@ public class PlayEffect extends SpellEffect {
final Player controller = activator;
List<Card> tgtCards = new ArrayList<Card>();
final Target tgt = sa.getTarget();
if (params.containsKey("Valid")) {
ZoneType zone = ZoneType.Hand;
if (params.containsKey("ValidZone")) {
@@ -94,11 +74,8 @@ public class PlayEffect extends SpellEffect {
}
tgtCards = Singletons.getModel().getGame().getCardsIn(zone);
tgtCards = AbilityFactory.filterListByType(tgtCards, params.get("Valid"), sa);
} else if (params.containsKey("Defined")) {
tgtCards = new ArrayList<Card>(AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa));
} else if (tgt != null) {
tgtCards = new ArrayList<Card>(tgt.getTargetCards());
}
} else
tgtCards = getTargetCards(sa, params);
if (tgtCards.isEmpty()) {
return;

View File

@@ -1,12 +1,12 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -25,16 +25,8 @@ import forge.game.player.Player;
public void resolve(Map<String, String> params, SpellAbility sa) {
final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("Num"), sa);
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Player p : tgtPlayers) {
for (final Player p : getTargetPlayers(sa, params)) {
if ((tgt == null) || p.canBeTargetedBy(sa)) {
p.addPoisonCounters(amount, sa.getSourceCard());
}
@@ -49,38 +41,16 @@ import forge.game.player.Player;
final StringBuilder sb = new StringBuilder();
final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("Num"), sa);
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard()).append(" - ");
} else {
sb.append(" ");
}
final String conditionDesc = params.get("ConditionDescription");
if (conditionDesc != null) {
sb.append(conditionDesc).append(" ");
}
ArrayList<Player> tgtPlayers;
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
if (tgtPlayers.size() > 0) {
final Iterator<Player> it = tgtPlayers.iterator();
while (it.hasNext()) {
final Player p = it.next();
sb.append(p);
if (it.hasNext()) {
sb.append(", ");
} else {
sb.append(" ");
}
}
}
sb.append(StringUtils.join(tgtPlayers, ", "));
sb.append(" ");
sb.append("get");
if (tgtPlayers.size() < 2) {

View File

@@ -12,9 +12,7 @@ import forge.Command;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
@@ -23,35 +21,16 @@ public class ProtectAllEffect extends SpellEffect {
@Override
protected String getStackDescription(Map<String,String> params, SpellAbility sa) {
final Card host = sa.getAbilityFactory().getHostCard();
final StringBuilder sb = new StringBuilder();
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Card> tgtCards = getTargetCards(sa, params);
if (tgtCards.size() > 0) {
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(host).append(" - ");
}
if (params.containsKey("SpellDescription")) {
sb.append(params.get("SpellDescription"));
} else {
sb.append("Valid card gain protection");
if (!params.containsKey("Permanent")) {
sb.append(" until end of turn");
}
sb.append(".");
sb.append("Valid card gain protection");
if (!params.containsKey("Permanent")) {
sb.append(" until end of turn");
}
sb.append(".");
}
return sb.toString();

View File

@@ -15,7 +15,6 @@ import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -29,7 +28,6 @@ public class ProtectEffect extends SpellEffect {
*/
@Override
protected String getStackDescription(Map<String, String> params, SpellAbility sa) {
final Card host = sa.getAbilityFactory().getHostCard();
final ArrayList<String> gains = AbilityFactory.getProtectionList(params);
final boolean choose = (params.containsKey("Choices")) ? true : false;
@@ -37,22 +35,11 @@ public class ProtectEffect extends SpellEffect {
final StringBuilder sb = new StringBuilder();
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
}
List<Card> tgtCards = getTargetCards(sa, params);
if (tgtCards.size() > 0) {
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(host).append(" - ");
}
final Iterator<Card> it = tgtCards.iterator();
while (it.hasNext()) {
final Card tgtC = it.next();
@@ -152,14 +139,9 @@ public class ProtectEffect extends SpellEffect {
}
}
ArrayList<Card> tgtCards;
final List<Card> tgtCards = getTargetCards(sa, params);
final ArrayList<Card> untargetedCards = new ArrayList<Card>();
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(host, params.get("Defined"), sa);
}
if (params.containsKey("Radiance") && (tgt != null)) {
for (final Card c : CardUtil.getRadiance(host, tgtCards.get(0),
@@ -168,10 +150,8 @@ public class ProtectEffect extends SpellEffect {
}
}
final int size = tgtCards.size();
for (int j = 0; j < size; j++) {
final Card tgtC = tgtCards.get(j);
for (final Card tgtC : tgtCards) {
// only pump things in play
if (!tgtC.isInPlay()) {
continue;

View File

@@ -11,7 +11,6 @@ import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
@@ -21,17 +20,11 @@ public class PumpAllEffect extends SpellEffect {
final StringBuilder sb = new StringBuilder();
String desc = "";
if (params.containsKey("SpellDescription")) {
desc = params.get("SpellDescription");
} else if (params.containsKey("PumpAllDescription")) {
if (params.containsKey("PumpAllDescription")) {
desc = params.get("PumpAllDescription");
}
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard()).append(" - ");
} else {
sb.append(" ");
}
sb.append(desc);
final AbilitySub abSub = sa.getSubAbility();
@@ -45,16 +38,9 @@ public class PumpAllEffect extends SpellEffect {
@Override
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
List<Card> list;
ArrayList<Player> tgtPlayers = null;
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
final ArrayList<ZoneType> affectedZones = new ArrayList<ZoneType>();
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else if (params.containsKey("Defined")) {
// use it
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
if (params.containsKey("PumpZone")) {
for (final String zone : params.get("PumpZone").split(",")) {
@@ -87,13 +73,12 @@ public class PumpAllEffect extends SpellEffect {
final int a = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumAtt"), sa);
final int d = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumDef"), sa);
for (final Card c : list) {
final Card tgtC = c;
for (final Card tgtC : list) {
// only pump things in the affected zones.
boolean found = false;
for (final ZoneType z : affectedZones) {
if (c.isInZone(z)) {
if (tgtC.isInZone(z)) {
found = true;
break;
}

View File

@@ -13,7 +13,6 @@ import forge.GameEntity;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -126,61 +125,46 @@ public class PumpEffect extends SpellEffect {
if (tgts.size() > 0) {
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" - ");
for (final GameEntity c : tgts) {
sb.append(c).append(" ");
}
if (params.containsKey("StackDescription")) {
if (params.get("StackDescription").equals("None")) {
sb.append("");
if (params.containsKey("Radiance")) {
sb.append(" and each other ").append(params.get("ValidTgts"))
.append(" that shares a color with ");
if (tgts.size() > 1) {
sb.append("them ");
} else {
sb.append(params.get("StackDescription"));
sb.append("it ");
}
}
else {
for (final GameEntity c : tgts) {
sb.append(c).append(" ");
}
final List<String> keywords = params.containsKey("KW") ? Arrays.asList(params.get("KW").split(" & ")) : new ArrayList<String>();
final int atk = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumAtt"), sa);
final int def = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumDef"), sa);
if (params.containsKey("Radiance")) {
sb.append(" and each other ").append(params.get("ValidTgts"))
.append(" that shares a color with ");
if (tgts.size() > 1) {
sb.append("them ");
} else {
sb.append("it ");
}
sb.append("gains ");
if ((atk != 0) || (def != 0)) {
if (atk >= 0) {
sb.append("+");
}
final List<String> keywords = params.containsKey("KW") ? Arrays.asList(params.get("KW").split(" & ")) : new ArrayList<String>();
final int atk = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumAtt"), sa);
final int def = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("NumDef"), sa);
sb.append("gains ");
if ((atk != 0) || (def != 0)) {
if (atk >= 0) {
sb.append("+");
}
sb.append(atk);
sb.append("/");
if (def >= 0) {
sb.append("+");
}
sb.append(def);
sb.append(" ");
}
for (int i = 0; i < keywords.size(); i++) {
sb.append(keywords.get(i)).append(" ");
}
if (!params.containsKey("Permanent")) {
sb.append("until end of turn.");
sb.append(atk);
sb.append("/");
if (def >= 0) {
sb.append("+");
}
sb.append(def);
sb.append(" ");
}
for (int i = 0; i < keywords.size(); i++) {
sb.append(keywords.get(i)).append(" ");
}
if (!params.containsKey("Permanent")) {
sb.append("until end of turn.");
}
}
return sb.toString();

View File

@@ -8,7 +8,6 @@ import forge.GameActionUtil;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -25,25 +24,14 @@ public class RearrangeTopOfLibraryEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
int numCards = 0;
ArrayList<Player> tgtPlayers;
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
boolean shuffle = false;
Card host = sa.getAbilityFactory().getHostCard();
final Target tgt = sa.getTarget();
if ((tgt != null) && !params.containsKey("Defined")) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
numCards = AbilityFactory.calculateAmount(host, params.get("NumCards"), sa);
shuffle = params.containsKey("MayShuffle");
final StringBuilder ret = new StringBuilder();
if (!(sa instanceof AbilitySub)) {
ret.append(host.getName());
ret.append(" - ");
}
ret.append("Look at the top ");
ret.append(numCards);
ret.append(" cards of ");
@@ -84,22 +72,17 @@ public class RearrangeTopOfLibraryEffect extends SpellEffect {
@Override
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
int numCards = 0;
ArrayList<Player> tgtPlayers = new ArrayList<Player>();
Card host = sa.getAbilityFactory().getHostCard();
boolean shuffle = false;
if (sa.getActivatingPlayer().isHuman()) {
final Target tgt = sa.getTarget();
if ((tgt != null) && !params.containsKey("Defined")) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
numCards = AbilityFactory.calculateAmount(host, params.get("NumCards"), sa);
shuffle = params.containsKey("MayShuffle");
for (final Player p : tgtPlayers) {
for (final Player p : getTargetPlayers(sa, params)) {
if ((tgt == null) || p.canBeTargetedBy(sa)) {
rearrangeTopOfLibrary(host, p, numCards, shuffle);
}

View File

@@ -7,31 +7,13 @@ import forge.CardLists;
import forge.Command;
import forge.Singletons;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.game.zone.ZoneType;
public class RegenerateAllEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
final Card host = sa.getAbilityFactory().getHostCard();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(host).append(" - ");
}
String desc = "";
if (params.containsKey("SpellDescription")) {
desc = params.get("SpellDescription");
} else {
desc = "Regenerate all valid cards.";
}
sb.append(desc);
return sb.toString();
return "Regenerate all valid cards.";
}
@Override

View File

@@ -1,15 +1,13 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import forge.Card;
import forge.Command;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
@@ -22,24 +20,11 @@ public class RegenerateEffect extends SpellEffect
@Override
protected String getStackDescription(Map<String, String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
final Card host = sa.getAbilityFactory().getHostCard();
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Card> tgtCards = getTargetCards(sa, params);
if (tgtCards.size() > 0) {
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(host).append(" - ");
}
sb.append("Regenerate ");
final Iterator<Card> it = tgtCards.iterator();
while (it.hasNext()) {
final Card tgtC = it.next();
@@ -61,17 +46,9 @@ public class RegenerateEffect extends SpellEffect
@Override
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
final Card hostCard = sa.getAbilityFactory().getHostCard();
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(hostCard, params.get("Defined"), sa);
}
for (final Card tgtC : tgtCards) {
for (final Card tgtC : getTargetCards(sa, params)) {
final Command untilEOT = new Command() {
private static final long serialVersionUID = 1922050611313909200L;

View File

@@ -1,12 +1,12 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import forge.Card;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
@@ -16,29 +16,10 @@ public class RemoveFromCombatEffect extends SpellEffect {
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" - ");
}
// end standard pre-
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Card> tgtCards = getTargetCards(sa, params);
sb.append("Remove ");
for (final Card c : tgtCards) {
sb.append(c);
}
sb.append(StringUtils.join(tgtCards, ", "));
sb.append(" from combat.");
return sb.toString();
@@ -47,16 +28,8 @@ public class RemoveFromCombatEffect extends SpellEffect {
@Override
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if ((tgt != null) && !params.containsKey("Defined")) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Card c : tgtCards) {
for (final Card c : getTargetCards(sa, params)) {
if ((tgt == null) || c.canBeTargetedBy(sa)) {
Singletons.getModel().getGame().getCombat().removeFromCombat(c);
}

View File

@@ -33,25 +33,7 @@ public class RepeatEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
final Card host = sa.getSourceCard();
if (!(sa instanceof AbilitySub)) {
sb.append(host.getName()).append(" -");
}
sb.append(" ");
if (params.containsKey("StackDescription")) {
final String desc = params.get("StackDescription");
if (!desc.equals("None")) {
sb.append(params.get("StackDescription"));
}
} else {
sb.append("Repeat something. Somebody should really write a better StackDescription!");
}
return sb.toString();
return "Repeat something. Somebody should really write a better StackDescription!";
} // end repeatStackDescription()
/**

View File

@@ -6,8 +6,6 @@ import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.CardUtil;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -20,16 +18,9 @@ public class RevealEffect extends RevealEffectBase {
final Card host = sa.getAbilityFactory().getHostCard();
final boolean anyNumber = params.containsKey("AnyNumber");
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Player p : tgtPlayers) {
for (final Player p : getTargetPlayers(sa, params)) {
if ((tgt == null) || p.canBeTargetedBy(sa)) {
final List<Card> handChoices = p.getCardsIn(ZoneType.Hand);
if (handChoices.size() > 0) {
@@ -66,22 +57,9 @@ public class RevealEffect extends RevealEffectBase {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" - ");
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
if (tgtPlayers.size() > 0) {
sb.append(tgtPlayers.get(0)).append(" reveals ");
if (params.containsKey("AnyNumber")) {

View File

@@ -1,14 +1,11 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import forge.Card;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -20,22 +17,11 @@ public class RevealHandEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard()).append(" - ");
} else {
sb.append(" ");
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
sb.append(sa.getActivatingPlayer()).append(" looks at ");
if (tgtPlayers.size() > 0) {
@@ -54,16 +40,9 @@ public class RevealHandEffect extends SpellEffect {
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
final Card host = sa.getAbilityFactory().getHostCard();
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Player p : tgtPlayers) {
for (final Player p : getTargetPlayers(sa, params)) {
if ((tgt == null) || p.canBeTargetedBy(sa)) {
final List<Card> hand = p.getCardsIn(ZoneType.Hand);
if (sa.getActivatingPlayer().isHuman()) {

View File

@@ -7,7 +7,6 @@ import forge.Card;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.game.zone.ZoneType;
@@ -17,15 +16,8 @@ public class SacrificeAllEffect extends SpellEffect {
// when getStackDesc is called, just build exactly what is happening
final StringBuilder sb = new StringBuilder();
final Card host = sa.getAbilityFactory().getHostCard();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(host).append(" - ");
}
final String conditionDesc = params.get("ConditionDescription");
if (conditionDesc != null) {
sb.append(conditionDesc).append(" ");

View File

@@ -8,9 +8,7 @@ import forge.CardUtil;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
@@ -25,14 +23,7 @@ public class SacrificeEffect extends SpellEffect {
// Expand Sacrifice keyword here depending on what we need out of it.
final String num = params.containsKey("Amount") ? params.get("Amount") : "1";
final int amount = AbilityFactory.calculateAmount(card, num, sa);
final Target tgt = sa.getTarget();
ArrayList<Player> tgts;
if (tgt != null) {
tgts = tgt.getTargetPlayers();
} else {
tgts = AbilityFactory.getDefinedPlayers(card, params.get("Defined"), sa);
}
final List<Player> tgts = getTargetPlayers(sa, params);
String valid = params.get("SacValid");
if (valid == null) {
@@ -84,24 +75,12 @@ public class SacrificeEffect extends SpellEffect {
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard().getName()).append(" - ");
}
final String conditionDesc = params.get("ConditionDescription");
if (conditionDesc != null) {
sb.append(conditionDesc).append(" ");
}
final Target tgt = sa.getTarget();
ArrayList<Player> tgts;
if (tgt != null) {
tgts = tgt.getTargetPlayers();
} else {
tgts = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Player> tgts = getTargetPlayers(sa, params);
String valid = params.get("SacValid");
if (valid == null) {

View File

@@ -1,10 +1,9 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.List;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -15,20 +14,7 @@ public class ScryEffect extends SpellEffect {
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard().getName()).append(" - ");
} else {
sb.append(" ");
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
for (final Player p : tgtPlayers) {
sb.append(p.toString()).append(" ");
@@ -51,14 +37,8 @@ public class ScryEffect extends SpellEffect {
num = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("ScryNum"), sa);
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
for (final Player p : tgtPlayers) {
if ((tgt == null) || p.canBeTargetedBy(sa)) {

View File

@@ -8,7 +8,6 @@ import forge.CardLists;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -112,15 +111,8 @@ public class SetStateAllEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final Card host = sa.getAbilityFactory().getHostCard();
final StringBuilder sb = new StringBuilder();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(host).append(" - ");
}
if (params.containsKey("Mode")) {
sb.append(params.get("Mode"));
} else {

View File

@@ -1,42 +1,25 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import forge.Card;
import forge.CardCharacteristicName;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
public class SetStateEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
final Card host = sa.getAbilityFactory().getHostCard();
final String conditionDesc = params.get("ConditionDescription");
if (conditionDesc != null) {
sb.append(conditionDesc).append(" ");
}
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
}
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(host).append(" - ");
}
final List<Card> tgtCards = getTargetCards(sa, params);
if (params.containsKey("Flip")) {
sb.append("Flip");
@@ -63,14 +46,9 @@ public class SetStateEffect extends SpellEffect {
@Override
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
ArrayList<Card> tgtCards;
final Card host = sa.getAbilityFactory().getHostCard();
if (sa.getTarget() != null) {
tgtCards = sa.getTarget().getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(host, params.get("Defined"), sa);
}
final Card host = sa.getAbilityFactory().getHostCard();
final List<Card> tgtCards = getTargetCards(sa, params);
final boolean remChanged = params.containsKey("RememberChanged");

View File

@@ -1,13 +1,11 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import forge.Card;
import forge.GameActionUtil;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -18,14 +16,9 @@ public class ShuffleEffect extends SpellEffect {
final Card host = sa.getSourceCard();
final boolean optional = params.containsKey("Optional");
ArrayList<Player> tgtPlayers;
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
for (final Player p : tgtPlayers) {
if ((tgt == null) || p.canBeTargetedBy(sa)) {
@@ -42,25 +35,13 @@ public class ShuffleEffect extends SpellEffect {
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (!(sa instanceof AbilitySub)) {
sb.append(sa.getSourceCard().getName()).append(" - ");
} else {
sb.append(" ");
}
final String conditionDesc = params.get("ConditionDescription");
if (conditionDesc != null) {
sb.append(conditionDesc).append(" ");
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
if (tgtPlayers.size() > 0) {
final Iterator<Player> it = tgtPlayers.iterator();

View File

@@ -1,6 +1,5 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -10,7 +9,6 @@ import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
@@ -21,17 +19,11 @@ public class TapAllEffect extends SpellEffect {
*/
@Override
protected String getStackDescription(Map<String, String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (sa instanceof AbilitySub) {
sb.append(" ");
sb.append("Tap all valid cards.");
return "Tap all valid cards.";
} else {
sb.append(sa.getSourceCard()).append(" - ");
sb.append(params.get("SpellDescription"));
return params.get("SpellDescription");
}
return sb.toString();
}
@Override
@@ -44,15 +36,7 @@ public class TapAllEffect extends SpellEffect {
List<Card> cards = null;
ArrayList<Player> tgtPlayers = null;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else if (params.containsKey("Defined")) {
// use it
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
if ((tgtPlayers == null) || tgtPlayers.isEmpty()) {
cards = Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield);

View File

@@ -1,13 +1,12 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import forge.Card;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
@@ -24,13 +23,8 @@ public class TapEffect extends SpellEffect {
card.clearRemembered();
}
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(card, params.get("Defined"), sa);
}
final List<Card> tgtCards = getTargetCards(sa, params);
for (final Card tgtC : tgtCards) {
if (tgt != null && !tgtC.canBeTargetedBy(sa)) {
@@ -49,33 +43,10 @@ public class TapEffect extends SpellEffect {
@Override
protected String getStackDescription(java.util.Map<String,String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
final Card hostCard = sa.getSourceCard();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" - ");
}
sb.append("Tap ");
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(hostCard, params.get("Defined"), sa);
}
final Iterator<Card> it = tgtCards.iterator();
while (it.hasNext()) {
sb.append(it.next());
if (it.hasNext()) {
sb.append(", ");
}
}
final List<Card> tgtCards = getTargetCards(sa, params);
sb.append(StringUtils.join(tgtCards, ", "));
sb.append(".");
return sb.toString();
}

View File

@@ -1,13 +1,12 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import forge.Card;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.gui.GuiChoose;
@@ -21,45 +20,21 @@ public class TapOrUntapEffect extends SpellEffect {
protected String getStackDescription(Map<String, String> params, SpellAbility sa) {
// when getStackDesc is called, just build exactly what is happening
final StringBuilder sb = new StringBuilder();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" - ");
}
sb.append("Tap or untap ");
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
}
final Iterator<Card> it = tgtCards.iterator();
while (it.hasNext()) {
sb.append(it.next());
if (it.hasNext()) {
sb.append(", ");
}
}
final List<Card> tgtCards = getTargetCards(sa, params);
sb.append(StringUtils.join(tgtCards, ", "));
sb.append(".");
return sb.toString();
}
@Override
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
final Card card = sa.getSourceCard();
final List<Card> tgtCards = getTargetCards(sa, params);
ArrayList<Card> tgtCards;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(card, params.get("Defined"), sa);
}
for (final Card tgtC : tgtCards) {
if (tgtC.isInPlay() && ((tgt == null) || tgtC.canBeTargetedBy(sa))) {

View File

@@ -27,7 +27,6 @@ import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.trigger.Trigger;
import forge.card.trigger.TriggerHandler;
@@ -113,37 +112,26 @@ public class TokenEffect extends SpellEffect {
final Card host = sa.getSourceCard();
readParameters(params);
if (sa instanceof AbilitySub) {
sb.append(" ");
final int finalPower = AbilityFactory.calculateAmount(host, this.tokenPower, sa);
final int finalToughness = AbilityFactory.calculateAmount(host, this.tokenToughness, sa);
final int finalAmount = AbilityFactory.calculateAmount(host, this.tokenAmount, sa);
final String substitutedName = this.tokenName.equals("ChosenType") ? host.getChosenType() : this.tokenName;
sb.append("Put (").append(finalAmount).append(") ").append(finalPower).append("/").append(finalToughness);
sb.append(" ").append(substitutedName).append(" token");
if (finalAmount != 1) {
sb.append("s");
}
sb.append(" onto the battlefield");
if (this.tokenOwner.equals("Opponent")) {
sb.append(" under your opponent's control.");
} else {
sb.append(host.getName()).append(" - ");
sb.append(".");
}
if (params.containsKey("StackDescription")) {
sb.append(params.get("StackDescription"));
}
else {
final int finalPower = AbilityFactory.calculateAmount(host, this.tokenPower, sa);
final int finalToughness = AbilityFactory.calculateAmount(host, this.tokenToughness, sa);
final int finalAmount = AbilityFactory.calculateAmount(host, this.tokenAmount, sa);
final String substitutedName = this.tokenName.equals("ChosenType") ? host.getChosenType() : this.tokenName;
sb.append("Put (").append(finalAmount).append(") ").append(finalPower).append("/").append(finalToughness);
sb.append(" ").append(substitutedName).append(" token");
if (finalAmount != 1) {
sb.append("s");
}
sb.append(" onto the battlefield");
if (this.tokenOwner.equals("Opponent")) {
sb.append(" under your opponent's control.");
} else {
sb.append(".");
}
}
return sb.toString();
}

View File

@@ -27,20 +27,7 @@ public class TwoPilesEffect extends SpellEffect {
protected String getStackDescription(Map<String, String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" - ");
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
String valid = "";
if (params.containsKey("ValidCards")) {
@@ -74,14 +61,8 @@ public class TwoPilesEffect extends SpellEffect {
valid = params.get("ValidCards");
}
ArrayList<Player> tgtPlayers;
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
Player separator = card.getController();
if (params.containsKey("Separator")) {

View File

@@ -1,17 +1,14 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
@@ -22,16 +19,11 @@ public class UntapAllEffect extends SpellEffect {
*/
@Override
protected String getStackDescription(Map<String, String> params, SpellAbility sa) {
final StringBuilder sb = new StringBuilder();
if (sa instanceof AbilitySub) {
sb.append(" ");
sb.append("Untap all valid cards.");
return "Untap all valid cards.";
} else {
sb.append(sa.getSourceCard()).append(" - ");
sb.append(params.get("SpellDescription"));
return params.get("SpellDescription");
}
return sb.toString();
}
@Override
@@ -41,21 +33,13 @@ public class UntapAllEffect extends SpellEffect {
String valid = "";
List<Card> list = null;
ArrayList<Player> tgtPlayers = null;
List<Player> tgtPlayers = getTargetPlayers(sa, params);
if (params.containsKey("ValidCards")) {
valid = params.get("ValidCards");
}
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtPlayers = tgt.getTargetPlayers();
} else if (params.containsKey("Defined")) {
// use it
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
if ((tgtPlayers == null) || tgtPlayers.isEmpty()) {
if (tgtPlayers.isEmpty()) {
list = Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield);
} else {
list = tgtPlayers.get(0).getCardsIn(ZoneType.Battlefield);

View File

@@ -1,10 +1,11 @@
package forge.card.abilityfactory.effects;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
@@ -12,7 +13,6 @@ import forge.CardPredicates.Presets;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.player.Player;
@@ -27,13 +27,6 @@ public class UntapEffect extends SpellEffect {
protected String getStackDescription(Map<String, String> params, SpellAbility sa) {
// when getStackDesc is called, just build exactly what is happening
final StringBuilder sb = new StringBuilder();
final Card hostCard = sa.getSourceCard();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard()).append(" - ");
}
sb.append("Untap ");
@@ -41,21 +34,8 @@ public class UntapEffect extends SpellEffect {
sb.append("up to ").append(params.get("Amount")).append(" ");
sb.append(params.get("UntapType")).append("s");
} else {
ArrayList<Card> tgtCards = new ArrayList<Card>();
final Target tgt = sa.getTarget();
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(hostCard, params.get("Defined"), sa);
}
final Iterator<Card> it = tgtCards.iterator();
while (it.hasNext()) {
sb.append(it.next());
if (it.hasNext()) {
sb.append(", ");
}
}
List<Card> tgtCards = getTargetCards(sa, params);
sb.append(StringUtils.join(tgtCards, ", "));
}
sb.append(".");
return sb.toString();
@@ -63,18 +43,13 @@ public class UntapEffect extends SpellEffect {
@Override
public void resolve(java.util.Map<String,String> params, SpellAbility sa) {
final Card card = sa.getSourceCard();
final Target tgt = sa.getTarget();
ArrayList<Card> tgtCards = null;
if (params.containsKey("UntapUpTo")) {
untapChooseUpTo(sa, params);
} else {
if (tgt != null) {
tgtCards = tgt.getTargetCards();
} else {
tgtCards = AbilityFactory.getDefinedCards(card, params.get("Defined"), sa);
}
final List<Card> tgtCards = getTargetCards(sa, params);
for (final Card tgtC : tgtCards) {
if (tgtC.isInPlay() && ((tgt == null) || tgtC.canBeTargetedBy(sa))) {