diff --git a/Mage.Sets/src/mage/cards/h/HeartPiercerManticore.java b/Mage.Sets/src/mage/cards/h/HeartPiercerManticore.java index aab2013c72f..ecf355dea2d 100644 --- a/Mage.Sets/src/mage/cards/h/HeartPiercerManticore.java +++ b/Mage.Sets/src/mage/cards/h/HeartPiercerManticore.java @@ -1,27 +1,24 @@ - package mage.cards.h; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.DelayedTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.effects.common.InfoEffect; import mage.abilities.effects.common.SendOptionUsedEventEffect; import mage.abilities.keyword.EmbalmAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Outcome; -import mage.constants.Zone; import mage.filter.StaticFilters; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.Target; @@ -41,13 +38,11 @@ public final class HeartPiercerManticore extends CardImpl { this.power = new MageInt(4); this.toughness = new MageInt(3); - // When Heart-Piercer Manticore enters the battlefield, you may sacrifice another creature. - Ability firstAbility = new EntersBattlefieldTriggeredAbility(new HeartPiercerManticoreSacrificeEffect(), true); - this.addAbility(firstAbility); - // When you do, Heart-Piercer Manticore deals damage equal to that creature's power to any target. - Ability secondAbility = new HeartPiercerManticoreSacrificeTriggeredAbility(firstAbility.getOriginalId()); - secondAbility.addTarget(new TargetAnyTarget()); - this.addAbility(secondAbility); + // When Heart-Piercer Manticore enters the battlefield, you may sacrifice another creature. When you do, Heart-Piercer Manticore deals damage equal to that creature's power to any target. + this.addAbility(new EntersBattlefieldTriggeredAbility( + new HeartPiercerManticoreSacrificeEffect(), true + )); + // Embalm {5}{R} this.addAbility(new EmbalmAbility(new ManaCostsImpl("{5}{R}"), this)); @@ -67,7 +62,8 @@ class HeartPiercerManticoreSacrificeEffect extends OneShotEffect { public HeartPiercerManticoreSacrificeEffect() { super(Outcome.Damage); - this.staticText = "you may sacrifice another creature"; + this.staticText = "sacrifice another creature. When you do, " + + "{this} deals damage equal to that creature's power to any target"; } public HeartPiercerManticoreSacrificeEffect(final HeartPiercerManticoreSacrificeEffect effect) { @@ -87,8 +83,11 @@ class HeartPiercerManticoreSacrificeEffect extends OneShotEffect { if (controller.choose(outcome, target, source.getSourceId(), game)) { Permanent toSacrifice = game.getPermanent(target.getFirstTarget()); if (toSacrifice != null) { - toSacrifice.sacrifice(source.getSourceId(), game); - return new SendOptionUsedEventEffect(toSacrifice.getPower().getValue()).apply(game, source); + DelayedTriggeredAbility trigger = new HeartPiercerManticoreReflexiveTriggeredAbility(toSacrifice.getPower().getValue()); + if (toSacrifice.sacrifice(source.getSourceId(), game)) { + game.addDelayedTriggeredAbility(trigger, source); + return new SendOptionUsedEventEffect().apply(game, source); + } } } return true; @@ -97,44 +96,36 @@ class HeartPiercerManticoreSacrificeEffect extends OneShotEffect { } } -class HeartPiercerManticoreSacrificeTriggeredAbility extends TriggeredAbilityImpl { +class HeartPiercerManticoreReflexiveTriggeredAbility extends DelayedTriggeredAbility { - private final UUID relatedTriggerdAbilityOriginalId; - - public HeartPiercerManticoreSacrificeTriggeredAbility(UUID relatedTriggerdAbilityOriginalId) { - super(Zone.BATTLEFIELD, new InfoEffect("{this} deals damage equal to that creature's power to any target")); - this.relatedTriggerdAbilityOriginalId = relatedTriggerdAbilityOriginalId; + public HeartPiercerManticoreReflexiveTriggeredAbility(int damage) { + super(new DamageTargetEffect(damage), Duration.OneUse, true); + this.addTarget(new TargetAnyTarget()); } - public HeartPiercerManticoreSacrificeTriggeredAbility(final HeartPiercerManticoreSacrificeTriggeredAbility ability) { + public HeartPiercerManticoreReflexiveTriggeredAbility(final HeartPiercerManticoreReflexiveTriggeredAbility ability) { super(ability); - this.relatedTriggerdAbilityOriginalId = ability.relatedTriggerdAbilityOriginalId; } @Override - public HeartPiercerManticoreSacrificeTriggeredAbility copy() { - return new HeartPiercerManticoreSacrificeTriggeredAbility(this); + public HeartPiercerManticoreReflexiveTriggeredAbility copy() { + return new HeartPiercerManticoreReflexiveTriggeredAbility(this); } @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.OPTION_USED; + return event.getType() == GameEvent.EventType.OPTION_USED; } @Override public boolean checkTrigger(GameEvent event, Game game) { - if (event.getPlayerId().equals(this.getControllerId()) - && event.getTargetId().equals(relatedTriggerdAbilityOriginalId) - && event.getSourceId().equals(getSourceId())) { - getEffects().clear(); - getEffects().add(new DamageTargetEffect(event.getAmount())); - return true; - } - return false; + return event.getPlayerId().equals(this.getControllerId()) + && event.getSourceId().equals(this.getSourceId()); } @Override public String getRule() { - return "When you do, {this} deals damage equal to that creature's power to any target."; + return "When you sacrifice a creature to {this}'s ability, " + + "{this} deals damage equal to that creature's power to any target"; } }