From 87270ec3dbddfc2783d9df5d0de1f6d18dbdee3b Mon Sep 17 00:00:00 2001 From: Hanmac Date: Wed, 27 Jul 2016 16:55:21 +0000 Subject: [PATCH] PlayerZone: rewrite the Filter to remove use of "May be played" keywords. "may look" keywords might be removed later too. --- .../main/java/forge/game/zone/PlayerZone.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) 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); } }