diff --git a/Mage.Sets/src/mage/cards/a/AlabornVeteran.java b/Mage.Sets/src/mage/cards/a/AlabornVeteran.java index a9280a62891..80ade8c4ea7 100644 --- a/Mage.Sets/src/mage/cards/a/AlabornVeteran.java +++ b/Mage.Sets/src/mage/cards/a/AlabornVeteran.java @@ -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,25 +11,27 @@ 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 { public AlabornVeteran(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.KNIGHT); this.power = new MageInt(2); this.toughness = new MageInt(2); // {tap}: Target creature gets +2/+2 until end of turn. Activate this ability only during your turn, before attackers are declared. - 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); } diff --git a/Mage.Sets/src/mage/cards/a/AmbitiousFarmhand.java b/Mage.Sets/src/mage/cards/a/AmbitiousFarmhand.java index 63256a34839..cf911245785 100644 --- a/Mage.Sets/src/mage/cards/a/AmbitiousFarmhand.java +++ b/Mage.Sets/src/mage/cards/a/AmbitiousFarmhand.java @@ -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)); } diff --git a/Mage.Sets/src/mage/cards/a/AngusMackenzie.java b/Mage.Sets/src/mage/cards/a/AngusMackenzie.java index 1657c3914e2..8245670a062 100644 --- a/Mage.Sets/src/mage/cards/a/AngusMackenzie.java +++ b/Mage.Sets/src/mage/cards/a/AngusMackenzie.java @@ -1,28 +1,26 @@ - 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 { public AngusMackenzie(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{G}{W}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{W}{U}"); this.supertype.add(SuperType.LEGENDARY); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.CLERIC); @@ -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); @@ -62,15 +57,15 @@ class BeforeCombatDamageCondition implements Condition { @Override public boolean apply(Game game, Ability source) { - PhaseStep phaseStep = game.getTurnStepType(); - if(phaseStep.getIndex() < PhaseStep.FIRST_COMBAT_DAMAGE.getIndex()) { - return true; - } + PhaseStep phaseStep = game.getTurnStepType(); + if (phaseStep.getIndex() < PhaseStep.FIRST_COMBAT_DAMAGE.getIndex()) { + return true; + } return false; } @Override public String toString() { - return "before the combat damage step"; + return "before the combat damage step"; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/a/ApprenticeSorcerer.java b/Mage.Sets/src/mage/cards/a/ApprenticeSorcerer.java index 8576032e6e7..355e39e2a0c 100644 --- a/Mage.Sets/src/mage/cards/a/ApprenticeSorcerer.java +++ b/Mage.Sets/src/mage/cards/a/ApprenticeSorcerer.java @@ -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,25 +10,27 @@ 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 { public ApprenticeSorcerer(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.WIZARD); this.power = new MageInt(1); this.toughness = new MageInt(1); // {tap}: Apprentice Sorcerer deals 1 damage to any target. Activate this ability only during your turn, before attackers are declared. - 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); } diff --git a/Mage.Sets/src/mage/cards/a/ArgentSphinx.java b/Mage.Sets/src/mage/cards/a/ArgentSphinx.java index 807b1241d4e..c23ce165654 100644 --- a/Mage.Sets/src/mage/cards/a/ArgentSphinx.java +++ b/Mage.Sets/src/mage/cards/a/ArgentSphinx.java @@ -37,13 +37,9 @@ public final class ArgentSphinx extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Metalcraft — {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) { diff --git a/Mage.Sets/src/mage/cards/a/AtarkaBeastbreaker.java b/Mage.Sets/src/mage/cards/a/AtarkaBeastbreaker.java index e7013ddb2af..97681efaafd 100644 --- a/Mage.Sets/src/mage/cards/a/AtarkaBeastbreaker.java +++ b/Mage.Sets/src/mage/cards/a/AtarkaBeastbreaker.java @@ -1,38 +1,36 @@ - 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 { public AtarkaBeastbreaker(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.WARRIOR); this.power = new MageInt(2); this.toughness = new MageInt(2); // Formidable — {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, - new BoostSourceEffect(4,4, Duration.EndOfTurn), - new ManaCostsImpl<>("{4}{G}"), - FormidableCondition.instance); - ability.setAbilityWord(AbilityWord.FORMIDABLE); - this.addAbility(ability); + this.addAbility(new ActivateIfConditionActivatedAbility( + new BoostSourceEffect(4, 4, Duration.EndOfTurn), + new ManaCostsImpl<>("{4}{G}"), FormidableCondition.instance + ).setAbilityWord(AbilityWord.FORMIDABLE)); } private AtarkaBeastbreaker(final AtarkaBeastbreaker card) { diff --git a/Mage.Sets/src/mage/cards/a/AtarkaPummeler.java b/Mage.Sets/src/mage/cards/a/AtarkaPummeler.java index a42c030a66a..c01968c39af 100644 --- a/Mage.Sets/src/mage/cards/a/AtarkaPummeler.java +++ b/Mage.Sets/src/mage/cards/a/AtarkaPummeler.java @@ -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,31 +8,30 @@ 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 { public AtarkaPummeler(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}"); this.subtype.add(SubType.OGRE); this.subtype.add(SubType.WARRIOR); this.power = new MageInt(4); this.toughness = new MageInt(5); // Formidable — {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) { diff --git a/Mage.Sets/src/mage/cards/b/BaradDur.java b/Mage.Sets/src/mage/cards/b/BaradDur.java index 18328b28d58..d51f2572517 100644 --- a/Mage.Sets/src/mage/cards/b/BaradDur.java +++ b/Mage.Sets/src/mage/cards/b/BaradDur.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/b/BloodlineKeeper.java b/Mage.Sets/src/mage/cards/b/BloodlineKeeper.java index 32dd7d98314..8cc8653d882 100644 --- a/Mage.Sets/src/mage/cards/b/BloodlineKeeper.java +++ b/Mage.Sets/src/mage/cards/b/BloodlineKeeper.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/b/BloodshotTrainee.java b/Mage.Sets/src/mage/cards/b/BloodshotTrainee.java index a46fbb0e55e..06e20de7583 100644 --- a/Mage.Sets/src/mage/cards/b/BloodshotTrainee.java +++ b/Mage.Sets/src/mage/cards/b/BloodshotTrainee.java @@ -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); diff --git a/Mage.Sets/src/mage/cards/b/BloodthirstyOgre.java b/Mage.Sets/src/mage/cards/b/BloodthirstyOgre.java index 7edbf9546fa..7700ca2cb92 100644 --- a/Mage.Sets/src/mage/cards/b/BloodthirstyOgre.java +++ b/Mage.Sets/src/mage/cards/b/BloodthirstyOgre.java @@ -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,37 +17,40 @@ 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}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); this.subtype.add(SubType.OGRE, SubType.WARRIOR, SubType.SHAMAN); this.power = new MageInt(3); this.toughness = new MageInt(1); // {T}: Put a devotion counter on Bloodthirsty Ogre - this.addAbility(new SimpleActivatedAbility(new AddCountersSourceEffect(CounterType.DEVOTION.createInstance()),new TapSourceCost())); + this.addAbility(new SimpleActivatedAbility(new AddCountersSourceEffect(CounterType.DEVOTION.createInstance()), new TapSourceCost())); // {T}: Target creature gets -X/-X until end of turn, where X is the number of devotion counters on Bloodthirsty Ogre. Activate this ability only if you control a Demon. - - 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); } diff --git a/Mage.Sets/src/mage/cards/b/BondersEnclave.java b/Mage.Sets/src/mage/cards/b/BondersEnclave.java index dee8f3a5d1f..e6a23309340 100644 --- a/Mage.Sets/src/mage/cards/b/BondersEnclave.java +++ b/Mage.Sets/src/mage/cards/b/BondersEnclave.java @@ -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); diff --git a/Mage.Sets/src/mage/cards/b/BramblefortFink.java b/Mage.Sets/src/mage/cards/b/BramblefortFink.java index dfb393b5f22..29d9f47e9ee 100644 --- a/Mage.Sets/src/mage/cards/b/BramblefortFink.java +++ b/Mage.Sets/src/mage/cards/b/BramblefortFink.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/c/CagedZombie.java b/Mage.Sets/src/mage/cards/c/CagedZombie.java index 2625767f96d..573152e12d2 100644 --- a/Mage.Sets/src/mage/cards/c/CagedZombie.java +++ b/Mage.Sets/src/mage/cards/c/CagedZombie.java @@ -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)); diff --git a/Mage.Sets/src/mage/cards/c/Candletrap.java b/Mage.Sets/src/mage/cards/c/Candletrap.java index 4c580dceb43..b08de188b95 100644 --- a/Mage.Sets/src/mage/cards/c/Candletrap.java +++ b/Mage.Sets/src/mage/cards/c/Candletrap.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/c/CaoCaoLordOfWei.java b/Mage.Sets/src/mage/cards/c/CaoCaoLordOfWei.java index 095a835be06..f199fe1523d 100644 --- a/Mage.Sets/src/mage/cards/c/CaoCaoLordOfWei.java +++ b/Mage.Sets/src/mage/cards/c/CaoCaoLordOfWei.java @@ -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,17 +11,17 @@ 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 { public CaoCaoLordOfWei(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}{B}"); this.supertype.add(SuperType.LEGENDARY); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.SOLDIER); @@ -32,9 +30,11 @@ 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); + this.addAbility(ability); } private CaoCaoLordOfWei(final CaoCaoLordOfWei card) { diff --git a/Mage.Sets/src/mage/cards/c/CapriciousSorcerer.java b/Mage.Sets/src/mage/cards/c/CapriciousSorcerer.java index f2fed9e7586..3577a8dfbad 100644 --- a/Mage.Sets/src/mage/cards/c/CapriciousSorcerer.java +++ b/Mage.Sets/src/mage/cards/c/CapriciousSorcerer.java @@ -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,25 +10,27 @@ 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 { public CapriciousSorcerer(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.WIZARD); this.power = new MageInt(1); this.toughness = new MageInt(1); // {tap}: Capricious Sorcerer deals 1 damage to any target. Activate this ability only during your turn, before attackers are declared. - 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); } diff --git a/Mage.Sets/src/mage/cards/c/CelestialEnforcer.java b/Mage.Sets/src/mage/cards/c/CelestialEnforcer.java index ef5772bcd21..03dc253156f 100644 --- a/Mage.Sets/src/mage/cards/c/CelestialEnforcer.java +++ b/Mage.Sets/src/mage/cards/c/CelestialEnforcer.java @@ -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()); diff --git a/Mage.Sets/src/mage/cards/c/ChainedBrute.java b/Mage.Sets/src/mage/cards/c/ChainedBrute.java index dd39e3422ba..dc5aa46ba61 100644 --- a/Mage.Sets/src/mage/cards/c/ChainedBrute.java +++ b/Mage.Sets/src/mage/cards/c/ChainedBrute.java @@ -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); diff --git a/Mage.Sets/src/mage/cards/c/ChurningReservoir.java b/Mage.Sets/src/mage/cards/c/ChurningReservoir.java index 1a0b02282db..196ec45d80f 100644 --- a/Mage.Sets/src/mage/cards/c/ChurningReservoir.java +++ b/Mage.Sets/src/mage/cards/c/ChurningReservoir.java @@ -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()); diff --git a/Mage.Sets/src/mage/cards/c/CinderhazeWretch.java b/Mage.Sets/src/mage/cards/c/CinderhazeWretch.java index a7cf0dbcf05..a41e6be57cb 100644 --- a/Mage.Sets/src/mage/cards/c/CinderhazeWretch.java +++ b/Mage.Sets/src/mage/cards/c/CinderhazeWretch.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/c/CoastalWizard.java b/Mage.Sets/src/mage/cards/c/CoastalWizard.java index b476e1b3b5d..5a718460040 100644 --- a/Mage.Sets/src/mage/cards/c/CoastalWizard.java +++ b/Mage.Sets/src/mage/cards/c/CoastalWizard.java @@ -1,51 +1,40 @@ - 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}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}{U}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.WIZARD); this.power = new MageInt(1); this.toughness = new MageInt(1); // {tap}: Return Coastal Wizard and another target creature to their owners' hands. Activate this ability only during your turn, before attackers are declared. - 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); } diff --git a/Mage.Sets/src/mage/cards/c/CompanionOfTheTrials.java b/Mage.Sets/src/mage/cards/c/CompanionOfTheTrials.java index fdd89ef531f..41d068b8245 100644 --- a/Mage.Sets/src/mage/cards/c/CompanionOfTheTrials.java +++ b/Mage.Sets/src/mage/cards/c/CompanionOfTheTrials.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/c/CraterElemental.java b/Mage.Sets/src/mage/cards/c/CraterElemental.java index aa0bea29657..b9377dc293d 100644 --- a/Mage.Sets/src/mage/cards/c/CraterElemental.java +++ b/Mage.Sets/src/mage/cards/c/CraterElemental.java @@ -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); // Formidable — {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) { diff --git a/Mage.Sets/src/mage/cards/c/CrownOfDoom.java b/Mage.Sets/src/mage/cards/c/CrownOfDoom.java index 3f88e155142..c9ea284b93a 100644 --- a/Mage.Sets/src/mage/cards/c/CrownOfDoom.java +++ b/Mage.Sets/src/mage/cards/c/CrownOfDoom.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/c/CrypticCaves.java b/Mage.Sets/src/mage/cards/c/CrypticCaves.java index 477b0128c45..6bb1fbb463f 100644 --- a/Mage.Sets/src/mage/cards/c/CrypticCaves.java +++ b/Mage.Sets/src/mage/cards/c/CrypticCaves.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/c/CunningAdvisor.java b/Mage.Sets/src/mage/cards/c/CunningAdvisor.java index 0ef8c384154..5ec352170ea 100644 --- a/Mage.Sets/src/mage/cards/c/CunningAdvisor.java +++ b/Mage.Sets/src/mage/cards/c/CunningAdvisor.java @@ -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,25 +10,27 @@ 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 { public CunningAdvisor(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.ADVISOR); this.power = new MageInt(1); this.toughness = new MageInt(1); // {tap}: Target opponent discards a card. Activate this ability only during your turn, before attackers are declared. - 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); } diff --git a/Mage.Sets/src/mage/cards/d/DawnhartMentor.java b/Mage.Sets/src/mage/cards/d/DawnhartMentor.java index 6f3341802c6..231300568d9 100644 --- a/Mage.Sets/src/mage/cards/d/DawnhartMentor.java +++ b/Mage.Sets/src/mage/cards/d/DawnhartMentor.java @@ -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,8 +40,8 @@ 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) - .setText("target creature you control gets +3/+3"), + new BoostTargetEffect(3, 3) + .setText("target creature you control gets +3/+3"), new ManaCostsImpl<>("{5}{G}"), CovenCondition.instance ); ability.addEffect(new GainAbilityTargetEffect( diff --git a/Mage.Sets/src/mage/cards/d/DefendersOfHumanity.java b/Mage.Sets/src/mage/cards/d/DefendersOfHumanity.java index e20d84241bd..d79a39f35fb 100644 --- a/Mage.Sets/src/mage/cards/d/DefendersOfHumanity.java +++ b/Mage.Sets/src/mage/cards/d/DefendersOfHumanity.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/d/DementiaSliver.java b/Mage.Sets/src/mage/cards/d/DementiaSliver.java index 92b47218904..5a5a50ed8e2 100644 --- a/Mage.Sets/src/mage/cards/d/DementiaSliver.java +++ b/Mage.Sets/src/mage/cards/d/DementiaSliver.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/d/DesiccatedNaga.java b/Mage.Sets/src/mage/cards/d/DesiccatedNaga.java index a429b6637d3..134a3c0679e 100644 --- a/Mage.Sets/src/mage/cards/d/DesiccatedNaga.java +++ b/Mage.Sets/src/mage/cards/d/DesiccatedNaga.java @@ -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); diff --git a/Mage.Sets/src/mage/cards/d/DiaochanArtfulBeauty.java b/Mage.Sets/src/mage/cards/d/DiaochanArtfulBeauty.java index f1ae94a56c6..5f431d70650 100644 --- a/Mage.Sets/src/mage/cards/d/DiaochanArtfulBeauty.java +++ b/Mage.Sets/src/mage/cards/d/DiaochanArtfulBeauty.java @@ -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; - } -} diff --git a/Mage.Sets/src/mage/cards/d/DisruptingScepter.java b/Mage.Sets/src/mage/cards/d/DisruptingScepter.java index c4543772094..b69953b1046 100644 --- a/Mage.Sets/src/mage/cards/d/DisruptingScepter.java +++ b/Mage.Sets/src/mage/cards/d/DisruptingScepter.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/d/DjinnOfInfiniteDeceits.java b/Mage.Sets/src/mage/cards/d/DjinnOfInfiniteDeceits.java index 204e8a8bf80..1bab6cf6e2e 100644 --- a/Mage.Sets/src/mage/cards/d/DjinnOfInfiniteDeceits.java +++ b/Mage.Sets/src/mage/cards/d/DjinnOfInfiniteDeceits.java @@ -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,22 +14,25 @@ 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}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}{U}"); this.subtype.add(SubType.DJINN); this.power = new MageInt(2); @@ -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); } diff --git a/Mage.Sets/src/mage/cards/d/DragonScarredBear.java b/Mage.Sets/src/mage/cards/d/DragonScarredBear.java index 116d6ad24df..8c842f767e3 100644 --- a/Mage.Sets/src/mage/cards/d/DragonScarredBear.java +++ b/Mage.Sets/src/mage/cards/d/DragonScarredBear.java @@ -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,28 +10,24 @@ 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 { public DragonScarredBear(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); this.subtype.add(SubType.BEAR); this.power = new MageInt(3); this.toughness = new MageInt(2); // Formidable — {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) { diff --git a/Mage.Sets/src/mage/cards/d/DragonWhisperer.java b/Mage.Sets/src/mage/cards/d/DragonWhisperer.java index a747b2246f4..84cf4f1273b 100644 --- a/Mage.Sets/src/mage/cards/d/DragonWhisperer.java +++ b/Mage.Sets/src/mage/cards/d/DragonWhisperer.java @@ -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,42 +13,38 @@ 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 { public DragonWhisperer(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{R}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}{R}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.SHAMAN); this.power = new MageInt(2); 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}") + )); + // — {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) { diff --git a/Mage.Sets/src/mage/cards/d/DreadlightMonstrosity.java b/Mage.Sets/src/mage/cards/d/DreadlightMonstrosity.java index b4cdbe27ed4..b39e5a84055 100644 --- a/Mage.Sets/src/mage/cards/d/DreadlightMonstrosity.java +++ b/Mage.Sets/src/mage/cards/d/DreadlightMonstrosity.java @@ -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) { @@ -75,4 +75,4 @@ enum DreadlightMonstrosityCondition implements Condition { public String toString() { return "you own a card in exile"; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/d/DwarvenSeaClan.java b/Mage.Sets/src/mage/cards/d/DwarvenSeaClan.java index fa3a13b4df6..6cafeb67f3c 100644 --- a/Mage.Sets/src/mage/cards/d/DwarvenSeaClan.java +++ b/Mage.Sets/src/mage/cards/d/DwarvenSeaClan.java @@ -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); @@ -35,19 +34,18 @@ public final class DwarvenSeaClan extends CardImpl { public DwarvenSeaClan(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}"); - + this.subtype.add(SubType.DWARF); this.power = new MageInt(1); this.toughness = new MageInt(1); // {tap}: Choose target attacking or blocking creature whose controller controls an Island. Dwarven Sea Clan deals 2 damage to that creature at end of combat. Activate this ability only before the end of combat step. - 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); @@ -73,7 +71,7 @@ class BeforeEndCombatCondition implements Condition { @Override public boolean apply(Game game, Ability source) { PhaseStep phaseStep = game.getTurnStepType(); - if(phaseStep.getIndex() < PhaseStep.END_COMBAT.getIndex()) { + if (phaseStep.getIndex() < PhaseStep.END_COMBAT.getIndex()) { return true; } return false; diff --git a/Mage.Sets/src/mage/cards/e/Earthlore.java b/Mage.Sets/src/mage/cards/e/Earthlore.java index 38750d5e969..dcd880d495f 100644 --- a/Mage.Sets/src/mage/cards/e/Earthlore.java +++ b/Mage.Sets/src/mage/cards/e/Earthlore.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/e/EladamriKorvecdal.java b/Mage.Sets/src/mage/cards/e/EladamriKorvecdal.java index 2a61a0911e4..cd24716ae5b 100644 --- a/Mage.Sets/src/mage/cards/e/EladamriKorvecdal.java +++ b/Mage.Sets/src/mage/cards/e/EladamriKorvecdal.java @@ -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( @@ -163,4 +163,4 @@ class EladamriKorvecdalEffect extends OneShotEffect { } return true; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/e/EndlessAtlas.java b/Mage.Sets/src/mage/cards/e/EndlessAtlas.java index 913fad07686..929ffa35b86 100644 --- a/Mage.Sets/src/mage/cards/e/EndlessAtlas.java +++ b/Mage.Sets/src/mage/cards/e/EndlessAtlas.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/e/EverythingamajigC.java b/Mage.Sets/src/mage/cards/e/EverythingamajigC.java index 52e90c7f894..b6034e21773 100644 --- a/Mage.Sets/src/mage/cards/e/EverythingamajigC.java +++ b/Mage.Sets/src/mage/cards/e/EverythingamajigC.java @@ -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. diff --git a/Mage.Sets/src/mage/cards/f/FalkenrathPitFighter.java b/Mage.Sets/src/mage/cards/f/FalkenrathPitFighter.java index 00b329f6310..65ce6db2c6b 100644 --- a/Mage.Sets/src/mage/cards/f/FalkenrathPitFighter.java +++ b/Mage.Sets/src/mage/cards/f/FalkenrathPitFighter.java @@ -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()); diff --git a/Mage.Sets/src/mage/cards/f/FireBowman.java b/Mage.Sets/src/mage/cards/f/FireBowman.java index 7b98f5f4d38..b545be81e67 100644 --- a/Mage.Sets/src/mage/cards/f/FireBowman.java +++ b/Mage.Sets/src/mage/cards/f/FireBowman.java @@ -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()); diff --git a/Mage.Sets/src/mage/cards/f/Fleshformer.java b/Mage.Sets/src/mage/cards/f/Fleshformer.java index 0f3ec0e2994..5593c572276 100644 --- a/Mage.Sets/src/mage/cards/f/Fleshformer.java +++ b/Mage.Sets/src/mage/cards/f/Fleshformer.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/f/ForgestokerDragon.java b/Mage.Sets/src/mage/cards/f/ForgestokerDragon.java index a9250517cca..30881f1df2f 100644 --- a/Mage.Sets/src/mage/cards/f/ForgestokerDragon.java +++ b/Mage.Sets/src/mage/cards/f/ForgestokerDragon.java @@ -1,32 +1,29 @@ - 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 { public ForgestokerDragon(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{R}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}{R}"); this.subtype.add(SubType.DRAGON); this.power = new MageInt(5); @@ -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) { diff --git a/Mage.Sets/src/mage/cards/g/GerrardCapashen.java b/Mage.Sets/src/mage/cards/g/GerrardCapashen.java index ef9083d6696..4de35db4600 100644 --- a/Mage.Sets/src/mage/cards/g/GerrardCapashen.java +++ b/Mage.Sets/src/mage/cards/g/GerrardCapashen.java @@ -1,31 +1,31 @@ - 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 { public GerrardCapashen(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}{W}"); this.supertype.add(SuperType.LEGENDARY); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.SOLDIER); @@ -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; - } -} diff --git a/Mage.Sets/src/mage/cards/g/GhostTown.java b/Mage.Sets/src/mage/cards/g/GhostTown.java index 01e430d8539..7a26a8c3868 100644 --- a/Mage.Sets/src/mage/cards/g/GhostTown.java +++ b/Mage.Sets/src/mage/cards/g/GhostTown.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/g/GiltBladeProwler.java b/Mage.Sets/src/mage/cards/g/GiltBladeProwler.java index d6e26165c25..a50ddcaf47a 100644 --- a/Mage.Sets/src/mage/cards/g/GiltBladeProwler.java +++ b/Mage.Sets/src/mage/cards/g/GiltBladeProwler.java @@ -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)); diff --git a/Mage.Sets/src/mage/cards/g/GladeWatcher.java b/Mage.Sets/src/mage/cards/g/GladeWatcher.java index 07d0f2b4b4c..22da2a0cde7 100644 --- a/Mage.Sets/src/mage/cards/g/GladeWatcher.java +++ b/Mage.Sets/src/mage/cards/g/GladeWatcher.java @@ -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,32 +10,30 @@ 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 { public GladeWatcher(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); this.subtype.add(SubType.ELEMENTAL); this.power = new MageInt(3); this.toughness = new MageInt(3); // Defender this.addAbility(DefenderAbility.getInstance()); + // Formidable — {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) { diff --git a/Mage.Sets/src/mage/cards/g/GoblinFirestarter.java b/Mage.Sets/src/mage/cards/g/GoblinFirestarter.java index 92a7ac76a7e..b3b70ff4d1b 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinFirestarter.java +++ b/Mage.Sets/src/mage/cards/g/GoblinFirestarter.java @@ -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,24 +10,26 @@ 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 { public GoblinFirestarter(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{R}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}"); this.subtype.add(SubType.GOBLIN); this.power = new MageInt(1); this.toughness = new MageInt(1); // Sacrifice Goblin Firestarter: Goblin Firestarter deals 1 damage to any target. Activate this ability only during your turn, before attackers are declared. - 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); } diff --git a/Mage.Sets/src/mage/cards/g/GreenhiltTrainee.java b/Mage.Sets/src/mage/cards/g/GreenhiltTrainee.java index 31122f6b718..7c985e7530f 100644 --- a/Mage.Sets/src/mage/cards/g/GreenhiltTrainee.java +++ b/Mage.Sets/src/mage/cards/g/GreenhiltTrainee.java @@ -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()); diff --git a/Mage.Sets/src/mage/cards/g/GwendlynDiCorci.java b/Mage.Sets/src/mage/cards/g/GwendlynDiCorci.java index 886dc073273..f57d54bd42d 100644 --- a/Mage.Sets/src/mage/cards/g/GwendlynDiCorci.java +++ b/Mage.Sets/src/mage/cards/g/GwendlynDiCorci.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/h/HeidarRimewindMaster.java b/Mage.Sets/src/mage/cards/h/HeidarRimewindMaster.java index 227e47fc90b..6f9b7c9ac05 100644 --- a/Mage.Sets/src/mage/cards/h/HeidarRimewindMaster.java +++ b/Mage.Sets/src/mage/cards/h/HeidarRimewindMaster.java @@ -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,27 +11,30 @@ 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}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}"); this.supertype.add(SuperType.LEGENDARY); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.WIZARD); @@ -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); diff --git a/Mage.Sets/src/mage/cards/h/HoofprintsOfTheStag.java b/Mage.Sets/src/mage/cards/h/HoofprintsOfTheStag.java index 3c7458d5d71..88615cac9b5 100644 --- a/Mage.Sets/src/mage/cards/h/HoofprintsOfTheStag.java +++ b/Mage.Sets/src/mage/cards/h/HoofprintsOfTheStag.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/h/HuaTuoHonoredPhysician.java b/Mage.Sets/src/mage/cards/h/HuaTuoHonoredPhysician.java index 9b62ed46a62..173ab53fb89 100644 --- a/Mage.Sets/src/mage/cards/h/HuaTuoHonoredPhysician.java +++ b/Mage.Sets/src/mage/cards/h/HuaTuoHonoredPhysician.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/h/HumbleDefector.java b/Mage.Sets/src/mage/cards/h/HumbleDefector.java index c647ca1a29a..c09f361f792 100644 --- a/Mage.Sets/src/mage/cards/h/HumbleDefector.java +++ b/Mage.Sets/src/mage/cards/h/HumbleDefector.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/i/IdolOfOblivion.java b/Mage.Sets/src/mage/cards/i/IdolOfOblivion.java index 2dba9b17035..377142c4535 100644 --- a/Mage.Sets/src/mage/cards/i/IdolOfOblivion.java +++ b/Mage.Sets/src/mage/cards/i/IdolOfOblivion.java @@ -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()); diff --git a/Mage.Sets/src/mage/cards/i/InfiniteHourglass.java b/Mage.Sets/src/mage/cards/i/InfiniteHourglass.java index b7219ba551a..e086c769569 100644 --- a/Mage.Sets/src/mage/cards/i/InfiniteHourglass.java +++ b/Mage.Sets/src/mage/cards/i/InfiniteHourglass.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/i/InventorsFair.java b/Mage.Sets/src/mage/cards/i/InventorsFair.java index be5427e89b1..38dda972622 100644 --- a/Mage.Sets/src/mage/cards/i/InventorsFair.java +++ b/Mage.Sets/src/mage/cards/i/InventorsFair.java @@ -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."; - } -} \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/k/KelpieGuide.java b/Mage.Sets/src/mage/cards/k/KelpieGuide.java index 8637b8b6589..10d5d81af0e 100644 --- a/Mage.Sets/src/mage/cards/k/KelpieGuide.java +++ b/Mage.Sets/src/mage/cards/k/KelpieGuide.java @@ -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)); } diff --git a/Mage.Sets/src/mage/cards/k/KingsAssassin.java b/Mage.Sets/src/mage/cards/k/KingsAssassin.java index cda86b5d362..bade0ce6034 100644 --- a/Mage.Sets/src/mage/cards/k/KingsAssassin.java +++ b/Mage.Sets/src/mage/cards/k/KingsAssassin.java @@ -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,17 +10,17 @@ 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 { - + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("tapped creature"); static { @@ -30,16 +28,18 @@ public final class KingsAssassin extends CardImpl { } public KingsAssassin(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{B}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.ASSASSIN); this.power = new MageInt(1); 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); } diff --git a/Mage.Sets/src/mage/cards/k/KrovikanPlague.java b/Mage.Sets/src/mage/cards/k/KrovikanPlague.java index ea0ee8d0be0..d0278d074a2 100644 --- a/Mage.Sets/src/mage/cards/k/KrovikanPlague.java +++ b/Mage.Sets/src/mage/cards/k/KrovikanPlague.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/l/LadySun.java b/Mage.Sets/src/mage/cards/l/LadySun.java index 98110b6b2bf..a409c8bead9 100644 --- a/Mage.Sets/src/mage/cards/l/LadySun.java +++ b/Mage.Sets/src/mage/cards/l/LadySun.java @@ -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,24 +12,18 @@ 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}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{U}"); this.supertype.add(SuperType.LEGENDARY); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.ADVISOR); @@ -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); } diff --git a/Mage.Sets/src/mage/cards/l/LeechriddenSwamp.java b/Mage.Sets/src/mage/cards/l/LeechriddenSwamp.java index fdbebd4d9be..4217e7169d4 100644 --- a/Mage.Sets/src/mage/cards/l/LeechriddenSwamp.java +++ b/Mage.Sets/src/mage/cards/l/LeechriddenSwamp.java @@ -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); - } -} diff --git a/Mage.Sets/src/mage/cards/l/LoyalRetainers.java b/Mage.Sets/src/mage/cards/l/LoyalRetainers.java index 8d3b5f5649c..f7ed104d7a1 100644 --- a/Mage.Sets/src/mage/cards/l/LoyalRetainers.java +++ b/Mage.Sets/src/mage/cards/l/LoyalRetainers.java @@ -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,24 +11,25 @@ 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()); } public LoyalRetainers(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.ADVISOR); @@ -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) { diff --git a/Mage.Sets/src/mage/cards/l/LuSuWuAdvisor.java b/Mage.Sets/src/mage/cards/l/LuSuWuAdvisor.java index 0159246fb6c..6c1d058c8f3 100644 --- a/Mage.Sets/src/mage/cards/l/LuSuWuAdvisor.java +++ b/Mage.Sets/src/mage/cards/l/LuSuWuAdvisor.java @@ -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,16 +10,16 @@ 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 { public LuSuWuAdvisor(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{U}"); this.supertype.add(SuperType.LEGENDARY); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.ADVISOR); @@ -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) { diff --git a/Mage.Sets/src/mage/cards/l/LuminarchAscension.java b/Mage.Sets/src/mage/cards/l/LuminarchAscension.java index de60e8cf98d..326f1c55688 100644 --- a/Mage.Sets/src/mage/cards/l/LuminarchAscension.java +++ b/Mage.Sets/src/mage/cards/l/LuminarchAscension.java @@ -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 )); } diff --git a/Mage.Sets/src/mage/cards/l/LurkingArynx.java b/Mage.Sets/src/mage/cards/l/LurkingArynx.java index 510b8d5c25e..7b85b2a6065 100644 --- a/Mage.Sets/src/mage/cards/l/LurkingArynx.java +++ b/Mage.Sets/src/mage/cards/l/LurkingArynx.java @@ -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,19 +10,19 @@ 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 { public LurkingArynx(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}"); this.subtype.add(SubType.CAT); this.subtype.add(SubType.BEAST); this.power = new MageInt(3); @@ -32,13 +30,11 @@ public final class LurkingArynx extends CardImpl { // Formidable — {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) { diff --git a/Mage.Sets/src/mage/cards/m/MastersManufactory.java b/Mage.Sets/src/mage/cards/m/MastersManufactory.java index fbd796afbc6..ed3f49799fa 100644 --- a/Mage.Sets/src/mage/cards/m/MastersManufactory.java +++ b/Mage.Sets/src/mage/cards/m/MastersManufactory.java @@ -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"; } } diff --git a/Mage.Sets/src/mage/cards/m/MerfolkWindrobber.java b/Mage.Sets/src/mage/cards/m/MerfolkWindrobber.java index f5e341bca31..3d5a9c30432 100644 --- a/Mage.Sets/src/mage/cards/m/MerfolkWindrobber.java +++ b/Mage.Sets/src/mage/cards/m/MerfolkWindrobber.java @@ -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."; - } -} diff --git a/Mage.Sets/src/mage/cards/m/MeticulousExcavation.java b/Mage.Sets/src/mage/cards/m/MeticulousExcavation.java index 3847f745780..7b31635c5e4 100644 --- a/Mage.Sets/src/mage/cards/m/MeticulousExcavation.java +++ b/Mage.Sets/src/mage/cards/m/MeticulousExcavation.java @@ -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); diff --git a/Mage.Sets/src/mage/cards/m/MinasTirith.java b/Mage.Sets/src/mage/cards/m/MinasTirith.java index a7ef0249a44..6e580899c59 100644 --- a/Mage.Sets/src/mage/cards/m/MinasTirith.java +++ b/Mage.Sets/src/mage/cards/m/MinasTirith.java @@ -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()); diff --git a/Mage.Sets/src/mage/cards/m/MistveilPlains.java b/Mage.Sets/src/mage/cards/m/MistveilPlains.java index 09cb3dea2eb..b6616d7597c 100644 --- a/Mage.Sets/src/mage/cards/m/MistveilPlains.java +++ b/Mage.Sets/src/mage/cards/m/MistveilPlains.java @@ -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) { diff --git a/Mage.Sets/src/mage/cards/m/MonumentToPerfection.java b/Mage.Sets/src/mage/cards/m/MonumentToPerfection.java index 45371e91954..deddca2a48d 100644 --- a/Mage.Sets/src/mage/cards/m/MonumentToPerfection.java +++ b/Mage.Sets/src/mage/cards/m/MonumentToPerfection.java @@ -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 diff --git a/Mage.Sets/src/mage/cards/n/Nebuchadnezzar.java b/Mage.Sets/src/mage/cards/n/Nebuchadnezzar.java index 20048051a12..39eeffa252b 100644 --- a/Mage.Sets/src/mage/cards/n/Nebuchadnezzar.java +++ b/Mage.Sets/src/mage/cards/n/Nebuchadnezzar.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/n/NorwoodPriestess.java b/Mage.Sets/src/mage/cards/n/NorwoodPriestess.java index 671936209f3..dcba5817404 100644 --- a/Mage.Sets/src/mage/cards/n/NorwoodPriestess.java +++ b/Mage.Sets/src/mage/cards/n/NorwoodPriestess.java @@ -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 )); } diff --git a/Mage.Sets/src/mage/cards/o/OracleEnVec.java b/Mage.Sets/src/mage/cards/o/OracleEnVec.java index 042c879eed7..63e12f5061c 100644 --- a/Mage.Sets/src/mage/cards/o/OracleEnVec.java +++ b/Mage.Sets/src/mage/cards/o/OracleEnVec.java @@ -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 player’s next turn, the chosen // creatures attack if able, and other creatures can’t attack. At the beginning of that turn’s end step, // destroy each of the chosen creatures that didn’t 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); } diff --git a/Mage.Sets/src/mage/cards/p/PangTongYoungPhoenix.java b/Mage.Sets/src/mage/cards/p/PangTongYoungPhoenix.java index 608693b2ec4..4fa4d5274ee 100644 --- a/Mage.Sets/src/mage/cards/p/PangTongYoungPhoenix.java +++ b/Mage.Sets/src/mage/cards/p/PangTongYoungPhoenix.java @@ -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,19 +10,18 @@ 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 { public PangTongYoungPhoenix(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}{W}"); this.supertype.add(SuperType.LEGENDARY); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.ADVISOR); @@ -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); } diff --git a/Mage.Sets/src/mage/cards/p/PortalOfSanctuary.java b/Mage.Sets/src/mage/cards/p/PortalOfSanctuary.java index 4f854479914..d77c411a23c 100644 --- a/Mage.Sets/src/mage/cards/p/PortalOfSanctuary.java +++ b/Mage.Sets/src/mage/cards/p/PortalOfSanctuary.java @@ -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); } @@ -83,4 +80,4 @@ class PortalOfSanctuaryEffect extends OneShotEffect { .forEach(perm -> cards.add(perm)); return player.moveCards(cards, Zone.HAND, source, game); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/r/RagMan.java b/Mage.Sets/src/mage/cards/r/RagMan.java index 7bfdf48b6a2..619f3a68947 100644 --- a/Mage.Sets/src/mage/cards/r/RagMan.java +++ b/Mage.Sets/src/mage/cards/r/RagMan.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/r/RavingVisionary.java b/Mage.Sets/src/mage/cards/r/RavingVisionary.java index 5703d4286b3..2ccbbb7cf33 100644 --- a/Mage.Sets/src/mage/cards/r/RavingVisionary.java +++ b/Mage.Sets/src/mage/cards/r/RavingVisionary.java @@ -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)); diff --git a/Mage.Sets/src/mage/cards/r/RimewindCryomancer.java b/Mage.Sets/src/mage/cards/r/RimewindCryomancer.java index 5eeca35b0f8..12588de2d9f 100644 --- a/Mage.Sets/src/mage/cards/r/RimewindCryomancer.java +++ b/Mage.Sets/src/mage/cards/r/RimewindCryomancer.java @@ -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,37 +11,39 @@ 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}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.WIZARD); this.power = new MageInt(2); 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); diff --git a/Mage.Sets/src/mage/cards/r/RimewindTaskmage.java b/Mage.Sets/src/mage/cards/r/RimewindTaskmage.java index c0c2a709d71..c1b49f2160e 100644 --- a/Mage.Sets/src/mage/cards/r/RimewindTaskmage.java +++ b/Mage.Sets/src/mage/cards/r/RimewindTaskmage.java @@ -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,18 +30,19 @@ 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}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.WIZARD); this.power = new MageInt(1); 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); diff --git a/Mage.Sets/src/mage/cards/r/Rivendell.java b/Mage.Sets/src/mage/cards/r/Rivendell.java index 4a797a90182..2f0d377e354 100644 --- a/Mage.Sets/src/mage/cards/r/Rivendell.java +++ b/Mage.Sets/src/mage/cards/r/Rivendell.java @@ -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); diff --git a/Mage.Sets/src/mage/cards/s/SanctumOfEternity.java b/Mage.Sets/src/mage/cards/s/SanctumOfEternity.java index 337759ea92b..1368f9d8c9a 100644 --- a/Mage.Sets/src/mage/cards/s/SanctumOfEternity.java +++ b/Mage.Sets/src/mage/cards/s/SanctumOfEternity.java @@ -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() - .setText("return target commander you own from the battlefield to your hand"), + 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); } diff --git a/Mage.Sets/src/mage/cards/s/SarevoksTome.java b/Mage.Sets/src/mage/cards/s/SarevoksTome.java index 75389d857b2..efde6300ace 100644 --- a/Mage.Sets/src/mage/cards/s/SarevoksTome.java +++ b/Mage.Sets/src/mage/cards/s/SarevoksTome.java @@ -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()); diff --git a/Mage.Sets/src/mage/cards/s/ScepterOfFugue.java b/Mage.Sets/src/mage/cards/s/ScepterOfFugue.java index d5505d4b008..a5ca068724f 100644 --- a/Mage.Sets/src/mage/cards/s/ScepterOfFugue.java +++ b/Mage.Sets/src/mage/cards/s/ScepterOfFugue.java @@ -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); } diff --git a/Mage.Sets/src/mage/cards/s/SeekerOfInsight.java b/Mage.Sets/src/mage/cards/s/SeekerOfInsight.java index 55be104f1ba..5a5b24a3247 100644 --- a/Mage.Sets/src/mage/cards/s/SeekerOfInsight.java +++ b/Mage.Sets/src/mage/cards/s/SeekerOfInsight.java @@ -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 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 diff --git a/Mage.Sets/src/mage/cards/s/ShamanOfForgottenWays.java b/Mage.Sets/src/mage/cards/s/ShamanOfForgottenWays.java index 0743bbb71b6..482e2c26527 100644 --- a/Mage.Sets/src/mage/cards/s/ShamanOfForgottenWays.java +++ b/Mage.Sets/src/mage/cards/s/ShamanOfForgottenWays.java @@ -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,40 +15,36 @@ 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 { public ShamanOfForgottenWays(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.SHAMAN); - this.power = new MageInt( 2); + this.power = new MageInt(2); this.toughness = new MageInt(3); // {T}:Add two mana in any combination of colors. Spend this mana only to cast creature spells. this.addAbility(new ConditionalAnyColorManaAbility(2, new ShamanOfForgottenWaysManaBuilder())); - + // Formidable — {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) { @@ -80,29 +71,29 @@ class ShamanOfForgottenWaysManaBuilder extends ConditionalManaBuilder { } class ShamanOfForgottenWaysEffect extends OneShotEffect { - + public ShamanOfForgottenWaysEffect() { super(Outcome.Benefit); this.staticText = "each player's life total becomes the number of creatures they control"; } - + private ShamanOfForgottenWaysEffect(final ShamanOfForgottenWaysEffect effect) { super(effect); } - + @Override public ShamanOfForgottenWaysEffect copy() { return new ShamanOfForgottenWaysEffect(this); } - + @Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { FilterPermanent filter = new FilterCreaturePermanent(); - for(UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { + for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { Player player = game.getPlayer(playerId); - if (player != null){ + if (player != null) { int numberCreatures = game.getBattlefield().getAllActivePermanents(filter, playerId, game).size(); player.setLife(numberCreatures, game, source); } diff --git a/Mage.Sets/src/mage/cards/s/ShuFarmer.java b/Mage.Sets/src/mage/cards/s/ShuFarmer.java index d3302121269..2c216554c1f 100644 --- a/Mage.Sets/src/mage/cards/s/ShuFarmer.java +++ b/Mage.Sets/src/mage/cards/s/ShuFarmer.java @@ -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,24 +9,24 @@ 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 { public ShuFarmer(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); this.subtype.add(SubType.HUMAN); this.power = new MageInt(1); 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) { diff --git a/Mage.Sets/src/mage/cards/s/Skitterskin.java b/Mage.Sets/src/mage/cards/s/Skitterskin.java index 70676dd1b60..80e1d9f5ab8 100644 --- a/Mage.Sets/src/mage/cards/s/Skitterskin.java +++ b/Mage.Sets/src/mage/cards/s/Skitterskin.java @@ -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,26 +12,29 @@ 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}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}"); this.subtype.add(SubType.ELDRAZI); this.subtype.add(SubType.DRONE); this.power = new MageInt(4); @@ -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) { diff --git a/Mage.Sets/src/mage/cards/s/SteadfastUnicorn.java b/Mage.Sets/src/mage/cards/s/SteadfastUnicorn.java index bd89a9d7841..fbc5c6931ec 100644 --- a/Mage.Sets/src/mage/cards/s/SteadfastUnicorn.java +++ b/Mage.Sets/src/mage/cards/s/SteadfastUnicorn.java @@ -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, diff --git a/Mage.Sets/src/mage/cards/s/SteamCatapult.java b/Mage.Sets/src/mage/cards/s/SteamCatapult.java index f9a2a9244fa..c21efba7349 100644 --- a/Mage.Sets/src/mage/cards/s/SteamCatapult.java +++ b/Mage.Sets/src/mage/cards/s/SteamCatapult.java @@ -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,17 +10,17 @@ 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 { - + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("tapped creature"); static { @@ -30,15 +28,16 @@ public final class SteamCatapult extends CardImpl { } public SteamCatapult(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.SOLDIER); this.power = new MageInt(2); 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); } diff --git a/Mage.Sets/src/mage/cards/s/StellaLeeWildCard.java b/Mage.Sets/src/mage/cards/s/StellaLeeWildCard.java index d64bc90e05f..a3fd08dd33b 100644 --- a/Mage.Sets/src/mage/cards/s/StellaLeeWildCard.java +++ b/Mage.Sets/src/mage/cards/s/StellaLeeWildCard.java @@ -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())); diff --git a/Mage.Sets/src/mage/cards/s/SternMarshal.java b/Mage.Sets/src/mage/cards/s/SternMarshal.java index 56900530e2f..a924dfc0874 100644 --- a/Mage.Sets/src/mage/cards/s/SternMarshal.java +++ b/Mage.Sets/src/mage/cards/s/SternMarshal.java @@ -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,27 +9,29 @@ 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 { public SternMarshal(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.SOLDIER); this.power = new MageInt(2); this.toughness = new MageInt(2); // {tap}: Target creature gets +2/+2 until end of turn. Activate this ability only during your turn, before attackers are declared. - 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); } diff --git a/Mage.Sets/src/mage/cards/s/StoneCatapult.java b/Mage.Sets/src/mage/cards/s/StoneCatapult.java index b0ba155ccf9..5bcca38c131 100644 --- a/Mage.Sets/src/mage/cards/s/StoneCatapult.java +++ b/Mage.Sets/src/mage/cards/s/StoneCatapult.java @@ -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); @@ -34,16 +33,17 @@ public final class StoneCatapult extends CardImpl { } public StoneCatapult(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.SOLDIER); this.power = new MageInt(1); 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); } diff --git a/Mage.Sets/src/mage/cards/s/SundialOfTheInfinite.java b/Mage.Sets/src/mage/cards/s/SundialOfTheInfinite.java index 5fca98c8f07..7a240dcba93 100644 --- a/Mage.Sets/src/mage/cards/s/SundialOfTheInfinite.java +++ b/Mage.Sets/src/mage/cards/s/SundialOfTheInfinite.java @@ -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); } @@ -37,4 +36,4 @@ public final class SundialOfTheInfinite extends CardImpl { public SundialOfTheInfinite copy() { return new SundialOfTheInfinite(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/s/SurgeEngine.java b/Mage.Sets/src/mage/cards/s/SurgeEngine.java index 0e525fa1cf4..37713904f21 100644 --- a/Mage.Sets/src/mage/cards/s/SurgeEngine.java +++ b/Mage.Sets/src/mage/cards/s/SurgeEngine.java @@ -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"; } } diff --git a/Mage.Sets/src/mage/cards/t/TabletOfCompleation.java b/Mage.Sets/src/mage/cards/t/TabletOfCompleation.java index 4a009269a93..43a6817091b 100644 --- a/Mage.Sets/src/mage/cards/t/TabletOfCompleation.java +++ b/Mage.Sets/src/mage/cards/t/TabletOfCompleation.java @@ -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); diff --git a/Mage.Sets/src/mage/cards/t/TalasResearcher.java b/Mage.Sets/src/mage/cards/t/TalasResearcher.java index 7bd3d41700e..8c1408d0f55 100644 --- a/Mage.Sets/src/mage/cards/t/TalasResearcher.java +++ b/Mage.Sets/src/mage/cards/t/TalasResearcher.java @@ -1,9 +1,6 @@ - package mage.cards.t; -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,16 +9,16 @@ 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 TalasResearcher extends CardImpl { public TalasResearcher(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.PIRATE); this.subtype.add(SubType.WIZARD); @@ -29,10 +26,10 @@ public final class TalasResearcher extends CardImpl { this.toughness = new MageInt(1); // {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 TalasResearcher(final TalasResearcher card) { diff --git a/Mage.Sets/src/mage/cards/t/TapestryOfTheAges.java b/Mage.Sets/src/mage/cards/t/TapestryOfTheAges.java index f4743421a64..da974f65989 100644 --- a/Mage.Sets/src/mage/cards/t/TapestryOfTheAges.java +++ b/Mage.Sets/src/mage/cards/t/TapestryOfTheAges.java @@ -1,44 +1,39 @@ - package mage.cards.t; -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; 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.costs.mana.GenericManaCost; import mage.abilities.effects.common.DrawCardSourceControllerEffect; 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.GameEvent; import mage.game.stack.Spell; import mage.watchers.Watcher; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; /** - * * @author LevelX2 */ public final class TapestryOfTheAges extends CardImpl { public TapestryOfTheAges(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{4}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}"); // {2}, {T}: Draw a card. Activate this ability only if you've cast a noncreature spell this turn. Ability ability = new ActivateIfConditionActivatedAbility( - Zone.BATTLEFIELD, - new DrawCardSourceControllerEffect(1), - new ManaCostsImpl<>("{2}"), - PlayerCastNonCreatureSpellCondition.instance); + new DrawCardSourceControllerEffect(1), + new GenericManaCost(2), PlayerCastNonCreatureSpellCondition.instance + ); ability.addCost(new TapSourceCost()); - this.addAbility(ability, new PlayerCastNonCreatureSpellWatcher()); - + this.addAbility(ability, new PlayerCastNonCreatureSpellWatcher()); } private TapestryOfTheAges(final TapestryOfTheAges card) { @@ -59,7 +54,7 @@ enum PlayerCastNonCreatureSpellCondition implements Condition { PlayerCastNonCreatureSpellWatcher watcher = game.getState().getWatcher(PlayerCastNonCreatureSpellWatcher.class); return watcher != null && watcher.playerDidCastNonCreatureSpellThisTurn(source.getControllerId()); } - + @Override public String toString() { return "you've cast a noncreature spell this turn"; diff --git a/Mage.Sets/src/mage/cards/t/TectonicEdge.java b/Mage.Sets/src/mage/cards/t/TectonicEdge.java index 243bbc9cfb1..eb6f690d91e 100644 --- a/Mage.Sets/src/mage/cards/t/TectonicEdge.java +++ b/Mage.Sets/src/mage/cards/t/TectonicEdge.java @@ -1,6 +1,5 @@ package mage.cards.t; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.condition.Condition; @@ -14,12 +13,12 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.ComparisonType; -import mage.constants.Zone; import mage.filter.common.FilterLandPermanent; import mage.target.common.TargetNonBasicLandPermanent; +import java.util.UUID; + /** - * * @author BetaSteward_at_googlemail.com */ public final class TectonicEdge extends CardImpl { @@ -29,14 +28,14 @@ public final class TectonicEdge extends CardImpl { ); public TectonicEdge(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.LAND},null); + super(ownerId, setInfo, new CardType[]{CardType.LAND}, null); // Tap: Add 1. this.addAbility(new ColorlessManaAbility()); // {1}, {T}, Sacrifice Tectonic Edge: Destroy target nonbasic land. Activate only if an opponent controls four or more lands. Ability ability = new ActivateIfConditionActivatedAbility( - Zone.BATTLEFIELD, new DestroyTargetEffect(), new GenericManaCost(1), condition + new DestroyTargetEffect(), new GenericManaCost(1), condition ); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); diff --git a/Mage.Sets/src/mage/cards/t/TempleElder.java b/Mage.Sets/src/mage/cards/t/TempleElder.java index 38c9f2a4328..f243c79457c 100644 --- a/Mage.Sets/src/mage/cards/t/TempleElder.java +++ b/Mage.Sets/src/mage/cards/t/TempleElder.java @@ -1,9 +1,6 @@ - package mage.cards.t; -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,25 +9,26 @@ 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 TempleElder extends CardImpl { public TempleElder(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.CLERIC); this.power = new MageInt(1); this.toughness = new MageInt(2); // {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 TempleElder(final TempleElder card) { diff --git a/Mage.Sets/src/mage/cards/t/TheBiblioplex.java b/Mage.Sets/src/mage/cards/t/TheBiblioplex.java index 48d479931fd..0cf9c11d86c 100644 --- a/Mage.Sets/src/mage/cards/t/TheBiblioplex.java +++ b/Mage.Sets/src/mage/cards/t/TheBiblioplex.java @@ -32,8 +32,7 @@ public final class TheBiblioplex extends CardImpl { // {2}, {T}: Look at the top card of your library. If it's an instant or sorcery card, you may reveal it and put it into your hand. If you don't put the card into your hand, you may put it into your graveyard. Activate only if you have exactly zero or seven cards in hand. Ability ability = new ActivateIfConditionActivatedAbility( - Zone.BATTLEFIELD, new TheBiblioplexEffect(), - new GenericManaCost(2), TheBiblioplexCondition.instance + new TheBiblioplexEffect(), new GenericManaCost(2), TheBiblioplexCondition.instance ); ability.addCost(new TapSourceCost()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/t/TideshaperMystic.java b/Mage.Sets/src/mage/cards/t/TideshaperMystic.java index b5821d44d6e..59dd2ce550c 100644 --- a/Mage.Sets/src/mage/cards/t/TideshaperMystic.java +++ b/Mage.Sets/src/mage/cards/t/TideshaperMystic.java @@ -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.continuous.BecomesBasicLandTargetEffect; -import mage.abilities.hint.common.MyTurnHint; 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.TargetLandPermanent; import java.util.UUID; @@ -30,10 +28,10 @@ public final class TideshaperMystic extends CardImpl { this.toughness = new MageInt(1); // {T}: Target land becomes the basic land type of your choice until end of turn. Activate this ability only during your turn. - Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, - new BecomesBasicLandTargetEffect(Duration.EndOfTurn), new TapSourceCost(), MyTurnCondition.instance); + Ability ability = new ActivateIfConditionActivatedAbility( + new BecomesBasicLandTargetEffect(Duration.EndOfTurn), new TapSourceCost(), MyTurnCondition.instance + ); ability.addTarget(new TargetLandPermanent()); - ability.addHint(MyTurnHint.instance); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/t/TombTyrant.java b/Mage.Sets/src/mage/cards/t/TombTyrant.java index 08e8b632ed3..e09f160fca7 100644 --- a/Mage.Sets/src/mage/cards/t/TombTyrant.java +++ b/Mage.Sets/src/mage/cards/t/TombTyrant.java @@ -19,7 +19,10 @@ import mage.abilities.hint.ValueHint; 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.SubType; +import mage.constants.Zone; import mage.filter.FilterCard; import mage.filter.StaticFilters; import mage.filter.common.FilterCreatureCard; @@ -44,7 +47,7 @@ public final class TombTyrant extends CardImpl { MyTurnCondition.instance, new CardsInControllerGraveyardCondition(3, filter2) ); private static final Hint hint = new ValueHint( - "Zombie creatures in your graveyard", new CardsInControllerGraveyardCount(filter2) + "Zombie creature cards in your graveyard", new CardsInControllerGraveyardCount(filter2) ); public TombTyrant(UUID ownerId, CardSetInfo setInfo) { @@ -62,7 +65,7 @@ public final class TombTyrant extends CardImpl { // {2}{B}, {T}, Sacrifice a creature: Return a Zombie creature card at random from your graveyard to the battlefield. Activate only during your turn and only if there are at least three Zombie creature cards in your graveyard. Ability ability = new ActivateIfConditionActivatedAbility( - Zone.BATTLEFIELD, new ReturnFromGraveyardAtRandomEffect(filter2, Zone.BATTLEFIELD), + new ReturnFromGraveyardAtRandomEffect(filter2, Zone.BATTLEFIELD), new ManaCostsImpl<>("{2}{B}"), condition ); ability.addCost(new TapSourceCost()); diff --git a/Mage.Sets/src/mage/cards/t/TourachsGate.java b/Mage.Sets/src/mage/cards/t/TourachsGate.java index b59271eef10..fe8268f12f0 100644 --- a/Mage.Sets/src/mage/cards/t/TourachsGate.java +++ b/Mage.Sets/src/mage/cards/t/TourachsGate.java @@ -1,85 +1,84 @@ package mage.cards.t; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.ActivateIfConditionActivatedAbility; -import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.condition.Condition; import mage.abilities.condition.common.AttachedToMatchesFilterCondition; -import mage.abilities.costs.Cost; +import mage.abilities.condition.common.SourceHasCounterCondition; +import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.costs.common.TapAttachedCost; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.SacrificeSourceEffect; import mage.abilities.effects.common.continuous.BoostAllEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; -import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.common.counter.RemoveCounterSourceEffect; import mage.abilities.keyword.EnchantAbility; +import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; 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.TargetController; -import mage.constants.Zone; +import mage.constants.*; import mage.counters.CounterType; import mage.filter.FilterPermanent; +import mage.filter.StaticFilters; import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.AttackingPredicate; import mage.filter.predicate.permanent.TappedPredicate; -import mage.game.Game; -import mage.game.permanent.Permanent; import mage.target.TargetPermanent; -import mage.target.common.TargetControlledPermanent; + +import java.util.UUID; /** - * * @author L_J */ public final class TourachsGate 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 FilterCreaturePermanent filterAttackingCreatures = new FilterCreaturePermanent("attacking creatures you control"); + private static final FilterPermanent filterUntapped = new FilterPermanent("enchanted land is untapped"); + private static final FilterControlledPermanent filterThrull = new FilterControlledPermanent(SubType.THRULL, "a Thrull"); + static { filterAttackingCreatures.add(AttackingPredicate.instance); filterAttackingCreatures.add(TargetController.YOU.getControllerPredicate()); + filterUntapped.add(TappedPredicate.UNTAPPED); } - private static final FilterControlledPermanent filterThrull = new FilterControlledPermanent(SubType.THRULL, "a Thrull"); + private static final Condition condition = new SourceHasCounterCondition(CounterType.TIME, ComparisonType.EQUAL_TO, 0); + private static final Condition condition2 = new AttachedToMatchesFilterCondition(filterUntapped); public TourachsGate(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}{B}"); this.subtype.add(SubType.AURA); // Enchant land you control - TargetPermanent auraTarget = new TargetControlledPermanent(filterLand); + TargetPermanent auraTarget = new TargetPermanent(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)); // Sacrifice a Thrull: Put three time counters on Tourach's Gate. - this.addAbility(new SimpleActivatedAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(3)), - new SacrificeTargetCost(filterThrull))); - + this.addAbility(new SimpleActivatedAbility( + new AddCountersSourceEffect(CounterType.TIME.createInstance(3)), + new SacrificeTargetCost(filterThrull) + )); + // At the beginning of your upkeep, remove a time counter from Tourach's Gate. If there are no time counters on Tourach's Gate, sacrifice it. - this.addAbility(new BeginningOfUpkeepTriggeredAbility(new TourachsGateUpkeepEffect())); + Ability ability = new BeginningOfUpkeepTriggeredAbility( + new RemoveCounterSourceEffect(CounterType.TIME.createInstance()) + ); + ability.addEffect(new ConditionalOneShotEffect( + new SacrificeSourceEffect(), condition, + "If there are no time counters on {this}, sacrifice it" + )); + this.addAbility(ability); // Tap enchanted land: Attacking creatures you control get +2/-1 until end of turn. Activate this ability only if enchanted land is untapped. - Cost cost = new TapAttachedCost(); - cost.setText("Tap enchanted land"); - this.addAbility(new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new BoostAllEffect(2, -1, Duration.EndOfTurn, filterAttackingCreatures, false), - cost, new AttachedToMatchesFilterCondition(filterUntapped))); + this.addAbility(new ActivateIfConditionActivatedAbility(new BoostAllEffect( + 2, -1, Duration.EndOfTurn, + filterAttackingCreatures, false + ), new TapAttachedCost().setText("tap enchanted land"), condition2)); } private TourachsGate(final TourachsGate card) { @@ -91,38 +90,3 @@ public final class TourachsGate extends CardImpl { return new TourachsGate(this); } } - -class TourachsGateUpkeepEffect extends OneShotEffect { - - TourachsGateUpkeepEffect() { - super(Outcome.Sacrifice); - staticText = "remove a time counter from {this}. If there are no time counters on {this}, sacrifice it"; - } - - private TourachsGateUpkeepEffect(final TourachsGateUpkeepEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanent(source.getSourceId()); - if (permanent != null) { - int amount = permanent.getCounters(game).getCount(CounterType.TIME); - if (amount > 0) { - permanent.removeCounters(CounterType.TIME.createInstance(), source, game); - } - // is supposed to function similar to Vanishing - amount = permanent.getCounters(game).getCount(CounterType.TIME); - if (amount == 0) { - permanent.sacrifice(source, game); - } - return true; - } - return false; - } - - @Override - public TourachsGateUpkeepEffect copy() { - return new TourachsGateUpkeepEffect(this); - } -} diff --git a/Mage.Sets/src/mage/cards/u/UnderhandedDesigns.java b/Mage.Sets/src/mage/cards/u/UnderhandedDesigns.java index a49e49a5049..b4787b9c2e9 100644 --- a/Mage.Sets/src/mage/cards/u/UnderhandedDesigns.java +++ b/Mage.Sets/src/mage/cards/u/UnderhandedDesigns.java @@ -1,10 +1,9 @@ - package mage.cards.u; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.ActivateIfConditionActivatedAbility; -import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; +import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; +import mage.abilities.condition.Condition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.mana.GenericManaCost; @@ -17,31 +16,36 @@ 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.filter.common.FilterControlledArtifactPermanent; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author fireshoes */ public final class UnderhandedDesigns extends CardImpl { + private static final Condition condition = new PermanentsOnTheBattlefieldCondition( + new FilterControlledArtifactPermanent("you control two or more artifacts"), + ComparisonType.MORE_THAN, 1 + ); + public UnderhandedDesigns(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}"); // Whenever an artifact you control enters, you may pay {1}. If you do, each opponent loses 1 life and you gain 1 life. - DoIfCostPaid doIfCostPaid = new DoIfCostPaid(new LoseLifeOpponentsEffect(1), new GenericManaCost(1)); - doIfCostPaid.addEffect(new GainLifeEffect(1).concatBy("and")); - this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, - doIfCostPaid, StaticFilters.FILTER_PERMANENT_ARTIFACT, false)); + this.addAbility(new EntersBattlefieldAllTriggeredAbility( + new DoIfCostPaid(new LoseLifeOpponentsEffect(1), new GenericManaCost(1)) + .addEffect(new GainLifeEffect(1).concatBy("and")), + StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT + )); // {1}{B}, Sacrifice Underhanded Designs: Destroy target creature. Activate this ability only if you control two or more artifacts. - Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, - new DestroyTargetEffect(), - new ManaCostsImpl<>("{1}{B}"), - new PermanentsOnTheBattlefieldCondition(new FilterControlledArtifactPermanent("you control two or more artifacts"), ComparisonType.MORE_THAN, 1)); + Ability ability = new ActivateIfConditionActivatedAbility( + new DestroyTargetEffect(), new ManaCostsImpl<>("{1}{B}"), condition + ); ability.addCost(new SacrificeSourceCost()); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/u/UrtetRemnantOfMemnarch.java b/Mage.Sets/src/mage/cards/u/UrtetRemnantOfMemnarch.java index abc2a955b88..8b3bebeb2b6 100644 --- a/Mage.Sets/src/mage/cards/u/UrtetRemnantOfMemnarch.java +++ b/Mage.Sets/src/mage/cards/u/UrtetRemnantOfMemnarch.java @@ -3,7 +3,6 @@ package mage.cards.u; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.ActivateIfConditionActivatedAbility; -import mage.abilities.triggers.BeginningOfCombatTriggeredAbility; import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.condition.common.MyTurnCondition; import mage.abilities.costs.common.TapSourceCost; @@ -11,10 +10,12 @@ import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.UntapAllControllerEffect; import mage.abilities.effects.common.counter.AddCountersAllEffect; -import mage.abilities.hint.common.MyTurnHint; +import mage.abilities.triggers.BeginningOfCombatTriggeredAbility; 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.counters.CounterType; import mage.filter.FilterSpell; import mage.filter.common.FilterControlledPermanent; @@ -49,9 +50,11 @@ public final class UrtetRemnantOfMemnarch extends CardImpl { this.addAbility(new BeginningOfCombatTriggeredAbility(new UntapAllControllerEffect(filter2, "untap each Myr you control"))); // {W}{U}{B}{R}{G}, {T}: Put three +1/+1 counters on each Myr you control. Activate only during your turn. - Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new AddCountersAllEffect(CounterType.P1P1.createInstance(3), filter2), new ManaCostsImpl<>("{W}{U}{B}{R}{G}"), MyTurnCondition.instance); + Ability ability = new ActivateIfConditionActivatedAbility( + new AddCountersAllEffect(CounterType.P1P1.createInstance(3), filter2), + new ManaCostsImpl<>("{W}{U}{B}{R}{G}"), MyTurnCondition.instance + ); ability.addCost(new TapSourceCost()); - ability.addHint(MyTurnHint.instance); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/v/VedalkenCertarch.java b/Mage.Sets/src/mage/cards/v/VedalkenCertarch.java index 4c5a95f70d7..9e12a757502 100644 --- a/Mage.Sets/src/mage/cards/v/VedalkenCertarch.java +++ b/Mage.Sets/src/mage/cards/v/VedalkenCertarch.java @@ -12,14 +12,12 @@ import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; import mage.filter.FilterPermanent; import mage.filter.predicate.Predicates; import mage.target.TargetPermanent; import java.util.UUID; - /** * @author Loki */ @@ -41,11 +39,11 @@ public final class VedalkenCertarch extends CardImpl { this.toughness = new MageInt(1); // Metalcraft — {T}: Tap target artifact, creature, or land. Activate this ability only if you control three or more artifacts. - Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new TapTargetEffect(), new TapSourceCost(), MetalcraftCondition.instance); + Ability ability = new ActivateIfConditionActivatedAbility( + new TapTargetEffect(), new TapSourceCost(), MetalcraftCondition.instance + ); ability.addTarget(new TargetPermanent(filter)); - ability.setAbilityWord(AbilityWord.METALCRAFT); - ability.addHint(MetalcraftHint.instance); - this.addAbility(ability); + this.addAbility(ability.setAbilityWord(AbilityWord.METALCRAFT).addHint(MetalcraftHint.instance)); } private VedalkenCertarch(final VedalkenCertarch card) { @@ -56,5 +54,4 @@ public final class VedalkenCertarch extends CardImpl { public VedalkenCertarch copy() { return new VedalkenCertarch(this); } - } diff --git a/Mage.Sets/src/mage/cards/v/VengefulDevil.java b/Mage.Sets/src/mage/cards/v/VengefulDevil.java index 5502c231501..69eacef6830 100644 --- a/Mage.Sets/src/mage/cards/v/VengefulDevil.java +++ b/Mage.Sets/src/mage/cards/v/VengefulDevil.java @@ -13,7 +13,6 @@ import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; import mage.target.common.TargetAnyTarget; import java.util.UUID; @@ -35,12 +34,10 @@ public final class VengefulDevil extends CardImpl { // Morbid — {T}: Vengeful Devil deals 1 damage to any target. Activate this ability only if a creature died this turn. Ability ability = new ActivateIfConditionActivatedAbility( - Zone.BATTLEFIELD, new DamageTargetEffect(1), - new TapSourceCost(), MorbidCondition.instance + new DamageTargetEffect(1), new TapSourceCost(), MorbidCondition.instance ); ability.addTarget(new TargetAnyTarget()); - ability.setAbilityWord(AbilityWord.MORBID); - this.addAbility(ability.addHint(MorbidHint.instance)); + this.addAbility(ability.setAbilityWord(AbilityWord.MORBID).addHint(MorbidHint.instance)); } private VengefulDevil(final VengefulDevil card) { diff --git a/Mage.Sets/src/mage/cards/v/VeteransVoice.java b/Mage.Sets/src/mage/cards/v/VeteransVoice.java index fc36117feea..32160ab522a 100644 --- a/Mage.Sets/src/mage/cards/v/VeteransVoice.java +++ b/Mage.Sets/src/mage/cards/v/VeteransVoice.java @@ -10,7 +10,10 @@ import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.keyword.EnchantAbility; 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.SubType; import mage.filter.FilterPermanent; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.Predicates; @@ -49,7 +52,6 @@ public final class VeteransVoice extends CardImpl { // Tap enchanted creature: Target creature other than the creature tapped this way gets +2/+1 until end of turn. Activate this ability only if enchanted creature is untapped. this.addAbility(new ActivateIfConditionActivatedAbility( - Zone.BATTLEFIELD, new BoostTargetEffect(2, 1, Duration.EndOfTurn) .setText("target creature other than the creature tapped this way gets +2/+1 until end of turn"), new TapAttachedCost(), condition diff --git a/Mage.Sets/src/mage/cards/v/VonaButcherOfMagan.java b/Mage.Sets/src/mage/cards/v/VonaButcherOfMagan.java index d4ceca02044..024c9a31cf2 100644 --- a/Mage.Sets/src/mage/cards/v/VonaButcherOfMagan.java +++ b/Mage.Sets/src/mage/cards/v/VonaButcherOfMagan.java @@ -7,7 +7,6 @@ import mage.abilities.condition.common.MyTurnCondition; import mage.abilities.costs.common.PayLifeCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.hint.common.MyTurnHint; import mage.abilities.keyword.LifelinkAbility; import mage.abilities.keyword.VigilanceAbility; import mage.cards.CardImpl; @@ -15,7 +14,6 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.SuperType; -import mage.constants.Zone; import mage.target.common.TargetNonlandPermanent; import java.util.UUID; @@ -41,10 +39,11 @@ public final class VonaButcherOfMagan extends CardImpl { this.addAbility(LifelinkAbility.getInstance()); // {T}, Pay 7 life: Destroy target nonland permanent. Activate this ability only during your turn. - Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new TapSourceCost(), MyTurnCondition.instance); + Ability ability = new ActivateIfConditionActivatedAbility( + new DestroyTargetEffect(), new TapSourceCost(), MyTurnCondition.instance + ); ability.addCost(new PayLifeCost(7)); ability.addTarget(new TargetNonlandPermanent()); - ability.addHint(MyTurnHint.instance); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/w/WalkerOfSecretWays.java b/Mage.Sets/src/mage/cards/w/WalkerOfSecretWays.java index 64e85962af2..91108e59548 100644 --- a/Mage.Sets/src/mage/cards/w/WalkerOfSecretWays.java +++ b/Mage.Sets/src/mage/cards/w/WalkerOfSecretWays.java @@ -6,20 +6,16 @@ import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; import mage.abilities.condition.common.MyTurnCondition; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.LookAtTargetPlayerHandEffect; import mage.abilities.effects.common.ReturnToHandTargetEffect; -import mage.abilities.hint.common.MyTurnHint; import mage.abilities.keyword.NinjutsuAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.Outcome; import mage.constants.SubType; -import mage.constants.Zone; +import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledPermanent; -import mage.game.Game; -import mage.players.Player; -import mage.target.common.TargetControlledPermanent; +import mage.target.TargetPermanent; import java.util.UUID; @@ -28,7 +24,7 @@ import java.util.UUID; */ public final class WalkerOfSecretWays extends CardImpl { - private static final FilterControlledPermanent filterCreature = new FilterControlledPermanent(SubType.NINJA, "Ninja you control"); + private static final FilterPermanent filterCreature = new FilterControlledPermanent(SubType.NINJA, "Ninja you control"); public WalkerOfSecretWays(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); @@ -42,15 +38,16 @@ public final class WalkerOfSecretWays extends CardImpl { this.addAbility(new NinjutsuAbility("{1}{U}")); // Whenever Walker of Secret Ways deals combat damage to a player, look at that player's hand. - this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new WalkerOfSecretWaysEffect(), false, true)); + this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility( + new LookAtTargetPlayerHandEffect(), false, true + )); // {1}{U}: Return target Ninja you control to its owner's hand. Activate this ability only during your turn. - Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl<>("{1}{U}"), MyTurnCondition.instance); - ability.addTarget(new TargetControlledPermanent(filterCreature)); - ability.addHint(MyTurnHint.instance); + Ability ability = new ActivateIfConditionActivatedAbility( + new ReturnToHandTargetEffect(), new ManaCostsImpl<>("{1}{U}"), MyTurnCondition.instance + ); + ability.addTarget(new TargetPermanent(filterCreature)); this.addAbility(ability); - - } private WalkerOfSecretWays(final WalkerOfSecretWays card) { @@ -62,30 +59,3 @@ public final class WalkerOfSecretWays extends CardImpl { return new WalkerOfSecretWays(this); } } - -class WalkerOfSecretWaysEffect extends OneShotEffect { - WalkerOfSecretWaysEffect() { - super(Outcome.Detriment); - staticText = "look at that player's hand"; - } - - private WalkerOfSecretWaysEffect(final WalkerOfSecretWaysEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - Player player = game.getPlayer(getTargetPointer().getFirst(game, source)); - if (player != null && controller != null) { - controller.lookAtCards("Walker of Secret Ways", player.getHand(), game); - } - return true; - } - - @Override - public WalkerOfSecretWaysEffect copy() { - return new WalkerOfSecretWaysEffect(this); - } - -} diff --git a/Mage.Sets/src/mage/cards/w/WallOfForgottenPharaohs.java b/Mage.Sets/src/mage/cards/w/WallOfForgottenPharaohs.java index 08b743db0d8..5d71e6859be 100644 --- a/Mage.Sets/src/mage/cards/w/WallOfForgottenPharaohs.java +++ b/Mage.Sets/src/mage/cards/w/WallOfForgottenPharaohs.java @@ -11,7 +11,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.TargetPlayerOrPlaneswalker; import java.util.UUID; @@ -33,8 +32,7 @@ public final class WallOfForgottenPharaohs extends CardImpl { // {T}: Wall of Forgotten Pharaohs deals 1 damage to target player. Activate this ability only if you control a Desert or there is a Desert card in your graveyard. Ability ability = new ActivateIfConditionActivatedAbility( - Zone.BATTLEFIELD, new DamageTargetEffect(1), - new TapSourceCost(), DesertControlledOrGraveyardCondition.instance + new DamageTargetEffect(1), new TapSourceCost(), DesertControlledOrGraveyardCondition.instance ); ability.addTarget(new TargetPlayerOrPlaneswalker()); this.addAbility(ability.addHint(DesertControlledOrGraveyardCondition.getHint())); diff --git a/Mage.Sets/src/mage/cards/w/WandOfIth.java b/Mage.Sets/src/mage/cards/w/WandOfIth.java index bba33d38036..f35e89212d5 100644 --- a/Mage.Sets/src/mage/cards/w/WandOfIth.java +++ b/Mage.Sets/src/mage/cards/w/WandOfIth.java @@ -7,11 +7,9 @@ import mage.abilities.costs.common.PayLifeCost; 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.*; import mage.constants.CardType; import mage.constants.Outcome; -import mage.constants.Zone; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; @@ -28,10 +26,11 @@ public final class WandOfIth extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}"); // {3}, {T}: Target player reveals a card at random from their hand. If it's a land card, that player discards it unless they pay 1 life. If it isn't a land card, the player discards it unless they pay life equal to its converted mana cost. Activate this ability only during your turn. - Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new WandOfIthEffect(), new GenericManaCost(3), MyTurnCondition.instance); + Ability ability = new ActivateIfConditionActivatedAbility( + new WandOfIthEffect(), new GenericManaCost(3), MyTurnCondition.instance + ); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetPlayer()); - ability.addHint(MyTurnHint.instance); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/w/WeatheredWayfarer.java b/Mage.Sets/src/mage/cards/w/WeatheredWayfarer.java index 5805aa12f84..571a4af7fd4 100644 --- a/Mage.Sets/src/mage/cards/w/WeatheredWayfarer.java +++ b/Mage.Sets/src/mage/cards/w/WeatheredWayfarer.java @@ -1,10 +1,9 @@ - package mage.cards.w; -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.OpponentControlsMoreCondition; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; @@ -13,19 +12,20 @@ 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.filter.common.FilterLandCard; import mage.target.common.TargetCardInLibrary; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class WeatheredWayfarer extends CardImpl { + private static final Condition condition = new OpponentControlsMoreCondition(StaticFilters.FILTER_LANDS); + public WeatheredWayfarer(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.NOMAD); this.subtype.add(SubType.CLERIC); @@ -35,10 +35,10 @@ public final class WeatheredWayfarer extends CardImpl { // {W}, {tap}: Search your library for a land card, reveal it, and put it into your hand. Then shuffle your library. Activate this ability only if an opponent controls more lands than you. Ability ability = new ActivateIfConditionActivatedAbility( - Zone.BATTLEFIELD, - new SearchLibraryPutInHandEffect(new TargetCardInLibrary(new FilterLandCard()), true), - new ManaCostsImpl<>("{W}"), - new OpponentControlsMoreCondition(StaticFilters.FILTER_LANDS)); + new SearchLibraryPutInHandEffect( + new TargetCardInLibrary(StaticFilters.FILTER_CARD_LAND_A), true + ), new ManaCostsImpl<>("{W}"), condition + ); ability.addCost(new TapSourceCost()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/w/WishclawTalisman.java b/Mage.Sets/src/mage/cards/w/WishclawTalisman.java index 9b714024a9e..67496fc1887 100644 --- a/Mage.Sets/src/mage/cards/w/WishclawTalisman.java +++ b/Mage.Sets/src/mage/cards/w/WishclawTalisman.java @@ -8,18 +8,15 @@ import mage.abilities.costs.common.RemoveCountersSourceCost; import mage.abilities.costs.common.TapSourceCost; 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.GainControlTargetEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; -import mage.abilities.hint.common.MyTurnHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Outcome; -import mage.constants.Zone; import mage.counters.CounterType; import mage.game.Game; import mage.players.Player; @@ -46,11 +43,12 @@ public final class WishclawTalisman extends CardImpl { // {1}, {T}, Remove a wish counter from Wishclaw Talisman: Search your library for a card, put it into your hand, then shuffle your library. An opponent gains control of Wishclaw Talisman. Activate this ability only during your turn. Ability ability = new ActivateIfConditionActivatedAbility( - Zone.BATTLEFIELD, new WishclawTalismanEffect(), new GenericManaCost(1), MyTurnCondition.instance + new SearchLibraryPutInHandEffect(new TargetCardInLibrary(), false), + new GenericManaCost(1), MyTurnCondition.instance ); + ability.addEffect(new WishclawTalismanEffect()); ability.addCost(new TapSourceCost()); ability.addCost(new RemoveCountersSourceCost(CounterType.WISH.createInstance())); - ability.addHint(MyTurnHint.instance); this.addAbility(ability); } @@ -66,12 +64,9 @@ public final class WishclawTalisman extends CardImpl { class WishclawTalismanEffect extends OneShotEffect { - private static final Effect effect = new SearchLibraryPutInHandEffect(new TargetCardInLibrary(), false); - WishclawTalismanEffect() { super(Outcome.Benefit); - staticText = "Search your library for a card, put it into your hand, then shuffle. " + - "An opponent gains control of {this}"; + staticText = "An opponent gains control of {this}"; } private WishclawTalismanEffect(final WishclawTalismanEffect effect) { @@ -85,7 +80,6 @@ class WishclawTalismanEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - effect.apply(game, source); Player player = game.getPlayer(source.getControllerId()); if (player == null) { return false; diff --git a/Mage.Sets/src/mage/cards/w/WolfwillowHaven.java b/Mage.Sets/src/mage/cards/w/WolfwillowHaven.java index 532db353ad8..b36ba498e75 100644 --- a/Mage.Sets/src/mage/cards/w/WolfwillowHaven.java +++ b/Mage.Sets/src/mage/cards/w/WolfwillowHaven.java @@ -9,12 +9,14 @@ import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.mana.AddManaToManaPoolTargetControllerEffect; -import mage.abilities.hint.common.MyTurnHint; import mage.abilities.keyword.EnchantAbility; import mage.abilities.mana.EnchantedTappedTriggeredManaAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.CardType; +import mage.constants.ColoredManaSymbol; +import mage.constants.Outcome; +import mage.constants.SubType; import mage.game.permanent.token.WolfToken; import mage.target.TargetPermanent; import mage.target.common.TargetLandPermanent; @@ -45,11 +47,9 @@ public final class WolfwillowHaven extends CardImpl { // {4}{G}, Sacrifice Wolfwillow Haven: Create a 2/2 green Wolf creature token. Activate this ability only during your turn. ability = new ActivateIfConditionActivatedAbility( - Zone.BATTLEFIELD, new CreateTokenEffect(new WolfToken()), - new ManaCostsImpl<>("{4}{G}"), MyTurnCondition.instance + new CreateTokenEffect(new WolfToken()), new ManaCostsImpl<>("{4}{G}"), MyTurnCondition.instance ); ability.addCost(new SacrificeSourceCost()); - ability.addHint(MyTurnHint.instance); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/w/WuLongbowman.java b/Mage.Sets/src/mage/cards/w/WuLongbowman.java index 1f808131064..45addd2fd47 100644 --- a/Mage.Sets/src/mage/cards/w/WuLongbowman.java +++ b/Mage.Sets/src/mage/cards/w/WuLongbowman.java @@ -1,7 +1,5 @@ - package mage.cards.w; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.ActivateIfConditionActivatedAbility; @@ -12,17 +10,17 @@ 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 WuLongbowman extends CardImpl { public WuLongbowman(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.SOLDIER); this.subtype.add(SubType.ARCHER); @@ -30,8 +28,9 @@ public final class WuLongbowman extends CardImpl { this.toughness = new MageInt(1); // {tap}: Wu Longbowman 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); } diff --git a/Mage.Sets/src/mage/cards/x/XerexStrobeKnight.java b/Mage.Sets/src/mage/cards/x/XerexStrobeKnight.java index c97b78a4f0b..1139273654d 100644 --- a/Mage.Sets/src/mage/cards/x/XerexStrobeKnight.java +++ b/Mage.Sets/src/mage/cards/x/XerexStrobeKnight.java @@ -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 mage.game.Game; import mage.game.permanent.token.KnightWhiteBlueToken; import mage.watchers.common.CastSpellLastTurnWatcher; @@ -40,7 +39,7 @@ public final class XerexStrobeKnight extends CardImpl { // {T}: Create a 2/2 white and blue Knight creature token with vigilance. Activate only if you've cast two or more spells this turn. this.addAbility(new ActivateIfConditionActivatedAbility( - Zone.BATTLEFIELD, new CreateTokenEffect(new KnightWhiteBlueToken()), + new CreateTokenEffect(new KnightWhiteBlueToken()), new TapSourceCost(), XerexStrobeKnightCondition.instance )); } @@ -70,4 +69,4 @@ enum XerexStrobeKnightCondition implements Condition { public String toString() { return "you've cast two or more spells this turn"; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/x/XiahouDunTheOneEyed.java b/Mage.Sets/src/mage/cards/x/XiahouDunTheOneEyed.java index 960f837c52b..2d2c89ba9cb 100644 --- a/Mage.Sets/src/mage/cards/x/XiahouDunTheOneEyed.java +++ b/Mage.Sets/src/mage/cards/x/XiahouDunTheOneEyed.java @@ -44,7 +44,7 @@ public final class XiahouDunTheOneEyed extends CardImpl { this.addAbility(HorsemanshipAbility.getInstance()); // Sacrifice Xiahou Dun, the One-Eyed: Return target black card from your graveyard to your hand. Activate this ability only during your turn, before attackers are declared. - Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, + Ability ability = new ActivateIfConditionActivatedAbility( new ReturnFromGraveyardToHandTargetEffect(), new SacrificeSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance); ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/x/XunYuWeiAdvisor.java b/Mage.Sets/src/mage/cards/x/XunYuWeiAdvisor.java index 62ac471e703..6f705ae3957 100644 --- a/Mage.Sets/src/mage/cards/x/XunYuWeiAdvisor.java +++ b/Mage.Sets/src/mage/cards/x/XunYuWeiAdvisor.java @@ -1,7 +1,5 @@ - package mage.cards.x; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.ActivateIfConditionActivatedAbility; @@ -12,19 +10,18 @@ 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.TargetControlledCreaturePermanent; +import java.util.UUID; + /** - * * @author fireshoes */ public final class XunYuWeiAdvisor extends CardImpl { public XunYuWeiAdvisor(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{B}"); this.supertype.add(SuperType.LEGENDARY); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.ADVISOR); @@ -32,8 +29,10 @@ public final class XunYuWeiAdvisor extends CardImpl { this.toughness = new MageInt(1); // {tap}: Target creature you control gets +2/+0 until end of turn. Activate this ability only during your turn, before attackers are declared. - Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, - new BoostTargetEffect(2, 0, Duration.EndOfTurn), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance); + Ability ability = new ActivateIfConditionActivatedAbility( + new BoostTargetEffect(2, 0), new TapSourceCost(), + MyTurnBeforeAttackersDeclaredCondition.instance + ); ability.addTarget(new TargetControlledCreaturePermanent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/y/YesManPersonalSecuritron.java b/Mage.Sets/src/mage/cards/y/YesManPersonalSecuritron.java index 41b5136bea3..c2a3593240f 100644 --- a/Mage.Sets/src/mage/cards/y/YesManPersonalSecuritron.java +++ b/Mage.Sets/src/mage/cards/y/YesManPersonalSecuritron.java @@ -1,6 +1,5 @@ package mage.cards.y; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.ActivateIfConditionActivatedAbility; @@ -14,10 +13,11 @@ import mage.abilities.effects.common.CreateTokenTargetEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.TargetPlayerGainControlSourceEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect; -import mage.abilities.hint.common.MyTurnHint; -import mage.constants.*; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; import mage.counters.CounterType; import mage.game.Game; import mage.game.permanent.Permanent; @@ -25,30 +25,31 @@ import mage.game.permanent.token.SoldierToken; import mage.target.common.TargetOpponent; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** - * * @author Grath */ public final class YesManPersonalSecuritron extends CardImpl { public YesManPersonalSecuritron(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}{W}"); - + this.supertype.add(SuperType.LEGENDARY); this.subtype.add(SubType.ROBOT); this.power = new MageInt(2); this.toughness = new MageInt(2); // {T}: Target opponent gains control of Yes Man, Personal Securitron. When they do, you draw two cards and put a quest counter on Yes Man. Activate only during your turn. - Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, - new YesManPersonalSecuritronControlEffect(), new TapSourceCost(), MyTurnCondition.instance); + Ability ability = new ActivateIfConditionActivatedAbility( + new YesManPersonalSecuritronControlEffect(), + new TapSourceCost(), MyTurnCondition.instance + ); ability.addTarget(new TargetOpponent()); - ability.addHint(MyTurnHint.instance); this.addAbility(ability); // Wild Card -- When Yes Man leaves the battlefield, its owner creates a tapped 1/1 white Soldier creature token for each quest counter on it. - this.addAbility(new LeavesBattlefieldTriggeredAbility(new YesManPersonalSecuritronLeavesEffect(), false) - .withFlavorWord("Wild Card")); + this.addAbility(new LeavesBattlefieldTriggeredAbility(new YesManPersonalSecuritronLeavesEffect()).withFlavorWord("Wild Card")); } private YesManPersonalSecuritron(final YesManPersonalSecuritron card) { diff --git a/Mage.Sets/src/mage/cards/z/ZhalfirinDecoy.java b/Mage.Sets/src/mage/cards/z/ZhalfirinDecoy.java index 9b7aa396539..eb088f1ec36 100644 --- a/Mage.Sets/src/mage/cards/z/ZhalfirinDecoy.java +++ b/Mage.Sets/src/mage/cards/z/ZhalfirinDecoy.java @@ -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.target.common.TargetCreaturePermanent; import mage.watchers.common.CreatureEnteredControllerWatcher; @@ -32,8 +31,7 @@ public final class ZhalfirinDecoy extends CardImpl { // {T}: Tap target creature. Activate this ability only if you had a creature enter the battlefield under your control this turn. Ability ability = new ActivateIfConditionActivatedAbility( - Zone.BATTLEFIELD, new TapTargetEffect(), - new TapSourceCost(), ZhalfirinDecoyCondition.instance + new TapTargetEffect(), new TapSourceCost(), ZhalfirinDecoyCondition.instance ); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability, new CreatureEnteredControllerWatcher()); diff --git a/Mage.Sets/src/mage/cards/z/ZhugeJinWuStrategist.java b/Mage.Sets/src/mage/cards/z/ZhugeJinWuStrategist.java index ef546c171d6..e3ba7d435a0 100644 --- a/Mage.Sets/src/mage/cards/z/ZhugeJinWuStrategist.java +++ b/Mage.Sets/src/mage/cards/z/ZhugeJinWuStrategist.java @@ -1,7 +1,5 @@ - package mage.cards.z; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.ActivateIfConditionActivatedAbility; @@ -10,17 +8,21 @@ import mage.abilities.costs.common.TapSourceCost; import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect; 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.SuperType; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author fireshoes */ public final class ZhugeJinWuStrategist extends CardImpl { public ZhugeJinWuStrategist(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{U}"); this.supertype.add(SuperType.LEGENDARY); this.subtype.add(SubType.HUMAN, SubType.ADVISOR); @@ -28,8 +30,10 @@ public final class ZhugeJinWuStrategist extends CardImpl { this.toughness = new MageInt(1); // {tap}: Target creature can't be blocked this turn. Activate this ability only during your turn, before attackers are declared. - Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, - new CantBeBlockedTargetEffect(Duration.EndOfTurn), new TapSourceCost(), MyTurnBeforeAttackersDeclaredCondition.instance); + Ability ability = new ActivateIfConditionActivatedAbility( + new CantBeBlockedTargetEffect(Duration.EndOfTurn), new TapSourceCost(), + MyTurnBeforeAttackersDeclaredCondition.instance + ); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/z/ZuranEnchanter.java b/Mage.Sets/src/mage/cards/z/ZuranEnchanter.java index e9dccf2d273..c63633158a5 100644 --- a/Mage.Sets/src/mage/cards/z/ZuranEnchanter.java +++ b/Mage.Sets/src/mage/cards/z/ZuranEnchanter.java @@ -7,12 +7,10 @@ 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.SubType; -import mage.constants.Zone; import mage.target.TargetPlayer; import java.util.UUID; @@ -29,10 +27,11 @@ public final class ZuranEnchanter extends CardImpl { this.toughness = new MageInt(1); // {2}{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<>("{2}{B}"), MyTurnCondition.instance); + Ability ability = new ActivateIfConditionActivatedAbility( + new DiscardTargetEffect(1), new ManaCostsImpl<>("{2}{B}"), MyTurnCondition.instance + ); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetPlayer()); - ability.addHint(MyTurnHint.instance); this.addAbility(ability); }