mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 12:48:00 +00:00
- Redirected some targeting checks to the new function.
This commit is contained in:
2
.gitattributes
vendored
2
.gitattributes
vendored
@@ -10455,7 +10455,7 @@ src/main/java/forge/card/abilityfactory/AbilityFactory.java svneol=native#text/p
|
||||
src/main/java/forge/card/abilityfactory/AbilityFactoryAlterLife.java svneol=native#text/plain
|
||||
src/main/java/forge/card/abilityfactory/AbilityFactoryAnimate.java svneol=native#text/plain
|
||||
src/main/java/forge/card/abilityfactory/AbilityFactoryAttach.java svneol=native#text/plain
|
||||
src/main/java/forge/card/abilityfactory/AbilityFactoryChangeState.java -text svneol=native#text/plain
|
||||
src/main/java/forge/card/abilityfactory/AbilityFactoryChangeState.java svneol=native#text/plain
|
||||
src/main/java/forge/card/abilityfactory/AbilityFactoryChangeZone.java svneol=native#text/plain
|
||||
src/main/java/forge/card/abilityfactory/AbilityFactoryCharm.java -text svneol=native#text/plain
|
||||
src/main/java/forge/card/abilityfactory/AbilityFactoryChoose.java svneol=native#text/plain
|
||||
|
||||
@@ -901,7 +901,7 @@ public class MagicStack extends MyObservable {
|
||||
if (!zone.is(Constant.Zone.Battlefield) || !c.isCreature()) {
|
||||
return;
|
||||
}
|
||||
if (CardFactoryUtil.canTarget(source, c)) {
|
||||
if (c.canTarget(haunterDiesWork)) {
|
||||
haunterDiesWork.setTargetCard(c);
|
||||
MagicStack.this.add(haunterDiesWork);
|
||||
this.stop();
|
||||
|
||||
@@ -2543,7 +2543,7 @@ public class Upkeep implements java.io.Serializable {
|
||||
@Override
|
||||
public void selectCard(final Card selectedCard, final PlayerZone z) {
|
||||
if (z.is(Constant.Zone.Battlefield) && selectedCard.isCreature()
|
||||
&& CardFactoryUtil.canTarget(c, selectedCard)) {
|
||||
&& selectedCard.canTarget(switchTargets)) {
|
||||
newTarget[0] = selectedCard;
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
sb.append(c.getCloneOrigin()).append(
|
||||
|
||||
@@ -1,375 +1,374 @@
|
||||
package forge.card.abilityfactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import forge.AllZoneUtil;
|
||||
import forge.Card;
|
||||
import forge.CardList;
|
||||
import forge.Constant.Zone;
|
||||
import forge.Player;
|
||||
import forge.card.cardfactory.CardFactoryUtil;
|
||||
import forge.card.spellability.AbilityActivated;
|
||||
import forge.card.spellability.AbilitySub;
|
||||
import forge.card.spellability.Spell;
|
||||
import forge.card.spellability.SpellAbility;
|
||||
import forge.card.spellability.Target;
|
||||
|
||||
/**
|
||||
* AbilityFactory for abilities that cause cards to change states.
|
||||
*
|
||||
*/
|
||||
public class AbilityFactoryChangeState {
|
||||
|
||||
/**
|
||||
* Gets the change state ability.
|
||||
*
|
||||
* @param abilityFactory
|
||||
* the aF
|
||||
* @return the change state ability
|
||||
*/
|
||||
public static SpellAbility getChangeStateAbility(final AbilityFactory abilityFactory) {
|
||||
final SpellAbility ret = new AbilityActivated(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
|
||||
abilityFactory.getAbTgt()) {
|
||||
private static final long serialVersionUID = -1083427558368639457L;
|
||||
|
||||
@Override
|
||||
public String getStackDescription() {
|
||||
return AbilityFactoryChangeState.changeStateStackDescription(abilityFactory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resolve() {
|
||||
AbilityFactoryChangeState.changeStateResolve(abilityFactory, this);
|
||||
}
|
||||
};
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the change state spell.
|
||||
*
|
||||
* @param abilityFactory
|
||||
* the aF
|
||||
* @return the change state spell
|
||||
*/
|
||||
public static SpellAbility getChangeStateSpell(final AbilityFactory abilityFactory) {
|
||||
final SpellAbility ret = new Spell(abilityFactory.getHostCard()) {
|
||||
private static final long serialVersionUID = -7506856902233086859L;
|
||||
|
||||
@Override
|
||||
public String getStackDescription() {
|
||||
return AbilityFactoryChangeState.changeStateStackDescription(abilityFactory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resolve() {
|
||||
AbilityFactoryChangeState.changeStateResolve(abilityFactory, this);
|
||||
}
|
||||
};
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the change state drawback.
|
||||
*
|
||||
* @param abilityFactory
|
||||
* the aF
|
||||
* @return the change state drawback
|
||||
*/
|
||||
public static SpellAbility getChangeStateDrawback(final AbilityFactory abilityFactory) {
|
||||
final AbilitySub ret = new AbilitySub(abilityFactory.getHostCard(), abilityFactory.getAbTgt()) {
|
||||
|
||||
private static final long serialVersionUID = -3793247725721587468L;
|
||||
|
||||
@Override
|
||||
public String getStackDescription() {
|
||||
return AbilityFactoryChangeState.changeStateStackDescription(abilityFactory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean chkAIDrawback() {
|
||||
|
||||
// Gross generalization, but this always considers alternate
|
||||
// states more powerful
|
||||
if (abilityFactory.getHostCard().isInAlternateState()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doTrigger(final boolean mandatory) {
|
||||
if (!mandatory && abilityFactory.getHostCard().isInAlternateState()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resolve() {
|
||||
AbilityFactoryChangeState.changeStateResolve(abilityFactory, this);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
private static String changeStateStackDescription(final AbilityFactory abilityFactory, final SpellAbility sa) {
|
||||
final Map<String, String> params = abilityFactory.getMapParams();
|
||||
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
final Card host = abilityFactory.getHostCard();
|
||||
|
||||
final String conditionDesc = params.get("ConditionDescription");
|
||||
if (conditionDesc != null) {
|
||||
sb.append(conditionDesc).append(" ");
|
||||
}
|
||||
|
||||
ArrayList<Card> tgtCards;
|
||||
|
||||
final Target tgt = abilityFactory.getAbTgt();
|
||||
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(" - ");
|
||||
}
|
||||
|
||||
if (params.containsKey("Flip")) {
|
||||
sb.append("Flip");
|
||||
} else {
|
||||
sb.append("Transform ");
|
||||
}
|
||||
|
||||
final Iterator<Card> it = tgtCards.iterator();
|
||||
while (it.hasNext()) {
|
||||
final Card tgtC = it.next();
|
||||
if (tgtC.isFaceDown()) {
|
||||
sb.append("Morph ").append("(").append(tgtC.getUniqueNumber()).append(")");
|
||||
} else {
|
||||
sb.append(tgtC);
|
||||
}
|
||||
|
||||
if (it.hasNext()) {
|
||||
sb.append(", ");
|
||||
}
|
||||
}
|
||||
sb.append(".");
|
||||
|
||||
final AbilitySub abSub = sa.getSubAbility();
|
||||
if (abSub != null) {
|
||||
sb.append(abSub.getStackDescription());
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private static void changeStateResolve(final AbilityFactory abilityFactory, final SpellAbility sa) {
|
||||
|
||||
ArrayList<Card> tgtCards;
|
||||
|
||||
if (abilityFactory.getAbTgt() != null) {
|
||||
tgtCards = abilityFactory.getAbTgt().getTargetCards();
|
||||
} else {
|
||||
tgtCards = AbilityFactory.getDefinedCards(abilityFactory.getHostCard(),
|
||||
abilityFactory.getMapParams().get("Defined"), sa);
|
||||
}
|
||||
|
||||
for (final Card tgt : tgtCards) {
|
||||
if (abilityFactory.getAbTgt() != null) {
|
||||
if (!CardFactoryUtil.canTarget(abilityFactory.getHostCard(), tgt)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
tgt.changeState();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// //////////////////////////////////////////////
|
||||
// changeStateAll //
|
||||
// //////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* Gets the change state all ability.
|
||||
*
|
||||
* @param abilityFactory
|
||||
* the aF
|
||||
* @return the change state all ability
|
||||
*/
|
||||
public static SpellAbility getChangeStateAllAbility(final AbilityFactory abilityFactory) {
|
||||
final SpellAbility ret = new AbilityActivated(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
|
||||
abilityFactory.getAbTgt()) {
|
||||
|
||||
private static final long serialVersionUID = 7841029107610111992L;
|
||||
|
||||
@Override
|
||||
public String getStackDescription() {
|
||||
return AbilityFactoryChangeState.changeStateAllStackDescription(abilityFactory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resolve() {
|
||||
AbilityFactoryChangeState.changeStateAllResolve(abilityFactory, this);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the change state all spell.
|
||||
*
|
||||
* @param abilityFactory
|
||||
* the aF
|
||||
* @return the change state all spell
|
||||
*/
|
||||
public static SpellAbility getChangeStateAllSpell(final AbilityFactory abilityFactory) {
|
||||
final SpellAbility ret = new Spell(abilityFactory.getHostCard()) {
|
||||
|
||||
private static final long serialVersionUID = 4217632586060204603L;
|
||||
|
||||
@Override
|
||||
public String getStackDescription() {
|
||||
return AbilityFactoryChangeState.changeStateAllStackDescription(abilityFactory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resolve() {
|
||||
AbilityFactoryChangeState.changeStateAllResolve(abilityFactory, this);
|
||||
}
|
||||
};
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the change state all drawback.
|
||||
*
|
||||
* @param abilityFactory
|
||||
* the aF
|
||||
* @return the change state all drawback
|
||||
*/
|
||||
public static SpellAbility getChangeStateAllDrawback(final AbilityFactory abilityFactory) {
|
||||
final AbilitySub ret = new AbilitySub(abilityFactory.getHostCard(), abilityFactory.getAbTgt()) {
|
||||
|
||||
private static final long serialVersionUID = 4047514893482113436L;
|
||||
|
||||
@Override
|
||||
public String getStackDescription() {
|
||||
return AbilityFactoryChangeState.changeStateAllStackDescription(abilityFactory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean chkAIDrawback() {
|
||||
|
||||
// Gross generalization, but this always considers alternate
|
||||
// states more powerful
|
||||
if (abilityFactory.getHostCard().isInAlternateState()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doTrigger(final boolean mandatory) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resolve() {
|
||||
AbilityFactoryChangeState.changeStateAllResolve(abilityFactory, this);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
private static void changeStateAllResolve(final AbilityFactory abilityFactory, final SpellAbility sa) {
|
||||
final HashMap<String, String> params = abilityFactory.getMapParams();
|
||||
|
||||
final Card card = sa.getSourceCard();
|
||||
|
||||
final Target tgt = abilityFactory.getAbTgt();
|
||||
Player targetPlayer = null;
|
||||
if (tgt != null) {
|
||||
targetPlayer = tgt.getTargetPlayers().get(0);
|
||||
}
|
||||
|
||||
String valid = "";
|
||||
|
||||
if (params.containsKey("ValidCards")) {
|
||||
valid = params.get("ValidCards");
|
||||
}
|
||||
|
||||
// Ugh. If calculateAmount needs to be called with DestroyAll it _needs_
|
||||
// to use the X variable
|
||||
// We really need a better solution to this
|
||||
if (valid.contains("X")) {
|
||||
valid = valid.replace("X", Integer.toString(AbilityFactory.calculateAmount(card, "X", sa)));
|
||||
}
|
||||
|
||||
CardList list = AllZoneUtil.getCardsIn(Zone.Battlefield);
|
||||
|
||||
if (targetPlayer != null) {
|
||||
list = list.getController(targetPlayer);
|
||||
}
|
||||
|
||||
list = AbilityFactory.filterListByType(list, valid, sa);
|
||||
|
||||
final boolean remChanged = params.containsKey("RememberChanged");
|
||||
if (remChanged) {
|
||||
card.clearRemembered();
|
||||
}
|
||||
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
if (list.get(i).changeState()) {
|
||||
card.addRemembered(list.get(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static String changeStateAllStackDescription(final AbilityFactory abilityFactory, final SpellAbility sa) {
|
||||
|
||||
final Card host = abilityFactory.getHostCard();
|
||||
final Map<String, String> params = abilityFactory.getMapParams();
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
|
||||
if (sa instanceof AbilitySub) {
|
||||
sb.append(" ");
|
||||
} else {
|
||||
sb.append(host).append(" - ");
|
||||
}
|
||||
|
||||
if (params.containsKey("Flip")) {
|
||||
sb.append("Flip");
|
||||
} else {
|
||||
sb.append("Transform ");
|
||||
}
|
||||
|
||||
sb.append(" permanents.");
|
||||
|
||||
final AbilitySub abSub = sa.getSubAbility();
|
||||
if (abSub != null) {
|
||||
sb.append(abSub.getStackDescription());
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
package forge.card.abilityfactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import forge.AllZoneUtil;
|
||||
import forge.Card;
|
||||
import forge.CardList;
|
||||
import forge.Constant.Zone;
|
||||
import forge.Player;
|
||||
import forge.card.spellability.AbilityActivated;
|
||||
import forge.card.spellability.AbilitySub;
|
||||
import forge.card.spellability.Spell;
|
||||
import forge.card.spellability.SpellAbility;
|
||||
import forge.card.spellability.Target;
|
||||
|
||||
/**
|
||||
* AbilityFactory for abilities that cause cards to change states.
|
||||
*
|
||||
*/
|
||||
public class AbilityFactoryChangeState {
|
||||
|
||||
/**
|
||||
* Gets the change state ability.
|
||||
*
|
||||
* @param abilityFactory
|
||||
* the aF
|
||||
* @return the change state ability
|
||||
*/
|
||||
public static SpellAbility getChangeStateAbility(final AbilityFactory abilityFactory) {
|
||||
final SpellAbility ret = new AbilityActivated(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
|
||||
abilityFactory.getAbTgt()) {
|
||||
private static final long serialVersionUID = -1083427558368639457L;
|
||||
|
||||
@Override
|
||||
public String getStackDescription() {
|
||||
return AbilityFactoryChangeState.changeStateStackDescription(abilityFactory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resolve() {
|
||||
AbilityFactoryChangeState.changeStateResolve(abilityFactory, this);
|
||||
}
|
||||
};
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the change state spell.
|
||||
*
|
||||
* @param abilityFactory
|
||||
* the aF
|
||||
* @return the change state spell
|
||||
*/
|
||||
public static SpellAbility getChangeStateSpell(final AbilityFactory abilityFactory) {
|
||||
final SpellAbility ret = new Spell(abilityFactory.getHostCard()) {
|
||||
private static final long serialVersionUID = -7506856902233086859L;
|
||||
|
||||
@Override
|
||||
public String getStackDescription() {
|
||||
return AbilityFactoryChangeState.changeStateStackDescription(abilityFactory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resolve() {
|
||||
AbilityFactoryChangeState.changeStateResolve(abilityFactory, this);
|
||||
}
|
||||
};
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the change state drawback.
|
||||
*
|
||||
* @param abilityFactory
|
||||
* the aF
|
||||
* @return the change state drawback
|
||||
*/
|
||||
public static SpellAbility getChangeStateDrawback(final AbilityFactory abilityFactory) {
|
||||
final AbilitySub ret = new AbilitySub(abilityFactory.getHostCard(), abilityFactory.getAbTgt()) {
|
||||
|
||||
private static final long serialVersionUID = -3793247725721587468L;
|
||||
|
||||
@Override
|
||||
public String getStackDescription() {
|
||||
return AbilityFactoryChangeState.changeStateStackDescription(abilityFactory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean chkAIDrawback() {
|
||||
|
||||
// Gross generalization, but this always considers alternate
|
||||
// states more powerful
|
||||
if (abilityFactory.getHostCard().isInAlternateState()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doTrigger(final boolean mandatory) {
|
||||
if (!mandatory && abilityFactory.getHostCard().isInAlternateState()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resolve() {
|
||||
AbilityFactoryChangeState.changeStateResolve(abilityFactory, this);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
private static String changeStateStackDescription(final AbilityFactory abilityFactory, final SpellAbility sa) {
|
||||
final Map<String, String> params = abilityFactory.getMapParams();
|
||||
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
final Card host = abilityFactory.getHostCard();
|
||||
|
||||
final String conditionDesc = params.get("ConditionDescription");
|
||||
if (conditionDesc != null) {
|
||||
sb.append(conditionDesc).append(" ");
|
||||
}
|
||||
|
||||
ArrayList<Card> tgtCards;
|
||||
|
||||
final Target tgt = abilityFactory.getAbTgt();
|
||||
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(" - ");
|
||||
}
|
||||
|
||||
if (params.containsKey("Flip")) {
|
||||
sb.append("Flip");
|
||||
} else {
|
||||
sb.append("Transform ");
|
||||
}
|
||||
|
||||
final Iterator<Card> it = tgtCards.iterator();
|
||||
while (it.hasNext()) {
|
||||
final Card tgtC = it.next();
|
||||
if (tgtC.isFaceDown()) {
|
||||
sb.append("Morph ").append("(").append(tgtC.getUniqueNumber()).append(")");
|
||||
} else {
|
||||
sb.append(tgtC);
|
||||
}
|
||||
|
||||
if (it.hasNext()) {
|
||||
sb.append(", ");
|
||||
}
|
||||
}
|
||||
sb.append(".");
|
||||
|
||||
final AbilitySub abSub = sa.getSubAbility();
|
||||
if (abSub != null) {
|
||||
sb.append(abSub.getStackDescription());
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private static void changeStateResolve(final AbilityFactory abilityFactory, final SpellAbility sa) {
|
||||
|
||||
ArrayList<Card> tgtCards;
|
||||
|
||||
if (abilityFactory.getAbTgt() != null) {
|
||||
tgtCards = abilityFactory.getAbTgt().getTargetCards();
|
||||
} else {
|
||||
tgtCards = AbilityFactory.getDefinedCards(abilityFactory.getHostCard(),
|
||||
abilityFactory.getMapParams().get("Defined"), sa);
|
||||
}
|
||||
|
||||
for (final Card tgt : tgtCards) {
|
||||
if (abilityFactory.getAbTgt() != null) {
|
||||
if (!tgt.canTarget(sa)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
tgt.changeState();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// //////////////////////////////////////////////
|
||||
// changeStateAll //
|
||||
// //////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* Gets the change state all ability.
|
||||
*
|
||||
* @param abilityFactory
|
||||
* the aF
|
||||
* @return the change state all ability
|
||||
*/
|
||||
public static SpellAbility getChangeStateAllAbility(final AbilityFactory abilityFactory) {
|
||||
final SpellAbility ret = new AbilityActivated(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
|
||||
abilityFactory.getAbTgt()) {
|
||||
|
||||
private static final long serialVersionUID = 7841029107610111992L;
|
||||
|
||||
@Override
|
||||
public String getStackDescription() {
|
||||
return AbilityFactoryChangeState.changeStateAllStackDescription(abilityFactory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resolve() {
|
||||
AbilityFactoryChangeState.changeStateAllResolve(abilityFactory, this);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the change state all spell.
|
||||
*
|
||||
* @param abilityFactory
|
||||
* the aF
|
||||
* @return the change state all spell
|
||||
*/
|
||||
public static SpellAbility getChangeStateAllSpell(final AbilityFactory abilityFactory) {
|
||||
final SpellAbility ret = new Spell(abilityFactory.getHostCard()) {
|
||||
|
||||
private static final long serialVersionUID = 4217632586060204603L;
|
||||
|
||||
@Override
|
||||
public String getStackDescription() {
|
||||
return AbilityFactoryChangeState.changeStateAllStackDescription(abilityFactory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resolve() {
|
||||
AbilityFactoryChangeState.changeStateAllResolve(abilityFactory, this);
|
||||
}
|
||||
};
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the change state all drawback.
|
||||
*
|
||||
* @param abilityFactory
|
||||
* the aF
|
||||
* @return the change state all drawback
|
||||
*/
|
||||
public static SpellAbility getChangeStateAllDrawback(final AbilityFactory abilityFactory) {
|
||||
final AbilitySub ret = new AbilitySub(abilityFactory.getHostCard(), abilityFactory.getAbTgt()) {
|
||||
|
||||
private static final long serialVersionUID = 4047514893482113436L;
|
||||
|
||||
@Override
|
||||
public String getStackDescription() {
|
||||
return AbilityFactoryChangeState.changeStateAllStackDescription(abilityFactory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean chkAIDrawback() {
|
||||
|
||||
// Gross generalization, but this always considers alternate
|
||||
// states more powerful
|
||||
if (abilityFactory.getHostCard().isInAlternateState()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doTrigger(final boolean mandatory) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resolve() {
|
||||
AbilityFactoryChangeState.changeStateAllResolve(abilityFactory, this);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
private static void changeStateAllResolve(final AbilityFactory abilityFactory, final SpellAbility sa) {
|
||||
final HashMap<String, String> params = abilityFactory.getMapParams();
|
||||
|
||||
final Card card = sa.getSourceCard();
|
||||
|
||||
final Target tgt = abilityFactory.getAbTgt();
|
||||
Player targetPlayer = null;
|
||||
if (tgt != null) {
|
||||
targetPlayer = tgt.getTargetPlayers().get(0);
|
||||
}
|
||||
|
||||
String valid = "";
|
||||
|
||||
if (params.containsKey("ValidCards")) {
|
||||
valid = params.get("ValidCards");
|
||||
}
|
||||
|
||||
// Ugh. If calculateAmount needs to be called with DestroyAll it _needs_
|
||||
// to use the X variable
|
||||
// We really need a better solution to this
|
||||
if (valid.contains("X")) {
|
||||
valid = valid.replace("X", Integer.toString(AbilityFactory.calculateAmount(card, "X", sa)));
|
||||
}
|
||||
|
||||
CardList list = AllZoneUtil.getCardsIn(Zone.Battlefield);
|
||||
|
||||
if (targetPlayer != null) {
|
||||
list = list.getController(targetPlayer);
|
||||
}
|
||||
|
||||
list = AbilityFactory.filterListByType(list, valid, sa);
|
||||
|
||||
final boolean remChanged = params.containsKey("RememberChanged");
|
||||
if (remChanged) {
|
||||
card.clearRemembered();
|
||||
}
|
||||
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
if (list.get(i).changeState()) {
|
||||
card.addRemembered(list.get(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static String changeStateAllStackDescription(final AbilityFactory abilityFactory, final SpellAbility sa) {
|
||||
|
||||
final Card host = abilityFactory.getHostCard();
|
||||
final Map<String, String> params = abilityFactory.getMapParams();
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
|
||||
if (sa instanceof AbilitySub) {
|
||||
sb.append(" ");
|
||||
} else {
|
||||
sb.append(host).append(" - ");
|
||||
}
|
||||
|
||||
if (params.containsKey("Flip")) {
|
||||
sb.append("Flip");
|
||||
} else {
|
||||
sb.append("Transform ");
|
||||
}
|
||||
|
||||
sb.append(" permanents.");
|
||||
|
||||
final AbilitySub abSub = sa.getSubAbility();
|
||||
if (abSub != null) {
|
||||
sb.append(abSub.getStackDescription());
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1745,7 +1745,7 @@ public final class AbilityFactoryChangeZone {
|
||||
|
||||
if ((tgt != null) && origin.equals(Zone.Battlefield)) {
|
||||
// check targeting
|
||||
if (!CardFactoryUtil.canTarget(sa.getSourceCard(), tgtC)) {
|
||||
if (!tgtC.canTarget(sa)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -712,7 +712,7 @@ public final class AbilityFactoryCombat {
|
||||
}
|
||||
|
||||
for (final Card c : tgtCards) {
|
||||
if ((tgt == null) || CardFactoryUtil.canTarget(sa, c)) {
|
||||
if ((tgt == null) || c.canTarget(sa)) {
|
||||
AllZone.getCombat().removeFromCombat(c);
|
||||
}
|
||||
}
|
||||
@@ -997,7 +997,7 @@ public final class AbilityFactoryCombat {
|
||||
}
|
||||
|
||||
for (final Card c : tgtCards) {
|
||||
if ((tgt == null) || CardFactoryUtil.canTarget(sa, c)) {
|
||||
if ((tgt == null) || c.canTarget(sa)) {
|
||||
final Card attacker = cards.get(0);
|
||||
c.addMustBlockCard(attacker);
|
||||
System.out.println(c + " is adding " + attacker + " to mustBlockCards: " + c.getMustBlockCards());
|
||||
|
||||
@@ -342,7 +342,7 @@ public final class AbilityFactoryCopy {
|
||||
hostCard.clearClones();
|
||||
|
||||
for (final Card c : tgtCards) {
|
||||
if ((tgt == null) || CardFactoryUtil.canTarget(hostCard, c)) {
|
||||
if ((tgt == null) || c.canTarget(sa)) {
|
||||
|
||||
boolean wasInAlt = false;
|
||||
if (c.isInAlternateState()) {
|
||||
@@ -729,7 +729,7 @@ public final class AbilityFactoryCopy {
|
||||
}
|
||||
|
||||
chosenSA.setActivatingPlayer(sa.getActivatingPlayer());
|
||||
if ((tgt == null) || CardFactoryUtil.canTarget(card, chosenSA.getSourceCard())) {
|
||||
if ((tgt == null)) {
|
||||
for (int i = 0; i < amount; i++) {
|
||||
AllZone.getCardFactory().copySpellontoStack(card, chosenSA.getSourceCard(), chosenSA, true);
|
||||
}
|
||||
|
||||
@@ -255,7 +255,7 @@ public class AbilityFactoryCounters {
|
||||
list = list.filter(new CardListFilter() {
|
||||
@Override
|
||||
public boolean addCard(final Card c) {
|
||||
return CardFactoryUtil.canTarget(source, c)
|
||||
return c.canTarget(sa)
|
||||
&& !c.hasKeyword("CARDNAME can't have counters placed on it.")
|
||||
&& !(c.hasKeyword("CARDNAME can't have -1/-1 counters placed on it.") && type.equals("M1M1"));
|
||||
}
|
||||
@@ -408,7 +408,7 @@ public class AbilityFactoryCounters {
|
||||
list = list.filter(new CardListFilter() {
|
||||
@Override
|
||||
public boolean addCard(final Card c) {
|
||||
return CardFactoryUtil.canTarget(source, c);
|
||||
return c.canTarget(sa);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -673,7 +673,7 @@ public class AbilityFactoryCounters {
|
||||
}
|
||||
|
||||
for (final Card tgtCard : tgtCards) {
|
||||
if ((tgt == null) || CardFactoryUtil.canTarget(card, tgtCard)) {
|
||||
if ((tgt == null) || tgtCard.canTarget(sa)) {
|
||||
if (max != -1) {
|
||||
counterAmount = max - tgtCard.getCounters(Counters.valueOf(type));
|
||||
}
|
||||
@@ -1045,7 +1045,7 @@ public class AbilityFactoryCounters {
|
||||
}
|
||||
|
||||
for (final Card tgtCard : tgtCards) {
|
||||
if ((tgt == null) || CardFactoryUtil.canTarget(card, tgtCard)) {
|
||||
if ((tgt == null) || tgtCard.canTarget(sa)) {
|
||||
final PlayerZone zone = AllZone.getZoneOf(tgtCard);
|
||||
|
||||
if (zone.is(Constant.Zone.Battlefield) || zone.is(Constant.Zone.Exile)) {
|
||||
|
||||
@@ -773,7 +773,7 @@ public class AbilityFactoryDealDamage {
|
||||
for (final Object o : tgts) {
|
||||
if (o instanceof Card) {
|
||||
final Card c = (Card) o;
|
||||
if (AllZoneUtil.isCardInPlay(c) && (!targeted || CardFactoryUtil.canTarget(this.abilityFactory.getHostCard(), c))) {
|
||||
if (AllZoneUtil.isCardInPlay(c) && (!targeted || c.canTarget(saMe))) {
|
||||
if (noPrevention) {
|
||||
c.addDamageWithoutPrevention(dmg, source);
|
||||
} else {
|
||||
@@ -1434,7 +1434,7 @@ public class AbilityFactoryDealDamage {
|
||||
//System.out.println(source+" deals "+dmg+" damage to "+o.toString());
|
||||
if (o instanceof Card) {
|
||||
final Card c = (Card) o;
|
||||
if (AllZoneUtil.isCardInPlay(c) && (!targeted || CardFactoryUtil.canTarget(this.abilityFactory.getHostCard(), c))) {
|
||||
if (AllZoneUtil.isCardInPlay(c) && (!targeted || c.canTarget(sa))) {
|
||||
c.addDamage(dmg, source);
|
||||
}
|
||||
|
||||
|
||||
@@ -552,7 +552,7 @@ public final class AbilityFactoryDebuff {
|
||||
|
||||
for (final Card tgtC : tgtCards) {
|
||||
final ArrayList<String> hadIntrinsic = new ArrayList<String>();
|
||||
if (AllZoneUtil.isCardInPlay(tgtC) && CardFactoryUtil.canTarget(host, tgtC)) {
|
||||
if (AllZoneUtil.isCardInPlay(tgtC) && tgtC.canTarget(sa)) {
|
||||
for (final String kw : kws) {
|
||||
if (tgtC.getIntrinsicKeyword().contains(kw)) {
|
||||
hadIntrinsic.add(kw);
|
||||
@@ -772,7 +772,7 @@ public final class AbilityFactoryDebuff {
|
||||
|
||||
for (final Card tgtC : list) {
|
||||
final ArrayList<String> hadIntrinsic = new ArrayList<String>();
|
||||
if (AllZoneUtil.isCardInPlay(tgtC) && CardFactoryUtil.canTarget(hostCard, tgtC)) {
|
||||
if (AllZoneUtil.isCardInPlay(tgtC) && tgtC.canTarget(sa)) {
|
||||
for (final String kw : kws) {
|
||||
if (tgtC.getIntrinsicKeyword().contains(kw)) {
|
||||
hadIntrinsic.add(kw);
|
||||
|
||||
@@ -500,7 +500,7 @@ public class AbilityFactoryDestroy {
|
||||
}
|
||||
|
||||
for (final Card tgtC : tgtCards) {
|
||||
if (AllZoneUtil.isCardInPlay(tgtC) && ((tgt == null) || CardFactoryUtil.canTarget(card, tgtC))) {
|
||||
if (AllZoneUtil.isCardInPlay(tgtC) && ((tgt == null) || tgtC.canTarget(sa))) {
|
||||
if (sac) {
|
||||
AllZone.getGameAction().sacrifice(tgtC);
|
||||
} else if (noRegen) {
|
||||
|
||||
@@ -285,7 +285,7 @@ public class AbilityFactoryGainControl {
|
||||
public boolean addCard(final Card c) {
|
||||
final Map<String, String> vars = c.getSVars();
|
||||
return !vars.containsKey("RemAIDeck")
|
||||
&& CardFactoryUtil.canTarget(AbilityFactoryGainControl.this.hostCard, c);
|
||||
&& c.canTarget(sa);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -388,7 +388,7 @@ public class AbilityFactoryGainControl {
|
||||
this.hostCard.addGainControlTarget(tgtC);
|
||||
}
|
||||
|
||||
if (AllZoneUtil.isCardInPlay(tgtC) && CardFactoryUtil.canTarget(this.hostCard, tgtC)) {
|
||||
if (AllZoneUtil.isCardInPlay(tgtC) && tgtC.canTarget(sa)) {
|
||||
|
||||
if (this.params.containsKey("NewController")) {
|
||||
tgtC.addController(newController.get(0));
|
||||
|
||||
@@ -550,7 +550,7 @@ public class AbilityFactoryPermanentState {
|
||||
|
||||
for (final Card tgtC : tgtCards) {
|
||||
if (AllZoneUtil.isCardInPlay(tgtC)
|
||||
&& ((tgt == null) || CardFactoryUtil.canTarget(af.getHostCard(), tgtC))) {
|
||||
&& ((tgt == null) || tgtC.canTarget(sa))) {
|
||||
tgtC.untap();
|
||||
}
|
||||
}
|
||||
@@ -1115,7 +1115,7 @@ public class AbilityFactoryPermanentState {
|
||||
}
|
||||
|
||||
for (final Card tgtC : tgtCards) {
|
||||
if (AllZoneUtil.isCardInPlay(tgtC) && ((tgt == null) || CardFactoryUtil.canTarget(af.getHostCard(), tgtC))) {
|
||||
if (AllZoneUtil.isCardInPlay(tgtC) && ((tgt == null) || tgtC.canTarget(sa))) {
|
||||
tgtC.tap();
|
||||
}
|
||||
}
|
||||
@@ -2010,7 +2010,7 @@ public class AbilityFactoryPermanentState {
|
||||
}
|
||||
|
||||
for (final Card tgtC : tgtCards) {
|
||||
if (AllZoneUtil.isCardInPlay(tgtC) && ((tgt == null) || CardFactoryUtil.canTarget(af.getHostCard(), tgtC))) {
|
||||
if (AllZoneUtil.isCardInPlay(tgtC) && ((tgt == null) || tgtC.canTarget(sa))) {
|
||||
if (sa.getActivatingPlayer().isHuman()) {
|
||||
final String[] tapOrUntap = new String[] { "Tap", "Untap" };
|
||||
final Object z = GuiUtils.getChoiceOptional("Tap or Untap " + tgtC + "?", tapOrUntap);
|
||||
|
||||
@@ -486,7 +486,7 @@ public class AbilityFactoryPreventDamage {
|
||||
for (final Object o : tgts) {
|
||||
if (o instanceof Card) {
|
||||
final Card c = (Card) o;
|
||||
if (AllZoneUtil.isCardInPlay(c) && (!targeted || CardFactoryUtil.canTarget(af.getHostCard(), c))) {
|
||||
if (AllZoneUtil.isCardInPlay(c) && (!targeted || c.canTarget(sa))) {
|
||||
c.addPreventNextDamage(numDam);
|
||||
}
|
||||
|
||||
|
||||
@@ -204,7 +204,7 @@ public final class AbilityFactoryProtection {
|
||||
list = list.filter(new CardListFilter() {
|
||||
@Override
|
||||
public boolean addCard(final Card c) {
|
||||
if (!CardFactoryUtil.canTarget(hostCard, c)) {
|
||||
if (!c.canTarget(sa)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -719,7 +719,7 @@ public final class AbilityFactoryProtection {
|
||||
}
|
||||
|
||||
// if this is a target, make sure we can still target now
|
||||
if ((tgt != null) && !CardFactoryUtil.canTarget(host, tgtC)) {
|
||||
if ((tgt != null) && !tgtC.canTarget(sa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -228,7 +228,7 @@ public class AbilityFactoryPump {
|
||||
* a int.
|
||||
* @return a {@link forge.CardList} object.
|
||||
*/
|
||||
private CardList getPumpCreatures(final int defense, final int attack) {
|
||||
private CardList getPumpCreatures(final int defense, final int attack, final SpellAbility sa) {
|
||||
|
||||
final boolean kHaste = this.keywords.contains("Haste");
|
||||
final boolean evasive = (this.keywords.contains("Flying") || this.keywords.contains("Horsemanship")
|
||||
@@ -245,7 +245,7 @@ public class AbilityFactoryPump {
|
||||
list = list.filter(new CardListFilter() {
|
||||
@Override
|
||||
public boolean addCard(final Card c) {
|
||||
if (!CardFactoryUtil.canTarget(AbilityFactoryPump.this.hostCard, c)) {
|
||||
if (!c.canTarget(sa)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -541,7 +541,7 @@ public class AbilityFactoryPump {
|
||||
if (this.abilityFactory.isCurse()) {
|
||||
list = this.getCurseCreatures(sa, defense, attack);
|
||||
} else {
|
||||
list = this.getPumpCreatures(defense, attack);
|
||||
list = this.getPumpCreatures(defense, attack, sa);
|
||||
}
|
||||
|
||||
list = list.getValidCards(tgt.getValidTgts(), sa.getActivatingPlayer(), sa.getSourceCard());
|
||||
@@ -893,7 +893,7 @@ public class AbilityFactoryPump {
|
||||
}
|
||||
|
||||
// if pump is a target, make sure we can still target now
|
||||
if ((tgt != null) && !CardFactoryUtil.canTarget(this.abilityFactory.getHostCard(), tgtC)) {
|
||||
if ((tgt != null) && !tgtC.canTarget(sa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -460,7 +460,7 @@ public class AbilityFactoryRegenerate {
|
||||
}
|
||||
};
|
||||
|
||||
if (AllZoneUtil.isCardInPlay(tgtC) && ((tgt == null) || CardFactoryUtil.canTarget(hostCard, tgtC))) {
|
||||
if (AllZoneUtil.isCardInPlay(tgtC) && ((tgt == null) || tgtC.canTarget(sa))) {
|
||||
tgtC.addShield();
|
||||
AllZone.getEndOfTurn().addUntil(untilEOT);
|
||||
}
|
||||
|
||||
@@ -999,7 +999,7 @@ public abstract class AbstractCardFactory implements CardFactoryInterface {
|
||||
|
||||
if (this.getTargetCard() != null) {
|
||||
if (AllZoneUtil.isCardInPlay(this.getTargetCard())
|
||||
&& CardFactoryUtil.canTarget(card, this.getTargetCard())) {
|
||||
&& this.getTargetCard().canTarget(this)) {
|
||||
this.getTargetCard().addDamage(damage, card);
|
||||
}
|
||||
} else {
|
||||
@@ -1210,7 +1210,7 @@ public abstract class AbstractCardFactory implements CardFactoryInterface {
|
||||
@Override
|
||||
public void resolve() {
|
||||
final Card target = this.getTargetCard();
|
||||
if (AllZoneUtil.isCardInPlay(target) && CardFactoryUtil.canTarget(card, target)) {
|
||||
if (AllZoneUtil.isCardInPlay(target) && target.canTarget(this)) {
|
||||
target.addExtrinsicKeyword("This card doesn't untap during your next untap step.");
|
||||
} // is card in play?
|
||||
} // resolve()
|
||||
@@ -1622,7 +1622,7 @@ public abstract class AbstractCardFactory implements CardFactoryInterface {
|
||||
final Card myc = this.getParent().getTargetCard();
|
||||
final Card oppc = this.getTargetCard();
|
||||
if (AllZoneUtil.isCardInPlay(myc) && AllZoneUtil.isCardInPlay(oppc)) {
|
||||
if (CardFactoryUtil.canTarget(card, myc) && CardFactoryUtil.canTarget(card, oppc)) {
|
||||
if (myc.canTarget(this) && oppc.canTarget(this)) {
|
||||
final int myPower = myc.getNetAttack();
|
||||
final int oppPower = oppc.getNetAttack();
|
||||
myc.addDamage(oppPower, oppc);
|
||||
|
||||
@@ -133,7 +133,7 @@ class CardFactoryAuras {
|
||||
|
||||
final Card c = this.getTargetCard();
|
||||
|
||||
if (AllZoneUtil.isCardInPlay(c) && CardFactoryUtil.canTarget(card, c)) {
|
||||
if (AllZoneUtil.isCardInPlay(c) && c.canTarget(this)) {
|
||||
card.enchantEntity(c);
|
||||
}
|
||||
|
||||
@@ -289,7 +289,7 @@ class CardFactoryAuras {
|
||||
CardListUtil.sortAttack(list);
|
||||
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
if (CardFactoryUtil.canTarget(card, list.get(i))) {
|
||||
if (list.get(i).canTarget(this)) {
|
||||
this.setTargetCard(list.get(i));
|
||||
return super.canPlayAI();
|
||||
}
|
||||
@@ -303,7 +303,7 @@ class CardFactoryAuras {
|
||||
|
||||
final Card c = this.getTargetCard();
|
||||
|
||||
if (AllZoneUtil.isCardInPlay(c) && CardFactoryUtil.canTarget(card, c)) {
|
||||
if (AllZoneUtil.isCardInPlay(c) && c.canTarget(this)) {
|
||||
card.enchantEntity(c);
|
||||
Log.debug("Enchanted: " + this.getTargetCard());
|
||||
}
|
||||
@@ -392,7 +392,7 @@ class CardFactoryAuras {
|
||||
CardListUtil.sortFlying(list);
|
||||
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
if (CardFactoryUtil.canTarget(card, list.get(i))
|
||||
if (list.get(i).canTarget(this)
|
||||
&& (list.get(i).getNetAttack() >= list.get(i).getNetDefense())
|
||||
&& (list.get(i).getNetAttack() >= 3)) {
|
||||
this.setTargetCard(list.get(i));
|
||||
@@ -410,7 +410,7 @@ class CardFactoryAuras {
|
||||
|
||||
final Card c = this.getTargetCard();
|
||||
|
||||
if (AllZoneUtil.isCardInPlay(c) && CardFactoryUtil.canTarget(aura, c)) {
|
||||
if (AllZoneUtil.isCardInPlay(c) && c.canTarget(this)) {
|
||||
aura.enchantEntity(c);
|
||||
}
|
||||
} // resolve()
|
||||
|
||||
@@ -201,7 +201,7 @@ public class CardFactoryCreatures {
|
||||
|
||||
if (c.sumAllCounters() == 0) {
|
||||
return;
|
||||
} else if (AllZoneUtil.isCardInPlay(c) && CardFactoryUtil.canTarget(card, c)) {
|
||||
} else if (AllZoneUtil.isCardInPlay(c) && c.canTarget(this)) {
|
||||
// zerker clean up:
|
||||
for (final Counters c1 : Counters.values()) {
|
||||
if (c.getCounters(c1) > 0) {
|
||||
@@ -723,7 +723,7 @@ public class CardFactoryCreatures {
|
||||
return;
|
||||
}
|
||||
|
||||
if (c.isLand() && zone.is(Constant.Zone.Battlefield) && CardFactoryUtil.canTarget(card, c)) {
|
||||
if (c.isLand() && zone.is(Constant.Zone.Battlefield) && c.canTarget(ability)) {
|
||||
// System.out.println("c is: " +c);
|
||||
target[index[0]] = c;
|
||||
index[0]++;
|
||||
|
||||
@@ -395,7 +395,7 @@ public class CardFactoryInstants {
|
||||
|
||||
@Override
|
||||
public void selectCard(final Card card, final PlayerZone zone) {
|
||||
if (!card.isLand() && zone.is(Constant.Zone.Battlefield) && CardFactoryUtil.canTarget(spell, card)) {
|
||||
if (!card.isLand() && zone.is(Constant.Zone.Battlefield) && card.canTarget(spell)) {
|
||||
spell.setTargetCard(card);
|
||||
if (this.isFree()) {
|
||||
this.setFree(false);
|
||||
|
||||
@@ -718,7 +718,7 @@ public class CardFactorySorceries {
|
||||
@Override
|
||||
public void resolve() {
|
||||
if (AllZoneUtil.isCardInPlay(this.getTargetCard())
|
||||
&& CardFactoryUtil.canTarget(card, this.getTargetCard())) {
|
||||
&& this.getTargetCard().canTarget(this)) {
|
||||
|
||||
AllZone.getGameAction().destroy(this.getTargetCard());
|
||||
|
||||
|
||||
@@ -333,31 +333,6 @@ public class CardFactoryUtil {
|
||||
return biggest;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* AI_getHumanArtifact.
|
||||
* </p>
|
||||
*
|
||||
* @param spell
|
||||
* a {@link forge.Card} object.
|
||||
* @param targeted
|
||||
* a boolean.
|
||||
* @return a {@link forge.CardList} object.
|
||||
*/
|
||||
public static CardList getHumanArtifactAI(final Card spell, final boolean targeted) {
|
||||
CardList artifact = AllZone.getHumanPlayer().getCardsIn(Zone.Battlefield);
|
||||
artifact = artifact.getType("Artifact");
|
||||
if (targeted) {
|
||||
artifact = artifact.filter(new CardListFilter() {
|
||||
@Override
|
||||
public boolean addCard(final Card c) {
|
||||
return CardFactoryUtil.canTarget(spell, c);
|
||||
}
|
||||
});
|
||||
}
|
||||
return artifact;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* AI_doesCreatureAttack.
|
||||
@@ -1415,7 +1390,7 @@ public class CardFactoryUtil {
|
||||
@Override
|
||||
public void resolve() {
|
||||
final Card targetCard = this.getTargetCard();
|
||||
if (AllZoneUtil.isCardInPlay(targetCard) && CardFactoryUtil.canTarget(sourceCard, targetCard)) {
|
||||
if (AllZoneUtil.isCardInPlay(targetCard) && targetCard.canTarget(this)) {
|
||||
|
||||
if (sourceCard.isEquipping()) {
|
||||
final Card crd = sourceCard.getEquipping().get(0);
|
||||
@@ -1852,7 +1827,7 @@ public class CardFactoryUtil {
|
||||
|
||||
@Override
|
||||
public void selectCard(final Card card, final PlayerZone zone) {
|
||||
if (targeted && !CardFactoryUtil.canTarget(spell, card)) {
|
||||
if (targeted && !card.canTarget(spell)) {
|
||||
AllZone.getDisplay().showMessage("Cannot target this card (Shroud? Protection?).");
|
||||
} else if (choices.contains(card)) {
|
||||
spell.setTargetCard(card);
|
||||
@@ -2092,7 +2067,7 @@ public class CardFactoryUtil {
|
||||
@Override
|
||||
public void selectCard(final Card card2, final PlayerZone zone) {
|
||||
if (card2.isCreature() && card2.isArtifact() && zone.is(Constant.Zone.Battlefield)
|
||||
&& CardFactoryUtil.canTarget(ability, card)) {
|
||||
&& card.canTarget(ability)) {
|
||||
ability.setTargetCard(card2);
|
||||
ability.setStackDescription("Put " + card.getCounters(Counters.P1P1) + " +1/+1 counter/s from "
|
||||
+ card + " on " + card2);
|
||||
@@ -2392,7 +2367,7 @@ public class CardFactoryUtil {
|
||||
}
|
||||
|
||||
// Make sure it's still targetable as well
|
||||
return CardFactoryUtil.canTarget(source, target);
|
||||
return target.canTarget(ability);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2406,9 +2381,9 @@ public class CardFactoryUtil {
|
||||
* a {@link forge.Card} object.
|
||||
* @return a boolean.
|
||||
*/
|
||||
public static boolean canTarget(final SpellAbility ability, final Card target) {
|
||||
return CardFactoryUtil.canTarget(ability.getSourceCard(), target);
|
||||
}
|
||||
/*public static boolean canTarget(final SpellAbility ability, final Card target) {
|
||||
return target.canTarget(ability);
|
||||
}*/
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
||||
@@ -13,7 +13,6 @@ import forge.Constant;
|
||||
import forge.Constant.Zone;
|
||||
import forge.Player;
|
||||
import forge.PlayerZone;
|
||||
import forge.card.cardfactory.CardFactoryUtil;
|
||||
import forge.gui.GuiUtils;
|
||||
import forge.gui.input.Input;
|
||||
|
||||
@@ -337,7 +336,7 @@ public class TargetSelection {
|
||||
public void selectCard(final Card card, final PlayerZone zone) {
|
||||
// leave this in temporarily, there some seriously wrong things
|
||||
// going on here
|
||||
if (targeted && !CardFactoryUtil.canTarget(sa, card)) {
|
||||
if (targeted && !card.canTarget(sa)) {
|
||||
AllZone.getDisplay().showMessage("Cannot target this card (Shroud? Protection? Restrictions?).");
|
||||
} else if (choices.contains(card)) {
|
||||
tgt.addTarget(card);
|
||||
|
||||
@@ -11,21 +11,6 @@ import forge.card.spellability.SpellAbility;
|
||||
*/
|
||||
public class StaticAbilityCantTarget {
|
||||
|
||||
/**
|
||||
* TODO Write javadoc for this method.
|
||||
*
|
||||
* @param stAb
|
||||
* a StaticAbility
|
||||
* @param source
|
||||
* the source
|
||||
* @param target
|
||||
* the target
|
||||
* @param damage
|
||||
* the damage
|
||||
* @param isCombat
|
||||
* the is combat
|
||||
* @return the int
|
||||
*/
|
||||
public static boolean applyCantTargetAbility(final StaticAbility stAb, final Card card, SpellAbility sa) {
|
||||
final HashMap<String, String> params = stAb.getMapParams();
|
||||
final Card hostCard = stAb.getHostCard();
|
||||
|
||||
Reference in New Issue
Block a user