From 77729e892c8ae9f7b41da98eb4b6f75e62db4431 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Thu, 20 Oct 2016 15:04:27 +0200 Subject: [PATCH] * Prized Amalgam - Fixed that it also returned if it entered and left the battlefield after the trigger was created (fixes #2485). --- Mage.Sets/src/mage/cards/p/PrizedAmalgam.java | 29 ++++++++++++++----- ...romGraveyardToBattlefieldTargetEffect.java | 6 +++- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/Mage.Sets/src/mage/cards/p/PrizedAmalgam.java b/Mage.Sets/src/mage/cards/p/PrizedAmalgam.java index 620bfd6666e..2907b79a4e3 100644 --- a/Mage.Sets/src/mage/cards/p/PrizedAmalgam.java +++ b/Mage.Sets/src/mage/cards/p/PrizedAmalgam.java @@ -33,7 +33,7 @@ import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.effects.Effect; import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; -import mage.abilities.effects.common.ReturnSourceFromGraveyardToBattlefieldEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -45,6 +45,7 @@ import mage.filter.predicate.other.OwnerPredicate; import mage.game.Game; import mage.game.events.EntersTheBattlefieldEvent; import mage.game.events.GameEvent; +import mage.target.targetpointer.FixedTarget; import mage.watchers.common.CastFromGraveyardWatcher; /** @@ -60,14 +61,14 @@ public class PrizedAmalgam extends CardImpl { } public PrizedAmalgam(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{B}"); this.subtype.add("Zombie"); this.power = new MageInt(3); this.toughness = new MageInt(3); // Whenever a creature enters the battlefield, if it entered from your graveyard or you cast it from your graveyard, return Prized Amalgam from your graveyard to the battlefield tapped at the beginning of the next end step. this.addAbility(new PrizedAmalgamTriggerdAbility(new CreateDelayedTriggeredAbilityEffect( - new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnSourceFromGraveyardToBattlefieldEffect(true))), filter), + new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect(true))), filter), new CastFromGraveyardWatcher()); } @@ -98,20 +99,32 @@ class PrizedAmalgamTriggerdAbility extends EntersBattlefieldAllTriggeredAbility @Override public boolean checkTrigger(GameEvent event, Game game) { + /** + * 4/8/2016 Prized Amalgam’s ability triggers only if it’s in your + * graveyard immediately after a creature enters the battlefield from + * your graveyard or you cast a creature from your graveyard. A Prized + * Amalgam that’s already on the battlefield won’t be returned at the + * beginning of the next end step if it’s put into your graveyard later. + */ + boolean result = false; if (super.checkTrigger(event, game)) { EntersTheBattlefieldEvent entersEvent = (EntersTheBattlefieldEvent) event; if (entersEvent.getFromZone().equals(Zone.GRAVEYARD)) { - return true; - } - if (entersEvent.getFromZone().equals(Zone.STACK) && entersEvent.getTarget().getControllerId().equals(getControllerId())) { + result = true; + } else if (entersEvent.getFromZone().equals(Zone.STACK) && entersEvent.getTarget().getControllerId().equals(getControllerId())) { CastFromGraveyardWatcher watcher = (CastFromGraveyardWatcher) game.getState().getWatchers().get(CastFromGraveyardWatcher.class.getName()); if (watcher != null) { int zcc = game.getState().getZoneChangeCounter(event.getSourceId()); - return watcher.spellWasCastFromGraveyard(event.getSourceId(), zcc - 1); + result = watcher.spellWasCastFromGraveyard(event.getSourceId(), zcc - 1); } } } - return false; + if (result) { + for (Effect effect : getEffects()) { + effect.setTargetPointer(new FixedTarget(getSourceId(), game.getState().getZoneChangeCounter(getSourceId()))); + } + } + return result; } @Override diff --git a/Mage/src/main/java/mage/abilities/effects/common/ReturnFromGraveyardToBattlefieldTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ReturnFromGraveyardToBattlefieldTargetEffect.java index dd2e2797041..cc449d0cecb 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ReturnFromGraveyardToBattlefieldTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ReturnFromGraveyardToBattlefieldTargetEffect.java @@ -27,6 +27,8 @@ */ package mage.abilities.effects.common; +import java.util.HashSet; +import java.util.Set; import java.util.UUID; import mage.abilities.Ability; import mage.abilities.Mode; @@ -70,12 +72,14 @@ public class ReturnFromGraveyardToBattlefieldTargetEffect extends OneShotEffect public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { + Set cardsToMove = new HashSet<>(); for (UUID targetId : getTargetPointer().getTargets(game, source)) { Card card = game.getCard(targetId); if (card != null) { - controller.moveCards(card, Zone.BATTLEFIELD, source, game, tapped, false, false, null); + cardsToMove.add(card); } } + controller.moveCards(cardsToMove, Zone.BATTLEFIELD, source, game, tapped, false, false, null); return true; } return false;