From b12f97daa2587cf9e226e829b54ae5efee8c90ed Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Fri, 15 May 2020 14:15:34 +0200 Subject: [PATCH] TriggerChangesZone: Trigger on leaving the battlefield look back in time using LKI --- .../src/main/java/forge/game/GameAction.java | 3 ++- .../game/trigger/TriggerChangesZone.java | 23 ++++++++++--------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 07e9e5ae925..be845713549 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -390,7 +390,8 @@ public class GameAction { // play the change zone sound game.fireEvent(new GameEventCardChangeZone(c, zoneFrom, zoneTo)); - final Map runParams = AbilityKey.mapFromCard(lastKnownInfo); + final Map runParams = AbilityKey.mapFromCard(copied); + runParams.put(AbilityKey.CardLKI, lastKnownInfo); runParams.put(AbilityKey.Cause, cause); runParams.put(AbilityKey.Origin, zoneFrom != null ? zoneFrom.getZoneType().name() : null); runParams.put(AbilityKey.Destination, zoneTo.getZoneType().name()); diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java b/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java index 7b1e8670005..23b60327858 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java @@ -17,7 +17,6 @@ */ package forge.game.trigger; -import forge.game.Game; import forge.game.ability.AbilityKey; import forge.game.ability.AbilityUtils; import forge.game.card.Card; @@ -102,16 +101,13 @@ public class TriggerChangesZone extends Trigger { if (hasParam("ValidCard")) { Card moved = (Card) runParams.get(AbilityKey.Card); - final Game game = getHostCard().getGame(); boolean leavesBattlefield = "Battlefield".equals(getParam("Origin")); - boolean isDiesTrig = leavesBattlefield && "Graveyard".equals(getParam("Destination")); - if (isDiesTrig) { - moved = game.getChangeZoneLKIInfo(moved); + if (leavesBattlefield) { + moved = (Card) runParams.get(AbilityKey.CardLKI); } - if (!moved.isValid(getParam("ValidCard").split(","), getHostCard().getController(), - getHostCard(), null)) { + if (!matchesValid(moved, getParam("ValidCard").split(","), getHostCard())) { return false; } } @@ -124,9 +120,10 @@ public class TriggerChangesZone extends Trigger { if (cause == null) { return false; } - if (!cause.getHostCard().isValid(getParam("ValidCause").split(","), getHostCard().getController(), - getHostCard(), null)) { - return false; + if (!matchesValid(cause, getParam("ValidCause").split(","), getHostCard())) { + if (!matchesValid(cause.getHostCard(), getParam("ValidCause").split(","), getHostCard())) { + return false; + } } } @@ -214,7 +211,11 @@ public class TriggerChangesZone extends Trigger { /** {@inheritDoc} */ @Override public final void setTriggeringObjects(final SpellAbility sa, Map runParams) { - sa.setTriggeringObjectsFrom(runParams, AbilityKey.Card); + if ("Battlefield".equals(getParam("Origin"))) { + sa.setTriggeringObject(AbilityKey.Card, runParams.get(AbilityKey.CardLKI)); + } else { + sa.setTriggeringObjectsFrom(runParams, AbilityKey.Card); + } } @Override