diff --git a/forge-game/src/main/java/forge/game/Game.java b/forge-game/src/main/java/forge/game/Game.java index 26c277bff94..1a3659d3d2d 100644 --- a/forge-game/src/main/java/forge/game/Game.java +++ b/forge-game/src/main/java/forge/game/Game.java @@ -822,6 +822,8 @@ public class Game { // Remove leftover items from this.getStack().removeInstancesControlledBy(p); + getTriggerHandler().onPlayerLost(p); + ingamePlayers.remove(p); lostPlayers.add(p); 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 6e933ada1e9..7ddf5b28cff 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java @@ -422,11 +422,6 @@ public class TriggerHandler { } } - if (delayedTriggers.contains(regtrig) && game.getCardState(regtrig.getHostCard(), null) == null) { - delayedTriggers.remove(regtrig); - return false; // CR 603.2f owner lost game - } - if (!regtrig.requirementsCheck(game)) { return false; // Conditions aren't right. } @@ -634,4 +629,15 @@ public class TriggerHandler { } return trigger; } + + public void onPlayerLost(Player p) { + List lost = new ArrayList<>(); + for (Trigger t : delayedTriggers) { + // CR 603.2f owner of trigger source lost game || 800.4d trigger controller lost game + if (game.getCardState(t.getHostCard(), null) == null || t.getHostCard().getOwner().equals(p)) { + lost.add(t); + } + } + delayedTriggers.removeAll(lost); + } }