diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/ActivatedFromStackedEffectProcessor.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/ActivatedFromStackedEffectProcessor.java index 2089af8e1..dad60e95e 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/ActivatedFromStackedEffectProcessor.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/ActivatedFromStackedEffectProcessor.java @@ -63,7 +63,8 @@ public class ActivatedFromStackedEffectProcessor implements EffectProcessor { actionSource.addPlayRequirement( (actionContext) -> { PhysicalCard stackedOnCard = actionContext.getSource().getStackedOn(); - return stackedOnCard != null && Filters.accepts(actionContext.getGame(), stackedOnFilterableSource.getFilterable(actionContext), stackedOnCard); + return stackedOnCard != null && Filters.accepts(actionContext.getGame(), stackedOnCard, + stackedOnFilterableSource.getFilterable(actionContext)); } ); EffectUtils.processRequirementsCostsAndEffects(value, environment, actionSource); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/ExtraPossessionClassEffectProcessor.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/ExtraPossessionClassEffectProcessor.java index 4895acee4..5b67ef069 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/ExtraPossessionClassEffectProcessor.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/ExtraPossessionClassEffectProcessor.java @@ -20,7 +20,7 @@ public class ExtraPossessionClassEffectProcessor implements EffectProcessor { (game, self, attachedTo) -> { DefaultActionContext actionContext = new DefaultActionContext(self.getOwner(), game, self, null, null); final Filterable attachedFilterable = attachedFilterableSource.getFilterable(actionContext); - return Filters.accepts(game, attachedFilterable, attachedTo); + return Filters.accepts(game, attachedTo, attachedFilterable); }); } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/ModifyOwnCost.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/ModifyOwnCost.java index 06b524408..989e4ab60 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/ModifyOwnCost.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/ModifyOwnCost.java @@ -31,7 +31,8 @@ public class ModifyOwnCost implements EffectProcessor { return 0; if (target != null) { - if (!Filters.accepts(actionContext.getGame(), onFilterableSource.getFilterable(actionContext), target)) + if (!Filters.accepts(actionContext.getGame(), target, + onFilterableSource.getFilterable(actionContext))) return 0; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/resolver/ValueResolver.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/resolver/ValueResolver.java index 0a8c3ec9f..02ac30835 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/resolver/ValueResolver.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/resolver/ValueResolver.java @@ -550,7 +550,7 @@ public class ValueResolver { int count = 0; for (PhysicalCard physicalCard : game.getGameState().getDeck(deckPlayer)) { count++; - if (Filters.accepts(game, filterable, physicalCard)) + if (Filters.accepts(game, physicalCard, filterable)) break; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifyPlayOnCost.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifyPlayOnCost.java index 856254cbf..f510ad4b3 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifyPlayOnCost.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifyPlayOnCost.java @@ -34,7 +34,7 @@ public class ModifyPlayOnCost implements ModifierSourceProducer { RequirementCondition.createCondition(conditions, actionContext), ModifierEffect.TWILIGHT_COST_MODIFIER) { @Override public int getTwilightCostModifier(LotroGame game, PhysicalCard physicalCard, PhysicalCard target, boolean ignoreRoamingPenalty) { - if (target != null && Filters.accepts(game, onFilterable, target)) + if (target != null && Filters.accepts(game, target, onFilterable)) return evaluator.evaluateExpression(game, null); return 0; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/Location.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/Location.java index 50df760c0..6b8bf1956 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/Location.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/Location.java @@ -24,7 +24,7 @@ public class Location implements RequirementProducer { final Filterable filterable = filterableSource.getFilterable(actionContext); final LotroGame game = actionContext.getGame(); final PhysicalCard currentSite = game.getGameState().getCurrentSite(); - return Filters.accepts(game, filterable, currentSite); + return Filters.accepts(game, currentSite, filterable); }; } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/Discarded.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/Discarded.java index be5a721b9..f7b45d0db 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/Discarded.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/Discarded.java @@ -99,7 +99,8 @@ public class Discarded implements TriggerCheckerProducer { return false; if (result && bySource != null) { - if (source == null || !Filters.accepts(actionContext.getGame(), bySource.getFilterable(actionContext), source)) + if (source == null || !Filters.accepts(actionContext.getGame(), source, + bySource.getFilterable(actionContext))) result = false; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/RevealedCardFromHand.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/RevealedCardFromHand.java index 9c7444826..aeec8c227 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/RevealedCardFromHand.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/RevealedCardFromHand.java @@ -36,7 +36,7 @@ public class RevealedCardFromHand implements TriggerCheckerProducer { return false; final Filterable filterable = filterableSource.getFilterable(actionContext); final PhysicalCard revealedCard = revealCardFromHandResult.getRevealedCard(); - return Filters.accepts(actionContext.getGame(), filterable, revealedCard); + return Filters.accepts(actionContext.getGame(), revealedCard, filterable); } return false; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/RevealsCardFromTopOfDrawDeck.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/RevealsCardFromTopOfDrawDeck.java index 85b59a17d..352f6c10b 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/RevealsCardFromTopOfDrawDeck.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/RevealsCardFromTopOfDrawDeck.java @@ -33,7 +33,7 @@ public class RevealsCardFromTopOfDrawDeck implements TriggerCheckerProducer { RevealCardFromTopOfDeckResult revealCardFromTopOfDeckResult = (RevealCardFromTopOfDeckResult) actionContext.getEffectResult(); final Filterable filterable = filterableSource.getFilterable(actionContext); final PhysicalCard revealedCard = revealCardFromTopOfDeckResult.getRevealedCard(); - return Filters.accepts(actionContext.getGame(), filterable, revealedCard); + return Filters.accepts(actionContext.getGame(), revealedCard, filterable); } return false; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/SiteControlled.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/SiteControlled.java index 3ca554600..1c0980b21 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/SiteControlled.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/SiteControlled.java @@ -30,7 +30,7 @@ public class SiteControlled implements TriggerCheckerProducer { if(playerId != null && !takeResult.getPlayerId().equals(playerId)) return false; - return Filters.accepts(actionContext.getGame(), siteFilter, takeResult.getSite()); + return Filters.accepts(actionContext.getGame(), takeResult.getSite(), siteFilter); } return false; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/SiteLiberated.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/SiteLiberated.java index 0d77d8f40..e064a9966 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/SiteLiberated.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/SiteLiberated.java @@ -30,7 +30,7 @@ public class SiteLiberated implements TriggerCheckerProducer { if(playerId != null && !takeResult.getPlayerId().equals(playerId)) return false; - return Filters.accepts(actionContext.getGame(), siteFilter, takeResult.getSite()); + return Filters.accepts(actionContext.getGame(), takeResult.getSite(), siteFilter); } return false; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TakesWound.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TakesWound.java index f2a574c74..8f9aab7b6 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TakesWound.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TakesWound.java @@ -38,7 +38,8 @@ public class TakesWound implements TriggerCheckerProducer { final boolean result = TriggerConditions.forEachWounded(actionContext.getGame(), actionContext.getEffectResult(), filterable); if(result && !source.equals("any")) { var sources = ((WoundResult) actionContext.getEffectResult()).getSources(); - if (sources.stream().noneMatch(woundSource -> Filters.accepts(actionContext.getGame(), sourceFilterable, woundSource))) { + if (sources.stream().noneMatch(woundSource -> Filters.accepts(actionContext.getGame(), woundSource, + sourceFilterable))) { return false; } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/WinsSkirmish.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/WinsSkirmish.java index 3468cf7c0..83b402f9d 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/WinsSkirmish.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/WinsSkirmish.java @@ -58,7 +58,7 @@ public class WinsSkirmish implements TriggerCheckerProducer { private boolean checkResult(EffectResult effectResult, LotroGame game, Filterable winnerFilter, Filterable againstFilter) { if (effectResult.getType() == EffectResult.Type.CHARACTER_WON_SKIRMISH) { CharacterWonSkirmishResult wonResult = (CharacterWonSkirmishResult) effectResult; - return Filters.accepts(game, winnerFilter, wonResult.getWinner()) + return Filters.accepts(game, wonResult.getWinner(), winnerFilter) && Filters.acceptsAny(game, wonResult.getInvolving(), againstFilter); } return false; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java index 0653bd7b8..b1a62bb1c 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java @@ -699,8 +699,9 @@ public class Filters { }; } - public static boolean accepts(LotroGame game, Filterable filterable, PhysicalCard physicalCard) { - return changeToFilter(filterable).accepts(game, physicalCard); + public static boolean accepts(LotroGame game, PhysicalCard card, Filterable... filterable) { + Filter filter = and(filterable); + return filter.accepts(game, card); } public static boolean acceptsAny(LotroGame game, Iterable cards, Filterable... filterable) { diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/MayNotBePlayedOnModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/MayNotBePlayedOnModifier.java index c11532b8b..ed2189f10 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/MayNotBePlayedOnModifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/MayNotBePlayedOnModifier.java @@ -15,6 +15,6 @@ public class MayNotBePlayedOnModifier extends AbstractModifier { @Override public boolean canHavePlayedOn(LotroGame game, PhysicalCard playedCard, PhysicalCard target) { - return !Filters.accepts(game, _unplayableCardFilter, playedCard); + return !Filters.accepts(game, playedCard, _unplayableCardFilter); } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/TriggerConditions.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/TriggerConditions.java index d743003ea..399c364bd 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/TriggerConditions.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/TriggerConditions.java @@ -40,7 +40,7 @@ public class TriggerConditions { public static boolean losesSkirmishInvolving(LotroGame game, EffectResult effectResult, Filterable loserFilter, Filterable involvingFilter) { if (effectResult.getType() == EffectResult.Type.CHARACTER_LOST_SKIRMISH) { CharacterLostSkirmishResult wonResult = (CharacterLostSkirmishResult) effectResult; - return Filters.accepts(game, loserFilter, wonResult.getLoser()) + return Filters.accepts(game, wonResult.getLoser(), loserFilter) && Filters.acceptsAny(game, wonResult.getInvolving(), involvingFilter); } return false; @@ -70,7 +70,7 @@ public class TriggerConditions { var tokenResult = (AddCultureTokenResult) effectResult; if (playerId != null && !playerId.equals(tokenResult.getPerformingPlayer())) return false; - return Filters.accepts(game, from, tokenResult.getSource()) + return Filters.accepts(game, tokenResult.getSource(), from) && Filters.and(targetFilters).accepts(game, tokenResult.getTarget()); } return false; @@ -81,7 +81,7 @@ public class TriggerConditions { var tokenResult = (RemoveCultureTokenResult) effectResult; if (playerId != null && !playerId.equals(tokenResult.getPerformingPlayer())) return false; - return Filters.accepts(game, from, tokenResult.getSource()) + return Filters.accepts(game, tokenResult.getSource(), from) && Filters.and(targetFilters).accepts(game, tokenResult.getTarget()); } return false; @@ -162,7 +162,7 @@ public class TriggerConditions { if (effectResult.getType() == EffectResult.Type.FOR_EACH_DISCARDED_FROM_HAND) { DiscardCardFromHandResult discardResult = (DiscardCardFromHandResult) effectResult; if (discardResult.getSource() != null - && Filters.accepts(game, discardedBy, discardResult.getSource())) + && Filters.accepts(game, discardResult.getSource(), discardedBy)) return Filters.and(discarded).accepts(game, discardResult.getDiscardedCard()); } return false; @@ -174,11 +174,11 @@ public class TriggerConditions { var wounded = woundResult.getWoundedCard(); return Filters.acceptsAny(game, woundResult.getSources(), woundedBy) && - Filters.and(filters).accepts(game, woundResult.getWoundedCard()) && + Filters.accepts(game, woundResult.getWoundedCard(), filters) && ( (Filters.or(CardType.ALLY, CardType.COMPANION).accepts(game, wounded) && wounded.getZone() == Zone.DEAD) || - (Filters.accepts(game, CardType.MINION, wounded) && + (Filters.accepts(game, wounded, CardType.MINION) && wounded.getZone() != Zone.SHADOW_CHARACTERS) ); } @@ -211,7 +211,7 @@ public class TriggerConditions { if (effectResult.getType() == EffectResult.Type.FOR_EACH_EXERTED) { ExertResult exertResult = (ExertResult) effectResult; if (exertResult.getAction().getActionSource() != null - && Filters.accepts(game, exertedBy, exertResult.getAction().getActionSource())) + && Filters.accepts(game, exertResult.getAction().getActionSource(), exertedBy)) return Filters.and(exerted).accepts(game, exertResult.getExertedCard()); } return false; @@ -313,7 +313,7 @@ public class TriggerConditions { if (killedBy != Filters.any && (killers == null || killers.isEmpty() || killers.stream().allMatch(Objects::isNull))) return false; - return Filters.acceptsAny(game, killResult.getKillers(), killedBy) && + return Filters.acceptsAny(game, killers, killedBy) && Filters.and(killed).accepts(game, killResult.getKilledCard()); } return false; @@ -361,7 +361,7 @@ public class TriggerConditions { public static boolean isGettingDiscardedBy(Effect effect, LotroGame game, Filterable sourceFilter, Filterable... filters) { if (effect.getType() == Effect.Type.BEFORE_DISCARD_FROM_PLAY) { PreventableCardEffect preventableEffect = (PreventableCardEffect) effect; - if (effect.getSource() != null && Filters.accepts(game, sourceFilter, effect.getSource())) + if (effect.getSource() != null && Filters.accepts(game, effect.getSource(), sourceFilter)) return Filters.acceptsAny(game, preventableEffect.getAffectedCardsMinusPrevented(game), filters); } return false; @@ -370,7 +370,7 @@ public class TriggerConditions { public static boolean isGettingDiscardedByOpponent(Effect effect, LotroGame game, String playerId, Filterable sourceFilter, Filterable... filters) { if (effect.getType() == Effect.Type.BEFORE_DISCARD_FROM_PLAY) { PreventableCardEffect preventableEffect = (PreventableCardEffect) effect; - if (effect.getSource() != null && Filters.accepts(game, sourceFilter, effect.getSource()) + if (effect.getSource() != null && Filters.accepts(game, effect.getSource(), sourceFilter) && !effect.getPerformingPlayer().equals(playerId)) return Filters.acceptsAny(game, preventableEffect.getAffectedCardsMinusPrevented(game), filters); } @@ -398,11 +398,11 @@ public class TriggerConditions { final var zone = playResult.getPlayedFrom(); if (targetFilter != null && targetFilter != Filters.any && - (attachedTo == null || !Filters.accepts(game, targetFilter, attachedTo))) + (attachedTo == null || !Filters.accepts(game, attachedTo, targetFilter))) return false; if(fromFilter != null && fromFilter != Filters.any && cardPlayedFrom != null - && !Filters.accepts(game, fromFilter, cardPlayedFrom)) + && !Filters.accepts(game, cardPlayedFrom, fromFilter)) return false; if(fromZone != null && zone != fromZone) @@ -444,9 +444,9 @@ public class TriggerConditions { public static boolean transferredCard(LotroGame game, EffectResult effectResult, Filterable transferredCard, Filterable transferredFrom, Filterable transferredTo) { if (effectResult.getType() == EffectResult.Type.CARD_TRANSFERRED) { CardTransferredResult transferResult = (CardTransferredResult) effectResult; - return (Filters.accepts(game, transferredCard, transferResult.getTransferredCard()) - && (transferredFrom == null || (transferResult.getTransferredFrom() != null && Filters.accepts(game, transferredFrom, transferResult.getTransferredFrom()))) - && (transferredTo == null || (transferResult.getTransferredTo() != null && Filters.accepts(game, transferredTo, transferResult.getTransferredTo())))); + return (Filters.accepts(game, transferResult.getTransferredCard(), transferredCard) + && (transferredFrom == null || (transferResult.getTransferredFrom() != null && Filters.accepts(game, transferResult.getTransferredFrom(), transferredFrom))) + && (transferredTo == null || (transferResult.getTransferredTo() != null && Filters.accepts(game, transferResult.getTransferredTo(), transferredTo)))); } return false; }