[EMN] refactor some TDFCs

This commit is contained in:
theelk801 2025-07-29 09:25:43 -04:00
parent 668e2bfe22
commit f024e3b092
9 changed files with 102 additions and 213 deletions

View file

@ -1,22 +1,20 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.Mana; import mage.Mana;
import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.delayed.AtTheBeginOfMainPhaseDelayedTriggeredAbility; import mage.abilities.common.delayed.AtTheBeginOfMainPhaseDelayedTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.mana.AddManaToManaPoolSourceControllerEffect;
import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
import mage.abilities.effects.mana.AddManaToManaPoolSourceControllerEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.TargetController; import mage.constants.TargetController;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class ConduitOfEmrakul extends CardImpl { public final class ConduitOfEmrakul extends CardImpl {
@ -32,11 +30,12 @@ public final class ConduitOfEmrakul extends CardImpl {
this.nightCard = true; this.nightCard = true;
// Whenever Conduit of Emrakul attacks, add {C}{C} at the beginning of your next main phase this turn. // Whenever Conduit of Emrakul attacks, add {C}{C} at the beginning of your next main phase this turn.
Effect effect = new CreateDelayedTriggeredAbilityEffect( this.addAbility(new AttacksTriggeredAbility(new CreateDelayedTriggeredAbilityEffect(
new AtTheBeginOfMainPhaseDelayedTriggeredAbility( new AtTheBeginOfMainPhaseDelayedTriggeredAbility(
new AddManaToManaPoolSourceControllerEffect(Mana.GenericMana(2)), false, TargetController.YOU, AtTheBeginOfMainPhaseDelayedTriggeredAbility.PhaseSelection.NEXT_MAIN_THIS_TURN)); new AddManaToManaPoolSourceControllerEffect(Mana.GenericMana(2)), false,
effect.setText("add {C}{C} at the beginning of your next main phase this turn"); TargetController.YOU, AtTheBeginOfMainPhaseDelayedTriggeredAbility.PhaseSelection.NEXT_MAIN_THIS_TURN
this.addAbility(new AttacksTriggeredAbility(effect, false)); )
).setText("add {C}{C} at the beginning of your next main phase this turn"), false));
} }
private ConduitOfEmrakul(final ConduitOfEmrakul card) { private ConduitOfEmrakul(final ConduitOfEmrakul card) {

View file

@ -1,27 +1,24 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.Mana; import mage.Mana;
import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.delayed.AtTheBeginOfMainPhaseDelayedTriggeredAbility; import mage.abilities.common.delayed.AtTheBeginOfMainPhaseDelayedTriggeredAbility;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.mana.AddManaToManaPoolSourceControllerEffect;
import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.effects.mana.AddManaToManaPoolSourceControllerEffect;
import mage.abilities.keyword.TransformAbility; import mage.abilities.keyword.TransformAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.constants.Zone;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class ConduitOfStorms extends CardImpl { public final class ConduitOfStorms extends CardImpl {
@ -36,11 +33,13 @@ public final class ConduitOfStorms extends CardImpl {
this.secondSideCardClazz = mage.cards.c.ConduitOfEmrakul.class; this.secondSideCardClazz = mage.cards.c.ConduitOfEmrakul.class;
// Whenever Conduit of Storms attacks, add {R} at the beginning of your next main phase this turn. // Whenever Conduit of Storms attacks, add {R} at the beginning of your next main phase this turn.
Effect effect = new CreateDelayedTriggeredAbilityEffect( this.addAbility(new AttacksTriggeredAbility(new CreateDelayedTriggeredAbilityEffect(
new AtTheBeginOfMainPhaseDelayedTriggeredAbility( new AtTheBeginOfMainPhaseDelayedTriggeredAbility(
new AddManaToManaPoolSourceControllerEffect(Mana.RedMana(1)), false, TargetController.YOU, AtTheBeginOfMainPhaseDelayedTriggeredAbility.PhaseSelection.NEXT_MAIN_THIS_TURN)); new AddManaToManaPoolSourceControllerEffect(Mana.RedMana(1)), false,
effect.setText("add {R} at the beginning of your next main phase this turn"); TargetController.YOU, AtTheBeginOfMainPhaseDelayedTriggeredAbility.PhaseSelection.NEXT_MAIN_THIS_TURN
this.addAbility(new AttacksTriggeredAbility(effect, false)); )
).setText("add {R} at the beginning of your next main phase this turn"), false));
// {3}{R}{R}: Transform Conduit of Storms. // {3}{R}{R}: Transform Conduit of Storms.
this.addAbility(new TransformAbility()); this.addAbility(new TransformAbility());
this.addAbility(new SimpleActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{3}{R}{R}"))); this.addAbility(new SimpleActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{3}{R}{R}")));

View file

@ -1,42 +1,40 @@
package mage.cards.d; package mage.cards.d;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.Effect; import mage.abilities.condition.Condition;
import mage.abilities.effects.OneShotEffect; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.hint.Hint;
import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.TransformAbility; import mage.abilities.keyword.TransformAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Outcome; import mage.constants.ComparisonType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.TargetController; import mage.filter.StaticFilters;
import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledPermanent;
import mage.filter.FilterSpell;
import mage.filter.predicate.Predicates;
import mage.game.Game;
import mage.game.permanent.token.HumanWizardToken; import mage.game.permanent.token.HumanWizardToken;
import mage.players.Player;
import java.util.UUID;
/** /**
* @author fireshoes * @author fireshoes
*/ */
public final class DocentOfPerfection extends CardImpl { public final class DocentOfPerfection extends CardImpl {
private static final FilterSpell filterSpell = new FilterSpell("an instant or sorcery spell"); private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
new FilterControlledPermanent(SubType.WIZARD), ComparisonType.MORE_THAN, 2
static { );
filterSpell.add(Predicates.or( private static final Hint hint = new ValueHint(
CardType.INSTANT.getPredicate(), "Wizards you control", new PermanentsOnBattlefieldCount(new FilterControlledPermanent(SubType.WIZARD))
CardType.SORCERY.getPredicate())); );
}
public DocentOfPerfection(UUID ownerId, CardSetInfo setInfo) { public DocentOfPerfection(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{U}");
@ -53,10 +51,15 @@ public final class DocentOfPerfection extends CardImpl {
// Whenever you cast an instant or sorcery spell, create a 1/1 blue Human Wizard creature token. // Whenever you cast an instant or sorcery spell, create a 1/1 blue Human Wizard creature token.
// Then if you control three or more Wizards, transform Docent of Perfection. // Then if you control three or more Wizards, transform Docent of Perfection.
this.addAbility(new TransformAbility()); this.addAbility(new TransformAbility());
Effect effect = new DocentOfPerfectionEffect(); Ability ability = new SpellCastControllerTriggeredAbility(
Ability ability = new SpellCastControllerTriggeredAbility(new CreateTokenEffect(new HumanWizardToken()), filterSpell, false); new CreateTokenEffect(new HumanWizardToken()),
ability.addEffect(effect); StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false
this.addAbility(ability); );
ability.addEffect(new ConditionalOneShotEffect(
new TransformSourceEffect(), condition,
"Then if you control three or more Wizards, transform {this}"
));
this.addAbility(ability.addHint(hint));
} }
private DocentOfPerfection(final DocentOfPerfection card) { private DocentOfPerfection(final DocentOfPerfection card) {
@ -68,38 +71,3 @@ public final class DocentOfPerfection extends CardImpl {
return new DocentOfPerfection(this); return new DocentOfPerfection(this);
} }
} }
class DocentOfPerfectionEffect extends OneShotEffect {
private static final FilterPermanent filter = new FilterPermanent("Wizards");
static {
filter.add(SubType.WIZARD.getPredicate());
filter.add(TargetController.YOU.getControllerPredicate());
}
public DocentOfPerfectionEffect() {
super(Outcome.Benefit);
staticText = "Then if you control three or more Wizards, transform {this}";
}
private DocentOfPerfectionEffect(final DocentOfPerfectionEffect effect) {
super(effect);
}
@Override
public DocentOfPerfectionEffect copy() {
return new DocentOfPerfectionEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
if (game.getBattlefield().count(filter, source.getControllerId(), source, game) >= 3) {
return new TransformSourceEffect().apply(game, source);
}
}
return false;
}
}

View file

@ -1,39 +1,33 @@
package mage.cards.f; package mage.cards.f;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.abilities.effects.common.continuous.GainAbilityAllEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.CardType;
import mage.filter.FilterSpell; import mage.constants.Duration;
import mage.filter.common.FilterCreaturePermanent; import mage.constants.SubType;
import mage.filter.predicate.Predicates; import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.game.permanent.token.HumanWizardToken; import mage.game.permanent.token.HumanWizardToken;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class FinalIteration extends CardImpl { public final class FinalIteration extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Wizards"); private static final FilterPermanent filter = new FilterPermanent("Wizards");
private static final FilterSpell filterSpell = new FilterSpell("an instant or sorcery spell");
static { static {
filter.add(SubType.WIZARD.getPredicate()); filter.add(SubType.WIZARD.getPredicate());
filter.add(TargetController.YOU.getControllerPredicate());
filterSpell.add(Predicates.or(
CardType.INSTANT.getPredicate(),
CardType.SORCERY.getPredicate()));
} }
public FinalIteration(UUID ownerId, CardSetInfo setInfo) { public FinalIteration(UUID ownerId, CardSetInfo setInfo) {
@ -50,14 +44,19 @@ public final class FinalIteration extends CardImpl {
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// Wizards you control get +2/+1 and have flying. // Wizards you control get +2/+1 and have flying.
Ability ability = new SimpleStaticAbility(new BoostControlledEffect(2, 1, Duration.WhileOnBattlefield, filter, false)); Ability ability = new SimpleStaticAbility(new BoostControlledEffect(
Effect effect = new GainAbilityAllEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield, filter, false); 2, 1, Duration.WhileOnBattlefield, filter, false
effect.setText("and have flying"); ));
ability.addEffect(effect); ability.addEffect(new GainAbilityControlledEffect(
FlyingAbility.getInstance(), Duration.WhileOnBattlefield, filter
).setText("and have flying"));
this.addAbility(ability); this.addAbility(ability);
// Whenever you cast an instant or sorcery spell, create a 1/1 blue Human Wizard creature token. // Whenever you cast an instant or sorcery spell, create a 1/1 blue Human Wizard creature token.
this.addAbility(new SpellCastControllerTriggeredAbility(new CreateTokenEffect(new HumanWizardToken()), filterSpell, false)); this.addAbility(new SpellCastControllerTriggeredAbility(
new CreateTokenEffect(new HumanWizardToken()),
StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false
));
} }
private FinalIteration(final FinalIteration card) { private FinalIteration(final FinalIteration card) {

View file

@ -1,23 +1,19 @@
package mage.cards.g; package mage.cards.g;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.RequirementEffect; import mage.abilities.effects.common.combat.AttacksIfAbleAllEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Zone; import mage.constants.SubType;
import mage.game.Game; import mage.filter.StaticFilters;
import mage.game.permanent.Permanent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class GrislyAnglerfish extends CardImpl { public final class GrislyAnglerfish extends CardImpl {
@ -33,7 +29,9 @@ public final class GrislyAnglerfish extends CardImpl {
this.nightCard = true; this.nightCard = true;
// {6}: Creatures your opponents control attack this turn if able. // {6}: Creatures your opponents control attack this turn if able.
this.addAbility(new SimpleActivatedAbility(new GrislyAnglerfishMustAttackEffect(), new ManaCostsImpl<>("{6}"))); this.addAbility(new SimpleActivatedAbility(new AttacksIfAbleAllEffect(
StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, Duration.EndOfTurn
), new ManaCostsImpl<>("{6}")));
} }
private GrislyAnglerfish(final GrislyAnglerfish card) { private GrislyAnglerfish(final GrislyAnglerfish card) {
@ -45,39 +43,3 @@ public final class GrislyAnglerfish extends CardImpl {
return new GrislyAnglerfish(this); return new GrislyAnglerfish(this);
} }
} }
class GrislyAnglerfishMustAttackEffect extends RequirementEffect {
GrislyAnglerfishMustAttackEffect() {
super(Duration.EndOfTurn);
staticText = "Creatures your opponents control attack this turn if able";
}
private GrislyAnglerfishMustAttackEffect(final GrislyAnglerfishMustAttackEffect effect) {
super(effect);
}
@Override
public GrislyAnglerfishMustAttackEffect copy() {
return new GrislyAnglerfishMustAttackEffect(this);
}
@Override
public boolean applies(Permanent permanent, Ability source, Game game) {
if (game.getOpponents(source.getControllerId()).contains(permanent.getControllerId())) {
return true;
}
return false;
}
@Override
public boolean mustAttack(Game game) {
return true;
}
@Override
public boolean mustBlock(Game game) {
return false;
}
}

View file

@ -1,23 +1,22 @@
package mage.cards.g; package mage.cards.g;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.CardsInControllerGraveyardCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.OneShotEffect; import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.MillCardsControllerEffect;
import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.keyword.TransformAbility; import mage.abilities.keyword.TransformAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone; import mage.filter.FilterCard;
import mage.filter.common.FilterCreatureCard; import mage.filter.common.FilterCreatureCard;
import mage.filter.predicate.mageobject.ColorlessPredicate; import mage.filter.predicate.mageobject.ColorlessPredicate;
import mage.game.Game;
import mage.players.Player;
import java.util.UUID; import java.util.UUID;
@ -26,6 +25,14 @@ import java.util.UUID;
*/ */
public final class GrizzledAngler extends CardImpl { public final class GrizzledAngler extends CardImpl {
private static final FilterCard filter = new FilterCreatureCard();
static {
filter.add(ColorlessPredicate.instance);
}
private static final Condition condition = new CardsInControllerGraveyardCondition(1, filter);
public GrizzledAngler(UUID ownerId, CardSetInfo setInfo) { public GrizzledAngler(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
@ -36,7 +43,11 @@ public final class GrizzledAngler extends CardImpl {
// {T}: Put the top two cards of your library into your graveyard. Then if there is a colorless creature card in your graveyard, transform Grizzled Angler. // {T}: Put the top two cards of your library into your graveyard. Then if there is a colorless creature card in your graveyard, transform Grizzled Angler.
this.addAbility(new TransformAbility()); this.addAbility(new TransformAbility());
this.addAbility(new SimpleActivatedAbility(new GrizzledAnglerEffect(), new TapSourceCost())); Ability ability = new SimpleActivatedAbility(new MillCardsControllerEffect(2), new TapSourceCost());
ability.addEffect(new ConditionalOneShotEffect(
new TransformSourceEffect(), condition,
"Then if there is a colorless creature card in your graveyard, transform {this}"
));
} }
private GrizzledAngler(final GrizzledAngler card) { private GrizzledAngler(final GrizzledAngler card) {
@ -48,38 +59,3 @@ public final class GrizzledAngler extends CardImpl {
return new GrizzledAngler(this); return new GrizzledAngler(this);
} }
} }
class GrizzledAnglerEffect extends OneShotEffect {
private static final FilterCreatureCard filter = new FilterCreatureCard("a colorless creature card in your graveyard");
static {
filter.add(ColorlessPredicate.instance);
}
public GrizzledAnglerEffect() {
super(Outcome.Benefit);
staticText = "Mill two cards. Then if there is a colorless creature card in your graveyard, transform {this}";
}
private GrizzledAnglerEffect(final GrizzledAnglerEffect effect) {
super(effect);
}
@Override
public GrizzledAnglerEffect copy() {
return new GrizzledAnglerEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
controller.millCards(2, source, game);
if (controller.getGraveyard().count(filter, source.getControllerId(), source, game) >= 1) {
return new TransformSourceEffect().apply(game, source);
}
}
return false;
}
}

View file

@ -3,9 +3,8 @@ package mage.cards.l;
import mage.MageInt; import mage.MageInt;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.condition.common.YouGainedLifeCondition; import mage.abilities.condition.common.YouGainedLifeCondition;
import mage.abilities.dynamicvalue.common.ControllerGainedLifeCount;
import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.hint.ConditionHint;
import mage.abilities.hint.Hint;
import mage.abilities.keyword.FirstStrikeAbility; import mage.abilities.keyword.FirstStrikeAbility;
import mage.abilities.keyword.LifelinkAbility; import mage.abilities.keyword.LifelinkAbility;
import mage.abilities.keyword.TransformAbility; import mage.abilities.keyword.TransformAbility;
@ -26,7 +25,6 @@ import java.util.UUID;
public final class LoneRider extends CardImpl { public final class LoneRider extends CardImpl {
private static final Condition condition = new YouGainedLifeCondition(ComparisonType.MORE_THAN, 2); private static final Condition condition = new YouGainedLifeCondition(ComparisonType.MORE_THAN, 2);
private static final Hint hint = new ConditionHint(condition);
public LoneRider(UUID ownerId, CardSetInfo setInfo) { public LoneRider(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");
@ -47,7 +45,7 @@ public final class LoneRider extends CardImpl {
this.addAbility(new TransformAbility()); this.addAbility(new TransformAbility());
this.addAbility(new BeginningOfEndStepTriggeredAbility( this.addAbility(new BeginningOfEndStepTriggeredAbility(
TargetController.NEXT, new TransformSourceEffect(), false TargetController.NEXT, new TransformSourceEffect(), false
).withInterveningIf(condition).addHint(hint), new PlayerGainedLifeWatcher()); ).withInterveningIf(condition).addHint(ControllerGainedLifeCount.getHint()), new PlayerGainedLifeWatcher());
} }
private LoneRider(final LoneRider card) { private LoneRider(final LoneRider card) {

View file

@ -1,14 +1,10 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.keyword.TransformAbility; import mage.abilities.keyword.TransformAbility;
@ -16,9 +12,10 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
* @author fireshoes * @author fireshoes
*/ */
@ -34,9 +31,7 @@ public final class SmolderingWerewolf extends CardImpl {
this.secondSideCardClazz = mage.cards.e.EruptingDreadwolf.class; this.secondSideCardClazz = mage.cards.e.EruptingDreadwolf.class;
// When Smoldering Werewolf enters the battlefield, it deals 1 damage to each of up to two target creatures. // When Smoldering Werewolf enters the battlefield, it deals 1 damage to each of up to two target creatures.
Effect effect = new DamageTargetEffect(1); Ability ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(1, "it"));
effect.setText("it deals 1 damage to each of up to two target creatures");
Ability ability = new EntersBattlefieldTriggeredAbility(effect, false);
ability.addTarget(new TargetCreaturePermanent(0, 2)); ability.addTarget(new TargetCreaturePermanent(0, 2));
this.addAbility(ability); this.addAbility(ability);

View file

@ -1,7 +1,6 @@
package mage.cards.v; package mage.cards.v;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect; import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
@ -10,23 +9,17 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.predicate.Predicates; import mage.filter.common.FilterInstantOrSorceryCard;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class VoraciousReader extends CardImpl { public final class VoraciousReader extends CardImpl {
private static final FilterCard filter = new FilterCard("Instant and sorcery spells"); private static final FilterCard filter = new FilterInstantOrSorceryCard("Instant and sorcery spells");
static {
filter.add(Predicates.or(
CardType.INSTANT.getPredicate(),
CardType.SORCERY.getPredicate()
));
}
public VoraciousReader(UUID ownerId, CardSetInfo setInfo) { public VoraciousReader(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");