diff --git a/forge-game/src/main/java/forge/game/zone/PlayerZone.java b/forge-game/src/main/java/forge/game/zone/PlayerZone.java index 0484f94ce0c..b6d2e9162c3 100644 --- a/forge-game/src/main/java/forge/game/zone/PlayerZone.java +++ b/forge-game/src/main/java/forge/game/zone/PlayerZone.java @@ -38,15 +38,16 @@ public class PlayerZone extends Zone { private static final long serialVersionUID = -5687652485777639176L; // the this is not the owner of the card - private final class AlienCardsActivationFilter implements Predicate { - @Override - public boolean apply(final Card c) { - if (c.hasStartOfKeyword("May be played by your opponent") - || c.hasKeyword("Your opponent may look at this card.")) { - return true; + private static Predicate alienCardsActivationFilter(final Player who) { + return new Predicate() { + @Override + public boolean apply(final Card c) { + if (c.mayPlay(who) != null || c.hasKeyword("Your opponent may look at this card.")) { + return true; + } + return false; } - return false; - } + }; } private final class OwnCardsActivationFilter implements Predicate { @@ -56,7 +57,7 @@ public class PlayerZone extends Zone { return true; } - if (c.isLand() && (c.hasKeyword("May be played") || c.hasKeyword("May be played without paying its mana cost"))) { + if (c.isLand() && (c.mayPlay(c.getController()) != null)) { return true; } @@ -67,7 +68,7 @@ public class PlayerZone extends Zone { } if (sa.isSpell() - && (c.hasKeyword("May be played") || c.hasKeyword("May be played without paying its mana cost") + && (c.mayPlay(c.getController()) != null || (c.hasStartOfKeyword("Flashback") && PlayerZone.this.is(ZoneType.Graveyard))) && restrictZone.equals(ZoneType.Hand)) { return true; @@ -112,7 +113,7 @@ public class PlayerZone extends Zone { cards = Iterables.limit(cards, 1); } - final Predicate filterPredicate = checkingForOwner ? new OwnCardsActivationFilter() : new AlienCardsActivationFilter(); + final Predicate filterPredicate = checkingForOwner ? new OwnCardsActivationFilter() : alienCardsActivationFilter(who); return CardLists.filter(cl, filterPredicate); } }