From f06ee144f7fd9b2f7c8af00d53cc71f3bcf70828 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 25 Feb 2017 12:05:43 +0100 Subject: [PATCH] * Fixed AddCardTypeSourceEffect with limited duration and object reference was applied on wrong objects (fixes failing crew test). --- .../continuous/AddCardTypeSourceEffect.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/AddCardTypeSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/AddCardTypeSourceEffect.java index a3c0db0e115..a76b352761f 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/AddCardTypeSourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/AddCardTypeSourceEffect.java @@ -27,6 +27,7 @@ */ package mage.abilities.effects.common.continuous; +import mage.MageObjectReference; import mage.abilities.Ability; import mage.abilities.Mode; import mage.abilities.effects.ContinuousEffectImpl; @@ -59,16 +60,27 @@ public class AddCardTypeSourceEffect extends ContinuousEffectImpl { this.addedCardType = effect.addedCardType; } + @Override + public void init(Ability source, Game game) { + super.init(source, game); + if (Duration.Custom.equals(this.duration) || this.duration.toString().startsWith("End")) { + affectedObjectList.add(new MageObjectReference(source.getSourceId(), game.getState().getZoneChangeCounter(source.getSourceId()), game)); + if (affectedObjectList.isEmpty()) { + this.discard(); + } + } + } + @Override public boolean apply(Game game, Ability source) { Permanent permanent = game.getPermanent(source.getSourceId()); - if (permanent != null) { + if (permanent != null + && (affectedObjectList.isEmpty() || affectedObjectList.contains(new MageObjectReference(permanent, game)))) { if (!permanent.getCardType().contains(addedCardType)) { permanent.getCardType().add(addedCardType); } return true; - } - else if (this.getDuration().equals(Duration.Custom)) { + } else if (this.getDuration().equals(Duration.Custom)) { this.discard(); } return false;