diff --git a/Mage.Sets/src/mage/cards/v/VraskaSwarmsEminence.java b/Mage.Sets/src/mage/cards/v/VraskaSwarmsEminence.java index e1a7d3f2a5f..3dc008f4edb 100644 --- a/Mage.Sets/src/mage/cards/v/VraskaSwarmsEminence.java +++ b/Mage.Sets/src/mage/cards/v/VraskaSwarmsEminence.java @@ -1,31 +1,35 @@ package mage.cards.v; +import java.util.UUID; import mage.abilities.LoyaltyAbility; -import mage.abilities.common.DealsDamageToAPlayerAllTriggeredAbility; +import mage.abilities.TriggeredAbilityImpl; import mage.abilities.common.PlaneswalkerEntersWithLoyaltyCountersAbility; +import mage.abilities.effects.Effect; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.abilities.keyword.DeathtouchAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SetTargetPointer; import mage.constants.SubType; import mage.constants.SuperType; +import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; import mage.game.permanent.token.AssassinToken2; - -import java.util.UUID; +import mage.target.targetpointer.FixedTarget; /** * @author TheElk801 */ public final class VraskaSwarmsEminence extends CardImpl { - private static final FilterPermanent filter = new FilterCreaturePermanent("creature you control with deathtouch"); + private static final FilterPermanent filter = new FilterControlledCreaturePermanent("creature you control with deathtouch"); static { filter.add(new AbilityPredicate(DeathtouchAbility.class)); @@ -39,12 +43,9 @@ public final class VraskaSwarmsEminence extends CardImpl { this.addAbility(new PlaneswalkerEntersWithLoyaltyCountersAbility(5)); // Whenever a creature you control with deathtouch deals damage to a player or planeswalker, put a +1/+1 counter on that creature. - // TODO: make this trigger on planeswalkers - this.addAbility(new DealsDamageToAPlayerAllTriggeredAbility( - new AddCountersTargetEffect( - CounterType.P1P1.createInstance() - ).setText("put a +1/+1 counter on that creature"), - filter, false, SetTargetPointer.PERMANENT, false) + this.addAbility(new VraskaSwarmsEminenceTriggeredAbility(Zone.BATTLEFIELD, + new AddCountersTargetEffect(CounterType.P1P1.createInstance()).setText("put a +1/+1 counter on that creature"), + filter) ); // -2: Create a 1/1 black Assassin creature token with deathtouch and "Whenever this creature deals damage to a planeswalker, destroy that planeswalker." @@ -60,3 +61,49 @@ public final class VraskaSwarmsEminence extends CardImpl { return new VraskaSwarmsEminence(this); } } + +class VraskaSwarmsEminenceTriggeredAbility extends TriggeredAbilityImpl { + + private final FilterPermanent filter; + + public VraskaSwarmsEminenceTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter) { + super(zone, effect, false); + this.filter = filter; + } + + public VraskaSwarmsEminenceTriggeredAbility(final VraskaSwarmsEminenceTriggeredAbility ability) { + super(ability); + this.filter = ability.filter; + } + + @Override + public VraskaSwarmsEminenceTriggeredAbility copy() { + return new VraskaSwarmsEminenceTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DAMAGED_PLAYER + || event.getType() == GameEvent.EventType.DAMAGED_PLANESWALKER; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + Permanent permanent = game.getPermanent(event.getSourceId()); + if (permanent != null && filter.match(permanent, getSourceId(), getControllerId(), game)) { + for (Effect effect : this.getEffects()) { + effect.setValue("damage", event.getAmount()); + effect.setValue("sourceId", event.getSourceId()); + effect.setTargetPointer(new FixedTarget(permanent.getId(), permanent.getZoneChangeCounter(game))); + } + return true; + } + return false; + } + + @Override + public String getRule() { + return "Whenever a creature you control with deathtouch deals damage to a player or planeswalker," + super.getRule(); + } + +}