diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set04/set04-Dwarven.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set04/set04-Dwarven.hjson index 593977eee..da3e34879 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set04/set04-Dwarven.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set04/set04-Dwarven.hjson @@ -749,7 +749,7 @@ type: event effect: [ { - type: shuffleCardsFromPlayAndStackedOnThemIntoDrawDeck + type: ShuffleCardsFromPlayIntoDrawDeck select: choose(culture(dwarven),condition) count: any } @@ -792,9 +792,9 @@ }, effect: [ { - type: shuffleCardsFromPlayAndStackedOnThemIntoDrawDeck + type: ShuffleCardsFromPlayIntoDrawDeck select: choose(culture(dwarven),condition) - memorizeStackedCards: stackedCards + memorizeStacked: stackedCards } { type: repeat diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/EffectAppenderFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/EffectAppenderFactory.java index 13dd088fa..f87c60ba3 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/EffectAppenderFactory.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/EffectAppenderFactory.java @@ -173,7 +173,6 @@ public class EffectAppenderFactory { effectAppenderProducers.put("shufflecardsfromdiscardintodrawdeck", new ShuffleCardsFromDiscardIntoDrawDeck()); effectAppenderProducers.put("shufflecardsfromhandintodrawdeck", new ShuffleCardsFromHandIntoDrawDeck()); effectAppenderProducers.put("shufflecardsfromplayintodrawdeck", new ShuffleCardsFromPlayIntoDrawDeck()); - effectAppenderProducers.put("shufflecardsfromplayandstackedonthemintodrawdeck", new ShuffleCardsFromPlayAndStackedOnThemIntoDrawDeck()); effectAppenderProducers.put("shuffledeck", new ShuffleDeck()); effectAppenderProducers.put("shufflehandintodrawdeck", new ShuffleHandIntoDrawDeck()); effectAppenderProducers.put("spot", new Spot()); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RevealCardsFromAdventureDeck.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RevealCardsFromAdventureDeck.java index 7a8ea1245..10083c0d7 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RevealCardsFromAdventureDeck.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RevealCardsFromAdventureDeck.java @@ -25,7 +25,7 @@ public class RevealCardsFromAdventureDeck implements EffectAppenderProducer { final String player = FieldUtils.getString(effectObject.get("player"), "player", "you"); final String select = FieldUtils.getString(effectObject.get("select"), "select"); if (select == null) - throw new InvalidCardDefinitionException("Filter is required"); + throw new InvalidCardDefinitionException("'select' is required for RevealCardsFromAdventureDeck effect."); final String memorize = FieldUtils.getString(effectObject.get("memorize"), "memorize", "_temp"); final ValueSource countSource = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ShuffleCardsFromPlayAndStackedOnThemIntoDrawDeck.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ShuffleCardsFromPlayAndStackedOnThemIntoDrawDeck.java deleted file mode 100644 index ca0730fcd..000000000 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ShuffleCardsFromPlayAndStackedOnThemIntoDrawDeck.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.gempukku.lotro.cards.build.field.effect.appender; - -import com.gempukku.lotro.cards.build.*; -import com.gempukku.lotro.cards.build.field.FieldUtils; -import com.gempukku.lotro.cards.build.field.effect.EffectAppender; -import com.gempukku.lotro.cards.build.field.effect.EffectAppenderProducer; -import com.gempukku.lotro.cards.build.field.effect.appender.resolver.CardResolver; -import com.gempukku.lotro.cards.build.field.effect.appender.resolver.PlayerResolver; -import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.GameState; -import com.gempukku.lotro.logic.actions.CostToEffectAction; -import com.gempukku.lotro.logic.effects.ShuffleCardsFromPlayAndStackedOnItIntoDeckEffect; -import com.gempukku.lotro.logic.timing.Effect; -import org.json.simple.JSONObject; - -import java.util.Collection; -import java.util.HashSet; -import java.util.Set; - -public class ShuffleCardsFromPlayAndStackedOnThemIntoDrawDeck implements EffectAppenderProducer { - @Override - public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { - FieldUtils.validateAllowedFields(effectObject, "player", "select", "count", "memorize", "memorizeStackedCards"); - - String player = FieldUtils.getString(effectObject.get("player"), "player", "you"); - final PlayerSource playerSource = PlayerResolver.resolvePlayer(player, environment); - final String select = FieldUtils.getString(effectObject.get("select"), "select", "choose(any)"); - final ValueSource valueSource = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment); - final String memorize = FieldUtils.getString(effectObject.get("memorize"), "memorize", "_temp"); - final String memorizeStackedCards = FieldUtils.getString(effectObject.get("memorizeStackedCards"), "memorizeStackedCards"); - - MultiEffectAppender result = new MultiEffectAppender(); - - result.addEffectAppender( - CardResolver.resolveCards(select, valueSource, memorize, player, "Choose cards to shuffle into your deck", environment)); - result.addEffectAppender( - new DelayedAppender() { - @Override - protected Effect createEffect(boolean cost, CostToEffectAction action, ActionContext actionContext) { - final Collection cardsInPlay = actionContext.getCardsFromMemory(memorize); - - if (memorizeStackedCards != null) { - GameState gameState = actionContext.getGame().getGameState(); - Set stackedCards = new HashSet<>(); - cardsInPlay.forEach(card -> stackedCards.addAll(gameState.getStackedCards(card))); - actionContext.setCardMemory(memorizeStackedCards, stackedCards); - } - - return new ShuffleCardsFromPlayAndStackedOnItIntoDeckEffect(actionContext.getSource(), playerSource.getPlayer(actionContext), cardsInPlay); - } - }); - - return result; - } - -} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ShuffleCardsFromPlayIntoDrawDeck.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ShuffleCardsFromPlayIntoDrawDeck.java index 0005d6f92..28a8e39a7 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ShuffleCardsFromPlayIntoDrawDeck.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ShuffleCardsFromPlayIntoDrawDeck.java @@ -8,23 +8,29 @@ import com.gempukku.lotro.cards.build.field.effect.appender.resolver.CardResolve import com.gempukku.lotro.cards.build.field.effect.appender.resolver.PlayerResolver; import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver; import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.logic.actions.CostToEffectAction; +import com.gempukku.lotro.logic.effects.ShuffleCardsFromPlayAndStackedOnItIntoDeckEffect; import com.gempukku.lotro.logic.effects.ShuffleCardsFromPlayIntoDeckEffect; import com.gempukku.lotro.logic.timing.Effect; import org.json.simple.JSONObject; import java.util.Collection; +import java.util.HashSet; +import java.util.Set; public class ShuffleCardsFromPlayIntoDrawDeck implements EffectAppenderProducer { @Override public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { - FieldUtils.validateAllowedFields(effectObject, "player", "select", "count", "memorize"); + FieldUtils.validateAllowedFields(effectObject, "player", "select", "count", "includeStacked", "memorize", "memorizeStacked"); String player = FieldUtils.getString(effectObject.get("player"), "player", "you"); final PlayerSource playerSource = PlayerResolver.resolvePlayer(player, environment); final String select = FieldUtils.getString(effectObject.get("select"), "select", "choose(any)"); final ValueSource valueSource = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment); + final boolean includeStacked = FieldUtils.getBoolean(effectObject.get("includeStacked"), "includeStacked", false); final String memorize = FieldUtils.getString(effectObject.get("memorize"), "memorize", "_temp"); + final String memorizeStackedCards = FieldUtils.getString(effectObject.get("memorizeStacked"), "memorizeStacked"); MultiEffectAppender result = new MultiEffectAppender(); @@ -36,7 +42,19 @@ public class ShuffleCardsFromPlayIntoDrawDeck implements EffectAppenderProducer protected Effect createEffect(boolean cost, CostToEffectAction action, ActionContext actionContext) { final Collection cardsInPlay = actionContext.getCardsFromMemory(memorize); - return new ShuffleCardsFromPlayIntoDeckEffect(actionContext.getSource(), playerSource.getPlayer(actionContext), cardsInPlay); + if(includeStacked) { + if (memorizeStackedCards != null) { + GameState gameState = actionContext.getGame().getGameState(); + Set stackedCards = new HashSet<>(); + cardsInPlay.forEach(card -> stackedCards.addAll(gameState.getStackedCards(card))); + actionContext.setCardMemory(memorizeStackedCards, stackedCards); + } + + return new ShuffleCardsFromPlayAndStackedOnItIntoDeckEffect(actionContext.getSource(), playerSource.getPlayer(actionContext), cardsInPlay); + } + else { + return new ShuffleCardsFromPlayIntoDeckEffect(actionContext.getSource(), playerSource.getPlayer(actionContext), cardsInPlay); + } } });