From 0d40508e69c2f98be68dd81d74e8b179819702ed Mon Sep 17 00:00:00 2001 From: Eradev Date: Thu, 17 Jul 2025 13:19:00 -0400 Subject: [PATCH] Remove conjured cards from rewards --- forge-core/src/main/java/forge/card/CardDb.java | 6 ++++-- forge-core/src/main/java/forge/card/CardEdition.java | 12 ++++++++++++ .../main/java/forge/item/PaperCardPredicates.java | 5 ++++- .../src/forge/adventure/data/RewardData.java | 4 ++++ 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/forge-core/src/main/java/forge/card/CardDb.java b/forge-core/src/main/java/forge/card/CardDb.java index 461664a123c..3b4aa4e321a 100644 --- a/forge-core/src/main/java/forge/card/CardDb.java +++ b/forge-core/src/main/java/forge/card/CardDb.java @@ -1134,8 +1134,10 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { public Predicate wasPrintedInSets(Collection setCodes) { Set sets = new HashSet<>(setCodes); return paperCard -> getAllCards(paperCard.getName()).stream() - .map(PaperCard::getEdition) - .anyMatch(sets::contains); + .map(PaperCard::getEdition).anyMatch(editionCode -> + sets.contains(editionCode) && + StaticData.instance().getCardEdition(editionCode).isCardObtainable(paperCard.getName()) + ); } // This Predicate validates if a card is legal in a given format (identified by the list of allowed sets) diff --git a/forge-core/src/main/java/forge/card/CardEdition.java b/forge-core/src/main/java/forge/card/CardEdition.java index 83e901180c9..4171bee4547 100644 --- a/forge-core/src/main/java/forge/card/CardEdition.java +++ b/forge-core/src/main/java/forge/card/CardEdition.java @@ -437,6 +437,15 @@ public final class CardEdition implements Comparable { return false; } + public boolean isCardObtainable(String cardName) { + for (EditionEntry ee : cardMap.get(EditionSectionWithCollectorNumbers.CONJURED.getName())) { + if (ee.name.equals(cardName)) { + return false; + } + } + return true; + } + public boolean isModern() { return getDate().after(parseDate("2003-07-27")); } //8ED and above are modern except some promo cards and others public Multimap getTokens() { return tokenMap; } @@ -547,6 +556,9 @@ public final class CardEdition implements Comparable { List sheets = Lists.newArrayList(); for (String sectionName : cardMap.keySet()) { + if (sectionName.equals(EditionSectionWithCollectorNumbers.CONJURED.getName())) { + continue; + } PrintSheet sheet = new PrintSheet(String.format("%s %s", this.getCode(), sectionName)); List cards = cardMap.get(sectionName); diff --git a/forge-core/src/main/java/forge/item/PaperCardPredicates.java b/forge-core/src/main/java/forge/item/PaperCardPredicates.java index 0a26bc5aad7..2bc72a6b38b 100644 --- a/forge-core/src/main/java/forge/item/PaperCardPredicates.java +++ b/forge-core/src/main/java/forge/item/PaperCardPredicates.java @@ -1,6 +1,8 @@ package forge.item; import com.google.common.collect.Lists; + +import forge.StaticData; import forge.card.*; import forge.util.PredicateString; import org.apache.commons.lang3.StringUtils; @@ -87,7 +89,8 @@ public abstract class PaperCardPredicates { @Override public boolean test(final PaperCard card) { - return this.sets.contains(card.getEdition()) == this.mustContain; + return this.sets.contains(card.getEdition()) == this.mustContain && + StaticData.instance().getCardEdition(card.getEdition()).isCardObtainable(card.getName()); } private PredicateSets(final List wantSets, final boolean shouldContain) { diff --git a/forge-gui-mobile/src/forge/adventure/data/RewardData.java b/forge-gui-mobile/src/forge/adventure/data/RewardData.java index 39e73bd97b8..fe4ab7c0e46 100644 --- a/forge-gui-mobile/src/forge/adventure/data/RewardData.java +++ b/forge-gui-mobile/src/forge/adventure/data/RewardData.java @@ -118,6 +118,10 @@ public class RewardData implements Serializable { return false; return !Arrays.asList(configData.restrictedCards).contains(input.getName()); }); + + // Only allow obtainable cards + allCards = IterableUtil.filter(allCards, input -> StaticData.instance().getCardEdition(input.getEdition()).isCardObtainable(input.getCardName())); + //Filter AI cards for enemies. allEnemyCards= IterableUtil.filter(allCards, input -> { if (input == null) return false;