* Prized Amalgam - Fixed that it was not returned to battlefield under some conditions (fixes #1704).

This commit is contained in:
LevelX2 2016-04-06 15:09:39 +02:00
parent 6e29b4f864
commit 12ee3f7e54
3 changed files with 150 additions and 31 deletions

View file

@ -41,20 +41,22 @@ import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.ControllerPredicate;
import mage.filter.predicate.other.OwnerPredicate;
import mage.game.Game;
import mage.game.events.EntersTheBattlefieldEvent;
import mage.game.events.GameEvent;
import mage.watchers.common.CastFromGraveyardWatcher;
/**
*
* @author LevelX2
*/
public class PrizedAmalgam extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature");
static {
filter.add(new ControllerPredicate(TargetController.YOU));
filter.add(new OwnerPredicate(TargetController.YOU));
}
public PrizedAmalgam(UUID ownerId) {
@ -66,7 +68,8 @@ public class PrizedAmalgam extends CardImpl {
// 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 ReturnSourceFromGraveyardToBattlefieldEffect(true))), filter),
new CastFromGraveyardWatcher());
}
public PrizedAmalgam(final PrizedAmalgam card) {
@ -96,7 +99,20 @@ class PrizedAmalgamTriggerdAbility extends EntersBattlefieldAllTriggeredAbility
@Override
public boolean checkTrigger(GameEvent event, Game game) {
return super.checkTrigger(event, game) && ((EntersTheBattlefieldEvent) event).getFromZone().equals(Zone.GRAVEYARD);
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())) {
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);
}
}
}
return false;
}
@Override