From 284db016a058b60474508bcf9381202d69e56b49 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Tue, 20 Apr 2021 18:28:01 +0200 Subject: [PATCH 1/2] Rework ceaseToExist --- forge-game/src/main/java/forge/game/Game.java | 1 + forge-game/src/main/java/forge/game/GameAction.java | 8 ++------ 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/forge-game/src/main/java/forge/game/Game.java b/forge-game/src/main/java/forge/game/Game.java index 08da265ce41..cfd9b21e4f7 100644 --- a/forge-game/src/main/java/forge/game/Game.java +++ b/forge-game/src/main/java/forge/game/Game.java @@ -789,6 +789,7 @@ public class Game { cc.removeImprintedCard(c); cc.removeEncodedCard(c); cc.removeRemembered(c); + cc.removeAttachedTo(c); } getAction().ceaseToExist(c, false); // CR 603.2f owner of trigger source lost game diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index b4dcf95746b..e7d55ec0962 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -920,17 +920,14 @@ public class GameAction { } public void ceaseToExist(Card c, boolean skipTrig) { - final String origin = c.getZone().getZoneType().name(); - c.getZone().remove(c); - c.setZone(null); // CR 603.6c other players LTB triggers should work if (!skipTrig) { game.addChangeZoneLKIInfo(c); - Card lki = null; CardCollectionView lastBattlefield = game.getLastStateBattlefield(); int idx = lastBattlefield.indexOf(c); + Card lki = null; if (idx != -1) { lki = lastBattlefield.get(idx); } @@ -942,10 +939,9 @@ public class GameAction { game.getCombat().saveLKI(lki); } game.getTriggerHandler().registerActiveLTBTrigger(lki); - final Map runParams = AbilityKey.mapFromCard(c); runParams.put(AbilityKey.CardLKI, lki); - runParams.put(AbilityKey.Origin, origin); + runParams.put(AbilityKey.Origin, c.getZone().getZoneType().name()); game.getTriggerHandler().runTrigger(TriggerType.ChangesZone, runParams, false); game.getTriggerHandler().runWaitingTriggers(); } From d918cade677df84b2a1fed0e54ed0d5ed710a7f2 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Wed, 21 Apr 2021 21:07:47 +0200 Subject: [PATCH 2/2] Hold triggers until all cards are processed --- forge-game/src/main/java/forge/game/GameAction.java | 1 - forge-game/src/main/java/forge/game/trigger/TriggerHandler.java | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index e7d55ec0962..89ec43318e4 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -943,7 +943,6 @@ public class GameAction { runParams.put(AbilityKey.CardLKI, lki); runParams.put(AbilityKey.Origin, c.getZone().getZoneType().name()); game.getTriggerHandler().runTrigger(TriggerType.ChangesZone, runParams, false); - game.getTriggerHandler().runWaitingTriggers(); } } diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java index 93c36cd3a7c..3628d261a12 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java @@ -640,5 +640,7 @@ public class TriggerHandler { delayedTriggers.remove(t); } } + // run all ChangesZone + runWaitingTriggers(); } }