Removed all except filter from CardList

This commit is contained in:
Maxmtg
2012-10-01 22:42:56 +00:00
parent 0c974ce24a
commit 59bc3f10c8
32 changed files with 142 additions and 142 deletions

View File

@@ -279,8 +279,8 @@ public abstract class AllZoneUtil {
public static int compareTypeAmountInPlay(final Player player, final String type) { public static int compareTypeAmountInPlay(final Player player, final String type) {
// returns the difference between player's // returns the difference between player's
final Player opponent = player.getOpponent(); final Player opponent = player.getOpponent();
final CardList playerList = player.getCardsIn(ZoneType.Battlefield).getType(type); final CardList playerList = CardListUtil.getType(player.getCardsIn(ZoneType.Battlefield), type);
final CardList opponentList = opponent.getCardsIn(ZoneType.Battlefield).getType(type); final CardList opponentList = CardListUtil.getType(opponent.getCardsIn(ZoneType.Battlefield), type);
return (playerList.size() - opponentList.size()); return (playerList.size() - opponentList.size());
} }
@@ -298,8 +298,8 @@ public abstract class AllZoneUtil {
public static int compareTypeAmountInGraveyard(final Player player, final String type) { public static int compareTypeAmountInGraveyard(final Player player, final String type) {
// returns the difference between player's // returns the difference between player's
final Player opponent = player.getOpponent(); final Player opponent = player.getOpponent();
final CardList playerList = player.getCardsIn(ZoneType.Graveyard).getType(type); final CardList playerList = CardListUtil.getType(player.getCardsIn(ZoneType.Graveyard), type);
final CardList opponentList = opponent.getCardsIn(ZoneType.Graveyard).getType(type); final CardList opponentList = CardListUtil.getType(opponent.getCardsIn(ZoneType.Graveyard), type);
return (playerList.size() - opponentList.size()); return (playerList.size() - opponentList.size());
} }

View File

@@ -6547,7 +6547,7 @@ public class Card extends GameEntity implements Comparable<Card> {
} else if (property.startsWith("ControllerControls")) { } else if (property.startsWith("ControllerControls")) {
final String type = property.substring(18); final String type = property.substring(18);
final CardList list = this.getController().getCardsIn(ZoneType.Battlefield); final CardList list = this.getController().getCardsIn(ZoneType.Battlefield);
if (list.getType(type).isEmpty()) { if (CardListUtil.getType(list, type).isEmpty()) {
return false; return false;
} }
} else if (property.startsWith("Other")) { } else if (property.startsWith("Other")) {

View File

@@ -19,12 +19,8 @@ package forge;
import java.util.ArrayList; import java.util.ArrayList;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import forge.card.spellability.SpellAbility;
import forge.game.player.Player;
/** /**
* <p> * <p>
@@ -56,24 +52,4 @@ public class CardList extends ArrayList<Card> {
return new CardList(Iterables.filter(this, filt)); return new CardList(Iterables.filter(this, filt));
} }
// cardType is like "Land" or "Goblin", returns a new CardList that is a
// subset of current CardList
public final CardList getType(final String cardType) {
return this.filter(CardPredicates.isType(cardType));
}
// cardType is like "Land" or "Goblin", returns a new CardList with cards
// that do not have this type
public final CardList getNotType(final String cardType) {
return this.filter(Predicates.not(CardPredicates.isType(cardType)));
}
public final CardList getKeyword(final String keyword) {
return this.filter(CardPredicates.hasKeyword(keyword));
}
public final CardList getNotKeyword(final String keyword) {
return this.filter(Predicates.not(CardPredicates.hasKeyword(keyword)));
}
} // end class CardList } // end class CardList

View File

@@ -22,6 +22,7 @@ import java.util.Comparator;
import java.util.List; import java.util.List;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import forge.card.cardfactory.CardFactoryUtil; import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellAbility;
@@ -314,4 +315,22 @@ public class CardListUtil {
public static CardList getTargetableCards(CardList cardList, SpellAbility source) { public static CardList getTargetableCards(CardList cardList, SpellAbility source) {
return cardList.filter(CardPredicates.isTargetableBy(source)); return cardList.filter(CardPredicates.isTargetableBy(source));
} }
public static CardList getKeyword(CardList cardList, String keyword) {
return cardList.filter(CardPredicates.hasKeyword(keyword));
}
public static CardList getNotKeyword(CardList cardList, String keyword) {
return cardList.filter(Predicates.not(CardPredicates.hasKeyword(keyword)));
}
// cardType is like "Land" or "Goblin", returns a new CardList that is a
// subset of current CardList
public static CardList getNotType(CardList cardList, String cardType) {
return cardList.filter(Predicates.not(CardPredicates.isType(cardType)));
}
public static CardList getType(CardList cardList, String cardType) {
return cardList.filter(CardPredicates.isType(cardType));
}
} }

View File

@@ -1233,7 +1233,7 @@ public class GameAction {
continue; continue;
} }
final CardList cl = list.getType(type); final CardList cl = CardListUtil.getType(list, type);
if (cl.size() > 1) { if (cl.size() > 1) {
for (final Card crd : cl) { for (final Card crd : cl) {
@@ -1250,14 +1250,14 @@ public class GameAction {
* </p> * </p>
*/ */
private void destroyLegendaryCreatures() { private void destroyLegendaryCreatures() {
final CardList a = AllZoneUtil.getCardsIn(ZoneType.Battlefield).getType("Legendary"); final CardList a = CardListUtil.getType(AllZoneUtil.getCardsIn(ZoneType.Battlefield), "Legendary");
if (a.isEmpty() || AllZoneUtil.isCardInPlay("Mirror Gallery")) { if (a.isEmpty() || AllZoneUtil.isCardInPlay("Mirror Gallery")) {
return; return;
} }
while (!a.isEmpty()) { while (!a.isEmpty()) {
CardList b = AllZoneUtil.getCardsIn(ZoneType.Battlefield, a.get(0).getName()); CardList b = AllZoneUtil.getCardsIn(ZoneType.Battlefield, a.get(0).getName());
b = b.getType("Legendary"); b = CardListUtil.getType(b, "Legendary");
b = b.filter(new Predicate<Card>() { b = b.filter(new Predicate<Card>() {
@Override @Override
public boolean apply(final Card c) { public boolean apply(final Card c) {

View File

@@ -502,7 +502,7 @@ public class AbilityFactoryAttach {
public static Card attachAIAnimatePreference(final SpellAbility sa, final CardList list, final boolean mandatory, public static Card attachAIAnimatePreference(final SpellAbility sa, final CardList list, final boolean mandatory,
final Card attachSource) { final Card attachSource) {
// AI For choosing a Card to Animate. // AI For choosing a Card to Animate.
CardList betterList = list.getNotType("Creature"); CardList betterList = CardListUtil.getNotType(list, "Creature");
if (sa.getSourceCard().getName().equals("Animate Artifact")) { if (sa.getSourceCard().getName().equals("Animate Artifact")) {
betterList = betterList.filter(new Predicate<Card>() { betterList = betterList.filter(new Predicate<Card>() {
@Override @Override
@@ -961,7 +961,7 @@ public class AbilityFactoryAttach {
} }
} }
list = list.getNotType(type); // Filter out Basic Lands that have the list = CardListUtil.getNotType(list, type); // Filter out Basic Lands that have the
// same type as the changing type // same type as the changing type
final Card c = CardFactoryUtil.getBestAI(list); final Card c = CardFactoryUtil.getBestAI(list);

View File

@@ -1207,7 +1207,7 @@ public final class AbilityFactoryChangeZone {
} else if (origin.contains(ZoneType.Library) } else if (origin.contains(ZoneType.Library)
&& (type.contains("Basic") || AbilityFactoryChangeZone.areAllBasics(type))) { && (type.contains("Basic") || AbilityFactoryChangeZone.areAllBasics(type))) {
c = AbilityFactoryChangeZone.basicManaFixing(fetchList); c = AbilityFactoryChangeZone.basicManaFixing(fetchList);
} else if (ZoneType.Hand.equals(destination) && fetchList.getNotType("Creature").size() == 0) { } else if (ZoneType.Hand.equals(destination) && CardListUtil.getNotType(fetchList, "Creature").size() == 0) {
c = AbilityFactoryChangeZone.chooseCreature(fetchList); c = AbilityFactoryChangeZone.chooseCreature(fetchList);
} else if (ZoneType.Battlefield.equals(destination) || ZoneType.Graveyard.equals(destination)) { } else if (ZoneType.Battlefield.equals(destination) || ZoneType.Graveyard.equals(destination)) {
c = CardFactoryUtil.getBestAI(fetchList); c = CardFactoryUtil.getBestAI(fetchList);
@@ -1233,7 +1233,7 @@ public final class AbilityFactoryChangeZone {
} }
if (c == null) { if (c == null) {
System.out.println("Don't need a land or none available; trying for a creature."); System.out.println("Don't need a land or none available; trying for a creature.");
fetchList = fetchList.getNotType("Land"); fetchList = CardListUtil.getNotType(fetchList, "Land");
// Prefer to pull a creature, generally more useful for AI. // Prefer to pull a creature, generally more useful for AI.
c = chooseCreature(fetchList.filter(CardPredicates.Presets.CREATURES)); c = chooseCreature(fetchList.filter(CardPredicates.Presets.CREATURES));
} }
@@ -1365,7 +1365,7 @@ public final class AbilityFactoryChangeZone {
// what types can I go get? // what types can I go get?
for (final String name : Constant.Color.BASIC_LANDS) { for (final String name : Constant.Color.BASIC_LANDS) {
if (!list.getType(name).isEmpty()) { if (!CardListUtil.getType(list, name).isEmpty()) {
basics.add(name); basics.add(name);
} }
} }
@@ -1377,7 +1377,7 @@ public final class AbilityFactoryChangeZone {
for (int i = 0; i < basics.size(); i++) { for (int i = 0; i < basics.size(); i++) {
final String b = basics.get(i); final String b = basics.get(i);
final int num = combined.getType(b).size(); final int num = CardListUtil.getType(combined, b).size();
if (num < minSize) { if (num < minSize) {
minType = b; minType = b;
minSize = num; minSize = num;
@@ -1386,7 +1386,7 @@ public final class AbilityFactoryChangeZone {
List<Card> result = list; List<Card> result = list;
if (minType != null) { if (minType != null) {
result = list.getType(minType); result = CardListUtil.getType(list, minType);
} }
return result.get(0); return result.get(0);
@@ -1791,7 +1791,7 @@ public final class AbilityFactoryChangeZone {
choice = mostExpensive; choice = mostExpensive;
} }
} else if (destination.equals(ZoneType.Hand) || destination.equals(ZoneType.Library)) { } else if (destination.equals(ZoneType.Hand) || destination.equals(ZoneType.Library)) {
CardList nonLands = list.getNotType("Land"); CardList nonLands = CardListUtil.getNotType(list, "Land");
// Prefer to pull a creature, generally more useful for AI. // Prefer to pull a creature, generally more useful for AI.
choice = chooseCreature(nonLands.filter(CardPredicates.Presets.CREATURES)); choice = chooseCreature(nonLands.filter(CardPredicates.Presets.CREATURES));
if (choice == null) { // Could not find a creature. if (choice == null) { // Could not find a creature.
@@ -1904,7 +1904,7 @@ public final class AbilityFactoryChangeZone {
} else if (destination.equals(ZoneType.Battlefield) || origin.equals(ZoneType.Battlefield)) { } else if (destination.equals(ZoneType.Battlefield) || origin.equals(ZoneType.Battlefield)) {
choice = CardFactoryUtil.getMostExpensivePermanentAI(list, sa, false); choice = CardFactoryUtil.getMostExpensivePermanentAI(list, sa, false);
} else if (destination.equals(ZoneType.Hand) || destination.equals(ZoneType.Library)) { } else if (destination.equals(ZoneType.Hand) || destination.equals(ZoneType.Library)) {
CardList nonLands = list.getNotType("Land"); CardList nonLands = CardListUtil.getNotType(list, "Land");
// Prefer to pull a creature, generally more useful for AI. // Prefer to pull a creature, generally more useful for AI.
choice = chooseCreature(nonLands.filter(CardPredicates.Presets.CREATURES)); choice = chooseCreature(nonLands.filter(CardPredicates.Presets.CREATURES));
if (choice == null) { // Could not find a creature. if (choice == null) { // Could not find a creature.
@@ -2607,7 +2607,7 @@ public final class AbilityFactoryChangeZone {
tgt.addTarget(AllZone.getHumanPlayer()); tgt.addTarget(AllZone.getHumanPlayer());
computerType.clear(); computerType.clear();
} }
if ((humanType.getNotType("Creature").size() == 0) && (computerType.getNotType("Creature").size() == 0)) { if ((CardListUtil.getNotType(humanType, "Creature").size() == 0) && (CardListUtil.getNotType(computerType, "Creature").size() == 0)) {
if ((CardFactoryUtil.evaluateCreatureList(computerType) + 200) >= CardFactoryUtil if ((CardFactoryUtil.evaluateCreatureList(computerType) + 200) >= CardFactoryUtil
.evaluateCreatureList(humanType)) { .evaluateCreatureList(humanType)) {
return false; return false;
@@ -2645,7 +2645,7 @@ public final class AbilityFactoryChangeZone {
if (destination.equals(ZoneType.Battlefield)) { if (destination.equals(ZoneType.Battlefield)) {
if (params.get("GainControl") != null) { if (params.get("GainControl") != null) {
// Check if the cards are valuable enough // Check if the cards are valuable enough
if ((humanType.getNotType("Creature").size() == 0) && (computerType.getNotType("Creature").size() == 0)) { if ((CardListUtil.getNotType(humanType, "Creature").size() == 0) && (CardListUtil.getNotType(computerType, "Creature").size() == 0)) {
if ((CardFactoryUtil.evaluateCreatureList(computerType) + CardFactoryUtil if ((CardFactoryUtil.evaluateCreatureList(computerType) + CardFactoryUtil
.evaluateCreatureList(humanType)) < 400) { .evaluateCreatureList(humanType)) < 400) {
return false; return false;
@@ -2658,7 +2658,7 @@ public final class AbilityFactoryChangeZone {
} }
} else { } else {
// don't activate if human gets more back than AI does // don't activate if human gets more back than AI does
if ((humanType.getNotType("Creature").size() == 0) && (computerType.getNotType("Creature").size() == 0)) { if ((CardListUtil.getNotType(humanType, "Creature").size() == 0) && (CardListUtil.getNotType(computerType, "Creature").size() == 0)) {
if (CardFactoryUtil.evaluateCreatureList(computerType) <= (CardFactoryUtil if (CardFactoryUtil.evaluateCreatureList(computerType) <= (CardFactoryUtil
.evaluateCreatureList(humanType) + 100)) { .evaluateCreatureList(humanType) + 100)) {
return false; return false;
@@ -2761,7 +2761,7 @@ public final class AbilityFactoryChangeZone {
// if the AI is using it defensively, then something else needs to occur // if the AI is using it defensively, then something else needs to occur
// if only creatures are affected evaluate both lists and pass only // if only creatures are affected evaluate both lists and pass only
// if human creatures are more valuable // if human creatures are more valuable
if ((humanType.getNotType("Creature").isEmpty()) && (computerType.getNotType("Creature").isEmpty())) { if ((CardListUtil.getNotType(humanType, "Creature").isEmpty()) && (CardListUtil.getNotType(computerType, "Creature").isEmpty())) {
if (CardFactoryUtil.evaluateCreatureList(computerType) >= CardFactoryUtil if (CardFactoryUtil.evaluateCreatureList(computerType) >= CardFactoryUtil
.evaluateCreatureList(humanType)) { .evaluateCreatureList(humanType)) {
return false; return false;
@@ -2795,7 +2795,7 @@ public final class AbilityFactoryChangeZone {
if (destination.equals(ZoneType.Battlefield)) { if (destination.equals(ZoneType.Battlefield)) {
if (params.get("GainControl") != null) { if (params.get("GainControl") != null) {
// Check if the cards are valuable enough // Check if the cards are valuable enough
if ((humanType.getNotType("Creature").size() == 0) && (computerType.getNotType("Creature").size() == 0)) { if ((CardListUtil.getNotType(humanType, "Creature").size() == 0) && (CardListUtil.getNotType(computerType, "Creature").size() == 0)) {
if ((CardFactoryUtil.evaluateCreatureList(computerType) + CardFactoryUtil if ((CardFactoryUtil.evaluateCreatureList(computerType) + CardFactoryUtil
.evaluateCreatureList(humanType)) < 1) { .evaluateCreatureList(humanType)) < 1) {
return false; return false;
@@ -2808,7 +2808,7 @@ public final class AbilityFactoryChangeZone {
} }
} else { } else {
// don't activate if human gets more back than AI does // don't activate if human gets more back than AI does
if ((humanType.getNotType("Creature").isEmpty()) && (computerType.getNotType("Creature").isEmpty())) { if ((CardListUtil.getNotType(humanType, "Creature").isEmpty()) && (CardListUtil.getNotType(computerType, "Creature").isEmpty())) {
if (CardFactoryUtil.evaluateCreatureList(computerType) <= CardFactoryUtil if (CardFactoryUtil.evaluateCreatureList(computerType) <= CardFactoryUtil
.evaluateCreatureList(humanType)) { .evaluateCreatureList(humanType)) {
return false; return false;

View File

@@ -1947,7 +1947,7 @@ public final class AbilityFactoryChoose {
final ArrayList<String> basic = CardUtil.getBasicTypes(); final ArrayList<String> basic = CardUtil.getBasicTypes();
for (final String type : basic) { for (final String type : basic) {
final CardList cl = land.getType(type); final CardList cl = CardListUtil.getType(land, type);
if (cl.size() > 0) { if (cl.size() > 0) {
final String prompt = "Choose a" + (type.equals("Island") ? "n " : " ") + type; final String prompt = "Choose a" + (type.equals("Island") ? "n " : " ") + type;
final Object o = GuiChoose.one(prompt, cl); final Object o = GuiChoose.one(prompt, cl);

View File

@@ -901,7 +901,7 @@ public final class AbilityFactoryClash {
} else { } else {
int cmc1 = CardFactoryUtil.evaluatePermanentList(new CardList(pile1)); int cmc1 = CardFactoryUtil.evaluatePermanentList(new CardList(pile1));
int cmc2 = CardFactoryUtil.evaluatePermanentList(new CardList(pile2)); int cmc2 = CardFactoryUtil.evaluatePermanentList(new CardList(pile2));
if (pool.getNotType("Creature").isEmpty()) { if (CardListUtil.getNotType(pool, "Creature").isEmpty()) {
cmc1 = CardFactoryUtil.evaluateCreatureList(new CardList(pile1)); cmc1 = CardFactoryUtil.evaluateCreatureList(new CardList(pile1));
cmc2 = CardFactoryUtil.evaluateCreatureList(new CardList(pile2)); cmc2 = CardFactoryUtil.evaluateCreatureList(new CardList(pile2));
System.out.println("value:" + cmc1 + " " + cmc2); System.out.println("value:" + cmc1 + " " + cmc2);

View File

@@ -1255,7 +1255,7 @@ public class AbilityFactoryDealDamage {
} }
}; };
list = list.getNotKeyword("Indestructible"); list = CardListUtil.getNotKeyword(list, "Indestructible");
list = list.filter(filterKillable); list = list.filter(filterKillable);
return list; return list;

View File

@@ -501,7 +501,7 @@ public final class AbilityFactoryDebuff {
} }
Card c; Card c;
if (pref.getNotType("Creature").size() == 0) { if (CardListUtil.getNotType(pref, "Creature").size() == 0) {
c = CardFactoryUtil.getBestCreatureAI(pref); c = CardFactoryUtil.getBestCreatureAI(pref);
} else { } else {
c = CardFactoryUtil.getMostExpensivePermanentAI(pref, sa, true); c = CardFactoryUtil.getMostExpensivePermanentAI(pref, sa, true);
@@ -520,7 +520,7 @@ public final class AbilityFactoryDebuff {
// TODO - if forced targeting, just pick something without the given // TODO - if forced targeting, just pick something without the given
// keyword // keyword
Card c; Card c;
if (forced.getNotType("Creature").size() == 0) { if (CardListUtil.getNotType(forced, "Creature").size() == 0) {
c = CardFactoryUtil.getWorstCreatureAI(forced); c = CardFactoryUtil.getWorstCreatureAI(forced);
} else { } else {
c = CardFactoryUtil.getCheapestPermanentAI(forced, sa, true); c = CardFactoryUtil.getCheapestPermanentAI(forced, sa, true);

View File

@@ -253,7 +253,7 @@ public class AbilityFactoryDestroy {
if (params.containsKey("AITgts")) { if (params.containsKey("AITgts")) {
list = CardListUtil.getValidCards(list, params.get("AITgts"), sa.getActivatingPlayer(), source); list = CardListUtil.getValidCards(list, params.get("AITgts"), sa.getActivatingPlayer(), source);
} }
list = list.getNotKeyword("Indestructible"); list = CardListUtil.getNotKeyword(list, "Indestructible");
if (!AbilityFactory.playReusable(sa)) { if (!AbilityFactory.playReusable(sa)) {
list = list.filter(new Predicate<Card>() { list = list.filter(new Predicate<Card>() {
@Override @Override
@@ -294,9 +294,9 @@ public class AbilityFactoryDestroy {
Card choice = null; Card choice = null;
// If the targets are only of one type, take the best // If the targets are only of one type, take the best
if (list.getNotType("Creature").isEmpty()) { if (CardListUtil.getNotType(list, "Creature").isEmpty()) {
choice = CardFactoryUtil.getBestCreatureAI(list); choice = CardFactoryUtil.getBestCreatureAI(list);
} else if (list.getNotType("Land").isEmpty()) { } else if (CardListUtil.getNotType(list, "Land").isEmpty()) {
choice = CardFactoryUtil.getBestLandAI(list); choice = CardFactoryUtil.getBestLandAI(list);
} else { } else {
choice = CardFactoryUtil.getMostExpensivePermanentAI(list, sa, true); choice = CardFactoryUtil.getMostExpensivePermanentAI(list, sa, true);
@@ -320,7 +320,7 @@ public class AbilityFactoryDestroy {
list = new CardList(AbilityFactory.getDefinedCards(af.getHostCard(), params.get("Defined"), sa)); list = new CardList(AbilityFactory.getDefinedCards(af.getHostCard(), params.get("Defined"), sa));
if (list.isEmpty() if (list.isEmpty()
|| !CardListUtil.filterControlledBy(list, AllZone.getComputerPlayer()).isEmpty() || !CardListUtil.filterControlledBy(list, AllZone.getComputerPlayer()).isEmpty()
|| list.getNotKeyword("Indestructible").isEmpty()) { || CardListUtil.getNotKeyword(list, "Indestructible").isEmpty()) {
return false; return false;
} }
} }
@@ -387,7 +387,7 @@ public class AbilityFactoryDestroy {
tgt.resetTargets(); tgt.resetTargets();
CardList preferred = list.getNotKeyword("Indestructible"); CardList preferred = CardListUtil.getNotKeyword(list, "Indestructible");
preferred = CardListUtil.filterControlledBy(preferred, AllZone.getHumanPlayer()); preferred = CardListUtil.filterControlledBy(preferred, AllZone.getHumanPlayer());
// If NoRegen is not set, filter out creatures that have a // If NoRegen is not set, filter out creatures that have a
@@ -422,9 +422,9 @@ public class AbilityFactoryDestroy {
} }
} else { } else {
Card c; Card c;
if (preferred.getNotType("Creature").size() == 0) { if (CardListUtil.getNotType(preferred, "Creature").size() == 0) {
c = CardFactoryUtil.getBestCreatureAI(preferred); c = CardFactoryUtil.getBestCreatureAI(preferred);
} else if (preferred.getNotType("Land").size() == 0) { } else if (CardListUtil.getNotType(preferred, "Land").size() == 0) {
c = CardFactoryUtil.getBestLandAI(preferred); c = CardFactoryUtil.getBestLandAI(preferred);
} else { } else {
c = CardFactoryUtil.getMostExpensivePermanentAI(preferred, sa, false); c = CardFactoryUtil.getMostExpensivePermanentAI(preferred, sa, false);
@@ -439,7 +439,7 @@ public class AbilityFactoryDestroy {
break; break;
} else { } else {
Card c; Card c;
if (list.getNotType("Creature").size() == 0) { if (CardListUtil.getNotType(list, "Creature").size() == 0) {
c = CardFactoryUtil.getWorstCreatureAI(list); c = CardFactoryUtil.getWorstCreatureAI(list);
} else { } else {
c = CardFactoryUtil.getCheapestPermanentAI(list, sa, false); c = CardFactoryUtil.getCheapestPermanentAI(list, sa, false);
@@ -881,7 +881,7 @@ public class AbilityFactoryDestroy {
// if only creatures are affected evaluate both lists and pass only if // if only creatures are affected evaluate both lists and pass only if
// human creatures are more valuable // human creatures are more valuable
if ((humanlist.getNotType("Creature").size() == 0) && (computerlist.getNotType("Creature").size() == 0)) { if ((CardListUtil.getNotType(humanlist, "Creature").size() == 0) && (CardListUtil.getNotType(computerlist, "Creature").size() == 0)) {
if (CardFactoryUtil.evaluateCreatureList(computerlist) >= CardFactoryUtil.evaluateCreatureList(humanlist) if (CardFactoryUtil.evaluateCreatureList(computerlist) >= CardFactoryUtil.evaluateCreatureList(humanlist)
&& !computerlist.isEmpty()) { && !computerlist.isEmpty()) {
return false; return false;
@@ -972,13 +972,13 @@ public class AbilityFactoryDestroy {
// if only creatures are affected evaluate both lists and pass only if // if only creatures are affected evaluate both lists and pass only if
// human creatures are more valuable // human creatures are more valuable
if ((humanlist.getNotType("Creature").size() == 0) && (computerlist.getNotType("Creature").size() == 0)) { if ((CardListUtil.getNotType(humanlist, "Creature").size() == 0) && (CardListUtil.getNotType(computerlist, "Creature").size() == 0)) {
if ((CardFactoryUtil.evaluateCreatureList(computerlist) + 200) >= CardFactoryUtil if ((CardFactoryUtil.evaluateCreatureList(computerlist) + 200) >= CardFactoryUtil
.evaluateCreatureList(humanlist)) { .evaluateCreatureList(humanlist)) {
return false; return false;
} }
} // only lands involved } // only lands involved
else if ((humanlist.getNotType("Land").size() == 0) && (computerlist.getNotType("Land").size() == 0)) { else if ((CardListUtil.getNotType(humanlist, "Land").size() == 0) && (CardListUtil.getNotType(computerlist, "Land").size() == 0)) {
if ((CardFactoryUtil.evaluatePermanentList(computerlist) + 1) >= CardFactoryUtil if ((CardFactoryUtil.evaluatePermanentList(computerlist) + 1) >= CardFactoryUtil
.evaluatePermanentList(humanlist)) { .evaluatePermanentList(humanlist)) {
return false; return false;

View File

@@ -431,7 +431,7 @@ public class AbilityFactoryPermanentState {
} }
} }
if (untapList.getNotType("Creature").size() == 0) { if (CardListUtil.getNotType(untapList, "Creature").size() == 0) {
choice = CardFactoryUtil.getBestCreatureAI(untapList); // if choice = CardFactoryUtil.getBestCreatureAI(untapList); // if
// only // only
// creatures // creatures
@@ -551,7 +551,7 @@ public class AbilityFactoryPermanentState {
} }
} }
if (tapList.getNotType("Creature").size() == 0) { if (CardListUtil.getNotType(tapList, "Creature").size() == 0) {
choice = CardFactoryUtil.getBestCreatureAI(tapList); // if only choice = CardFactoryUtil.getBestCreatureAI(tapList); // if only
// creatures // creatures
// take // take
@@ -638,7 +638,7 @@ public class AbilityFactoryPermanentState {
AllZone.getInputControl().setInput(CardFactoryUtil.inputUntapUpToNType(num, valid)); AllZone.getInputControl().setInput(CardFactoryUtil.inputUntapUpToNType(num, valid));
} else { } else {
CardList list = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield); CardList list = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield);
list = list.getType(valid); list = CardListUtil.getType(list, valid);
list = list.filter(Presets.TAPPED); list = list.filter(Presets.TAPPED);
int count = 0; int count = 0;
@@ -1191,7 +1191,7 @@ public class AbilityFactoryPermanentState {
} }
} }
if (tapList.getNotType("Creature").size() == 0) { if (CardListUtil.getNotType(tapList, "Creature").size() == 0) {
// if only creatures take the best // if only creatures take the best
choice = CardFactoryUtil.getBestCreatureAI(tapList); choice = CardFactoryUtil.getBestCreatureAI(tapList);
} else { } else {

View File

@@ -508,7 +508,7 @@ public final class AbilityFactoryProtection {
} }
Card c; Card c;
if (pref.getNotType("Creature").size() == 0) { if (CardListUtil.getNotType(pref, "Creature").size() == 0) {
c = CardFactoryUtil.getBestCreatureAI(pref); c = CardFactoryUtil.getBestCreatureAI(pref);
} else { } else {
c = CardFactoryUtil.getMostExpensivePermanentAI(pref, sa, true); c = CardFactoryUtil.getMostExpensivePermanentAI(pref, sa, true);
@@ -525,7 +525,7 @@ public final class AbilityFactoryProtection {
} }
Card c; Card c;
if (pref2.getNotType("Creature").size() == 0) { if (CardListUtil.getNotType(pref2, "Creature").size() == 0) {
c = CardFactoryUtil.getBestCreatureAI(pref2); c = CardFactoryUtil.getBestCreatureAI(pref2);
} else { } else {
c = CardFactoryUtil.getMostExpensivePermanentAI(pref2, sa, true); c = CardFactoryUtil.getMostExpensivePermanentAI(pref2, sa, true);
@@ -542,7 +542,7 @@ public final class AbilityFactoryProtection {
} }
Card c; Card c;
if (forced.getNotType("Creature").size() == 0) { if (CardListUtil.getNotType(forced, "Creature").size() == 0) {
c = CardFactoryUtil.getWorstCreatureAI(forced); c = CardFactoryUtil.getWorstCreatureAI(forced);
} else { } else {
c = CardFactoryUtil.getCheapestPermanentAI(forced, sa, true); c = CardFactoryUtil.getCheapestPermanentAI(forced, sa, true);

View File

@@ -23,6 +23,8 @@ import java.util.List;
import java.util.Random; import java.util.Random;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
import forge.AllZone; import forge.AllZone;
import forge.AllZoneUtil; import forge.AllZoneUtil;
@@ -347,7 +349,7 @@ public class AbilityFactoryPump {
|| card.getNetCombatDamage() <= 0 || card.getNetCombatDamage() <= 0
|| ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_BLOCKERS_INSTANT_ABILITY) || ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_BLOCKERS_INSTANT_ABILITY)
|| ph.getPhase().isBefore(PhaseType.MAIN1) || ph.getPhase().isBefore(PhaseType.MAIN1)
|| AllZoneUtil.getCreaturesInPlay(computer).getNotKeyword("Defender").isEmpty())) { || CardListUtil.getNotKeyword(AllZoneUtil.getCreaturesInPlay(computer), "Defender").isEmpty())) {
return false; return false;
} }
if (ph.isPlayerTurn(human) && (!card.isAttacking() if (ph.isPlayerTurn(human) && (!card.isAttacking()
@@ -405,22 +407,22 @@ public class AbilityFactoryPump {
} else if (keyword.endsWith("Flying")) { } else if (keyword.endsWith("Flying")) {
if (ph.isPlayerTurn(human) if (ph.isPlayerTurn(human)
&& ph.getPhase().equals(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY) && ph.getPhase().equals(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY)
&& !AllZone.getCombat().getAttackerList().getKeyword("Flying").isEmpty() && !CardListUtil.getKeyword(AllZone.getCombat().getAttackerList(), "Flying").isEmpty()
&& !card.hasKeyword("Reach") && !card.hasKeyword("Reach")
&& CombatUtil.canBlock(card) && CombatUtil.canBlock(card)
&& CombatUtil.lifeInDanger(AllZone.getCombat())) { && CombatUtil.lifeInDanger(AllZone.getCombat())) {
return true; return true;
} }
Predicate<Card> flyingOrReach = Predicates.or(CardPredicates.hasKeyword("Flying"), CardPredicates.hasKeyword("Reach"));
if (ph.isPlayerTurn(human) || !(CombatUtil.canAttack(card) || card.isAttacking()) if (ph.isPlayerTurn(human) || !(CombatUtil.canAttack(card) || card.isAttacking())
|| ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY) || ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY)
|| card.getNetCombatDamage() <= 0 || card.getNetCombatDamage() <= 0 || !Iterables.any(cardsCanBlock, Predicates.not(flyingOrReach))) {
|| cardsCanBlock.getNotKeyword("Flying").getNotKeyword("Reach").isEmpty()) {
return false; return false;
} }
} else if (keyword.endsWith("Horsemanship")) { } else if (keyword.endsWith("Horsemanship")) {
if (ph.isPlayerTurn(human) if (ph.isPlayerTurn(human)
&& ph.getPhase().equals(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY) && ph.getPhase().equals(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY)
&& !AllZone.getCombat().getAttackerList().getKeyword("Horsemanship").isEmpty() && !CardListUtil.getKeyword(AllZone.getCombat().getAttackerList(), "Horsemanship").isEmpty()
&& CombatUtil.canBlock(card) && CombatUtil.canBlock(card)
&& CombatUtil.lifeInDanger(AllZone.getCombat())) { && CombatUtil.lifeInDanger(AllZone.getCombat())) {
return true; return true;
@@ -428,7 +430,7 @@ public class AbilityFactoryPump {
if (ph.isPlayerTurn(human) || !(CombatUtil.canAttack(card) || card.isAttacking()) if (ph.isPlayerTurn(human) || !(CombatUtil.canAttack(card) || card.isAttacking())
|| ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY) || ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY)
|| card.getNetCombatDamage() <= 0 || card.getNetCombatDamage() <= 0
|| cardsCanBlock.getNotKeyword("Horsemanship").isEmpty()) { || CardListUtil.getNotKeyword(cardsCanBlock, "Horsemanship").isEmpty()) {
return false; return false;
} }
} else if (keyword.endsWith("Haste")) { } else if (keyword.endsWith("Haste")) {
@@ -484,7 +486,7 @@ public class AbilityFactoryPump {
} else if (keyword.startsWith("Flanking")) { } else if (keyword.startsWith("Flanking")) {
if (ph.isPlayerTurn(human) || !(CombatUtil.canAttack(card) || card.isAttacking()) if (ph.isPlayerTurn(human) || !(CombatUtil.canAttack(card) || card.isAttacking())
|| ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY) || ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY)
|| cardsCanBlock.getNotKeyword("Flanking").isEmpty()) { || CardListUtil.getNotKeyword(cardsCanBlock, "Flanking").isEmpty()) {
return false; return false;
} }
} else if (keyword.startsWith("Trample")) { } else if (keyword.startsWith("Trample")) {
@@ -528,13 +530,13 @@ public class AbilityFactoryPump {
} else if (keyword.equals("Vigilance")) { } else if (keyword.equals("Vigilance")) {
if (ph.isPlayerTurn(human) || !CombatUtil.canAttack(card) if (ph.isPlayerTurn(human) || !CombatUtil.canAttack(card)
|| ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS) || ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS)
|| AllZoneUtil.getCreaturesInPlay(human).getNotKeyword("Defender").size() < 1) { || CardListUtil.getNotKeyword(AllZoneUtil.getCreaturesInPlay(human), "Defender").size() < 1) {
return false; return false;
} }
} else if (keyword.equals("Reach")) { } else if (keyword.equals("Reach")) {
if (ph.isPlayerTurn(computer) if (ph.isPlayerTurn(computer)
|| !ph.getPhase().equals(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY) || !ph.getPhase().equals(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY)
|| AllZone.getCombat().getAttackerList().getKeyword("Flying").isEmpty() || CardListUtil.getKeyword(AllZone.getCombat().getAttackerList(), "Flying").isEmpty()
|| card.hasKeyword("Flying") || card.hasKeyword("Flying")
|| !CombatUtil.canBlock(card)) { || !CombatUtil.canBlock(card)) {
return false; return false;
@@ -565,7 +567,7 @@ public class AbilityFactoryPump {
if (ph.isPlayerTurn(human) || !(CombatUtil.canAttack(card) || card.isAttacking()) if (ph.isPlayerTurn(human) || !(CombatUtil.canAttack(card) || card.isAttacking())
|| ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY) || ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY)
|| card.getNetCombatDamage() <= 0 || card.getNetCombatDamage() <= 0
|| AllZoneUtil.getPlayerLandsInPlay(human).getType("Island").isEmpty() || CardListUtil.getType(AllZoneUtil.getPlayerLandsInPlay(human), "Island").isEmpty()
|| cardsCanBlock.isEmpty()) { || cardsCanBlock.isEmpty()) {
return false; return false;
} }
@@ -573,7 +575,7 @@ public class AbilityFactoryPump {
if (ph.isPlayerTurn(human) || !(CombatUtil.canAttack(card) || card.isAttacking()) if (ph.isPlayerTurn(human) || !(CombatUtil.canAttack(card) || card.isAttacking())
|| ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY) || ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY)
|| card.getNetCombatDamage() <= 0 || card.getNetCombatDamage() <= 0
|| AllZoneUtil.getPlayerLandsInPlay(human).getType("Swamp").isEmpty() || CardListUtil.getType(AllZoneUtil.getPlayerLandsInPlay(human), "Swamp").isEmpty()
|| cardsCanBlock.isEmpty()) { || cardsCanBlock.isEmpty()) {
return false; return false;
} }
@@ -581,7 +583,7 @@ public class AbilityFactoryPump {
if (ph.isPlayerTurn(human) || !(CombatUtil.canAttack(card) || card.isAttacking()) if (ph.isPlayerTurn(human) || !(CombatUtil.canAttack(card) || card.isAttacking())
|| ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY) || ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY)
|| card.getNetCombatDamage() <= 0 || card.getNetCombatDamage() <= 0
|| AllZoneUtil.getPlayerLandsInPlay(human).getType("Mountain").isEmpty() || CardListUtil.getType(AllZoneUtil.getPlayerLandsInPlay(human), "Mountain").isEmpty()
|| cardsCanBlock.isEmpty()) { || cardsCanBlock.isEmpty()) {
return false; return false;
} }
@@ -589,7 +591,7 @@ public class AbilityFactoryPump {
if (ph.isPlayerTurn(human) || !(CombatUtil.canAttack(card) || card.isAttacking()) if (ph.isPlayerTurn(human) || !(CombatUtil.canAttack(card) || card.isAttacking())
|| ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY) || ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY)
|| card.getNetCombatDamage() <= 0 || card.getNetCombatDamage() <= 0
|| AllZoneUtil.getPlayerLandsInPlay(human).getType("Forest").isEmpty() || CardListUtil.getType(AllZoneUtil.getPlayerLandsInPlay(human), "Forest").isEmpty()
|| cardsCanBlock.isEmpty()) { || cardsCanBlock.isEmpty()) {
return false; return false;
} }
@@ -1088,7 +1090,7 @@ public class AbilityFactoryPump {
} }
Card c; Card c;
if (pref.getNotType("Creature").size() == 0) { if (CardListUtil.getNotType(pref, "Creature").size() == 0) {
c = CardFactoryUtil.getBestCreatureAI(pref); c = CardFactoryUtil.getBestCreatureAI(pref);
} else { } else {
c = CardFactoryUtil.getMostExpensivePermanentAI(pref, sa, true); c = CardFactoryUtil.getMostExpensivePermanentAI(pref, sa, true);
@@ -1105,7 +1107,7 @@ public class AbilityFactoryPump {
} }
Card c; Card c;
if (forced.getNotType("Creature").size() == 0) { if (CardListUtil.getNotType(forced, "Creature").size() == 0) {
c = CardFactoryUtil.getWorstCreatureAI(forced); c = CardFactoryUtil.getWorstCreatureAI(forced);
} else { } else {
c = CardFactoryUtil.getCheapestPermanentAI(forced, sa, true); c = CardFactoryUtil.getCheapestPermanentAI(forced, sa, true);

View File

@@ -445,7 +445,7 @@ public class AbilityFactoryRegenerate {
// can target // can target
// choose my best X without regen // choose my best X without regen
if (compTargetables.getNotType("Creature").size() == 0) { if (CardListUtil.getNotType(compTargetables, "Creature").size() == 0) {
for (final Card c : combatants) { for (final Card c : combatants) {
if (c.getShield() == 0) { if (c.getShield() == 0) {
tgt.addTarget(c); tgt.addTarget(c);

View File

@@ -865,13 +865,13 @@ public class AbilityFactorySacrifice {
// if only creatures are affected evaluate both lists and pass only if // if only creatures are affected evaluate both lists and pass only if
// human creatures are more valuable // human creatures are more valuable
if ((humanlist.getNotType("Creature").size() == 0) && (computerlist.getNotType("Creature").size() == 0)) { if ((CardListUtil.getNotType(humanlist, "Creature").size() == 0) && (CardListUtil.getNotType(computerlist, "Creature").size() == 0)) {
if ((CardFactoryUtil.evaluateCreatureList(computerlist) + 200) >= CardFactoryUtil if ((CardFactoryUtil.evaluateCreatureList(computerlist) + 200) >= CardFactoryUtil
.evaluateCreatureList(humanlist)) { .evaluateCreatureList(humanlist)) {
return false; return false;
} }
} // only lands involved } // only lands involved
else if ((humanlist.getNotType("Land").size() == 0) && (computerlist.getNotType("Land").size() == 0)) { else if ((CardListUtil.getNotType(humanlist, "Land").size() == 0) && (CardListUtil.getNotType(computerlist, "Land").size() == 0)) {
if ((CardFactoryUtil.evaluatePermanentList(computerlist) + 1) >= CardFactoryUtil if ((CardFactoryUtil.evaluatePermanentList(computerlist) + 1) >= CardFactoryUtil
.evaluatePermanentList(humanlist)) { .evaluatePermanentList(humanlist)) {
return false; return false;

View File

@@ -113,7 +113,7 @@ class CardFactoryAuras {
newType[0] = landTypes[minAt]; newType[0] = landTypes[minAt];
CardList list = AllZoneUtil.getPlayerLandsInPlay(AllZone.getHumanPlayer()); CardList list = AllZoneUtil.getPlayerLandsInPlay(AllZone.getHumanPlayer());
list = list.getNotType(newType[0]); // Don't enchant lands list = CardListUtil.getNotType(list, newType[0]); // Don't enchant lands
// that already have the // that already have the
// type // type
if (list.isEmpty()) { if (list.isEmpty()) {
@@ -266,7 +266,7 @@ class CardFactoryAuras {
@Override @Override
public boolean canPlayAI() { public boolean canPlayAI() {
CardList list = AllZoneUtil.getCreaturesInPlay(AllZone.getHumanPlayer()); CardList list = AllZoneUtil.getCreaturesInPlay(AllZone.getHumanPlayer());
list = list.getKeyword("Flying"); list = CardListUtil.getKeyword(list, "Flying");
if (list.isEmpty()) { if (list.isEmpty()) {
return false; return false;
} }

View File

@@ -546,7 +546,7 @@ public class CardFactoryCreatures {
@Override @Override
public boolean canPlayAI() { public boolean canPlayAI() {
List<Card> wolves = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield).getType("Wolf"); List<Card> wolves = CardListUtil.getType(AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield), "Wolf");
Iterable<Card> untappedWolves = Iterables.filter(wolves, untappedCreature); Iterable<Card> untappedWolves = Iterables.filter(wolves, untappedCreature);
final int totalPower = Aggregates.sum(untappedWolves, CardPredicates.Accessors.fnGetNetAttack); final int totalPower = Aggregates.sum(untappedWolves, CardPredicates.Accessors.fnGetNetAttack);
@@ -575,7 +575,7 @@ public class CardFactoryCreatures {
@Override @Override
public void resolve() { public void resolve() {
CardList wolves = card.getController().getCardsIn(ZoneType.Battlefield).getType("Wolf"); CardList wolves = CardListUtil.getType(card.getController().getCardsIn(ZoneType.Battlefield), "Wolf");
wolves = wolves.filter(untappedCreature); wolves = wolves.filter(untappedCreature);
final Card target = this.getTargetCard(); final Card target = this.getTargetCard();

View File

@@ -4,6 +4,7 @@ import forge.AllZone;
import forge.AllZoneUtil; import forge.AllZoneUtil;
import forge.Card; import forge.Card;
import forge.CardList; import forge.CardList;
import forge.CardListUtil;
import forge.Command; import forge.Command;
import forge.GameActionUtil; import forge.GameActionUtil;
import forge.Singletons; import forge.Singletons;
@@ -69,7 +70,7 @@ class CardFactoryEnchantments {
public boolean canPlay() { public boolean canPlay() {
final CardList grave = AllZone.getHumanPlayer().getCardsIn(ZoneType.Graveyard); final CardList grave = AllZone.getHumanPlayer().getCardsIn(ZoneType.Graveyard);
final CardList aiGrave = AllZone.getComputerPlayer().getCardsIn(ZoneType.Graveyard); final CardList aiGrave = AllZone.getComputerPlayer().getCardsIn(ZoneType.Graveyard);
return ((grave.getType("Creature").size() > 1) || (aiGrave.getType("Creature").size() > 1)) return ((CardListUtil.getType(grave, "Creature").size() > 1) || (CardListUtil.getType(aiGrave, "Creature").size() > 1))
&& super.canPlay(); && super.canPlay();
} }
}; };

View File

@@ -26,6 +26,7 @@ import forge.AllZone;
import forge.AllZoneUtil; import forge.AllZoneUtil;
import forge.Card; import forge.Card;
import forge.CardList; import forge.CardList;
import forge.CardListUtil;
import forge.CardPredicates; import forge.CardPredicates;
import forge.CardPredicates.Presets; import forge.CardPredicates.Presets;
import forge.Command; import forge.Command;
@@ -479,7 +480,7 @@ public class CardFactoryInstants {
final String[] choices = new String[] { "Artifact", "Creature", "Land" }; final String[] choices = new String[] { "Artifact", "Creature", "Land" };
final Object o = GuiChoose.one("Select permanent type", choices); final Object o = GuiChoose.one("Select permanent type", choices);
final String cardType = (String) o; final String cardType = (String) o;
final CardList list = this.getTargetPlayer().getCardsIn(ZoneType.Battlefield).getType(cardType); final CardList list = CardListUtil.getType(this.getTargetPlayer().getCardsIn(ZoneType.Battlefield), cardType);
final String[] tapOrUntap = new String[] { "Tap", "Untap" }; final String[] tapOrUntap = new String[] { "Tap", "Untap" };
final Object z = GuiChoose.one("Tap or Untap?", tapOrUntap); final Object z = GuiChoose.one("Tap or Untap?", tapOrUntap);

View File

@@ -488,7 +488,7 @@ class CardFactoryLands {
public void computerExecute() { public void computerExecute() {
CardList hand = AllZone.getComputerPlayer().getCardsIn(ZoneType.Hand); CardList hand = AllZone.getComputerPlayer().getCardsIn(ZoneType.Hand);
hand = hand.getType(type); hand = CardListUtil.getType(hand, type);
if (hand.size() > 0) { if (hand.size() > 0) {
this.revealCard(hand.get(0)); this.revealCard(hand.get(0));
} else { } else {

View File

@@ -356,7 +356,7 @@ public class CardFactorySorceries {
CardList land = AllZoneUtil.getPlayerLandsInPlay(AllZone.getComputerPlayer()); CardList land = AllZoneUtil.getPlayerLandsInPlay(AllZone.getComputerPlayer());
for (final String element : Constant.Color.BASIC_LANDS) { for (final String element : Constant.Color.BASIC_LANDS) {
final CardList cl = land.getType(element); final CardList cl = CardListUtil.getType(land, element);
if (!cl.isEmpty()) { if (!cl.isEmpty()) {
// remove one land of this basic type from this list // remove one land of this basic type from this list
// the computer AI should really jump in here and // the computer AI should really jump in here and
@@ -438,7 +438,7 @@ public class CardFactorySorceries {
// get all other basic[count] lands human player // get all other basic[count] lands human player
// controls and add them to target // controls and add them to target
CardList land = AllZoneUtil.getPlayerLandsInPlay(AllZone.getHumanPlayer()); CardList land = AllZoneUtil.getPlayerLandsInPlay(AllZone.getHumanPlayer());
CardList cl = land.getType(humanBasic.get(this.count)); CardList cl = CardListUtil.getType(land, humanBasic.get(this.count));
cl = cl.filter(new Predicate<Card>() { cl = cl.filter(new Predicate<Card>() {
@Override @Override
public boolean apply(final Card crd) { public boolean apply(final Card crd) {
@@ -488,7 +488,7 @@ public class CardFactorySorceries {
final CardList land = AllZone.getHumanPlayer().getCardsIn(ZoneType.Battlefield); final CardList land = AllZone.getHumanPlayer().getCardsIn(ZoneType.Battlefield);
for (final String element : Constant.Color.BASIC_LANDS) { for (final String element : Constant.Color.BASIC_LANDS) {
final CardList c = land.getType(element); final CardList c = CardListUtil.getType(land, element);
if (!c.isEmpty()) { if (!c.isEmpty()) {
humanBasic.add(element); humanBasic.add(element);
countBase[0]++; countBase[0]++;

View File

@@ -247,7 +247,7 @@ public class CardFactoryUtil {
// lands of one type.... // lands of one type....
int n = 0; int n = 0;
for (String name : Constant.Color.BASIC_LANDS) { for (String name : Constant.Color.BASIC_LANDS) {
n = land.getType(name).size(); n = CardListUtil.getType(land, name).size();
if ((n < iminBL) && (n > 0)) { if ((n < iminBL) && (n > 0)) {
// if two or more are tied, only the // if two or more are tied, only the
// first // first
@@ -260,7 +260,7 @@ public class CardFactoryUtil {
return null; // no basic land was a minimum return null; // no basic land was a minimum
} }
final CardList bLand = land.getType(sminBL); final CardList bLand = CardListUtil.getType(land, sminBL);
for( Card ut : Iterables.filter(bLand, CardPredicates.Presets.UNTAPPED) ) for( Card ut : Iterables.filter(bLand, CardPredicates.Presets.UNTAPPED) )
{ {
@@ -590,11 +590,11 @@ public class CardFactoryUtil {
public static Card getBestAI(final CardList list) { public static Card getBestAI(final CardList list) {
// Get Best will filter by appropriate getBest list if ALL of the list // Get Best will filter by appropriate getBest list if ALL of the list
// is of that type // is of that type
if (list.getNotType("Creature").size() == 0) { if (CardListUtil.getNotType(list, "Creature").size() == 0) {
return CardFactoryUtil.getBestCreatureAI(list); return CardFactoryUtil.getBestCreatureAI(list);
} }
if (list.getNotType("Land").size() == 0) { if (CardListUtil.getNotType(list, "Land").size() == 0) {
return CardFactoryUtil.getBestLandAI(list); return CardFactoryUtil.getBestLandAI(list);
} }
@@ -726,7 +726,7 @@ public class CardFactoryUtil {
return CardFactoryUtil.getWorstLand(lands); return CardFactoryUtil.getWorstLand(lands);
} }
if ((list.getType("Artifact").size() > 0) || (list.getType("Enchantment").size() > 0)) { if ((CardListUtil.getType(list, "Artifact").size() > 0) || (CardListUtil.getType(list, "Enchantment").size() > 0)) {
return CardFactoryUtil.getCheapestPermanentAI(list.filter(new Predicate<Card>() { return CardFactoryUtil.getCheapestPermanentAI(list.filter(new Predicate<Card>() {
@Override @Override
public boolean apply(final Card c) { public boolean apply(final Card c) {
@@ -735,8 +735,8 @@ public class CardFactoryUtil {
}), null, false); }), null, false);
} }
if (list.getType("Creature").size() > 0) { if (CardListUtil.getType(list, "Creature").size() > 0) {
return CardFactoryUtil.getWorstCreatureAI(list.getType("Creature")); return CardFactoryUtil.getWorstCreatureAI(CardListUtil.getType(list, "Creature"));
} }
// Planeswalkers fall through to here, lands will fall through if there // Planeswalkers fall through to here, lands will fall through if there
@@ -2025,7 +2025,7 @@ public class CardFactoryUtil {
final String[] basic = { "Forest", "Plains", "Mountain", "Island", "Swamp" }; final String[] basic = { "Forest", "Plains", "Mountain", "Island", "Swamp" };
for (int i = 0; i < basic.length; i++) { for (int i = 0; i < basic.length; i++) {
if (!someCards.getType(basic[i]).isEmpty()) { if (!CardListUtil.getType(someCards, basic[i]).isEmpty()) {
n++; n++;
} }
} }
@@ -2045,7 +2045,7 @@ public class CardFactoryUtil {
} }
if (sq[0].contains("LandsInGraveyard")) { if (sq[0].contains("LandsInGraveyard")) {
if (players.size() > 0) { if (players.size() > 0) {
return CardFactoryUtil.doXMath(players.get(0).getCardsIn(ZoneType.Graveyard).getType("Land").size(), m, return CardFactoryUtil.doXMath(CardListUtil.getType(players.get(0).getCardsIn(ZoneType.Graveyard), "Land").size(), m,
source); source);
} }
} }
@@ -2353,7 +2353,7 @@ public class CardFactoryUtil {
if (sq[0].contains("Domain")) { if (sq[0].contains("Domain")) {
someCards.addAll(cardController.getCardsIn(ZoneType.Battlefield)); someCards.addAll(cardController.getCardsIn(ZoneType.Battlefield));
for (String basic : Constant.Color.BASIC_LANDS) { for (String basic : Constant.Color.BASIC_LANDS) {
if (!someCards.getType(basic).isEmpty()) { if (!CardListUtil.getType(someCards, basic).isEmpty()) {
n++; n++;
} }
} }
@@ -2364,7 +2364,7 @@ public class CardFactoryUtil {
if (sq[0].contains("OpponentDom")) { if (sq[0].contains("OpponentDom")) {
someCards.addAll(cardController.getOpponent().getCardsIn(ZoneType.Battlefield)); someCards.addAll(cardController.getOpponent().getCardsIn(ZoneType.Battlefield));
for (String basic : Constant.Color.BASIC_LANDS) { for (String basic : Constant.Color.BASIC_LANDS) {
if (!someCards.getType(basic).isEmpty()) { if (!CardListUtil.getType(someCards, basic).isEmpty()) {
n++; n++;
} }
} }
@@ -2493,7 +2493,7 @@ public class CardFactoryUtil {
CardList enchantedControllerInPlay = new CardList(); CardList enchantedControllerInPlay = new CardList();
if (c.getEnchantingCard() != null) { if (c.getEnchantingCard() != null) {
enchantedControllerInPlay = c.getEnchantingCard().getController().getCardsIn(ZoneType.Battlefield); enchantedControllerInPlay = c.getEnchantingCard().getController().getCardsIn(ZoneType.Battlefield);
enchantedControllerInPlay = enchantedControllerInPlay.getType("Creature"); enchantedControllerInPlay = CardListUtil.getType(enchantedControllerInPlay, "Creature");
} }
return enchantedControllerInPlay.size(); return enchantedControllerInPlay.size();
} }
@@ -4695,7 +4695,7 @@ public class CardFactoryUtil {
@Override @Override
public void execute() { public void execute() {
final CardList cardsInPlay = AllZoneUtil.getCardsIn(ZoneType.Battlefield).getType("World"); final CardList cardsInPlay = CardListUtil.getType(AllZoneUtil.getCardsIn(ZoneType.Battlefield), "World");
cardsInPlay.remove(card); cardsInPlay.remove(card);
for (int i = 0; i < cardsInPlay.size(); i++) { for (int i = 0; i < cardsInPlay.size(); i++) {
Singletons.getModel().getGameAction().sacrificeDestroy(cardsInPlay.get(i)); Singletons.getModel().getGameAction().sacrificeDestroy(cardsInPlay.get(i));

View File

@@ -106,7 +106,7 @@ public class CostSacrifice extends CostPartWithList {
final Integer amount = this.convertAmount(); final Integer amount = this.convertAmount();
if (activator.hasKeyword("You can't sacrifice creatures to cast spells or activate abilities.")) { if (activator.hasKeyword("You can't sacrifice creatures to cast spells or activate abilities.")) {
typeList = typeList.getNotType("Creature"); typeList = CardListUtil.getNotType(typeList, "Creature");
} }
if ((amount != null) && (typeList.size() < amount)) { if ((amount != null) && (typeList.size() < amount)) {
@@ -158,7 +158,7 @@ public class CostSacrifice extends CostPartWithList {
CardList list = activator.getCardsIn(ZoneType.Battlefield); CardList list = activator.getCardsIn(ZoneType.Battlefield);
list = CardListUtil.getValidCards(list, type.split(";"), activator, source); list = CardListUtil.getValidCards(list, type.split(";"), activator, source);
if (activator.hasKeyword("You can't sacrifice creatures to cast spells or activate abilities.")) { if (activator.hasKeyword("You can't sacrifice creatures to cast spells or activate abilities.")) {
list = list.getNotType("Creature"); list = CardListUtil.getNotType(list, "Creature");
} }
if (this.getThis()) { if (this.getThis()) {
@@ -206,7 +206,7 @@ public class CostSacrifice extends CostPartWithList {
CardList typeList = activator.getCardsIn(ZoneType.Battlefield); CardList typeList = activator.getCardsIn(ZoneType.Battlefield);
typeList = CardListUtil.getValidCards(typeList, this.getType().split(";"), activator, source); typeList = CardListUtil.getValidCards(typeList, this.getType().split(";"), activator, source);
if (activator.hasKeyword("You can't sacrifice creatures to cast spells or activate abilities.")) { if (activator.hasKeyword("You can't sacrifice creatures to cast spells or activate abilities.")) {
typeList = typeList.getNotType("Creature"); typeList = CardListUtil.getNotType(typeList, "Creature");
} }
// Does the AI want to use Sacrifice All? // Does the AI want to use Sacrifice All?
return false; return false;

View File

@@ -362,7 +362,7 @@ public class SpellPermanent extends Spell {
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
List<String> type = card.getType(); List<String> type = card.getType();
final String subtype = type.get(type.size() - 1); final String subtype = type.get(type.size() - 1);
final CardList cl = list.getType(subtype); final CardList cl = CardListUtil.getType(list, subtype);
if (cl.size() > 0) { if (cl.size() > 0) {
return false; return false;
@@ -371,7 +371,7 @@ public class SpellPermanent extends Spell {
} }
if (card.isType("World")) { if (card.isType("World")) {
CardList list = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield); CardList list = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield);
list = list.getType("World"); list = CardListUtil.getType(list, "World");
if (list.size() > 0) { if (list.size() > 0) {
return false; return false;
} }

View File

@@ -908,22 +908,22 @@ public class CombatUtil {
} else if (keyword.equals("Defender") && !c.hasKeyword("CARDNAME can attack as though it didn't have defender.")) { } else if (keyword.equals("Defender") && !c.hasKeyword("CARDNAME can attack as though it didn't have defender.")) {
return false; return false;
} else if (keyword.equals("CARDNAME can't attack unless defending player controls an Island.")) { } else if (keyword.equals("CARDNAME can't attack unless defending player controls an Island.")) {
temp = list.getType("Island"); temp = CardListUtil.getType(list, "Island");
if (temp.isEmpty()) { if (temp.isEmpty()) {
return false; return false;
} }
} else if (keyword.equals("CARDNAME can't attack unless defending player controls a Forest.")) { } else if (keyword.equals("CARDNAME can't attack unless defending player controls a Forest.")) {
temp = list.getType("Forest"); temp = CardListUtil.getType(list, "Forest");
if (temp.isEmpty()) { if (temp.isEmpty()) {
return false; return false;
} }
} else if (keyword.equals("CARDNAME can't attack unless defending player controls a Swamp.")) { } else if (keyword.equals("CARDNAME can't attack unless defending player controls a Swamp.")) {
temp = list.getType("Swamp"); temp = CardListUtil.getType(list, "Swamp");
if (temp.isEmpty()) { if (temp.isEmpty()) {
return false; return false;
} }
} else if (keyword.equals("CARDNAME can't attack unless defending player controls a Mountain.")) { } else if (keyword.equals("CARDNAME can't attack unless defending player controls a Mountain.")) {
temp = list.getType("Mountain"); temp = CardListUtil.getType(list, "Mountain");
if (temp.isEmpty()) { if (temp.isEmpty()) {
return false; return false;
} }

View File

@@ -517,7 +517,7 @@ public class Upkeep extends Phase implements java.io.Serializable {
} }
} else { // computer } else { // computer
final CardList indestruct = targets.getKeyword("Indestructible"); final CardList indestruct = CardListUtil.getKeyword(targets, "Indestructible");
if (indestruct.size() > 0) { if (indestruct.size() > 0) {
Singletons.getModel().getGameAction().destroyNoRegeneration(indestruct.get(0)); Singletons.getModel().getGameAction().destroyNoRegeneration(indestruct.get(0));
} else if (targets.size() > 0) { } else if (targets.size() > 0) {
@@ -1216,11 +1216,11 @@ public class Upkeep extends Phase implements java.io.Serializable {
CardList humanCreatures = AllZoneUtil.getCreaturesInPlay(AllZone.getHumanPlayer()); CardList humanCreatures = AllZoneUtil.getCreaturesInPlay(AllZone.getHumanPlayer());
humanCreatures = CardListUtil.getValidCards(humanCreatures, smallCreatures, k.getController(), k); humanCreatures = CardListUtil.getValidCards(humanCreatures, smallCreatures, k.getController(), k);
humanCreatures = humanCreatures.getNotKeyword("Indestructible"); humanCreatures = CardListUtil.getNotKeyword(humanCreatures, "Indestructible");
CardList computerCreatures = AllZoneUtil.getCreaturesInPlay(AllZone.getComputerPlayer()); CardList computerCreatures = AllZoneUtil.getCreaturesInPlay(AllZone.getComputerPlayer());
computerCreatures = CardListUtil.getValidCards(computerCreatures, smallCreatures, k.getController(), k); computerCreatures = CardListUtil.getValidCards(computerCreatures, smallCreatures, k.getController(), k);
computerCreatures = computerCreatures.getNotKeyword("Indestructible"); computerCreatures = CardListUtil.getNotKeyword(computerCreatures, "Indestructible");
// We assume that both players will want to peek, ask if // We assume that both players will want to peek, ask if
// they want to reveal. // they want to reveal.
@@ -2065,7 +2065,7 @@ public class Upkeep extends Phase implements java.io.Serializable {
private static void upkeepKarma() { private static void upkeepKarma() {
final Player player = Singletons.getModel().getGameState().getPhaseHandler().getPlayerTurn(); final Player player = Singletons.getModel().getGameState().getPhaseHandler().getPlayerTurn();
final CardList karmas = AllZoneUtil.getCardsIn(ZoneType.Battlefield, "Karma"); final CardList karmas = AllZoneUtil.getCardsIn(ZoneType.Battlefield, "Karma");
final CardList swamps = player.getCardsIn(ZoneType.Battlefield).getType("Swamp"); final CardList swamps = CardListUtil.getType(player.getCardsIn(ZoneType.Battlefield), "Swamp");
// determine how much damage to deal the current player // determine how much damage to deal the current player
final int damage = swamps.size(); final int damage = swamps.size();

View File

@@ -179,7 +179,7 @@ public class AIPlayer extends Player {
@Override @Override
public final void discardUnless(final int num, final String uType, final SpellAbility sa) { public final void discardUnless(final int num, final String uType, final SpellAbility sa) {
final CardList hand = this.getCardsIn(ZoneType.Hand); final CardList hand = this.getCardsIn(ZoneType.Hand);
final CardList tHand = hand.getType(uType); final CardList tHand = CardListUtil.getType(hand, uType);
if (tHand.size() > 0) { if (tHand.size() > 0) {
Card toDiscard = Aggregates.itemWithMin(tHand, CardPredicates.Accessors.fnGetCmc); Card toDiscard = Aggregates.itemWithMin(tHand, CardPredicates.Accessors.fnGetCmc);

View File

@@ -1397,7 +1397,7 @@ public class ComputerUtil {
// what types can I go get? // what types can I go get?
for (final String name : Constant.CardTypes.BASIC_TYPES) { for (final String name : Constant.CardTypes.BASIC_TYPES) {
if (!landList.getType(name).isEmpty()) { if (!CardListUtil.getType(landList, name).isEmpty()) {
basics.add(name); basics.add(name);
} }
} }
@@ -1409,7 +1409,7 @@ public class ComputerUtil {
for (int i = 0; i < basics.size(); i++) { for (int i = 0; i < basics.size(); i++) {
final String b = basics.get(i); final String b = basics.get(i);
final int num = combined.getType(b).size(); final int num = CardListUtil.getType(combined, b).size();
if (num < minSize) { if (num < minSize) {
minType = b; minType = b;
minSize = num; minSize = num;
@@ -1417,7 +1417,7 @@ public class ComputerUtil {
} }
if (minType != null) { if (minType != null) {
landList = landList.getType(minType); landList = CardListUtil.getType(landList, minType);
} }
land = landList.get(0); land = landList.get(0);
@@ -1491,10 +1491,10 @@ public class ComputerUtil {
} }
// Discard lands // Discard lands
final CardList landsInHand = typeList.getType("Land"); final CardList landsInHand = CardListUtil.getType(typeList, "Land");
if (!landsInHand.isEmpty()) { if (!landsInHand.isEmpty()) {
final CardList landsInPlay = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield).getType("Land"); final CardList landsInPlay = CardListUtil.getType(AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield), "Land");
final CardList nonLandsInHand = AllZone.getComputerPlayer().getCardsIn(ZoneType.Hand).getNotType("Land"); final CardList nonLandsInHand = CardListUtil.getNotType(AllZone.getComputerPlayer().getCardsIn(ZoneType.Hand), "Land");
final int highestCMC = Math.max(6, Aggregates.max(nonLandsInHand, CardPredicates.Accessors.fnGetCmc)); final int highestCMC = Math.max(6, Aggregates.max(nonLandsInHand, CardPredicates.Accessors.fnGetCmc));
if (landsInPlay.size() >= highestCMC if (landsInPlay.size() >= highestCMC
|| (landsInPlay.size() + landsInHand.size() > 6 && landsInHand.size() > 1)) { || (landsInPlay.size() + landsInHand.size() > 6 && landsInHand.size() > 1)) {
@@ -1528,7 +1528,7 @@ public class ComputerUtil {
CardList typeList = activator.getCardsIn(ZoneType.Battlefield); CardList typeList = activator.getCardsIn(ZoneType.Battlefield);
typeList = CardListUtil.getValidCards(typeList, type.split(";"), activate.getController(), activate); typeList = CardListUtil.getValidCards(typeList, type.split(";"), activate.getController(), activate);
if (activator.hasKeyword("You can't sacrifice creatures to cast spells or activate abilities.")) { if (activator.hasKeyword("You can't sacrifice creatures to cast spells or activate abilities.")) {
typeList = typeList.getNotType("Creature"); typeList = CardListUtil.getNotType(typeList, "Creature");
} }
if ((target != null) && target.getController().isComputer() && typeList.contains(target)) { if ((target != null) && target.getController().isComputer() && typeList.contains(target)) {
@@ -2036,7 +2036,7 @@ public class ComputerUtil {
Card c = null; Card c = null;
if (destroy) { if (destroy) {
final CardList indestructibles = list.getKeyword("Indestructible"); final CardList indestructibles = CardListUtil.getKeyword(list, "Indestructible");
if (!indestructibles.isEmpty()) { if (!indestructibles.isEmpty()) {
c = indestructibles.get(0); c = indestructibles.get(0);
} }
@@ -2052,9 +2052,9 @@ public class ComputerUtil {
} }
if (c == null) { if (c == null) {
if (list.getNotType("Creature").size() == 0) { if (CardListUtil.getNotType(list, "Creature").size() == 0) {
c = CardFactoryUtil.getWorstCreatureAI(list); c = CardFactoryUtil.getWorstCreatureAI(list);
} else if (list.getNotType("Land").size() == 0) { } else if (CardListUtil.getNotType(list, "Land").size() == 0) {
c = CardFactoryUtil.getWorstLand(AllZone.getComputerPlayer()); c = CardFactoryUtil.getWorstLand(AllZone.getComputerPlayer());
} else { } else {
c = CardFactoryUtil.getWorstPermanentAI(list, false, false, false, false); c = CardFactoryUtil.getWorstPermanentAI(list, false, false, false, false);
@@ -2299,7 +2299,7 @@ public class ComputerUtil {
} }
final CardList landsInPlay = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield).filter(CardPredicates.Presets.LANDS); final CardList landsInPlay = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield).filter(CardPredicates.Presets.LANDS);
final CardList landsInHand = AllZone.getComputerPlayer().getCardsIn(ZoneType.Hand).filter(CardPredicates.Presets.LANDS); final CardList landsInHand = AllZone.getComputerPlayer().getCardsIn(ZoneType.Hand).filter(CardPredicates.Presets.LANDS);
final CardList nonLandsInHand = AllZone.getComputerPlayer().getCardsIn(ZoneType.Hand).getNotType("Land"); final CardList nonLandsInHand = CardListUtil.getNotType(AllZone.getComputerPlayer().getCardsIn(ZoneType.Hand), "Land");
final int highestCMC = Math.max(6, Aggregates.max(nonLandsInHand, CardPredicates.Accessors.fnGetCmc)); final int highestCMC = Math.max(6, Aggregates.max(nonLandsInHand, CardPredicates.Accessors.fnGetCmc));
final int discardCMC = discard.getCMC(); final int discardCMC = discard.getCMC();
if (discard.isLand()) { if (discard.isLand()) {

View File

@@ -597,7 +597,7 @@ public class ComputerUtilBlock {
CardList chumpBlockers; CardList chumpBlockers;
CardList tramplingAttackers = ComputerUtilBlock.getAttackers().getKeyword("Trample"); CardList tramplingAttackers = CardListUtil.getKeyword(ComputerUtilBlock.getAttackers(), "Trample");
tramplingAttackers = tramplingAttackers.filter(Predicates.not(rampagesOrNeedsManyToBlock)); tramplingAttackers = tramplingAttackers.filter(Predicates.not(rampagesOrNeedsManyToBlock));
// TODO - should check here for a "rampage-like" trigger that replaced // TODO - should check here for a "rampage-like" trigger that replaced
@@ -675,8 +675,8 @@ public class ComputerUtilBlock {
// Don't use blockers without First Strike or Double Strike if // Don't use blockers without First Strike or Double Strike if
// attacker has it // attacker has it
if (attacker.hasKeyword("First Strike") || attacker.hasKeyword("Double Strike")) { if (attacker.hasKeyword("First Strike") || attacker.hasKeyword("Double Strike")) {
safeBlockers = blockers.getKeyword("First Strike"); safeBlockers = CardListUtil.getKeyword(blockers, "First Strike");
safeBlockers.addAll(blockers.getKeyword("Double Strike")); safeBlockers.addAll(CardListUtil.getKeyword(blockers, "Double Strike"));
} else { } else {
safeBlockers = new CardList(blockers); safeBlockers = new CardList(blockers);
} }
@@ -884,7 +884,7 @@ public class ComputerUtilBlock {
} }
// assign blockers that have to block // assign blockers that have to block
chumpBlockers = ComputerUtilBlock.getBlockersLeft().getKeyword("CARDNAME blocks each turn if able."); chumpBlockers = CardListUtil.getKeyword(ComputerUtilBlock.getBlockersLeft(), "CARDNAME blocks each turn if able.");
// if an attacker with lure attacks - all that can block // if an attacker with lure attacks - all that can block
for (final Card blocker : ComputerUtilBlock.getBlockersLeft()) { for (final Card blocker : ComputerUtilBlock.getBlockersLeft()) {
if (CombatUtil.mustBlockAnAttacker(blocker, combat)) { if (CombatUtil.mustBlockAnAttacker(blocker, combat)) {

View File

@@ -22,6 +22,7 @@ import com.google.common.base.Predicate;
import forge.AllZone; import forge.AllZone;
import forge.Card; import forge.Card;
import forge.CardList; import forge.CardList;
import forge.CardListUtil;
import forge.Singletons; import forge.Singletons;
import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellAbility;
import forge.control.input.Input; import forge.control.input.Input;
@@ -57,7 +58,7 @@ public final class PlayerUtil {
public static boolean worshipFlag(final Player player) { public static boolean worshipFlag(final Player player) {
// Instead of hardcoded Ali from Cairo like cards, it is now a Keyword // Instead of hardcoded Ali from Cairo like cards, it is now a Keyword
CardList list = player.getCardsIn(ZoneType.Battlefield); CardList list = player.getCardsIn(ZoneType.Battlefield);
list = list.getKeyword("Damage that would reduce your life total to less than 1 reduces it to 1 instead."); list = CardListUtil.getKeyword(list, "Damage that would reduce your life total to less than 1 reduces it to 1 instead.");
list = list.filter(new Predicate<Card>() { list = list.filter(new Predicate<Card>() {
@Override @Override
public boolean apply(final Card c) { public boolean apply(final Card c) {
@@ -260,7 +261,7 @@ public final class PlayerUtil {
public static Input inputSacrificePermanents(final int nCards, final String type) { public static Input inputSacrificePermanents(final int nCards, final String type) {
CardList list = AllZone.getHumanPlayer().getCardsIn(ZoneType.Battlefield); CardList list = AllZone.getHumanPlayer().getCardsIn(ZoneType.Battlefield);
list = list.getType(type); list = CardListUtil.getType(list, type);
return PlayerUtil.inputSacrificePermanentsFromList(nCards, list, "Select a " + type + " to sacrifice"); return PlayerUtil.inputSacrificePermanentsFromList(nCards, list, "Select a " + type + " to sacrifice");
} // input_sacrificePermanents() } // input_sacrificePermanents()