simplify constructors for ActivateIfConditionActivatedAbility

This commit is contained in:
theelk801 2025-06-18 15:32:44 -04:00
parent bbbc2e5baf
commit 84dc2a27ab
128 changed files with 882 additions and 1299 deletions

View file

@ -1,7 +1,5 @@
package mage.cards.a; package mage.cards.a;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -13,25 +11,27 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
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
*/ */
public final class AlabornVeteran extends CardImpl { public final class AlabornVeteran extends CardImpl {
public AlabornVeteran(UUID ownerId, CardSetInfo setInfo) { public AlabornVeteran(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.KNIGHT); this.subtype.add(SubType.KNIGHT);
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// {tap}: Target creature gets +2/+2 until end of turn. Activate this ability only during your turn, before attackers are declared. // {tap}: Target creature gets +2/+2 until end of turn. Activate this ability only during your turn, before attackers are declared.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, Ability ability = new ActivateIfConditionActivatedAbility(
new BoostTargetEffect(2, 2, Duration.EndOfTurn), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance); new BoostTargetEffect(2, 2, Duration.EndOfTurn),
new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -11,7 +11,10 @@ import mage.abilities.hint.common.CovenHint;
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.*; import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
@ -46,8 +49,7 @@ public final class AmbitiousFarmhand extends CardImpl {
// Coven{1}{W}{W}: Transform Ambitious Farmhand. Activate only if you control three or more creatures with different powers. // Coven{1}{W}{W}: Transform Ambitious Farmhand. Activate only if you control three or more creatures with different powers.
this.addAbility(new TransformAbility()); this.addAbility(new TransformAbility());
this.addAbility(new ActivateIfConditionActivatedAbility( this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new TransformSourceEffect(), new TransformSourceEffect(), new ManaCostsImpl<>("{1}{W}{W}"), CovenCondition.instance
new ManaCostsImpl<>("{1}{W}{W}"), CovenCondition.instance
).setAbilityWord(AbilityWord.COVEN).addHint(CovenHint.instance)); ).setAbilityWord(AbilityWord.COVEN).addHint(CovenHint.instance));
} }

View file

@ -1,28 +1,26 @@
package mage.cards.a; package mage.cards.a;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.PreventAllDamageByAllPermanentsEffect; import mage.abilities.effects.common.PreventAllDamageByAllPermanentsEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.game.Game; import mage.game.Game;
import java.util.UUID;
/** /**
*
* @author shieldal * @author shieldal
*/ */
public final class AngusMackenzie extends CardImpl { public final class AngusMackenzie extends CardImpl {
public AngusMackenzie(UUID ownerId, CardSetInfo setInfo) { public AngusMackenzie(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{G}{W}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{W}{U}");
this.supertype.add(SuperType.LEGENDARY); this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.CLERIC); this.subtype.add(SubType.CLERIC);
@ -30,14 +28,11 @@ public final class AngusMackenzie extends CardImpl {
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
Effect effect = new PreventAllDamageByAllPermanentsEffect(Duration.EndOfTurn, true);
effect.setText("Prevent all combat damage that would be dealt this turn");
// {G}{W}{U}, {tap}: Prevent all combat damage that would be dealt this turn. Activate this ability only before the combat damage step. // {G}{W}{U}, {tap}: Prevent all combat damage that would be dealt this turn. Activate this ability only before the combat damage step.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new PreventAllDamageByAllPermanentsEffect(Duration.EndOfTurn, true)
effect, .setText("Prevent all combat damage that would be dealt this turn"),
new ManaCostsImpl<>("{G}{W}{U}"), new ManaCostsImpl<>("{G}{W}{U}"), BeforeCombatDamageCondition.getInstance()
BeforeCombatDamageCondition.getInstance()
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
this.addAbility(ability); this.addAbility(ability);
@ -63,7 +58,7 @@ class BeforeCombatDamageCondition implements Condition {
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
PhaseStep phaseStep = game.getTurnStepType(); PhaseStep phaseStep = game.getTurnStepType();
if(phaseStep.getIndex() < PhaseStep.FIRST_COMBAT_DAMAGE.getIndex()) { if (phaseStep.getIndex() < PhaseStep.FIRST_COMBAT_DAMAGE.getIndex()) {
return true; return true;
} }
return false; return false;

View file

@ -1,7 +1,5 @@
package mage.cards.a; package mage.cards.a;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -12,25 +10,27 @@ 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.TargetAnyTarget; import mage.target.common.TargetAnyTarget;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class ApprenticeSorcerer extends CardImpl { public final class ApprenticeSorcerer extends CardImpl {
public ApprenticeSorcerer(UUID ownerId, CardSetInfo setInfo) { public ApprenticeSorcerer(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);
this.subtype.add(SubType.WIZARD); this.subtype.add(SubType.WIZARD);
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {tap}: Apprentice Sorcerer deals 1 damage to any target. Activate this ability only during your turn, before attackers are declared. // {tap}: Apprentice Sorcerer deals 1 damage to any target. Activate this ability only during your turn, before attackers are declared.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, Ability ability = new ActivateIfConditionActivatedAbility(
new DamageTargetEffect(1), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance); new DamageTargetEffect(1), new TapSourceCost(),
MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -37,13 +37,9 @@ public final class ArgentSphinx extends CardImpl {
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// <i>Metalcraft</i> &mdash; {U}: Exile Argent Sphinx. Return it to the battlefield under your control at the beginning of the next end step. Activate this ability only if you control three or more artifacts. // <i>Metalcraft</i> &mdash; {U}: Exile Argent Sphinx. Return it to the battlefield under your control at the beginning of the next end step. Activate this ability only if you control three or more artifacts.
Ability ability = new ActivateIfConditionActivatedAbility( this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new ArgentSphinxEffect(), new ArgentSphinxEffect(), new ManaCostsImpl<>("{U}"), MetalcraftCondition.instance
new ManaCostsImpl<>("{U}"), MetalcraftCondition.instance ).setAbilityWord(AbilityWord.METALCRAFT).addHint(MetalcraftHint.instance));
);
ability.setAbilityWord(AbilityWord.METALCRAFT);
ability.addHint(MetalcraftHint.instance);
this.addAbility(ability);
} }
private ArgentSphinx(final ArgentSphinx card) { private ArgentSphinx(final ArgentSphinx card) {

View file

@ -1,38 +1,36 @@
package mage.cards.a; package mage.cards.a;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.FormidableCondition; import mage.abilities.condition.common.FormidableCondition;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class AtarkaBeastbreaker extends CardImpl { public final class AtarkaBeastbreaker extends CardImpl {
public AtarkaBeastbreaker(UUID ownerId, CardSetInfo setInfo) { public AtarkaBeastbreaker(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.WARRIOR); this.subtype.add(SubType.WARRIOR);
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// <i>Formidable</i> &mdash; {4}{G}: Atarka Beastbreaker gets +4/+4 until end of turn. Activate this only if creatures you control have total power 8 or greater. // <i>Formidable</i> &mdash; {4}{G}: Atarka Beastbreaker gets +4/+4 until end of turn. Activate this only if creatures you control have total power 8 or greater.
Ability ability = new ActivateIfConditionActivatedAbility( this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new BoostSourceEffect(4, 4, Duration.EndOfTurn),
new BoostSourceEffect(4,4, Duration.EndOfTurn), new ManaCostsImpl<>("{4}{G}"), FormidableCondition.instance
new ManaCostsImpl<>("{4}{G}"), ).setAbilityWord(AbilityWord.FORMIDABLE));
FormidableCondition.instance);
ability.setAbilityWord(AbilityWord.FORMIDABLE);
this.addAbility(ability);
} }
private AtarkaBeastbreaker(final AtarkaBeastbreaker card) { private AtarkaBeastbreaker(final AtarkaBeastbreaker card) {

View file

@ -1,8 +1,6 @@
package mage.cards.a; package mage.cards.a;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.FormidableCondition; import mage.abilities.condition.common.FormidableCondition;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
@ -10,31 +8,30 @@ import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
import mage.abilities.keyword.MenaceAbility; import mage.abilities.keyword.MenaceAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class AtarkaPummeler extends CardImpl { public final class AtarkaPummeler extends CardImpl {
public AtarkaPummeler(UUID ownerId, CardSetInfo setInfo) { public AtarkaPummeler(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}");
this.subtype.add(SubType.OGRE); this.subtype.add(SubType.OGRE);
this.subtype.add(SubType.WARRIOR); this.subtype.add(SubType.WARRIOR);
this.power = new MageInt(4); this.power = new MageInt(4);
this.toughness = new MageInt(5); this.toughness = new MageInt(5);
// <i>Formidable</i> &mdash; {3}{R}{R}: Creatures you control gain menace until end of turn. Activate this ability only if creature you control have total power 8 or greater. (They can't be blocked except by two or more creatures.) // <i>Formidable</i> &mdash; {3}{R}{R}: Creatures you control gain menace until end of turn. Activate this ability only if creature you control have total power 8 or greater. (They can't be blocked except by two or more creatures.)
Ability ability = new ActivateIfConditionActivatedAbility( this.addAbility(new ActivateIfConditionActivatedAbility(new GainAbilityAllEffect(
Zone.BATTLEFIELD, new MenaceAbility(false), Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES
new GainAbilityAllEffect(new MenaceAbility(), Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES), ), new ManaCostsImpl<>("{3}{R}{R}"), FormidableCondition.instance).setAbilityWord(AbilityWord.FORMIDABLE));
new ManaCostsImpl<>("{3}{R}{R}"),
FormidableCondition.instance);
ability.setAbilityWord(AbilityWord.FORMIDABLE);
this.addAbility(ability);
} }
private AtarkaPummeler(final AtarkaPummeler card) { private AtarkaPummeler(final AtarkaPummeler card) {

View file

@ -9,13 +9,13 @@ import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.dynamicvalue.common.GetXValue; import mage.abilities.dynamicvalue.common.GetXValue;
import mage.abilities.effects.keyword.AmassEffect; import mage.abilities.effects.keyword.AmassEffect;
import mage.abilities.hint.common.MorbidHint;
import mage.abilities.mana.BlackManaAbility; import mage.abilities.mana.BlackManaAbility;
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.SuperType; import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledCreaturePermanent;
@ -47,13 +47,11 @@ public final class BaradDur extends CardImpl {
// {X}{X}{B}, {T}: Amass Orcs X. Activate only if a creature died this turn. // {X}{X}{B}, {T}: Amass Orcs X. Activate only if a creature died this turn.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new AmassEffect(GetXValue.instance, SubType.ORC, false), new AmassEffect(GetXValue.instance, SubType.ORC, false),
new ManaCostsImpl<>("{X}{X}{B}"), new ManaCostsImpl<>("{X}{X}{B}"), MorbidCondition.instance
MorbidCondition.instance
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
this.addAbility(ability); this.addAbility(ability.addHint(MorbidHint.instance));
} }
private BaradDur(final BaradDur card) { private BaradDur(final BaradDur card) {

View file

@ -1,18 +1,17 @@
package mage.cards.b; package mage.cards.b;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; 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.hint.ValueHint;
import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.TransformAbility; import mage.abilities.keyword.TransformAbility;
@ -21,16 +20,22 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone; import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
import mage.game.permanent.token.VampireToken; import mage.game.permanent.token.VampireToken;
import java.util.UUID;
/** /**
* @author Loki * @author Loki
*/ */
public final class BloodlineKeeper extends CardImpl { public final class BloodlineKeeper extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.VAMPIRE, "you control five or more Vampires"); private static final FilterPermanent filter
= new FilterControlledPermanent(SubType.VAMPIRE, "you control five or more Vampires");
private static final Condition condition
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 4);
private static final Hint hint = new ValueHint("Vampires you control", new PermanentsOnBattlefieldCount(filter));
public BloodlineKeeper(UUID ownerId, CardSetInfo setInfo) { public BloodlineKeeper(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{B}");
@ -42,15 +47,15 @@ public final class BloodlineKeeper extends CardImpl {
this.secondSideCardClazz = mage.cards.l.LordOfLineage.class; this.secondSideCardClazz = mage.cards.l.LordOfLineage.class;
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// {T}: Create a 2/2 black Vampire creature token with flying. // {T}: Create a 2/2 black Vampire creature token with flying.
this.addAbility(new SimpleActivatedAbility(new CreateTokenEffect(new VampireToken()), new TapSourceCost())); this.addAbility(new SimpleActivatedAbility(new CreateTokenEffect(new VampireToken()), new TapSourceCost()));
// {B}: Transform Bloodline Keeper. Activate this ability only if you control five or more Vampires. // {B}: Transform Bloodline Keeper. Activate this ability only if you control five or more Vampires.
this.addAbility(new TransformAbility()); this.addAbility(new TransformAbility());
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, this.addAbility(new ActivateIfConditionActivatedAbility(
new TransformSourceEffect(), new TransformSourceEffect(), new ManaCostsImpl<>("{B}"), condition
new ManaCostsImpl<>("{B}"), ).addHint(hint));
new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 4));
this.addAbility(ability.addHint(new ValueHint("Vampires you control", new PermanentsOnBattlefieldCount(filter))));
} }
private BloodlineKeeper(final BloodlineKeeper card) { private BloodlineKeeper(final BloodlineKeeper card) {

View file

@ -10,7 +10,6 @@ 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.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -31,8 +30,7 @@ public final class BloodshotTrainee extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new DamageTargetEffect(4), new DamageTargetEffect(4), new TapSourceCost(), BloodshotTraineeCondition.instance
new TapSourceCost(), BloodshotTraineeCondition.instance
); );
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);

View file

@ -1,10 +1,10 @@
package mage.cards.b; package mage.cards.b;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.DynamicValue;
@ -17,37 +17,40 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
*
* @author LevelX * @author LevelX
*/ */
public final class BloodthirstyOgre extends CardImpl { public final class BloodthirstyOgre extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.DEMON, "you control a Demon");
private static final DynamicValue xValue = new SignInversionDynamicValue(new CountersSourceCount(CounterType.DEVOTION)); private static final DynamicValue xValue = new SignInversionDynamicValue(new CountersSourceCount(CounterType.DEVOTION));
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
new FilterControlledPermanent(SubType.DEMON, "you control a Demon")
);
public BloodthirstyOgre(UUID ownerId, CardSetInfo setInfo) { public BloodthirstyOgre(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
this.subtype.add(SubType.OGRE, SubType.WARRIOR, SubType.SHAMAN); this.subtype.add(SubType.OGRE, SubType.WARRIOR, SubType.SHAMAN);
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {T}: Put a devotion counter on Bloodthirsty Ogre // {T}: Put a devotion counter on Bloodthirsty Ogre
this.addAbility(new SimpleActivatedAbility(new AddCountersSourceEffect(CounterType.DEVOTION.createInstance()),new TapSourceCost())); this.addAbility(new SimpleActivatedAbility(new AddCountersSourceEffect(CounterType.DEVOTION.createInstance()), new TapSourceCost()));
// {T}: Target creature gets -X/-X until end of turn, where X is the number of devotion counters on Bloodthirsty Ogre. Activate this ability only if you control a Demon. // {T}: Target creature gets -X/-X until end of turn, where X is the number of devotion counters on Bloodthirsty Ogre. Activate this ability only if you control a Demon.
Ability ability = new ActivateIfConditionActivatedAbility(
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
new BoostTargetEffect(xValue, xValue, Duration.EndOfTurn) new BoostTargetEffect(xValue, xValue, Duration.EndOfTurn)
.setText("target creature gets -X/-X until end of turn, where X is the number of devotion counters on {this}"), .setText("target creature gets -X/-X until end of turn, " +
new TapSourceCost(), "where X is the number of devotion counters on {this}"),
new PermanentsOnTheBattlefieldCondition(filter)); new TapSourceCost(), condition
);
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -10,7 +10,6 @@ import mage.abilities.mana.ColorlessManaAbility;
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.Zone;
import java.util.UUID; import java.util.UUID;
@ -27,8 +26,7 @@ public final class BondersEnclave extends CardImpl {
// {3}, {T}: Draw a card. Activate this ability only if you control a creature with power 4 or greater. // {3}, {T}: Draw a card. Activate this ability only if you control a creature with power 4 or greater.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new DrawCardSourceControllerEffect(1), new GenericManaCost(3), FerociousCondition.instance
new GenericManaCost(3), FerociousCondition.instance
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
this.addAbility(ability); this.addAbility(ability);

View file

@ -8,8 +8,9 @@ import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.continuous.SetBasePowerToughnessSourceEffect; import mage.abilities.effects.common.continuous.SetBasePowerToughnessSourceEffect;
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.FilterPermanent; import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.common.FilterControlledPlaneswalkerPermanent; import mage.filter.common.FilterControlledPlaneswalkerPermanent;
import java.util.UUID; import java.util.UUID;
@ -19,9 +20,9 @@ import java.util.UUID;
*/ */
public final class BramblefortFink extends CardImpl { public final class BramblefortFink extends CardImpl {
private static final FilterPermanent filter private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
= new FilterControlledPlaneswalkerPermanent(SubType.OKO, "you control an Oko planeswalker"); new FilterControlledPlaneswalkerPermanent(SubType.OKO, "you control an Oko planeswalker")
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter); );
public BramblefortFink(UUID ownerId, CardSetInfo setInfo) { public BramblefortFink(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
@ -32,10 +33,10 @@ public final class BramblefortFink extends CardImpl {
// {8}: Bramblefort Fink has base power and toughness 10/10 until end of turn. Activate this ability only if you control an Oko planeswalker. // {8}: Bramblefort Fink has base power and toughness 10/10 until end of turn. Activate this ability only if you control an Oko planeswalker.
this.addAbility(new ActivateIfConditionActivatedAbility( this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new SetBasePowerToughnessSourceEffect(
new SetBasePowerToughnessSourceEffect(10, 10, Duration.EndOfTurn), 10, 10, Duration.EndOfTurn
new GenericManaCost(8), ), new GenericManaCost(8), condition
condition)); ));
} }
private BramblefortFink(final BramblefortFink card) { private BramblefortFink(final BramblefortFink card) {

View file

@ -12,7 +12,6 @@ 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 java.util.UUID; import java.util.UUID;
@ -30,8 +29,7 @@ public final class CagedZombie extends CardImpl {
// {1}{B}, {T}: Each opponent loses 2 life. Activate this ability only if a creature died this turn. // {1}{B}, {T}: Each opponent loses 2 life. Activate this ability only if a creature died this turn.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new LoseLifeOpponentsEffect(2), new LoseLifeOpponentsEffect(2), new ManaCostsImpl<>("{1}{B}"), MorbidCondition.instance
new ManaCostsImpl<>("{1}{B}"), MorbidCondition.instance
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
this.addAbility(ability.addHint(MorbidHint.instance)); this.addAbility(ability.addHint(MorbidHint.instance));

View file

@ -1,28 +1,27 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.CovenCondition; import mage.abilities.condition.common.CovenCondition;
import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.ExileAttachedEffect; import mage.abilities.effects.common.ExileAttachedEffect;
import mage.abilities.effects.common.PreventAllDamageByAttachedEffect; import mage.abilities.effects.common.PreventAllDamageByAttachedEffect;
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.hint.common.CovenHint; import mage.abilities.hint.common.CovenHint;
import mage.abilities.keyword.DefenderAbility; import mage.abilities.keyword.DefenderAbility;
import mage.constants.*;
import mage.target.common.TargetCreaturePermanent;
import mage.abilities.Ability;
import mage.abilities.effects.common.AttachEffect;
import mage.target.TargetPermanent;
import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.EnchantAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
*
* @author weirddan455 * @author weirddan455
*/ */
public final class Candletrap extends CardImpl { public final class Candletrap extends CardImpl {
@ -36,21 +35,22 @@ public final class Candletrap extends CardImpl {
TargetPermanent auraTarget = new TargetCreaturePermanent(); TargetPermanent auraTarget = new TargetCreaturePermanent();
this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
Ability ability = new EnchantAbility(auraTarget); this.addAbility(new EnchantAbility(auraTarget));
this.addAbility(ability);
// Enchanted creature has defender. // Enchanted creature has defender.
this.addAbility(new SimpleStaticAbility(new GainAbilityAttachedEffect(DefenderAbility.getInstance(), AttachmentType.AURA))); this.addAbility(new SimpleStaticAbility(new GainAbilityAttachedEffect(DefenderAbility.getInstance(), AttachmentType.AURA)));
// Prevent all combat damage that would be dealt by enchanted creature. // Prevent all combat damage that would be dealt by enchanted creature.
this.addAbility(new SimpleStaticAbility(new PreventAllDamageByAttachedEffect(Duration.WhileOnBattlefield, "enchanted creature", true))); this.addAbility(new SimpleStaticAbility(new PreventAllDamageByAttachedEffect(
Duration.WhileOnBattlefield, "enchanted creature", true
)));
// Coven {2}{W}, Sacrifice Candletrap: Exile enchanted creature. Activate only if you control three or more creatures with different powers. // Coven {2}{W}, Sacrifice Candletrap: Exile enchanted creature. Activate only if you control three or more creatures with different powers.
ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new ExileAttachedEffect(), new ManaCostsImpl<>("{2}{W}"), CovenCondition.instance); Ability ability = new ActivateIfConditionActivatedAbility(
new ExileAttachedEffect(), new ManaCostsImpl<>("{2}{W}"), CovenCondition.instance
);
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
ability.setAbilityWord(AbilityWord.COVEN); this.addAbility(ability.setAbilityWord(AbilityWord.COVEN).addHint(CovenHint.instance));
ability.addHint(CovenHint.instance);
this.addAbility(ability);
} }
private Candletrap(final Candletrap card) { private Candletrap(final Candletrap card) {

View file

@ -1,7 +1,5 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -13,17 +11,17 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.constants.Zone;
import mage.target.common.TargetOpponent; import mage.target.common.TargetOpponent;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class CaoCaoLordOfWei extends CardImpl { public final class CaoCaoLordOfWei extends CardImpl {
public CaoCaoLordOfWei(UUID ownerId, CardSetInfo setInfo) { public CaoCaoLordOfWei(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}{B}");
this.supertype.add(SuperType.LEGENDARY); this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.SOLDIER); this.subtype.add(SubType.SOLDIER);
@ -32,7 +30,9 @@ public final class CaoCaoLordOfWei extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// {tap}: Target opponent discards two cards. Activate this ability only during your turn, before attackers are declared. // {tap}: Target opponent discards two cards. Activate this ability only during your turn, before attackers are declared.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new DiscardTargetEffect(2), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance); Ability ability = new ActivateIfConditionActivatedAbility(
new DiscardTargetEffect(2), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetOpponent()); ability.addTarget(new TargetOpponent());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,7 +1,5 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -12,25 +10,27 @@ 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.TargetAnyTarget; import mage.target.common.TargetAnyTarget;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class CapriciousSorcerer extends CardImpl { public final class CapriciousSorcerer extends CardImpl {
public CapriciousSorcerer(UUID ownerId, CardSetInfo setInfo) { public CapriciousSorcerer(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);
this.subtype.add(SubType.WIZARD); this.subtype.add(SubType.WIZARD);
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {tap}: Capricious Sorcerer deals 1 damage to any target. Activate this ability only during your turn, before attackers are declared. // {tap}: Capricious Sorcerer deals 1 damage to any target. Activate this ability only during your turn, before attackers are declared.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, Ability ability = new ActivateIfConditionActivatedAbility(
new DamageTargetEffect(1), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance); new DamageTargetEffect(1), new TapSourceCost(),
MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -13,7 +13,6 @@ 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.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AbilityPredicate; import mage.filter.predicate.mageobject.AbilityPredicate;
@ -45,7 +44,7 @@ public final class CelestialEnforcer extends CardImpl {
// {1}{W}, {T}: Tap target creature. Activate this ability only if you control a creature with flying. // {1}{W}, {T}: Tap target creature. Activate this ability only if you control a creature with flying.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new TapTargetEffect(), new ManaCostsImpl<>("{1}{W}"), condition new TapTargetEffect(), new ManaCostsImpl<>("{1}{W}"), condition
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());

View file

@ -13,9 +13,7 @@ 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.StaticFilters; import mage.filter.StaticFilters;
import mage.target.common.TargetControlledPermanent;
import java.util.UUID; import java.util.UUID;
@ -36,8 +34,7 @@ public final class ChainedBrute extends CardImpl {
// {1}, Sacrifice another creature: Untap Chained Brute. Activate this ability only during your turn. // {1}, Sacrifice another creature: Untap Chained Brute. Activate this ability only during your turn.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new UntapSourceEffect(), new UntapSourceEffect(), new GenericManaCost(1), MyTurnCondition.instance
new GenericManaCost(1), MyTurnCondition.instance
); );
ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)); ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE));
this.addAbility(ability); this.addAbility(ability);

View file

@ -2,17 +2,16 @@ package mage.cards.c;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
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.WatcherScope; import mage.constants.WatcherScope;
import mage.constants.Zone;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
@ -59,7 +58,7 @@ public final class ChurningReservoir extends CardImpl {
// {2}, {T}: Create a 1/1 red Phyrexian Goblin creature token. Activate only if an oil counter was removed from a permanent you controlled this turn or a permanent with an oil counter on it was put into a graveyard this turn. // {2}, {T}: Create a 1/1 red Phyrexian Goblin creature token. Activate only if an oil counter was removed from a permanent you controlled this turn or a permanent with an oil counter on it was put into a graveyard this turn.
ability = new ActivateIfConditionActivatedAbility( ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new CreateTokenEffect(new PhyrexianGoblinToken()), new CreateTokenEffect(new PhyrexianGoblinToken()),
new GenericManaCost(2), ChurningReservoirCondition.instance new GenericManaCost(2), ChurningReservoirCondition.instance
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());

View file

@ -14,7 +14,6 @@ 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.counters.CounterType; import mage.counters.CounterType;
import mage.target.TargetPlayer; import mage.target.TargetPlayer;
@ -34,14 +33,16 @@ public final class CinderhazeWretch extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// {T}: Target player discards a card. Activate this ability only during your turn. // {T}: Target player discards a card. Activate this ability only during your turn.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new DiscardTargetEffect(1), new TapSourceCost(), MyTurnCondition.instance); Ability ability = new ActivateIfConditionActivatedAbility(
ability.addHint(MyTurnHint.instance); new DiscardTargetEffect(1), new TapSourceCost(), MyTurnCondition.instance
);
ability.addTarget(new TargetPlayer()); ability.addTarget(new TargetPlayer());
this.addAbility(ability); this.addAbility(ability.addHint(MyTurnHint.instance));
// Put a -1/-1 counter on Cinderhaze Wretch: Untap Cinderhaze Wretch. // Put a -1/-1 counter on Cinderhaze Wretch: Untap Cinderhaze Wretch.
this.addAbility(new SimpleActivatedAbility(new UntapSourceEffect(), new PutCountersSourceCost(CounterType.M1M1.createInstance(1)))); this.addAbility(new SimpleActivatedAbility(
new UntapSourceEffect(), new PutCountersSourceCost(CounterType.M1M1.createInstance(1))
));
} }
private CinderhazeWretch(final CinderhazeWretch card) { private CinderhazeWretch(final CinderhazeWretch card) {

View file

@ -1,51 +1,40 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.MyTurnBeforeAttackersDeclaredCondition; import mage.abilities.condition.common.MyTurnBeforeAttackersDeclaredCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.effects.common.ReturnToHandSourceEffect;
import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.abilities.effects.common.ReturnToHandTargetEffect;
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.Zone; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent; import mage.target.TargetPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.common.TargetCreaturePermanent; import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class CoastalWizard extends CardImpl { public final class CoastalWizard extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another target creature");
static {
filter.add(AnotherPredicate.instance);
}
public CoastalWizard(UUID ownerId, CardSetInfo setInfo) { public CoastalWizard(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}{U}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.WIZARD); this.subtype.add(SubType.WIZARD);
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {tap}: Return Coastal Wizard and another target creature to their owners' hands. Activate this ability only during your turn, before attackers are declared. // {tap}: Return Coastal Wizard and another target creature to their owners' hands. Activate this ability only during your turn, before attackers are declared.
Effect effect = new ReturnToHandSourceEffect(true); Ability ability = new ActivateIfConditionActivatedAbility(
effect.setText("Return Coastal Wizard"); new ReturnToHandSourceEffect(true).setText("return {this}"),
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
effect, new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance); );
effect = new ReturnToHandTargetEffect(); ability.addEffect(new ReturnToHandTargetEffect().setText("and another target creature to their owners' hands"));
effect.setText("and another target creature to their owners' hands"); ability.addTarget(new TargetPermanent(StaticFilters.FILTER_ANOTHER_TARGET_CREATURE));
ability.addTarget(new TargetCreaturePermanent(filter));
ability.addEffect(effect);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,9 +1,9 @@
package mage.cards.c; package mage.cards.c;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.UntapTargetEffect; import mage.abilities.effects.common.UntapTargetEffect;
@ -12,22 +12,19 @@ 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.common.FilterControlledPlaneswalkerPermanent;
import mage.filter.common.FilterPlaneswalkerPermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID; import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class CompanionOfTheTrials extends CardImpl { public final class CompanionOfTheTrials extends CardImpl {
private static final FilterPlaneswalkerPermanent filter = new FilterPlaneswalkerPermanent("you control a Gideon planeswalker"); private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
static { new FilterControlledPlaneswalkerPermanent(SubType.GIDEON, "you control a Gideon planeswalker")
filter.add(SubType.GIDEON.getPredicate()); );
}
public CompanionOfTheTrials(UUID ownerId, CardSetInfo setInfo) { public CompanionOfTheTrials(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
@ -41,10 +38,9 @@ public final class CompanionOfTheTrials extends CardImpl {
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// {1}{W}: Untap target creature. Activate this ability only if you control a Gideon planeswalker. // {1}{W}: Untap target creature. Activate this ability only if you control a Gideon planeswalker.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, Ability ability = new ActivateIfConditionActivatedAbility(
new UntapTargetEffect(), new UntapTargetEffect(), new ManaCostsImpl<>("{1}{W}"), condition
new ManaCostsImpl<>("{1}{W}"), );
new PermanentsOnTheBattlefieldCondition(filter));
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -12,7 +12,10 @@ import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.continuous.SetBasePowerSourceEffect; import mage.abilities.effects.common.continuous.SetBasePowerSourceEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID; import java.util.UUID;
@ -38,14 +41,10 @@ public final class CraterElemental extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
// <i>Formidable</i> &mdash; {2}{R}: Crater Elemental has base power 8 until end of turn. Activate this ability only if creatures you control have total power 8 or greater. // <i>Formidable</i> &mdash; {2}{R}: Crater Elemental has base power 8 until end of turn. Activate this ability only if creatures you control have total power 8 or greater.
ability = new ActivateIfConditionActivatedAbility( this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new SetBasePowerSourceEffect(8, Duration.EndOfTurn), new SetBasePowerSourceEffect(8, Duration.EndOfTurn),
new ManaCostsImpl<>("{2}{R}"), new ManaCostsImpl<>("{2}{R}"), FormidableCondition.instance
FormidableCondition.instance ).setAbilityWord(AbilityWord.FORMIDABLE));
);
ability.setAbilityWord(AbilityWord.FORMIDABLE);
this.addAbility(ability);
} }
private CraterElemental(final CraterElemental card) { private CraterElemental(final CraterElemental card) {

View file

@ -4,16 +4,18 @@ import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.AttacksAllTriggeredAbility; import mage.abilities.common.AttacksAllTriggeredAbility;
import mage.abilities.condition.common.MyTurnCondition; import mage.abilities.condition.common.MyTurnCondition;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.ContinuousEffect; import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.effects.common.continuous.GainControlTargetEffect; import mage.abilities.effects.common.continuous.GainControlTargetEffect;
import mage.abilities.hint.common.MyTurnHint; import mage.abilities.hint.common.MyTurnHint;
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.constants.Duration;
import mage.constants.Outcome;
import mage.constants.SetTargetPointer;
import mage.filter.FilterPlayer; import mage.filter.FilterPlayer;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.predicate.ObjectSourcePlayer; import mage.filter.predicate.ObjectSourcePlayer;
@ -42,22 +44,18 @@ public final class CrownOfDoom extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
// Whenever a creature attacks you or a planeswalker you control, it gets +2/+0 until end of turn. // Whenever a creature attacks you or a planeswalker you control, it gets +2/+0 until end of turn.
Effect effect = new BoostTargetEffect(2, 0, Duration.EndOfTurn);
effect.setText("it gets +2/+0 until end of turn");
this.addAbility(new AttacksAllTriggeredAbility( this.addAbility(new AttacksAllTriggeredAbility(
effect, new BoostTargetEffect(2, 0, Duration.EndOfTurn)
false, .setText("it gets +2/+0 until end of turn"),
StaticFilters.FILTER_PERMANENT_CREATURE, false, StaticFilters.FILTER_PERMANENT_CREATURE,
SetTargetPointer.PERMANENT, SetTargetPointer.PERMANENT, true
true)); ));
// {2}: Target player other than Crown of Doom's owner gains control of it. Activate this ability only during your turn. // {2}: Target player other than Crown of Doom's owner gains control of it. Activate this ability only during your turn.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new CrownOfDoomEffect(), new GenericManaCost(2), MyTurnCondition.instance
new CrownOfDoomEffect(), );
new ManaCostsImpl<>("{2}"), ability.addTarget(new TargetPlayer(filter));
MyTurnCondition.instance);
ability.addTarget(new TargetPlayer(1, 1, false, filter));
ability.addHint(MyTurnHint.instance); ability.addHint(MyTurnHint.instance);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -8,13 +8,12 @@ import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.hint.common.LandsYouControlHint;
import mage.abilities.mana.ColorlessManaAbility; import mage.abilities.mana.ColorlessManaAbility;
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.ComparisonType; import mage.constants.ComparisonType;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledLandPermanent; import mage.filter.common.FilterControlledLandPermanent;
import java.util.UUID; import java.util.UUID;
@ -24,10 +23,9 @@ import java.util.UUID;
*/ */
public final class CrypticCaves extends CardImpl { public final class CrypticCaves extends CardImpl {
private static final FilterPermanent filter private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
= new FilterControlledLandPermanent("you control five or more lands"); new FilterControlledLandPermanent("you control five or more lands"), ComparisonType.MORE_THAN, 4
private static final Condition condition );
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 4);
public CrypticCaves(UUID ownerId, CardSetInfo setInfo) { public CrypticCaves(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
@ -37,12 +35,11 @@ public final class CrypticCaves extends CardImpl {
// {1}, {T}, Sacrifice Cryptic Caves: Draw a card. Activate this ability only if you control five or more lands. // {1}, {T}, Sacrifice Cryptic Caves: Draw a card. Activate this ability only if you control five or more lands.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new DrawCardSourceControllerEffect(1), new GenericManaCost(1), condition
new GenericManaCost(1), condition
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
this.addAbility(ability); this.addAbility(ability.addHint(LandsYouControlHint.instance));
} }
private CrypticCaves(final CrypticCaves card) { private CrypticCaves(final CrypticCaves card) {

View file

@ -1,7 +1,5 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -12,25 +10,27 @@ 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.TargetOpponent; import mage.target.common.TargetOpponent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class CunningAdvisor extends CardImpl { public final class CunningAdvisor extends CardImpl {
public CunningAdvisor(UUID ownerId, CardSetInfo setInfo) { public CunningAdvisor(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.ADVISOR); this.subtype.add(SubType.ADVISOR);
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {tap}: Target opponent discards a card. Activate this ability only during your turn, before attackers are declared. // {tap}: Target opponent discards a card. Activate this ability only during your turn, before attackers are declared.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, Ability ability = new ActivateIfConditionActivatedAbility(
new DiscardTargetEffect(1), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance); new DiscardTargetEffect(1), new TapSourceCost(),
MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetOpponent()); ability.addTarget(new TargetOpponent());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -13,7 +13,10 @@ import mage.abilities.hint.common.CovenHint;
import mage.abilities.keyword.TrampleAbility; import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.game.permanent.token.HumanToken; import mage.game.permanent.token.HumanToken;
import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetControlledCreaturePermanent;
@ -37,7 +40,7 @@ public final class DawnhartMentor extends CardImpl {
// Coven {5}{G}: Target creature you control gets +3/+3 and gains trample until end of turn. Activate only if you control three or more creatures with different powers. // Coven {5}{G}: Target creature you control gets +3/+3 and gains trample until end of turn. Activate only if you control three or more creatures with different powers.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new BoostTargetEffect(3, 3) new BoostTargetEffect(3, 3)
.setText("target creature you control gets +3/+3"), .setText("target creature you control gets +3/+3"),
new ManaCostsImpl<>("{5}{G}"), CovenCondition.instance new ManaCostsImpl<>("{5}{G}"), CovenCondition.instance
); );

View file

@ -17,7 +17,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.constants.Zone;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.game.permanent.token.WhiteAstartesWarriorToken; import mage.game.permanent.token.WhiteAstartesWarriorToken;
@ -29,7 +28,8 @@ import java.util.UUID;
public final class DefendersOfHumanity extends CardImpl { public final class DefendersOfHumanity extends CardImpl {
private static final Condition condition = new CompoundCondition( private static final Condition condition = new CompoundCondition(
"you control no creatures and only during your turn", MyTurnCondition.instance, "you control no creatures and only during your turn",
MyTurnCondition.instance,
new PermanentsOnTheBattlefieldCondition( new PermanentsOnTheBattlefieldCondition(
StaticFilters.FILTER_PERMANENT_CREATURE, StaticFilters.FILTER_PERMANENT_CREATURE,
ComparisonType.EQUAL_TO, 0, true ComparisonType.EQUAL_TO, 0, true
@ -46,13 +46,12 @@ public final class DefendersOfHumanity extends CardImpl {
// {X}{2}{W}, Exile Defenders of Humanity: Create X 2/2 white Astartes Warrior creature tokens with vigilance. Activate only if you control no creatures and only during your turn. // {X}{2}{W}, Exile Defenders of Humanity: Create X 2/2 white Astartes Warrior creature tokens with vigilance. Activate only if you control no creatures and only during your turn.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new CreateTokenEffect( new CreateTokenEffect(
new WhiteAstartesWarriorToken(), mage.abilities.dynamicvalue.common.GetXValue.instance new WhiteAstartesWarriorToken(), GetXValue.instance
), new ManaCostsImpl<>("{X}{2}{W}"), condition ), new ManaCostsImpl<>("{X}{2}{W}"), condition
).addHint(CreaturesYouControlHint.instance).addHint(MyTurnHint.instance); );
ability.addCost(new ExileSourceCost()); ability.addCost(new ExileSourceCost());
this.addAbility(ability); this.addAbility(ability.addHint(CreaturesYouControlHint.instance).addHint(MyTurnHint.instance));
} }
private DefendersOfHumanity(final DefendersOfHumanity card) { private DefendersOfHumanity(final DefendersOfHumanity card) {

View file

@ -10,10 +10,13 @@ import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.ChooseACardNameEffect; import mage.abilities.effects.common.ChooseACardNameEffect;
import mage.abilities.effects.common.continuous.GainAbilityAllEffect; import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
import mage.abilities.hint.common.MyTurnHint;
import mage.cards.*; import mage.cards.*;
import mage.constants.*; import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.players.Player; import mage.players.Player;
import mage.target.common.TargetOpponent; import mage.target.common.TargetOpponent;
@ -39,12 +42,15 @@ public final class DementiaSliver extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// All Slivers have "{T}: Name a card. Target opponent reveals a card at random from their hand. If it's the named card, that player discards it. Activate this ability only during your turn." // All Slivers have "{T}: Name a card. Target opponent reveals a card at random from their hand. If it's the named card, that player discards it. Activate this ability only during your turn."
Ability gainedAbility = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new ChooseACardNameEffect(ChooseACardNameEffect.TypeOfName.ALL), new TapSourceCost(), MyTurnCondition.instance); Ability gainedAbility = new ActivateIfConditionActivatedAbility(
new ChooseACardNameEffect(ChooseACardNameEffect.TypeOfName.ALL),
new TapSourceCost(), MyTurnCondition.instance
);
gainedAbility.addEffect(new DementiaSliverEffect()); gainedAbility.addEffect(new DementiaSliverEffect());
gainedAbility.addTarget(new TargetOpponent()); gainedAbility.addTarget(new TargetOpponent());
gainedAbility.addHint(MyTurnHint.instance);
this.addAbility(new SimpleStaticAbility( this.addAbility(new SimpleStaticAbility(
new GainAbilityAllEffect(gainedAbility, Duration.WhileOnBattlefield, filter, new GainAbilityAllEffect(
gainedAbility, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_ALL_SLIVERS,
"All Slivers have \"{T}: Choose a card name. " "All Slivers have \"{T}: Choose a card name. "
+ "Target opponent reveals a card at random from their hand." + "Target opponent reveals a card at random from their hand."
+ " If that card has the chosen name, that player discards it." + " If that card has the chosen name, that player discards it."
@ -67,7 +73,7 @@ class DementiaSliverEffect extends OneShotEffect {
DementiaSliverEffect() { DementiaSliverEffect() {
super(Outcome.Damage); super(Outcome.Damage);
staticText = "Target opponent reveals a card at random from their hand. If that card has the chose name, that player discards it"; staticText = "Target opponent reveals a card at random from their hand. If that card has the chosen name, that player discards it";
} }
private DementiaSliverEffect(final DementiaSliverEffect effect) { private DementiaSliverEffect(final DementiaSliverEffect effect) {

View file

@ -3,6 +3,7 @@ package mage.cards.d;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.GainLifeEffect;
@ -11,8 +12,7 @@ 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.common.FilterControlledPlaneswalkerPermanent;
import mage.filter.common.FilterPlaneswalkerPermanent;
import mage.target.common.TargetOpponent; import mage.target.common.TargetOpponent;
import java.util.UUID; import java.util.UUID;
@ -22,11 +22,7 @@ import java.util.UUID;
*/ */
public final class DesiccatedNaga extends CardImpl { public final class DesiccatedNaga extends CardImpl {
private static final FilterPlaneswalkerPermanent filter = new FilterPlaneswalkerPermanent("you control a Liliana planeswalker"); private static final Condition condition = new PermanentsOnTheBattlefieldCondition(new FilterControlledPlaneswalkerPermanent(SubType.LILIANA, "you control a Liliana planeswalker"));
static {
filter.add(SubType.LILIANA.getPredicate());
}
public DesiccatedNaga(UUID ownerId, CardSetInfo setInfo) { public DesiccatedNaga(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
@ -37,10 +33,9 @@ public final class DesiccatedNaga extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// {3}{B}: Target opponent loses 2 life and you gain 2 life. Activate this ability only if you control a Liliana planeswalker. // {3}{B}: Target opponent loses 2 life and you gain 2 life. Activate this ability only if you control a Liliana planeswalker.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, Ability ability = new ActivateIfConditionActivatedAbility(
new LoseLifeTargetEffect(2), new LoseLifeTargetEffect(2), new ManaCostsImpl<>("{3}{B}"), condition
new ManaCostsImpl<>("{3}{B}"), );
new PermanentsOnTheBattlefieldCondition(filter));
ability.addEffect(new GainLifeEffect(2).concatBy("and")); ability.addEffect(new GainLifeEffect(2).concatBy("and"));
ability.addTarget(new TargetOpponent()); ability.addTarget(new TargetOpponent());
this.addAbility(ability); this.addAbility(ability);

View file

@ -5,16 +5,16 @@ import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.MyTurnBeforeAttackersDeclaredCondition; import mage.abilities.condition.common.MyTurnBeforeAttackersDeclaredCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DestroyTargetEffect;
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.constants.SubType;
import mage.constants.SuperType;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import mage.target.common.TargetOpponentsChoicePermanent; import mage.target.common.TargetOpponentsChoicePermanent;
import mage.target.targetpointer.EachTargetPointer;
import java.util.UUID; import java.util.UUID;
@ -33,9 +33,16 @@ public final class DiaochanArtfulBeauty extends CardImpl {
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {tap}: Destroy target creature of your choice, then destroy target creature of an opponent's choice. Activate this ability only during your turn, before attackers are declared. // {tap}: Destroy target creature of your choice, then destroy target creature of an opponent's choice. Activate this ability only during your turn, before attackers are declared.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new DiaochanArtfulBeautyDestroyEffect(), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance); Ability ability = new ActivateIfConditionActivatedAbility(
new DestroyTargetEffect()
.setTargetPointer(new EachTargetPointer())
.setText("destroy target creature of your choice, then destroy target creature of an opponent's choice"),
new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
ability.addTarget(new TargetOpponentsChoicePermanent(1, 1, StaticFilters.FILTER_PERMANENT_CREATURE, false)); ability.addTarget(new TargetOpponentsChoicePermanent(
1, 1, StaticFilters.FILTER_PERMANENT_CREATURE, false
));
this.addAbility(ability); this.addAbility(ability);
} }
@ -48,38 +55,3 @@ public final class DiaochanArtfulBeauty extends CardImpl {
return new DiaochanArtfulBeauty(this); return new DiaochanArtfulBeauty(this);
} }
} }
class DiaochanArtfulBeautyDestroyEffect extends OneShotEffect {
DiaochanArtfulBeautyDestroyEffect() {
super(Outcome.DestroyPermanent);
this.staticText = "Destroy target creature of your choice, then destroy target creature of an opponent's choice";
}
private DiaochanArtfulBeautyDestroyEffect(final DiaochanArtfulBeautyDestroyEffect effect) {
super(effect);
}
@Override
public DiaochanArtfulBeautyDestroyEffect copy() {
return new DiaochanArtfulBeautyDestroyEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
Permanent firstTarget = game.getPermanent(source.getFirstTarget());
if (firstTarget != null) {
firstTarget.destroy(source, game, false);
}
Permanent secondTarget = game.getPermanent(source.getTargets().get(1).getFirstTarget());
if (secondTarget != null) {
secondTarget.destroy(source, game, false);
}
return true;
}
return false;
}
}

View file

@ -4,13 +4,11 @@ import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.MyTurnCondition; import mage.abilities.condition.common.MyTurnCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.discard.DiscardTargetEffect; import mage.abilities.effects.common.discard.DiscardTargetEffect;
import mage.abilities.hint.common.MyTurnHint;
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.Zone;
import mage.target.TargetPlayer; import mage.target.TargetPlayer;
import java.util.UUID; import java.util.UUID;
@ -24,10 +22,11 @@ public final class DisruptingScepter extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
// {3}, {T}: Target player discards a card. Activate this ability only during your turn. // {3}, {T}: Target player discards a card. Activate this ability only during your turn.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new DiscardTargetEffect(1), new ManaCostsImpl<>("{3}"), MyTurnCondition.instance); Ability ability = new ActivateIfConditionActivatedAbility(
new DiscardTargetEffect(1), new GenericManaCost(3), MyTurnCondition.instance
);
ability.addTarget(new TargetPlayer()); ability.addTarget(new TargetPlayer());
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addHint(MyTurnHint.instance);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,10 +1,9 @@
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.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.InvertCondition; import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.IsPhaseCondition; import mage.abilities.condition.common.IsPhaseCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
@ -15,22 +14,25 @@ import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import mage.target.common.TargetCreaturePermanent; import mage.target.TargetPermanent;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class DjinnOfInfiniteDeceits extends CardImpl { public final class DjinnOfInfiniteDeceits extends CardImpl {
private static final String rule = "Exchange control of two target nonlegendary creatures";
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("nonlegendary creature"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("nonlegendary creature");
static { static {
filter.add(Predicates.not(SuperType.LEGENDARY.getPredicate())); filter.add(Predicates.not(SuperType.LEGENDARY.getPredicate()));
} }
private static final Condition condition = new InvertCondition(new IsPhaseCondition(TurnPhase.COMBAT));
public DjinnOfInfiniteDeceits(UUID ownerId, CardSetInfo setInfo) { public DjinnOfInfiniteDeceits(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}{U}");
this.subtype.add(SubType.DJINN); this.subtype.add(SubType.DJINN);
this.power = new MageInt(2); this.power = new MageInt(2);
@ -38,13 +40,12 @@ public final class DjinnOfInfiniteDeceits extends CardImpl {
// Flying // Flying
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// {tap}: Exchange control of two target nonlegendary creatures. You can't activate this ability during combat. // {tap}: Exchange control of two target nonlegendary creatures. You can't activate this ability during combat.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(new ExchangeControlTargetEffect(
Zone.BATTLEFIELD, Duration.EndOfGame, "exchange control of two target nonlegendary creatures"
new ExchangeControlTargetEffect(Duration.EndOfGame, rule), ), new TapSourceCost(), condition);
new TapSourceCost(), ability.addTarget(new TargetPermanent(2, filter));
new InvertCondition(new IsPhaseCondition(TurnPhase.COMBAT)));
ability.addTarget(new TargetCreaturePermanent(2,2, filter, false));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,9 +1,6 @@
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.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.FormidableCondition; import mage.abilities.condition.common.FormidableCondition;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
@ -13,28 +10,24 @@ import mage.cards.CardSetInfo;
import mage.constants.AbilityWord; import mage.constants.AbilityWord;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class DragonScarredBear extends CardImpl { public final class DragonScarredBear extends CardImpl {
public DragonScarredBear(UUID ownerId, CardSetInfo setInfo) { public DragonScarredBear(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
this.subtype.add(SubType.BEAR); this.subtype.add(SubType.BEAR);
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// <i>Formidable</i> &mdash; {1}{G}: Regenerate Dragon-Scarred Bear. Activate this only if creatures you control have total power 8 or greater. // <i>Formidable</i> &mdash; {1}{G}: Regenerate Dragon-Scarred Bear. Activate this only if creatures you control have total power 8 or greater.
Ability ability = new ActivateIfConditionActivatedAbility( this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new RegenerateSourceEffect(), new ManaCostsImpl<>("{1}{G}"), FormidableCondition.instance
new RegenerateSourceEffect(), ).setAbilityWord(AbilityWord.FORMIDABLE));
new ManaCostsImpl<>("{1}{G}"),
FormidableCondition.instance);
ability.setAbilityWord(AbilityWord.FORMIDABLE);
this.addAbility(ability);
} }
private DragonScarredBear(final DragonScarredBear card) { private DragonScarredBear(final DragonScarredBear card) {

View file

@ -1,9 +1,6 @@
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.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.common.FormidableCondition; import mage.abilities.condition.common.FormidableCondition;
@ -16,42 +13,38 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.AbilityWord; import mage.constants.AbilityWord;
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.permanent.token.DragonToken; import mage.game.permanent.token.DragonToken;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class DragonWhisperer extends CardImpl { public final class DragonWhisperer extends CardImpl {
public DragonWhisperer(UUID ownerId, CardSetInfo setInfo) { public DragonWhisperer(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{R}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}{R}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.SHAMAN); this.subtype.add(SubType.SHAMAN);
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// {R}: Dragon Whisperer gains flying until end of turn. // {R}: Dragon Whisperer gains flying until end of turn.
this.addAbility(new SimpleActivatedAbility( this.addAbility(new SimpleActivatedAbility(new GainAbilitySourceEffect(
new GainAbilitySourceEffect(FlyingAbility.getInstance(), FlyingAbility.getInstance(), Duration.EndOfTurn
Duration.EndOfTurn), new ManaCostsImpl<>("{R}"))); ), new ManaCostsImpl<>("{R}")));
// {1}{R}: Dragon Whisperer get +1/+0 until end of turn // {1}{R}: Dragon Whisperer get +1/+0 until end of turn
this.addAbility(new SimpleActivatedAbility( this.addAbility(new SimpleActivatedAbility(
new BoostSourceEffect(1, 0, Duration.EndOfTurn), new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl<>("{1}{R}")
new ManaCostsImpl<>("{1}{R}"))); ));
// <Formidable</i> &mdash; {4}{R}{R}: Create a 4/4 red Dragon creature token with flying. Activate this ability only if creatures you control have total power 8 or greater. // <Formidable</i> &mdash; {4}{R}{R}: Create a 4/4 red Dragon creature token with flying. Activate this ability only if creatures you control have total power 8 or greater.
Ability ability = new ActivateIfConditionActivatedAbility( this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new CreateTokenEffect(new DragonToken()), new ManaCostsImpl<>("{4}{R}{R}"), FormidableCondition.instance
new CreateTokenEffect(new DragonToken()), ).setAbilityWord(AbilityWord.FORMIDABLE));
new ManaCostsImpl<>("{4}{R}{R}"),
FormidableCondition.instance);
ability.setAbilityWord(AbilityWord.FORMIDABLE);
this.addAbility(ability);
} }
private DragonWhisperer(final DragonWhisperer card) { private DragonWhisperer(final DragonWhisperer card) {

View file

@ -14,7 +14,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone;
import mage.game.Game; import mage.game.Game;
import java.util.Collection; import java.util.Collection;
@ -25,10 +24,6 @@ import java.util.UUID;
*/ */
public final class DreadlightMonstrosity extends CardImpl { public final class DreadlightMonstrosity extends CardImpl {
private static final Hint hint = new ConditionHint(
DreadlightMonstrosityCondition.instance, "You own a card in exile"
);
public DreadlightMonstrosity(UUID ownerId, CardSetInfo setInfo) { public DreadlightMonstrosity(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}{U}");
@ -42,9 +37,9 @@ public final class DreadlightMonstrosity extends CardImpl {
// {3}{U}{U}: Dreadlight Monstrosity can't be blocked this turn. Activate only if you own a card in exile. // {3}{U}{U}: Dreadlight Monstrosity can't be blocked this turn. Activate only if you own a card in exile.
this.addAbility(new ActivateIfConditionActivatedAbility( this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new CantBeBlockedSourceEffect(Duration.EndOfTurn), new CantBeBlockedSourceEffect(Duration.EndOfTurn),
new ManaCostsImpl<>("{3}{U}{U}"), DreadlightMonstrosityCondition.instance new ManaCostsImpl<>("{3}{U}{U}"), DreadlightMonstrosityCondition.instance
).addHint(hint)); ).addHint(DreadlightMonstrosityCondition.getHint()));
} }
private DreadlightMonstrosity(final DreadlightMonstrosity card) { private DreadlightMonstrosity(final DreadlightMonstrosity card) {
@ -59,6 +54,11 @@ public final class DreadlightMonstrosity extends CardImpl {
enum DreadlightMonstrosityCondition implements Condition { enum DreadlightMonstrosityCondition implements Condition {
instance; instance;
private static final Hint hint = new ConditionHint(instance);
public static Hint getHint() {
return hint;
}
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {

View file

@ -1,33 +1,32 @@
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.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.DamageTargetEffect;
import mage.constants.PhaseStep;
import mage.constants.SubType;
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.Zone; import mage.constants.PhaseStep;
import mage.constants.SubType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterAttackingOrBlockingCreature; import mage.filter.common.FilterAttackingOrBlockingCreature;
import mage.filter.predicate.permanent.ControllerControlsIslandPredicate; import mage.filter.predicate.permanent.ControllerControlsIslandPredicate;
import mage.game.Game; import mage.game.Game;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import java.util.UUID;
/** /**
*
* @author noahg * @author noahg
*/ */
public final class DwarvenSeaClan extends CardImpl { public final class DwarvenSeaClan extends CardImpl {
private static final FilterAttackingOrBlockingCreature filter = new FilterAttackingOrBlockingCreature(); private static final FilterPermanent filter = new FilterAttackingOrBlockingCreature("attacking or blocking creature whose controller controls an Island");
static { static {
filter.add(ControllerControlsIslandPredicate.instance); filter.add(ControllerControlsIslandPredicate.instance);
@ -41,13 +40,12 @@ public final class DwarvenSeaClan extends CardImpl {
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {tap}: Choose target attacking or blocking creature whose controller controls an Island. Dwarven Sea Clan deals 2 damage to that creature at end of combat. Activate this ability only before the end of combat step. // {tap}: Choose target attacking or blocking creature whose controller controls an Island. Dwarven Sea Clan deals 2 damage to that creature at end of combat. Activate this ability only before the end of combat step.
Effect effect = new CreateDelayedTriggeredAbilityEffect(new AtTheEndOfCombatDelayedTriggeredAbility(new DamageTargetEffect(2, true, "that creature")));
effect.setText("Choose target attacking or blocking creature whose controller controls an Island. Dwarven Sea Clan deals 2 damage to that creature at end of combat.");
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new CreateDelayedTriggeredAbilityEffect(new AtTheEndOfCombatDelayedTriggeredAbility(
effect, new DamageTargetEffect(2, true, "that creature")
new TapSourceCost(), )).setText("Choose target attacking or blocking creature whose controller controls an Island. " +
BeforeEndCombatCondition.getInstance() "{this} deals 2 damage to that creature at end of combat."),
new TapSourceCost(), BeforeEndCombatCondition.getInstance()
); );
ability.addTarget(new TargetPermanent(filter)); ability.addTarget(new TargetPermanent(filter));
addAbility(ability); addAbility(ability);
@ -73,7 +71,7 @@ class BeforeEndCombatCondition implements Condition {
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
PhaseStep phaseStep = game.getTurnStepType(); PhaseStep phaseStep = game.getTurnStepType();
if(phaseStep.getIndex() < PhaseStep.END_COMBAT.getIndex()) { if (phaseStep.getIndex() < PhaseStep.END_COMBAT.getIndex()) {
return true; return true;
} }
return false; return false;

View file

@ -1,11 +1,9 @@
package mage.cards.e; package mage.cards.e;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.AttachedToMatchesFilterCondition; import mage.abilities.condition.common.AttachedToMatchesFilterCondition;
import mage.abilities.costs.Cost;
import mage.abilities.costs.common.TapAttachedCost; import mage.abilities.costs.common.TapAttachedCost;
import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect;
@ -13,55 +11,48 @@ import mage.abilities.keyword.EnchantAbility;
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.Outcome; import mage.constants.Outcome;
import mage.constants.Duration; import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterBlockingCreature; import mage.filter.common.FilterBlockingCreature;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.permanent.TappedPredicate; import mage.filter.predicate.permanent.TappedPredicate;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
*
* @author L_J * @author L_J
*/ */
public final class Earthlore extends CardImpl { public final class Earthlore extends CardImpl {
private static final FilterControlledPermanent filterLand = new FilterControlledPermanent("land you control");
static {
filterLand.add(CardType.LAND.getPredicate());
}
private static final FilterPermanent filterUntapped = new FilterPermanent("enchanted land is untapped"); private static final FilterPermanent filterUntapped = new FilterPermanent("enchanted land is untapped");
static { static {
filterUntapped.add(TappedPredicate.UNTAPPED); filterUntapped.add(TappedPredicate.UNTAPPED);
} }
private static final Condition condition = new AttachedToMatchesFilterCondition(filterUntapped);
public Earthlore(UUID ownerId, CardSetInfo setInfo) { public Earthlore(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}");
this.subtype.add(SubType.AURA); this.subtype.add(SubType.AURA);
// Enchant land you control // Enchant land you control
TargetPermanent auraTarget = new TargetControlledPermanent(filterLand); TargetPermanent auraTarget = new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_PERMANENT_LAND);
this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility));
Ability ability = new EnchantAbility(auraTarget); this.addAbility(new EnchantAbility(auraTarget));
this.addAbility(ability);
// Tap enchanted land: Target blocking creature gets +1/+2 until end of turn. Activate this ability only if enchanted land is untapped. // Tap enchanted land: Target blocking creature gets +1/+2 until end of turn. Activate this ability only if enchanted land is untapped.
Cost cost = new TapAttachedCost(); Ability ability = new ActivateIfConditionActivatedAbility(
cost.setText("Tap enchanted land"); new BoostTargetEffect(1, 2),
Ability ability2 = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new TapAttachedCost().setText("Tap enchanted land"), condition
new BoostTargetEffect(1, 2, Duration.EndOfTurn), cost, new AttachedToMatchesFilterCondition(filterUntapped)); );
ability2.addTarget(new TargetCreaturePermanent(new FilterBlockingCreature("blocking creature"))); ability.addTarget(new TargetCreaturePermanent(new FilterBlockingCreature("blocking creature")));
this.addAbility(ability2); this.addAbility(ability);
} }
private Earthlore(final Earthlore card) { private Earthlore(final Earthlore card) {

View file

@ -53,7 +53,7 @@ public final class EladamriKorvecdal extends CardImpl {
// {G}, {T}, Tap two untapped creatures you control: Reveal a card from your hand or the top card of your library. If you reveal a creature card this way, put it onto the battlefield. Activate only during your turn. // {G}, {T}, Tap two untapped creatures you control: Reveal a card from your hand or the top card of your library. If you reveal a creature card this way, put it onto the battlefield. Activate only during your turn.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new EladamriKorvecdalEffect(), new ManaCostsImpl<>("{G}"), MyTurnCondition.instance new EladamriKorvecdalEffect(), new ManaCostsImpl<>("{G}"), MyTurnCondition.instance
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new TapTargetCost(new TargetControlledPermanent( ability.addCost(new TapTargetCost(new TargetControlledPermanent(

View file

@ -1,8 +1,5 @@
package mage.cards.e; package mage.cards.e;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
@ -12,13 +9,15 @@ import mage.abilities.effects.common.DrawCardSourceControllerEffect;
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.Zone;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/** /**
*
* @author TheElk801 * @author TheElk801
*/ */
public final class EndlessAtlas extends CardImpl { public final class EndlessAtlas extends CardImpl {
@ -28,10 +27,8 @@ public final class EndlessAtlas extends CardImpl {
// {2}, {T}: Draw a card. Activate this ability only if you control three or more lands with the same name. // {2}, {T}: Draw a card. Activate this ability only if you control three or more lands with the same name.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new DrawCardSourceControllerEffect(1), new DrawCardSourceControllerEffect(1),
new GenericManaCost(2), new GenericManaCost(2), EndlessAtlasCondition.instance
new EndlessAtlasCondition()
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
this.addAbility(ability); this.addAbility(ability);
@ -47,7 +44,8 @@ public final class EndlessAtlas extends CardImpl {
} }
} }
class EndlessAtlasCondition implements Condition { enum EndlessAtlasCondition implements Condition {
instance;
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {

View file

@ -41,11 +41,12 @@ public final class EverythingamajigC extends CardImpl {
// Disrupting Scepter // Disrupting Scepter
// 3, {T}: Target player discards a card. Activate this ability only during your turn. // 3, {T}: Target player discards a card. Activate this ability only during your turn.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new DiscardTargetEffect(1), new GenericManaCost(3), MyTurnCondition.instance); Ability ability = new ActivateIfConditionActivatedAbility(
new DiscardTargetEffect(1), new GenericManaCost(3), MyTurnCondition.instance
);
ability.addTarget(new TargetPlayer()); ability.addTarget(new TargetPlayer());
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addHint(MyTurnHint.instance); this.addAbility(ability.addHint(MyTurnHint.instance));
this.addAbility(ability);
// Chimeric Staff // Chimeric Staff
// X: Everythingamajig becomes an X/X Construct artifact creature until end of turn. // X: Everythingamajig becomes an X/X Construct artifact creature until end of turn.

View file

@ -13,9 +13,7 @@ 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.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
import mage.target.common.TargetControlledPermanent;
import java.util.UUID; import java.util.UUID;
@ -36,7 +34,7 @@ public final class FalkenrathPitFighter extends CardImpl {
// {1}{R}, Discard a card, Sacrifice a Vampire: Draw two cards. Activate only if an opponent lost life this turn. // {1}{R}, Discard a card, Sacrifice a Vampire: Draw two cards. Activate only if an opponent lost life this turn.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(2), new DrawCardSourceControllerEffect(2),
new ManaCostsImpl<>("{1}{R}"), OpponentsLostLifeCondition.instance new ManaCostsImpl<>("{1}{R}"), OpponentsLostLifeCondition.instance
); );
ability.addCost(new DiscardCardCost()); ability.addCost(new DiscardCardCost());

View file

@ -10,7 +10,6 @@ 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.TargetAnyTarget; import mage.target.common.TargetAnyTarget;
import java.util.UUID; import java.util.UUID;
@ -30,7 +29,7 @@ public final class FireBowman extends CardImpl {
// Sacrifice Fire Bowman: Fire Bowman deals 1 damage to any target. Activate this ability only during your turn, before attackers are declared. // Sacrifice Fire Bowman: Fire Bowman deals 1 damage to any target. Activate this ability only during your turn, before attackers are declared.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new DamageTargetEffect(1, "it"), new DamageTargetEffect(1, "it"),
new SacrificeSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance new SacrificeSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
); );
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());

View file

@ -5,18 +5,15 @@ import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.MyTurnCondition; import mage.abilities.condition.common.MyTurnCondition;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.abilities.hint.common.MyTurnHint;
import mage.abilities.keyword.FearAbility; import mage.abilities.keyword.FearAbility;
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.Duration; import mage.constants.Duration;
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; import java.util.UUID;
@ -35,17 +32,15 @@ public final class Fleshformer extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// {W}{U}{B}{R}{G}: Fleshformer gets +2/+2 and gains fear until end of turn. Target creature gets -2/-2 until end of turn. Activate this ability only during your turn. // {W}{U}{B}{R}{G}: Fleshformer gets +2/+2 and gains fear until end of turn. Target creature gets -2/-2 until end of turn. Activate this ability only during your turn.
Effect effect = new BoostSourceEffect(2, 2, Duration.EndOfTurn); Ability ability = new ActivateIfConditionActivatedAbility(
effect.setText("{this} gets +2/+2"); new BoostSourceEffect(2, 2, Duration.EndOfTurn)
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl<>("{W}{U}{B}{R}{G}"), MyTurnCondition.instance); .setText("{this} gets +2/+2"),
effect = new GainAbilitySourceEffect(FearAbility.getInstance(), Duration.EndOfTurn); new ManaCostsImpl<>("{W}{U}{B}{R}{G}"), MyTurnCondition.instance
effect.setText("and gains fear until end of turn"); );
ability.addEffect(effect); ability.addEffect(new GainAbilitySourceEffect(FearAbility.getInstance(), Duration.EndOfTurn).setText("and gains fear until end of turn"));
ability.addEffect(new BoostTargetEffect(-2, -2, Duration.EndOfTurn)); ability.addEffect(new BoostTargetEffect(-2, -2, Duration.EndOfTurn));
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
ability.addHint(MyTurnHint.instance);
this.addAbility(ability); this.addAbility(ability);
} }
private Fleshformer(final Fleshformer card) { private Fleshformer(final Fleshformer card) {

View file

@ -1,32 +1,29 @@
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.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.SourceAttackingCondition; import mage.abilities.condition.common.SourceAttackingCondition;
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.combat.CantBlockTargetEffect; import mage.abilities.effects.common.combat.CantBlockTargetEffect;
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.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.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class ForgestokerDragon extends CardImpl { public final class ForgestokerDragon extends CardImpl {
public ForgestokerDragon(UUID ownerId, CardSetInfo setInfo) { public ForgestokerDragon(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{R}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}{R}");
this.subtype.add(SubType.DRAGON); this.subtype.add(SubType.DRAGON);
this.power = new MageInt(5); this.power = new MageInt(5);
@ -34,14 +31,15 @@ public final class ForgestokerDragon extends CardImpl {
// Flying // Flying
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// {1}{R}: Forgestoker Dragon deals 1 damage to target creature. That creature can't block this combat. Activate this ability only if Forgestoker Dragon is attacking.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new ManaCostsImpl<>("{1}{R}"), SourceAttackingCondition.instance);
ability.addTarget(new TargetCreaturePermanent());
Effect effect = new CantBlockTargetEffect(Duration.EndOfCombat);
effect.setText("That creature can't block this combat");
ability.addEffect(effect);
this.addAbility(ability);
// {1}{R}: Forgestoker Dragon deals 1 damage to target creature. That creature can't block this combat. Activate this ability only if Forgestoker Dragon is attacking.
Ability ability = new ActivateIfConditionActivatedAbility(
new DamageTargetEffect(1), new ManaCostsImpl<>("{1}{R}"), SourceAttackingCondition.instance
);
ability.addEffect(new CantBlockTargetEffect(Duration.EndOfCombat)
.setText("That creature can't block this combat"));
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
} }
private ForgestokerDragon(final ForgestokerDragon card) { private ForgestokerDragon(final ForgestokerDragon card) {

View file

@ -1,31 +1,31 @@
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.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.condition.common.SourceAttackingCondition; import mage.abilities.condition.common.SourceAttackingCondition;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect; import mage.abilities.dynamicvalue.common.CardsInTargetHandCount;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.TapTargetEffect; import mage.abilities.effects.common.TapTargetEffect;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
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.game.Game; import mage.constants.SubType;
import mage.players.Player; import mage.constants.SuperType;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import mage.target.common.TargetOpponent; import mage.target.common.TargetOpponent;
import java.util.UUID;
/** /**
*
* @author FenrisulfrX * @author FenrisulfrX
*/ */
public final class GerrardCapashen extends CardImpl { public final class GerrardCapashen extends CardImpl {
public GerrardCapashen(UUID ownerId, CardSetInfo setInfo) { public GerrardCapashen(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}{W}");
this.supertype.add(SuperType.LEGENDARY); this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.SOLDIER); this.subtype.add(SubType.SOLDIER);
@ -33,16 +33,17 @@ public final class GerrardCapashen extends CardImpl {
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
// At the beginning of your upkeep, you gain 1 life for each card in target opponent's hand. // At the beginning of your upkeep, you gain 1 life for each card in target opponent's hand.
Ability ability1 = new BeginningOfUpkeepTriggeredAbility(new GerrardCapashenEffect() Ability ability = new BeginningOfUpkeepTriggeredAbility(new GainLifeEffect(CardsInTargetHandCount.instance)
); .setText("you gain 1 life for each card in target opponent's hand"));
ability1.addTarget(new TargetOpponent()); ability.addTarget(new TargetOpponent());
this.addAbility(ability1); this.addAbility(ability);
// {3}{W}: Tap target creature. Activate this ability only if {this} is attacking. // {3}{W}: Tap target creature. Activate this ability only if {this} is attacking.
Ability ability2 = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new TapTargetEffect(), ability = new ActivateIfConditionActivatedAbility(
new ManaCostsImpl<>("{3}{W}"), SourceAttackingCondition.instance); new TapTargetEffect(), new ManaCostsImpl<>("{3}{W}"), SourceAttackingCondition.instance
ability2.addTarget(new TargetCreaturePermanent()); );
this.addAbility(ability2); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
} }
private GerrardCapashen(final GerrardCapashen card) { private GerrardCapashen(final GerrardCapashen card) {
@ -54,34 +55,3 @@ public final class GerrardCapashen extends CardImpl {
return new GerrardCapashen(this); return new GerrardCapashen(this);
} }
} }
class GerrardCapashenEffect extends OneShotEffect {
GerrardCapashenEffect() {
super(Outcome.GainLife);
staticText = "you gain 1 life for each card in target opponent's hand.";
}
private GerrardCapashenEffect(final GerrardCapashenEffect effect) {
super(effect);
}
@Override
public GerrardCapashenEffect copy() {
return new GerrardCapashenEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
Player targetOpponent = game.getPlayer(this.getTargetPointer().getFirst(game, source));
if (controller != null && targetOpponent != null) {
int cardsInHand = targetOpponent.getHand().size();
if (cardsInHand > 0) {
controller.gainLife(cardsInHand, game, source);
}
return true;
}
return false;
}
}

View file

@ -4,12 +4,10 @@ import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.NotMyTurnCondition; import mage.abilities.condition.common.NotMyTurnCondition;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.effects.common.ReturnToHandSourceEffect;
import mage.abilities.hint.common.NotMyTurnHint;
import mage.abilities.mana.ColorlessManaAbility; import mage.abilities.mana.ColorlessManaAbility;
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.Zone;
import java.util.UUID; import java.util.UUID;
@ -25,9 +23,9 @@ public final class GhostTown extends CardImpl {
this.addAbility(new ColorlessManaAbility()); this.addAbility(new ColorlessManaAbility());
// {0}: Return Ghost Town to its owner's hand. Activate this ability only if it's not your turn. // {0}: Return Ghost Town to its owner's hand. Activate this ability only if it's not your turn.
this.addAbility(new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandSourceEffect(true), this.addAbility(new ActivateIfConditionActivatedAbility(
new GenericManaCost(0), NotMyTurnCondition.instance) new ReturnToHandSourceEffect(true), new GenericManaCost(0), NotMyTurnCondition.instance
.addHint(NotMyTurnHint.instance)); ));
} }
private GhostTown(final GhostTown card) { private GhostTown(final GhostTown card) {

View file

@ -13,7 +13,6 @@ 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.watchers.common.DiscardedCardWatcher; import mage.watchers.common.DiscardedCardWatcher;
import java.util.UUID; import java.util.UUID;
@ -33,8 +32,8 @@ public final class GiltBladeProwler extends CardImpl {
// {1}, {T}, Pay 1 life: Draw a card. Activate only if you've discarded a card this turn. // {1}, {T}, Pay 1 life: Draw a card. Activate only if you've discarded a card this turn.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new DrawCardSourceControllerEffect(1), new GenericManaCost(1),
new GenericManaCost(1), ControllerDiscardedThisTurnCondition.instance ControllerDiscardedThisTurnCondition.instance
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new PayLifeCost(1)); ability.addCost(new PayLifeCost(1));

View file

@ -1,9 +1,6 @@
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.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.FormidableCondition; import mage.abilities.condition.common.FormidableCondition;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
@ -13,32 +10,30 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.AbilityWord; import mage.constants.AbilityWord;
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 java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class GladeWatcher extends CardImpl { public final class GladeWatcher extends CardImpl {
public GladeWatcher(UUID ownerId, CardSetInfo setInfo) { public GladeWatcher(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
this.subtype.add(SubType.ELEMENTAL); this.subtype.add(SubType.ELEMENTAL);
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// Defender // Defender
this.addAbility(DefenderAbility.getInstance()); this.addAbility(DefenderAbility.getInstance());
// <i>Formidable</i> &mdash; {G}: Glade Watcher can attack this turn as though it didn't have defender. Activate this ability only if creatures you control have total power 8 or greater. // <i>Formidable</i> &mdash; {G}: Glade Watcher can attack this turn as though it didn't have defender. Activate this ability only if creatures you control have total power 8 or greater.
Ability ability = new ActivateIfConditionActivatedAbility( this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new CanAttackAsThoughItDidntHaveDefenderSourceEffect(Duration.EndOfTurn), new CanAttackAsThoughItDidntHaveDefenderSourceEffect(Duration.EndOfTurn),
new ManaCostsImpl<>("{G}"), new ManaCostsImpl<>("{G}"), FormidableCondition.instance
FormidableCondition.instance); ).setAbilityWord(AbilityWord.FORMIDABLE));
ability.setAbilityWord(AbilityWord.FORMIDABLE);
this.addAbility(ability);
} }
private GladeWatcher(final GladeWatcher card) { private GladeWatcher(final GladeWatcher card) {

View file

@ -1,7 +1,5 @@
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.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -12,24 +10,26 @@ 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.TargetAnyTarget; import mage.target.common.TargetAnyTarget;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class GoblinFirestarter extends CardImpl { public final class GoblinFirestarter extends CardImpl {
public GoblinFirestarter(UUID ownerId, CardSetInfo setInfo) { public GoblinFirestarter(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}");
this.subtype.add(SubType.GOBLIN); this.subtype.add(SubType.GOBLIN);
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// Sacrifice Goblin Firestarter: Goblin Firestarter deals 1 damage to any target. Activate this ability only during your turn, before attackers are declared. // Sacrifice Goblin Firestarter: Goblin Firestarter deals 1 damage to any target. Activate this ability only during your turn, before attackers are declared.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, Ability ability = new ActivateIfConditionActivatedAbility(
new DamageTargetEffect(1,"it"), new SacrificeSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance); new DamageTargetEffect(1, "it"),
new SacrificeSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -11,7 +11,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -30,8 +29,9 @@ public final class GreenhiltTrainee extends CardImpl {
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new BoostTargetEffect(4, 4, Duration.EndOfTurn), new BoostTargetEffect(4, 4, Duration.EndOfTurn),
new TapSourceCost(), GreenhiltTraineeCondition.instance new TapSourceCost(), GreenhiltTraineeCondition.instance
); );
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());

View file

@ -6,13 +6,11 @@ import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.MyTurnCondition; import mage.abilities.condition.common.MyTurnCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.common.discard.DiscardTargetEffect; import mage.abilities.effects.common.discard.DiscardTargetEffect;
import mage.abilities.hint.common.MyTurnHint;
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.SuperType; import mage.constants.SuperType;
import mage.constants.Zone;
import mage.target.TargetPlayer; import mage.target.TargetPlayer;
import java.util.UUID; import java.util.UUID;
@ -31,9 +29,10 @@ public final class GwendlynDiCorci extends CardImpl {
this.toughness = new MageInt(5); this.toughness = new MageInt(5);
// {T}: Target player discards a card at random. Activate this ability only during your turn. // {T}: Target player discards a card at random. Activate this ability only during your turn.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new DiscardTargetEffect(1, true), new TapSourceCost(), MyTurnCondition.instance); Ability ability = new ActivateIfConditionActivatedAbility(
new DiscardTargetEffect(1, true), new TapSourceCost(), MyTurnCondition.instance
);
ability.addTarget(new TargetPlayer()); ability.addTarget(new TargetPlayer());
ability.addHint(MyTurnHint.instance);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,10 +1,9 @@
package mage.cards.h; package mage.cards.h;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
@ -12,27 +11,30 @@ import mage.abilities.effects.common.ReturnToHandTargetEffect;
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.ComparisonType; import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.constants.Zone; import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class HeidarRimewindMaster extends CardImpl { public final class HeidarRimewindMaster extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent("you control four or more snow permanents"); private static final FilterPermanent filter = new FilterControlledPermanent("you control four or more snow permanents");
static { static {
filter.add(SuperType.SNOW.getPredicate()); filter.add(SuperType.SNOW.getPredicate());
} }
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 3);
public HeidarRimewindMaster(UUID ownerId, CardSetInfo setInfo) { public HeidarRimewindMaster(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}");
this.supertype.add(SuperType.LEGENDARY); this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.WIZARD); this.subtype.add(SubType.WIZARD);
@ -40,10 +42,9 @@ public final class HeidarRimewindMaster extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// {2}, {tap}: Return target permanent to its owner's hand. Activate this ability only if you control four or more snow permanents. // {2}, {tap}: Return target permanent to its owner's hand. Activate this ability only if you control four or more snow permanents.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, Ability ability = new ActivateIfConditionActivatedAbility(
new ReturnToHandTargetEffect(), new ReturnToHandTargetEffect(), new GenericManaCost(2), condition
new GenericManaCost(2), );
new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 3));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addTarget(new TargetPermanent()); ability.addTarget(new TargetPermanent());
this.addAbility(ability); this.addAbility(ability);

View file

@ -8,12 +8,10 @@ import mage.abilities.costs.common.RemoveCountersSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.hint.common.MyTurnHint;
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.Zone;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.game.permanent.token.WhiteElementalToken; import mage.game.permanent.token.WhiteElementalToken;
@ -29,12 +27,16 @@ public final class HoofprintsOfTheStag extends CardImpl {
this.subtype.add(SubType.ELEMENTAL); this.subtype.add(SubType.ELEMENTAL);
// Whenever you draw a card, you may put a hoofprint counter on Hoofprints of the Stag. // Whenever you draw a card, you may put a hoofprint counter on Hoofprints of the Stag.
this.addAbility(new DrawCardControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.HOOFPRINT.createInstance(1)), true)); this.addAbility(new DrawCardControllerTriggeredAbility(
new AddCountersSourceEffect(CounterType.HOOFPRINT.createInstance(1)), true
));
// {2}{w}, Remove four hoofprint counters from Hoofprints of the Stag: Create a 4/4 white Elemental creature token with flying. Activate this ability only during your turn. // {2}{w}, Remove four hoofprint counters from Hoofprints of the Stag: Create a 4/4 white Elemental creature token with flying. Activate this ability only during your turn.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new WhiteElementalToken(), 1), new ManaCostsImpl<>("{2}{W}"), MyTurnCondition.instance); Ability ability = new ActivateIfConditionActivatedAbility(
new CreateTokenEffect(new WhiteElementalToken(), 1),
new ManaCostsImpl<>("{2}{W}"), MyTurnCondition.instance
);
ability.addCost(new RemoveCountersSourceCost(CounterType.HOOFPRINT.createInstance(4))); ability.addCost(new RemoveCountersSourceCost(CounterType.HOOFPRINT.createInstance(4)));
ability.addHint(MyTurnHint.instance);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,7 +1,5 @@
package mage.cards.h; package mage.cards.h;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -13,12 +11,12 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class HuaTuoHonoredPhysician extends CardImpl { public final class HuaTuoHonoredPhysician extends CardImpl {
@ -32,7 +30,10 @@ public final class HuaTuoHonoredPhysician extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// {tap}: Put target creature card from your graveyard on top of your library. Activate this ability only during your turn, before attackers are declared. // {tap}: Put target creature card from your graveyard on top of your library. Activate this ability only during your turn, before attackers are declared.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new PutOnLibraryTargetEffect(true), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance); Ability ability = new ActivateIfConditionActivatedAbility(
new PutOnLibraryTargetEffect(true), new TapSourceCost(),
MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -7,12 +7,10 @@ import mage.abilities.condition.common.MyTurnCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.TargetPlayerGainControlSourceEffect; import mage.abilities.effects.common.TargetPlayerGainControlSourceEffect;
import mage.abilities.hint.common.MyTurnHint;
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.Zone;
import mage.target.common.TargetOpponent; import mage.target.common.TargetOpponent;
import java.util.UUID; import java.util.UUID;
@ -30,13 +28,12 @@ public final class HumbleDefector extends CardImpl {
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {T}: Draw two cards. Target opponent gains control of Humble Defector. Activate this ability only during your turn. // {T}: Draw two cards. Target opponent gains control of Humble Defector. Activate this ability only during your turn.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, Ability ability = new ActivateIfConditionActivatedAbility(
new DrawCardSourceControllerEffect(2), new TapSourceCost(), MyTurnCondition.instance); new DrawCardSourceControllerEffect(2), new TapSourceCost(), MyTurnCondition.instance
);
ability.addEffect(new TargetPlayerGainControlSourceEffect()); ability.addEffect(new TargetPlayerGainControlSourceEffect());
ability.addTarget(new TargetOpponent()); ability.addTarget(new TargetOpponent());
ability.addHint(MyTurnHint.instance);
this.addAbility(ability); this.addAbility(ability);
} }
private HumbleDefector(final HumbleDefector card) { private HumbleDefector(final HumbleDefector card) {

View file

@ -12,7 +12,6 @@ import mage.abilities.effects.common.DrawCardSourceControllerEffect;
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.Zone;
import mage.game.permanent.token.EldraziToken; import mage.game.permanent.token.EldraziToken;
import mage.watchers.common.CreatedTokenWatcher; import mage.watchers.common.CreatedTokenWatcher;
@ -28,7 +27,7 @@ public final class IdolOfOblivion extends CardImpl {
// {T}: Draw a card. Activate this ability only if you created a token this turn. // {T}: Draw a card. Activate this ability only if you created a token this turn.
this.addAbility(new ActivateIfConditionActivatedAbility( this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new DrawCardSourceControllerEffect(1),
new TapSourceCost(), CreatedTokenThisTurnCondition.instance new TapSourceCost(), CreatedTokenThisTurnCondition.instance
).addHint(CreatedTokenThisTurnCondition.getHint()), new CreatedTokenWatcher()); ).addHint(CreatedTokenThisTurnCondition.getHint()), new CreatedTokenWatcher());

View file

@ -1,33 +1,35 @@
package mage.cards.i; package mage.cards.i;
import java.util.UUID;
import mage.abilities.ActivatedAbility;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.IsStepCondition; import mage.abilities.condition.common.IsStepCondition;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.CountersSourceCount; import mage.abilities.dynamicvalue.common.CountersSourceCount;
import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.common.continuous.BoostAllEffect; import mage.abilities.effects.common.continuous.BoostAllEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.effects.common.counter.RemoveCounterSourceEffect; import mage.abilities.effects.common.counter.RemoveCounterSourceEffect;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
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.Duration; import mage.constants.Duration;
import mage.constants.PhaseStep; import mage.constants.PhaseStep;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.constants.Zone;
import mage.counters.CounterType; import mage.counters.CounterType;
import java.util.UUID;
/** /**
*
* @author TheElk801 * @author TheElk801
*/ */
public final class InfiniteHourglass extends CardImpl { public final class InfiniteHourglass extends CardImpl {
private static final DynamicValue xValue = new CountersSourceCount(CounterType.TIME);
private static final Condition condition = new IsStepCondition(PhaseStep.UPKEEP, false);
public InfiniteHourglass(UUID ownerId, CardSetInfo setInfo) { public InfiniteHourglass(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}");
@ -35,23 +37,14 @@ public final class InfiniteHourglass extends CardImpl {
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance()))); this.addAbility(new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance())));
// All creatures get +1/+0 for each time counter on Infinite Hourglass. // All creatures get +1/+0 for each time counter on Infinite Hourglass.
this.addAbility(new SimpleStaticAbility( this.addAbility(new SimpleStaticAbility(new BoostAllEffect(
new BoostAllEffect( xValue, StaticValue.get(0), Duration.WhileOnBattlefield
new CountersSourceCount(CounterType.TIME), )));
StaticValue.get(0),
Duration.WhileOnBattlefield
)
));
// {3}: Remove a time counter from Infinite Hourglass. Any player may activate this ability but only during any upkeep step. // {3}: Remove a time counter from Infinite Hourglass. Any player may activate this ability but only during any upkeep step.
ActivatedAbility ability = new ActivateIfConditionActivatedAbility( this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new RemoveCounterSourceEffect(CounterType.TIME.createInstance()), new GenericManaCost(3), condition
new RemoveCounterSourceEffect(CounterType.TIME.createInstance()), ).setMayActivate(TargetController.ANY));
new GenericManaCost(3),
new IsStepCondition(PhaseStep.UPKEEP, false)
);
ability.setMayActivate(TargetController.ANY);
this.addAbility(ability);
} }
private InfiniteHourglass(final InfiniteHourglass card) { private InfiniteHourglass(final InfiniteHourglass card) {

View file

@ -1,7 +1,6 @@
package mage.cards.i; package mage.cards.i;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.MetalcraftCondition; import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.SacrificeSourceCost;
@ -11,15 +10,12 @@ import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
import mage.abilities.hint.common.MetalcraftHint; import mage.abilities.hint.common.MetalcraftHint;
import mage.abilities.mana.ColorlessManaAbility; import mage.abilities.mana.ColorlessManaAbility;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
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.SuperType; import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterArtifactPermanent;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
import java.util.UUID; import java.util.UUID;
@ -34,19 +30,20 @@ public final class InventorsFair extends CardImpl {
this.supertype.add(SuperType.LEGENDARY); this.supertype.add(SuperType.LEGENDARY);
// At the beginning of your upkeep, if you control three or more artifacts, you gain 1 life. // At the beginning of your upkeep, if you control three or more artifacts, you gain 1 life.
this.addAbility(new InventorsFairAbility()); this.addAbility(new BeginningOfUpkeepTriggeredAbility(new GainLifeEffect(1))
.withInterveningIf(MetalcraftCondition.instance));
// {t}: Add {C}. // {t}: Add {C}.
this.addAbility(new ColorlessManaAbility()); this.addAbility(new ColorlessManaAbility());
// {4}, {T}, Sacrifice Inventors' Fair: Search your library for an artifact card, reveal it, put it into your hand, then shuffle your library. // {4}, {T}, Sacrifice Inventors' Fair: Search your library for an artifact card, reveal it, put it into your hand, then shuffle your library.
// Activate this ability only if you control threeor more artifacts. // Activate this ability only if you control threeor more artifacts.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInHandEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_ARTIFACT), true), Ability ability = new ActivateIfConditionActivatedAbility(new SearchLibraryPutInHandEffect(
new GenericManaCost(4), MetalcraftCondition.instance); new TargetCardInLibrary(StaticFilters.FILTER_CARD_ARTIFACT), true
), new GenericManaCost(4), MetalcraftCondition.instance);
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
ability.addHint(MetalcraftHint.instance); this.addAbility(ability.addHint(MetalcraftHint.instance));
this.addAbility(ability);
} }
private InventorsFair(final InventorsFair card) { private InventorsFair(final InventorsFair card) {
@ -58,41 +55,3 @@ public final class InventorsFair extends CardImpl {
return new InventorsFair(this); return new InventorsFair(this);
} }
} }
class InventorsFairAbility extends TriggeredAbilityImpl {
private FilterArtifactPermanent filter = new FilterArtifactPermanent();
public InventorsFairAbility() {
super(Zone.BATTLEFIELD, new GainLifeEffect(1));
}
private InventorsFairAbility(final InventorsFairAbility ability) {
super(ability);
}
@Override
public InventorsFairAbility copy() {
return new InventorsFairAbility(this);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.UPKEEP_STEP_PRE;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
return event.getPlayerId().equals(this.controllerId);
}
@Override
public boolean checkInterveningIfClause(Game game) {
return game.getBattlefield().countAll(filter, this.controllerId, game) >= 3;
}
@Override
public String getRule() {
return "At the beginning of your upkeep, if you control three or more artifacts, you gain 1 life.";
}
}

View file

@ -15,7 +15,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledLandPermanent; import mage.filter.common.FilterControlledLandPermanent;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
@ -27,9 +26,9 @@ import java.util.UUID;
*/ */
public final class KelpieGuide extends CardImpl { public final class KelpieGuide extends CardImpl {
private static final FilterControlledLandPermanent filter = new FilterControlledLandPermanent("you control eight or more lands"); private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
private static final Condition condition new FilterControlledLandPermanent("you control eight or more lands"), ComparisonType.MORE_THAN, 7
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 7); );
public KelpieGuide(UUID ownerId, CardSetInfo setInfo) { public KelpieGuide(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}");
@ -44,9 +43,7 @@ public final class KelpieGuide extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
// {T}: Tap target permanent. Activate only if you control eight or more lands. // {T}: Tap target permanent. Activate only if you control eight or more lands.
ability = new ActivateIfConditionActivatedAbility( ability = new ActivateIfConditionActivatedAbility(new TapTargetEffect(), new TapSourceCost(), condition);
Zone.BATTLEFIELD, new TapTargetEffect(), new TapSourceCost(), condition
);
ability.addTarget(new TargetPermanent()); ability.addTarget(new TargetPermanent());
this.addAbility(ability.addHint(LandsYouControlHint.instance)); this.addAbility(ability.addHint(LandsYouControlHint.instance));
} }

View file

@ -1,7 +1,5 @@
package mage.cards.k; package mage.cards.k;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -12,13 +10,13 @@ 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.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.TappedPredicate; import mage.filter.predicate.permanent.TappedPredicate;
import mage.target.common.TargetCreaturePermanent; import mage.target.TargetPermanent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class KingsAssassin extends CardImpl { public final class KingsAssassin extends CardImpl {
@ -30,16 +28,18 @@ public final class KingsAssassin extends CardImpl {
} }
public KingsAssassin(UUID ownerId, CardSetInfo setInfo) { public KingsAssassin(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{B}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.ASSASSIN); this.subtype.add(SubType.ASSASSIN);
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {tap}: Destroy target tapped creature. Activate this ability only during your turn, before attackers are declared. // {tap}: Destroy target tapped creature. Activate this ability only during your turn, before attackers are declared.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, Ability ability = new ActivateIfConditionActivatedAbility(
new DestroyTargetEffect(), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance); new DestroyTargetEffect(), new TapSourceCost(),
ability.addTarget(new TargetCreaturePermanent(filter)); MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetPermanent(filter));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,11 +1,10 @@
package mage.cards.k; package mage.cards.k;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.delayed.AtTheBeginOfNextUpkeepDelayedTriggeredAbility; import mage.abilities.common.delayed.AtTheBeginOfNextUpkeepDelayedTriggeredAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.AttachedToMatchesFilterCondition; import mage.abilities.condition.common.AttachedToMatchesFilterCondition;
import mage.abilities.costs.common.TapAttachedCost; import mage.abilities.costs.common.TapAttachedCost;
import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.AttachEffect;
@ -17,60 +16,63 @@ import mage.abilities.keyword.EnchantAbility;
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.Outcome;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Zone; import mage.constants.Outcome;
import mage.constants.SubType;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import mage.filter.predicate.permanent.TappedPredicate; import mage.filter.predicate.permanent.TappedPredicate;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.target.common.TargetControlledCreaturePermanent;
import mage.target.common.TargetAnyTarget; import mage.target.common.TargetAnyTarget;
import java.util.UUID;
/** /**
*
* @author L_J * @author L_J
*/ */
public final class KrovikanPlague extends CardImpl { public final class KrovikanPlague extends CardImpl {
private static final FilterControlledCreaturePermanent filterNonWall = new FilterControlledCreaturePermanent("non-Wall creature you control"); private static final FilterPermanent filterNonWall = new FilterControlledCreaturePermanent("non-Wall creature you control");
static { static {
filterNonWall.add(Predicates.not(SubType.WALL.getPredicate())); filterNonWall.add(Predicates.not(SubType.WALL.getPredicate()));
} }
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("enchanted creature is untapped"); private static final FilterPermanent filter = new FilterCreaturePermanent("enchanted creature is untapped");
static { static {
filter.add(TappedPredicate.UNTAPPED); filter.add(TappedPredicate.UNTAPPED);
} }
private static final Condition condition = new AttachedToMatchesFilterCondition(filter);
public KrovikanPlague(UUID ownerId, CardSetInfo setInfo) { public KrovikanPlague(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{B}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{B}");
this.subtype.add(SubType.AURA); this.subtype.add(SubType.AURA);
// Enchant non-Wall creature you control // Enchant non-Wall creature you control
TargetPermanent auraTarget = new TargetControlledCreaturePermanent(filterNonWall); TargetPermanent auraTarget = new TargetPermanent(filterNonWall);
this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
Ability ability = new EnchantAbility(auraTarget); this.addAbility(new EnchantAbility(auraTarget));
this.addAbility(ability);
// When Krovikan Plague enters the battlefield, draw a card at the beginning of the next turn's upkeep. // When Krovikan Plague enters the battlefield, draw a card at the beginning of the next turn's upkeep.
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateDelayedTriggeredAbilityEffect( this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateDelayedTriggeredAbilityEffect(
new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse)) new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse)
.setText("draw a card at the beginning of the next turn's upkeep"), false)); ).setText("draw a card at the beginning of the next turn's upkeep"), false));
// Tap enchanted creature: Tap enchanted creature: Krovikan Plague deals 1 damage to any target. Put a -0/-1 counter on enchanted creature. Activate this ability only if enchanted creature is untapped. // Tap enchanted creature: Tap enchanted creature: Krovikan Plague deals 1 damage to any target. Put a -0/-1 counter on enchanted creature. Activate this ability only if enchanted creature is untapped.
Ability ability2 = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, Ability ability = new ActivateIfConditionActivatedAbility(
new DamageTargetEffect(1), new TapAttachedCost(), new AttachedToMatchesFilterCondition(filter)); new DamageTargetEffect(1), new TapAttachedCost(), condition
ability2.addEffect(new AddCountersAttachedEffect(CounterType.M0M1.createInstance(),"enchanted creature")); );
ability2.addTarget(new TargetAnyTarget()); ability.addEffect(new AddCountersAttachedEffect(
this.addAbility(ability2); CounterType.M0M1.createInstance(), "enchanted creature"
));
ability.addTarget(new TargetAnyTarget());
this.addAbility(ability);
} }
private KrovikanPlague(final KrovikanPlague card) { private KrovikanPlague(final KrovikanPlague card) {

View file

@ -1,13 +1,10 @@
package mage.cards.l; package mage.cards.l;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.MyTurnBeforeAttackersDeclaredCondition; import mage.abilities.condition.common.MyTurnBeforeAttackersDeclaredCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.effects.common.ReturnToHandSourceEffect;
import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -15,24 +12,18 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.constants.Zone; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent; import mage.target.TargetPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.common.TargetCreaturePermanent; import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class LadySun extends CardImpl { public final class LadySun extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another target creature");
static {
filter.add(AnotherPredicate.instance);
}
public LadySun(UUID ownerId, CardSetInfo setInfo) { public LadySun(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{U}");
this.supertype.add(SuperType.LEGENDARY); this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.ADVISOR); this.subtype.add(SubType.ADVISOR);
@ -40,14 +31,12 @@ public final class LadySun extends CardImpl {
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {tap}: Return Lady Sun and another target creature to their owners' hands. Activate this ability only during your turn, before attackers are declared. // {tap}: Return Lady Sun and another target creature to their owners' hands. Activate this ability only during your turn, before attackers are declared.
Effect effect = new ReturnToHandSourceEffect(true); Ability ability = new ActivateIfConditionActivatedAbility(
effect.setText("Return Lady Sun"); new ReturnToHandSourceEffect(true).setText("return {this}"),
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
effect, new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance); );
effect = new ReturnToHandTargetEffect(); ability.addEffect(new ReturnToHandTargetEffect().setText("and another target creature to their owners' hands"));
effect.setText("and another target creature to their owners' hands"); ability.addTarget(new TargetPermanent(StaticFilters.FILTER_ANOTHER_TARGET_CREATURE));
ability.addTarget(new TargetCreaturePermanent(filter));
ability.addEffect(effect);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,60 +1,54 @@
package mage.cards.l; package mage.cards.l;
import java.util.UUID;
import mage.Mana;
import mage.ObjectColor; import mage.ObjectColor;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.EntersBattlefieldTappedAbility; import mage.abilities.common.EntersBattlefieldTappedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.LoseLifeOpponentsEffect;
import mage.abilities.mana.SimpleManaAbility; import mage.abilities.mana.BlackManaAbility;
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.ComparisonType; import mage.constants.ComparisonType;
import mage.constants.Outcome; import mage.constants.SubType;
import mage.constants.Zone; import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.ColorPredicate; import mage.filter.predicate.mageobject.ColorPredicate;
import mage.game.Game;
import mage.players.Player; import java.util.UUID;
/** /**
* @author jeffwadsworth * @author jeffwadsworth
*/ */
public final class LeechriddenSwamp extends CardImpl { public final class LeechriddenSwamp extends CardImpl {
private static final FilterControlledPermanent filter = private static final FilterPermanent filter =
new FilterControlledPermanent("you control two or more black permanents"); new FilterControlledPermanent("you control two or more black permanents");
static { static {
filter.add(new ColorPredicate(ObjectColor.BLACK)); filter.add(new ColorPredicate(ObjectColor.BLACK));
} }
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 1);
public LeechriddenSwamp(UUID ownerId, CardSetInfo setInfo) { public LeechriddenSwamp(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
this.subtype.add(SubType.SWAMP); this.subtype.add(SubType.SWAMP);
// ({tap}: Add {B}.) // ({tap}: Add {B}.)
this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, Mana.BlackMana(1), new TapSourceCost())); this.addAbility(new BlackManaAbility());
// Leechridden Swamp enters the battlefield tapped. // Leechridden Swamp enters the battlefield tapped.
this.addAbility(new EntersBattlefieldTappedAbility()); this.addAbility(new EntersBattlefieldTappedAbility());
// {B}, {tap}: Each opponent loses 1 life. Activate this ability only if you control two or more black permanents. // {B}, {tap}: Each opponent loses 1 life. Activate this ability only if you control two or more black permanents.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new LoseLifeOpponentsEffect(1), new ManaCostsImpl<>("{B}"), condition
new LeechriddenSwampLoseLifeEffect(), );
new ManaCostsImpl<>("{B}"),
new PermanentsOnTheBattlefieldCondition(
filter,
ComparisonType.MORE_THAN,
1));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
this.addAbility(ability); this.addAbility(ability);
} }
@ -68,35 +62,3 @@ public final class LeechriddenSwamp extends CardImpl {
return new LeechriddenSwamp(this); return new LeechriddenSwamp(this);
} }
} }
class LeechriddenSwampLoseLifeEffect extends OneShotEffect {
LeechriddenSwampLoseLifeEffect() {
super(Outcome.Benefit);
staticText = "each opponent loses 1 life";
}
private LeechriddenSwampLoseLifeEffect(final LeechriddenSwampLoseLifeEffect effect) {
super(effect);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
for (UUID opponentId : game.getOpponents(controller.getId())) {
Player opponent = game.getPlayer(opponentId);
if (opponent != null) {
opponent.loseLife(1, game, source, false);
}
}
return true;
}
return false;
}
@Override
public LeechriddenSwampLoseLifeEffect copy() {
return new LeechriddenSwampLoseLifeEffect(this);
}
}

View file

@ -1,7 +1,5 @@
package mage.cards.l; package mage.cards.l;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -13,24 +11,25 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.constants.Zone; import mage.filter.FilterCard;
import mage.filter.common.FilterCreatureCard; import mage.filter.common.FilterCreatureCard;
import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class LoyalRetainers extends CardImpl { public final class LoyalRetainers extends CardImpl {
private static final FilterCreatureCard filter = new FilterCreatureCard("legendary creature card from your graveyard"); private static final FilterCard filter = new FilterCreatureCard("legendary creature card from your graveyard");
static { static {
filter.add(SuperType.LEGENDARY.getPredicate()); filter.add(SuperType.LEGENDARY.getPredicate());
} }
public LoyalRetainers(UUID ownerId, CardSetInfo setInfo) { public LoyalRetainers(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.ADVISOR); this.subtype.add(SubType.ADVISOR);
@ -38,10 +37,12 @@ public final class LoyalRetainers extends CardImpl {
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// Sacrifice Loyal Retainers: Return target legendary creature card from your graveyard to the battlefield. Activate this ability only during your turn, before attackers are declared. // Sacrifice Loyal Retainers: Return target legendary creature card from your graveyard to the battlefield. Activate this ability only during your turn, before attackers are declared.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new ReturnFromGraveyardToBattlefieldTargetEffect(), new SacrificeSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance); Ability ability = new ActivateIfConditionActivatedAbility(
new ReturnFromGraveyardToBattlefieldTargetEffect(),
new SacrificeSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetCardInYourGraveyard(filter)); ability.addTarget(new TargetCardInYourGraveyard(filter));
this.addAbility(ability); this.addAbility(ability);
} }
private LoyalRetainers(final LoyalRetainers card) { private LoyalRetainers(final LoyalRetainers card) {

View file

@ -1,9 +1,6 @@
package mage.cards.l; package mage.cards.l;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.MyTurnBeforeAttackersDeclaredCondition; import mage.abilities.condition.common.MyTurnBeforeAttackersDeclaredCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
@ -13,16 +10,16 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.constants.Zone;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class LuSuWuAdvisor extends CardImpl { public final class LuSuWuAdvisor extends CardImpl {
public LuSuWuAdvisor(UUID ownerId, CardSetInfo setInfo) { public LuSuWuAdvisor(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{U}");
this.supertype.add(SuperType.LEGENDARY); this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.ADVISOR); this.subtype.add(SubType.ADVISOR);
@ -30,9 +27,10 @@ public final class LuSuWuAdvisor extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// {tap}: Draw a card. Activate this ability only during your turn, before attackers are declared. // {tap}: Draw a card. Activate this ability only during your turn, before attackers are declared.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, this.addAbility(new ActivateIfConditionActivatedAbility(
new DrawCardSourceControllerEffect(1), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance); new DrawCardSourceControllerEffect(1), new TapSourceCost(),
this.addAbility(ability); MyTurnBeforeAttackersDeclaredCondition.instance
));
} }
private LuSuWuAdvisor(final LuSuWuAdvisor card) { private LuSuWuAdvisor(final LuSuWuAdvisor card) {

View file

@ -12,7 +12,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.constants.Zone;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.token.AngelToken; import mage.game.permanent.token.AngelToken;
@ -39,8 +38,7 @@ public final class LuminarchAscension extends CardImpl {
// {1}{W}: Create a 4/4 white Angel creature token with flying. Activate this ability only if Luminarch Ascension has four or more quest counters on it. // {1}{W}: Create a 4/4 white Angel creature token with flying. Activate this ability only if Luminarch Ascension has four or more quest counters on it.
this.addAbility(new ActivateIfConditionActivatedAbility( this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new CreateTokenEffect(new AngelToken()), new CreateTokenEffect(new AngelToken()), new ManaCostsImpl<>("{1}{W}"), condition
new ManaCostsImpl<>("{1}{W}"), condition
)); ));
} }

View file

@ -1,7 +1,5 @@
package mage.cards.l; package mage.cards.l;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -12,19 +10,19 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.AbilityWord; import mage.constants.AbilityWord;
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.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class LurkingArynx extends CardImpl { public final class LurkingArynx extends CardImpl {
public LurkingArynx(UUID ownerId, CardSetInfo setInfo) { public LurkingArynx(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}");
this.subtype.add(SubType.CAT); this.subtype.add(SubType.CAT);
this.subtype.add(SubType.BEAST); this.subtype.add(SubType.BEAST);
this.power = new MageInt(3); this.power = new MageInt(3);
@ -32,13 +30,11 @@ public final class LurkingArynx extends CardImpl {
// <i>Formidable</i> &mdash; {2}{G}: Target creature blocks Lurking Arynx this turn if able. Activate this ability only if creatures you control have total power 8 or greater. // <i>Formidable</i> &mdash; {2}{G}: Target creature blocks Lurking Arynx this turn if able. Activate this ability only if creatures you control have total power 8 or greater.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new MustBeBlockedByTargetSourceEffect(Duration.EndOfTurn), new MustBeBlockedByTargetSourceEffect(Duration.EndOfTurn),
new ManaCostsImpl<>("{2}{G}"), new ManaCostsImpl<>("{2}{G}"), FormidableCondition.instance
FormidableCondition.instance); );
ability.setAbilityWord(AbilityWord.FORMIDABLE);
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability.setAbilityWord(AbilityWord.FORMIDABLE));
} }
private LurkingArynx(final LurkingArynx card) { private LurkingArynx(final LurkingArynx card) {

View file

@ -12,7 +12,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.WatcherScope; import mage.constants.WatcherScope;
import mage.constants.Zone;
import mage.game.Game; import mage.game.Game;
import mage.game.events.EntersTheBattlefieldEvent; import mage.game.events.EntersTheBattlefieldEvent;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
@ -27,11 +26,6 @@ import java.util.*;
*/ */
public final class MastersManufactory extends CardImpl { public final class MastersManufactory extends CardImpl {
private static final Hint hint = new ConditionHint(
MastersManufactoryCondition.instance,
"{this} or another artifact entered under your control this turn"
);
public MastersManufactory(UUID ownerId, CardSetInfo setInfo) { public MastersManufactory(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, ""); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "");
this.nightCard = true; this.nightCard = true;
@ -40,11 +34,9 @@ public final class MastersManufactory extends CardImpl {
// {T}: Create a 4/4 white and blue Golem artifact creature token. Activate only if Master's Manufactory or another artifact entered the battlefield under your control this turn. // {T}: Create a 4/4 white and blue Golem artifact creature token. Activate only if Master's Manufactory or another artifact entered the battlefield under your control this turn.
this.addAbility(new ActivateIfConditionActivatedAbility( this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new CreateTokenEffect(new GolemWhiteBlueToken()), new CreateTokenEffect(new GolemWhiteBlueToken()),
new TapSourceCost(), new TapSourceCost(), MastersManufactoryCondition.instance
MastersManufactoryCondition.instance ).addHint(MastersManufactoryCondition.getHint()), new MastersManufactoryWatcher());
).addHint(hint), new MastersManufactoryWatcher());
} }
private MastersManufactory(final MastersManufactory card) { private MastersManufactory(final MastersManufactory card) {
@ -59,19 +51,23 @@ public final class MastersManufactory extends CardImpl {
enum MastersManufactoryCondition implements Condition { enum MastersManufactoryCondition implements Condition {
instance; instance;
private static final Hint hint = new ConditionHint(instance);
public static Hint getHint() {
return hint;
}
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
Permanent permanent = game.getPermanent(source.getSourceId()); Permanent permanent = game.getPermanent(source.getSourceId());
MastersManufactoryWatcher watcher = game.getState().getWatcher(MastersManufactoryWatcher.class); MastersManufactoryWatcher watcher = game.getState().getWatcher(MastersManufactoryWatcher.class);
return watcher != null return watcher != null && permanent != null
&& permanent != null
&& watcher.check(source.getControllerId(), new MageObjectReference(permanent, game)); && watcher.check(source.getControllerId(), new MageObjectReference(permanent, game));
} }
@Override @Override
public String toString() { public String toString() {
return "if {this} or another artifact entered the battlefield under your control this turn"; return "{this} or another artifact entered the battlefield under your control this turn";
} }
} }

View file

@ -1,25 +1,19 @@
package mage.cards.m; package mage.cards.m;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
import mage.abilities.condition.common.CardsInOpponentGraveyardCondition; import mage.abilities.condition.common.CardsInOpponentGraveyardCondition;
import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.effects.common.MillCardsTargetEffect;
import mage.constants.SubType;
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.CardType; import mage.constants.CardType;
import mage.constants.Zone; import mage.constants.SubType;
import mage.game.Game;
import mage.game.events.DamagedPlayerEvent; import java.util.UUID;
import mage.game.events.GameEvent;
import mage.target.targetpointer.FixedTarget;
/** /**
* @author TheElk801 * @author TheElk801
@ -38,11 +32,13 @@ public final class MerfolkWindrobber extends CardImpl {
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// Whenever Merfolk Windrobber deals combat damage to a player, that player mills a card. // Whenever Merfolk Windrobber deals combat damage to a player, that player mills a card.
this.addAbility(new MerfolkWindrobberTriggeredAbility()); this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(
new MillCardsTargetEffect(1), false, true
));
// Sacrifice Merfolk Windrobber: Draw a card. Activate this ability only if an opponent has eight or more cards in their graveyard. // Sacrifice Merfolk Windrobber: Draw a card. Activate this ability only if an opponent has eight or more cards in their graveyard.
this.addAbility(new ActivateIfConditionActivatedAbility( this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new DrawCardSourceControllerEffect(1),
new SacrificeSourceCost(), CardsInOpponentGraveyardCondition.EIGHT new SacrificeSourceCost(), CardsInOpponentGraveyardCondition.EIGHT
).addHint(CardsInOpponentGraveyardCondition.EIGHT.getHint())); ).addHint(CardsInOpponentGraveyardCondition.EIGHT.getHint()));
} }
@ -56,41 +52,3 @@ public final class MerfolkWindrobber extends CardImpl {
return new MerfolkWindrobber(this); return new MerfolkWindrobber(this);
} }
} }
class MerfolkWindrobberTriggeredAbility extends TriggeredAbilityImpl {
public MerfolkWindrobberTriggeredAbility() {
super(Zone.BATTLEFIELD, new MillCardsTargetEffect(1));
}
private MerfolkWindrobberTriggeredAbility(final MerfolkWindrobberTriggeredAbility ability) {
super(ability);
}
@Override
public MerfolkWindrobberTriggeredAbility copy() {
return new MerfolkWindrobberTriggeredAbility(this);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.DAMAGED_PLAYER;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
DamagedPlayerEvent damageEvent = (DamagedPlayerEvent) event;
if (damageEvent.isCombatDamage() && event.getSourceId().equals(this.getSourceId())) {
for (Effect effect : this.getEffects()) {
effect.setTargetPointer(new FixedTarget(event.getPlayerId()));
}
return true;
}
return false;
}
@Override
public String getRule() {
return "Whenever {this} deals combat damage to a player, that player mills a card.";
}
}

View file

@ -28,8 +28,7 @@ public final class MeticulousExcavation extends CardImpl {
// {2}{W}: Return target permanent you control to its owner's hand. If it has unearth, instead exile it, then return that card to its owner's hand. Activate only during your turn. // {2}{W}: Return target permanent you control to its owner's hand. If it has unearth, instead exile it, then return that card to its owner's hand. Activate only during your turn.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new MeticulousExcavationEffect(), new MeticulousExcavationEffect(), new ManaCostsImpl<>("{2}{W}"), MyTurnCondition.instance
new ManaCostsImpl<>("{2}{W}"), MyTurnCondition.instance
); );
ability.addTarget(new TargetControlledPermanent()); ability.addTarget(new TargetControlledPermanent());
this.addAbility(ability); this.addAbility(ability);

View file

@ -16,7 +16,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.constants.WatcherScope; import mage.constants.WatcherScope;
import mage.constants.Zone;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledCreaturePermanent;
import mage.game.Game; import mage.game.Game;
@ -54,7 +53,7 @@ public final class MinasTirith extends CardImpl {
// {1}{W}, {T}: Draw a card. Activate only if you attacked with two or more creatures this turn. // {1}{W}, {T}: Draw a card. Activate only if you attacked with two or more creatures this turn.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new DrawCardSourceControllerEffect(1),
new ManaCostsImpl<>("{1}{W}"), MinasTirithCondition.instance new ManaCostsImpl<>("{1}{W}"), MinasTirithCondition.instance
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());

View file

@ -1,10 +1,10 @@
package mage.cards.m; package mage.cards.m;
import java.util.UUID;
import mage.ObjectColor; import mage.ObjectColor;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.EntersBattlefieldTappedAbility; import mage.abilities.common.EntersBattlefieldTappedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
@ -20,6 +20,8 @@ import mage.game.Game;
import mage.players.Player; import mage.players.Player;
import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
/** /**
* @author LevelX2 * @author LevelX2
*/ */
@ -31,6 +33,8 @@ public final class MistveilPlains extends CardImpl {
filter.add(new ColorPredicate(ObjectColor.WHITE)); filter.add(new ColorPredicate(ObjectColor.WHITE));
} }
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 1);
public MistveilPlains(UUID ownerId, CardSetInfo setInfo) { public MistveilPlains(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
this.subtype.add(SubType.PLAINS); this.subtype.add(SubType.PLAINS);
@ -43,15 +47,11 @@ public final class MistveilPlains extends CardImpl {
// {W}, {tap}: Put target card from your graveyard on the bottom of your library. Activate this ability only if you control two or more white permanents. // {W}, {tap}: Put target card from your graveyard on the bottom of your library. Activate this ability only if you control two or more white permanents.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new MistveilPlainsGraveyardToLibraryEffect(), new ManaCostsImpl<>("{W}"), condition
new MistveilPlainsGraveyardToLibraryEffect(),
new ManaCostsImpl<>("{W}"),
new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 1)
); );
ability.addTarget(new TargetCardInYourGraveyard()); ability.addTarget(new TargetCardInYourGraveyard());
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
this.addAbility(ability); this.addAbility(ability);
} }
private MistveilPlains(final MistveilPlains card) { private MistveilPlains(final MistveilPlains card) {

View file

@ -56,7 +56,6 @@ public final class MonumentToPerfection extends CardImpl {
// {3}: Monument to Perfection becomes a 9/9 Phyrexian Construct artifact creature, loses all abilities, and gains indestructible and toxic 9. Activate only if there are nine or more lands with different names among the basic, Sphere, and Locus lands you control. // {3}: Monument to Perfection becomes a 9/9 Phyrexian Construct artifact creature, loses all abilities, and gains indestructible and toxic 9. Activate only if there are nine or more lands with different names among the basic, Sphere, and Locus lands you control.
this.addAbility(new ActivateIfConditionActivatedAbility( this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new BecomesCreatureSourceEffect(new CreatureToken( new BecomesCreatureSourceEffect(new CreatureToken(
9, 9, "9/9 Phyrexian Construct artifact creature, " + 9, 9, "9/9 Phyrexian Construct artifact creature, " +
"loses all abilities, and gains indestructible and toxic 9", SubType.PHYREXIAN, SubType.CONSTRUCT "loses all abilities, and gains indestructible and toxic 9", SubType.PHYREXIAN, SubType.CONSTRUCT

View file

@ -9,9 +9,11 @@ import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.ChooseACardNameEffect; import mage.abilities.effects.common.ChooseACardNameEffect;
import mage.abilities.hint.common.MyTurnHint;
import mage.cards.*; import mage.cards.*;
import mage.constants.*; import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.game.Game; import mage.game.Game;
import mage.players.Player; import mage.players.Player;
import mage.target.common.TargetOpponent; import mage.target.common.TargetOpponent;
@ -33,11 +35,13 @@ public final class Nebuchadnezzar extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// {X}, {T}: Choose a card name. Target opponent reveals X cards at random from their hand. Then that player discards all cards with that name revealed this way. Activate this ability only during your turn. // {X}, {T}: Choose a card name. Target opponent reveals X cards at random from their hand. Then that player discards all cards with that name revealed this way. Activate this ability only during your turn.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new ChooseACardNameEffect(ChooseACardNameEffect.TypeOfName.ALL), new ManaCostsImpl<>("{X}"), MyTurnCondition.instance); Ability ability = new ActivateIfConditionActivatedAbility(
new ChooseACardNameEffect(ChooseACardNameEffect.TypeOfName.ALL),
new ManaCostsImpl<>("{X}"), MyTurnCondition.instance
);
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addEffect(new NebuchadnezzarEffect()); ability.addEffect(new NebuchadnezzarEffect());
ability.addTarget(new TargetOpponent()); ability.addTarget(new TargetOpponent());
ability.addHint(MyTurnHint.instance);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,7 +1,5 @@
package mage.cards.n; package mage.cards.n;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.ObjectColor; import mage.ObjectColor;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -12,17 +10,18 @@ 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.common.FilterCreatureCard; import mage.filter.common.FilterCreatureCard;
import mage.filter.predicate.mageobject.ColorPredicate; import mage.filter.predicate.mageobject.ColorPredicate;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class NorwoodPriestess extends CardImpl { public final class NorwoodPriestess extends CardImpl {
private static final FilterCreatureCard filter = new FilterCreatureCard("a green creature card"); private static final FilterCard filter = new FilterCreatureCard("a green creature card");
static { static {
filter.add(new ColorPredicate(ObjectColor.GREEN)); filter.add(new ColorPredicate(ObjectColor.GREEN));
@ -37,10 +36,8 @@ public final class NorwoodPriestess extends CardImpl {
// {tap}: You may put a green creature card from your hand onto the battlefield. Activate this ability only during your turn, before attackers are declared. // {tap}: You may put a green creature card from your hand onto the battlefield. Activate this ability only during your turn, before attackers are declared.
this.addAbility(new ActivateIfConditionActivatedAbility( this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new PutCardFromHandOntoBattlefieldEffect(filter), new PutCardFromHandOntoBattlefieldEffect(filter),
new TapSourceCost(), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
MyTurnBeforeAttackersDeclaredCondition.instance
)); ));
} }

View file

@ -13,7 +13,6 @@ import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.RequirementEffect; import mage.abilities.effects.RequirementEffect;
import mage.abilities.effects.RestrictionEffect; import mage.abilities.effects.RestrictionEffect;
import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.DestroyTargetEffect;
import mage.abilities.hint.common.MyTurnHint;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
@ -46,9 +45,10 @@ public final class OracleEnVec extends CardImpl {
// {T}: Target opponent chooses any number of creatures they control. During that players next turn, the chosen // {T}: Target opponent chooses any number of creatures they control. During that players next turn, the chosen
// creatures attack if able, and other creatures cant attack. At the beginning of that turns end step, // creatures attack if able, and other creatures cant attack. At the beginning of that turns end step,
// destroy each of the chosen creatures that didnt attack this turn. Activate this ability only during your turn. // destroy each of the chosen creatures that didnt attack this turn. Activate this ability only during your turn.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new OracleEnVecEffect(), new TapSourceCost(), MyTurnCondition.instance); Ability ability = new ActivateIfConditionActivatedAbility(
new OracleEnVecEffect(), new TapSourceCost(), MyTurnCondition.instance
);
ability.addTarget(new TargetOpponent()); ability.addTarget(new TargetOpponent());
ability.addHint(MyTurnHint.instance);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,7 +1,5 @@
package mage.cards.p; package mage.cards.p;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -12,19 +10,18 @@ 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.Duration;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.constants.Zone;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class PangTongYoungPhoenix extends CardImpl { public final class PangTongYoungPhoenix extends CardImpl {
public PangTongYoungPhoenix(UUID ownerId, CardSetInfo setInfo) { public PangTongYoungPhoenix(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}{W}");
this.supertype.add(SuperType.LEGENDARY); this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.ADVISOR); this.subtype.add(SubType.ADVISOR);
@ -32,8 +29,10 @@ public final class PangTongYoungPhoenix extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// {tap}: Target creature gets +0/+2 until end of turn. Activate this ability only during your turn, before attackers are declared. // {tap}: Target creature gets +0/+2 until end of turn. Activate this ability only during your turn, before attackers are declared.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, Ability ability = new ActivateIfConditionActivatedAbility(
new BoostTargetEffect(0, 2, Duration.EndOfTurn), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance); new BoostTargetEffect(0, 2), new TapSourceCost(),
MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -6,7 +6,6 @@ import mage.abilities.condition.common.MyTurnCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.hint.common.MyTurnHint;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.cards.Cards; import mage.cards.Cards;
@ -32,12 +31,10 @@ public final class PortalOfSanctuary extends CardImpl {
// {1}, {T}: Return target creature you control and each Aura attached to it to their owners' hands. Activate this ability only during your turn. // {1}, {T}: Return target creature you control and each Aura attached to it to their owners' hands. Activate this ability only during your turn.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new PortalOfSanctuaryEffect(), new PortalOfSanctuaryEffect(), new GenericManaCost(1), MyTurnCondition.instance
new GenericManaCost(1), MyTurnCondition.instance
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addTarget(new TargetControlledCreaturePermanent()); ability.addTarget(new TargetControlledCreaturePermanent());
ability.addHint(MyTurnHint.instance);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -8,12 +8,10 @@ import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.RevealHandTargetEffect; import mage.abilities.effects.common.RevealHandTargetEffect;
import mage.abilities.hint.common.MyTurnHint;
import mage.cards.*; import mage.cards.*;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.players.Player; import mage.players.Player;
@ -35,11 +33,12 @@ public final class RagMan extends CardImpl {
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {B}{B}{B}, {T}: Target opponent reveals their hand and discards a creature card at random. Activate this ability only during your turn. // {B}{B}{B}, {T}: Target opponent reveals their hand and discards a creature card at random. Activate this ability only during your turn.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new RevealHandTargetEffect(), new ManaCostsImpl<>("{B}{B}{B}"), MyTurnCondition.instance); Ability ability = new ActivateIfConditionActivatedAbility(
new RevealHandTargetEffect(), new ManaCostsImpl<>("{B}{B}{B}"), MyTurnCondition.instance
);
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addEffect(new RagManDiscardEffect()); ability.addEffect(new RagManDiscardEffect());
ability.addTarget(new TargetOpponent()); ability.addTarget(new TargetOpponent());
ability.addHint(MyTurnHint.instance);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -15,7 +15,6 @@ import mage.cards.CardSetInfo;
import mage.constants.AbilityWord; import mage.constants.AbilityWord;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone;
import java.util.UUID; import java.util.UUID;
@ -41,8 +40,7 @@ public final class RavingVisionary extends CardImpl {
// Delirium {2}{U}, {T}: Draw a card. Activate only if there are four or more card types among cards in your graveyard. // Delirium {2}{U}, {T}: Draw a card. Activate only if there are four or more card types among cards in your graveyard.
ability = new ActivateIfConditionActivatedAbility( ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new DrawCardSourceControllerEffect(1), new ManaCostsImpl<>("{2}{U}"), DeliriumCondition.instance
new ManaCostsImpl<>("{2}{U}"), DeliriumCondition.instance
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
this.addAbility(ability.addHint(CardTypesInGraveyardCount.YOU.getHint()).setAbilityWord(AbilityWord.DELIRIUM)); this.addAbility(ability.addHint(CardTypesInGraveyardCount.YOU.getHint()).setAbilityWord(AbilityWord.DELIRIUM));

View file

@ -1,10 +1,9 @@
package mage.cards.r; package mage.cards.r;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
@ -12,37 +11,39 @@ import mage.abilities.effects.common.CounterTargetEffect;
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.ComparisonType; import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.constants.Zone; import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
import mage.target.common.TargetActivatedAbility; import mage.target.common.TargetActivatedAbility;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class RimewindCryomancer extends CardImpl { public final class RimewindCryomancer extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent("you control four or more snow permanents"); private static final FilterPermanent filter = new FilterControlledPermanent("you control four or more snow permanents");
static { static {
filter.add(SuperType.SNOW.getPredicate()); filter.add(SuperType.SNOW.getPredicate());
} }
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 3);
public RimewindCryomancer(UUID ownerId, CardSetInfo setInfo) { public RimewindCryomancer(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.WIZARD); this.subtype.add(SubType.WIZARD);
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// {1}, {tap}: Counter target activated ability. Activate this ability only if you control four or more snow permanents. // {1}, {tap}: Counter target activated ability. Activate this ability only if you control four or more snow permanents.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, Ability ability = new ActivateIfConditionActivatedAbility(
new CounterTargetEffect(), new CounterTargetEffect(), new GenericManaCost(1), condition
new GenericManaCost(1), );
new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 3));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addTarget(new TargetActivatedAbility()); ability.addTarget(new TargetActivatedAbility());
this.addAbility(ability); this.addAbility(ability);

View file

@ -1,10 +1,9 @@
package mage.cards.r; package mage.cards.r;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
@ -12,15 +11,15 @@ import mage.abilities.effects.common.MayTapOrUntapTargetEffect;
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.ComparisonType; import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class RimewindTaskmage extends CardImpl { public final class RimewindTaskmage extends CardImpl {
@ -31,18 +30,19 @@ public final class RimewindTaskmage extends CardImpl {
filter.add(SuperType.SNOW.getPredicate()); filter.add(SuperType.SNOW.getPredicate());
} }
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 3);
public RimewindTaskmage(UUID ownerId, CardSetInfo setInfo) { public RimewindTaskmage(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.WIZARD); this.subtype.add(SubType.WIZARD);
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// {1}, {tap}: You may tap or untap target permanent. Activate this ability only if you control four or more snow permanents. // {1}, {tap}: You may tap or untap target permanent. Activate this ability only if you control four or more snow permanents.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, Ability ability = new ActivateIfConditionActivatedAbility(
new MayTapOrUntapTargetEffect(), new MayTapOrUntapTargetEffect(), new GenericManaCost(1), condition
new GenericManaCost(1), );
new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 3));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addTarget(new TargetPermanent()); ability.addTarget(new TargetPermanent());
this.addAbility(ability); this.addAbility(ability);

View file

@ -12,7 +12,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledCreaturePermanent;
@ -44,9 +43,7 @@ public final class Rivendell extends CardImpl {
// {1}{U}, {T}: Scry 2. Activate only if you control a legendary creature. // {1}{U}, {T}: Scry 2. Activate only if you control a legendary creature.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new ScryEffect(2, false), new ManaCostsImpl<>("{1}{U}"), condition
new ScryEffect(2, false),
new ManaCostsImpl<>("{1}{U}"), condition
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
this.addAbility(ability); this.addAbility(ability);

View file

@ -6,13 +6,11 @@ import mage.abilities.condition.common.MyTurnCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.abilities.hint.common.MyTurnHint;
import mage.abilities.mana.ColorlessManaAbility; import mage.abilities.mana.ColorlessManaAbility;
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.TargetController; import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.predicate.mageobject.CommanderPredicate; import mage.filter.predicate.mageobject.CommanderPredicate;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
@ -39,13 +37,12 @@ public final class SanctumOfEternity extends CardImpl {
// {2}, {T}: Return target commander you own from the battlefield to your hand. Activate this ability only during your turn. // {2}, {T}: Return target commander you own from the battlefield to your hand. Activate this ability only during your turn.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new ReturnToHandTargetEffect() new ReturnToHandTargetEffect()
.setText("return target commander you own from the battlefield to your hand"), .setText("return target commander you own from the battlefield to your hand"),
new GenericManaCost(2), MyTurnCondition.instance new GenericManaCost(2), MyTurnCondition.instance
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addTarget(new TargetPermanent(filter)); ability.addTarget(new TargetPermanent(filter));
ability.addHint(MyTurnHint.instance);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -40,7 +40,6 @@ public final class SarevoksTome extends CardImpl {
// {T}: Add {C}. If you have the initiative, add {C}{C} instead. // {T}: Add {C}. If you have the initiative, add {C}{C} instead.
this.addAbility(new SimpleManaAbility( this.addAbility(new SimpleManaAbility(
Zone.BATTLEFIELD,
new ConditionalManaEffect( new ConditionalManaEffect(
new BasicManaEffect(Mana.ColorlessMana(2)), new BasicManaEffect(Mana.ColorlessMana(2)),
new BasicManaEffect(Mana.ColorlessMana(1)), new BasicManaEffect(Mana.ColorlessMana(1)),
@ -51,8 +50,7 @@ public final class SarevoksTome extends CardImpl {
// {3}, {T}: Exile cards from the top of your library until you exile a nonland card. You may cast that card without paying its mana cost. Activate only if you've completed a dungeon. // {3}, {T}: Exile cards from the top of your library until you exile a nonland card. You may cast that card without paying its mana cost. Activate only if you've completed a dungeon.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new SarevoksTomeEffect(), new SarevoksTomeEffect(), new GenericManaCost(3), CompletedDungeonCondition.instance
new GenericManaCost(3), CompletedDungeonCondition.instance
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
this.addAbility(ability.addHint(CompletedDungeonCondition.getHint()), new CompletedDungeonWatcher()); this.addAbility(ability.addHint(CompletedDungeonCondition.getHint()), new CompletedDungeonWatcher());

View file

@ -6,11 +6,9 @@ import mage.abilities.condition.common.MyTurnCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.discard.DiscardTargetEffect; import mage.abilities.effects.common.discard.DiscardTargetEffect;
import mage.abilities.hint.common.MyTurnHint;
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.Zone;
import mage.target.TargetPlayer; import mage.target.TargetPlayer;
import java.util.UUID; import java.util.UUID;
@ -23,12 +21,12 @@ public final class ScepterOfFugue extends CardImpl {
public ScepterOfFugue(UUID ownerId, CardSetInfo setInfo) { public ScepterOfFugue(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{B}{B}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{B}{B}");
// {1}{B}, {T}: Target player discards a card. Activate this ability only during your turn. // {1}{B}, {T}: Target player discards a card. Activate this ability only during your turn.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new DiscardTargetEffect(1), new ManaCostsImpl<>("{1}{B}"), MyTurnCondition.instance); Ability ability = new ActivateIfConditionActivatedAbility(
new DiscardTargetEffect(1), new ManaCostsImpl<>("{1}{B}"), MyTurnCondition.instance
);
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addTarget(new TargetPlayer()); ability.addTarget(new TargetPlayer());
ability.addHint(MyTurnHint.instance);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,8 +1,5 @@
package mage.cards.s; package mage.cards.s;
import java.util.List;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -13,13 +10,12 @@ 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.game.Game; import mage.game.Game;
import mage.game.stack.Spell;
import mage.watchers.common.SpellsCastWatcher; import mage.watchers.common.SpellsCastWatcher;
import java.util.UUID;
/** /**
*
* @author anonymous * @author anonymous
*/ */
public final class SeekerOfInsight extends CardImpl { public final class SeekerOfInsight extends CardImpl {
@ -33,12 +29,9 @@ public final class SeekerOfInsight extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// {T}: Draw a card, then discard a card. Activate this ability only if you've cast a noncreature spell this turn. // {T}: Draw a card, then discard a card. Activate this ability only if you've cast a noncreature spell this turn.
this.addAbility( this.addAbility(new ActivateIfConditionActivatedAbility(
new ActivateIfConditionActivatedAbility( new DrawDiscardControllerEffect(), new TapSourceCost(), SeekerOfInsightCondition.instance
Zone.BATTLEFIELD, ));
new DrawDiscardControllerEffect(),
new TapSourceCost(),
new CastNonCreatureSpellCondition()));
} }
private SeekerOfInsight(final SeekerOfInsight card) { private SeekerOfInsight(final SeekerOfInsight card) {
@ -51,22 +44,17 @@ public final class SeekerOfInsight extends CardImpl {
} }
} }
class CastNonCreatureSpellCondition implements Condition { enum SeekerOfInsightCondition implements Condition {
instance;
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
SpellsCastWatcher watcher = game.getState().getWatcher(SpellsCastWatcher.class); return game
if (watcher != null) { .getState()
List<Spell> spellsCast = watcher.getSpellsCastThisTurn(source.getControllerId()); .getWatcher(SpellsCastWatcher.class)
if (spellsCast != null) { .getSpellsCastThisTurn(source.getControllerId())
for (Spell spell : spellsCast) { .stream()
if (!spell.isCreature(game)) { .anyMatch(spell -> !spell.isCreature(game));
return true;
}
}
}
}
return false;
} }
@Override @Override

View file

@ -1,14 +1,9 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID;
import mage.ConditionalMana; import mage.ConditionalMana;
import mage.MageInt; import mage.MageInt;
import mage.MageObject;
import mage.Mana;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.FormidableCondition; import mage.abilities.condition.common.FormidableCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
@ -20,26 +15,25 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.AbilityWord; import mage.constants.AbilityWord;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.Zone; import mage.constants.SubType;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game; import mage.game.Game;
import mage.game.stack.Spell;
import mage.players.Player; import mage.players.Player;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class ShamanOfForgottenWays extends CardImpl { public final class ShamanOfForgottenWays extends CardImpl {
public ShamanOfForgottenWays(UUID ownerId, CardSetInfo setInfo) { public ShamanOfForgottenWays(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.SHAMAN); this.subtype.add(SubType.SHAMAN);
this.power = new MageInt( 2); this.power = new MageInt(2);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// {T}:Add two mana in any combination of colors. Spend this mana only to cast creature spells. // {T}:Add two mana in any combination of colors. Spend this mana only to cast creature spells.
@ -47,13 +41,10 @@ public final class ShamanOfForgottenWays extends CardImpl {
// <i>Formidable</i> &mdash; {9}{G}{G},{T}:Each player's life total becomes the number of creatures they control. Activate the ability only if creatures you control have total power 8 or greater. // <i>Formidable</i> &mdash; {9}{G}{G},{T}:Each player's life total becomes the number of creatures they control. Activate the ability only if creatures you control have total power 8 or greater.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new ShamanOfForgottenWaysEffect(), new ManaCostsImpl<>("{9}{G}{G}"), FormidableCondition.instance
new ShamanOfForgottenWaysEffect(), );
new ManaCostsImpl<>("{9}{G}{G}"),
FormidableCondition.instance);
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.setAbilityWord(AbilityWord.FORMIDABLE); this.addAbility(ability.setAbilityWord(AbilityWord.FORMIDABLE));
this.addAbility(ability);
} }
private ShamanOfForgottenWays(final ShamanOfForgottenWays card) { private ShamanOfForgottenWays(final ShamanOfForgottenWays card) {
@ -100,9 +91,9 @@ class ShamanOfForgottenWaysEffect extends OneShotEffect {
Player controller = game.getPlayer(source.getControllerId()); Player controller = game.getPlayer(source.getControllerId());
if (controller != null) { if (controller != null) {
FilterPermanent filter = new FilterCreaturePermanent(); FilterPermanent filter = new FilterCreaturePermanent();
for(UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) {
Player player = game.getPlayer(playerId); Player player = game.getPlayer(playerId);
if (player != null){ if (player != null) {
int numberCreatures = game.getBattlefield().getAllActivePermanents(filter, playerId, game).size(); int numberCreatures = game.getBattlefield().getAllActivePermanents(filter, playerId, game).size();
player.setLife(numberCreatures, game, source); player.setLife(numberCreatures, game, source);
} }

View file

@ -1,9 +1,6 @@
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.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.MyTurnBeforeAttackersDeclaredCondition; import mage.abilities.condition.common.MyTurnBeforeAttackersDeclaredCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
@ -12,24 +9,24 @@ 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 java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class ShuFarmer extends CardImpl { public final class ShuFarmer extends CardImpl {
public ShuFarmer(UUID ownerId, CardSetInfo setInfo) { public ShuFarmer(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// {tap}: You gain 1 life. Activate this ability only during your turn, before attackers are declared. // {tap}: You gain 1 life. Activate this ability only during your turn, before attackers are declared.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, this.addAbility(new ActivateIfConditionActivatedAbility(
new GainLifeEffect(1), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance); new GainLifeEffect(1), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
this.addAbility(ability); ));
} }
private ShuFarmer(final ShuFarmer card) { private ShuFarmer(final ShuFarmer card) {

View file

@ -1,11 +1,9 @@
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.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.CantBlockAbility; import mage.abilities.common.CantBlockAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.RegenerateSourceEffect; import mage.abilities.effects.common.RegenerateSourceEffect;
@ -14,26 +12,29 @@ 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.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.ColorlessPredicate;
import mage.filter.predicate.mageobject.AnotherPredicate; import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.filter.predicate.mageobject.ColorlessPredicate;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class Skitterskin extends CardImpl { public final class Skitterskin extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("you control another colorless creature"); private static final FilterPermanent filter = new FilterControlledCreaturePermanent("you control another colorless creature");
static { static {
filter.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);
filter.add(ColorlessPredicate.instance); filter.add(ColorlessPredicate.instance);
} }
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter);
public Skitterskin(UUID ownerId, CardSetInfo setInfo) { public Skitterskin(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}");
this.subtype.add(SubType.ELDRAZI); this.subtype.add(SubType.ELDRAZI);
this.subtype.add(SubType.DRONE); this.subtype.add(SubType.DRONE);
this.power = new MageInt(4); this.power = new MageInt(4);
@ -46,11 +47,9 @@ public final class Skitterskin extends CardImpl {
this.addAbility(new CantBlockAbility()); this.addAbility(new CantBlockAbility());
// {1}{B}: Regenerate Skitterskin. Activate this ability only if you control another colorless creature. // {1}{B}: Regenerate Skitterskin. Activate this ability only if you control another colorless creature.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, this.addAbility(new ActivateIfConditionActivatedAbility(
new RegenerateSourceEffect(), new RegenerateSourceEffect(), new ManaCostsImpl<>("{1}{B}"), condition
new ManaCostsImpl<>("{1}{B}"), ));
new PermanentsOnTheBattlefieldCondition(filter));
this.addAbility(ability);
} }
private Skitterskin(final Skitterskin card) { private Skitterskin(final Skitterskin card) {

View file

@ -14,7 +14,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import java.util.UUID; import java.util.UUID;
@ -33,8 +32,9 @@ public final class SteadfastUnicorn extends CardImpl {
// {3}{W}: Creatures you control get +1/+1 and gain vigilance until end of turn. Activate only during your turn. // {3}{W}: Creatures you control get +1/+1 and gain vigilance until end of turn. Activate only during your turn.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.EndOfTurn) new BoostControlledEffect(1, 1, Duration.EndOfTurn)
.setText("creatures you control get +1/+1"), new ManaCostsImpl<>("{3}{W}"), MyTurnCondition.instance .setText("creatures you control get +1/+1"),
new ManaCostsImpl<>("{3}{W}"), MyTurnCondition.instance
); );
ability.addEffect(new GainAbilityControlledEffect( ability.addEffect(new GainAbilityControlledEffect(
VigilanceAbility.getInstance(), Duration.EndOfTurn, VigilanceAbility.getInstance(), Duration.EndOfTurn,

View file

@ -1,7 +1,5 @@
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.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -12,13 +10,13 @@ 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.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.TappedPredicate; import mage.filter.predicate.permanent.TappedPredicate;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class SteamCatapult extends CardImpl { public final class SteamCatapult extends CardImpl {
@ -30,15 +28,16 @@ public final class SteamCatapult extends CardImpl {
} }
public SteamCatapult(UUID ownerId, CardSetInfo setInfo) { public SteamCatapult(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}{W}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.SOLDIER); this.subtype.add(SubType.SOLDIER);
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// {tap}: Destroy target tapped creature. Activate this ability only during your turn, before attackers are declared. // {tap}: Destroy target tapped creature. Activate this ability only during your turn, before attackers are declared.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, Ability ability = new ActivateIfConditionActivatedAbility(
new DestroyTargetEffect(), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance); new DestroyTargetEffect(), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(filter));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -47,8 +47,7 @@ public final class StellaLeeWildCard extends CardImpl {
// {T}: Copy target instant or sorcery spell you control. You may choose new targets for the copy. Activate only if you've cast three or more spells this turn. // {T}: Copy target instant or sorcery spell you control. You may choose new targets for the copy. Activate only if you've cast three or more spells this turn.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new CopyTargetStackObjectEffect(), new CopyTargetStackObjectEffect(), new TapSourceCost(), StellaLeeWildCardCondition.instance
new TapSourceCost(), StellaLeeWildCardCondition.instance
); );
ability.addTarget(new TargetSpell(filter)); ability.addTarget(new TargetSpell(filter));
this.addAbility(ability.addHint(StormAbility.getHint())); this.addAbility(ability.addHint(StormAbility.getHint()));

View file

@ -1,7 +1,5 @@
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.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -11,27 +9,29 @@ import mage.abilities.effects.common.continuous.BoostTargetEffect;
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.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class SternMarshal extends CardImpl { public final class SternMarshal extends CardImpl {
public SternMarshal(UUID ownerId, CardSetInfo setInfo) { public SternMarshal(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.SOLDIER); this.subtype.add(SubType.SOLDIER);
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// {tap}: Target creature gets +2/+2 until end of turn. Activate this ability only during your turn, before attackers are declared. // {tap}: Target creature gets +2/+2 until end of turn. Activate this ability only during your turn, before attackers are declared.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, Ability ability = new ActivateIfConditionActivatedAbility(
new BoostTargetEffect(2, 2, Duration.EndOfTurn), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance); new BoostTargetEffect(2, 2, Duration.EndOfTurn),
new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,7 +1,5 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.ObjectColor; import mage.ObjectColor;
import mage.abilities.Ability; import mage.abilities.Ability;
@ -13,20 +11,21 @@ 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.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.ColorPredicate; import mage.filter.predicate.mageobject.ColorPredicate;
import mage.filter.predicate.permanent.TappedPredicate; import mage.filter.predicate.permanent.TappedPredicate;
import mage.target.common.TargetCreaturePermanent; import mage.target.TargetPermanent;
import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class StoneCatapult extends CardImpl { public final class StoneCatapult extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("tapped nonblack creature"); private static final FilterPermanent filter = new FilterCreaturePermanent("tapped nonblack creature");
static { static {
filter.add(TappedPredicate.TAPPED); filter.add(TappedPredicate.TAPPED);
@ -34,16 +33,17 @@ public final class StoneCatapult extends CardImpl {
} }
public StoneCatapult(UUID ownerId, CardSetInfo setInfo) { public StoneCatapult(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.SOLDIER); this.subtype.add(SubType.SOLDIER);
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// {tap}: Destroy target tapped nonblack creature. Activate this ability only during your turn, before attackers are declared. // {tap}: Destroy target tapped nonblack creature. Activate this ability only during your turn, before attackers are declared.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, Ability ability = new ActivateIfConditionActivatedAbility(
new DestroyTargetEffect(), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance); new DestroyTargetEffect(), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
ability.addTarget(new TargetCreaturePermanent(filter)); );
ability.addTarget(new TargetPermanent(filter));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -6,11 +6,9 @@ import mage.abilities.condition.common.MyTurnCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.EndTurnEffect; import mage.abilities.effects.common.EndTurnEffect;
import mage.abilities.hint.common.MyTurnHint;
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.Zone;
import java.util.UUID; import java.util.UUID;
@ -23,9 +21,10 @@ public final class SundialOfTheInfinite extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}");
// {1}, {T}: End the turn. Activate this ability only during your turn. // {1}, {T}: End the turn. Activate this ability only during your turn.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new EndTurnEffect(), new GenericManaCost(1), MyTurnCondition.instance); Ability ability = new ActivateIfConditionActivatedAbility(
new EndTurnEffect(), new GenericManaCost(1), MyTurnCondition.instance
);
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addHint(MyTurnHint.instance);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -17,10 +17,12 @@ import mage.abilities.keyword.CantBeBlockedSourceAbility;
import mage.abilities.keyword.DefenderAbility; import mage.abilities.keyword.DefenderAbility;
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.constants.Duration;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.game.Game; import mage.game.Game;
import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.UUID; import java.util.UUID;
@ -50,7 +52,7 @@ public final class SurgeEngine extends CardImpl {
// {2}{U}: Surge Engine becomes blue and has base power and toughness 5/4. Activate only if Surge Engine doesn't have defender. // {2}{U}: Surge Engine becomes blue and has base power and toughness 5/4. Activate only if Surge Engine doesn't have defender.
ability = new ActivateIfConditionActivatedAbility( ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new BecomesColorSourceEffect(ObjectColor.BLUE, Duration.Custom), new BecomesColorSourceEffect(ObjectColor.BLUE, Duration.Custom),
new ManaCostsImpl<>("{2}{U}"), SurgeEngineCondition.instance new ManaCostsImpl<>("{2}{U}"), SurgeEngineCondition.instance
); );
ability.addEffect(new SetBasePowerToughnessSourceEffect( ability.addEffect(new SetBasePowerToughnessSourceEffect(
@ -85,7 +87,7 @@ enum SurgeEngineCondition implements Condition {
@Override @Override
public String toString() { public String toString() {
return "if {this} doesn't have defender"; return "{this} doesn't have defender";
} }
} }

View file

@ -1,7 +1,5 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID;
import mage.Mana; import mage.Mana;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -21,6 +19,8 @@ import mage.constants.ManaType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.counters.CounterType; import mage.counters.CounterType;
import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
@ -44,8 +44,7 @@ public final class TabletOfCompleation extends CardImpl {
// {1}, {T}: Draw a card. Activate only if Tablet of Compleation has five or more oil counters on it. // {1}, {T}: Draw a card. Activate only if Tablet of Compleation has five or more oil counters on it.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new DrawCardSourceControllerEffect(1), new GenericManaCost(1), condition2
new GenericManaCost(1), condition2
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
this.addAbility(ability); this.addAbility(ability);

Some files were not shown because too many files have changed in this diff Show more