From 394818f5336b46dfb2ae739129d73b57a631adbe Mon Sep 17 00:00:00 2001 From: Eradev Date: Wed, 13 Aug 2025 12:45:53 -0400 Subject: [PATCH] Filter by foil status (#8358) --- .../java/forge/item/PaperCardPredicates.java | 18 ++++++++++++++++++ .../itemmanager/AdvancedSearchParser.java | 14 ++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/forge-core/src/main/java/forge/item/PaperCardPredicates.java b/forge-core/src/main/java/forge/item/PaperCardPredicates.java index c7c17012417..b685885baa1 100644 --- a/forge-core/src/main/java/forge/item/PaperCardPredicates.java +++ b/forge-core/src/main/java/forge/item/PaperCardPredicates.java @@ -50,6 +50,13 @@ public abstract class PaperCardPredicates { return new PredicateNames(what); } + /** + * Filters on a card foil status + */ + public static Predicate isFoil(final boolean isFoil) { + return new PredicateFoil(isFoil); + } + private static final class PredicatePrintedWithRarity implements Predicate { private final CardRarity matchingRarity; @@ -93,6 +100,17 @@ public abstract class PaperCardPredicates { } } + private static final class PredicateFoil implements Predicate { + private final boolean operand; + + @Override + public boolean test(final PaperCard card) { return card.isFoil() == operand; } + + private PredicateFoil(final boolean isFoil) { + this.operand = isFoil; + } + } + private static final class PredicateRarity implements Predicate { private final CardRarity operand; diff --git a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearchParser.java b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearchParser.java index 7d3d8123d83..455388386e4 100644 --- a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearchParser.java +++ b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearchParser.java @@ -408,6 +408,20 @@ public abstract class AdvancedSearchParser { break; } break; + + case "is": + if (opUsed.equals(":")) { + switch(valueStr) { + case "foil": + predicate = PaperCardPredicates.isFoil(true); + break; + + case "nonfoil": + predicate = PaperCardPredicates.isFoil(false); + break; + } + } + break; } if (predicate == null) {