diff --git a/forge-core/src/main/java/forge/card/CardDb.java b/forge-core/src/main/java/forge/card/CardDb.java index 900e3df7cd5..67f13b8abb9 100644 --- a/forge-core/src/main/java/forge/card/CardDb.java +++ b/forge-core/src/main/java/forge/card/CardDb.java @@ -1060,69 +1060,26 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { } @Override - public Predicate wasPrintedInSets(List setCodes) { - return new PredicateExistsInSets(setCodes); - } - - private class PredicateExistsInSets implements Predicate { - private final List sets; - - public PredicateExistsInSets(final List wantSets) { - this.sets = wantSets; // maybe should make a copy here? - } - - @Override - public boolean test(final PaperCard subject) { - for (PaperCard c : getAllCards(subject.getName())) { - if (sets.contains(c.getEdition())) { - return true; - } - } - return false; - } + public Predicate wasPrintedInSets(Collection setCodes) { + Set sets = new HashSet<>(setCodes); + return paperCard -> getAllCards(paperCard.getName()).stream() + .map(PaperCard::getEdition) + .anyMatch(sets::contains); } // This Predicate validates if a card is legal in a given format (identified by the list of allowed sets) @Override - public Predicate isLegal(List allowedSetCodes){ - return new PredicateLegalInSets(allowedSetCodes); - } - - private class PredicateLegalInSets implements Predicate { - private final List sets = new ArrayList<>(); - - public PredicateLegalInSets(final List allowedSets){ - this.sets.addAll(allowedSets); - } - @Override - public boolean test(final PaperCard card){ - if (card == null) return false; - return this.sets.contains(card.getEdition()); - } + public Predicate isLegal(Collection allowedSetCodes){ + Set sets = new HashSet<>(allowedSetCodes); + return paperCard -> paperCard != null && sets.contains(paperCard.getEdition()); } // This Predicate validates if a card was printed at [rarity], on any of its printings @Override public Predicate wasPrintedAtRarity(CardRarity rarity) { - return new PredicatePrintedAtRarity(rarity); - } - - private class PredicatePrintedAtRarity implements Predicate { - private final Set matchingCards; - - public PredicatePrintedAtRarity(CardRarity rarity) { - this.matchingCards = new HashSet<>(); - for (PaperCard c : getAllCards()) { - if (c.getRarity() == rarity) { - this.matchingCards.add(c.getName()); - } - } - } - - @Override - public boolean test(final PaperCard subject) { - return matchingCards.contains(subject.getName()); - } + return paperCard -> getAllCards(paperCard.getName()).stream() + .map(PaperCard::getRarity) + .anyMatch(rarity::equals); } public StringBuilder appendCardToStringBuilder(PaperCard card, StringBuilder sb) { diff --git a/forge-core/src/main/java/forge/card/CardEdition.java b/forge-core/src/main/java/forge/card/CardEdition.java index 6a2e828e73a..4b59e6ba4bb 100644 --- a/forge-core/src/main/java/forge/card/CardEdition.java +++ b/forge-core/src/main/java/forge/card/CardEdition.java @@ -892,14 +892,7 @@ public final class CardEdition implements Comparable { } public static class Predicates { - public static final Predicate CAN_MAKE_BOOSTER = new CanMakeBooster(); - - private static class CanMakeBooster implements Predicate { - @Override - public boolean test(final CardEdition subject) { - return subject.hasBoosterTemplate(); - } - } + public static final Predicate CAN_MAKE_BOOSTER = CardEdition::hasBoosterTemplate; public static CardEdition getRandomSetWithAllBasicLands(Iterable allEditions) { return Aggregates.random(Iterables.filter(allEditions, hasBasicLands)); @@ -921,29 +914,11 @@ public final class CardEdition implements Comparable { } - public static final Predicate HAS_TOURNAMENT_PACK = new CanMakeStarter(); - private static class CanMakeStarter implements Predicate { - @Override - public boolean test(final CardEdition subject) { - return StaticData.instance().getTournamentPacks().contains(subject.getCode()); - } - } + public static final Predicate HAS_TOURNAMENT_PACK = edition -> StaticData.instance().getTournamentPacks().contains(edition.getCode()); - public static final Predicate HAS_FAT_PACK = new CanMakeFatPack(); - private static class CanMakeFatPack implements Predicate { - @Override - public boolean test(final CardEdition subject) { - return subject.getFatPackCount() > 0; - } - } + public static final Predicate HAS_FAT_PACK = edition -> edition.getFatPackCount() > 0; - public static final Predicate HAS_BOOSTER_BOX = new CanMakeBoosterBox(); - private static class CanMakeBoosterBox implements Predicate { - @Override - public boolean test(final CardEdition subject) { - return subject.getBoosterBoxCount() > 0; - } - } + public static final Predicate HAS_BOOSTER_BOX = edition -> edition.getBoosterBoxCount() > 0; public static final Predicate hasBasicLands = ed -> { if (ed == null) { diff --git a/forge-core/src/main/java/forge/card/CardRulesPredicates.java b/forge-core/src/main/java/forge/card/CardRulesPredicates.java index dd8c039ce35..8dca9022415 100644 --- a/forge-core/src/main/java/forge/card/CardRulesPredicates.java +++ b/forge-core/src/main/java/forge/card/CardRulesPredicates.java @@ -85,14 +85,6 @@ public final class CardRulesPredicates { return new LeafString(LeafString.CardField.NAME, op, what); } - /** - * TODO: Write javadoc for this method. - * @param transform - * @return - */ - public static Predicate splitType(final CardSplitType transform) { - return new PredicateSplitType(transform); - } /** * Sub type. @@ -105,15 +97,6 @@ public final class CardRulesPredicates { return new LeafString(LeafString.CardField.SUBTYPE, PredicateString.StringOp.CONTAINS, what); } - /** - * Sub type. - * - * @param op - * the op - * @param what - * the what - * @return the predicate - */ public static Predicate subType(final PredicateString.StringOp op, final String what) { return new LeafString(LeafString.CardField.SUBTYPE, op, what); } @@ -172,64 +155,26 @@ public final class CardRulesPredicates { }; } - /** - * Core type. - * - * @param isEqual - * the is equal - * @param what - * the what - * @return the predicate - */ - public static Predicate coreType(final boolean isEqual, final String what) { + public static Predicate coreType(final String what) { try { - return CardRulesPredicates.coreType(isEqual, Enum.valueOf(CardType.CoreType.class, what)); + return CardRulesPredicates.coreType(Enum.valueOf(CardType.CoreType.class, what)); } catch (final Exception e) { return x -> false; } } /** - * Core type. - * - * @param isEqual - * the is equal - * @param type - * the type - * @return the predicate + * @return a Predicate that matches cards that have the specified core type. */ - public static Predicate coreType(final boolean isEqual, final CardType.CoreType type) { - return new PredicateCoreType(type, isEqual); + public static Predicate coreType(final CardType.CoreType type) { + return card -> card.getType().hasType(type); } /** - * Super type. - * - * @param isEqual - * the is equal - * @param what - * the what - * @return the predicate + * @return a Predicate that matches cards that have the specified supertype. */ - public static Predicate superType(final boolean isEqual, final String what) { - try { - return CardRulesPredicates.superType(isEqual, Enum.valueOf(CardType.Supertype.class, what)); - } catch (final Exception e) { - return x -> false; - } - } - - /** - * Super type. - * - * @param isEqual - * the is equal - * @param type - * the type - * @return the predicate - */ - public static Predicate superType(final boolean isEqual, final CardType.Supertype type) { - return new PredicateSuperType(type, isEqual); + public static Predicate superType(final CardType.Supertype type) { + return card -> card.getType().hasSupertype(type); } /** @@ -494,58 +439,12 @@ public final class CardRulesPredicates { } } - private static class PredicateCoreType implements Predicate { - private final CardType.CoreType operand; - private final boolean shouldBeEqual; - - @Override - public boolean test(final CardRules card) { - if (null == card) { - return false; - } - return this.shouldBeEqual == card.getType().hasType(this.operand); - } - - public PredicateCoreType(final CardType.CoreType type, final boolean wantEqual) { - this.operand = type; - this.shouldBeEqual = wantEqual; - } - } - - private static class PredicateSuperType implements Predicate { - private final CardType.Supertype operand; - private final boolean shouldBeEqual; - - @Override - public boolean test(final CardRules card) { - return this.shouldBeEqual == card.getType().hasSupertype(this.operand); - } - - public PredicateSuperType(final CardType.Supertype type, final boolean wantEqual) { - this.operand = type; - this.shouldBeEqual = wantEqual; - } - } - - private static class PredicateSplitType implements Predicate { - private final CardSplitType cst; - - public PredicateSplitType(final CardSplitType type) { - cst = type; - } - - @Override - public boolean test(final CardRules subject) { - return subject.getSplitType() == cst; - } - } - - public static final Predicate IS_CREATURE = CardRulesPredicates.coreType(true, CardType.CoreType.Creature); - public static final Predicate IS_LEGENDARY = CardRulesPredicates.superType(true, CardType.Supertype.Legendary); - public static final Predicate IS_ARTIFACT = CardRulesPredicates.coreType(true, CardType.CoreType.Artifact); + public static final Predicate IS_CREATURE = CardRulesPredicates.coreType(CardType.CoreType.Creature); + public static final Predicate IS_LEGENDARY = CardRulesPredicates.superType(CardType.Supertype.Legendary); + public static final Predicate IS_ARTIFACT = CardRulesPredicates.coreType(CardType.CoreType.Artifact); public static final Predicate IS_ATTRACTION = CardRulesPredicates.IS_ARTIFACT.and(CardRulesPredicates.subType("Attraction")); public static final Predicate IS_EQUIPMENT = CardRulesPredicates.subType("Equipment"); - public static final Predicate IS_LAND = CardRulesPredicates.coreType(true, CardType.CoreType.Land); + public static final Predicate IS_LAND = CardRulesPredicates.coreType(CardType.CoreType.Land); public static final Predicate IS_BASIC_LAND = subject -> subject.getType().isBasicLand(); public static final Predicate NOT_BASIC_LAND = subject -> !subject.getType().isBasicLand(); /** Matches only Plains, Island, Swamp, Mountain, or Forest. */ @@ -557,25 +456,25 @@ public final class CardRulesPredicates { public static final Predicate CAN_BE_PARTNER_COMMANDER = CardRules::canBePartnerCommander; public static final Predicate CAN_BE_OATHBREAKER = CardRules::canBeOathbreaker; public static final Predicate CAN_BE_SIGNATURE_SPELL = CardRules::canBeSignatureSpell; - public static final Predicate IS_PLANESWALKER = CardRulesPredicates.coreType(true, CardType.CoreType.Planeswalker); + public static final Predicate IS_PLANESWALKER = CardRulesPredicates.coreType(CardType.CoreType.Planeswalker); public static final Predicate CAN_BE_TINY_LEADERS_COMMANDER = CardRulesPredicates.IS_LEGENDARY.and(CardRulesPredicates.IS_CREATURE.or(CardRulesPredicates.IS_PLANESWALKER)); public static final Predicate CAN_BE_BRAWL_COMMANDER = CardRulesPredicates.IS_LEGENDARY.and(CardRulesPredicates.IS_CREATURE.or(CardRulesPredicates.IS_PLANESWALKER)); - public static final Predicate IS_BATTLE = CardRulesPredicates.coreType(true, CardType.CoreType.Battle); - public static final Predicate IS_INSTANT = CardRulesPredicates.coreType(true, CardType.CoreType.Instant); - public static final Predicate IS_SORCERY = CardRulesPredicates.coreType(true, CardType.CoreType.Sorcery); - public static final Predicate IS_ENCHANTMENT = CardRulesPredicates.coreType(true, CardType.CoreType.Enchantment); + public static final Predicate IS_BATTLE = CardRulesPredicates.coreType(CardType.CoreType.Battle); + public static final Predicate IS_INSTANT = CardRulesPredicates.coreType(CardType.CoreType.Instant); + public static final Predicate IS_SORCERY = CardRulesPredicates.coreType(CardType.CoreType.Sorcery); + public static final Predicate IS_ENCHANTMENT = CardRulesPredicates.coreType(CardType.CoreType.Enchantment); public static final Predicate IS_NON_CREATURE_SPELL = ( CardRulesPredicates.IS_CREATURE.or(CardRulesPredicates.IS_LAND).or(CardRules::isVariant) ).negate(); - public static final Predicate IS_PLANE = CardRulesPredicates.coreType(true, CardType.CoreType.Plane); - public static final Predicate IS_PHENOMENON = CardRulesPredicates.coreType(true, CardType.CoreType.Phenomenon); + public static final Predicate IS_PLANE = CardRulesPredicates.coreType(CardType.CoreType.Plane); + public static final Predicate IS_PHENOMENON = CardRulesPredicates.coreType(CardType.CoreType.Phenomenon); public static final Predicate IS_PLANE_OR_PHENOMENON = IS_PLANE.or(IS_PHENOMENON); - public static final Predicate IS_SCHEME = CardRulesPredicates.coreType(true, CardType.CoreType.Scheme); - public static final Predicate IS_VANGUARD = CardRulesPredicates.coreType(true, CardType.CoreType.Vanguard); - public static final Predicate IS_CONSPIRACY = CardRulesPredicates.coreType(true, CardType.CoreType.Conspiracy); - public static final Predicate IS_DUNGEON = CardRulesPredicates.coreType(true, CardType.CoreType.Dungeon); - public static final Predicate IS_NON_LAND = CardRulesPredicates.coreType(false, CardType.CoreType.Land); + public static final Predicate IS_SCHEME = CardRulesPredicates.coreType(CardType.CoreType.Scheme); + public static final Predicate IS_VANGUARD = CardRulesPredicates.coreType(CardType.CoreType.Vanguard); + public static final Predicate IS_CONSPIRACY = CardRulesPredicates.coreType(CardType.CoreType.Conspiracy); + public static final Predicate IS_DUNGEON = CardRulesPredicates.coreType(CardType.CoreType.Dungeon); + public static final Predicate IS_NON_LAND = CardRulesPredicates.coreType(CardType.CoreType.Land); public static final Predicate IS_WHITE = CardRulesPredicates.isColor(MagicColor.WHITE); public static final Predicate IS_BLUE = CardRulesPredicates.isColor(MagicColor.BLUE); public static final Predicate IS_BLACK = CardRulesPredicates.isColor(MagicColor.BLACK); diff --git a/forge-core/src/main/java/forge/card/CardSplitType.java b/forge-core/src/main/java/forge/card/CardSplitType.java index 69c6aea1814..292af425be4 100644 --- a/forge-core/src/main/java/forge/card/CardSplitType.java +++ b/forge-core/src/main/java/forge/card/CardSplitType.java @@ -2,6 +2,8 @@ package forge.card; import forge.card.CardFace.FaceSelectionMethod; +import java.util.EnumSet; + public enum CardSplitType { None(FaceSelectionMethod.USE_PRIMARY_FACE, null), @@ -13,6 +15,9 @@ public enum CardSplitType Modal(FaceSelectionMethod.USE_ACTIVE_FACE, CardStateName.Modal), Specialize(FaceSelectionMethod.USE_ACTIVE_FACE, null); + public static final EnumSet DUAL_FACED_CARDS = EnumSet.of( + CardSplitType.Transform, CardSplitType.Meld, CardSplitType.Modal); + CardSplitType(FaceSelectionMethod calcMode, CardStateName stateName) { method = calcMode; this.changedStateName = stateName; diff --git a/forge-core/src/main/java/forge/card/ICardDatabase.java b/forge-core/src/main/java/forge/card/ICardDatabase.java index 4e4016accce..1144234f325 100644 --- a/forge-core/src/main/java/forge/card/ICardDatabase.java +++ b/forge-core/src/main/java/forge/card/ICardDatabase.java @@ -94,7 +94,7 @@ public interface ICardDatabase extends Iterable { int getMaxArtIndex(String cardName); int getArtCount(String cardName, String edition); // Utility Predicates - Predicate wasPrintedInSets(List allowedSetCodes); - Predicate isLegal(List allowedSetCodes); + Predicate wasPrintedInSets(Collection allowedSetCodes); + Predicate isLegal(Collection allowedSetCodes); Predicate wasPrintedAtRarity(CardRarity rarity); } \ No newline at end of file diff --git a/forge-core/src/main/java/forge/deck/generation/DeckGeneratorBase.java b/forge-core/src/main/java/forge/deck/generation/DeckGeneratorBase.java index ff9c1e0e3a1..99d93a14fec 100644 --- a/forge-core/src/main/java/forge/deck/generation/DeckGeneratorBase.java +++ b/forge-core/src/main/java/forge/deck/generation/DeckGeneratorBase.java @@ -387,7 +387,7 @@ public abstract class DeckGeneratorBase { } //filter to provide all dual lands from pool matching 2 or 3 colors from current deck - Predicate dualLandFilter = CardRulesPredicates.coreType(true, CardType.CoreType.Land); + Predicate dualLandFilter = CardRulesPredicates.coreType(CardType.CoreType.Land); Predicate exceptBasicLand = CardRulesPredicates.NOT_BASIC_LAND; Iterable landCards = pool.getAllCards(PaperCardPredicates.fromRules(dualLandFilter.and(exceptBasicLand).and(canPlay))); diff --git a/forge-core/src/main/java/forge/item/PaperCardPredicates.java b/forge-core/src/main/java/forge/item/PaperCardPredicates.java index 27cbb584192..0a26bc5aad7 100644 --- a/forge-core/src/main/java/forge/item/PaperCardPredicates.java +++ b/forge-core/src/main/java/forge/item/PaperCardPredicates.java @@ -2,7 +2,6 @@ package forge.item; import com.google.common.collect.Lists; import forge.card.*; -import forge.util.PredicateCard; import forge.util.PredicateString; import org.apache.commons.lang3.StringUtils; @@ -15,13 +14,6 @@ import java.util.function.Predicate; * Filters based on PaperCard values. */ public abstract class PaperCardPredicates { - public static Predicate rarity(final boolean isEqual, final CardRarity value) { - return new PredicateRarity(value, isEqual); - } - - public static Predicate color(final boolean isEqual, final boolean noColor, final byte value) { - return new PredicateColor(value, noColor, isEqual); - } public static Predicate printedInSets(final String[] sets) { return printedInSets(Lists.newArrayList(sets), true); @@ -42,70 +34,50 @@ public abstract class PaperCardPredicates { } public static Predicate name(final String what) { - return new PredicateName(PredicateString.StringOp.EQUALS_IC, what); - } - - public static Predicate name(final PredicateString.StringOp op, final String what) { - return new PredicateName(op, what); + return new PredicateName(what); } public static Predicate names(final List what) { return new PredicateNames(what); } - public static Predicate cards(final List what) { - return new PredicateCards(what); - } - private static final class PredicateColor implements Predicate { private final byte operand; - private final boolean noColor; - private final boolean shouldBeEqual; - private PredicateColor(final byte color, final boolean noColor, final boolean wantEqual) { + private PredicateColor(final byte color) { this.operand = color; - this.noColor = noColor; - this.shouldBeEqual = wantEqual; } @Override public boolean test(final PaperCard card) { - boolean colorFound = false; - if (noColor) { - return card.getRules().getColor().isColorless() == shouldBeEqual; - } for (final byte color : card.getRules().getColor()) { if (color == operand) { - colorFound = true; - break; + return true; } } if (card.getRules().getType().hasType(CardType.CoreType.Land)) { for (final byte color : card.getRules().getColorIdentity()) { if (color == operand) { - colorFound = true; - break; + return true; } } } - return colorFound == shouldBeEqual; + return false; } } private static final class PredicateRarity implements Predicate { private final CardRarity operand; - private final boolean shouldBeEqual; @Override public boolean test(final PaperCard card) { - return (card.getRarity() == this.operand) == this.shouldBeEqual; + return (card.getRarity() == this.operand); } - private PredicateRarity(final CardRarity type, final boolean wantEqual) { + private PredicateRarity(final CardRarity type) { this.operand = type; - this.shouldBeEqual = wantEqual; } } @@ -132,8 +104,8 @@ public abstract class PaperCardPredicates { return this.op(card.getName(), this.operand); } - private PredicateName(final StringOp operator, final String operand) { - super(operator); + private PredicateName(final String operand) { + super(StringOp.EQUALS_IC); this.operand = operand; } } @@ -158,42 +130,23 @@ public abstract class PaperCardPredicates { } } - private static final class PredicateCards extends PredicateCard { - private final List operand; - - @Override - public boolean test(final PaperCard card) { - for (final PaperCard element : this.operand) { - if (this.op(card, element)) { - return true; - } - } - return false; - } - - private PredicateCards(final List operand) { - super(StringOp.EQUALS); - this.operand = operand; - } - } - public static Predicate fromRules(Predicate cardRulesPredicate) { return paperCard -> cardRulesPredicate.test(paperCard.getRules()); } - public static final Predicate IS_COMMON = PaperCardPredicates.rarity(true, CardRarity.Common); - public static final Predicate IS_UNCOMMON = PaperCardPredicates.rarity(true, CardRarity.Uncommon); - public static final Predicate IS_RARE = PaperCardPredicates.rarity(true, CardRarity.Rare); - public static final Predicate IS_MYTHIC_RARE = PaperCardPredicates.rarity(true, CardRarity.MythicRare); + public static final Predicate IS_COMMON = new PredicateRarity(CardRarity.Common); + public static final Predicate IS_UNCOMMON = new PredicateRarity(CardRarity.Uncommon); + public static final Predicate IS_RARE = new PredicateRarity(CardRarity.Rare); + public static final Predicate IS_MYTHIC_RARE = new PredicateRarity(CardRarity.MythicRare); public static final Predicate IS_RARE_OR_MYTHIC = PaperCardPredicates.IS_RARE.or(PaperCardPredicates.IS_MYTHIC_RARE); - public static final Predicate IS_SPECIAL = PaperCardPredicates.rarity(true, CardRarity.Special); - public static final Predicate IS_BASIC_LAND_RARITY = PaperCardPredicates.rarity(true, CardRarity.BasicLand); - public static final Predicate IS_BLACK = PaperCardPredicates.color(true, false, MagicColor.BLACK); - public static final Predicate IS_BLUE = PaperCardPredicates.color(true, false, MagicColor.BLUE); - public static final Predicate IS_GREEN = PaperCardPredicates.color(true, false, MagicColor.GREEN); - public static final Predicate IS_RED = PaperCardPredicates.color(true, false, MagicColor.RED); - public static final Predicate IS_WHITE = PaperCardPredicates.color(true, false, MagicColor.WHITE); - public static final Predicate IS_COLORLESS = PaperCardPredicates.color(true, true, MagicColor.COLORLESS); + public static final Predicate IS_SPECIAL = new PredicateRarity(CardRarity.Special); + public static final Predicate IS_BASIC_LAND_RARITY = new PredicateRarity(CardRarity.BasicLand); + public static final Predicate IS_BLACK = new PredicateColor(MagicColor.BLACK); + public static final Predicate IS_BLUE = new PredicateColor(MagicColor.BLUE); + public static final Predicate IS_GREEN = new PredicateColor(MagicColor.GREEN); + public static final Predicate IS_RED = new PredicateColor(MagicColor.RED); + public static final Predicate IS_WHITE = new PredicateColor(MagicColor.WHITE); + public static final Predicate IS_COLORLESS = paperCard -> paperCard.getRules().getColor().isColorless(); public static final Predicate IS_UNREBALANCED = PaperCard::isUnRebalanced; public static final Predicate IS_REBALANCED = PaperCard::isRebalanced; diff --git a/forge-core/src/main/java/forge/item/generation/BoosterGenerator.java b/forge-core/src/main/java/forge/item/generation/BoosterGenerator.java index 176da6242c1..82881adbf4e 100644 --- a/forge-core/src/main/java/forge/item/generation/BoosterGenerator.java +++ b/forge-core/src/main/java/forge/item/generation/BoosterGenerator.java @@ -673,11 +673,7 @@ public class BoosterGenerator { Predicate toAdd = null; if (operator.equalsIgnoreCase(BoosterSlots.DUAL_FACED_CARD)) { - toAdd = PaperCardPredicates.fromRules( - CardRulesPredicates.splitType(CardSplitType.Transform) - .or(CardRulesPredicates.splitType(CardSplitType.Meld)) - .or(CardRulesPredicates.splitType(CardSplitType.Modal) - )); + toAdd = card -> CardSplitType.DUAL_FACED_CARDS.contains(card.getRules().getSplitType()); } else if (operator.equalsIgnoreCase(BoosterSlots.LAND)) { toAdd = PaperCardPredicates.IS_LAND; } else if (operator.equalsIgnoreCase(BoosterSlots.BASIC_LAND)) { toAdd = PaperCardPredicates.IS_BASIC_LAND_RARITY; } else if (operator.equalsIgnoreCase(BoosterSlots.TIME_SHIFTED)) { toAdd = PaperCardPredicates.IS_SPECIAL; @@ -718,8 +714,8 @@ public class BoosterGenerator { toAdd = PaperCardPredicates.printedInSets(sets); } else if (operator.startsWith("fromSheet(") && invert) { String sheetName = StringUtils.strip(operator.substring(9), "()\" "); - Iterable cards = StaticData.instance().getPrintSheets().get(sheetName).toFlatList(); - toAdd = PaperCardPredicates.cards(Lists.newArrayList(cards)); + Set cards = Sets.newHashSet(StaticData.instance().getPrintSheets().get(sheetName).toFlatList()); + toAdd = cards::contains; } if (toAdd == null) { diff --git a/forge-core/src/main/java/forge/util/PredicateCard.java b/forge-core/src/main/java/forge/util/PredicateCard.java deleted file mode 100644 index 611e091abbd..00000000000 --- a/forge-core/src/main/java/forge/util/PredicateCard.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Forge: Play Magic: the Gathering. - * Copyright (C) 2020 Jamin W. Collins - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package forge.util; - -import forge.item.PaperCard; - -import java.util.function.Predicate; - -/** - * Special predicate class to perform string operations. - * - * @param - * the generic type - */ -public abstract class PredicateCard implements Predicate { - /** Possible operators for string operands. */ - public enum StringOp { - /** The EQUALS. */ - EQUALS, - } - - /** The operator. */ - private final StringOp operator; - - /** - * Op. - * - * @param op1 - * the op1 - * @param op2 - * the op2 - * @return true, if successful - */ - protected final boolean op(final PaperCard op1, final PaperCard op2) { - switch (this.getOperator()) { - case EQUALS: - return op1.equals(op2); - default: - return false; - } - } - - /** - * Instantiates a new predicate string. - * - * @param operator - * the operator - */ - public PredicateCard(final StringOp operator) { - this.operator = operator; - } - - /** - * @return the operator - */ - public StringOp getOperator() { - return operator; - } - - public static PredicateCard equals(final PaperCard what) { - return new PredicateCard(StringOp.EQUALS) { - public boolean test(PaperCard subject) { - return op(subject, what); - } - }; - } - -} diff --git a/forge-gui/src/main/java/forge/gamemodes/limited/LimitedDeckBuilder.java b/forge-gui/src/main/java/forge/gamemodes/limited/LimitedDeckBuilder.java index ccd3a9dd36f..33840ba6bed 100644 --- a/forge-gui/src/main/java/forge/gamemodes/limited/LimitedDeckBuilder.java +++ b/forge-gui/src/main/java/forge/gamemodes/limited/LimitedDeckBuilder.java @@ -84,7 +84,7 @@ public class LimitedDeckBuilder extends DeckGeneratorBase { // keep Conspiracies in a separate list this.draftedConspiracies = aiPlayables.stream() - .filter(PaperCardPredicates.fromRules(CardRulesPredicates.coreType(true, "Conspiracy"))) + .filter(PaperCardPredicates.fromRules(CardRulesPredicates.IS_CONSPIRACY)) .collect(Collectors.toList()); this.aiPlayables.removeAll(draftedConspiracies); diff --git a/forge-gui/src/main/java/forge/gamemodes/quest/QuestUtilCards.java b/forge-gui/src/main/java/forge/gamemodes/quest/QuestUtilCards.java index 24b76891bcf..b0eef4b10d5 100644 --- a/forge-gui/src/main/java/forge/gamemodes/quest/QuestUtilCards.java +++ b/forge-gui/src/main/java/forge/gamemodes/quest/QuestUtilCards.java @@ -465,7 +465,7 @@ public final class QuestUtilCards { public static Predicate isLegalInQuestFormat(final GameFormatQuest qFormat) { if(qFormat == null) return x -> true; - return GameFormatQuest.QPredicates.isLegalInFormatQuest(qFormat); + return edition -> qFormat.isSetLegal(edition.getCode()); } diff --git a/forge-gui/src/main/java/forge/gamemodes/quest/data/GameFormatQuest.java b/forge-gui/src/main/java/forge/gamemodes/quest/data/GameFormatQuest.java index 083d53f3f7d..a64fcd71573 100644 --- a/forge-gui/src/main/java/forge/gamemodes/quest/data/GameFormatQuest.java +++ b/forge-gui/src/main/java/forge/gamemodes/quest/data/GameFormatQuest.java @@ -162,30 +162,4 @@ public final class GameFormatQuest extends GameFormat { return unlocksUsed; } - public abstract static class QPredicates { - /** - * Checks if is legal in quest format. - * - * @param qFormat the format - * @return the predicate - */ - public static Predicate isLegalInFormatQuest(final GameFormatQuest qFormat) { - return new LegalInFormatQuest(qFormat); - } - - private static final class LegalInFormatQuest implements Predicate { - private final GameFormatQuest qFormat; - - private LegalInFormatQuest(final GameFormatQuest fmt) { - this.qFormat = fmt; - } - - @Override - public boolean test(final CardEdition subject) { - return this.qFormat.isSetLegal(subject.getCode()); - } - } - - } - }