diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-isengard.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-isengard.json index e6a7226bd..7249d0092 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-isengard.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-isengard.json @@ -86,7 +86,7 @@ "memorize": "playedUrukHai" }, "effect": { - "type": "putCardsFromDiscardOnBottomOfDrawDeck", + "type": "putCardsFromDiscardOnBottomOfDeck", "filter": "all(nameFromMemory(playedUrukHai))" } } diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-moria.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-moria.json index a784b9538..0fb7b23fa 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-moria.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-moria.json @@ -413,7 +413,7 @@ "filter": "self" }, "effect": { - "type": "putCardsFromDiscardOnBottomOfDrawDeck", + "type": "putCardsFromDiscardOnBottomOfDeck", "filter": "choose(culture(moria),orc)" } } diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set2/set2-gandalf.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set2/set2-gandalf.json index 14acb7ec9..2e3b93ca3 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set2/set2-gandalf.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set2/set2-gandalf.json @@ -103,7 +103,7 @@ "filter": "memory(chosenCard)" }, { - "type": "putCardsFromDiscardOnBottomOfDrawDeck", + "type": "putCardsFromDiscardOnBottomOfDeck", "filter": "memory(chosenCard)" } ] diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set30/set30-fp.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set30/set30-fp.json index 74dc4dd3e..5778cf7f4 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set30/set30-fp.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set30/set30-fp.json @@ -555,7 +555,7 @@ "filter": "choose(culture(dwarven),follower)" }, "effect": { - "type": "putCardsFromDiscardOnBottomOfDrawDeck", + "type": "putCardsFromDiscardOnBottomOfDeck", "filter": "choose(culture(dwarven),artifact)" } } diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set31/set31-shadow.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set31/set31-shadow.json index 1cf3027ef..0b5d1898f 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set31/set31-shadow.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set31/set31-shadow.json @@ -538,7 +538,7 @@ "filter": "self" }, "effect": { - "type": "putCardsFromDiscardOnBottomOfDrawDeck", + "type": "putCardsFromDiscardOnBottomOfDeck", "filter": "choose(orc)", "count": { "type": "condition", diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-fp.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-fp.json index cc30b432a..5cfc90aca 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-fp.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-fp.json @@ -137,7 +137,7 @@ "filter": "choose(name(Balin))" }, { - "type": "putCardsFromDiscardOnBottomOfDrawDeck", + "type": "putCardsFromDiscardOnBottomOfDeck", "count": 2 } ] diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-shadow.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-shadow.json index 9d7a7bef3..b62312e15 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-shadow.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-shadow.json @@ -212,7 +212,7 @@ "filter": "self" }, "effect": { - "type": "putCardsFromDiscardOnBottomOfDrawDeck", + "type": "putCardsFromDiscardOnBottomOfDeck", "filter": "choose(orc)" } }, 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 8e2a8b435..69dca6f5b 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 @@ -94,9 +94,11 @@ public class EffectAppenderFactory { effectAppenderProducers.put("preventheal", new PreventCardEffectAppender()); effectAppenderProducers.put("preventwound", new PreventWound()); effectAppenderProducers.put("putcardsfromdeckintohand", new PutCardsFromDeckIntoHand()); + effectAppenderProducers.put("putcardsfromdeckontopofdeck", new PutCardsFromDeckOnTopOfDeck()); + effectAppenderProducers.put("putcardsfromdeckonbottomofdeck", new PutCardsFromDeckOnBottomOfDeck()); effectAppenderProducers.put("putcardsfromdiscardintohand", new PutCardsFromDiscardIntoHand()); - effectAppenderProducers.put("putcardsfromdiscardonbottomofdrawdeck", new PutCardsFromDiscardOnBottomOfDrawDeck()); - effectAppenderProducers.put("putcardsfromdiscardontopofdrawdeck", new PutCardsFromDiscardOnTopOfDrawDeck()); + effectAppenderProducers.put("putcardsfromdiscardonbottomofdeck", new PutCardsFromDiscardOnBottomOfDeck()); + effectAppenderProducers.put("putcardsfromdiscardontopofdeck", new PutCardsFromDiscardOnTopOfDeck()); effectAppenderProducers.put("putcardsfromhandonbottomofdeck", new PutCardsFromHandOnBottomOfDeck()); effectAppenderProducers.put("putcardsfromhandontopofdeck", new PutCardsFromHandOnTopOfDeck()); effectAppenderProducers.put("putcardsfromplayonbottomofdeck", new PutCardsFromPlayOnBottomOfDeck()); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PlayCardFromDrawDeck.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PlayCardFromDrawDeck.java index a0ec2f732..d23e468c3 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PlayCardFromDrawDeck.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PlayCardFromDrawDeck.java @@ -61,7 +61,7 @@ public class PlayCardFromDrawDeck implements EffectAppenderProducer { final CostToEffectAction playCardAction = PlayUtils.getPlayCardAction(actionContext.getGame(), cardsToPlay.iterator().next(), costModifier, onFilterable, false); return new StackActionEffect(playCardAction); } else { - return null; + return null; //Fix Wizard is Never Late by changing this to a DoNothingEffect? } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PutCardsFromDeckOnBottomOfDeck.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PutCardsFromDeckOnBottomOfDeck.java new file mode 100644 index 000000000..6a14885b4 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PutCardsFromDeckOnBottomOfDeck.java @@ -0,0 +1,54 @@ +package com.gempukku.lotro.cards.build.field.effect.appender; + +import com.gempukku.lotro.cards.build.ActionContext; +import com.gempukku.lotro.cards.build.CardGenerationEnvironment; +import com.gempukku.lotro.cards.build.InvalidCardDefinitionException; +import com.gempukku.lotro.cards.build.ValueSource; +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.ValueResolver; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.logic.actions.CostToEffectAction; +import com.gempukku.lotro.logic.effects.PutCardFromDeckIntoHandEffect; +import com.gempukku.lotro.logic.effects.PutCardFromDeckOnBottomOfDeckEffect; +import com.gempukku.lotro.logic.effects.PutCardFromDeckOnTopOfDeckEffect; +import com.gempukku.lotro.logic.effects.ShuffleDeckEffect; +import com.gempukku.lotro.logic.timing.Effect; +import org.json.simple.JSONObject; + +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; + +public class PutCardsFromDeckOnBottomOfDeck implements EffectAppenderProducer { + @Override + public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + FieldUtils.validateAllowedFields(effectObject, "count", "filter"); + + final ValueSource valueSource = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment); + final String filter = FieldUtils.getString(effectObject.get("filter"), "filter", "choose(any)"); + + MultiEffectAppender result = new MultiEffectAppender(); + + result.addEffectAppender( + CardResolver.resolveCardsInDeck(filter, null, valueSource, "_temp", "you", "Choose cards from deck", environment)); + result.addEffectAppender( + new DelayedAppender() { + @Override + protected List createEffects(boolean cost, CostToEffectAction action, ActionContext actionContext) { + final Collection cards = actionContext.getCardsFromMemory("_temp"); + List result = new LinkedList<>(); + for (PhysicalCard card : cards) { + result.add(new PutCardFromDeckOnBottomOfDeckEffect(action.getActionSource(), card)); + } + + return result; + } + }); + + return result; + + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PutCardsFromDeckOnTopOfDeck.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PutCardsFromDeckOnTopOfDeck.java new file mode 100644 index 000000000..e2fdfa20b --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PutCardsFromDeckOnTopOfDeck.java @@ -0,0 +1,55 @@ +package com.gempukku.lotro.cards.build.field.effect.appender; + +import com.gempukku.lotro.cards.build.ActionContext; +import com.gempukku.lotro.cards.build.CardGenerationEnvironment; +import com.gempukku.lotro.cards.build.InvalidCardDefinitionException; +import com.gempukku.lotro.cards.build.ValueSource; +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.ValueResolver; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.logic.actions.CostToEffectAction; +import com.gempukku.lotro.logic.effects.PutCardFromDeckIntoHandEffect; +import com.gempukku.lotro.logic.effects.PutCardFromDeckOnTopOfDeckEffect; +import com.gempukku.lotro.logic.effects.PutCardsFromDeckOnTopOfDrawDeckEffect; +import com.gempukku.lotro.logic.effects.ShuffleDeckEffect; +import com.gempukku.lotro.logic.timing.Effect; +import org.json.simple.JSONObject; + +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + +public class PutCardsFromDeckOnTopOfDeck implements EffectAppenderProducer { + @Override + public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + FieldUtils.validateAllowedFields(effectObject, "count", "filter"); + + final ValueSource valueSource = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment); + final String filter = FieldUtils.getString(effectObject.get("filter"), "filter", "choose(any)"); + + MultiEffectAppender result = new MultiEffectAppender(); + + result.addEffectAppender( + CardResolver.resolveCardsInDeck(filter, null, valueSource, "_temp", "you", "Choose cards from deck", environment)); + result.addEffectAppender( + new DelayedAppender() { + @Override + protected List createEffects(boolean cost, CostToEffectAction action, ActionContext actionContext) { + final Collection cards = actionContext.getCardsFromMemory("_temp"); + List result = new LinkedList<>(); + for (PhysicalCard card : cards) { + result.add(new PutCardFromDeckOnTopOfDeckEffect(action.getActionSource(), card)); + } + + return result; + } + }); + + return result; + + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PutCardsFromDiscardOnBottomOfDrawDeck.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PutCardsFromDiscardOnBottomOfDeck.java similarity index 96% rename from gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PutCardsFromDiscardOnBottomOfDrawDeck.java rename to gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PutCardsFromDiscardOnBottomOfDeck.java index c4043d5ef..c0cc020a0 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PutCardsFromDiscardOnBottomOfDrawDeck.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PutCardsFromDiscardOnBottomOfDeck.java @@ -19,7 +19,7 @@ import java.util.Collection; import java.util.LinkedList; import java.util.List; -public class PutCardsFromDiscardOnBottomOfDrawDeck implements EffectAppenderProducer { +public class PutCardsFromDiscardOnBottomOfDeck implements EffectAppenderProducer { @Override public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { FieldUtils.validateAllowedFields(effectObject, "count", "filter"); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PutCardsFromDiscardOnTopOfDrawDeck.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PutCardsFromDiscardOnTopOfDeck.java similarity index 96% rename from gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PutCardsFromDiscardOnTopOfDrawDeck.java rename to gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PutCardsFromDiscardOnTopOfDeck.java index c9a810b2b..f4cff89ed 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PutCardsFromDiscardOnTopOfDrawDeck.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PutCardsFromDiscardOnTopOfDeck.java @@ -19,7 +19,7 @@ import java.util.Collection; import java.util.LinkedList; import java.util.List; -public class PutCardsFromDiscardOnTopOfDrawDeck implements EffectAppenderProducer { +public class PutCardsFromDiscardOnTopOfDeck implements EffectAppenderProducer { @Override public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { FieldUtils.validateAllowedFields(effectObject, "count", "filter");