From 811766a77fbcbd26f4f05d4e82f8e432acf6a599 Mon Sep 17 00:00:00 2001 From: TRT <> Date: Wed, 25 Aug 2021 21:06:57 +0200 Subject: [PATCH] Fixes for triggers depending on payment --- .../main/java/forge/game/GameActionUtil.java | 27 ++++++++++++++++++- .../main/java/forge/game/zone/MagicStack.java | 3 +++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/forge-game/src/main/java/forge/game/GameActionUtil.java b/forge-game/src/main/java/forge/game/GameActionUtil.java index 06afee9766e..00065e4492e 100644 --- a/forge-game/src/main/java/forge/game/GameActionUtil.java +++ b/forge-game/src/main/java/forge/game/GameActionUtil.java @@ -24,6 +24,8 @@ import org.apache.commons.lang3.StringUtils; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import com.google.common.collect.Table; +import com.google.common.collect.TreeBasedTable; import forge.card.MagicColor; import forge.card.mana.ManaCost; @@ -41,6 +43,7 @@ import forge.game.card.CounterType; import forge.game.cost.Cost; import forge.game.keyword.Keyword; import forge.game.keyword.KeywordInterface; +import forge.game.keyword.KeywordsChange; import forge.game.player.Player; import forge.game.player.PlayerController; import forge.game.replacement.ReplacementEffect; @@ -682,4 +685,26 @@ public final class GameActionUtil { return completeList; } -} // end class GameActionUtil + public static void checkStaticAfterPaying(Card c) { + Table oldKW = TreeBasedTable.create((TreeBasedTable) c.getChangedCardKeywords()); + // this should be the last time checkStaticAbilities is called before SpellCast triggers to + // - setup Cascade dependent on high enough X (Imoti) + // - remove Replicate if Djinn Illuminatus gets sacrificed as payment + // because this will remove the payment SVars for Replicate we need to restore them + c.getGame().getAction().checkStaticAbilities(false); + + Table updatedKW = c.getChangedCardKeywords(); + for (Table.Cell entry : oldKW.cellSet()) { + for (KeywordInterface ki : entry.getValue().getKeywords()) { + // check if this keyword existed previously + if ((ki.getOriginal().startsWith("Replicate") || ki.getOriginal().startsWith("Conspire")) && updatedKW.get(entry.getRowKey(), entry.getColumnKey()) != null) { + updatedKW.put(entry.getRowKey(), entry.getColumnKey(), oldKW.get(entry.getRowKey(), entry.getColumnKey())); + } + } + } + c.updateKeywords(); + + c.getGame().getTriggerHandler().resetActiveTriggers(); + } + +} diff --git a/forge-game/src/main/java/forge/game/zone/MagicStack.java b/forge-game/src/main/java/forge/game/zone/MagicStack.java index bc0b8d9e449..1f3d0abd392 100644 --- a/forge-game/src/main/java/forge/game/zone/MagicStack.java +++ b/forge-game/src/main/java/forge/game/zone/MagicStack.java @@ -35,6 +35,7 @@ import com.google.common.collect.Sets; import forge.GameCommand; import forge.game.Game; +import forge.game.GameActionUtil; import forge.game.GameLogEntryType; import forge.game.GameObject; import forge.game.ability.AbilityKey; @@ -455,6 +456,8 @@ public class MagicStack /* extends MyObservable */ implements Iterable