From b37f8725baac5c44d0747e90512c6cd610dcc708 Mon Sep 17 00:00:00 2001 From: Jetz Date: Tue, 3 Sep 2024 20:22:45 -0400 Subject: [PATCH] Guava migration - Inline `Predicates.and` --- .../java/forge/ai/AiAttackController.java | 2 +- .../main/java/forge/ai/ComputerUtilCard.java | 8 ++--- .../main/java/forge/ai/ComputerUtilCost.java | 3 +- .../main/java/forge/ai/ComputerUtilMana.java | 3 +- .../src/main/java/forge/ai/SpecialCardAi.java | 9 +++--- .../java/forge/ai/ability/ChooseSourceAi.java | 5 ++- .../forge/ai/ability/CountersRemoveAi.java | 5 ++- .../java/forge/ai/ability/DestroyAllAi.java | 5 ++- .../java/forge/ai/ability/LifeLoseAi.java | 3 +- .../main/java/forge/ai/ability/MeldAi.java | 11 +++---- .../src/main/java/forge/card/CardDb.java | 4 +-- .../src/main/java/forge/card/CardEdition.java | 2 +- .../java/forge/card/CardRulesPredicates.java | 11 +++---- .../forge/deck/generation/DeckGenPool.java | 3 +- .../deck/generation/DeckGeneratorBase.java | 6 ++-- .../main/java/forge/item/SealedProduct.java | 5 ++- .../item/generation/BoosterGenerator.java | 2 +- .../src/main/java/forge/util/Predicates.java | 6 +--- .../src/main/java/forge/game/GameFormat.java | 8 ++--- .../game/ability/effects/VentureEffect.java | 4 +-- .../main/java/forge/game/card/CardLists.java | 4 +-- .../game/combat/AttackRestrictionType.java | 6 ++-- .../src/main/java/forge/game/phase/Untap.java | 3 +- .../main/java/forge/game/player/Player.java | 7 ++-- .../StaticAbilityPanharmonicon.java | 16 ++++------ .../itemmanager/filters/CardPowerFilter.java | 2 +- .../filters/CardToughnessFilter.java | 2 +- .../controllers/CEditorCommander.java | 2 +- .../adventure/data/AdventureEventData.java | 3 +- .../src/forge/adventure/util/CardUtil.java | 3 +- .../src/forge/deck/FDeckEditor.java | 2 +- .../itemmanager/filters/CardPowerFilter.java | 2 +- .../filters/CardToughnessFilter.java | 2 +- .../planarconquest/ConquestAEtherScreen.java | 2 +- .../forge/deck/CommanderDeckGenerator.java | 10 +++--- .../src/main/java/forge/deck/DeckProxy.java | 5 ++- .../src/main/java/forge/deck/DeckgenUtil.java | 14 ++++---- .../limited/CardThemedDeckBuilder.java | 10 +++--- .../forge/gamemodes/quest/BoosterUtils.java | 32 ++++++++----------- .../gamemodes/quest/QuestRewardCard.java | 6 ++-- .../forge/gamemodes/quest/QuestUtilCards.java | 8 ++--- .../forge/itemmanager/AdvancedSearch.java | 2 +- .../forge/itemmanager/BooleanExpression.java | 2 +- .../java/forge/itemmanager/SFilterUtil.java | 2 +- .../src/main/java/forge/model/FModel.java | 9 ++++-- 45 files changed, 119 insertions(+), 142 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/AiAttackController.java b/forge-ai/src/main/java/forge/ai/AiAttackController.java index 6994fd30551..b53096ec245 100644 --- a/forge-ai/src/main/java/forge/ai/AiAttackController.java +++ b/forge-ai/src/main/java/forge/ai/AiAttackController.java @@ -613,7 +613,7 @@ public class AiAttackController { // and do not predict the blocker limit (which is safer) if (Iterables.any(defendingOpponent.getLandsInPlay(), CardPredicates.Presets.UNTAPPED)) { maxBlockersAfterCrew += CardLists.count(CardLists.getNotType(defendingOpponent.getCardsIn(ZoneType.Battlefield), "Creature"), - Predicates.and(CardPredicates.isType("Vehicle"), CardPredicates.Presets.UNTAPPED)); + CardPredicates.isType("Vehicle").and(CardPredicates.Presets.UNTAPPED)); } } diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java index db58b45df54..4498d3d6803 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java @@ -504,10 +504,10 @@ public class ComputerUtilCard { } if (hasEnchantmants || hasArtifacts) { - final List ae = CardLists.filter(list, Predicates.and( - Predicates.or(CardPredicates.Presets.ARTIFACTS, CardPredicates.Presets.ENCHANTMENTS), - card -> !card.hasSVar("DoNotDiscardIfAble") - )); + final List ae = CardLists.filter(list, + Predicates.or(CardPredicates.Presets.ARTIFACTS, CardPredicates.Presets.ENCHANTMENTS) + .and(card -> !card.hasSVar("DoNotDiscardIfAble")) + ); return getCheapestPermanentAI(ae, null, false); } diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java index e9a16f5dc20..93cd73d3a63 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java @@ -23,7 +23,6 @@ import forge.game.spellability.TargetChoices; import forge.game.zone.ZoneType; import forge.util.Iterables; import forge.util.MyRandom; -import forge.util.Predicates; import forge.util.TextUtil; import forge.util.collect.FCollectionView; import org.apache.commons.lang3.ObjectUtils; @@ -924,7 +923,7 @@ public class ComputerUtilCost { public static CardCollection paymentChoicesWithoutTargets(Iterable choices, SpellAbility source, Player ai) { if (source.usesTargeting()) { final CardCollection targets = new CardCollection(source.getTargets().getTargetCards()); - choices = Iterables.filter(choices, Predicates.and(CardPredicates.isController(ai), targets::contains).negate()); + choices = Iterables.filter(choices, CardPredicates.isController(ai).and(targets::contains).negate()); } return new CardCollection(choices); } diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java b/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java index 3b97e292d47..66fc10d90d8 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java @@ -43,7 +43,6 @@ import forge.game.zone.Zone; import forge.game.zone.ZoneType; import forge.util.Iterables; import forge.util.MyRandom; -import forge.util.Predicates; import forge.util.TextUtil; import org.apache.commons.lang3.StringUtils; @@ -314,7 +313,7 @@ public class ComputerUtilMana { // For cards like Genju of the Cedars, make sure we're not attaching to the same land that will // be tapped to pay its own cost if there's another untapped land like that available if (ma.getHostCard().equals(sa.getTargetCard())) { - if (CardLists.count(ai.getCardsIn(ZoneType.Battlefield), Predicates.and(CardPredicates.nameEquals(ma.getHostCard().getName()), CardPredicates.Presets.UNTAPPED)) > 1) { + if (CardLists.count(ai.getCardsIn(ZoneType.Battlefield), CardPredicates.nameEquals(ma.getHostCard().getName()).and(CardPredicates.Presets.UNTAPPED)) > 1) { continue; } } diff --git a/forge-ai/src/main/java/forge/ai/SpecialCardAi.java b/forge-ai/src/main/java/forge/ai/SpecialCardAi.java index 49f93723779..73bac61e64e 100644 --- a/forge-ai/src/main/java/forge/ai/SpecialCardAi.java +++ b/forge-ai/src/main/java/forge/ai/SpecialCardAi.java @@ -52,6 +52,7 @@ import org.apache.commons.lang3.tuple.Pair; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.function.Predicate; /** * Special logic for individual cards @@ -359,7 +360,7 @@ public class SpecialCardAi { public static boolean considerSacrificingCreature(final Player ai, final SpellAbility sa) { CardCollection flyingCreatures = CardLists.filter(ai.getCardsIn(ZoneType.Battlefield), - Predicates.and(CardPredicates.Presets.UNTAPPED, Predicates.or( + CardPredicates.Presets.UNTAPPED.and(Predicates.or( CardPredicates.hasKeyword(Keyword.FLYING), CardPredicates.hasKeyword(Keyword.REACH)))); boolean hasUsefulBlocker = false; @@ -1296,7 +1297,7 @@ public class SpecialCardAi { public static boolean considerSecondTarget(final Player ai, final SpellAbility sa) { Card firstTgt = sa.getParent().getTargetCard(); Iterable candidates = Iterables.filter(ai.getOpponents().getCardsIn(ZoneType.Battlefield), - Predicates.and(CardPredicates.sharesCardTypeWith(firstTgt), CardPredicates.isTargetableBy(sa))); + CardPredicates.sharesCardTypeWith(firstTgt).and(CardPredicates.isTargetableBy(sa))); Card secondTgt = Aggregates.random(candidates); if (secondTgt != null) { sa.resetTargets(); @@ -1316,7 +1317,7 @@ public class SpecialCardAi { return false; } - int aiLands = CardLists.filter(ai.getCardsIn(ZoneType.Battlefield), Predicates.and(CardPredicates.Presets.LANDS, CardPredicates.Presets.BASIC_LANDS.negate())).size(); + int aiLands = CardLists.filter(ai.getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.LANDS.and(CardPredicates.Presets.BASIC_LANDS.negate())).size(); boolean hasBridge = false; for (Card c : ai.getCardsIn(ZoneType.Battlefield)) { @@ -1334,7 +1335,7 @@ public class SpecialCardAi { } for (Player opp : ai.getOpponents()) { - int oppLands = CardLists.filter(opp.getCardsIn(ZoneType.Battlefield), Predicates.and(CardPredicates.Presets.LANDS, CardPredicates.Presets.BASIC_LANDS.negate())).size(); + int oppLands = CardLists.filter(opp.getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.LANDS.and(CardPredicates.Presets.BASIC_LANDS.negate())).size(); // Always if enemy would die and we don't! // TODO : predict actual damage instead of assuming it'll be 2*lands // Don't if we lose, unless we lose anyway to unblocked creatures next turn diff --git a/forge-ai/src/main/java/forge/ai/ability/ChooseSourceAi.java b/forge-ai/src/main/java/forge/ai/ability/ChooseSourceAi.java index 71520a03379..08f9251a77a 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChooseSourceAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChooseSourceAi.java @@ -24,7 +24,6 @@ import forge.game.spellability.SpellAbilityStackInstance; import forge.game.zone.ZoneType; import forge.util.Aggregates; import forge.util.Iterables; -import forge.util.Predicates; public class ChooseSourceAi extends SpellAbilityAi { @@ -134,8 +133,8 @@ public class ChooseSourceAi extends SpellAbilityAi { } // No optimal creature was found above, so try to broaden the choice. if (!Iterables.isEmpty(options)) { - List oppCreatures = CardLists.filter(options, Predicates.and(CardPredicates.Presets.CREATURES, - CardPredicates.isOwner(aiChoser).negate())); + List oppCreatures = CardLists.filter(options, + CardPredicates.Presets.CREATURES.and(CardPredicates.isOwner(aiChoser).negate())); List aiNonCreatures = CardLists.filter(options, CardPredicates.Presets.CREATURES.negate() .and(CardPredicates.Presets.PERMANENTS) diff --git a/forge-ai/src/main/java/forge/ai/ability/CountersRemoveAi.java b/forge-ai/src/main/java/forge/ai/ability/CountersRemoveAi.java index 3d0beff19a4..20de084c414 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CountersRemoveAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CountersRemoveAi.java @@ -26,7 +26,6 @@ import forge.game.spellability.SpellAbility; import forge.game.spellability.TargetRestrictions; import forge.game.zone.ZoneType; import forge.util.Iterables; -import forge.util.Predicates; public class CountersRemoveAi extends SpellAbilityAi { @@ -183,7 +182,7 @@ public class CountersRemoveAi extends SpellAbilityAi { list = CardLists.filter(list, CardPredicates.isTargetableBy(sa)); CardCollection planeswalkerList = CardLists.filter(list, - Predicates.and(CardPredicates.Presets.PLANESWALKERS, CardPredicates.isControlledByAnyOf(ai.getOpponents())), + CardPredicates.Presets.PLANESWALKERS.and(CardPredicates.isControlledByAnyOf(ai.getOpponents())), CardPredicates.hasLessCounter(CounterEnumType.LOYALTY, amount)); if (!planeswalkerList.isEmpty()) { @@ -223,7 +222,7 @@ public class CountersRemoveAi extends SpellAbilityAi { // remove P1P1 counters from opposing creatures CardCollection oppP1P1List = CardLists.filter(list, - Predicates.and(CardPredicates.Presets.CREATURES, CardPredicates.isControlledByAnyOf(ai.getOpponents())), + CardPredicates.Presets.CREATURES.and(CardPredicates.isControlledByAnyOf(ai.getOpponents())), CardPredicates.hasCounter(CounterEnumType.P1P1)); if (!oppP1P1List.isEmpty()) { sa.getTargets().add(ComputerUtilCard.getBestCreatureAI(oppP1P1List)); diff --git a/forge-ai/src/main/java/forge/ai/ability/DestroyAllAi.java b/forge-ai/src/main/java/forge/ai/ability/DestroyAllAi.java index c685c5fb6d0..24d0d00ee01 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DestroyAllAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DestroyAllAi.java @@ -14,7 +14,6 @@ import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.game.zone.ZoneType; -import forge.util.Predicates; import java.util.function.Predicate; @@ -110,8 +109,8 @@ public class DestroyAllAi extends SpellAbilityAi { // Special handling for Raiding Party if (logic.equals("RaidingParty")) { - int numAiCanSave = Math.min(CardLists.count(ai.getCreaturesInPlay(), Predicates.and(CardPredicates.isColor(MagicColor.WHITE), CardPredicates.Presets.UNTAPPED)) * 2, ailist.size()); - int numOppsCanSave = Math.min(CardLists.count(ai.getOpponents().getCreaturesInPlay(), Predicates.and(CardPredicates.isColor(MagicColor.WHITE), CardPredicates.Presets.UNTAPPED)) * 2, opplist.size()); + int numAiCanSave = Math.min(CardLists.count(ai.getCreaturesInPlay(), CardPredicates.isColor(MagicColor.WHITE).and(CardPredicates.Presets.UNTAPPED)) * 2, ailist.size()); + int numOppsCanSave = Math.min(CardLists.count(ai.getOpponents().getCreaturesInPlay(), CardPredicates.isColor(MagicColor.WHITE).and(CardPredicates.Presets.UNTAPPED)) * 2, opplist.size()); return numOppsCanSave < opplist.size() && (ailist.size() - numAiCanSave < opplist.size() - numOppsCanSave); } diff --git a/forge-ai/src/main/java/forge/ai/ability/LifeLoseAi.java b/forge-ai/src/main/java/forge/ai/ability/LifeLoseAi.java index 7a2a2b6fd11..f020dd25ca3 100644 --- a/forge-ai/src/main/java/forge/ai/ability/LifeLoseAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/LifeLoseAi.java @@ -14,7 +14,6 @@ import forge.game.player.Player; import forge.game.player.PlayerCollection; import forge.game.player.PlayerPredicates; import forge.game.spellability.SpellAbility; -import forge.util.Predicates; import forge.util.collect.FCollection; public class LifeLoseAi extends SpellAbilityAi { @@ -128,7 +127,7 @@ public class LifeLoseAi extends SpellAbilityAi { final PlayerCollection tgtPlayers = getPlayers(ai, sa); // TODO: check against the amount we could obtain when multiple activations are possible PlayerCollection filteredPlayer = tgtPlayers - .filter(Predicates.and(PlayerPredicates.isOpponentOf(ai), PlayerPredicates.lifeLessOrEqualTo(amount))); + .filter(PlayerPredicates.isOpponentOf(ai).and(PlayerPredicates.lifeLessOrEqualTo(amount))); // killing opponents asap if (!filteredPlayer.isEmpty()) { return true; diff --git a/forge-ai/src/main/java/forge/ai/ability/MeldAi.java b/forge-ai/src/main/java/forge/ai/ability/MeldAi.java index bf33791404e..46ddf23c286 100644 --- a/forge-ai/src/main/java/forge/ai/ability/MeldAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/MeldAi.java @@ -7,7 +7,6 @@ import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.game.zone.ZoneType; import forge.util.Iterables; -import forge.util.Predicates; public class MeldAi extends SpellAbilityAi { @Override @@ -19,11 +18,11 @@ public class MeldAi extends SpellAbilityAi { if (cardsOTB.isEmpty()) { return false; } - - boolean hasPrimaryMeld = Iterables.any(cardsOTB, Predicates.and( - CardPredicates.nameEquals(primaryMeld), CardPredicates.isOwner(aiPlayer))); - boolean hasSecondaryMeld = Iterables.any(cardsOTB, Predicates.and( - CardPredicates.nameEquals(secondaryMeld), CardPredicates.isOwner(aiPlayer))); + + boolean hasPrimaryMeld = Iterables.any(cardsOTB, + CardPredicates.nameEquals(primaryMeld).and(CardPredicates.isOwner(aiPlayer))); + boolean hasSecondaryMeld = Iterables.any(cardsOTB, + CardPredicates.nameEquals(secondaryMeld).and(CardPredicates.isOwner(aiPlayer))); return hasPrimaryMeld && hasSecondaryMeld && sa.getHostCard().getName().equals(primaryMeld); } diff --git a/forge-core/src/main/java/forge/card/CardDb.java b/forge-core/src/main/java/forge/card/CardDb.java index f4aaf1eb293..d0bd09571d5 100644 --- a/forge-core/src/main/java/forge/card/CardDb.java +++ b/forge-core/src/main/java/forge/card/CardDb.java @@ -800,7 +800,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { }; } else // filter candidates based on requested artIndex cardQueryFilter = card -> card.getArtIndex() == cr.artIndex; - cardQueryFilter = Predicates.and(cardQueryFilter, filter); + cardQueryFilter = cardQueryFilter.and(filter); cards = getAllCards(cr.cardName, cardQueryFilter); // Note: No need to check whether "cards" is empty; the next for loop will validate condition at L699 if (cards.size() == 1) // if only one candidate, there much else we should do @@ -879,7 +879,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { return 0; Predicate predicate = card -> card.getEdition().equalsIgnoreCase(setCode); if(functionalVariantName != null && !functionalVariantName.equals(IPaperCard.NO_FUNCTIONAL_VARIANT)) { - predicate = Predicates.and(predicate, card -> functionalVariantName.equals(card.getFunctionalVariant())); + predicate = predicate.and(card -> functionalVariantName.equals(card.getFunctionalVariant())); } Collection cardsInSet = getAllCards(cardName, predicate); return cardsInSet.size(); diff --git a/forge-core/src/main/java/forge/card/CardEdition.java b/forge-core/src/main/java/forge/card/CardEdition.java index 3126ea24a98..83673de5470 100644 --- a/forge-core/src/main/java/forge/card/CardEdition.java +++ b/forge-core/src/main/java/forge/card/CardEdition.java @@ -904,7 +904,7 @@ public final class CardEdition implements Comparable { CardDb.CardArtPreference artPreference = StaticData.instance().getCardArtPreference(); Iterable editionsWithBasicLands = Iterables.filter( StaticData.instance().getEditions().getOrderedEditions(), - forge.util.Predicates.and(hasBasicLands, artPreference::accept)); + hasBasicLands.and(artPreference::accept)); Iterator editionsIterator = editionsWithBasicLands.iterator(); List selectedEditions = new ArrayList(); while (editionsIterator.hasNext()) diff --git a/forge-core/src/main/java/forge/card/CardRulesPredicates.java b/forge-core/src/main/java/forge/card/CardRulesPredicates.java index 121e2b48502..38865f2a441 100644 --- a/forge-core/src/main/java/forge/card/CardRulesPredicates.java +++ b/forge-core/src/main/java/forge/card/CardRulesPredicates.java @@ -574,14 +574,11 @@ public final class CardRulesPredicates { 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_ATTRACTION = Predicates.and(Presets.IS_ARTIFACT, - CardRulesPredicates.subType("Attraction") - ); + public static final Predicate IS_ATTRACTION = Presets.IS_ARTIFACT.and(CardRulesPredicates.subType("Attraction")); + public static final Predicate IS_NON_LAND = CardRulesPredicates.coreType(false, CardType.CoreType.Land); - public static final Predicate CAN_BE_BRAWL_COMMANDER = Predicates.and(Presets.IS_LEGENDARY, - Predicates.or(Presets.IS_CREATURE, Presets.IS_PLANESWALKER)); - public static final Predicate CAN_BE_TINY_LEADERS_COMMANDER = Predicates.and(Presets.IS_LEGENDARY, - Predicates.or(Presets.IS_CREATURE, Presets.IS_PLANESWALKER)); + public static final Predicate CAN_BE_BRAWL_COMMANDER = Presets.IS_LEGENDARY.and(Predicates.or(Presets.IS_CREATURE, Presets.IS_PLANESWALKER)); + public static final Predicate CAN_BE_TINY_LEADERS_COMMANDER = Presets.IS_LEGENDARY.and(Predicates.or(Presets.IS_CREATURE, Presets.IS_PLANESWALKER)); /** The Constant IS_NON_CREATURE_SPELL. **/ public static final Predicate IS_NON_CREATURE_SPELL = diff --git a/forge-core/src/main/java/forge/deck/generation/DeckGenPool.java b/forge-core/src/main/java/forge/deck/generation/DeckGenPool.java index e45fa4efb00..d395d108ce6 100644 --- a/forge-core/src/main/java/forge/deck/generation/DeckGenPool.java +++ b/forge-core/src/main/java/forge/deck/generation/DeckGenPool.java @@ -7,7 +7,6 @@ import java.util.function.Predicate; import forge.item.IPaperCard; import forge.item.PaperCard; import forge.util.Iterables; -import forge.util.Predicates; public class DeckGenPool implements IDeckGenPool { private final Map cards = new HashMap<>(); @@ -38,7 +37,7 @@ public class DeckGenPool implements IDeckGenPool { @Override public PaperCard getCard(String name, String edition) { - Predicate filter = Predicates.and(IPaperCard.Predicates.printedInSet(edition),IPaperCard.Predicates.name(name)); + Predicate filter = IPaperCard.Predicates.printedInSet(edition).and(IPaperCard.Predicates.name(name)); Iterable editionCards=Iterables.filter(cards.values(), filter); if (editionCards.iterator().hasNext()){ return editionCards.iterator().next(); 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 82ece55a661..c3fc0d27493 100644 --- a/forge-core/src/main/java/forge/deck/generation/DeckGeneratorBase.java +++ b/forge-core/src/main/java/forge/deck/generation/DeckGeneratorBase.java @@ -108,8 +108,8 @@ public abstract class DeckGeneratorBase { protected boolean setBasicLandPool(String edition){ Predicate isSetBasicLand; if (edition !=null){ - isSetBasicLand = Predicates.and(IPaperCard.Predicates.printedInSet(edition), - Predicates.compose(CardRulesPredicates.Presets.IS_BASIC_LAND, PaperCard::getRules)); + isSetBasicLand = IPaperCard.Predicates.printedInSet(edition) + .and(Predicates.compose(CardRulesPredicates.Presets.IS_BASIC_LAND, PaperCard::getRules)); }else{ isSetBasicLand = Predicates.compose(CardRulesPredicates.Presets.IS_BASIC_LAND, PaperCard::getRules); } @@ -327,7 +327,7 @@ public abstract class DeckGeneratorBase { map.put(key, boxed == null ? delta : boxed + delta); } - public static final Predicate AI_CAN_PLAY = Predicates.and(CardRulesPredicates.IS_KEPT_IN_AI_DECKS, CardRulesPredicates.IS_KEPT_IN_RANDOM_DECKS); + public static final Predicate AI_CAN_PLAY = CardRulesPredicates.IS_KEPT_IN_AI_DECKS.and(CardRulesPredicates.IS_KEPT_IN_RANDOM_DECKS); public static final Predicate COLORLESS_CARDS = c -> { ManaCost mc = c.getManaCost(); diff --git a/forge-core/src/main/java/forge/item/SealedProduct.java b/forge-core/src/main/java/forge/item/SealedProduct.java index c63c97cf3dc..2c2f6c1e342 100644 --- a/forge-core/src/main/java/forge/item/SealedProduct.java +++ b/forge-core/src/main/java/forge/item/SealedProduct.java @@ -113,9 +113,8 @@ public abstract class SealedProduct implements InventoryItemFromSet { } protected List getRandomBasicLands(final String setCode, final int count) { - Predicate cardsRule = Predicates.and( - IPaperCard.Predicates.printedInSet(setCode), - Predicates.compose(CardRulesPredicates.Presets.IS_BASIC_LAND, PaperCard::getRules)); + Predicate cardsRule = IPaperCard.Predicates.printedInSet(setCode) + .and(Predicates.compose(CardRulesPredicates.Presets.IS_BASIC_LAND, PaperCard::getRules)); return Aggregates.random(Iterables.filter(StaticData.instance().getCommonCards().getAllCards(), cardsRule), count); } } 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 4ae456c4d7b..d95b056190d 100644 --- a/forge-core/src/main/java/forge/item/generation/BoosterGenerator.java +++ b/forge-core/src/main/java/forge/item/generation/BoosterGenerator.java @@ -609,7 +609,7 @@ public class BoosterGenerator { String mainCode = operators.isEmpty() ? null : operators.get(0).trim(); if (null == mainCode || mainCode.equalsIgnoreCase(BoosterSlots.ANY)) { // no restriction on rarity - Predicate predicate = Predicates.and(setPred, extraPred); + Predicate predicate = setPred.and(extraPred); ps.addAll(Iterables.filter(src, predicate)); } else if (mainCode.equalsIgnoreCase(BoosterSlots.UNCOMMON_RARE)) { // for sets like ARN, where U1 cards are considered rare and U3 are uncommon diff --git a/forge-core/src/main/java/forge/util/Predicates.java b/forge-core/src/main/java/forge/util/Predicates.java index 483878b031f..1a773baea14 100644 --- a/forge-core/src/main/java/forge/util/Predicates.java +++ b/forge-core/src/main/java/forge/util/Predicates.java @@ -16,6 +16,7 @@ public class Predicates { return x -> Iterables.any(components, (Predicate>) i -> i.test(x)); } + //TODO: Most uses of this are with the function PaperCard::getRules. Maybe we should just have PaperCardPredicates? public static Predicate compose(Predicate predicate, Function function) { return x -> predicate.test(function.apply(x)); } @@ -23,11 +24,6 @@ public class Predicates { //TODO: Inline everything below. - public static Predicate and(Predicate first, Predicate second) { - //TODO: remove casting? - return ((Predicate) first).and(second); - } - public static Predicate or(Predicate first, Predicate second) { //TODO: remove casting? return ((Predicate) first).or(second); diff --git a/forge-game/src/main/java/forge/game/GameFormat.java b/forge-game/src/main/java/forge/game/GameFormat.java index ca7517c642f..56f5ed939e5 100644 --- a/forge-game/src/main/java/forge/game/GameFormat.java +++ b/forge-game/src/main/java/forge/game/GameFormat.java @@ -141,13 +141,13 @@ public class GameFormat implements Comparable { Predicate p = IPaperCard.Predicates.names(this.getBannedCardNames()).negate(); if (FormatSubType.ARENA.equals(this.getFormatSubType())) { - p = Predicates.and(p, IPaperCard.Predicates.Presets.IS_UNREBALANCED.negate()); + p = p.and(IPaperCard.Predicates.Presets.IS_UNREBALANCED.negate()); } else { - p = Predicates.and(p, IPaperCard.Predicates.Presets.IS_REBALANCED.negate()); + p = p.and(IPaperCard.Predicates.Presets.IS_REBALANCED.negate()); } if (!this.getAllowedSetCodes().isEmpty()) { - p = Predicates.and(p, printed ? + p = p.and(printed ? IPaperCard.Predicates.printedInSets(this.getAllowedSetCodes(), printed) : StaticData.instance().getCommonCards().wasPrintedInSets(this.getAllowedSetCodes())); } @@ -156,7 +156,7 @@ public class GameFormat implements Comparable { for (CardRarity cr: this.getAllowedRarities()) { crp.add(StaticData.instance().getCommonCards().wasPrintedAtRarity(cr)); } - p = Predicates.and(p, Predicates.or(crp)); + p = p.and(Predicates.or(crp)); } if (!this.getAdditionalCards().isEmpty()) { p = Predicates.or(p, IPaperCard.Predicates.names(this.getAdditionalCards())); diff --git a/forge-game/src/main/java/forge/game/ability/effects/VentureEffect.java b/forge-game/src/main/java/forge/game/ability/effects/VentureEffect.java index f8f3503e301..c8ded7f8eed 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/VentureEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/VentureEffect.java @@ -46,8 +46,8 @@ public class VentureEffect extends SpellAbilityEffect { if (sa.hasParam("Dungeon")) { dungeonCards = StaticData.instance().getVariantCards() .getAllCards(Predicates.compose( - Predicates.and(CardRulesPredicates.Presets.IS_DUNGEON, - CardRulesPredicates.subType(StringOp.EQUALS, sa.getParam("Dungeon"))), + CardRulesPredicates.Presets.IS_DUNGEON + .and(CardRulesPredicates.subType(StringOp.EQUALS, sa.getParam("Dungeon"))), PaperCard::getRules)); } else { // Create a new dungeon card chosen by player in command zone. diff --git a/forge-game/src/main/java/forge/game/card/CardLists.java b/forge-game/src/main/java/forge/game/card/CardLists.java index 59a9ad34392..536a3df78fb 100644 --- a/forge-game/src/main/java/forge/game/card/CardLists.java +++ b/forge-game/src/main/java/forge/game/card/CardLists.java @@ -314,7 +314,7 @@ public class CardLists { } public static CardCollection filter(Iterable cardList, Predicate f1, Predicate f2) { - return new CardCollection(Iterables.filter(cardList, Predicates.and(f1, f2))); + return new CardCollection(Iterables.filter(cardList, f1.and(f2))); } public static CardCollection filter(Iterable cardList, Iterable> filt) { @@ -337,7 +337,7 @@ public class CardLists { } public static List filterAsList(Iterable cardList, Predicate f1, Predicate f2) { - return Lists.newArrayList(Iterables.filter(cardList, Predicates.and(f1, f2))); + return Lists.newArrayList(Iterables.filter(cardList, f1.and(f2))); } public static List filterAsList(Iterable cardList, Iterable> filt) { diff --git a/forge-game/src/main/java/forge/game/combat/AttackRestrictionType.java b/forge-game/src/main/java/forge/game/combat/AttackRestrictionType.java index c16d48b9d48..71eadf7c134 100644 --- a/forge-game/src/main/java/forge/game/combat/AttackRestrictionType.java +++ b/forge-game/src/main/java/forge/game/combat/AttackRestrictionType.java @@ -3,7 +3,6 @@ package forge.game.combat; import forge.card.MagicColor; import forge.game.card.Card; import forge.game.card.CardPredicates; -import forge.util.Predicates; import java.util.function.Predicate; @@ -21,10 +20,9 @@ public enum AttackRestrictionType { case NEED_GREATER_POWER: return CardPredicates.hasGreaterPowerThan(attacker.getNetPower()); case NEED_BLACK_OR_GREEN: - return Predicates.and( - CardPredicates.isColor((byte) (MagicColor.BLACK | MagicColor.GREEN)), + return CardPredicates.isColor((byte) (MagicColor.BLACK | MagicColor.GREEN)) // may explicitly not be black/green itself - ((Predicate) attacker::equals).negate()); + .and(((Predicate) attacker::equals).negate()); case NOT_ALONE: return x -> true; default: diff --git a/forge-game/src/main/java/forge/game/phase/Untap.java b/forge-game/src/main/java/forge/game/phase/Untap.java index f8808f9ba1b..62ff222810c 100644 --- a/forge-game/src/main/java/forge/game/phase/Untap.java +++ b/forge-game/src/main/java/forge/game/phase/Untap.java @@ -45,7 +45,6 @@ import forge.game.staticability.StaticAbilityCantPhase; import forge.game.trigger.TriggerType; import forge.game.zone.ZoneType; import forge.util.Iterables; -import forge.util.Predicates; /** *

@@ -114,7 +113,7 @@ public class Untap extends Phase { */ private void doUntap() { final Player player = game.getPhaseHandler().getPlayerTurn(); - final Predicate tappedCanUntap = Predicates.and(Presets.TAPPED, CANUNTAP); + final Predicate tappedCanUntap = Presets.TAPPED.and(CANUNTAP); Map untapMap = Maps.newHashMap(); CardCollection list = new CardCollection(player.getCardsIn(ZoneType.Battlefield)); diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index fb9f6215db0..20428eb251b 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -63,6 +63,7 @@ import org.apache.commons.lang3.tuple.Pair; import java.util.*; import java.util.Map.Entry; +import java.util.function.Predicate; /** *

@@ -3749,9 +3750,9 @@ public class Player extends GameEntity implements Comparable { public boolean hasUrzaLands() { final CardCollectionView landsControlled = getCardsIn(ZoneType.Battlefield); - return Iterables.any(landsControlled, Predicates.and(CardPredicates.isType("Urza's"), CardPredicates.isType("Mine"))) - && Iterables.any(landsControlled, Predicates.and(CardPredicates.isType("Urza's"), CardPredicates.isType("Power-Plant"))) - && Iterables.any(landsControlled, Predicates.and(CardPredicates.isType("Urza's"), CardPredicates.isType("Tower"))); + return Iterables.any(landsControlled, CardPredicates.isType("Urza's").and(CardPredicates.isType("Mine"))) + && Iterables.any(landsControlled, CardPredicates.isType("Urza's").and(CardPredicates.isType("Power-Plant"))) + && Iterables.any(landsControlled, CardPredicates.isType("Urza's").and(CardPredicates.isType("Tower"))); } public void revealFaceDownCards() { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityPanharmonicon.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityPanharmonicon.java index d38fc162a4d..651aa40dea8 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityPanharmonicon.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityPanharmonicon.java @@ -21,7 +21,6 @@ import java.util.List; import java.util.Map; import forge.util.Iterables; -import forge.util.Predicates; import org.apache.commons.lang3.ArrayUtils; public class StaticAbilityPanharmonicon { @@ -178,10 +177,10 @@ public class StaticAbilityPanharmonicon { Map dmgMap = (Map) runParams.get(AbilityKey.DamageMap); // 1. check it's valid cause for static // 2. and it must also be valid for trigger event - if (!Iterables.any(dmgMap.keySet(), Predicates.and( - GameObjectPredicates.matchesValidParam(stAb, "ValidSource"), - GameObjectPredicates.matchesValidParam(trigger, "ValidSource") - ))) { + if (!Iterables.any(dmgMap.keySet(), + GameObjectPredicates.matchesValidParam(stAb, "ValidSource") + .and(GameObjectPredicates.matchesValidParam(trigger, "ValidSource")) + )) { return false; } // DamageAmount$ can be ignored for now (its usage doesn't interact with ValidSource from either) @@ -191,10 +190,9 @@ public class StaticAbilityPanharmonicon { return false; } Map dmgMap = (Map) runParams.get(AbilityKey.DamageMap); - if (!Iterables.any(dmgMap.keySet(), Predicates.and( - GameObjectPredicates.matchesValidParam(stAb, "ValidTarget"), - GameObjectPredicates.matchesValidParam(trigger, "ValidTarget") - ))) { + if (!Iterables.any(dmgMap.keySet(), GameObjectPredicates.matchesValidParam(stAb, "ValidTarget") + .and(GameObjectPredicates.matchesValidParam(trigger, "ValidTarget")) + )) { return false; } } diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardPowerFilter.java b/forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardPowerFilter.java index e006b629b78..224ce72e726 100644 --- a/forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardPowerFilter.java +++ b/forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardPowerFilter.java @@ -33,7 +33,7 @@ public class CardPowerFilter extends ValueRangeFilter { if (predicate == null) { return x -> true; } - predicate = Predicates.and(predicate, CardRulesPredicates.Presets.IS_CREATURE); + predicate = predicate.and(CardRulesPredicates.Presets.IS_CREATURE); return Predicates.compose(predicate, PaperCard::getRules); } } diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardToughnessFilter.java b/forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardToughnessFilter.java index 19bdd73cb3f..d6d186c07fc 100644 --- a/forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardToughnessFilter.java +++ b/forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardToughnessFilter.java @@ -33,7 +33,7 @@ public class CardToughnessFilter extends ValueRangeFilter { if (predicate == null) { return x -> true; } - predicate = Predicates.and(predicate, CardRulesPredicates.Presets.IS_CREATURE); + predicate = predicate.and(CardRulesPredicates.Presets.IS_CREATURE); return Predicates.compose(predicate, PaperCard::getRules); } } diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorCommander.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorCommander.java index 1d8461e568e..a0514c3df97 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorCommander.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorCommander.java @@ -83,7 +83,7 @@ public final class CEditorCommander extends CDeckEditor { if (gameType == GameType.Brawl){ GameFormat format = FModel.getFormats().get("Brawl"); Predicate commanderFilter = CardRulesPredicates.Presets.CAN_BE_BRAWL_COMMANDER; - commanderPool = ItemPool.createFrom(commonCards.getAllCardsNoAlt(Predicates.and(format.getFilterPrinted(), Predicates.compose(commanderFilter, PaperCard::getRules))), PaperCard.class); + commanderPool = ItemPool.createFrom(commonCards.getAllCardsNoAlt(format.getFilterPrinted().and(Predicates.compose(commanderFilter, PaperCard::getRules))), PaperCard.class); normalPool = ItemPool.createFrom(format.getAllCards(), PaperCard.class); } else { diff --git a/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java b/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java index 3cb810b12c3..90e36c1c3a0 100644 --- a/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java +++ b/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java @@ -20,7 +20,6 @@ import forge.model.CardBlock; import forge.model.FModel; import forge.util.Aggregates; import forge.util.MyRandom; -import forge.util.Predicates; import org.apache.commons.lang3.tuple.Pair; import java.io.Serializable; @@ -319,7 +318,7 @@ public class AdventureEventData implements Serializable { private CardBlock pickWeightedCardBlock() { CardEdition.Collection editions = FModel.getMagicDb().getEditions(); Iterable src = FModel.getBlocks(); //all blocks - Predicate filter = Predicates.and(CardEdition.Predicates.CAN_MAKE_BOOSTER, selectSetPool()); + Predicate filter = CardEdition.Predicates.CAN_MAKE_BOOSTER.and(selectSetPool()); List allEditions = new ArrayList<>(); StreamSupport.stream(editions.spliterator(), false).filter(filter).filter(CardEdition::hasBoosterTemplate).collect(Collectors.toList()).iterator().forEachRemaining(allEditions::add); diff --git a/forge-gui-mobile/src/forge/adventure/util/CardUtil.java b/forge-gui-mobile/src/forge/adventure/util/CardUtil.java index 2920d4f3a00..dfd2eabe7d0 100644 --- a/forge-gui-mobile/src/forge/adventure/util/CardUtil.java +++ b/forge-gui-mobile/src/forge/adventure/util/CardUtil.java @@ -22,7 +22,6 @@ import forge.item.generation.UnOpenedProduct; import forge.model.FModel; import forge.util.Aggregates; import forge.util.Iterables; -import forge.util.Predicates; import java.text.SimpleDateFormat; import java.util.*; @@ -792,7 +791,7 @@ public class CardUtil { } public static Deck generateRandomBoosterPackAsDeck(final Predicate editionFilter) { - Predicate filter = Predicates.and(CardEdition.Predicates.CAN_MAKE_BOOSTER, editionFilter); + Predicate filter = CardEdition.Predicates.CAN_MAKE_BOOSTER.and(editionFilter); Iterable possibleEditions = Iterables.filter(FModel.getMagicDb().getEditions(), filter); if (!possibleEditions.iterator().hasNext()) { diff --git a/forge-gui-mobile/src/forge/deck/FDeckEditor.java b/forge-gui-mobile/src/forge/deck/FDeckEditor.java index 7687fa36bcb..66418274d6c 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckEditor.java +++ b/forge-gui-mobile/src/forge/deck/FDeckEditor.java @@ -93,7 +93,7 @@ public class FDeckEditor extends TabPageScreen { } } else if (additionalFilter != null) { - filter = Predicates.and(filter, additionalFilter); + filter = filter.and(additionalFilter); } ItemPool filteredPool = new ItemPool<>(PaperCard.class); diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/CardPowerFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/CardPowerFilter.java index 1f0b1b0cfb4..7c9a21b6836 100644 --- a/forge-gui-mobile/src/forge/itemmanager/filters/CardPowerFilter.java +++ b/forge-gui-mobile/src/forge/itemmanager/filters/CardPowerFilter.java @@ -30,7 +30,7 @@ public class CardPowerFilter extends ValueRangeFilter { if (predicate == null) { return x -> true; } - predicate = Predicates.and(predicate, CardRulesPredicates.Presets.IS_CREATURE); + predicate = predicate.and(CardRulesPredicates.Presets.IS_CREATURE); return Predicates.compose(predicate, PaperCard::getRules); } } diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/CardToughnessFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/CardToughnessFilter.java index a12822a890b..70cac770f7e 100644 --- a/forge-gui-mobile/src/forge/itemmanager/filters/CardToughnessFilter.java +++ b/forge-gui-mobile/src/forge/itemmanager/filters/CardToughnessFilter.java @@ -30,7 +30,7 @@ public class CardToughnessFilter extends ValueRangeFilter { if (predicate == null) { return x -> true; } - predicate = Predicates.and(predicate, CardRulesPredicates.Presets.IS_CREATURE); + predicate = predicate.and(CardRulesPredicates.Presets.IS_CREATURE); return Predicates.compose(predicate, PaperCard::getRules); } } diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestAEtherScreen.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestAEtherScreen.java index e0c8e65349b..c07da345c23 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestAEtherScreen.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestAEtherScreen.java @@ -389,7 +389,7 @@ public class ConquestAEtherScreen extends FScreen { if (predicate == null) { return selectedOption.getPredicate(); } - return Predicates.and(predicate, selectedOption.getPredicate()); + return predicate.and(selectedOption.getPredicate()); } @Override diff --git a/forge-gui/src/main/java/forge/deck/CommanderDeckGenerator.java b/forge-gui/src/main/java/forge/deck/CommanderDeckGenerator.java index ac757f56d01..84aef7ff47a 100644 --- a/forge-gui/src/main/java/forge/deck/CommanderDeckGenerator.java +++ b/forge-gui/src/main/java/forge/deck/CommanderDeckGenerator.java @@ -40,8 +40,8 @@ public class CommanderDeckGenerator extends DeckProxy implements Comparable canPlay = isForAi ? DeckGeneratorBase.AI_CAN_PLAY : CardRulesPredicates.IS_KEPT_IN_RANDOM_DECKS; @SuppressWarnings("unchecked") - Iterable legends = Iterables.filter(uniqueCards.toFlatList(), Predicates.and(format.isLegalCommanderPredicate(), Predicates.compose( - canPlay, PaperCard::getRules))); + Iterable legends = Iterables.filter(uniqueCards.toFlatList(), format.isLegalCommanderPredicate() + .and(Predicates.compose(canPlay, PaperCard::getRules))); final List decks = new ArrayList<>(); for (PaperCard legend: legends) { decks.add(new CommanderDeckGenerator(legend, format, isForAi, isCardGen)); @@ -64,10 +64,8 @@ public class CommanderDeckGenerator extends DeckProxy implements Comparable canPlay = isForAi ? DeckGeneratorBase.AI_CAN_PLAY : CardRulesPredicates.IS_KEPT_IN_RANDOM_DECKS; @SuppressWarnings("unchecked") - Iterable legends = Iterables.filter(uniqueCards.toFlatList(), Predicates.and(format.isLegalCardPredicate(), - Predicates.compose(Predicates.and( - CardRulesPredicates.Presets.CAN_BE_BRAWL_COMMANDER, - canPlay), PaperCard::getRules))); + Iterable legends = Iterables.filter(uniqueCards.toFlatList(), format.isLegalCardPredicate() + .and(Predicates.compose(CardRulesPredicates.Presets.CAN_BE_BRAWL_COMMANDER.and(canPlay), PaperCard::getRules))); final List decks = new ArrayList<>(); for (PaperCard legend: legends) { decks.add(new CommanderDeckGenerator(legend, format, isForAi, isCardGen)); diff --git a/forge-gui/src/main/java/forge/deck/DeckProxy.java b/forge-gui/src/main/java/forge/deck/DeckProxy.java index 537457558f4..9d350b16962 100644 --- a/forge-gui/src/main/java/forge/deck/DeckProxy.java +++ b/forge-gui/src/main/java/forge/deck/DeckProxy.java @@ -18,7 +18,6 @@ import forge.model.FModel; import forge.util.BinaryUtil; import forge.util.IHasName; import forge.util.Iterables; -import forge.util.Predicates; import forge.util.storage.IStorage; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; @@ -473,7 +472,7 @@ public class DeckProxy implements InventoryItem { if (filter == null) { filter = DeckFormat.TinyLeaders.hasLegalCardsPredicate(FModel.getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY)); } else { - filter = Predicates.and(DeckFormat.TinyLeaders.hasLegalCardsPredicate(FModel.getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY)), filter); + filter = filter.and(DeckFormat.TinyLeaders.hasLegalCardsPredicate(FModel.getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY))); } addDecksRecursivelly("Tiny Leaders", GameType.TinyLeaders, result, "", FModel.getDecks().getTinyLeaders(), filter); return result; @@ -487,7 +486,7 @@ public class DeckProxy implements InventoryItem { if (filter == null) { filter = DeckFormat.Brawl.hasLegalCardsPredicate(FModel.getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY)); } else { - filter = Predicates.and(DeckFormat.Brawl.hasLegalCardsPredicate(FModel.getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY)), filter); + filter = filter.and(DeckFormat.Brawl.hasLegalCardsPredicate(FModel.getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY))); } addDecksRecursivelly("Brawl", GameType.Brawl, result, "", FModel.getDecks().getBrawl(), filter); return result; diff --git a/forge-gui/src/main/java/forge/deck/DeckgenUtil.java b/forge-gui/src/main/java/forge/deck/DeckgenUtil.java index 4b8cf9a7a46..04ae6038a6e 100644 --- a/forge-gui/src/main/java/forge/deck/DeckgenUtil.java +++ b/forge-gui/src/main/java/forge/deck/DeckgenUtil.java @@ -61,7 +61,7 @@ public class DeckgenUtil { try { List keys = new ArrayList<>(CardArchetypeLDAGenerator.ldaPools.get(format.getName()).keySet()); String randomKey = keys.get( MyRandom.getRandom().nextInt(keys.size()) ); - Predicate cardFilter = Predicates.and(format.getFilterPrinted(),PaperCard.Predicates.name(randomKey)); + Predicate cardFilter = format.getFilterPrinted().and(PaperCard.Predicates.name(randomKey)); PaperCard keyCard = FModel.getMagicDb().getCommonCards().getAllCards(cardFilter).get(0); return buildCardGenDeck(keyCard,format,isForAI); @@ -73,7 +73,7 @@ public class DeckgenUtil { public static Deck buildCardGenDeck(String cardName, GameFormat format, boolean isForAI){ try { - Predicate cardFilter = Predicates.and(format.getFilterPrinted(),PaperCard.Predicates.name(cardName)); + Predicate cardFilter = format.getFilterPrinted().and(PaperCard.Predicates.name(cardName)); return buildCardGenDeck(FModel.getMagicDb().getCommonCards().getAllCards(cardFilter).get(0),format,isForAI); }catch (Exception e){ e.printStackTrace(); @@ -467,17 +467,19 @@ public class DeckgenUtil { deck = Aggregates.random(geneticAI).getDeck(); } else { + Predicate sizePredicate = deckProxy -> deckProxy.getMainSize() <= 60; if (!selection.isEmpty() && selection.size() < 4) { - Predicate pred = Predicates.and(deckProxy -> deckProxy.getMainSize() <= 60, deckProxy -> deckProxy.getColorIdentity().hasAllColors(ColorSet.fromNames(colors.toCharArray()).getColor())); + Predicate colorPredicate = deckProxy -> deckProxy.getColorIdentity().hasAllColors(ColorSet.fromNames(colors.toCharArray()).getColor()); + Predicate pred = sizePredicate.and(colorPredicate); if (isTheme) deck = Aggregates.random(Iterables.filter(advThemes, pred)).getDeck(); else deck = Aggregates.random(Iterables.filter(advPrecons, pred)).getDeck(); } else { if (isTheme) - deck = Aggregates.random(Iterables.filter(advThemes, deckProxy -> deckProxy.getMainSize() <= 60)).getDeck(); + deck = Aggregates.random(Iterables.filter(advThemes, sizePredicate)).getDeck(); else - deck = Aggregates.random(Iterables.filter(advPrecons, deckProxy -> deckProxy.getMainSize() <= 60)).getDeck(); + deck = Aggregates.random(Iterables.filter(advPrecons, sizePredicate)).getDeck(); } } } catch (Exception e) { @@ -758,7 +760,7 @@ public class DeckgenUtil { cardDb = FModel.getMagicDb().getCommonCards(); //shuffle first 400 random cards Iterable colorList = Iterables.filter(format.getCardPool(cardDb).getAllCards(), - Predicates.and(format.isLegalCardPredicate(),Predicates.compose(Predicates.or( + format.isLegalCardPredicate().and(Predicates.compose(Predicates.or( new CardThemedDeckBuilder.MatchColorIdentity(commander.getRules().getColorIdentity()), DeckGeneratorBase.COLORLESS_CARDS), PaperCard::getRules))); switch (format) { diff --git a/forge-gui/src/main/java/forge/gamemodes/limited/CardThemedDeckBuilder.java b/forge-gui/src/main/java/forge/gamemodes/limited/CardThemedDeckBuilder.java index 5cce5a4d3be..91904b648af 100644 --- a/forge-gui/src/main/java/forge/gamemodes/limited/CardThemedDeckBuilder.java +++ b/forge-gui/src/main/java/forge/gamemodes/limited/CardThemedDeckBuilder.java @@ -319,8 +319,8 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { //Add remaining non-land colour matching cards to sideboard final CardPool cp = result.getOrCreate(DeckSection.Sideboard); Iterable potentialSideboard = Iterables.filter(aiPlayables, - Predicates.and(Predicates.compose(hasColor, PaperCard::getRules), - Predicates.compose(CardRulesPredicates.Presets.IS_NON_LAND, PaperCard::getRules))); + Predicates.compose(hasColor, PaperCard::getRules) + .and(Predicates.compose(CardRulesPredicates.Presets.IS_NON_LAND, PaperCard::getRules))); int i=0; while(i<15 && potentialSideboard.iterator().hasNext()){ PaperCard sbCard = potentialSideboard.iterator().next(); @@ -476,7 +476,7 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { } } - hasColor = Predicates.and(CardRulesPredicates.Presets.IS_NON_LAND,Predicates.or(new MatchColorIdentity(colors), + hasColor = CardRulesPredicates.Presets.IS_NON_LAND.and(Predicates.or(new MatchColorIdentity(colors), DeckGeneratorBase.COLORLESS_CARDS)); final Iterable threeColorList = Iterables.filter(aiPlayables, Predicates.compose(hasColor, PaperCard::getRules)); @@ -521,8 +521,8 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { protected boolean setBasicLandPool(String edition){ Predicate isSetBasicLand; if (edition !=null){ - isSetBasicLand = Predicates.and(IPaperCard.Predicates.printedInSet(edition), - Predicates.compose(CardRulesPredicates.Presets.IS_BASIC_LAND, PaperCard::getRules)); + isSetBasicLand = IPaperCard.Predicates.printedInSet(edition) + .and(Predicates.compose(CardRulesPredicates.Presets.IS_BASIC_LAND, PaperCard::getRules)); }else{ isSetBasicLand = Predicates.compose(CardRulesPredicates.Presets.IS_BASIC_LAND, PaperCard::getRules); } diff --git a/forge-gui/src/main/java/forge/gamemodes/quest/BoosterUtils.java b/forge-gui/src/main/java/forge/gamemodes/quest/BoosterUtils.java index e6c77014264..5d543587e8e 100644 --- a/forge-gui/src/main/java/forge/gamemodes/quest/BoosterUtils.java +++ b/forge-gui/src/main/java/forge/gamemodes/quest/BoosterUtils.java @@ -72,20 +72,18 @@ public final class BoosterUtils { private static final Predicate filterPioneer = formats.getPioneer().editionLegalPredicate; private static final Predicate filterModern= formats.getModern().editionLegalPredicate; - private static final Predicate filterStandard = Predicates.and(CardEdition.Predicates.CAN_MAKE_BOOSTER, - formats.getStandard().editionLegalPredicate); + private static final Predicate filterStandard = CardEdition.Predicates.CAN_MAKE_BOOSTER.and(formats.getStandard().editionLegalPredicate); - private static final Predicate filterPioneerNotStandard = Predicates.and( - CardEdition.Predicates.CAN_MAKE_BOOSTER, - Predicates.and(filterPioneer, formats.getStandard().editionLegalPredicate.negate())); + private static final Predicate filterPioneerNotStandard = CardEdition.Predicates.CAN_MAKE_BOOSTER + .and(filterPioneer + .and(formats.getStandard().editionLegalPredicate.negate())); - private static final Predicate filterModernNotPioneer = Predicates.and( - CardEdition.Predicates.CAN_MAKE_BOOSTER, - Predicates.and(filterModern, filterPioneer.negate())); + private static final Predicate filterModernNotPioneer = CardEdition.Predicates.CAN_MAKE_BOOSTER + .and(filterModern.and(filterPioneer.negate())); /** The filter not ext. */ - private static final Predicate filterNotModern = Predicates.and(CardEdition.Predicates.CAN_MAKE_BOOSTER, - filterModern.negate()); + private static final Predicate filterNotModern = CardEdition.Predicates.CAN_MAKE_BOOSTER + .and(filterModern.negate()); /** * Gets the quest starter deck. @@ -198,7 +196,7 @@ public final class BoosterUtils { List output = new ArrayList<>(); - Predicate filter = Predicates.and(CardEdition.Predicates.CAN_MAKE_BOOSTER, editionFilter); + Predicate filter = CardEdition.Predicates.CAN_MAKE_BOOSTER.and(editionFilter); Iterable possibleEditions = Iterables.filter(FModel.getMagicDb().getEditions(), filter); if (!possibleEditions.iterator().hasNext()) { @@ -273,7 +271,7 @@ public final class BoosterUtils { predicate = CardRulesPredicates.hasColor(color); } if (MyRandom.getRandom().nextDouble() < 0.1) { - predicate = Predicates.and(predicate, CardRulesPredicates.Presets.IS_MULTICOLOR); + predicate = predicate.and(CardRulesPredicates.Presets.IS_MULTICOLOR); } colorFilters.add(predicate); } @@ -329,10 +327,8 @@ public final class BoosterUtils { } //Try to get multicolored cards that fit into the preferred colors. - Predicate predicateRules = Predicates.and( - CardRulesPredicates.isColor(preferredColors.get(index)), - CardRulesPredicates.Presets.IS_MULTICOLOR - ); + Predicate predicateRules = CardRulesPredicates.isColor(preferredColors.get(index)) + .and(CardRulesPredicates.Presets.IS_MULTICOLOR); Predicate predicateCard = Predicates.compose(predicateRules, PaperCard::getRules); //Adjust for the number of multicolored possibilities. This prevents flooding of non-selected @@ -355,7 +351,7 @@ public final class BoosterUtils { for (Byte color : otherColors) { if (i % 6 == 0) { - colorFilters.add(Predicates.and(CardRulesPredicates.isColor(color), CardRulesPredicates.Presets.IS_MULTICOLOR)); + colorFilters.add(CardRulesPredicates.isColor(color).and(CardRulesPredicates.Presets.IS_MULTICOLOR)); } else { colorFilters.add(CardRulesPredicates.isMonoColor(color)); } @@ -411,7 +407,7 @@ public final class BoosterUtils { do { if (color2 != null) { Predicate color2c = Predicates.compose(color2, PaperCard::getRules); - card = Aggregates.random(Iterables.filter(source, Predicates.and(filter, color2c))); + card = Aggregates.random(Iterables.filter(source, filter.and(color2c))); } } while (card == null && colorMisses++ < 10); } diff --git a/forge-gui/src/main/java/forge/gamemodes/quest/QuestRewardCard.java b/forge-gui/src/main/java/forge/gamemodes/quest/QuestRewardCard.java index 32d1be5c14c..b012a82507a 100644 --- a/forge-gui/src/main/java/forge/gamemodes/quest/QuestRewardCard.java +++ b/forge-gui/src/main/java/forge/gamemodes/quest/QuestRewardCard.java @@ -79,7 +79,7 @@ public abstract class QuestRewardCard implements IQuestRewardCard { for (final String rule : ruleCodes) { final Predicate newRule = BoosterUtils.parseRulesLimitation(rule); if (newRule != null) { - filterRules = (filterRules == null ? newRule : Predicates.and(filterRules, newRule)); + filterRules = filterRules == null ? newRule : filterRules.and(newRule); } } } @@ -107,10 +107,10 @@ public abstract class QuestRewardCard implements IQuestRewardCard { if (filterRules != null) { final Predicate rulesPrinted = Predicates.compose(filterRules, PaperCard::getRules); - filters = Predicates.and(filters, rulesPrinted); + filters = filters.and(rulesPrinted); } if (filterRarity != null) { - filters = Predicates.and(filters, filterRarity); + filters = filters.and(filterRarity); } return filters; } 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 c25b131dc44..c08917d3968 100644 --- a/forge-gui/src/main/java/forge/gamemodes/quest/QuestUtilCards.java +++ b/forge-gui/src/main/java/forge/gamemodes/quest/QuestUtilCards.java @@ -207,7 +207,7 @@ public final class QuestUtilCards { * @return the composite predicate. */ public Predicate applyFormatFilter(Predicate source) { - return questController.getFormat() == null ? source : Predicates.and(source, questController.getFormat().getFilterPrinted()); + return questController.getFormat() == null ? source : source.and(questController.getFormat().getFilterPrinted()); } /** @@ -636,7 +636,7 @@ public final class QuestUtilCards { private void generateTournamentsInShop(final int count) { Predicate formatFilter = CardEdition.Predicates.HAS_TOURNAMENT_PACK; if (questController.getFormat() != null) { - formatFilter = Predicates.and(formatFilter, isLegalInQuestFormat(questController.getFormat())); + formatFilter = formatFilter.and(isLegalInQuestFormat(questController.getFormat())); } Iterable rightEditions = Iterables.filter(FModel.getMagicDb().getEditions(), formatFilter); questAssets.getShopList().addAllOfTypeFlat(Aggregates.random(Iterables.transform(rightEditions, TournamentPack::fromSet), count)); @@ -651,7 +651,7 @@ public final class QuestUtilCards { private void generateFatPacksInShop(final int count) { Predicate formatFilter = CardEdition.Predicates.HAS_FAT_PACK; if (questController.getFormat() != null) { - formatFilter = Predicates.and(formatFilter, isLegalInQuestFormat(questController.getFormat())); + formatFilter = formatFilter.and(isLegalInQuestFormat(questController.getFormat())); } Iterable rightEditions = Iterables.filter(FModel.getMagicDb().getEditions(), formatFilter); questAssets.getShopList().addAllOfTypeFlat(Aggregates.random(Iterables.transform(rightEditions, FatPack::fromSet), count)); @@ -665,7 +665,7 @@ public final class QuestUtilCards { Predicate formatFilter = CardEdition.Predicates.HAS_BOOSTER_BOX; if (questController.getFormat() != null) { - formatFilter = Predicates.and(formatFilter, isLegalInQuestFormat(questController.getFormat())); + formatFilter = formatFilter.and(isLegalInQuestFormat(questController.getFormat())); } Iterable rightEditions = Iterables.filter(FModel.getMagicDb().getEditions(), formatFilter); diff --git a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java index bef26e0a920..18300451f5b 100644 --- a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java +++ b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java @@ -1581,7 +1581,7 @@ public class AdvancedSearch { pred = predPiece; } else if (operator == Operator.AND) { - pred = Predicates.and(pred, predPiece); + pred = pred.and(predPiece); } else if (operator == Operator.OR) { pred = Predicates.or(pred, predPiece); diff --git a/forge-gui/src/main/java/forge/itemmanager/BooleanExpression.java b/forge-gui/src/main/java/forge/itemmanager/BooleanExpression.java index 4cf79adfd06..242ba2069db 100644 --- a/forge-gui/src/main/java/forge/itemmanager/BooleanExpression.java +++ b/forge-gui/src/main/java/forge/itemmanager/BooleanExpression.java @@ -122,7 +122,7 @@ public class BooleanExpression { operators.pop(); right = operands.pop(); left = operands.pop(); - operands.push(Predicates.and(left, right)); + operands.push(left.and(right)); break; case OR: operators.pop(); diff --git a/forge-gui/src/main/java/forge/itemmanager/SFilterUtil.java b/forge-gui/src/main/java/forge/itemmanager/SFilterUtil.java index 80f031d57cc..ef4fb90081e 100644 --- a/forge-gui/src/main/java/forge/itemmanager/SFilterUtil.java +++ b/forge-gui/src/main/java/forge/itemmanager/SFilterUtil.java @@ -384,6 +384,6 @@ public class SFilterUtil { } public static Predicate optimizedAnd(Predicate p1, Predicate p2) { - return p1 == null ? p2 : (p2 == null ? p1 : Predicates.and(p1, p2)); + return p1 == null ? p2 : (p2 == null ? p1 : p1.and(p2)); } } diff --git a/forge-gui/src/main/java/forge/model/FModel.java b/forge-gui/src/main/java/forge/model/FModel.java index 54a355fda21..ca4c2a164fc 100644 --- a/forge-gui/src/main/java/forge/model/FModel.java +++ b/forge-gui/src/main/java/forge/model/FModel.java @@ -335,9 +335,12 @@ public final class FModel { } public static ItemPool getBrawlCommander() { - if (brawlCommander == null) - return ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt(Predicates.and( - FModel.getFormats().get("Brawl").getFilterPrinted(), Predicates.compose(CardRulesPredicates.Presets.CAN_BE_BRAWL_COMMANDER, PaperCard::getRules))), PaperCard.class); + if (brawlCommander == null) { + return ItemPool.createFrom(getMagicDb().getCommonCards().getAllCardsNoAlt( + FModel.getFormats().get("Brawl").getFilterPrinted() + .and(Predicates.compose(CardRulesPredicates.Presets.CAN_BE_BRAWL_COMMANDER, PaperCard::getRules)) + ), PaperCard.class); + } return brawlCommander; }