Remove conjured cards from rewards

This commit is contained in:
Eradev
2025-07-17 13:19:00 -04:00
committed by Chris H
parent b785a84dca
commit 0d40508e69
4 changed files with 24 additions and 3 deletions

View File

@@ -1134,8 +1134,10 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
public Predicate<? super PaperCard> wasPrintedInSets(Collection<String> setCodes) {
Set<String> 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)

View File

@@ -437,6 +437,15 @@ public final class CardEdition implements Comparable<CardEdition> {
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<String, EditionEntry> getTokens() { return tokenMap; }
@@ -547,6 +556,9 @@ public final class CardEdition implements Comparable<CardEdition> {
List<PrintSheet> 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<EditionEntry> cards = cardMap.get(sectionName);

View File

@@ -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<String> wantSets, final boolean shouldContain) {

View File

@@ -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;