Fixing Beyond All Darkness (and other "put cards from hand on the bottom of the deck" cards) revealing the cards to the wrong player

This commit is contained in:
Christian 'ketura' McCarty
2025-04-08 17:06:58 -05:00
parent 204010b7e5
commit 2fd2958fab

View File

@@ -1,13 +1,11 @@
package com.gempukku.lotro.cards.build.field.effect.appender; package com.gempukku.lotro.cards.build.field.effect.appender;
import com.gempukku.lotro.cards.build.ActionContext; import com.gempukku.lotro.cards.build.*;
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.FieldUtils;
import com.gempukku.lotro.cards.build.field.effect.EffectAppender; 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.EffectAppenderProducer;
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.CardResolver; 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.cards.build.field.effect.appender.resolver.ValueResolver;
import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.game.state.GameState;
@@ -25,24 +23,26 @@ public class PutCardsFromHandOnBottomOfDeck implements EffectAppenderProducer {
public EffectAppender createEffectAppender(boolean cost, JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { public EffectAppender createEffectAppender(boolean cost, JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(effectObject, "player", "select", "count", "reveal"); FieldUtils.validateAllowedFields(effectObject, "player", "select", "count", "reveal");
final String player = FieldUtils.getString(effectObject.get("player"), "player", "you"); final String playerName = FieldUtils.getString(effectObject.get("player"), "player", "you");
final String select = FieldUtils.getString(effectObject.get("select"), "select", "choose(any)"); final String select = FieldUtils.getString(effectObject.get("select"), "select", "choose(any)");
final ValueSource count = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment); final ValueSource count = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment);
final boolean reveal = FieldUtils.getBoolean(effectObject.get("reveal"), "reveal", false); final boolean reveal = FieldUtils.getBoolean(effectObject.get("reveal"), "reveal", false);
final PlayerSource player = PlayerResolver.resolvePlayer(playerName);
MultiEffectAppender result = new MultiEffectAppender(); MultiEffectAppender result = new MultiEffectAppender();
result.addEffectAppender( result.addEffectAppender(
CardResolver.resolveCardsInHand(select, count, "_temp", player, player, "Choose cards from hand", environment)); CardResolver.resolveCardsInHand(select, count, "_temp", playerName, playerName, "Choose cards from hand", environment));
result.addEffectAppender( result.addEffectAppender(
new DelayedAppender() { new DelayedAppender() {
@Override @Override
protected List<Effect> createEffects(boolean cost, CostToEffectAction action, ActionContext actionContext) { protected List<Effect> createEffects(boolean cost, CostToEffectAction action, ActionContext actionContext) {
final List<? extends PhysicalCard> cards = new ArrayList<>(actionContext.getCardsFromMemory("_temp")); final List<? extends PhysicalCard> cards = new ArrayList<>(actionContext.getCardsFromMemory("_temp"));
List<Effect> result = new LinkedList<>(); List<Effect> result = new LinkedList<>();
for (int i = 0; i < cards.size(); i++) { for (int i = 0; i < cards.size(); i++) {
result.add( result.add(
new ChooseArbitraryCardsEffect(actionContext.getPerformingPlayer(), new ChooseArbitraryCardsEffect(player.getPlayer(actionContext),
"Choose card to put beneath draw deck", cards, 1, 1) { "Choose card to put beneath draw deck", cards, 1, 1) {
@Override @Override
protected void cardsSelected(LotroGame game, Collection<PhysicalCard> selectedCards) { protected void cardsSelected(LotroGame game, Collection<PhysicalCard> selectedCards) {