diff --git a/Mage.Sets/src/mage/cards/a/AvelineDeGrandpre.java b/Mage.Sets/src/mage/cards/a/AvelineDeGrandpre.java index c04d54c072e..255d72eaf8b 100644 --- a/Mage.Sets/src/mage/cards/a/AvelineDeGrandpre.java +++ b/Mage.Sets/src/mage/cards/a/AvelineDeGrandpre.java @@ -2,28 +2,19 @@ package mage.cards.a; import java.util.UUID; import mage.MageInt; -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.effects.Effect; -import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.common.DealsDamageToAPlayerAllTriggeredAbility; +import mage.abilities.dynamicvalue.common.SavedDamageValue; import mage.abilities.effects.common.counter.AddCountersTargetEffect; -import mage.constants.SubType; -import mage.constants.SuperType; +import mage.constants.*; import mage.abilities.keyword.DeathtouchAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.keyword.DisguiseAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.predicate.mageobject.AbilityPredicate; -import mage.game.Game; -import mage.game.events.DamagedPlayerEvent; -import mage.game.events.GameEvent; -import mage.game.permanent.Permanent; -import mage.target.targetpointer.FixedTarget; /** * @@ -31,6 +22,13 @@ import mage.target.targetpointer.FixedTarget; */ public final class AvelineDeGrandpre extends CardImpl { + private static final FilterPermanent filter + = new FilterControlledCreaturePermanent("a creature you control with deathtouch"); + + static { + filter.add(new AbilityPredicate(DeathtouchAbility.class)); + } + public AvelineDeGrandpre(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{G}"); @@ -44,7 +42,11 @@ public final class AvelineDeGrandpre extends CardImpl { this.addAbility(DeathtouchAbility.getInstance()); // Whenever a creature you control with deathtouch deals combat damage to a player, put that many +1/+1 counters on that creature. - this.addAbility(new AvelineDeGrandpreTriggeredAbility()); + this.addAbility(new DealsDamageToAPlayerAllTriggeredAbility( + new AddCountersTargetEffect(CounterType.P1P1.createInstance(), SavedDamageValue.MANY), + filter, + false, SetTargetPointer.PERMANENT, true + )); // Disguise {B}{G} this.addAbility(new DisguiseAbility(this, new ManaCostsImpl<>("{B}{G}"))); @@ -60,52 +62,3 @@ public final class AvelineDeGrandpre extends CardImpl { return new AvelineDeGrandpre(this); } } - -class AvelineDeGrandpreTriggeredAbility extends TriggeredAbilityImpl { - - private static final FilterPermanent filter - = new FilterControlledCreaturePermanent("a creature you control with deathtouch"); - - static { - filter.add(new AbilityPredicate(DeathtouchAbility.class)); - } - - public AvelineDeGrandpreTriggeredAbility() { - // Copied from Necropolis Regent, I don't know why QUEST counters. - super(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.QUEST.createInstance()), false); - } - - private AvelineDeGrandpreTriggeredAbility(final AvelineDeGrandpreTriggeredAbility ability) { - super(ability); - } - - @Override - public AvelineDeGrandpreTriggeredAbility copy() { - return new AvelineDeGrandpreTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PLAYER; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - if (((DamagedPlayerEvent) event).isCombatDamage()) { - Permanent creature = game.getPermanent(event.getSourceId()); - if (creature != null && creature.isControlledBy(controllerId) && filter.match(creature, game)) { - this.getEffects().clear(); - Effect effect = new AddCountersTargetEffect(CounterType.P1P1.createInstance(event.getAmount())); - effect.setTargetPointer(new FixedTarget(creature.getId(), game)); - this.addEffect(effect); - return true; - } - } - return false; - } - - @Override - public String getRule() { - return "Whenever a creature you control with deathtouch deals combat damage to a player, put that many +1/+1 counters on it."; - } -} \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/n/NecropolisRegent.java b/Mage.Sets/src/mage/cards/n/NecropolisRegent.java index 39d967d705e..f64f314f3fb 100644 --- a/Mage.Sets/src/mage/cards/n/NecropolisRegent.java +++ b/Mage.Sets/src/mage/cards/n/NecropolisRegent.java @@ -2,22 +2,17 @@ package mage.cards.n; import java.util.UUID; import mage.MageInt; -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.effects.Effect; -import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.common.DealsDamageToAPlayerAllTriggeredAbility; +import mage.abilities.dynamicvalue.common.SavedDamageValue; import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.SetTargetPointer; import mage.constants.SubType; -import mage.constants.Zone; import mage.counters.CounterType; -import mage.game.Game; -import mage.game.events.DamagedPlayerEvent; -import mage.game.events.GameEvent; -import mage.game.permanent.Permanent; -import mage.target.targetpointer.FixedTarget; +import mage.filter.StaticFilters; /** * @@ -36,7 +31,11 @@ public final class NecropolisRegent extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Whenever a creature you control deals combat damage to a player, put that many +1/+1 counters on it. - this.addAbility(new NecropolisRegentTriggeredAbility()); + this.addAbility(new DealsDamageToAPlayerAllTriggeredAbility( + new AddCountersTargetEffect(CounterType.P1P1.createInstance(), SavedDamageValue.MANY), + StaticFilters.FILTER_CONTROLLED_A_CREATURE, + false, SetTargetPointer.PERMANENT, true + )); } private NecropolisRegent(final NecropolisRegent card) { @@ -48,44 +47,3 @@ public final class NecropolisRegent extends CardImpl { return new NecropolisRegent(this); } } - -class NecropolisRegentTriggeredAbility extends TriggeredAbilityImpl { - - public NecropolisRegentTriggeredAbility() { - super(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.QUEST.createInstance()), false); - } - - private NecropolisRegentTriggeredAbility(final NecropolisRegentTriggeredAbility ability) { - super(ability); - } - - @Override - public NecropolisRegentTriggeredAbility copy() { - return new NecropolisRegentTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PLAYER; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - if (((DamagedPlayerEvent) event).isCombatDamage()) { - Permanent creature = game.getPermanent(event.getSourceId()); - if (creature != null && creature.isControlledBy(controllerId)) { - this.getEffects().clear(); - Effect effect = new AddCountersTargetEffect(CounterType.P1P1.createInstance(event.getAmount())); - effect.setTargetPointer(new FixedTarget(creature.getId(), game)); - this.addEffect(effect); - return true; - } - } - return false; - } - - @Override - public String getRule() { - return "Whenever a creature you control deals combat damage to a player, put that many +1/+1 counters on it."; - } -}