[refactoring] merged dies triggered abilities for less duplicate code

This commit is contained in:
North 2012-07-22 17:07:06 +03:00
parent c0da929ba0
commit 0197c16cd7
22 changed files with 138 additions and 444 deletions

View file

@ -30,10 +30,14 @@ package mage.sets.avacynrestored;
import mage.Constants.CardType;
import mage.Constants.Rarity;
import mage.MageInt;
import mage.abilities.common.DiesAnotherCreatureTriggeredAbility;
import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.effects.common.DrawCardControllerEffect;
import mage.abilities.keyword.DeathtouchAbility;
import mage.cards.CardImpl;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.permanent.AnotherPredicate;
import mage.filter.predicate.permanent.TokenPredicate;
import java.util.UUID;
@ -42,6 +46,13 @@ import java.util.UUID;
*/
public class HarvesterOfSouls extends CardImpl<HarvesterOfSouls> {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another nontoken creature");
static {
filter.add(Predicates.not(new TokenPredicate()));
filter.add(new AnotherPredicate());
}
public HarvesterOfSouls(UUID ownerId) {
super(ownerId, 107, "Harvester of Souls", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{4}{B}{B}");
this.expansionSetCode = "AVR";
@ -54,7 +65,7 @@ public class HarvesterOfSouls extends CardImpl<HarvesterOfSouls> {
this.addAbility(DeathtouchAbility.getInstance());
// Whenever another nontoken creature dies, you may draw a card.
this.addAbility(new DiesAnotherCreatureTriggeredAbility(new DrawCardControllerEffect(1), true, true));
this.addAbility(new DiesCreatureTriggeredAbility(new DrawCardControllerEffect(1), true, filter));
}
public HarvesterOfSouls(final HarvesterOfSouls card) {

View file

@ -32,7 +32,7 @@ import mage.Constants.CardType;
import mage.Constants.Rarity;
import mage.MageInt;
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
import mage.abilities.common.DiesAnotherCreatureTriggeredAbility;
import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.cards.CardImpl;
import mage.counters.CounterType;
@ -55,7 +55,7 @@ public class HavengulVampire extends CardImpl<HavengulVampire> {
// Whenever Havengul Vampire deals combat damage to a player, put a +1/+1 counter on it.
this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false));
// Whenever another creature dies, put a +1/+1 counter on Havengul Vampire.
this.addAbility(new DiesAnotherCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false));
this.addAbility(new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, true));
}
public HavengulVampire(final HavengulVampire card) {

View file

@ -30,14 +30,17 @@ package mage.sets.darkascension;
import java.util.UUID;
import mage.Constants.CardType;
import mage.Constants.Rarity;
import mage.Constants.TargetController;
import mage.MageInt;
import mage.abilities.common.DiesAnotherCreatureYouControlTriggeredAbility;
import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.filter.predicate.permanent.AnotherPredicate;
import mage.filter.predicate.permanent.ControllerPredicate;
import mage.game.permanent.token.SpiritWhiteToken;
/**
@ -45,10 +48,12 @@ import mage.game.permanent.token.SpiritWhiteToken;
* @author intimidatingant
*/
public class RequiemAngel extends CardImpl<RequiemAngel> {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("non-Spirit creature");
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another non-Spirit creature you control");
static {
filter.add(Predicates.not(new SubtypePredicate("Spirit")));
filter.add(new AnotherPredicate());
filter.add(new ControllerPredicate(TargetController.YOU));
}
public RequiemAngel(UUID ownerId) {
@ -63,7 +68,7 @@ public class RequiemAngel extends CardImpl<RequiemAngel> {
this.addAbility(FlyingAbility.getInstance());
// Whenever another non-Spirit creature you control dies, put a 1/1 white Spirit creature token with flying onto the battlefield.
this.addAbility(new DiesAnotherCreatureYouControlTriggeredAbility(new CreateTokenEffect(new SpiritWhiteToken(), 1), false, filter));
this.addAbility(new DiesCreatureTriggeredAbility(new CreateTokenEffect(new SpiritWhiteToken(), 1), false, filter));
}
public RequiemAngel(final RequiemAngel card) {

View file

@ -33,7 +33,7 @@ import mage.Constants.Rarity;
import mage.Constants.Zone;
import mage.MageInt;
import mage.abilities.common.AttacksEachTurnStaticAbility;
import mage.abilities.common.CreatureDiesTriggeredAbility;
import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.SkipUntapSourceEffect;
import mage.abilities.effects.common.UntapSourceEffect;
@ -58,7 +58,7 @@ public class GalvanicJuggernaut extends CardImpl<GalvanicJuggernaut> {
// Galvanic Juggernaut doesn't untap during your untap step.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SkipUntapSourceEffect()));
// Whenever another creature dies, untap Galvanic Juggernaut.
this.addAbility(new CreatureDiesTriggeredAbility(new UntapSourceEffect(), false, true));
this.addAbility(new DiesCreatureTriggeredAbility(new UntapSourceEffect(), false, true));
}
public GalvanicJuggernaut(final GalvanicJuggernaut card) {

View file

@ -31,7 +31,7 @@ import java.util.UUID;
import mage.Constants.CardType;
import mage.Constants.Rarity;
import mage.MageInt;
import mage.abilities.common.CreatureDiesTriggeredAbility;
import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.HexproofAbility;
import mage.cards.CardImpl;
@ -54,7 +54,7 @@ public class Lumberknot extends CardImpl<Lumberknot> {
this.addAbility(HexproofAbility.getInstance());
// Whenever a creature dies, put a +1/+1 counter on Lumberknot.
this.addAbility(new CreatureDiesTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false));
this.addAbility(new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false));
}
public Lumberknot(final Lumberknot card) {

View file

@ -33,7 +33,7 @@ import mage.Constants.Outcome;
import mage.Constants.Rarity;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.CreatureDiesTriggeredAbility;
import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
@ -57,7 +57,7 @@ public class MurderOfCrows extends CardImpl<MurderOfCrows> {
this.addAbility(FlyingAbility.getInstance());
// Whenever another creature dies, you may draw a card. If you do, discard a card.
this.addAbility(new CreatureDiesTriggeredAbility(new MurderOfCrowsEffect(), false, true));
this.addAbility(new DiesCreatureTriggeredAbility(new MurderOfCrowsEffect(), false, true));
}
public MurderOfCrows(final MurderOfCrows card) {

View file

@ -31,7 +31,7 @@ import java.util.UUID;
import mage.Constants.CardType;
import mage.Constants.Rarity;
import mage.MageInt;
import mage.abilities.common.CreatureDiesTriggeredAbility;
import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.cards.CardImpl;
import mage.target.TargetPlayer;
@ -53,7 +53,7 @@ public class RageThrower extends CardImpl<RageThrower> {
this.toughness = new MageInt(2);
// Whenever another creature dies, Rage Thrower deals 2 damage to target player.
CreatureDiesTriggeredAbility ability = new CreatureDiesTriggeredAbility(new DamageTargetEffect(2), false, true);
DiesCreatureTriggeredAbility ability = new DiesCreatureTriggeredAbility(new DamageTargetEffect(2), false, true);
ability.addTarget(new TargetPlayer());
this.addAbility(ability);
}

View file

@ -30,11 +30,15 @@ package mage.sets.innistrad;
import java.util.UUID;
import mage.Constants.CardType;
import mage.Constants.Rarity;
import mage.Constants.TargetController;
import mage.MageInt;
import mage.abilities.common.DiesAnotherCreatureYouControlTriggeredAbility;
import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.cards.CardImpl;
import mage.counters.CounterType;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.AnotherPredicate;
import mage.filter.predicate.permanent.ControllerPredicate;
/**
*
@ -42,6 +46,13 @@ import mage.counters.CounterType;
*/
public class UnrulyMob extends CardImpl<UnrulyMob> {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another creature you control");
static {
filter.add(new AnotherPredicate());
filter.add(new ControllerPredicate(TargetController.YOU));
}
public UnrulyMob(UUID ownerId) {
super(ownerId, 39, "Unruly Mob", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{W}");
this.expansionSetCode = "ISD";
@ -52,7 +63,7 @@ public class UnrulyMob extends CardImpl<UnrulyMob> {
this.toughness = new MageInt(1);
// Whenever another creature you control dies, put a +1/+1 counter on Unruly Mob.
this.addAbility(new DiesAnotherCreatureYouControlTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false));
this.addAbility(new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, filter));
}
public UnrulyMob(final UnrulyMob card) {

View file

@ -31,7 +31,7 @@ import java.util.UUID;
import mage.Constants.CardType;
import mage.Constants.Rarity;
import mage.MageInt;
import mage.abilities.common.CreatureDiesTriggeredAbility;
import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.ShroudAbility;
import mage.cards.CardImpl;
@ -54,7 +54,7 @@ public class AlgaeGharial extends CardImpl<AlgaeGharial> {
this.addAbility(ShroudAbility.getInstance());
// Whenever another creature dies, you may put a +1/+1 counter on Algae Gharial.
this.addAbility(new CreatureDiesTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true, true));
this.addAbility(new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true, true));
}
public AlgaeGharial(final AlgaeGharial card) {

View file

@ -31,7 +31,7 @@ import java.util.UUID;
import mage.Constants.CardType;
import mage.Constants.Rarity;
import mage.MageInt;
import mage.abilities.common.CreatureDiesTriggeredAbility;
import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.effects.common.GainLifeEffect;
import mage.cards.CardImpl;
@ -52,7 +52,7 @@ public class Deathgreeter extends CardImpl<Deathgreeter> {
this.toughness = new MageInt(1);
// Whenever another creature dies, you may gain 1 life.
this.addAbility(new CreatureDiesTriggeredAbility(new GainLifeEffect(1), true, true));
this.addAbility(new DiesCreatureTriggeredAbility(new GainLifeEffect(1), true, true));
}
public Deathgreeter(final Deathgreeter card) {

View file

@ -31,7 +31,7 @@ import java.util.UUID;
import mage.Constants.CardType;
import mage.Constants.Rarity;
import mage.MageInt;
import mage.abilities.common.CreatureDiesTriggeredAbility;
import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.cards.CardImpl;
import mage.target.TargetPlayer;
@ -52,7 +52,7 @@ public class HissingIguanar extends CardImpl<HissingIguanar> {
this.toughness = new MageInt(1);
// Whenever another creature dies, you may have Hissing Iguanar deal 1 damage to target player.
CreatureDiesTriggeredAbility ability = new CreatureDiesTriggeredAbility(new DamageTargetEffect(1), true, true);
DiesCreatureTriggeredAbility ability = new DiesCreatureTriggeredAbility(new DamageTargetEffect(1), true, true);
ability.addTarget(new TargetPlayer());
this.addAbility(ability);
}

View file

@ -31,7 +31,7 @@ import java.util.UUID;
import mage.Constants.CardType;
import mage.Constants.Rarity;
import mage.MageInt;
import mage.abilities.common.CreatureDiesTriggeredAbility;
import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.FirstStrikeAbility;
import mage.cards.CardImpl;
@ -54,7 +54,7 @@ public class RockslideElemental extends CardImpl<RockslideElemental> {
this.addAbility(FirstStrikeAbility.getInstance());
// Whenever another creature dies, you may put a +1/+1 counter on Rockslide Elemental.
this.addAbility(new CreatureDiesTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true, true));
this.addAbility(new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true, true));
}
public RockslideElemental(final RockslideElemental card) {

View file

@ -31,7 +31,7 @@ import java.util.UUID;
import mage.Constants.CardType;
import mage.Constants.Rarity;
import mage.MageInt;
import mage.abilities.common.CreatureDiesTriggeredAbility;
import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
@ -54,7 +54,7 @@ public class ScavengerDrake extends CardImpl<ScavengerDrake> {
this.addAbility(FlyingAbility.getInstance());
// Whenever another creature dies, you may put a +1/+1 counter on Scavenger Drake.
this.addAbility(new CreatureDiesTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true, true));
this.addAbility(new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true, true));
}
public ScavengerDrake(final ScavengerDrake card) {

View file

@ -34,11 +34,12 @@ import mage.Constants.CardType;
import mage.Constants.Rarity;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.DiesThisOrAnotherControlledCreatureTriggeredAbility;
import mage.abilities.common.DiesThisOrAnotherCreatureTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.filter.predicate.permanent.ControllerPredicate;
import mage.game.Game;
@ -53,6 +54,8 @@ import mage.target.common.TargetControlledPermanent;
*/
public class ButcherOfMalakir extends CardImpl<ButcherOfMalakir> {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature you control");
public ButcherOfMalakir(UUID ownerId) {
super(ownerId, 53, "Butcher of Malakir", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{5}{B}{B}");
this.expansionSetCode = "WWK";
@ -67,7 +70,7 @@ public class ButcherOfMalakir extends CardImpl<ButcherOfMalakir> {
this.addAbility(FlyingAbility.getInstance());
// Whenever Butcher of Malakir or another creature you control dies, each opponent sacrifices a creature.
this.addAbility(new DiesThisOrAnotherControlledCreatureTriggeredAbility(new ButcherOfMalakirEffect(), false));
this.addAbility(new DiesThisOrAnotherCreatureTriggeredAbility(new ButcherOfMalakirEffect(), false, filter));
}
public ButcherOfMalakir(final ButcherOfMalakir card) {
@ -79,7 +82,6 @@ public class ButcherOfMalakir extends CardImpl<ButcherOfMalakir> {
return new ButcherOfMalakir(this);
}
}
class ButcherOfMalakirEffect extends OneShotEffect<ButcherOfMalakirEffect> {
public ButcherOfMalakirEffect() {

View file

@ -33,7 +33,7 @@ import mage.Constants.Rarity;
import mage.Constants.Zone;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.common.CreatureDiesTriggeredAbility;
import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.RemoveCountersSourceCost;
import mage.abilities.costs.common.SacrificeSourceCost;
@ -56,7 +56,7 @@ public class QuestForTheGravelord extends CardImpl<QuestForTheGravelord> {
this.color.setBlack(true);
// Whenever a creature dies, you may put a quest counter on Quest for the Gravelord.
this.addAbility(new CreatureDiesTriggeredAbility(new AddCountersSourceEffect(CounterType.QUEST.createInstance()), true));
this.addAbility(new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.QUEST.createInstance()), true));
// Remove three quest counters from Quest for the Gravelord and sacrifice it: Put a 5/5 black Zombie Giant creature token onto the battlefield.
SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new CreateTokenEffect(new ZombieToken()),