From 56cbaab1b2be806ebe3dc3e0c6a3cf9e9ef6a571 Mon Sep 17 00:00:00 2001
From: Grath <1895280+Grath@users.noreply.github.com>
Date: Sun, 23 Apr 2023 12:54:24 -0400
Subject: [PATCH] Fix Millicent, Restless Revenant triggered ability. (#10262)

Uses TokenPredicate.FALSE and a FilterControlledPermanent to properly implement the filtering for a nontoken Spirit you control.
---
 .../src/mage/cards/m/MillicentRestlessRevenant.java   | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/Mage.Sets/src/mage/cards/m/MillicentRestlessRevenant.java b/Mage.Sets/src/mage/cards/m/MillicentRestlessRevenant.java
index df218e6399..d19aa09b81 100644
--- a/Mage.Sets/src/mage/cards/m/MillicentRestlessRevenant.java
+++ b/Mage.Sets/src/mage/cards/m/MillicentRestlessRevenant.java
@@ -19,12 +19,12 @@ import mage.constants.SuperType;
 import mage.constants.Zone;
 import mage.filter.FilterPermanent;
 import mage.filter.common.FilterControlledPermanent;
+import mage.filter.predicate.permanent.TokenPredicate;
 import mage.game.Game;
 import mage.game.events.DamagedEvent;
 import mage.game.events.GameEvent;
 import mage.game.events.ZoneChangeEvent;
 import mage.game.permanent.Permanent;
-import mage.game.permanent.PermanentToken;
 import mage.game.permanent.token.SpiritWhiteToken;
 
 import java.util.UUID;
@@ -71,6 +71,12 @@ public final class MillicentRestlessRevenant extends CardImpl {
 
 class MillicentRestlessRevenantTriggeredAbility extends TriggeredAbilityImpl {
 
+    private static final FilterPermanent filterNontoken = new FilterControlledPermanent(SubType.SPIRIT);
+
+    static {
+        filterNontoken.add(TokenPredicate.FALSE);
+    }
+
     MillicentRestlessRevenantTriggeredAbility() {
         super(Zone.BATTLEFIELD, new CreateTokenEffect(new SpiritWhiteToken()));
     }
@@ -114,8 +120,7 @@ class MillicentRestlessRevenantTriggeredAbility extends TriggeredAbilityImpl {
             return false;
         }
         return permanent.getId().equals(this.getSourceId())
-                || (!(permanent instanceof PermanentToken)
-                && permanent.hasSubtype(SubType.SPIRIT, game));
+                || filterNontoken.match(permanent, getControllerId(), this, game);
     }
 
     @Override