diff --git a/forge-ai/src/main/java/forge/ai/AiAttackController.java b/forge-ai/src/main/java/forge/ai/AiAttackController.java index 75b1566d68e..edc6151c6a8 100644 --- a/forge-ai/src/main/java/forge/ai/AiAttackController.java +++ b/forge-ai/src/main/java/forge/ai/AiAttackController.java @@ -1202,7 +1202,7 @@ public class AiAttackController { } // look at the attacker in relation to the blockers to establish a - // number of factors about the attacking context that will be relevant + // number of factors about the attacking context that will be relevant // to the attackers decision according to the selected strategy for (final Card defender : validBlockers) { // if both isWorthLessThanAllKillers and canKillAllDangerous are false there's nothing more to check diff --git a/forge-ai/src/main/java/forge/ai/ability/ChooseCardAi.java b/forge-ai/src/main/java/forge/ai/ability/ChooseCardAi.java index 5a53f738a26..1a862c03774 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChooseCardAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChooseCardAi.java @@ -191,7 +191,7 @@ public class ChooseCardAi extends SpellAbilityAi { } else if (logic.equals("NeedsPrevention")) { final Game game = ai.getGame(); final Combat combat = game.getCombat(); - CardCollectionView better = CardLists.filter(options, new Predicate() { + CardCollectionView better = CardLists.filter(options, new Predicate() { @Override public boolean apply(final Card c) { if (combat == null || !combat.isAttacking(c, ai) || !combat.isUnblocked(c)) { diff --git a/forge-ai/src/main/java/forge/ai/ability/ManifestAi.java b/forge-ai/src/main/java/forge/ai/ability/ManifestAi.java index d25fcba5e39..b5ddeb6f262 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ManifestAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ManifestAi.java @@ -106,7 +106,7 @@ public class ManifestAi extends SpellAbilityAi { return false; } - if (card.mayPlayerLook(ai)) { + if (card.getView().canBeShownTo(ai.getView())) { // try to avoid manifest a non Permanent if (!card.isPermanent()) return false; @@ -115,7 +115,7 @@ public class ManifestAi extends SpellAbilityAi { if (card.getManaCost().countX() > 0) return false; - // try to avoid manifesting a creature with zero or less thoughness + // try to avoid manifesting a creature with zero or less toughness if (card.isCreature() && card.getNetToughness() <= 0) return false; @@ -177,21 +177,21 @@ public class ManifestAi extends SpellAbilityAi { return MyRandom.getRandom().nextFloat() < .8; } - protected Card chooseSingleCard(final Player ai, final SpellAbility sa, Iterable options, boolean isOptional, Player targetedPlayer) { - if (Iterables.size(options) <= 1) { - return Iterables.getFirst(options, null); - } - CardCollection filtered = CardLists.filter(options, new Predicate() { - @Override - public boolean apply(Card input) { - return !shouldManyfest(input, ai, sa); + @Override + protected Card chooseSingleCard(final Player ai, final SpellAbility sa, Iterable options, boolean isOptional, Player targetedPlayer, Map params) { + if (Iterables.size(options) > 1 || isOptional) { + CardCollection filtered = CardLists.filter(options, new Predicate() { + @Override + public boolean apply(Card input) { + return shouldManyfest(input, ai, sa); + } + }); + if (!filtered.isEmpty()) { + return ComputerUtilCard.getBestAI(filtered); + } + if (isOptional) { + return null; } - }); - if (!filtered.isEmpty()) { - return ComputerUtilCard.getBestAI(filtered); - } - if (isOptional) { - return null; } return Iterables.getFirst(options, null); } diff --git a/forge-ai/src/main/java/forge/ai/ability/PumpAi.java b/forge-ai/src/main/java/forge/ai/ability/PumpAi.java index 3822c65bcd5..57e5cd1142f 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PumpAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/PumpAi.java @@ -526,16 +526,16 @@ public class PumpAi extends PumpAiBase { } list = getCurseCreatures(ai, sa, defense, attack, keywords); } else { - if (!tgt.canTgtCreature()) { - ZoneType zone = tgt.getZone().get(0); - list = new CardCollection(game.getCardsIn(zone)); - } else { - list = getPumpCreatures(ai, sa, defense, attack, keywords, immediately); - } if (sa.canTarget(ai)) { sa.getTargets().add(ai); return true; } + if (tgt.canTgtCreature()) { + list = getPumpCreatures(ai, sa, defense, attack, keywords, immediately); + } else { + ZoneType zone = tgt.getZone().get(0); + list = new CardCollection(game.getCardsIn(zone)); + } } list = CardLists.getValidCards(list, tgt.getValidTgts(), ai, source, sa); diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index c0d48f1a067..15a5668717d 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -1069,7 +1069,6 @@ public class Card extends GameEntity implements Comparable, IHasSVars { public final Card getEncodingCard() { return encoding; } - public final void setEncodingCard(final Card e) { encoding = e; } diff --git a/forge-game/src/main/java/forge/game/card/CardView.java b/forge-game/src/main/java/forge/game/card/CardView.java index 9dd21fd33ca..fd05135334f 100644 --- a/forge-game/src/main/java/forge/game/card/CardView.java +++ b/forge-game/src/main/java/forge/game/card/CardView.java @@ -486,7 +486,7 @@ public class CardView extends GameEntityView { }); } - private boolean canBeShownTo(final PlayerView viewer) { + public boolean canBeShownTo(final PlayerView viewer) { if (viewer == null) { return false; } ZoneType zone = getZone(); diff --git a/forge-game/src/main/java/forge/game/spellability/TargetRestrictions.java b/forge-game/src/main/java/forge/game/spellability/TargetRestrictions.java index f64ccb5fc03..70f890b7f8e 100644 --- a/forge-game/src/main/java/forge/game/spellability/TargetRestrictions.java +++ b/forge-game/src/main/java/forge/game/spellability/TargetRestrictions.java @@ -426,6 +426,7 @@ public class TargetRestrictions { */ public final boolean canTgtCreature() { for (final String s : this.validTgts) { + // TODO check IsCommander when in that variant if ((s.contains("Creature") || s.startsWith("Permanent")) && !s.contains("nonCreature")) { return true;