From 390ca4b0d9058c435fd3c152ee4f5288938190bf Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Sat, 5 Mar 2022 21:42:27 +0000 Subject: [PATCH] Resolve "Problem with some LTB trigger" --- forge-game/src/main/java/forge/game/cost/CostDraw.java | 6 ++++-- .../src/main/java/forge/game/cost/CostSacrifice.java | 8 +++++--- .../src/main/java/forge/game/phase/PhaseHandler.java | 1 + 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/forge-game/src/main/java/forge/game/cost/CostDraw.java b/forge-game/src/main/java/forge/game/cost/CostDraw.java index 8a5c77f0287..dc058cfcf25 100644 --- a/forge-game/src/main/java/forge/game/cost/CostDraw.java +++ b/forge-game/src/main/java/forge/game/cost/CostDraw.java @@ -19,6 +19,7 @@ package forge.game.cost; import java.util.Map; +import forge.game.Game; import forge.game.ability.AbilityKey; import forge.game.card.Card; import forge.game.player.Player; @@ -97,9 +98,10 @@ public class CostDraw extends CostPart { */ @Override public final boolean payAsDecided(final Player ai, final PaymentDecision decision, SpellAbility ability, final boolean effect) { + final Game game = ai.getGame(); Map moveParams = AbilityKey.newMap(); - moveParams.put(AbilityKey.LastStateBattlefield, ability.getLastStateBattlefield()); - moveParams.put(AbilityKey.LastStateGraveyard, ability.getLastStateGraveyard()); + moveParams.put(AbilityKey.LastStateBattlefield, game.getLastStateBattlefield()); + moveParams.put(AbilityKey.LastStateGraveyard, game.getLastStateGraveyard()); for (final Player p : decision.players) { p.drawCards(decision.c, ability, moveParams); } diff --git a/forge-game/src/main/java/forge/game/cost/CostSacrifice.java b/forge-game/src/main/java/forge/game/cost/CostSacrifice.java index ec48bb0d976..329fb45188f 100644 --- a/forge-game/src/main/java/forge/game/cost/CostSacrifice.java +++ b/forge-game/src/main/java/forge/game/cost/CostSacrifice.java @@ -23,6 +23,7 @@ import java.util.Map; import com.google.common.collect.Iterables; +import forge.game.Game; import forge.game.ability.AbilityKey; import forge.game.card.Card; import forge.game.card.CardCollectionView; @@ -135,11 +136,12 @@ public class CostSacrifice extends CostPartWithList { @Override protected Card doPayment(SpellAbility ability, Card targetCard, final boolean effect) { + final Game game = targetCard.getGame(); // no table there, it is already handled by CostPartWithList Map moveParams = AbilityKey.newMap(); - moveParams.put(AbilityKey.LastStateBattlefield, ability.getLastStateBattlefield()); - moveParams.put(AbilityKey.LastStateGraveyard, ability.getLastStateGraveyard()); - return targetCard.getGame().getAction().sacrifice(targetCard, ability, effect, null, moveParams); + moveParams.put(AbilityKey.LastStateBattlefield, game.getLastStateBattlefield()); + moveParams.put(AbilityKey.LastStateGraveyard, game.getLastStateGraveyard()); + return game.getAction().sacrifice(targetCard, ability, effect, null, moveParams); } /* (non-Javadoc) diff --git a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java index 3f4022e6590..cde7c7d0bcd 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java @@ -1066,6 +1066,7 @@ public class PhaseHandler implements java.io.Serializable { } } + game.copyLastState(); loopCount++; } while (loopCount < 999 || !pPlayerPriority.getController().isAI());