diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java index f17141845..930dd500a 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java @@ -633,11 +633,14 @@ public class FilterFactory { }); parameterFilters.put("printedtwilightcostfrommemory", (parameter, environment) -> actionContext -> { - var card = actionContext.getCardFromMemory(parameter).getBlueprint(); - if (card.getCardType() == CardType.THE_ONE_RING || card.getCardType() == CardType.MAP) + var card = actionContext.getCardFromMemory(parameter); + if(card == null) + return Filters.none; + var bp = card.getBlueprint(); + if (bp.getCardType() == CardType.THE_ONE_RING || bp.getCardType() == CardType.MAP) return Filters.none; - return Filters.printedTwilightCost(card.getTwilightCost()); + return Filters.printedTwilightCost(bp.getTwilightCost()); }); parameterFilters.put("race", (parameter, environment) -> { diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set08/Card_08_032_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set08/Card_08_032_Tests.java index 5b1d537c8..c6c289bff 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set08/Card_08_032_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set08/Card_08_032_Tests.java @@ -119,4 +119,36 @@ public class Card_08_032_Tests assertEquals(Zone.DISCARD, larder.getZone()); assertEquals(Zone.SHADOW_CHARACTERS, runner.getZone()); } + + @Test + public void CatapultBehavesWhenOpponentHas0CardsInDeck() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var catapult = scn.GetFreepsCard("catapult"); + scn.FreepsMoveCardToHand("fodder1", "fodder2"); + scn.FreepsMoveCardToSupportArea(catapult); + + var runner = scn.GetShadowCard("runner"); + var shelob = scn.GetShadowCard("shelob"); + var larder = scn.GetShadowCard("larder"); + scn.ShadowMoveCharToTable(runner, shelob); + scn.ShadowMoveCardToSupportArea(larder); + scn.ShadowMoveCardToDiscard("catapult", "fodder1", "fodder2"); + + scn.StartGame(); + scn.SkipToPhase(Phase.MANEUVER); + + assertEquals(2, scn.GetFreepsHandCount()); + assertEquals(0, scn.GetFreepsDiscardCount()); + assertEquals(0, scn.GetShadowDeckCount()); + assertTrue(scn.FreepsActionAvailable(catapult)); + + scn.FreepsUseCardAction(catapult); + assertEquals(0, scn.GetFreepsHandCount()); + assertEquals(2, scn.GetFreepsDiscardCount()); + + //Skipped right to the other player's maneuver action + assertTrue(scn.ShadowAnyDecisionsAvailable()); + } }