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;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -13,11 +11,11 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class AlabornVeteran extends CardImpl {
@ -30,8 +28,10 @@ public final class AlabornVeteran extends CardImpl {
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.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
new BoostTargetEffect(2, 2, Duration.EndOfTurn), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance);
Ability ability = new ActivateIfConditionActivatedAbility(
new BoostTargetEffect(2, 2, Duration.EndOfTurn),
new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}

View file

@ -11,7 +11,10 @@ import mage.abilities.hint.common.CovenHint;
import mage.abilities.keyword.TransformAbility;
import mage.cards.CardImpl;
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.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.
this.addAbility(new TransformAbility());
this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new TransformSourceEffect(),
new ManaCostsImpl<>("{1}{W}{W}"), CovenCondition.instance
new TransformSourceEffect(), new ManaCostsImpl<>("{1}{W}{W}"), CovenCondition.instance
).setAbilityWord(AbilityWord.COVEN).addHint(CovenHint.instance));
}

View file

@ -1,22 +1,20 @@
package mage.cards.a;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.PreventAllDamageByAllPermanentsEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.game.Game;
import java.util.UUID;
/**
*
* @author shieldal
*/
public final class AngusMackenzie extends CardImpl {
@ -30,14 +28,11 @@ public final class AngusMackenzie extends CardImpl {
this.power = 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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
effect,
new ManaCostsImpl<>("{G}{W}{U}"),
BeforeCombatDamageCondition.getInstance()
new PreventAllDamageByAllPermanentsEffect(Duration.EndOfTurn, true)
.setText("Prevent all combat damage that would be dealt this turn"),
new ManaCostsImpl<>("{G}{W}{U}"), BeforeCombatDamageCondition.getInstance()
);
ability.addCost(new TapSourceCost());
this.addAbility(ability);

View file

@ -1,7 +1,5 @@
package mage.cards.a;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -12,11 +10,11 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.target.common.TargetAnyTarget;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class ApprenticeSorcerer extends CardImpl {
@ -29,8 +27,10 @@ public final class ApprenticeSorcerer extends CardImpl {
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.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
new DamageTargetEffect(1), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance);
Ability ability = new ActivateIfConditionActivatedAbility(
new DamageTargetEffect(1), new TapSourceCost(),
MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetAnyTarget());
this.addAbility(ability);
}

View file

@ -37,13 +37,9 @@ public final class ArgentSphinx extends CardImpl {
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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new ArgentSphinxEffect(),
new ManaCostsImpl<>("{U}"), MetalcraftCondition.instance
);
ability.setAbilityWord(AbilityWord.METALCRAFT);
ability.addHint(MetalcraftHint.instance);
this.addAbility(ability);
this.addAbility(new ActivateIfConditionActivatedAbility(
new ArgentSphinxEffect(), new ManaCostsImpl<>("{U}"), MetalcraftCondition.instance
).setAbilityWord(AbilityWord.METALCRAFT).addHint(MetalcraftHint.instance));
}
private ArgentSphinx(final ArgentSphinx card) {

View file

@ -1,19 +1,20 @@
package mage.cards.a;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.FormidableCondition;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.cards.CardImpl;
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
*/
public final class AtarkaBeastbreaker extends CardImpl {
@ -26,13 +27,10 @@ public final class AtarkaBeastbreaker extends CardImpl {
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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
this.addAbility(new ActivateIfConditionActivatedAbility(
new BoostSourceEffect(4, 4, Duration.EndOfTurn),
new ManaCostsImpl<>("{4}{G}"),
FormidableCondition.instance);
ability.setAbilityWord(AbilityWord.FORMIDABLE);
this.addAbility(ability);
new ManaCostsImpl<>("{4}{G}"), FormidableCondition.instance
).setAbilityWord(AbilityWord.FORMIDABLE));
}
private AtarkaBeastbreaker(final AtarkaBeastbreaker card) {

View file

@ -1,8 +1,6 @@
package mage.cards.a;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.FormidableCondition;
import mage.abilities.costs.mana.ManaCostsImpl;
@ -10,11 +8,15 @@ import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
import mage.abilities.keyword.MenaceAbility;
import mage.cards.CardImpl;
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 java.util.UUID;
/**
*
* @author LevelX2
*/
public final class AtarkaPummeler extends CardImpl {
@ -27,14 +29,9 @@ public final class AtarkaPummeler extends CardImpl {
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.)
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new GainAbilityAllEffect(new MenaceAbility(), Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES),
new ManaCostsImpl<>("{3}{R}{R}"),
FormidableCondition.instance);
ability.setAbilityWord(AbilityWord.FORMIDABLE);
this.addAbility(ability);
this.addAbility(new ActivateIfConditionActivatedAbility(new GainAbilityAllEffect(
new MenaceAbility(false), Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES
), new ManaCostsImpl<>("{3}{R}{R}"), FormidableCondition.instance).setAbilityWord(AbilityWord.FORMIDABLE));
}
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.dynamicvalue.common.GetXValue;
import mage.abilities.effects.keyword.AmassEffect;
import mage.abilities.hint.common.MorbidHint;
import mage.abilities.mana.BlackManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new AmassEffect(GetXValue.instance, SubType.ORC, false),
new ManaCostsImpl<>("{X}{X}{B}"),
MorbidCondition.instance
new ManaCostsImpl<>("{X}{X}{B}"), MorbidCondition.instance
);
ability.addCost(new TapSourceCost());
this.addAbility(ability);
this.addAbility(ability.addHint(MorbidHint.instance));
}
private BaradDur(final BaradDur card) {

View file

@ -1,18 +1,17 @@
package mage.cards.b;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.hint.Hint;
import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.TransformAbility;
@ -21,16 +20,22 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledPermanent;
import mage.game.permanent.token.VampireToken;
import java.util.UUID;
/**
* @author Loki
*/
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) {
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.addAbility(FlyingAbility.getInstance());
// {T}: Create a 2/2 black Vampire creature token with flying.
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.
this.addAbility(new TransformAbility());
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
new TransformSourceEffect(),
new ManaCostsImpl<>("{B}"),
new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 4));
this.addAbility(ability.addHint(new ValueHint("Vampires you control", new PermanentsOnBattlefieldCount(filter))));
this.addAbility(new ActivateIfConditionActivatedAbility(
new TransformSourceEffect(), new ManaCostsImpl<>("{B}"), condition
).addHint(hint));
}
private BloodlineKeeper(final BloodlineKeeper card) {

View file

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

View file

@ -1,10 +1,10 @@
package mage.cards.b;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.dynamicvalue.DynamicValue;
@ -17,20 +17,23 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.common.FilterControlledPermanent;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
*
* @author LevelX
*/
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 Condition condition = new PermanentsOnTheBattlefieldCondition(
new FilterControlledPermanent(SubType.DEMON, "you control a Demon")
);
public BloodthirstyOgre(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
this.subtype.add(SubType.OGRE, SubType.WARRIOR, SubType.SHAMAN);
@ -42,12 +45,12 @@ public final class BloodthirstyOgre extends CardImpl {
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.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
Ability ability = new ActivateIfConditionActivatedAbility(
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}"),
new TapSourceCost(),
new PermanentsOnTheBattlefieldCondition(filter));
.setText("target creature gets -X/-X until end of turn, " +
"where X is the number of devotion counters on {this}"),
new TapSourceCost(), condition
);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}

View file

@ -10,7 +10,6 @@ import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1),
new GenericManaCost(3), FerociousCondition.instance
new DrawCardSourceControllerEffect(1), new GenericManaCost(3), FerociousCondition.instance
);
ability.addCost(new TapSourceCost());
this.addAbility(ability);

View file

@ -8,8 +8,9 @@ import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.continuous.SetBasePowerToughnessSourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.FilterPermanent;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.common.FilterControlledPlaneswalkerPermanent;
import java.util.UUID;
@ -19,9 +20,9 @@ import java.util.UUID;
*/
public final class BramblefortFink extends CardImpl {
private static final FilterPermanent filter
= new FilterControlledPlaneswalkerPermanent(SubType.OKO, "you control an Oko planeswalker");
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter);
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
new FilterControlledPlaneswalkerPermanent(SubType.OKO, "you control an Oko planeswalker")
);
public BramblefortFink(UUID ownerId, CardSetInfo setInfo) {
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.
this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new SetBasePowerToughnessSourceEffect(10, 10, Duration.EndOfTurn),
new GenericManaCost(8),
condition));
new SetBasePowerToughnessSourceEffect(
10, 10, Duration.EndOfTurn
), new GenericManaCost(8), condition
));
}
private BramblefortFink(final BramblefortFink card) {

View file

@ -12,7 +12,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new LoseLifeOpponentsEffect(2),
new ManaCostsImpl<>("{1}{B}"), MorbidCondition.instance
new LoseLifeOpponentsEffect(2), new ManaCostsImpl<>("{1}{B}"), MorbidCondition.instance
);
ability.addCost(new TapSourceCost());
this.addAbility(ability.addHint(MorbidHint.instance));

View file

@ -1,28 +1,27 @@
package mage.cards.c;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.CovenCondition;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.ExileAttachedEffect;
import mage.abilities.effects.common.PreventAllDamageByAttachedEffect;
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.hint.common.CovenHint;
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.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
*
* @author weirddan455
*/
public final class Candletrap extends CardImpl {
@ -36,21 +35,22 @@ public final class Candletrap extends CardImpl {
TargetPermanent auraTarget = new TargetCreaturePermanent();
this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
Ability ability = new EnchantAbility(auraTarget);
this.addAbility(ability);
this.addAbility(new EnchantAbility(auraTarget));
// Enchanted creature has defender.
this.addAbility(new SimpleStaticAbility(new GainAbilityAttachedEffect(DefenderAbility.getInstance(), AttachmentType.AURA)));
// 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.
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.setAbilityWord(AbilityWord.COVEN);
ability.addHint(CovenHint.instance);
this.addAbility(ability);
this.addAbility(ability.setAbilityWord(AbilityWord.COVEN).addHint(CovenHint.instance));
}
private Candletrap(final Candletrap card) {

View file

@ -1,7 +1,5 @@
package mage.cards.c;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -13,11 +11,11 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.target.common.TargetOpponent;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class CaoCaoLordOfWei extends CardImpl {
@ -32,7 +30,9 @@ public final class CaoCaoLordOfWei extends CardImpl {
this.toughness = new MageInt(3);
// {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());
this.addAbility(ability);
}

View file

@ -1,7 +1,5 @@
package mage.cards.c;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -12,11 +10,11 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.target.common.TargetAnyTarget;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class CapriciousSorcerer extends CardImpl {
@ -29,8 +27,10 @@ public final class CapriciousSorcerer extends CardImpl {
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.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
new DamageTargetEffect(1), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance);
Ability ability = new ActivateIfConditionActivatedAbility(
new DamageTargetEffect(1), new TapSourceCost(),
MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetAnyTarget());
this.addAbility(ability);
}

View file

@ -13,7 +13,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent;
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.
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.addTarget(new TargetCreaturePermanent());

View file

@ -13,9 +13,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.target.common.TargetControlledPermanent;
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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new UntapSourceEffect(),
new GenericManaCost(1), MyTurnCondition.instance
new UntapSourceEffect(), new GenericManaCost(1), MyTurnCondition.instance
);
ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE));
this.addAbility(ability);

View file

@ -2,17 +2,16 @@ package mage.cards.c;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.condition.Condition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.WatcherScope;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.FilterPermanent;
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.
ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new CreateTokenEffect(new PhyrexianGoblinToken()),
new CreateTokenEffect(new PhyrexianGoblinToken()),
new GenericManaCost(2), ChurningReservoirCondition.instance
);
ability.addCost(new TapSourceCost());

View file

@ -14,7 +14,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.target.TargetPlayer;
@ -34,14 +33,16 @@ public final class CinderhazeWretch extends CardImpl {
this.toughness = new MageInt(2);
// {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.addHint(MyTurnHint.instance);
Ability ability = new ActivateIfConditionActivatedAbility(
new DiscardTargetEffect(1), new TapSourceCost(), MyTurnCondition.instance
);
ability.addTarget(new TargetPlayer());
this.addAbility(ability);
this.addAbility(ability.addHint(MyTurnHint.instance));
// 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) {

View file

@ -1,35 +1,26 @@
package mage.cards.c;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.MyTurnBeforeAttackersDeclaredCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.ReturnToHandSourceEffect;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.common.TargetCreaturePermanent;
import mage.filter.StaticFilters;
import mage.target.TargetPermanent;
import java.util.UUID;
/**
*
* @author fireshoes
*/
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) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}{U}");
this.subtype.add(SubType.HUMAN);
@ -38,14 +29,12 @@ public final class CoastalWizard extends CardImpl {
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.
Effect effect = new ReturnToHandSourceEffect(true);
effect.setText("Return Coastal Wizard");
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
effect, new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance);
effect = new ReturnToHandTargetEffect();
effect.setText("and another target creature to their owners' hands");
ability.addTarget(new TargetCreaturePermanent(filter));
ability.addEffect(effect);
Ability ability = new ActivateIfConditionActivatedAbility(
new ReturnToHandSourceEffect(true).setText("return {this}"),
new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addEffect(new ReturnToHandTargetEffect().setText("and another target creature to their owners' hands"));
ability.addTarget(new TargetPermanent(StaticFilters.FILTER_ANOTHER_TARGET_CREATURE));
this.addAbility(ability);
}

View file

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

View file

@ -12,7 +12,10 @@ import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.continuous.SetBasePowerSourceEffect;
import mage.cards.CardImpl;
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 java.util.UUID;
@ -38,14 +41,10 @@ public final class CraterElemental extends CardImpl {
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.
ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
this.addAbility(new ActivateIfConditionActivatedAbility(
new SetBasePowerSourceEffect(8, Duration.EndOfTurn),
new ManaCostsImpl<>("{2}{R}"),
FormidableCondition.instance
);
ability.setAbilityWord(AbilityWord.FORMIDABLE);
this.addAbility(ability);
new ManaCostsImpl<>("{2}{R}"), FormidableCondition.instance
).setAbilityWord(AbilityWord.FORMIDABLE));
}
private CraterElemental(final CraterElemental card) {

View file

@ -4,16 +4,18 @@ import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.AttacksAllTriggeredAbility;
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.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.effects.common.continuous.GainControlTargetEffect;
import mage.abilities.hint.common.MyTurnHint;
import mage.cards.CardImpl;
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.StaticFilters;
import mage.filter.predicate.ObjectSourcePlayer;
@ -42,22 +44,18 @@ public final class CrownOfDoom extends CardImpl {
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.
Effect effect = new BoostTargetEffect(2, 0, Duration.EndOfTurn);
effect.setText("it gets +2/+0 until end of turn");
this.addAbility(new AttacksAllTriggeredAbility(
effect,
false,
StaticFilters.FILTER_PERMANENT_CREATURE,
SetTargetPointer.PERMANENT,
true));
new BoostTargetEffect(2, 0, Duration.EndOfTurn)
.setText("it gets +2/+0 until end of turn"),
false, StaticFilters.FILTER_PERMANENT_CREATURE,
SetTargetPointer.PERMANENT, true
));
// {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(
Zone.BATTLEFIELD,
new CrownOfDoomEffect(),
new ManaCostsImpl<>("{2}"),
MyTurnCondition.instance);
ability.addTarget(new TargetPlayer(1, 1, false, filter));
new CrownOfDoomEffect(), new GenericManaCost(2), MyTurnCondition.instance
);
ability.addTarget(new TargetPlayer(filter));
ability.addHint(MyTurnHint.instance);
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.mana.GenericManaCost;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.hint.common.LandsYouControlHint;
import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledLandPermanent;
import java.util.UUID;
@ -24,10 +23,9 @@ import java.util.UUID;
*/
public final class CrypticCaves extends CardImpl {
private static final FilterPermanent filter
= new FilterControlledLandPermanent("you control five or more lands");
private static final Condition condition
= new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 4);
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
new FilterControlledLandPermanent("you control five or more lands"), ComparisonType.MORE_THAN, 4
);
public CrypticCaves(UUID ownerId, CardSetInfo setInfo) {
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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1),
new GenericManaCost(1), condition
new DrawCardSourceControllerEffect(1), new GenericManaCost(1), condition
);
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost());
this.addAbility(ability);
this.addAbility(ability.addHint(LandsYouControlHint.instance));
}
private CrypticCaves(final CrypticCaves card) {

View file

@ -1,7 +1,5 @@
package mage.cards.c;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -12,11 +10,11 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.target.common.TargetOpponent;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class CunningAdvisor extends CardImpl {
@ -29,8 +27,10 @@ public final class CunningAdvisor extends CardImpl {
this.toughness = new MageInt(1);
// {tap}: Target opponent discards a card. Activate this ability only during your turn, before attackers are declared.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
new DiscardTargetEffect(1), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance);
Ability ability = new ActivateIfConditionActivatedAbility(
new DiscardTargetEffect(1), new TapSourceCost(),
MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetOpponent());
this.addAbility(ability);
}

View file

@ -13,7 +13,10 @@ import mage.abilities.hint.common.CovenHint;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
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.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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new BoostTargetEffect(3, 3)
new BoostTargetEffect(3, 3)
.setText("target creature you control gets +3/+3"),
new ManaCostsImpl<>("{5}{G}"), CovenCondition.instance
);

View file

@ -17,7 +17,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.game.permanent.token.WhiteAstartesWarriorToken;
@ -29,7 +28,8 @@ import java.util.UUID;
public final class DefendersOfHumanity extends CardImpl {
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(
StaticFilters.FILTER_PERMANENT_CREATURE,
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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new CreateTokenEffect(
new WhiteAstartesWarriorToken(), mage.abilities.dynamicvalue.common.GetXValue.instance
new WhiteAstartesWarriorToken(), GetXValue.instance
), new ManaCostsImpl<>("{X}{2}{W}"), condition
).addHint(CreaturesYouControlHint.instance).addHint(MyTurnHint.instance);
);
ability.addCost(new ExileSourceCost());
this.addAbility(ability);
this.addAbility(ability.addHint(CreaturesYouControlHint.instance).addHint(MyTurnHint.instance));
}
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.common.ChooseACardNameEffect;
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
import mage.abilities.hint.common.MyTurnHint;
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.StaticFilters;
import mage.game.Game;
import mage.players.Player;
import mage.target.common.TargetOpponent;
@ -39,12 +42,15 @@ public final class DementiaSliver extends CardImpl {
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."
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.addTarget(new TargetOpponent());
gainedAbility.addHint(MyTurnHint.instance);
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. "
+ "Target opponent reveals a card at random from their hand."
+ " If that card has the chosen name, that player discards it."
@ -67,7 +73,7 @@ class DementiaSliverEffect extends OneShotEffect {
DementiaSliverEffect() {
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) {

View file

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

View file

@ -5,16 +5,16 @@ import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.MyTurnBeforeAttackersDeclaredCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.DestroyTargetEffect;
import mage.cards.CardImpl;
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.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.common.TargetCreaturePermanent;
import mage.target.common.TargetOpponentsChoicePermanent;
import mage.target.targetpointer.EachTargetPointer;
import java.util.UUID;
@ -33,9 +33,16 @@ public final class DiaochanArtfulBeauty extends CardImpl {
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.
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 TargetOpponentsChoicePermanent(1, 1, StaticFilters.FILTER_PERMANENT_CREATURE, false));
ability.addTarget(new TargetOpponentsChoicePermanent(
1, 1, StaticFilters.FILTER_PERMANENT_CREATURE, false
));
this.addAbility(ability);
}
@ -48,38 +55,3 @@ public final class DiaochanArtfulBeauty extends CardImpl {
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.condition.common.MyTurnCondition;
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.hint.common.MyTurnHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.target.TargetPlayer;
import java.util.UUID;
@ -24,10 +22,11 @@ public final class DisruptingScepter extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
// {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.addCost(new TapSourceCost());
ability.addHint(MyTurnHint.instance);
this.addAbility(ability);
}

View file

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

View file

@ -1,9 +1,6 @@
package mage.cards.d;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.FormidableCondition;
import mage.abilities.costs.mana.ManaCostsImpl;
@ -13,10 +10,10 @@ import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class DragonScarredBear extends CardImpl {
@ -28,13 +25,9 @@ public final class DragonScarredBear extends CardImpl {
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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new RegenerateSourceEffect(),
new ManaCostsImpl<>("{1}{G}"),
FormidableCondition.instance);
ability.setAbilityWord(AbilityWord.FORMIDABLE);
this.addAbility(ability);
this.addAbility(new ActivateIfConditionActivatedAbility(
new RegenerateSourceEffect(), new ManaCostsImpl<>("{1}{G}"), FormidableCondition.instance
).setAbilityWord(AbilityWord.FORMIDABLE));
}
private DragonScarredBear(final DragonScarredBear card) {

View file

@ -1,9 +1,6 @@
package mage.cards.d;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.common.FormidableCondition;
@ -16,13 +13,13 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.constants.SubType;
import mage.game.permanent.token.DragonToken;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class DragonWhisperer extends CardImpl {
@ -35,23 +32,19 @@ public final class DragonWhisperer extends CardImpl {
this.toughness = new MageInt(2);
// {R}: Dragon Whisperer gains flying until end of turn.
this.addAbility(new SimpleActivatedAbility(
new GainAbilitySourceEffect(FlyingAbility.getInstance(),
Duration.EndOfTurn), new ManaCostsImpl<>("{R}")));
this.addAbility(new SimpleActivatedAbility(new GainAbilitySourceEffect(
FlyingAbility.getInstance(), Duration.EndOfTurn
), new ManaCostsImpl<>("{R}")));
// {1}{R}: Dragon Whisperer get +1/+0 until end of turn
this.addAbility(new SimpleActivatedAbility(
new BoostSourceEffect(1, 0, Duration.EndOfTurn),
new ManaCostsImpl<>("{1}{R}")));
new BoostSourceEffect(1, 0, Duration.EndOfTurn), 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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new CreateTokenEffect(new DragonToken()),
new ManaCostsImpl<>("{4}{R}{R}"),
FormidableCondition.instance);
ability.setAbilityWord(AbilityWord.FORMIDABLE);
this.addAbility(ability);
this.addAbility(new ActivateIfConditionActivatedAbility(
new CreateTokenEffect(new DragonToken()), new ManaCostsImpl<>("{4}{R}{R}"), FormidableCondition.instance
).setAbilityWord(AbilityWord.FORMIDABLE));
}
private DragonWhisperer(final DragonWhisperer card) {

View file

@ -14,7 +14,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.game.Game;
import java.util.Collection;
@ -25,10 +24,6 @@ import java.util.UUID;
*/
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) {
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.
this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new CantBeBlockedSourceEffect(Duration.EndOfTurn),
new CantBeBlockedSourceEffect(Duration.EndOfTurn),
new ManaCostsImpl<>("{3}{U}{U}"), DreadlightMonstrosityCondition.instance
).addHint(hint));
).addHint(DreadlightMonstrosityCondition.getHint()));
}
private DreadlightMonstrosity(final DreadlightMonstrosity card) {
@ -59,6 +54,11 @@ public final class DreadlightMonstrosity extends CardImpl {
enum DreadlightMonstrosityCondition implements Condition {
instance;
private static final Hint hint = new ConditionHint(instance);
public static Hint getHint() {
return hint;
}
@Override
public boolean apply(Game game, Ability source) {

View file

@ -1,33 +1,32 @@
package mage.cards.d;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility;
import mage.abilities.condition.Condition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.constants.PhaseStep;
import mage.constants.SubType;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
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.predicate.permanent.ControllerControlsIslandPredicate;
import mage.game.Game;
import mage.target.TargetPermanent;
import java.util.UUID;
/**
*
* @author noahg
*/
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 {
filter.add(ControllerControlsIslandPredicate.instance);
@ -41,13 +40,12 @@ public final class DwarvenSeaClan extends CardImpl {
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.
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(
Zone.BATTLEFIELD,
effect,
new TapSourceCost(),
BeforeEndCombatCondition.getInstance()
new CreateDelayedTriggeredAbilityEffect(new AtTheEndOfCombatDelayedTriggeredAbility(
new DamageTargetEffect(2, true, "that creature")
)).setText("Choose target attacking or blocking creature whose controller controls an Island. " +
"{this} deals 2 damage to that creature at end of combat."),
new TapSourceCost(), BeforeEndCombatCondition.getInstance()
);
ability.addTarget(new TargetPermanent(filter));
addAbility(ability);

View file

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

View file

@ -1,8 +1,5 @@
package mage.cards.e;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.Condition;
@ -12,13 +9,15 @@ import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.permanent.Permanent;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
*
* @author TheElk801
*/
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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new DrawCardSourceControllerEffect(1),
new GenericManaCost(2),
new EndlessAtlasCondition()
new GenericManaCost(2), EndlessAtlasCondition.instance
);
ability.addCost(new TapSourceCost());
this.addAbility(ability);
@ -47,7 +44,8 @@ public final class EndlessAtlas extends CardImpl {
}
}
class EndlessAtlasCondition implements Condition {
enum EndlessAtlasCondition implements Condition {
instance;
@Override
public boolean apply(Game game, Ability source) {

View file

@ -41,11 +41,12 @@ public final class EverythingamajigC extends CardImpl {
// Disrupting Scepter
// 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.addCost(new TapSourceCost());
ability.addHint(MyTurnHint.instance);
this.addAbility(ability);
this.addAbility(ability.addHint(MyTurnHint.instance));
// Chimeric Staff
// 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.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent;
import mage.target.common.TargetControlledPermanent;
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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(2),
new DrawCardSourceControllerEffect(2),
new ManaCostsImpl<>("{1}{R}"), OpponentsLostLifeCondition.instance
);
ability.addCost(new DiscardCardCost());

View file

@ -10,7 +10,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.target.common.TargetAnyTarget;
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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new DamageTargetEffect(1, "it"),
new DamageTargetEffect(1, "it"),
new SacrificeSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetAnyTarget());

View file

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

View file

@ -1,26 +1,23 @@
package mage.cards.f;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.SourceAttackingCondition;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.combat.CantBlockTargetEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.constants.SubType;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class ForgestokerDragon extends CardImpl {
@ -34,14 +31,15 @@ public final class ForgestokerDragon extends CardImpl {
// Flying
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) {

View file

@ -1,25 +1,25 @@
package mage.cards.g;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.condition.common.SourceAttackingCondition;
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.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.game.Game;
import mage.players.Player;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.target.common.TargetCreaturePermanent;
import mage.target.common.TargetOpponent;
import java.util.UUID;
/**
*
* @author FenrisulfrX
*/
public final class GerrardCapashen extends CardImpl {
@ -33,16 +33,17 @@ public final class GerrardCapashen extends CardImpl {
this.toughness = new MageInt(4);
// At the beginning of your upkeep, you gain 1 life for each card in target opponent's hand.
Ability ability1 = new BeginningOfUpkeepTriggeredAbility(new GerrardCapashenEffect()
);
ability1.addTarget(new TargetOpponent());
this.addAbility(ability1);
Ability ability = new BeginningOfUpkeepTriggeredAbility(new GainLifeEffect(CardsInTargetHandCount.instance)
.setText("you gain 1 life for each card in target opponent's hand"));
ability.addTarget(new TargetOpponent());
this.addAbility(ability);
// {3}{W}: Tap target creature. Activate this ability only if {this} is attacking.
Ability ability2 = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new TapTargetEffect(),
new ManaCostsImpl<>("{3}{W}"), SourceAttackingCondition.instance);
ability2.addTarget(new TargetCreaturePermanent());
this.addAbility(ability2);
ability = new ActivateIfConditionActivatedAbility(
new TapTargetEffect(), new ManaCostsImpl<>("{3}{W}"), SourceAttackingCondition.instance
);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}
private GerrardCapashen(final GerrardCapashen card) {
@ -54,34 +55,3 @@ public final class GerrardCapashen extends CardImpl {
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.costs.mana.GenericManaCost;
import mage.abilities.effects.common.ReturnToHandSourceEffect;
import mage.abilities.hint.common.NotMyTurnHint;
import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import java.util.UUID;
@ -25,9 +23,9 @@ public final class GhostTown extends CardImpl {
this.addAbility(new ColorlessManaAbility());
// {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),
new GenericManaCost(0), NotMyTurnCondition.instance)
.addHint(NotMyTurnHint.instance));
this.addAbility(new ActivateIfConditionActivatedAbility(
new ReturnToHandSourceEffect(true), new GenericManaCost(0), NotMyTurnCondition.instance
));
}
private GhostTown(final GhostTown card) {

View file

@ -13,7 +13,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.watchers.common.DiscardedCardWatcher;
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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1),
new GenericManaCost(1), ControllerDiscardedThisTurnCondition.instance
new DrawCardSourceControllerEffect(1), new GenericManaCost(1),
ControllerDiscardedThisTurnCondition.instance
);
ability.addCost(new TapSourceCost());
ability.addCost(new PayLifeCost(1));

View file

@ -1,9 +1,6 @@
package mage.cards.g;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.FormidableCondition;
import mage.abilities.costs.mana.ManaCostsImpl;
@ -13,12 +10,12 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.constants.SubType;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class GladeWatcher extends CardImpl {
@ -31,14 +28,12 @@ public final class GladeWatcher extends CardImpl {
// Defender
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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
this.addAbility(new ActivateIfConditionActivatedAbility(
new CanAttackAsThoughItDidntHaveDefenderSourceEffect(Duration.EndOfTurn),
new ManaCostsImpl<>("{G}"),
FormidableCondition.instance);
ability.setAbilityWord(AbilityWord.FORMIDABLE);
this.addAbility(ability);
new ManaCostsImpl<>("{G}"), FormidableCondition.instance
).setAbilityWord(AbilityWord.FORMIDABLE));
}
private GladeWatcher(final GladeWatcher card) {

View file

@ -1,7 +1,5 @@
package mage.cards.g;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -12,11 +10,11 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.target.common.TargetAnyTarget;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class GoblinFirestarter extends CardImpl {
@ -28,8 +26,10 @@ public final class GoblinFirestarter extends CardImpl {
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.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
new DamageTargetEffect(1,"it"), new SacrificeSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance);
Ability ability = new ActivateIfConditionActivatedAbility(
new DamageTargetEffect(1, "it"),
new SacrificeSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetAnyTarget());
this.addAbility(ability);
}

View file

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

View file

@ -6,13 +6,11 @@ import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.MyTurnCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.common.discard.DiscardTargetEffect;
import mage.abilities.hint.common.MyTurnHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.target.TargetPlayer;
import java.util.UUID;
@ -31,9 +29,10 @@ public final class GwendlynDiCorci extends CardImpl {
this.toughness = new MageInt(5);
// {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.addHint(MyTurnHint.instance);
this.addAbility(ability);
}

View file

@ -1,10 +1,9 @@
package mage.cards.h;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
@ -12,25 +11,28 @@ import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledPermanent;
import mage.target.TargetPermanent;
import java.util.UUID;
/**
*
* @author fireshoes
*/
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 {
filter.add(SuperType.SNOW.getPredicate());
}
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 3);
public HeidarRimewindMaster(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}");
this.supertype.add(SuperType.LEGENDARY);
@ -40,10 +42,9 @@ public final class HeidarRimewindMaster extends CardImpl {
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.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
new ReturnToHandTargetEffect(),
new GenericManaCost(2),
new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 3));
Ability ability = new ActivateIfConditionActivatedAbility(
new ReturnToHandTargetEffect(), new GenericManaCost(2), condition
);
ability.addCost(new TapSourceCost());
ability.addTarget(new TargetPermanent());
this.addAbility(ability);

View file

@ -8,12 +8,10 @@ import mage.abilities.costs.common.RemoveCountersSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.hint.common.MyTurnHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.game.permanent.token.WhiteElementalToken;
@ -29,12 +27,16 @@ public final class HoofprintsOfTheStag extends CardImpl {
this.subtype.add(SubType.ELEMENTAL);
// 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.
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.addHint(MyTurnHint.instance);
this.addAbility(ability);
}

View file

@ -1,7 +1,5 @@
package mage.cards.h;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -13,12 +11,12 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class HuaTuoHonoredPhysician extends CardImpl {
@ -32,7 +30,10 @@ public final class HuaTuoHonoredPhysician extends CardImpl {
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.
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));
this.addAbility(ability);
}

View file

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

View file

@ -12,7 +12,6 @@ import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.game.permanent.token.EldraziToken;
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.
this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1),
new DrawCardSourceControllerEffect(1),
new TapSourceCost(), CreatedTokenThisTurnCondition.instance
).addHint(CreatedTokenThisTurnCondition.getHint()), new CreatedTokenWatcher());

View file

@ -1,33 +1,35 @@
package mage.cards.i;
import java.util.UUID;
import mage.abilities.ActivatedAbility;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.IsStepCondition;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.CountersSourceCount;
import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.common.continuous.BoostAllEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.effects.common.counter.RemoveCounterSourceEffect;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.PhaseStep;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.counters.CounterType;
import java.util.UUID;
/**
*
* @author TheElk801
*/
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) {
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())));
// All creatures get +1/+0 for each time counter on Infinite Hourglass.
this.addAbility(new SimpleStaticAbility(
new BoostAllEffect(
new CountersSourceCount(CounterType.TIME),
StaticValue.get(0),
Duration.WhileOnBattlefield
)
));
this.addAbility(new SimpleStaticAbility(new BoostAllEffect(
xValue, 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.
ActivatedAbility ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new RemoveCounterSourceEffect(CounterType.TIME.createInstance()),
new GenericManaCost(3),
new IsStepCondition(PhaseStep.UPKEEP, false)
);
ability.setMayActivate(TargetController.ANY);
this.addAbility(ability);
this.addAbility(new ActivateIfConditionActivatedAbility(
new RemoveCounterSourceEffect(CounterType.TIME.createInstance()), new GenericManaCost(3), condition
).setMayActivate(TargetController.ANY));
}
private InfiniteHourglass(final InfiniteHourglass card) {

View file

@ -1,7 +1,6 @@
package mage.cards.i;
import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.MetalcraftCondition;
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.hint.common.MetalcraftHint;
import mage.abilities.mana.ColorlessManaAbility;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterArtifactPermanent;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
@ -34,19 +30,20 @@ public final class InventorsFair extends CardImpl {
this.supertype.add(SuperType.LEGENDARY);
// 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}.
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.
// 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),
new GenericManaCost(4), MetalcraftCondition.instance);
Ability ability = new ActivateIfConditionActivatedAbility(new SearchLibraryPutInHandEffect(
new TargetCardInLibrary(StaticFilters.FILTER_CARD_ARTIFACT), true
), new GenericManaCost(4), MetalcraftCondition.instance);
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost());
ability.addHint(MetalcraftHint.instance);
this.addAbility(ability);
this.addAbility(ability.addHint(MetalcraftHint.instance));
}
private InventorsFair(final InventorsFair card) {
@ -58,41 +55,3 @@ public final class InventorsFair extends CardImpl {
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.ComparisonType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledLandPermanent;
import mage.target.TargetPermanent;
@ -27,9 +26,9 @@ import java.util.UUID;
*/
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(filter, ComparisonType.MORE_THAN, 7);
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
new FilterControlledLandPermanent("you control eight or more lands"), ComparisonType.MORE_THAN, 7
);
public KelpieGuide(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}");
@ -44,9 +43,7 @@ public final class KelpieGuide extends CardImpl {
this.addAbility(ability);
// {T}: Tap target permanent. Activate only if you control eight or more lands.
ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new TapTargetEffect(), new TapSourceCost(), condition
);
ability = new ActivateIfConditionActivatedAbility(new TapTargetEffect(), new TapSourceCost(), condition);
ability.addTarget(new TargetPermanent());
this.addAbility(ability.addHint(LandsYouControlHint.instance));
}

View file

@ -1,7 +1,5 @@
package mage.cards.k;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -12,13 +10,13 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.TappedPredicate;
import mage.target.common.TargetCreaturePermanent;
import mage.target.TargetPermanent;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class KingsAssassin extends CardImpl {
@ -37,9 +35,11 @@ public final class KingsAssassin extends CardImpl {
this.toughness = new MageInt(1);
// {tap}: Destroy target tapped creature. Activate this ability only during your turn, before attackers are declared.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
new DestroyTargetEffect(), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance);
ability.addTarget(new TargetCreaturePermanent(filter));
Ability ability = new ActivateIfConditionActivatedAbility(
new DestroyTargetEffect(), new TapSourceCost(),
MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetPermanent(filter));
this.addAbility(ability);
}

View file

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

View file

@ -1,13 +1,10 @@
package mage.cards.l;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.MyTurnBeforeAttackersDeclaredCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.ReturnToHandSourceEffect;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.cards.CardImpl;
@ -15,22 +12,16 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.common.TargetCreaturePermanent;
import mage.filter.StaticFilters;
import mage.target.TargetPermanent;
import java.util.UUID;
/**
*
* @author fireshoes
*/
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) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{U}");
this.supertype.add(SuperType.LEGENDARY);
@ -40,14 +31,12 @@ public final class LadySun extends CardImpl {
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.
Effect effect = new ReturnToHandSourceEffect(true);
effect.setText("Return Lady Sun");
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
effect, new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance);
effect = new ReturnToHandTargetEffect();
effect.setText("and another target creature to their owners' hands");
ability.addTarget(new TargetCreaturePermanent(filter));
ability.addEffect(effect);
Ability ability = new ActivateIfConditionActivatedAbility(
new ReturnToHandSourceEffect(true).setText("return {this}"),
new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addEffect(new ReturnToHandTargetEffect().setText("and another target creature to their owners' hands"));
ability.addTarget(new TargetPermanent(StaticFilters.FILTER_ANOTHER_TARGET_CREATURE));
this.addAbility(ability);
}

View file

@ -1,60 +1,54 @@
package mage.cards.l;
import java.util.UUID;
import mage.Mana;
import mage.ObjectColor;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.EntersBattlefieldTappedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.mana.SimpleManaAbility;
import mage.abilities.effects.common.LoseLifeOpponentsEffect;
import mage.abilities.mana.BlackManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.ComparisonType;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.constants.SubType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.ColorPredicate;
import mage.game.Game;
import mage.players.Player;
import java.util.UUID;
/**
* @author jeffwadsworth
*/
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");
static {
filter.add(new ColorPredicate(ObjectColor.BLACK));
}
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 1);
public LeechriddenSwamp(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
this.subtype.add(SubType.SWAMP);
// ({tap}: Add {B}.)
this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, Mana.BlackMana(1), new TapSourceCost()));
this.addAbility(new BlackManaAbility());
// Leechridden Swamp enters the battlefield tapped.
this.addAbility(new EntersBattlefieldTappedAbility());
// {B}, {tap}: Each opponent loses 1 life. Activate this ability only if you control two or more black permanents.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new LeechriddenSwampLoseLifeEffect(),
new ManaCostsImpl<>("{B}"),
new PermanentsOnTheBattlefieldCondition(
filter,
ComparisonType.MORE_THAN,
1));
new LoseLifeOpponentsEffect(1), new ManaCostsImpl<>("{B}"), condition
);
ability.addCost(new TapSourceCost());
this.addAbility(ability);
}
@ -68,35 +62,3 @@ public final class LeechriddenSwamp extends CardImpl {
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;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -13,17 +11,18 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.common.FilterCreatureCard;
import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
/**
*
* @author LevelX2
*/
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 {
filter.add(SuperType.LEGENDARY.getPredicate());
@ -38,10 +37,12 @@ public final class LoyalRetainers extends CardImpl {
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.
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));
this.addAbility(ability);
}
private LoyalRetainers(final LoyalRetainers card) {

View file

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

View file

@ -12,7 +12,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.game.Game;
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.
this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new CreateTokenEffect(new AngelToken()),
new ManaCostsImpl<>("{1}{W}"), condition
new CreateTokenEffect(new AngelToken()), new ManaCostsImpl<>("{1}{W}"), condition
));
}

View file

@ -1,7 +1,5 @@
package mage.cards.l;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -12,13 +10,13 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.constants.SubType;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class LurkingArynx extends CardImpl {
@ -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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new MustBeBlockedByTargetSourceEffect(Duration.EndOfTurn),
new ManaCostsImpl<>("{2}{G}"),
FormidableCondition.instance);
ability.setAbilityWord(AbilityWord.FORMIDABLE);
new ManaCostsImpl<>("{2}{G}"), FormidableCondition.instance
);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
this.addAbility(ability.setAbilityWord(AbilityWord.FORMIDABLE));
}
private LurkingArynx(final LurkingArynx card) {

View file

@ -12,7 +12,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.WatcherScope;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.EntersTheBattlefieldEvent;
import mage.game.events.GameEvent;
@ -27,11 +26,6 @@ import java.util.*;
*/
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) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "");
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.
this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new CreateTokenEffect(new GolemWhiteBlueToken()),
new TapSourceCost(),
MastersManufactoryCondition.instance
).addHint(hint), new MastersManufactoryWatcher());
new TapSourceCost(), MastersManufactoryCondition.instance
).addHint(MastersManufactoryCondition.getHint()), new MastersManufactoryWatcher());
}
private MastersManufactory(final MastersManufactory card) {
@ -59,19 +51,23 @@ public final class MastersManufactory extends CardImpl {
enum MastersManufactoryCondition implements Condition {
instance;
private static final Hint hint = new ConditionHint(instance);
public static Hint getHint() {
return hint;
}
@Override
public boolean apply(Game game, Ability source) {
Permanent permanent = game.getPermanent(source.getSourceId());
MastersManufactoryWatcher watcher = game.getState().getWatcher(MastersManufactoryWatcher.class);
return watcher != null
&& permanent != null
return watcher != null && permanent != null
&& watcher.check(source.getControllerId(), new MageObjectReference(permanent, game));
}
@Override
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;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
import mage.abilities.condition.common.CardsInOpponentGraveyardCondition;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.MillCardsTargetEffect;
import mage.constants.SubType;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.DamagedPlayerEvent;
import mage.game.events.GameEvent;
import mage.target.targetpointer.FixedTarget;
import mage.constants.SubType;
import java.util.UUID;
/**
* @author TheElk801
@ -38,11 +32,13 @@ public final class MerfolkWindrobber extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// 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.
this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1),
new DrawCardSourceControllerEffect(1),
new SacrificeSourceCost(), CardsInOpponentGraveyardCondition.EIGHT
).addHint(CardsInOpponentGraveyardCondition.EIGHT.getHint()));
}
@ -56,41 +52,3 @@ public final class MerfolkWindrobber extends CardImpl {
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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new MeticulousExcavationEffect(),
new ManaCostsImpl<>("{2}{W}"), MyTurnCondition.instance
new MeticulousExcavationEffect(), new ManaCostsImpl<>("{2}{W}"), MyTurnCondition.instance
);
ability.addTarget(new TargetControlledPermanent());
this.addAbility(ability);

View file

@ -16,7 +16,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SuperType;
import mage.constants.WatcherScope;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent;
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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1),
new DrawCardSourceControllerEffect(1),
new ManaCostsImpl<>("{1}{W}"), MinasTirithCondition.instance
);
ability.addCost(new TapSourceCost());

View file

@ -1,10 +1,10 @@
package mage.cards.m;
import java.util.UUID;
import mage.ObjectColor;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.EntersBattlefieldTappedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
@ -20,6 +20,8 @@ import mage.game.Game;
import mage.players.Player;
import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
/**
* @author LevelX2
*/
@ -31,6 +33,8 @@ public final class MistveilPlains extends CardImpl {
filter.add(new ColorPredicate(ObjectColor.WHITE));
}
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 1);
public MistveilPlains(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new MistveilPlainsGraveyardToLibraryEffect(),
new ManaCostsImpl<>("{W}"),
new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 1)
new MistveilPlainsGraveyardToLibraryEffect(), new ManaCostsImpl<>("{W}"), condition
);
ability.addTarget(new TargetCardInYourGraveyard());
ability.addCost(new TapSourceCost());
this.addAbility(ability);
}
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.
this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new BecomesCreatureSourceEffect(new CreatureToken(
9, 9, "9/9 Phyrexian Construct artifact creature, " +
"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.effects.OneShotEffect;
import mage.abilities.effects.common.ChooseACardNameEffect;
import mage.abilities.hint.common.MyTurnHint;
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.players.Player;
import mage.target.common.TargetOpponent;
@ -33,11 +35,13 @@ public final class Nebuchadnezzar extends CardImpl {
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.
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.addEffect(new NebuchadnezzarEffect());
ability.addTarget(new TargetOpponent());
ability.addHint(MyTurnHint.instance);
this.addAbility(ability);
}

View file

@ -1,7 +1,5 @@
package mage.cards.n;
import java.util.UUID;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -12,17 +10,18 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.common.FilterCreatureCard;
import mage.filter.predicate.mageobject.ColorPredicate;
import java.util.UUID;
/**
*
* @author fireshoes
*/
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 {
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.
this.addAbility(new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new PutCardFromHandOntoBattlefieldEffect(filter),
new TapSourceCost(),
MyTurnBeforeAttackersDeclaredCondition.instance
new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
));
}

View file

@ -13,7 +13,6 @@ import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.RequirementEffect;
import mage.abilities.effects.RestrictionEffect;
import mage.abilities.effects.common.DestroyTargetEffect;
import mage.abilities.hint.common.MyTurnHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
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
// 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.
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.addHint(MyTurnHint.instance);
this.addAbility(ability);
}

View file

@ -1,7 +1,5 @@
package mage.cards.p;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -12,13 +10,12 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class PangTongYoungPhoenix extends CardImpl {
@ -32,8 +29,10 @@ public final class PangTongYoungPhoenix extends CardImpl {
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.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
new BoostTargetEffect(0, 2, Duration.EndOfTurn), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance);
Ability ability = new ActivateIfConditionActivatedAbility(
new BoostTargetEffect(0, 2), new TapSourceCost(),
MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetCreaturePermanent());
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.mana.GenericManaCost;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.hint.common.MyTurnHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new PortalOfSanctuaryEffect(),
new GenericManaCost(1), MyTurnCondition.instance
new PortalOfSanctuaryEffect(), new GenericManaCost(1), MyTurnCondition.instance
);
ability.addCost(new TapSourceCost());
ability.addTarget(new TargetControlledCreaturePermanent());
ability.addHint(MyTurnHint.instance);
this.addAbility(ability);
}

View file

@ -8,12 +8,10 @@ import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.RevealHandTargetEffect;
import mage.abilities.hint.common.MyTurnHint;
import mage.cards.*;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.players.Player;
@ -35,11 +33,12 @@ public final class RagMan extends CardImpl {
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.
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.addEffect(new RagManDiscardEffect());
ability.addTarget(new TargetOpponent());
ability.addHint(MyTurnHint.instance);
this.addAbility(ability);
}

View file

@ -15,7 +15,6 @@ import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
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.
ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1),
new ManaCostsImpl<>("{2}{U}"), DeliriumCondition.instance
new DrawCardSourceControllerEffect(1), new ManaCostsImpl<>("{2}{U}"), DeliriumCondition.instance
);
ability.addCost(new TapSourceCost());
this.addAbility(ability.addHint(CardTypesInGraveyardCount.YOU.getHint()).setAbilityWord(AbilityWord.DELIRIUM));

View file

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

View file

@ -1,10 +1,9 @@
package mage.cards.r;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
@ -12,15 +11,15 @@ import mage.abilities.effects.common.MayTapOrUntapTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent;
import mage.target.TargetPermanent;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class RimewindTaskmage extends CardImpl {
@ -31,6 +30,8 @@ public final class RimewindTaskmage extends CardImpl {
filter.add(SuperType.SNOW.getPredicate());
}
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 3);
public RimewindTaskmage(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
this.subtype.add(SubType.HUMAN);
@ -39,10 +40,9 @@ public final class RimewindTaskmage extends CardImpl {
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.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
new MayTapOrUntapTargetEffect(),
new GenericManaCost(1),
new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 3));
Ability ability = new ActivateIfConditionActivatedAbility(
new MayTapOrUntapTargetEffect(), new GenericManaCost(1), condition
);
ability.addCost(new TapSourceCost());
ability.addTarget(new TargetPermanent());
this.addAbility(ability);

View file

@ -12,7 +12,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
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.
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());
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.mana.GenericManaCost;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.abilities.hint.common.MyTurnHint;
import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.predicate.mageobject.CommanderPredicate;
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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new ReturnToHandTargetEffect()
new ReturnToHandTargetEffect()
.setText("return target commander you own from the battlefield to your hand"),
new GenericManaCost(2), MyTurnCondition.instance
);
ability.addCost(new TapSourceCost());
ability.addTarget(new TargetPermanent(filter));
ability.addHint(MyTurnHint.instance);
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.
this.addAbility(new SimpleManaAbility(
Zone.BATTLEFIELD,
new ConditionalManaEffect(
new BasicManaEffect(Mana.ColorlessMana(2)),
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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new SarevoksTomeEffect(),
new GenericManaCost(3), CompletedDungeonCondition.instance
new SarevoksTomeEffect(), new GenericManaCost(3), CompletedDungeonCondition.instance
);
ability.addCost(new TapSourceCost());
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.mana.ManaCostsImpl;
import mage.abilities.effects.common.discard.DiscardTargetEffect;
import mage.abilities.hint.common.MyTurnHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.target.TargetPlayer;
import java.util.UUID;
@ -23,12 +21,12 @@ public final class ScepterOfFugue extends CardImpl {
public ScepterOfFugue(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{B}{B}");
// {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.addTarget(new TargetPlayer());
ability.addHint(MyTurnHint.instance);
this.addAbility(ability);
}

View file

@ -1,8 +1,5 @@
package mage.cards.s;
import java.util.List;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -13,13 +10,12 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.stack.Spell;
import mage.watchers.common.SpellsCastWatcher;
import java.util.UUID;
/**
*
* @author anonymous
*/
public final class SeekerOfInsight extends CardImpl {
@ -33,12 +29,9 @@ public final class SeekerOfInsight extends CardImpl {
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.
this.addAbility(
new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD,
new DrawDiscardControllerEffect(),
new TapSourceCost(),
new CastNonCreatureSpellCondition()));
this.addAbility(new ActivateIfConditionActivatedAbility(
new DrawDiscardControllerEffect(), new TapSourceCost(), SeekerOfInsightCondition.instance
));
}
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
public boolean apply(Game game, Ability source) {
SpellsCastWatcher watcher = game.getState().getWatcher(SpellsCastWatcher.class);
if (watcher != null) {
List<Spell> spellsCast = watcher.getSpellsCastThisTurn(source.getControllerId());
if (spellsCast != null) {
for (Spell spell : spellsCast) {
if (!spell.isCreature(game)) {
return true;
}
}
}
}
return false;
return game
.getState()
.getWatcher(SpellsCastWatcher.class)
.getSpellsCastThisTurn(source.getControllerId())
.stream()
.anyMatch(spell -> !spell.isCreature(game));
}
@Override

View file

@ -1,14 +1,9 @@
package mage.cards.s;
import java.util.UUID;
import mage.ConditionalMana;
import mage.MageInt;
import mage.MageObject;
import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.FormidableCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
@ -20,17 +15,16 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.constants.SubType;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game;
import mage.game.stack.Spell;
import mage.players.Player;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class ShamanOfForgottenWays extends CardImpl {
@ -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.
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.setAbilityWord(AbilityWord.FORMIDABLE);
this.addAbility(ability);
this.addAbility(ability.setAbilityWord(AbilityWord.FORMIDABLE));
}
private ShamanOfForgottenWays(final ShamanOfForgottenWays card) {

View file

@ -1,9 +1,6 @@
package mage.cards.s;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.MyTurnBeforeAttackersDeclaredCondition;
import mage.abilities.costs.common.TapSourceCost;
@ -12,10 +9,10 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class ShuFarmer extends CardImpl {
@ -27,9 +24,9 @@ public final class ShuFarmer extends CardImpl {
this.toughness = new MageInt(1);
// {tap}: You gain 1 life. Activate this ability only during your turn, before attackers are declared.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
new GainLifeEffect(1), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance);
this.addAbility(ability);
this.addAbility(new ActivateIfConditionActivatedAbility(
new GainLifeEffect(1), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
));
}
private ShuFarmer(final ShuFarmer card) {

View file

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

View file

@ -14,7 +14,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.StaticFilters;
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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.EndOfTurn)
.setText("creatures you control get +1/+1"), new ManaCostsImpl<>("{3}{W}"), MyTurnCondition.instance
new BoostControlledEffect(1, 1, Duration.EndOfTurn)
.setText("creatures you control get +1/+1"),
new ManaCostsImpl<>("{3}{W}"), MyTurnCondition.instance
);
ability.addEffect(new GainAbilityControlledEffect(
VigilanceAbility.getInstance(), Duration.EndOfTurn,

View file

@ -1,7 +1,5 @@
package mage.cards.s;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -12,13 +10,13 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.TappedPredicate;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class SteamCatapult extends CardImpl {
@ -37,8 +35,9 @@ public final class SteamCatapult extends CardImpl {
this.toughness = new MageInt(3);
// {tap}: Destroy target tapped creature. Activate this ability only during your turn, before attackers are declared.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
new DestroyTargetEffect(), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance);
Ability ability = new ActivateIfConditionActivatedAbility(
new DestroyTargetEffect(), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetCreaturePermanent(filter));
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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new CopyTargetStackObjectEffect(),
new TapSourceCost(), StellaLeeWildCardCondition.instance
new CopyTargetStackObjectEffect(), new TapSourceCost(), StellaLeeWildCardCondition.instance
);
ability.addTarget(new TargetSpell(filter));
this.addAbility(ability.addHint(StormAbility.getHint()));

View file

@ -1,7 +1,5 @@
package mage.cards.s;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -11,13 +9,13 @@ import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.constants.SubType;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class SternMarshal extends CardImpl {
@ -30,8 +28,10 @@ public final class SternMarshal extends CardImpl {
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.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
new BoostTargetEffect(2, 2, Duration.EndOfTurn), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance);
Ability ability = new ActivateIfConditionActivatedAbility(
new BoostTargetEffect(2, 2, Duration.EndOfTurn),
new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}

View file

@ -1,7 +1,5 @@
package mage.cards.s;
import java.util.UUID;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.Ability;
@ -13,20 +11,21 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.ColorPredicate;
import mage.filter.predicate.permanent.TappedPredicate;
import mage.target.common.TargetCreaturePermanent;
import mage.target.TargetPermanent;
import java.util.UUID;
/**
*
* @author fireshoes
*/
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 {
filter.add(TappedPredicate.TAPPED);
@ -41,9 +40,10 @@ public final class StoneCatapult extends CardImpl {
this.toughness = new MageInt(2);
// {tap}: Destroy target tapped nonblack creature. Activate this ability only during your turn, before attackers are declared.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
new DestroyTargetEffect(), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance);
ability.addTarget(new TargetCreaturePermanent(filter));
Ability ability = new ActivateIfConditionActivatedAbility(
new DestroyTargetEffect(), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance
);
ability.addTarget(new TargetPermanent(filter));
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.mana.GenericManaCost;
import mage.abilities.effects.common.EndTurnEffect;
import mage.abilities.hint.common.MyTurnHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import java.util.UUID;
@ -23,9 +21,10 @@ public final class SundialOfTheInfinite extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}");
// {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.addHint(MyTurnHint.instance);
this.addAbility(ability);
}

View file

@ -17,10 +17,12 @@ import mage.abilities.keyword.CantBeBlockedSourceAbility;
import mage.abilities.keyword.DefenderAbility;
import mage.cards.CardImpl;
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 java.util.Objects;
import java.util.Optional;
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.
ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new BecomesColorSourceEffect(ObjectColor.BLUE, Duration.Custom),
new BecomesColorSourceEffect(ObjectColor.BLUE, Duration.Custom),
new ManaCostsImpl<>("{2}{U}"), SurgeEngineCondition.instance
);
ability.addEffect(new SetBasePowerToughnessSourceEffect(
@ -85,7 +87,7 @@ enum SurgeEngineCondition implements Condition {
@Override
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;
import java.util.UUID;
import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
@ -21,6 +19,8 @@ import mage.constants.ManaType;
import mage.constants.Zone;
import mage.counters.CounterType;
import java.util.UUID;
/**
* @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.
Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1),
new GenericManaCost(1), condition2
new DrawCardSourceControllerEffect(1), new GenericManaCost(1), condition2
);
ability.addCost(new TapSourceCost());
this.addAbility(ability);

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