From 6ee2e69f2ca801af09b07b4b5049ebb385a030b7 Mon Sep 17 00:00:00 2001 From: magenoxx Date: Tue, 18 Apr 2017 22:03:33 +0300 Subject: [PATCH] Fixed #3144: added searching for exile zone with change zone counter (that's true for tokens from graveyard) --- ...LeaveReturnExiledToBattlefieldAbility.java | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/Mage/src/main/java/mage/abilities/common/delayed/OnLeaveReturnExiledToBattlefieldAbility.java b/Mage/src/main/java/mage/abilities/common/delayed/OnLeaveReturnExiledToBattlefieldAbility.java index 996b05d9c67..af95c8eaeed 100644 --- a/Mage/src/main/java/mage/abilities/common/delayed/OnLeaveReturnExiledToBattlefieldAbility.java +++ b/Mage/src/main/java/mage/abilities/common/delayed/OnLeaveReturnExiledToBattlefieldAbility.java @@ -106,15 +106,29 @@ class ReturnExiledPermanentsEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); MageObject sourceObject = source.getSourceObject(game); if (sourceObject != null && controller != null) { - UUID exileZone = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); - if (exileZone != null) { - ExileZone exile = game.getExile().getExileZone(exileZone); - if (exile != null) { - controller.moveCards(new LinkedHashSet<>(exile.getCards(game)), Zone.BATTLEFIELD, source, game, false, false, true, null); - } - return true; + ExileZone exile = getExileIfPossible(game, source); + if (exile != null) { + return controller.moveCards(new LinkedHashSet<>(exile.getCards(game)), Zone.BATTLEFIELD, source, game, false, false, true, null); } } return false; } + + private ExileZone getExileIfPossible(final Game game, final Ability source) { + UUID exileZone = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); + + if (exileZone != null) { + ExileZone exile = game.getExile().getExileZone(exileZone); + if (exile == null) { + // try without ZoneChangeCounter - that is useful for tokens + exileZone = CardUtil.getCardExileZoneId(game, source); + if (exileZone != null) { + return game.getExile().getExileZone(exileZone); + } + } + return exile; + } + + return null; + } }