Code cleanup

This commit is contained in:
drdev
2013-12-13 05:19:09 +00:00
parent 5ed6fba085
commit 7fe3799ea6
2 changed files with 180 additions and 108 deletions

View File

@@ -310,8 +310,9 @@ public class AbilityUtils {
// Try to fetch variable, try ability first, then card. // Try to fetch variable, try ability first, then card.
String svarval = null; String svarval = null;
if (amount.indexOf('$') > 0 ) // when there is a dollar sign, it's not a reference, it's a raw value! if (amount.indexOf('$') > 0) { // when there is a dollar sign, it's not a reference, it's a raw value!
svarval = amount; svarval = amount;
}
else if (ability != null) { else if (ability != null) {
svarval = ability.getSVar(amount); svarval = ability.getSVar(amount);
} }
@@ -371,24 +372,29 @@ public class AbilityUtils {
if (hType.equals("Players") || hType.equals("")) { if (hType.equals("Players") || hType.equals("")) {
players.addAll(game.getPlayers()); players.addAll(game.getPlayers());
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier; return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
} else if (hType.equals("Opponents")) { }
else if (hType.equals("Opponents")) {
players.addAll(card.getController().getOpponents()); players.addAll(card.getController().getOpponents());
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier; return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
} else if (hType.equals("Other")) { }
else if (hType.equals("Other")) {
players.addAll(card.getController().getAllOtherPlayers()); players.addAll(card.getController().getAllOtherPlayers());
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier; return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
} else if (hType.equals("Remembered")) { }
else if (hType.equals("Remembered")) {
for (final Object o : card.getRemembered()) { for (final Object o : card.getRemembered()) {
if (o instanceof Player) { if (o instanceof Player) {
players.add((Player) o); players.add((Player) o);
} }
} }
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier; return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
} else if (hType.equals("NonActive")) { }
else if (hType.equals("NonActive")) {
players.addAll(game.getPlayers()); players.addAll(game.getPlayers());
players.remove(game.getPhaseHandler().getPlayerTurn()); players.remove(game.getPhaseHandler().getPlayerTurn());
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier; return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
} else if (hType.startsWith("Property")) { }
else if (hType.startsWith("Property")) {
String defined = hType.split("Property")[1]; String defined = hType.split("Property")[1];
for (Player p : game.getPlayers()) { for (Player p : game.getPlayers()) {
if (p.hasProperty(defined, ability.getActivatingPlayer(), ability.getSourceCard())) { if (p.hasProperty(defined, ability.getActivatingPlayer(), ability.getSourceCard())) {
@@ -414,7 +420,8 @@ public class AbilityUtils {
list.add((Card) o); list.add((Card) o);
} }
} }
} else { }
else {
for (final Object o : newCard.getRemembered()) { for (final Object o : newCard.getRemembered()) {
if (o instanceof Card) { if (o instanceof Card) {
list.add(game.getCardState((Card) o)); list.add(game.getCardState((Card) o));
@@ -435,7 +442,8 @@ public class AbilityUtils {
if (calcX[0].endsWith("LKI")) { // last known information if (calcX[0].endsWith("LKI")) { // last known information
list.addAll(newCard.getImprinted()); list.addAll(newCard.getImprinted());
} else { }
else {
for (final Card c : newCard.getImprinted()) { for (final Card c : newCard.getImprinted()) {
list.add(game.getCardState(c)); list.add(game.getCardState(c));
} }
@@ -456,8 +464,9 @@ public class AbilityUtils {
return CardFactoryUtil.handlePaid(list, calcX[1], card) * multiplier; return CardFactoryUtil.handlePaid(list, calcX[1], card) * multiplier;
} }
if (ability == null) if (ability == null) {
return 0; return 0;
}
// Player attribute counting // Player attribute counting
if (calcX[0].startsWith("TargetedPlayer")) { if (calcX[0].startsWith("TargetedPlayer")) {
@@ -483,8 +492,7 @@ public class AbilityUtils {
if (calcX[0].startsWith("TargetedController")) { if (calcX[0].startsWith("TargetedController")) {
final ArrayList<Player> players = new ArrayList<Player>(); final ArrayList<Player> players = new ArrayList<Player>();
final List<Card> list = getDefinedCards(card, "Targeted", ability); final List<Card> list = getDefinedCards(card, "Targeted", ability);
final List<SpellAbility> sas = AbilityUtils.getDefinedSpellAbilities(card, "Targeted", final List<SpellAbility> sas = AbilityUtils.getDefinedSpellAbilities(card, "Targeted", ability);
ability);
for (final Card c : list) { for (final Card c : list) {
final Player p = c.getController(); final Player p = c.getController();
@@ -519,7 +527,7 @@ public class AbilityUtils {
players.addAll(getDefinedPlayers(card, "TriggeredCardController", ability)); players.addAll(getDefinedPlayers(card, "TriggeredCardController", ability));
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier; return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
} }
if(calcX[0].equals("TriggeredSpellAbility")) { if (calcX[0].equals("TriggeredSpellAbility")) {
final SpellAbility root = ability.getRootAbility(); final SpellAbility root = ability.getRootAbility();
SpellAbility sat = (SpellAbility) root.getTriggeringObject("SpellAbility"); SpellAbility sat = (SpellAbility) root.getTriggeringObject("SpellAbility");
return calculateAmount(sat.getSourceCard(), calcX[1], sat); return calculateAmount(sat.getSourceCard(), calcX[1], sat);
@@ -536,32 +544,41 @@ public class AbilityUtils {
List<Card> list = new ArrayList<Card>(); List<Card> list = new ArrayList<Card>();
if (calcX[0].startsWith("Sacrificed")) { if (calcX[0].startsWith("Sacrificed")) {
list = ability.getRootAbility().getPaidList("Sacrificed"); list = ability.getRootAbility().getPaidList("Sacrificed");
} else if (calcX[0].startsWith("Discarded")) { }
else if (calcX[0].startsWith("Discarded")) {
final SpellAbility root = ability.getRootAbility(); final SpellAbility root = ability.getRootAbility();
list = root.getPaidList("Discarded"); list = root.getPaidList("Discarded");
if ((null == list) && root.isTrigger()) { if ((null == list) && root.isTrigger()) {
list = root.getSourceCard().getSpellPermanent().getPaidList("Discarded"); list = root.getSourceCard().getSpellPermanent().getPaidList("Discarded");
} }
} else if (calcX[0].startsWith("Exiled")) { }
else if (calcX[0].startsWith("Exiled")) {
list = ability.getRootAbility().getPaidList("Exiled"); list = ability.getRootAbility().getPaidList("Exiled");
} else if (calcX[0].startsWith("Milled")) { }
else if (calcX[0].startsWith("Milled")) {
list = ability.getRootAbility().getPaidList("Milled"); list = ability.getRootAbility().getPaidList("Milled");
} else if (calcX[0].startsWith("Tapped")) { }
else if (calcX[0].startsWith("Tapped")) {
list = ability.getRootAbility().getPaidList("Tapped"); list = ability.getRootAbility().getPaidList("Tapped");
} else if (calcX[0].startsWith("Revealed")) { }
else if (calcX[0].startsWith("Revealed")) {
list = ability.getRootAbility().getPaidList("Revealed"); list = ability.getRootAbility().getPaidList("Revealed");
} else if (calcX[0].startsWith("Targeted")) { }
else if (calcX[0].startsWith("Targeted")) {
list = ability.findTargetedCards(); list = ability.findTargetedCards();
} else if (calcX[0].startsWith("ParentTargeted")) { }
else if (calcX[0].startsWith("ParentTargeted")) {
SpellAbility parent = ability.getParentTargetingCard(); SpellAbility parent = ability.getParentTargetingCard();
if (null != parent) { if (null != parent) {
list = parent.findTargetedCards(); list = parent.findTargetedCards();
} }
} else if (calcX[0].startsWith("Triggered")) { }
else if (calcX[0].startsWith("Triggered")) {
final SpellAbility root = ability.getRootAbility(); final SpellAbility root = ability.getRootAbility();
list = new ArrayList<Card>(); list = new ArrayList<Card>();
list.add((Card) root.getTriggeringObject(calcX[0].substring(9))); list.add((Card) root.getTriggeringObject(calcX[0].substring(9)));
} else if (calcX[0].startsWith("TriggerCount")) { }
else if (calcX[0].startsWith("TriggerCount")) {
// TriggerCount is similar to a regular Count, but just // TriggerCount is similar to a regular Count, but just
// pulls Integer Values from Trigger objects // pulls Integer Values from Trigger objects
final SpellAbility root = ability.getRootAbility(); final SpellAbility root = ability.getRootAbility();
@@ -570,11 +587,13 @@ public class AbilityUtils {
final int count = (Integer) root.getTriggeringObject(l[0]); final int count = (Integer) root.getTriggeringObject(l[0]);
return CardFactoryUtil.doXMath(count, m, card) * multiplier; return CardFactoryUtil.doXMath(count, m, card) * multiplier;
} else if (calcX[0].startsWith("Replaced")) { }
else if (calcX[0].startsWith("Replaced")) {
final SpellAbility root = ability.getRootAbility(); final SpellAbility root = ability.getRootAbility();
list = new ArrayList<Card>(); list = new ArrayList<Card>();
list.add((Card) root.getReplacingObject(calcX[0].substring(8))); list.add((Card) root.getReplacingObject(calcX[0].substring(8)));
} else if (calcX[0].startsWith("ReplaceCount")) { }
else if (calcX[0].startsWith("ReplaceCount")) {
// ReplaceCount is similar to a regular Count, but just // ReplaceCount is similar to a regular Count, but just
// pulls Integer Values from Replacement objects // pulls Integer Values from Replacement objects
final SpellAbility root = ability.getRootAbility(); final SpellAbility root = ability.getRootAbility();
@@ -583,7 +602,8 @@ public class AbilityUtils {
final int count = (Integer) root.getReplacingObject(l[0]); final int count = (Integer) root.getReplacingObject(l[0]);
return CardFactoryUtil.doXMath(count, m, card) * multiplier; return CardFactoryUtil.doXMath(count, m, card) * multiplier;
} else { }
else {
return 0; return 0;
} }
@@ -637,11 +657,14 @@ public class AbilityUtils {
if (type.startsWith("Triggered")) { if (type.startsWith("Triggered")) {
if (type.contains("Card")) { if (type.contains("Card")) {
o = sa.getTriggeringObject("Card"); o = sa.getTriggeringObject("Card");
} else if (type.contains("Attacker")) { }
else if (type.contains("Attacker")) {
o = sa.getTriggeringObject("Attacker"); o = sa.getTriggeringObject("Attacker");
} else if (type.contains("Blocker")) { }
else if (type.contains("Blocker")) {
o = sa.getTriggeringObject("Blocker"); o = sa.getTriggeringObject("Blocker");
} else { }
else {
o = sa.getTriggeringObject("Card"); o = sa.getTriggeringObject("Card");
} }
@@ -657,15 +680,18 @@ public class AbilityUtils {
source = (Card) (o); source = (Card) (o);
if (type.contains("TriggeredCard")) { if (type.contains("TriggeredCard")) {
type = type.replace("TriggeredCard", "Card"); type = type.replace("TriggeredCard", "Card");
} else if (type.contains("TriggeredAttacker")) { }
else if (type.contains("TriggeredAttacker")) {
type = type.replace("TriggeredAttacker", "Card"); type = type.replace("TriggeredAttacker", "Card");
} else if (type.contains("TriggeredBlocker")) { }
else if (type.contains("TriggeredBlocker")) {
type = type.replace("TriggeredBlocker", "Card"); type = type.replace("TriggeredBlocker", "Card");
} else { }
else {
type = type.replace("Triggered", "Card"); type = type.replace("Triggered", "Card");
} }
}
} else if (type.startsWith("Targeted")) { else if (type.startsWith("Targeted")) {
source = null; source = null;
List<Card> tgts = sa.findTargetedCards(); List<Card> tgts = sa.findTargetedCards();
if (!tgts.isEmpty()) { if (!tgts.isEmpty()) {
@@ -677,11 +703,12 @@ public class AbilityUtils {
if (type.startsWith("TargetedCard")) { if (type.startsWith("TargetedCard")) {
type = type.replace("TargetedCard", "Card"); type = type.replace("TargetedCard", "Card");
} else { }
else {
type = type.replace("Targeted", "Card"); type = type.replace("Targeted", "Card");
} }
}
} else if (type.startsWith("Remembered")) { else if (type.startsWith("Remembered")) {
boolean hasRememberedCard = false; boolean hasRememberedCard = false;
for (final Object object : source.getRemembered()) { for (final Object object : source.getRemembered()) {
if (object instanceof Card) { if (object instanceof Card) {
@@ -695,7 +722,8 @@ public class AbilityUtils {
if (!hasRememberedCard) { if (!hasRememberedCard) {
return new ArrayList<Card>(); return new ArrayList<Card>();
} }
} else if (type.equals("Card.AttachedBy")) { }
else if (type.equals("Card.AttachedBy")) {
source = source.getEnchantingCard(); source = source.getEnchantingCard();
type = type.replace("Card.AttachedBy", "Card.Self"); type = type.replace("Card.AttachedBy", "Card.Self");
} }
@@ -704,7 +732,7 @@ public class AbilityUtils {
int eqIndex = valid.indexOf("EQ"); int eqIndex = valid.indexOf("EQ");
if (eqIndex >= 0) { if (eqIndex >= 0) {
char reference = valid.charAt(eqIndex + 2); // take whatever goes after EQ char reference = valid.charAt(eqIndex + 2); // take whatever goes after EQ
if( Character.isLetter(reference)) { if (Character.isLetter(reference)) {
String varName = valid.substring(eqIndex + 2, eqIndex + 3); String varName = valid.substring(eqIndex + 2, eqIndex + 3);
valid = valid.replace("EQ" + varName, "EQ" + Integer.toString(calculateAmount(source, varName, sa))); valid = valid.replace("EQ" + varName, "EQ" + Integer.toString(calculateAmount(source, varName, sa)));
} }
@@ -735,12 +763,14 @@ public class AbilityUtils {
if (saTargeting != null) { if (saTargeting != null) {
Iterables.addAll(players, saTargeting.getTargets().getTargetPlayers()); Iterables.addAll(players, saTargeting.getTargets().getTargetPlayers());
} }
} else if (defined.equals("ParentTarget")) { }
else if (defined.equals("ParentTarget")) {
final SpellAbility parent = sa.getParentTargetingPlayer(); final SpellAbility parent = sa.getParentTargetingPlayer();
if (parent != null) { if (parent != null) {
Iterables.addAll(players, parent.getTargets().getTargetPlayers()); Iterables.addAll(players, parent.getTargets().getTargetPlayers());
} }
} else if (defined.equals("TargetedController")) { }
else if (defined.equals("TargetedController")) {
final List<Card> list = getDefinedCards(card, "Targeted", sa); final List<Card> list = getDefinedCards(card, "Targeted", sa);
final List<SpellAbility> sas = AbilityUtils.getDefinedSpellAbilities(card, "Targeted", sa); final List<SpellAbility> sas = AbilityUtils.getDefinedSpellAbilities(card, "Targeted", sa);
@@ -756,7 +786,8 @@ public class AbilityUtils {
players.add(p); players.add(p);
} }
} }
} else if (defined.equals("TargetedOwner")) { }
else if (defined.equals("TargetedOwner")) {
final List<Card> list = getDefinedCards(card, "Targeted", sa); final List<Card> list = getDefinedCards(card, "Targeted", sa);
for (final Card c : list) { for (final Card c : list) {
@@ -765,13 +796,15 @@ public class AbilityUtils {
players.add(p); players.add(p);
} }
} }
} else if (defined.equals("TargetedAndYou")) { }
else if (defined.equals("TargetedAndYou")) {
final SpellAbility saTargeting = sa.getSATargetingPlayer(); final SpellAbility saTargeting = sa.getSATargetingPlayer();
if (saTargeting != null) { if (saTargeting != null) {
Iterables.addAll(players, saTargeting.getTargets().getTargetPlayers()); Iterables.addAll(players, saTargeting.getTargets().getTargetPlayers());
players.add(sa.getActivatingPlayer()); players.add(sa.getActivatingPlayer());
} }
} else if (defined.equals("ParentTargetedController")) { }
else if (defined.equals("ParentTargetedController")) {
final List<Card> list = getDefinedCards(card, "ParentTarget", sa); final List<Card> list = getDefinedCards(card, "ParentTarget", sa);
final List<SpellAbility> sas = AbilityUtils.getDefinedSpellAbilities(card, "Targeted", sa); final List<SpellAbility> sas = AbilityUtils.getDefinedSpellAbilities(card, "Targeted", sa);
@@ -787,39 +820,46 @@ public class AbilityUtils {
players.add(p); players.add(p);
} }
} }
} else if (defined.equals("Remembered")) { }
else if (defined.equals("Remembered")) {
for (final Object rem : card.getRemembered()) { for (final Object rem : card.getRemembered()) {
if (rem instanceof Player) { if (rem instanceof Player) {
players.add((Player) rem); players.add((Player) rem);
} }
} }
} else if (defined.equals("RememberedOpponent")) { }
else if (defined.equals("RememberedOpponent")) {
for (final Object rem : card.getRemembered()) { for (final Object rem : card.getRemembered()) {
if (rem instanceof Player) { if (rem instanceof Player) {
players.add(((Player) rem).getOpponent()); players.add(((Player) rem).getOpponent());
} }
} }
} else if (defined.equals("RememberedController")) { }
else if (defined.equals("RememberedController")) {
for (final Object rem : card.getRemembered()) { for (final Object rem : card.getRemembered()) {
if (rem instanceof Card) { if (rem instanceof Card) {
players.add(((Card) rem).getController()); players.add(((Card) rem).getController());
} }
} }
} else if (defined.equals("RememberedOwner")) { }
else if (defined.equals("RememberedOwner")) {
for (final Object rem : card.getRemembered()) { for (final Object rem : card.getRemembered()) {
if (rem instanceof Card) { if (rem instanceof Card) {
players.add(((Card) rem).getOwner()); players.add(((Card) rem).getOwner());
} }
} }
} else if (defined.equals("ImprintedController")) { }
else if (defined.equals("ImprintedController")) {
for (final Card rem : card.getImprinted()) { for (final Card rem : card.getImprinted()) {
players.add(rem.getController()); players.add(rem.getController());
} }
} else if (defined.equals("ImprintedOwner")) { }
else if (defined.equals("ImprintedOwner")) {
for (final Card rem : card.getImprinted()) { for (final Card rem : card.getImprinted()) {
players.add(rem.getOwner()); players.add(rem.getOwner());
} }
} else if (defined.startsWith("Triggered")) { }
else if (defined.startsWith("Triggered")) {
final SpellAbility root = sa.getRootAbility(); final SpellAbility root = sa.getRootAbility();
Object o = null; Object o = null;
if (defined.endsWith("Controller")) { if (defined.endsWith("Controller")) {
@@ -832,7 +872,8 @@ public class AbilityUtils {
if (c instanceof SpellAbility) { if (c instanceof SpellAbility) {
o = ((SpellAbility) c).getSourceCard().getController(); o = ((SpellAbility) c).getSourceCard().getController();
} }
} else if (defined.endsWith("Opponent")) { }
else if (defined.endsWith("Opponent")) {
String triggeringType = defined.substring(9); String triggeringType = defined.substring(9);
triggeringType = triggeringType.substring(0, triggeringType.length() - 8); triggeringType = triggeringType.substring(0, triggeringType.length() - 8);
final Object c = root.getTriggeringObject(triggeringType); final Object c = root.getTriggeringObject(triggeringType);
@@ -842,14 +883,16 @@ public class AbilityUtils {
if (c instanceof SpellAbility) { if (c instanceof SpellAbility) {
o = ((SpellAbility) c).getSourceCard().getController().getOpponents(); o = ((SpellAbility) c).getSourceCard().getController().getOpponents();
} }
} else if (defined.endsWith("Owner")) { }
else if (defined.endsWith("Owner")) {
String triggeringType = defined.substring(9); String triggeringType = defined.substring(9);
triggeringType = triggeringType.substring(0, triggeringType.length() - 5); triggeringType = triggeringType.substring(0, triggeringType.length() - 5);
final Object c = root.getTriggeringObject(triggeringType); final Object c = root.getTriggeringObject(triggeringType);
if (c instanceof Card) { if (c instanceof Card) {
o = ((Card) c).getOwner(); o = ((Card) c).getOwner();
} }
} else { }
else {
final String triggeringType = defined.substring(9); final String triggeringType = defined.substring(9);
o = root.getTriggeringObject(triggeringType); o = root.getTriggeringObject(triggeringType);
} }
@@ -872,11 +915,13 @@ public class AbilityUtils {
} }
} }
} }
} else if (defined.startsWith("OppNonTriggered")) { }
else if (defined.startsWith("OppNonTriggered")) {
players.addAll(sa.getActivatingPlayer().getOpponents()); players.addAll(sa.getActivatingPlayer().getOpponents());
players.removeAll(getDefinedPlayers(card, defined.substring(6), sa)); players.removeAll(getDefinedPlayers(card, defined.substring(6), sa));
} else if (defined.startsWith("Replaced")) { }
else if (defined.startsWith("Replaced")) {
final SpellAbility root = sa.getRootAbility(); final SpellAbility root = sa.getRootAbility();
Object o = null; Object o = null;
if (defined.endsWith("Controller")) { if (defined.endsWith("Controller")) {
@@ -889,7 +934,8 @@ public class AbilityUtils {
if (c instanceof SpellAbility) { if (c instanceof SpellAbility) {
o = ((SpellAbility) c).getSourceCard().getController(); o = ((SpellAbility) c).getSourceCard().getController();
} }
} else if (defined.endsWith("Opponent")) { }
else if (defined.endsWith("Opponent")) {
String replacingType = defined.substring(8); String replacingType = defined.substring(8);
replacingType = replacingType.substring(0, replacingType.length() - 8); replacingType = replacingType.substring(0, replacingType.length() - 8);
final Object c = root.getReplacingObject(replacingType); final Object c = root.getReplacingObject(replacingType);
@@ -899,14 +945,16 @@ public class AbilityUtils {
if (c instanceof SpellAbility) { if (c instanceof SpellAbility) {
o = ((SpellAbility) c).getSourceCard().getController().getOpponent(); o = ((SpellAbility) c).getSourceCard().getController().getOpponent();
} }
} else if (defined.endsWith("Owner")) { }
else if (defined.endsWith("Owner")) {
String replacingType = defined.substring(8); String replacingType = defined.substring(8);
replacingType = replacingType.substring(0, replacingType.length() - 5); replacingType = replacingType.substring(0, replacingType.length() - 5);
final Object c = root.getReplacingObject(replacingType); final Object c = root.getReplacingObject(replacingType);
if (c instanceof Card) { if (c instanceof Card) {
o = ((Card) c).getOwner(); o = ((Card) c).getOwner();
} }
} else { }
else {
final String replacingType = defined.substring(8); final String replacingType = defined.substring(8);
o = root.getReplacingObject(replacingType); o = root.getReplacingObject(replacingType);
} }
@@ -918,10 +966,12 @@ public class AbilityUtils {
} }
} }
} }
} else if (defined.startsWith("Non")) { }
else if (defined.startsWith("Non")) {
players.addAll(game.getPlayers()); players.addAll(game.getPlayers());
players.removeAll(getDefinedPlayers(card, defined.substring(3), sa)); players.removeAll(getDefinedPlayers(card, defined.substring(3), sa));
} else if (defined.equals("EnchantedController")) { }
else if (defined.equals("EnchantedController")) {
if (card.getEnchantingCard() == null) { if (card.getEnchantingCard() == null) {
return players; return players;
} }
@@ -929,7 +979,8 @@ public class AbilityUtils {
if (!players.contains(p)) { if (!players.contains(p)) {
players.add(p); players.add(p);
} }
} else if (defined.equals("EnchantedOwner")) { }
else if (defined.equals("EnchantedOwner")) {
if (card.getEnchantingCard() == null) { if (card.getEnchantingCard() == null) {
return players; return players;
} }
@@ -937,40 +988,48 @@ public class AbilityUtils {
if (!players.contains(p)) { if (!players.contains(p)) {
players.add(p); players.add(p);
} }
} else if (defined.equals("EnchantedPlayer")) { }
else if (defined.equals("EnchantedPlayer")) {
final Object o = sa.getSourceCard().getEnchanting(); final Object o = sa.getSourceCard().getEnchanting();
if (o instanceof Player) { if (o instanceof Player) {
if (!players.contains(o)) { if (!players.contains(o)) {
players.add((Player) o); players.add((Player) o);
} }
} }
} else if (defined.equals("AttackingPlayer")) { }
else if (defined.equals("AttackingPlayer")) {
final Player p = game.getCombat().getAttackingPlayer(); final Player p = game.getCombat().getAttackingPlayer();
if (!players.contains(p)) { if (!players.contains(p)) {
players.add(p); players.add(p);
} }
} else if (defined.equals("DefendingPlayer")) { }
else if (defined.equals("DefendingPlayer")) {
players.add(game.getCombat().getDefendingPlayerRelatedTo(card)); players.add(game.getCombat().getDefendingPlayerRelatedTo(card));
} else if (defined.equals("ChosenPlayer")) { }
else if (defined.equals("ChosenPlayer")) {
final Player p = card.getChosenPlayer(); final Player p = card.getChosenPlayer();
if (!players.contains(p)) { if (!players.contains(p)) {
players.add(p); players.add(p);
} }
} else if (defined.equals("SourceController")) { }
else if (defined.equals("SourceController")) {
final Player p = sa.getSourceCard().getController(); final Player p = sa.getSourceCard().getController();
if (!players.contains(p)) { if (!players.contains(p)) {
players.add(p); players.add(p);
} }
} else if (defined.equals("CardOwner")) { }
else if (defined.equals("CardOwner")) {
players.add(card.getOwner()); players.add(card.getOwner());
} else if (defined.startsWith("PlayerNamed_")) { }
else if (defined.startsWith("PlayerNamed_")) {
for (Player p : game.getPlayers()) { for (Player p : game.getPlayers()) {
System.out.println("Named player " + defined.substring(12)); System.out.println("Named player " + defined.substring(12));
if (p.getName().equals(defined.substring(12))) { if (p.getName().equals(defined.substring(12))) {
players.add(p); players.add(p);
} }
} }
} else if (defined.startsWith("Flipped")) { }
else if (defined.startsWith("Flipped")) {
for (Player p : game.getPlayers()) { for (Player p : game.getPlayers()) {
if (null != sa.getSourceCard().getFlipResult(p)) { if (null != sa.getSourceCard().getFlipResult(p)) {
if (sa.getSourceCard().getFlipResult(p).equals(defined.substring(7))) { if (sa.getSourceCard().getFlipResult(p).equals(defined.substring(7))) {
@@ -978,15 +1037,20 @@ public class AbilityUtils {
} }
} }
} }
} else if (defined.equals("ActivePlayer")) { }
else if (defined.equals("ActivePlayer")) {
players.add(game.getPhaseHandler().getPlayerTurn()); players.add(game.getPhaseHandler().getPlayerTurn());
} else if (defined.equals("You")) { }
else if (defined.equals("You")) {
players.add(sa.getActivatingPlayer()); players.add(sa.getActivatingPlayer());
} else if (defined.equals("Each")) { }
else if (defined.equals("Each")) {
players.addAll(game.getPlayers()); players.addAll(game.getPlayers());
} else if (defined.equals("Opponent")) { }
else if (defined.equals("Opponent")) {
players.add(sa.getActivatingPlayer().getOpponent()); players.add(sa.getActivatingPlayer().getOpponent());
} else { }
else {
for (Player p : game.getPlayers()) { for (Player p : game.getPlayers()) {
if (p.isValid(defined, sa.getActivatingPlayer(), sa.getSourceCard())) { if (p.isValid(defined, sa.getActivatingPlayer(), sa.getSourceCard())) {
players.add(p); players.add(p);
@@ -1021,9 +1085,11 @@ public class AbilityUtils {
// work // work
if (defined.equals("Self")) { if (defined.equals("Self")) {
s = sa; s = sa;
} else if (defined.equals("Parent")) { }
else if (defined.equals("Parent")) {
s = sa.getRootAbility(); s = sa.getRootAbility();
} else if (defined.equals("Targeted")) { }
else if (defined.equals("Targeted")) {
final SpellAbility saTargeting = sa.getSATargetingSA(); final SpellAbility saTargeting = sa.getSATargetingSA();
if (saTargeting != null) { if (saTargeting != null) {
for (SpellAbility targetSpell : saTargeting.getTargets().getTargetSpells()) { for (SpellAbility targetSpell : saTargeting.getTargets().getTargetSpells()) {
@@ -1033,12 +1099,14 @@ public class AbilityUtils {
if (instanceSA != null) { if (instanceSA != null) {
sas.add(instanceSA); sas.add(instanceSA);
} }
} else { }
else {
sas.add(targetSpell); sas.add(targetSpell);
} }
} }
} }
} else if (defined.startsWith("Triggered")) { }
else if (defined.startsWith("Triggered")) {
final SpellAbility root = sa.getRootAbility(); final SpellAbility root = sa.getRootAbility();
final String triggeringType = defined.substring(9); final String triggeringType = defined.substring(9);
@@ -1046,22 +1114,26 @@ public class AbilityUtils {
if (o instanceof SpellAbility) { if (o instanceof SpellAbility) {
s = (SpellAbility) o; s = (SpellAbility) o;
} }
} else if (defined.equals("Remembered")) { }
else if (defined.equals("Remembered")) {
for (final Object o : card.getRemembered()) { for (final Object o : card.getRemembered()) {
if (o instanceof Card) { if (o instanceof Card) {
final Card rem = (Card) o; final Card rem = (Card) o;
sas.addAll(game.getCardState(rem).getSpellAbilities()); sas.addAll(game.getCardState(rem).getSpellAbilities());
} }
} }
} else if (defined.equals("Imprinted")) { }
else if (defined.equals("Imprinted")) {
for (final Card imp : card.getImprinted()) { for (final Card imp : card.getImprinted()) {
sas.addAll(imp.getSpellAbilities()); sas.addAll(imp.getSpellAbilities());
} }
} else if (defined.equals("EffectSource")) { }
else if (defined.equals("EffectSource")) {
if (card.getEffectSource() != null) { if (card.getEffectSource() != null) {
sas.addAll(card.getEffectSource().getSpellAbilities()); sas.addAll(card.getEffectSource().getSpellAbilities());
} }
} else if (defined.equals("SourceFirstSpell")) { }
else if (defined.equals("SourceFirstSpell")) {
sas.add(card.getFirstSpellAbility()); sas.add(card.getFirstSpellAbility());
} }
@@ -1110,7 +1182,8 @@ public class AbilityUtils {
if (sa.getConditions().areMet(sa)) { if (sa.getConditions().areMet(sa)) {
if (sa.isWrapper() || StringUtils.isBlank(sa.getParam("UnlessCost"))) { if (sa.isWrapper() || StringUtils.isBlank(sa.getParam("UnlessCost"))) {
sa.resolve(); sa.resolve();
} else { }
else {
handleUnlessCost(sa, game); handleUnlessCost(sa, game);
return; return;
} }
@@ -1120,7 +1193,6 @@ public class AbilityUtils {
private static void handleUnlessCost(final SpellAbility sa, final Game game) { private static void handleUnlessCost(final SpellAbility sa, final Game game) {
final Card source = sa.getSourceCard(); final Card source = sa.getSourceCard();
// The player who has the chance to cancel the ability // The player who has the chance to cancel the ability
final String pays = sa.hasParam("UnlessPayer") ? sa.getParam("UnlessPayer") : "TargetedController"; final String pays = sa.hasParam("UnlessPayer") ? sa.getParam("UnlessPayer") : "TargetedController";
@@ -1135,7 +1207,8 @@ public class AbilityUtils {
String unlessCost = sa.getParam("UnlessCost").trim(); String unlessCost = sa.getParam("UnlessCost").trim();
if (unlessCost.equals("CardManaCost")) { if (unlessCost.equals("CardManaCost")) {
cost = new Cost(source.getManaCost(), true); cost = new Cost(source.getManaCost(), true);
} else if (unlessCost.equals("RememberedCostMinus2")) { }
else if (unlessCost.equals("RememberedCostMinus2")) {
if (source.getRemembered().isEmpty() || !(source.getRemembered().get(0) instanceof Card)) { if (source.getRemembered().isEmpty() || !(source.getRemembered().get(0) instanceof Card)) {
sa.resolve(); sa.resolve();
resolveSubAbilities(sa, game); resolveSubAbilities(sa, game);
@@ -1144,7 +1217,8 @@ public class AbilityUtils {
ManaCostBeingPaid newCost = new ManaCostBeingPaid(rememberedCard.getManaCost()); ManaCostBeingPaid newCost = new ManaCostBeingPaid(rememberedCard.getManaCost());
newCost.decreaseColorlessMana(2); newCost.decreaseColorlessMana(2);
cost = new Cost(newCost.toManaCost(), true); cost = new Cost(newCost.toManaCost(), true);
} else if( !StringUtils.isBlank(sa.getSVar(unlessCost)) || !StringUtils.isBlank(source.getSVar(unlessCost))) { }
else if (!StringUtils.isBlank(sa.getSVar(unlessCost)) || !StringUtils.isBlank(source.getSVar(unlessCost))) {
// check for X costs (stored in SVars // check for X costs (stored in SVars
int xCost = calculateAmount(source, sa.getParam("UnlessCost").replace(" ", ""), sa); int xCost = calculateAmount(source, sa.getParam("UnlessCost").replace(" ", ""), sa);
//Check for XColor //Check for XColor
@@ -1152,10 +1226,10 @@ public class AbilityUtils {
byte xColor = MagicColor.fromName(sa.hasParam("UnlessXColor") ? sa.getParam("UnlessXColor") : "1"); byte xColor = MagicColor.fromName(sa.hasParam("UnlessXColor") ? sa.getParam("UnlessXColor") : "1");
toPay.increaseShard(ManaCostShard.valueOf(xColor), xCost); toPay.increaseShard(ManaCostShard.valueOf(xColor), xCost);
cost = new Cost(toPay.toManaCost(), true); cost = new Cost(toPay.toManaCost(), true);
} else }
else {
cost = new Cost(unlessCost, true); cost = new Cost(unlessCost, true);
}
boolean paid = false; boolean paid = false;
for (Player payer : payers) { for (Player payer : payers) {
@@ -1166,17 +1240,18 @@ public class AbilityUtils {
ComputerUtil.playNoStack(payer, ability, game); // Unless cost was payed - no resolve ComputerUtil.playNoStack(payer, ability, game); // Unless cost was payed - no resolve
paid = true; paid = true;
} }
} else { }
else {
// if it's paid by the AI already the human can pay, but it won't change anything // if it's paid by the AI already the human can pay, but it won't change anything
paid |= HumanPlay.payCostDuringAbilityResolve(payer, source, cost, sa, null); paid |= HumanPlay.payCostDuringAbilityResolve(payer, source, cost, sa, null);
} }
} }
if( paid == isSwitched ) { if (paid == isSwitched) {
sa.resolve(); sa.resolve();
} }
if ( paid && execSubsWhenPaid || !paid && execSubsWhenNotPaid ) { // switched refers only to main ability! if (paid && execSubsWhenPaid || !paid && execSubsWhenNotPaid) { // switched refers only to main ability!
resolveSubAbilities(sa, game); resolveSubAbilities(sa, game);
} }
} }
@@ -1213,17 +1288,20 @@ public class AbilityUtils {
for (final Card exiledAsCost : paidListExiled) { for (final Card exiledAsCost : paidListExiled) {
host.addRemembered(exiledAsCost); host.addRemembered(exiledAsCost);
} }
} else if (sa.getParam("Cost").contains("Sac")) { }
else if (sa.getParam("Cost").contains("Sac")) {
final List<Card> paidListSacrificed = sa.getPaidList("Sacrificed"); final List<Card> paidListSacrificed = sa.getPaidList("Sacrificed");
for (final Card sacrificedAsCost : paidListSacrificed) { for (final Card sacrificedAsCost : paidListSacrificed) {
host.addRemembered(sacrificedAsCost); host.addRemembered(sacrificedAsCost);
} }
} else if (sa.getParam("Cost").contains("tapXType")) { }
else if (sa.getParam("Cost").contains("tapXType")) {
final List<Card> paidListTapped = sa.getPaidList("Tapped"); final List<Card> paidListTapped = sa.getPaidList("Tapped");
for (final Card tappedAsCost : paidListTapped) { for (final Card tappedAsCost : paidListTapped) {
host.addRemembered(tappedAsCost); host.addRemembered(tappedAsCost);
} }
} else if (sa.getParam("Cost").contains("Unattach")) { }
else if (sa.getParam("Cost").contains("Unattach")) {
final List<Card> paidListUnattached = sa.getPaidList("Unattached"); final List<Card> paidListUnattached = sa.getPaidList("Unattached");
for (final Card unattachedAsCost : paidListUnattached) { for (final Card unattachedAsCost : paidListUnattached) {
host.addRemembered(unattachedAsCost); host.addRemembered(unattachedAsCost);
@@ -1258,16 +1336,16 @@ public class AbilityUtils {
if (sq[0].startsWith("Kicked")) { if (sq[0].startsWith("Kicked")) {
if (sa.isKicked()) { if (sa.isKicked()) {
return CardFactoryUtil.doXMath(Integer.parseInt(sq[1]), expr, c); // Kicked return CardFactoryUtil.doXMath(Integer.parseInt(sq[1]), expr, c); // Kicked
} else { }
else {
return CardFactoryUtil.doXMath(Integer.parseInt(sq[2]), expr, c); // not Kicked return CardFactoryUtil.doXMath(Integer.parseInt(sq[2]), expr, c); // not Kicked
} }
} }
//Count$SearchedLibrary.<DefinedPlayer> //Count$SearchedLibrary.<DefinedPlayer>
if(sq[0].contains("SearchedLibrary")) { if (sq[0].contains("SearchedLibrary")) {
int sum = 0; int sum = 0;
for(Player p : AbilityUtils.getDefinedPlayers(c, sq[1], sa)) for (Player p : AbilityUtils.getDefinedPlayers(c, sq[1], sa)) {
{
sum += p.getLibrarySearched(); sum += p.getLibrarySearched();
} }
@@ -1281,12 +1359,12 @@ public class AbilityUtils {
final int rhs = calculateAmount(c, compString[2].substring(2), sa); final int rhs = calculateAmount(c, compString[2].substring(2), sa);
if (Expressions.compare(lhs, compString[2], rhs)) { if (Expressions.compare(lhs, compString[2], rhs)) {
return CardFactoryUtil.doXMath(calculateAmount(c, sq[1], sa), expr, c); return CardFactoryUtil.doXMath(calculateAmount(c, sq[1], sa), expr, c);
} else { }
else {
return CardFactoryUtil.doXMath(calculateAmount(c, sq[2], sa), expr, c); return CardFactoryUtil.doXMath(calculateAmount(c, sq[2], sa), expr, c);
} }
} }
} }
return CardFactoryUtil.xCount(c, s); return CardFactoryUtil.xCount(c, s);
} }
} }

View File

@@ -498,7 +498,6 @@ public class PlayerControllerHuman extends PlayerController {
return ImmutablePair.of(toTop, toBottom); return ImmutablePair.of(toTop, toBottom);
} }
@Override @Override
public boolean willPutCardOnTop(Card c) { public boolean willPutCardOnTop(Card c) {
return GuiDialog.confirm(c, "Where will you put " + c.getName() + " in your library", new String[]{"Top", "Bottom"}); return GuiDialog.confirm(c, "Where will you put " + c.getName() + " in your library", new String[]{"Top", "Bottom"});
@@ -711,7 +710,6 @@ public class PlayerControllerHuman extends PlayerController {
return inp.getSelected(); return inp.getSelected();
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see forge.game.player.PlayerController#chooseCardsToRevealFromHand(int, int, java.util.List) * @see forge.game.player.PlayerController#chooseCardsToRevealFromHand(int, int, java.util.List)
*/ */
@@ -725,7 +723,6 @@ public class PlayerControllerHuman extends PlayerController {
return inp.getSelected(); return inp.getSelected();
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see forge.game.player.PlayerController#payManaOptional(forge.Card, forge.card.cost.Cost) * @see forge.game.player.PlayerController#payManaOptional(forge.Card, forge.card.cost.Cost)
*/ */
@@ -734,7 +731,6 @@ public class PlayerControllerHuman extends PlayerController {
return HumanPlay.payCostDuringAbilityResolve(player, c, cost, sa, prompt); return HumanPlay.payCostDuringAbilityResolve(player, c, cost, sa, prompt);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see forge.game.player.PlayerController#chooseSaToActivateFromOpeningHand(java.util.List) * @see forge.game.player.PlayerController#chooseSaToActivateFromOpeningHand(java.util.List)
*/ */
@@ -762,7 +758,6 @@ public class PlayerControllerHuman extends PlayerController {
// end of not related candidates for move. // end of not related candidates for move.
/* (non-Javadoc) /* (non-Javadoc)
* @see forge.game.player.PlayerController#chooseBinary(java.lang.String, boolean) * @see forge.game.player.PlayerController#chooseBinary(java.lang.String, boolean)
*/ */
@@ -812,7 +807,6 @@ public class PlayerControllerHuman extends PlayerController {
return new ImmutablePair<CounterType,String>(chosen,addOrRemove); return new ImmutablePair<CounterType,String>(chosen,addOrRemove);
} }
@Override @Override
public Pair<SpellAbilityStackInstance, GameObject> chooseTarget(SpellAbility saSpellskite, List<Pair<SpellAbilityStackInstance, GameObject>> allTargets) { public Pair<SpellAbilityStackInstance, GameObject> chooseTarget(SpellAbility saSpellskite, List<Pair<SpellAbilityStackInstance, GameObject>> allTargets) {
if (allTargets.size() < 2) { if (allTargets.size() < 2) {
@@ -861,8 +855,8 @@ public class PlayerControllerHuman extends PlayerController {
private String mayBeYou(GameObject what) { private String mayBeYou(GameObject what) {
return what == null ? "(null)" : what == player ? "you" : what.toString(); return what == null ? "(null)" : what == player ? "you" : what.toString();
} }
// end of not related candidates for move.
// end of not related candidates for move.
/* (non-Javadoc) /* (non-Javadoc)
* @see forge.game.player.PlayerController#chooseModeForAbility(forge.card.spellability.SpellAbility, java.util.List, int, int) * @see forge.game.player.PlayerController#chooseModeForAbility(forge.card.spellability.SpellAbility, java.util.List, int, int)