From c241e93b87ba16ba8703bd9643826c9bf5e792d5 Mon Sep 17 00:00:00 2001 From: Sloth Date: Thu, 19 Apr 2012 15:07:23 +0000 Subject: [PATCH] - Fixed ChangeZone triggers not working on cards moving to hand or library themselves. --- src/main/java/forge/GameAction.java | 6 ++++-- src/main/java/forge/card/trigger/TriggerHandler.java | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/forge/GameAction.java b/src/main/java/forge/GameAction.java index 43b0880d02e..b338aeb5b71 100644 --- a/src/main/java/forge/GameAction.java +++ b/src/main/java/forge/GameAction.java @@ -605,7 +605,9 @@ public class GameAction { AllZone.getTriggerHandler().clearSuppression(TriggerType.Transformed); } + Card lastKnownInfo = c; if ((p != null) && p.is(ZoneType.Battlefield)) { + lastKnownInfo = CardUtil.getLKICopy(c); c = AllZone.getCardFactory().copyCard(c); } @@ -618,13 +620,13 @@ public class GameAction { library.add(c, libPosition); final HashMap runParams = new HashMap(); - runParams.put("Card", c); + runParams.put("Card", lastKnownInfo); if (p != null) { runParams.put("Origin", p.getZoneType().name()); } else { runParams.put("Origin", null); } - runParams.put("Destination", ZoneType.Library); + runParams.put("Destination", ZoneType.Library.name()); AllZone.getTriggerHandler().runTrigger(TriggerType.ChangesZone, runParams); Player owner = p.getPlayer(); diff --git a/src/main/java/forge/card/trigger/TriggerHandler.java b/src/main/java/forge/card/trigger/TriggerHandler.java index c1abf31e613..6ca56f847dd 100644 --- a/src/main/java/forge/card/trigger/TriggerHandler.java +++ b/src/main/java/forge/card/trigger/TriggerHandler.java @@ -307,6 +307,12 @@ public class TriggerHandler { // AP allCards = playerAP.getCardsIn(ZoneType.StaticAbilitiesSourceZones); allCards.addAll(AllZoneUtil.getCardsIn(ZoneType.Stack).getController(playerAP)); + if (runParams.containsKey("Card")) { + Card card = (Card) runParams.get("Card"); + if (!allCards.contains(card)) { + allCards.add(card); + } + } for (final Card c : allCards) { for (final Trigger t : c.getTriggers()) { if (!t.isStatic()) {