[ONE] various text fixes

This commit is contained in:
theelk801 2023-04-24 20:12:20 -04:00
parent ed32ee554d
commit ff115cad48
48 changed files with 203 additions and 185 deletions

View file

@ -22,7 +22,7 @@ import java.util.UUID;
*/ */
public final class AgainstAllOdds extends CardImpl { public final class AgainstAllOdds extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent("artifact or creature card you control"); private static final FilterControlledPermanent filter = new FilterControlledPermanent("artifact or creature you control");
private static final FilterCard filter2 = new FilterCard("artifact or creature card with mana value 3 or less from your graveyard"); private static final FilterCard filter2 = new FilterCard("artifact or creature card with mana value 3 or less from your graveyard");
static { static {

View file

@ -21,18 +21,17 @@ import mage.target.TargetPermanent;
import java.util.UUID; import java.util.UUID;
/** /**
*
* @author AhmadYProjects * @author AhmadYProjects
*/ */
public final class AnnexSentry extends CardImpl { public final class AnnexSentry extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent("artifact or creature an opponent controls with cmc 3 or less"); private static final FilterPermanent filter = new FilterPermanent("artifact or creature an opponent controls with mana value 3 or less");
static { static {
filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN,4)); filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 4));
filter.add(Predicates.or filter.add(Predicates.or
(CardType.ARTIFACT.getPredicate(), (CardType.ARTIFACT.getPredicate(),
CardType.CREATURE.getPredicate())); CardType.CREATURE.getPredicate()));
filter.add(TargetController.OPPONENT.getControllerPredicate()); filter.add(TargetController.OPPONENT.getControllerPredicate());
} }

View file

@ -1,9 +1,5 @@
package mage.cards.a; package mage.cards.a;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
@ -16,18 +12,23 @@ import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.LoseGameSourceControllerEffect; import mage.abilities.effects.common.LoseGameSourceControllerEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.effects.common.counter.RemoveCounterSourceEffect; import mage.abilities.effects.common.counter.RemoveCounterSourceEffect;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.StaticFilters;
import mage.game.Controllable; import mage.game.Controllable;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
@ -64,7 +65,10 @@ public final class ArchfiendOfTheDross extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
// Whenever a creature an opponent controls dies, its controller loses 2 life. // Whenever a creature an opponent controls dies, its controller loses 2 life.
this.addAbility(new DiesCreatureTriggeredAbility(new ArchfiendOfTheDrossEffect(), false)); this.addAbility(new DiesCreatureTriggeredAbility(
new ArchfiendOfTheDrossEffect(), false,
StaticFilters.FILTER_OPPONENTS_PERMANENT_A_CREATURE
));
} }
private ArchfiendOfTheDross(final ArchfiendOfTheDross card) { private ArchfiendOfTheDross(final ArchfiendOfTheDross card) {

View file

@ -25,7 +25,7 @@ public final class BlazingCrescendo extends CardImpl {
// Exile the top card of your library. Until the end of your next turn, you may play that card. // Exile the top card of your library. Until the end of your next turn, you may play that card.
this.getSpellAbility().addEffect(new ExileTopXMayPlayUntilEndOfTurnEffect( this.getSpellAbility().addEffect(new ExileTopXMayPlayUntilEndOfTurnEffect(
1, false, Duration.UntilEndOfYourNextTurn 1, false, Duration.UntilEndOfYourNextTurn
)); ).concatBy("<br>"));
} }
private BlazingCrescendo(final BlazingCrescendo card) { private BlazingCrescendo(final BlazingCrescendo card) {

View file

@ -28,7 +28,8 @@ public final class BlueSunsTwilight extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{U}{U}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{U}{U}");
// Gain control of target creature with mana value X or less. If X is 5 or more, create a token that's a copy of that creature. // Gain control of target creature with mana value X or less. If X is 5 or more, create a token that's a copy of that creature.
this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.Custom, true)); this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.Custom, true)
.setText("gain control of target creature with mana value X or less"));
this.getSpellAbility().addEffect(new ConditionalOneShotEffect( this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
new CreateTokenCopyTargetEffect(), BlueSunsTwilightCondition.instance, new CreateTokenCopyTargetEffect(), BlueSunsTwilightCondition.instance,
"If X is 5 or more, create a token that's a copy of that creature" "If X is 5 or more, create a token that's a copy of that creature"

View file

@ -1,7 +1,5 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
@ -12,12 +10,14 @@ import mage.abilities.dynamicvalue.common.SourcePermanentPowerCount;
import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.counter.ProliferateEffect; import mage.abilities.effects.common.counter.ProliferateEffect;
import mage.constants.SubType;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType;
import mage.target.common.TargetAnyTarget; import mage.target.common.TargetAnyTarget;
import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
@ -40,7 +40,8 @@ public final class CacophonyScamp extends CardImpl {
), false)); ), false));
// When Cacophony Scamp dies, it deals damage equal to its power to any target. // When Cacophony Scamp dies, it deals damage equal to its power to any target.
Ability ability = new DiesSourceTriggeredAbility(new DamageTargetEffect(xValue, "it")); Ability ability = new DiesSourceTriggeredAbility(new DamageTargetEffect(xValue)
.setText("it deals damage equal to its power to any target"));
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -32,6 +32,7 @@ public final class CephalopodSentry extends CardImpl {
// Cephalopod Sentry's power is equal to the number of artifacts you control. // Cephalopod Sentry's power is equal to the number of artifacts you control.
this.addAbility(new SimpleStaticAbility( this.addAbility(new SimpleStaticAbility(
Zone.ALL, new SetBasePowerSourceEffect(ArtifactYouControlCount.instance) Zone.ALL, new SetBasePowerSourceEffect(ArtifactYouControlCount.instance)
.setText("{this}'s power is equal to the number of artifacts you control")
)); ));
} }

View file

@ -23,7 +23,8 @@ public final class ChargeOfTheMites extends CardImpl {
// Choose one-- // Choose one--
// * Charge of the Mites deals damage equal to the number of creatures you control to target creature or planeswalker. // * Charge of the Mites deals damage equal to the number of creatures you control to target creature or planeswalker.
this.getSpellAbility().addEffect(new DamageTargetEffect(CreaturesYouControlCount.instance)); this.getSpellAbility().addEffect(new DamageTargetEffect(CreaturesYouControlCount.instance)
.setText("{this} deals damage equal to the number of creatures you control to target creature or planeswalker"));
this.getSpellAbility().addTarget(new TargetCreatureOrPlaneswalker()); this.getSpellAbility().addTarget(new TargetCreatureOrPlaneswalker());
this.getSpellAbility().addHint(CreaturesYouControlHint.instance); this.getSpellAbility().addHint(CreaturesYouControlHint.instance);

View file

@ -24,7 +24,7 @@ import java.util.UUID;
*/ */
public final class CinderslashRavager extends CardImpl { public final class CinderslashRavager extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent("permanent you control with an oil counter on it"); private static final FilterControlledPermanent filter = new FilterControlledPermanent("permanent you control with oil counters on it");
static { static {
filter.add(CounterType.OIL.getPredicate()); filter.add(CounterType.OIL.getPredicate());
@ -48,7 +48,7 @@ public final class CinderslashRavager extends CardImpl {
// When Cinderslash Ravager enters the battlefield, it deals 1 damage to each creature your opponents control. // When Cinderslash Ravager enters the battlefield, it deals 1 damage to each creature your opponents control.
this.addAbility(new EntersBattlefieldTriggeredAbility(new DamageAllEffect( this.addAbility(new EntersBattlefieldTriggeredAbility(new DamageAllEffect(
1, "it", StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES 1, "it", StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE
))); )));
} }

View file

@ -30,7 +30,7 @@ public final class CutthroatCenturion extends CardImpl {
// Sacrifice another artifact or creature: Cutthroat Centurion gets +2/+2 until end of turn. Activate only once each turn. // Sacrifice another artifact or creature: Cutthroat Centurion gets +2/+2 until end of turn. Activate only once each turn.
this.addAbility(new LimitedTimesPerTurnActivatedAbility( this.addAbility(new LimitedTimesPerTurnActivatedAbility(
Zone.BATTLEFIELD, new BoostSourceEffect(2, 2, Duration.EndOfTurn), Zone.BATTLEFIELD, new BoostSourceEffect(2, 2, Duration.EndOfTurn),
new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_ANOTHER_ARTIFACT_OR_CREATURE) new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_ANOTHER_ARTIFACT_OR_CREATURE_SHORT_TEXT)
)); ));
} }

View file

@ -1,14 +1,11 @@
package mage.cards.e; package mage.cards.e;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentHasCounterCondition;
import mage.abilities.condition.common.SourceHasCounterCondition; import mage.abilities.condition.common.SourceHasCounterCondition;
import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.decorator.ConditionalOneShotEffect;
@ -18,13 +15,15 @@ import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.effects.common.counter.RemoveCounterSourceEffect; import mage.abilities.effects.common.counter.RemoveCounterSourceEffect;
import mage.abilities.keyword.HexproofAbility; import mage.abilities.keyword.HexproofAbility;
import mage.abilities.keyword.TrampleAbility; import mage.abilities.keyword.TrampleAbility;
import mage.constants.SubType;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.counters.CounterType; import mage.counters.CounterType;
import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
@ -51,8 +50,8 @@ public final class EvolvedSpinoderm extends CardImpl {
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
new GainAbilitySourceEffect(HexproofAbility.getInstance()), new GainAbilitySourceEffect(HexproofAbility.getInstance()),
new GainAbilitySourceEffect(TrampleAbility.getInstance()), new GainAbilitySourceEffect(TrampleAbility.getInstance()),
condition1, "{this} has trample as long as it was two " + condition1, "{this} has trample as long as it has two " +
"or fewer oil counters on it, Otherwise, it has hexproof" "or fewer oil counters on it. Otherwise, it has hexproof"
))); )));
// At the beginning of your upkeep, remove an oil counter from Evolved Spinoderm. Then if it has no oil counters on it, sacrifice it. // At the beginning of your upkeep, remove an oil counter from Evolved Spinoderm. Then if it has no oil counters on it, sacrifice it.

View file

@ -15,6 +15,7 @@ import mage.game.permanent.token.custom.CreatureToken;
import java.util.UUID; import java.util.UUID;
public class EyeOfMalcator extends CardImpl { public class EyeOfMalcator extends CardImpl {
public EyeOfMalcator(UUID ownerId, CardSetInfo setInfo) { public EyeOfMalcator(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}{U}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}{U}");
@ -23,12 +24,14 @@ public class EyeOfMalcator extends CardImpl {
//Whenever another artifact enters the battlefield under your control, Eye of Malcator becomes a 4/4 Phyrexian //Whenever another artifact enters the battlefield under your control, Eye of Malcator becomes a 4/4 Phyrexian
//Eye artifact creature until end of turn. //Eye artifact creature until end of turn.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new BecomesCreatureSourceEffect( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
new CreatureToken( new BecomesCreatureSourceEffect(
4, 4, "4/4 Phyrexian Eye artifact creature", SubType.PHYREXIAN, SubType.EYE new CreatureToken(
).withType(CardType.ARTIFACT), "", Duration.EndOfTurn) 4, 4, "4/4 Phyrexian Eye artifact creature", SubType.PHYREXIAN, SubType.EYE
.setText("{this} becomes a 4/4 Phyrexian Eye artifact creature until end of turn"), ).withType(CardType.ARTIFACT), "", Duration.EndOfTurn
StaticFilters.FILTER_CONTROLLED_ANOTHER_ARTIFACT)); ).setText("{this} becomes a 4/4 Phyrexian Eye artifact creature until end of turn"),
StaticFilters.FILTER_CONTROLLED_ANOTHER_ARTIFACT
).setTriggerPhrase("Whenever another artifact enters the battlefield under your control, "));
} }
private EyeOfMalcator(final EyeOfMalcator card) { private EyeOfMalcator(final EyeOfMalcator card) {

View file

@ -1,7 +1,5 @@
package mage.cards.e; package mage.cards.e;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.ProliferatedControllerTriggeredAbility; import mage.abilities.common.ProliferatedControllerTriggeredAbility;
@ -9,11 +7,13 @@ import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.counter.ProliferateEffect; import mage.abilities.effects.common.counter.ProliferateEffect;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801

View file

@ -1,7 +1,5 @@
package mage.cards.f; package mage.cards.f;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
@ -15,6 +13,8 @@ import mage.counters.CounterType;
import mage.game.Game; import mage.game.Game;
import mage.players.Player; import mage.players.Player;
import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
@ -46,7 +46,7 @@ class FeedTheInfectionEffect extends OneShotEffect {
FeedTheInfectionEffect() { FeedTheInfectionEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "<br>" + AbilityWord.CORRUPTED.formatWord() + staticText = "<br>" + AbilityWord.CORRUPTED.formatWord() +
"Each opponent with three or more poison counters loses 3 life"; "Each opponent who has three or more poison counters loses 3 life";
} }
private FeedTheInfectionEffect(final FeedTheInfectionEffect effect) { private FeedTheInfectionEffect(final FeedTheInfectionEffect effect) {

View file

@ -31,7 +31,7 @@ public final class FleshlessGladiator extends CardImpl {
// Corrupted -- {2}{B}: Return Fleshless Gladiator from your graveyard to the battlefield tapped. You lose 1 life. Activate only if an opponent has three or more poison counters. // Corrupted -- {2}{B}: Return Fleshless Gladiator from your graveyard to the battlefield tapped. You lose 1 life. Activate only if an opponent has three or more poison counters.
Ability ability = new ConditionalActivatedAbility( Ability ability = new ConditionalActivatedAbility(
Zone.GRAVEYARD, new ReturnSourceFromGraveyardToBattlefieldEffect(true), Zone.GRAVEYARD, new ReturnSourceFromGraveyardToBattlefieldEffect(true, false),
new ManaCostsImpl<>("{2}{B}"), CorruptedCondition.instance new ManaCostsImpl<>("{2}{B}"), CorruptedCondition.instance
); );
ability.addEffect(new LoseLifeSourceControllerEffect(1)); ability.addEffect(new LoseLifeSourceControllerEffect(1));

View file

@ -2,17 +2,12 @@ package mage.cards.f;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.PutIntoGraveFromBattlefieldAllTriggeredAbility; import mage.abilities.common.PutIntoGraveFromBattlefieldAllTriggeredAbility;
import mage.abilities.common.delayed.ReflexiveTriggeredAbility; import mage.abilities.common.delayed.ReflexiveTriggeredAbility;
import mage.abilities.costs.common.PayLifeCost;
import mage.abilities.costs.common.RemoveCountersSourceCost; import mage.abilities.costs.common.RemoveCountersSourceCost;
import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.DoWhenCostPaid; import mage.abilities.effects.common.DoWhenCostPaid;
import mage.abilities.effects.common.combat.CantBlockTargetEffect; import mage.abilities.effects.common.combat.CantBlockTargetEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.cards.Card;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -45,8 +40,9 @@ public class ForgehammerCenturion extends CardImpl {
new CantBlockTargetEffect(Duration.EndOfTurn), false new CantBlockTargetEffect(Duration.EndOfTurn), false
); );
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(new AttacksTriggeredAbility(new DoWhenCostPaid(ability, this.addAbility(new AttacksTriggeredAbility(new DoWhenCostPaid(
new RemoveCountersSourceCost(CounterType.OIL.createInstance(2)), "Remove 2 oil counters?" ability, new RemoveCountersSourceCost(CounterType.OIL.createInstance(2))
.setText("remove two oil counters from it"), "Remove 2 oil counters?"
))); )));
} }

View file

@ -1,7 +1,5 @@
package mage.cards.f; package mage.cards.f;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateAsSorceryActivatedAbility; import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
@ -9,16 +7,15 @@ import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.target.common.TargetControlledCreaturePermanent; import mage.filter.StaticFilters;
import mage.target.common.TargetCreaturePermanent; import mage.target.TargetPermanent;
import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
@ -41,7 +38,7 @@ public final class FurnaceSkullbomb extends CardImpl {
); );
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
ability.addEffect(new DrawCardSourceControllerEffect(1)); ability.addEffect(new DrawCardSourceControllerEffect(1));
ability.addTarget(new TargetControlledCreaturePermanent()); ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT_OR_CREATURE));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -17,7 +17,6 @@ import mage.target.TargetPermanent;
import java.util.UUID; import java.util.UUID;
/** /**
*
* @author AhmadYProjects * @author AhmadYProjects
*/ */
public final class GleefulDemolition extends CardImpl { public final class GleefulDemolition extends CardImpl {
@ -25,12 +24,9 @@ public final class GleefulDemolition extends CardImpl {
public GleefulDemolition(UUID ownerId, CardSetInfo setInfo) { public GleefulDemolition(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{R}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{R}");
// Destroy target artifact. If you controlled that artifact, creature three 1/1 red Phyrexian Goblin creature tokens. // Destroy target artifact. If you controlled that artifact, creature three 1/1 red Phyrexian Goblin creature tokens.
this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT)); this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT));
this.getSpellAbility().addEffect(new GleefulDemolitionEffect()); this.getSpellAbility().addEffect(new GleefulDemolitionEffect());
} }
private GleefulDemolition(final GleefulDemolition card) { private GleefulDemolition(final GleefulDemolition card) {
@ -44,10 +40,10 @@ public final class GleefulDemolition extends CardImpl {
} }
class GleefulDemolitionEffect extends OneShotEffect { class GleefulDemolitionEffect extends OneShotEffect {
GleefulDemolitionEffect(){ GleefulDemolitionEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "destroy target artifact. " + staticText = "destroy target artifact. " +
"if you controlled that artifact, create three 1/1 red Phyrexian Goblin creature tokens"; "If you controlled that artifact, create three 1/1 red Phyrexian Goblin creature tokens";
} }
private GleefulDemolitionEffect(final GleefulDemolitionEffect effect) { private GleefulDemolitionEffect(final GleefulDemolitionEffect effect) {
@ -55,24 +51,22 @@ class GleefulDemolitionEffect extends OneShotEffect {
} }
@Override @Override
public GleefulDemolitionEffect copy(){ public GleefulDemolitionEffect copy() {
return new GleefulDemolitionEffect(this); return new GleefulDemolitionEffect(this);
} }
@Override @Override
public boolean apply(Game game, Ability source){ public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId()); Player player = game.getPlayer(source.getControllerId());
Permanent permanent = game.getPermanent(targetPointer.getFirst(game,source)); Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
if (permanent == null || player == null) {
if (
permanent == null || player == null) {
return false; return false;
} }
boolean isMine = permanent.isControlledBy(source.getControllerId()); boolean isMine = permanent.isControlledBy(source.getControllerId());
permanent.destroy(source, game, false); permanent.destroy(source, game, false);
if (isMine) { if (isMine) {
Token token = new PhyrexianGoblinToken(); Token token = new PhyrexianGoblinToken();
token.putOntoBattlefield(3,game,source); token.putOntoBattlefield(3, game, source);
} }
return true; return true;

View file

@ -1,7 +1,5 @@
package mage.cards.g; package mage.cards.g;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@ -12,6 +10,7 @@ import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.keyword.ToxicAbility; import mage.abilities.keyword.ToxicAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.TargetController; import mage.constants.TargetController;
@ -19,12 +18,13 @@ import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.game.permanent.token.PhyrexianBeastToxicToken; import mage.game.permanent.token.PhyrexianBeastToxicToken;
import mage.game.permanent.token.PhyrexianGolemToken;
import mage.players.Player; import mage.players.Player;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetControlledCreaturePermanent;
import mage.util.CardUtil; import mage.util.CardUtil;
import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
@ -42,8 +42,8 @@ public final class GoliathHatchery extends CardImpl {
this.addAbility(new ConditionalInterveningIfTriggeredAbility( this.addAbility(new ConditionalInterveningIfTriggeredAbility(
new BeginningOfUpkeepTriggeredAbility( new BeginningOfUpkeepTriggeredAbility(
new GoliathHatcheryEffect(), TargetController.YOU, false new GoliathHatcheryEffect(), TargetController.YOU, false
), CorruptedCondition.instance, null ).setAbilityWord(AbilityWord.CORRUPTED), CorruptedCondition.instance, null
)); ).addHint(CorruptedCondition.getHint()));
} }
private GoliathHatchery(final GoliathHatchery card) { private GoliathHatchery(final GoliathHatchery card) {

View file

@ -20,7 +20,7 @@ public final class HazardousBlast extends CardImpl {
// Hazardous Blast deals 1 damage to each creature your opponents control. Creatures your opponents control can't block this turn. // Hazardous Blast deals 1 damage to each creature your opponents control. Creatures your opponents control can't block this turn.
this.getSpellAbility().addEffect(new DamageAllEffect( this.getSpellAbility().addEffect(new DamageAllEffect(
1, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE 1, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES
)); ));
this.getSpellAbility().addEffect(new CantBlockAllEffect( this.getSpellAbility().addEffect(new CantBlockAllEffect(
StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, Duration.EndOfTurn StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, Duration.EndOfTurn

View file

@ -14,7 +14,6 @@ import mage.target.common.TargetCreaturePermanent;
import java.util.UUID; import java.util.UUID;
/** /**
*
* @author AhmadYProjects * @author AhmadYProjects
*/ */
public final class HexgoldSlash extends CardImpl { public final class HexgoldSlash extends CardImpl {
@ -22,7 +21,6 @@ public final class HexgoldSlash extends CardImpl {
public HexgoldSlash(UUID ownerId, CardSetInfo setInfo) { public HexgoldSlash(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{R}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{R}");
// Hexgold Slash deals 2 damage to target creature. If that creature has toxic, Hexgold Slash deals 4 damage to that creature instead. // Hexgold Slash deals 2 damage to target creature. If that creature has toxic, Hexgold Slash deals 4 damage to that creature instead.
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addEffect(new HexgoldSlashEffect()); this.getSpellAbility().addEffect(new HexgoldSlashEffect());
@ -38,30 +36,30 @@ public final class HexgoldSlash extends CardImpl {
} }
} }
class HexgoldSlashEffect extends OneShotEffect{ class HexgoldSlashEffect extends OneShotEffect {
public HexgoldSlashEffect(){ public HexgoldSlashEffect() {
super(Outcome.Damage); super(Outcome.Damage);
staticText = "{this} deals 2 damage to target creature. If that creature has toxic, {this} deals 4 damage instead"; staticText = "{this} deals 2 damage to target creature. If that creature has toxic, " +
"{this} deals 4 damage to that creature instead";
} }
public HexgoldSlashEffect(final HexgoldSlashEffect effect){ public HexgoldSlashEffect(final HexgoldSlashEffect effect) {
super(effect); super(effect);
} }
@Override @Override
public HexgoldSlashEffect copy(){ public HexgoldSlashEffect copy() {
return new HexgoldSlashEffect(); return new HexgoldSlashEffect();
} }
@Override @Override
public boolean apply(Game game, Ability source){ public boolean apply(Game game, Ability source) {
Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source)); Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source));
if (permanent != null){ if (permanent != null) {
if (permanent.getAbilities(game).containsClass(ToxicAbility.class)) { if (permanent.getAbilities(game).containsClass(ToxicAbility.class)) {
permanent.damage(4,source,game); permanent.damage(4, source, game);
} } else {
else{ permanent.damage(2, source, game);
permanent.damage(2,source,game);
} }
return true; return true;
} }

View file

@ -28,7 +28,7 @@ import mage.filter.predicate.permanent.EquippedPredicate;
*/ */
public final class JorKadeenFirstGoldwarden extends CardImpl { public final class JorKadeenFirstGoldwarden extends CardImpl {
private static final FilterPermanent filter = new FilterControlledCreaturePermanent(); private static final FilterPermanent filter = new FilterControlledCreaturePermanent("equipped creatures you control");
private static final FilterPermanent filter2 = new FilterPermanent(); private static final FilterPermanent filter2 = new FilterPermanent();
static { static {

View file

@ -50,7 +50,7 @@ public final class KaitoDancingShadow extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
// +1: Up to one target creature can't attack or block until your next turn. // +1: Up to one target creature can't attack or block until your next turn.
Ability KaitoCantAttackOrBlockAbility = new LoyaltyAbility(new CantAttackTargetEffect(Duration.UntilYourNextTurn).setText("Up to one target creature can't attack "), 1); Ability KaitoCantAttackOrBlockAbility = new LoyaltyAbility(new CantAttackTargetEffect(Duration.UntilYourNextTurn).setText("Up to one target creature can't attack"), 1);
KaitoCantAttackOrBlockAbility.addEffect(new CantBlockTargetEffect(Duration.UntilYourNextTurn).setText("or block until your next turn")); KaitoCantAttackOrBlockAbility.addEffect(new CantBlockTargetEffect(Duration.UntilYourNextTurn).setText("or block until your next turn"));
KaitoCantAttackOrBlockAbility.addTarget(new TargetPermanent(0, 1, StaticFilters.FILTER_PERMANENT_CREATURE)); KaitoCantAttackOrBlockAbility.addTarget(new TargetPermanent(0, 1, StaticFilters.FILTER_PERMANENT_CREATURE));
this.addAbility(KaitoCantAttackOrBlockAbility); this.addAbility(KaitoCantAttackOrBlockAbility);

View file

@ -1,7 +1,5 @@
package mage.cards.k; package mage.cards.k;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldThisOrAnotherTriggeredAbility; import mage.abilities.common.EntersBattlefieldThisOrAnotherTriggeredAbility;
@ -11,9 +9,9 @@ import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.constants.*;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
@ -23,6 +21,8 @@ import mage.game.permanent.Permanent;
import mage.game.permanent.token.CatToken; import mage.game.permanent.token.CatToken;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
@ -47,7 +47,7 @@ public final class KembaKhaEnduring extends CardImpl {
// Whenever Kemba, Kha Enduring or another Cat enters the battlefield under your control, attach up to one target Equipment you control to that creature. // Whenever Kemba, Kha Enduring or another Cat enters the battlefield under your control, attach up to one target Equipment you control to that creature.
Ability ability = new EntersBattlefieldThisOrAnotherTriggeredAbility( Ability ability = new EntersBattlefieldThisOrAnotherTriggeredAbility(
new KembaKhaEnduringEffect(), filter, true, true new KembaKhaEnduringEffect(), filter, false, true
); );
ability.addTarget(new TargetPermanent(0, 1, filter2)); ability.addTarget(new TargetPermanent(0, 1, filter2));
this.addAbility(ability); this.addAbility(ability);

View file

@ -58,7 +58,7 @@ class KethekCrucibleGoliathEffect extends OneShotEffect {
KethekCrucibleGoliathEffect() { KethekCrucibleGoliathEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "you may sacrifice another creature. " + staticText = "you may sacrifice another creature. " +
"If you do, reveal cards from the top of your library" + "If you do, reveal cards from the top of your library " +
"until you reveal a nonlegendary creature card with lesser mana value" + "until you reveal a nonlegendary creature card with lesser mana value" +
", put it onto the battlefield, then put the rest on the bottom of your library in a random order."; ", put it onto the battlefield, then put the rest on the bottom of your library in a random order.";
} }
@ -97,7 +97,7 @@ class KethekCrucibleGoliathEffect extends OneShotEffect {
filterCreatureCard.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, xValue)); filterCreatureCard.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, xValue));
//put it onto the battlefield, then put the rest on the bottom of your library in a random order. //put it onto the battlefield, then put the rest on the bottom of your library in a random order.
RevealCardsFromLibraryUntilEffect effect = new RevealCardsFromLibraryUntilEffect(filterCreatureCard, Zone.BATTLEFIELD, Zone.LIBRARY); RevealCardsFromLibraryUntilEffect effect = new RevealCardsFromLibraryUntilEffect(filterCreatureCard, Zone.BATTLEFIELD, Zone.LIBRARY);
effect.apply(game,source); effect.apply(game, source);
return true; return true;
} }
} }

View file

@ -39,7 +39,7 @@ public final class LatticeBladeMantis extends CardImpl {
// Whenever Lattice-Blade Mantis attacks, you may remove an oil counter from it. If you do, untap it and it gets +1/+1 until end of turn. // Whenever Lattice-Blade Mantis attacks, you may remove an oil counter from it. If you do, untap it and it gets +1/+1 until end of turn.
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid( this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(
new UntapSourceEffect().setText("untap it"), new UntapSourceEffect().setText("untap it"),
new RemoveCountersSourceCost(CounterType.OIL.createInstance()) new RemoveCountersSourceCost(CounterType.OIL.createInstance()).setText("remove an oil counter from it")
).addEffect(new BoostSourceEffect(1, 1, Duration.EndOfTurn, "and it")))); ).addEffect(new BoostSourceEffect(1, 1, Duration.EndOfTurn, "and it"))));
} }

View file

@ -14,7 +14,10 @@ import mage.abilities.effects.common.DamageMultiEffect;
import mage.abilities.keyword.CompleatedAbility; import mage.abilities.keyword.CompleatedAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.token.PhyrexianBeastToxicToken; import mage.game.permanent.token.PhyrexianBeastToxicToken;
import mage.players.Player; import mage.players.Player;
@ -39,19 +42,19 @@ public class LukkaBoundToRuin extends CardImpl {
this.addAbility(CompleatedAbility.getInstance()); this.addAbility(CompleatedAbility.getInstance());
// +1: Add {R}{G}. Spend this mana only to cast creature spells or activate abilities of creatures. // +1: Add {R}{G}. Spend this mana only to cast creature spells or activate abilities of creatures.
Ability ability = new LoyaltyAbility(new LukkaBoundToRuinManaEffect(),1); Ability ability = new LoyaltyAbility(new LukkaBoundToRuinManaEffect(), 1);
this.addAbility(ability); this.addAbility(ability);
// 1: Create a 3/3 green Phyrexian Beast creature token with toxic 1. // 1: Create a 3/3 green Phyrexian Beast creature token with toxic 1.
ability = new LoyaltyAbility(new CreateTokenEffect(new PhyrexianBeastToxicToken()),-1); ability = new LoyaltyAbility(new CreateTokenEffect(new PhyrexianBeastToxicToken()), -1);
this.addAbility(ability); this.addAbility(ability);
// 4: Lukka deals X damage divided as you choose among any number of target creatures and/or planeswalkers, // 4: Lukka deals X damage divided as you choose among any number of target creatures and/or planeswalkers,
// where X is the greatest power among creatures you controlled as you activated this ability. // where X is the greatest power among creatures you controlled as you activated this ability.
DynamicValue xValue = GreatestPowerAmongControlledCreaturesValue.instance; DynamicValue xValue = GreatestPowerAmongControlledCreaturesValue.instance;
DamageMultiEffect damageMultiEffect = new DamageMultiEffect(xValue); DamageMultiEffect damageMultiEffect = new DamageMultiEffect(xValue);
damageMultiEffect.setText("Lukka deals X damage divided as you choose" + damageMultiEffect.setText("Lukka deals X damage divided as you choose " +
" among any number of target creatures and/or planeswalkers," + "among any number of target creatures and/or planeswalkers, " +
"where X is the greatest power among creatures you controlled as you activated this ability."); "where X is the greatest power among creatures you controlled as you activated this ability.");
ability = new LoyaltyAbility(damageMultiEffect, -4); ability = new LoyaltyAbility(damageMultiEffect, -4);
ability.setTargetAdjuster(LukkaBoundToRuinAdjuster.instance); ability.setTargetAdjuster(LukkaBoundToRuinAdjuster.instance);
@ -99,7 +102,8 @@ class LukkaBoundToRuinManaEffect extends OneShotEffect {
class LukkaBoundToRuinConditionalMana extends ConditionalMana { class LukkaBoundToRuinConditionalMana extends ConditionalMana {
// Add {R}{G} // Add {R}{G}
private static Mana mana = new Mana(0,0,0,1,1,0,0,0); private static Mana mana = new Mana(0, 0, 0, 1, 1, 0, 0, 0);
public LukkaBoundToRuinConditionalMana() { public LukkaBoundToRuinConditionalMana() {
super(mana); super(mana);
addCondition(LukkaBoundToRuinManaCondition.instance); addCondition(LukkaBoundToRuinManaCondition.instance);
@ -130,11 +134,10 @@ enum LukkaBoundToRuinAdjuster implements TargetAdjuster {
public void adjustTargets(Ability ability, Game game) { public void adjustTargets(Ability ability, Game game) {
// Maximum targets is equal to the damage - as each target need to be assigned at least 1 damage // Maximum targets is equal to the damage - as each target need to be assigned at least 1 damage
ability.getTargets().clear(); ability.getTargets().clear();
int xValue = GreatestPowerAmongControlledCreaturesValue.instance.calculate(game,ability,null); int xValue = GreatestPowerAmongControlledCreaturesValue.instance.calculate(game, ability, null);
TargetCreatureOrPlaneswalkerAmount targetCreatureOrPlaneswalkerAmount = new TargetCreatureOrPlaneswalkerAmount(xValue); TargetCreatureOrPlaneswalkerAmount targetCreatureOrPlaneswalkerAmount = new TargetCreatureOrPlaneswalkerAmount(xValue);
targetCreatureOrPlaneswalkerAmount.setMinNumberOfTargets(0); targetCreatureOrPlaneswalkerAmount.setMinNumberOfTargets(0);
targetCreatureOrPlaneswalkerAmount.setMaxNumberOfTargets(xValue); targetCreatureOrPlaneswalkerAmount.setMaxNumberOfTargets(xValue);
ability.addTarget(targetCreatureOrPlaneswalkerAmount); ability.addTarget(targetCreatureOrPlaneswalkerAmount);
} }
} }

View file

@ -1,7 +1,5 @@
package mage.cards.m; package mage.cards.m;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ActivateAsSorceryActivatedAbility; import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
@ -15,7 +13,9 @@ import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetControlledCreaturePermanent;
import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
@ -35,14 +35,14 @@ public final class MazeSkullbomb extends CardImpl {
// {2}{G}, Sacrifice Maze Skullbomb: Target creature gets +3/+3 and gains trample until end of turn. Draw a card. Activate only as a sorcery. // {2}{G}, Sacrifice Maze Skullbomb: Target creature gets +3/+3 and gains trample until end of turn. Draw a card. Activate only as a sorcery.
ability = new ActivateAsSorceryActivatedAbility( ability = new ActivateAsSorceryActivatedAbility(
new BoostTargetEffect(3, 3) new BoostTargetEffect(3, 3)
.setText("target creature gets +3/+3"), .setText("target creature you control gets +3/+3"),
new ManaCostsImpl<>("{2}{G}") new ManaCostsImpl<>("{2}{G}")
); );
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
ability.addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance()) ability.addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance())
.setText("and gains trample until end of turn")); .setText("and gains trample until end of turn"));
ability.addEffect(new DrawCardSourceControllerEffect(1)); ability.addEffect(new DrawCardSourceControllerEffect(1));
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetControlledCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,7 +1,5 @@
package mage.cards.m; package mage.cards.m;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.common.SpellCastControllerTriggeredAbility;
@ -11,13 +9,15 @@ import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.CantBeBlockedSourceAbility; import mage.abilities.keyword.CantBeBlockedSourceAbility;
import mage.constants.SubType;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
@ -44,7 +44,7 @@ public final class MercurialSpelldancer extends CardImpl {
this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility( this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(
new DoIfCostPaid( new DoIfCostPaid(
new CreateDelayedTriggeredAbilityEffect(new CopyNextSpellDelayedTriggeredAbility()), new CreateDelayedTriggeredAbilityEffect(new CopyNextSpellDelayedTriggeredAbility()),
new RemoveCountersSourceCost(CounterType.OIL.createInstance(2)) new RemoveCountersSourceCost(CounterType.OIL.createInstance(2)).setText("remove two oil counters from it")
), false ), false
)); ));
} }

View file

@ -2,7 +2,8 @@ package mage.cards.n;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility; import mage.abilities.LoyaltyAbility;
import mage.abilities.effects.*; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.RestrictionEffect;
import mage.abilities.effects.common.CreateTokenCopyTargetEffect; import mage.abilities.effects.common.CreateTokenCopyTargetEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.combat.AttacksIfAbleTargetEffect; import mage.abilities.effects.common.combat.AttacksIfAbleTargetEffect;
@ -31,6 +32,16 @@ import java.util.UUID;
*/ */
public final class NahiriTheUnforgiving extends CardImpl { public final class NahiriTheUnforgiving extends CardImpl {
private static final FilterCard filter = new FilterCard("Equipment or creature with lesser manavalue than Nahiri's loyalty");
{
filter.add(Predicates.or(
CardType.CREATURE.getPredicate(),
SubType.EQUIPMENT.getPredicate()
));
filter.add(NahiriLoyaltyPredicate.instance);
}
public NahiriTheUnforgiving(UUID ownerId, CardSetInfo setInfo) { public NahiriTheUnforgiving(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{1}{R}{R/W/P}{W}"); super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{1}{R}{R/W/P}{W}");
this.addSuperType(SuperType.LEGENDARY); this.addSuperType(SuperType.LEGENDARY);
@ -45,7 +56,7 @@ public final class NahiriTheUnforgiving extends CardImpl {
LoyaltyAbility ability1 = new LoyaltyAbility(new AttacksIfAbleTargetEffect(Duration.UntilYourNextTurn) LoyaltyAbility ability1 = new LoyaltyAbility(new AttacksIfAbleTargetEffect(Duration.UntilYourNextTurn)
.setText("Until your next turn, up to one target creature attacks"), 1); .setText("Until your next turn, up to one target creature attacks"), 1);
ability1.addEffect(new NahiriTheUnforgivingRestrictionEffect()); ability1.addEffect(new NahiriTheUnforgivingRestrictionEffect());
ability1.addTarget(new TargetCreaturePermanent(0,1)); ability1.addTarget(new TargetCreaturePermanent(0, 1));
this.addAbility(ability1); this.addAbility(ability1);
// +1: Discard a card, then draw a card. // +1: Discard a card, then draw a card.
@ -56,9 +67,6 @@ public final class NahiriTheUnforgiving extends CardImpl {
// 0: Exile target creature or Equipment card with mana value less than Nahiri's loyalty from your graveyard. // 0: Exile target creature or Equipment card with mana value less than Nahiri's loyalty from your graveyard.
// Create a token that's a copy of it. That token gains haste. Exile it at the beginning of the next end step. // Create a token that's a copy of it. That token gains haste. Exile it at the beginning of the next end step.
LoyaltyAbility ability3 = new LoyaltyAbility(new NahiriTheUnforgivingTokenEffect(), 0); LoyaltyAbility ability3 = new LoyaltyAbility(new NahiriTheUnforgivingTokenEffect(), 0);
FilterCard filter = new FilterCard("Equipment or Creature with lesser manavalue than Nahiri's loyalty");
filter.add(Predicates.or(CardType.CREATURE.getPredicate(), SubType.EQUIPMENT.getPredicate()));
filter.add(NahiriLoyaltyPredicate.instance);
ability3.addTarget(new TargetCardInYourGraveyard(filter)); ability3.addTarget(new TargetCardInYourGraveyard(filter));
this.addAbility(ability3); this.addAbility(ability3);
} }
@ -80,7 +88,7 @@ enum NahiriLoyaltyPredicate implements ObjectSourcePlayerPredicate<Card> {
public boolean apply(ObjectSourcePlayer<Card> input, Game game) { public boolean apply(ObjectSourcePlayer<Card> input, Game game) {
//mana value less than Nahiri's loyalty //mana value less than Nahiri's loyalty
int manaValue = input.getObject().getManaValue(); int manaValue = input.getObject().getManaValue();
Card card = (Card) input.getSource().getSourceObject(game); Card card = (Card) input.getSource().getSourceObject(game);
int loyalty = card.getCounters(game).getCount(CounterType.LOYALTY); int loyalty = card.getCounters(game).getCount(CounterType.LOYALTY);
return manaValue < loyalty; return manaValue < loyalty;
} }
@ -118,7 +126,7 @@ class NahiriTheUnforgivingTokenEffect extends OneShotEffect {
NahiriTheUnforgivingTokenEffect() { NahiriTheUnforgivingTokenEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "Exile target creature or Equipment card with mana value less than Nahiri's loyalty from your graveyard." + this.staticText = "Exile target creature or Equipment card with mana value less than Nahiri's loyalty from your graveyard. " +
"Create a token that's a copy of it. That token gains haste. Exile it at the beginning of the next end step."; "Create a token that's a copy of it. That token gains haste. Exile it at the beginning of the next end step.";
} }

View file

@ -24,7 +24,7 @@ import java.util.UUID;
*/ */
public final class NahirisSacrifice extends CardImpl { public final class NahirisSacrifice extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent(" an artifact or creature"); private static final FilterControlledPermanent filter = new FilterControlledPermanent("an artifact or creature");
static { static {
filter.add(Predicates.or(CardType.ARTIFACT.getPredicate(), CardType.CREATURE.getPredicate())); filter.add(Predicates.or(CardType.ARTIFACT.getPredicate(), CardType.CREATURE.getPredicate()));
@ -68,7 +68,7 @@ class SacrificeXManaValueCost extends VariableCostImpl implements SacrificeCost
public SacrificeXManaValueCost(FilterControlledPermanent filter, boolean useAsAdditionalCost) { public SacrificeXManaValueCost(FilterControlledPermanent filter, boolean useAsAdditionalCost) {
super(useAsAdditionalCost ? VariableCostType.ADDITIONAL : VariableCostType.NORMAL, super(useAsAdditionalCost ? VariableCostType.ADDITIONAL : VariableCostType.NORMAL,
filter.getMessage() + " with manavalue X to sacrifice"); filter.getMessage() + " with manavalue X to sacrifice");
this.text = (useAsAdditionalCost ? " sacrifice" : "Sacrifice ") + filter.getMessage() + " with mana value " +xText; this.text = (useAsAdditionalCost ? "sacrifice " : "Sacrifice ") + filter.getMessage() + " with mana value " +xText;
this.filter = filter; this.filter = filter;
} }

View file

@ -1,23 +1,23 @@
package mage.cards.n; package mage.cards.n;
import java.util.UUID;
import mage.abilities.common.DiesAttachedTriggeredAbility; import mage.abilities.common.DiesAttachedTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.ReturnToBattlefieldUnderYourControlAttachedEffect; import mage.abilities.effects.common.ReturnToBattlefieldUnderYourControlAttachedEffect;
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.keyword.ToxicAbility;
import mage.constants.AttachmentType;
import mage.constants.SubType;
import mage.abilities.effects.common.AttachEffect;
import mage.constants.Outcome;
import mage.target.TargetPermanent;
import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.EnchantAbility;
import mage.abilities.keyword.ToxicAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.AttachmentType;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.target.TargetPermanent;
import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetControlledCreaturePermanent;
import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
@ -36,7 +36,7 @@ public final class NecrogenCommunion extends CardImpl {
// Enchanted creature has toxic 2. // Enchanted creature has toxic 2.
this.addAbility(new SimpleStaticAbility( this.addAbility(new SimpleStaticAbility(
new GainAbilityAttachedEffect(new ToxicAbility(2), AttachmentType.EQUIPMENT) new GainAbilityAttachedEffect(new ToxicAbility(2), AttachmentType.AURA)
)); ));
// When enchanted creature dies, return that card to the battlefield under your control. // When enchanted creature dies, return that card to the battlefield under your control.

View file

@ -1,28 +1,26 @@
package mage.cards.n; package mage.cards.n;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.DealCombatDamageControlledTriggeredAbility;
import mage.abilities.common.DealsDamageToAPlayerAllTriggeredAbility; import mage.abilities.common.DealsDamageToAPlayerAllTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
import mage.abilities.effects.common.counter.AddPoisonCounterTargetEffect; import mage.abilities.effects.common.counter.AddPoisonCounterTargetEffect;
import mage.abilities.keyword.DeathtouchAbility; import mage.abilities.keyword.DeathtouchAbility;
import mage.constants.SetTargetPointer;
import mage.constants.SubType;
import mage.abilities.keyword.ToxicAbility; import mage.abilities.keyword.ToxicAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Zone; import mage.constants.SetTargetPointer;
import mage.constants.SubType;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.AbilityPredicate; import mage.filter.predicate.mageobject.AbilityPredicate;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
@ -56,7 +54,9 @@ public final class NecrogenRotpriest extends CardImpl {
// {1}{B}{G}: Target creature you control with toxic gains deathtouch until end of turn. // {1}{B}{G}: Target creature you control with toxic gains deathtouch until end of turn.
Ability ability = new SimpleActivatedAbility( Ability ability = new SimpleActivatedAbility(
new GainAbilityTargetEffect(DeathtouchAbility.getInstance()), new ManaCostsImpl<>("{1}{B}{G}") new GainAbilityTargetEffect(DeathtouchAbility.getInstance())
.setText("target creature you control with toxic gains deathtouch until end of turn"),
new ManaCostsImpl<>("{1}{B}{G}")
); );
ability.addTarget(new TargetPermanent(filter)); ability.addTarget(new TargetPermanent(filter));
this.addAbility(ability); this.addAbility(ability);

View file

@ -44,7 +44,9 @@ public final class Necrosquito extends CardImpl {
)); ));
// Necrosquito gets +1/+1 for each oil counter on it. // Necrosquito gets +1/+1 for each oil counter on it.
this.addAbility(new SimpleStaticAbility(new BoostSourceEffect(xValue, xValue, Duration.WhileOnBattlefield))); this.addAbility(new SimpleStaticAbility(new BoostSourceEffect(
xValue, xValue, Duration.WhileOnBattlefield
).setText("{this} gets +1/+1 for each oil counter on it")));
// Whenever another creature or artifact you control is put into a graveyard from the battlefield, put an oil counter on Necrosquito. // Whenever another creature or artifact you control is put into a graveyard from the battlefield, put an oil counter on Necrosquito.
this.addAbility(new PutIntoGraveFromBattlefieldAllTriggeredAbility( this.addAbility(new PutIntoGraveFromBattlefieldAllTriggeredAbility(

View file

@ -1,29 +1,29 @@
package mage.cards.n; package mage.cards.n;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.abilities.keyword.ToxicAbility; import mage.abilities.keyword.ToxicAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.common.FilterCreatureCard; import mage.filter.common.FilterCreatureCard;
import mage.filter.predicate.mageobject.ManaValuePredicate; import mage.filter.predicate.mageobject.ManaValuePredicate;
import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
public final class NimraiserPaladin extends CardImpl { public final class NimraiserPaladin extends CardImpl {
private static final FilterCard filter private static final FilterCard filter
= new FilterCreatureCard("creature with mana value 3 or less from your graveyard"); = new FilterCreatureCard("creature card with mana value 3 or less from your graveyard");
static { static {
filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 4)); filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 4));

View file

@ -50,7 +50,7 @@ public final class OilGorgerTroll extends CardImpl {
Ability ability = new EntersBattlefieldTriggeredAbility(new GainLifeEffect(3)); Ability ability = new EntersBattlefieldTriggeredAbility(new GainLifeEffect(3));
ability.addEffect(new ConditionalOneShotEffect( ability.addEffect(new ConditionalOneShotEffect(
new DrawCardSourceControllerEffect(1), condition, new DrawCardSourceControllerEffect(1), condition,
"then if you control a permanent with an oil counter on it, draw a card" "Then if you control a permanent with an oil counter on it, draw a card"
)); ));
this.addAbility(ability.addHint(hint)); this.addAbility(ability.addHint(hint));
} }

View file

@ -1,7 +1,5 @@
package mage.cards.p; package mage.cards.p;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
@ -11,18 +9,21 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.TargetController; import mage.constants.TargetController;
import java.util.UUID;
/** /**
*
* @author Loki * @author Loki
*/ */
public final class PhyrexianArena extends CardImpl { public final class PhyrexianArena extends CardImpl {
public PhyrexianArena(UUID ownerId, CardSetInfo setInfo) { public PhyrexianArena(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{B}{B}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}{B}");
// At the beginning of your upkeep, you draw a card and you lose 1 life. // At the beginning of your upkeep, you draw a card and you lose 1 life.
Ability ability = new BeginningOfUpkeepTriggeredAbility(new DrawCardSourceControllerEffect(1), TargetController.YOU, false); Ability ability = new BeginningOfUpkeepTriggeredAbility(
ability.addEffect(new LoseLifeSourceControllerEffect(1)); new DrawCardSourceControllerEffect(1, "you"), TargetController.YOU, false
);
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -44,7 +44,7 @@ class PhyrexianAtlasEffect extends OneShotEffect {
PhyrexianAtlasEffect() { PhyrexianAtlasEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "each opponent with three or more poison counters loses 1 life"; staticText = "each opponent who has three or more poison counters loses 1 life";
} }
private PhyrexianAtlasEffect(final PhyrexianAtlasEffect effect) { private PhyrexianAtlasEffect(final PhyrexianAtlasEffect effect) {

View file

@ -88,6 +88,6 @@ class PhyrexianObliteratorTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Whenever a source deals damage to {this}, that source's controller sacrifices that many permanents"; return "Whenever a source deals damage to {this}, that source's controller sacrifices that many permanents.";
} }
} }

View file

@ -40,7 +40,7 @@ public final class RebelSalvo extends CardImpl {
this.getSpellAbility().addEffect(new DamageTargetEffect(5)); this.getSpellAbility().addEffect(new DamageTargetEffect(5));
this.getSpellAbility().addTarget(new TargetCreatureOrPlaneswalker()); this.getSpellAbility().addTarget(new TargetCreatureOrPlaneswalker());
this.getSpellAbility().addEffect(new LoseAbilityTargetEffect(IndestructibleAbility.getInstance()) this.getSpellAbility().addEffect(new LoseAbilityTargetEffect(IndestructibleAbility.getInstance())
.setText("that permanent loses indestructible unil end of turn")); .setText("that permanent loses indestructible until end of turn"));
} }
private RebelSalvo(final RebelSalvo card) { private RebelSalvo(final RebelSalvo card) {

View file

@ -1,7 +1,5 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
@ -11,14 +9,16 @@ import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.effects.keyword.ScryEffect; import mage.abilities.effects.keyword.ScryEffect;
import mage.constants.SubType;
import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
@ -46,7 +46,7 @@ public final class SerumSovereign extends CardImpl {
new DrawCardSourceControllerEffect(1), new ManaCostsImpl<>("{U}") new DrawCardSourceControllerEffect(1), new ManaCostsImpl<>("{U}")
); );
ability.addCost(new RemoveCountersSourceCost(CounterType.OIL.createInstance())); ability.addCost(new RemoveCountersSourceCost(CounterType.OIL.createInstance()));
ability.addEffect(new ScryEffect(2)); ability.addEffect(new ScryEffect(2).concatBy(", then"));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,23 +1,18 @@
package mage.cards.t; package mage.cards.t;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.CompositeCost; import mage.abilities.costs.CompositeCost;
import mage.abilities.costs.common.RemoveCounterCost; import mage.abilities.costs.common.RemoveCounterCost;
import mage.abilities.costs.common.RemoveVariableCountersTargetCost;
import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.DestroyAllEffect; import mage.abilities.effects.common.DestroyAllEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.constants.SuperType;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SuperType;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
@ -29,6 +24,10 @@ import mage.game.permanent.Permanent;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.target.common.TargetAnyTarget; import mage.target.common.TargetAnyTarget;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
@ -61,7 +60,7 @@ public final class TheFiligreeSylex extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
// {T}, Remove ten oil counters from among permanents you control and sacrifice The Filigree Sylex: It deals 10 damage to any target. // {T}, Remove ten oil counters from among permanents you control and sacrifice The Filigree Sylex: It deals 10 damage to any target.
ability = new SimpleActivatedAbility(new DamageTargetEffect(10), new TapSourceCost()); ability = new SimpleActivatedAbility(new DamageTargetEffect(10, "it"), new TapSourceCost());
ability.addCost(new CompositeCost( ability.addCost(new CompositeCost(
new RemoveCounterCost(new TargetPermanent( new RemoveCounterCost(new TargetPermanent(
0, Integer.MAX_VALUE, 0, Integer.MAX_VALUE,

View file

@ -25,12 +25,11 @@ import mage.target.common.TargetCreaturePermanent;
import java.util.UUID; import java.util.UUID;
/** /**
*
* @author AhmadYProjects * @author AhmadYProjects
*/ */
public final class TheSeedcore extends CardImpl { public final class TheSeedcore extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("1/1 creature");
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("1/1 creature");
static { static {
filter.add(new PowerPredicate(ComparisonType.EQUAL_TO, 1)); filter.add(new PowerPredicate(ComparisonType.EQUAL_TO, 1));
@ -51,8 +50,8 @@ public final class TheSeedcore extends CardImpl {
Zone.BATTLEFIELD, Zone.BATTLEFIELD,
new BoostTargetEffect(2, 1, Duration.EndOfTurn), new BoostTargetEffect(2, 1, Duration.EndOfTurn),
new TapSourceCost(), new TapSourceCost(),
CorruptedCondition.instance, CorruptedCondition.instance
"{T}: Target 1/1 creature gets +2/+1 until end of turn. Activate only if an opponent has three or more poison counters.").setAbilityWord(AbilityWord.CORRUPTED).addHint(CorruptedCondition.getHint()); ).setAbilityWord(AbilityWord.CORRUPTED).addHint(CorruptedCondition.getHint());
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(filter));
this.addAbility(ability); this.addAbility(ability);
} }
@ -66,6 +65,7 @@ public final class TheSeedcore extends CardImpl {
return new TheSeedcore(this); return new TheSeedcore(this);
} }
} }
class TheSeedcoreManaBuilder extends ConditionalManaBuilder { class TheSeedcoreManaBuilder extends ConditionalManaBuilder {
@Override @Override
@ -76,7 +76,7 @@ class TheSeedcoreManaBuilder extends ConditionalManaBuilder {
@Override @Override
public String getRule() { public String getRule() {
return "Spend this mana only to cast a Phyrexian creature spell."; return "Spend this mana only to cast Phyrexian creature spells.";
} }
} }
@ -84,7 +84,7 @@ class TheSeedcoreConditionalMana extends ConditionalMana {
TheSeedcoreConditionalMana(Mana mana) { TheSeedcoreConditionalMana(Mana mana) {
super(mana); super(mana);
staticText = "Spend this mana only to cast a Phyrexian creature spell."; staticText = "Spend this mana only to cast Phyrexian creature spells.";
addCondition(new mage.cards.t.TheSeedcoreManaCondition()); addCondition(new mage.cards.t.TheSeedcoreManaCondition());
} }
} }

View file

@ -1,7 +1,5 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID;
import mage.abilities.dynamicvalue.common.ManacostVariableValue; import mage.abilities.dynamicvalue.common.ManacostVariableValue;
import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
@ -13,6 +11,8 @@ import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetControlledCreaturePermanent;
import java.util.UUID;
/** /**
* @author TheElk801 * @author TheElk801
*/ */
@ -24,7 +24,7 @@ public final class TyvarsStand extends CardImpl {
// Target creature you control gets +X/+X and gains hexproof and indestructible until end of turn. // Target creature you control gets +X/+X and gains hexproof and indestructible until end of turn.
this.getSpellAbility().addEffect(new BoostTargetEffect( this.getSpellAbility().addEffect(new BoostTargetEffect(
ManacostVariableValue.REGULAR, ManacostVariableValue.REGULAR, Duration.EndOfTurn ManacostVariableValue.REGULAR, ManacostVariableValue.REGULAR, Duration.EndOfTurn
)); ).setText("target creature you control gets +X/+X"));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HexproofAbility.getInstance()) this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HexproofAbility.getInstance())
.setText("and gains hexproof")); .setText("and gains hexproof"));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(IndestructibleAbility.getInstance()) this.getSpellAbility().addEffect(new GainAbilityTargetEffect(IndestructibleAbility.getInstance())

View file

@ -48,13 +48,14 @@ public final class UnctusGrandMetatect extends CardImpl {
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect( this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
new BecomesTappedSourceTriggeredAbility( new BecomesTappedSourceTriggeredAbility(
new DrawDiscardControllerEffect(1, 1) new DrawDiscardControllerEffect(1, 1)
), Duration.WhileOnBattlefield, filter, true ).setTriggerPhrase("Whenever this creature becomes tapped, "),
Duration.WhileOnBattlefield, filter, true
))); )));
// Other artifact creatures you control get +1/+1. // Other artifact creatures you control get +1/+1.
this.addAbility(new SimpleStaticAbility(new BoostControlledEffect( this.addAbility(new SimpleStaticAbility(new BoostControlledEffect(
1, 1, Duration.WhileOnBattlefield, 1, 1, Duration.WhileOnBattlefield,
StaticFilters.FILTER_PERMANENT_ARTIFACT_CREATURE, true StaticFilters.FILTER_PERMANENTS_ARTIFACT_CREATURE, true
))); )));
// {U/P}: Until end of turn, target creature you control becomes a blue artifact in addition to its other colors and types. Activate only as a sorcery. // {U/P}: Until end of turn, target creature you control becomes a blue artifact in addition to its other colors and types. Activate only as a sorcery.

View file

@ -5,7 +5,8 @@ import mage.abilities.effects.common.counter.ProliferateEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.filter.StaticFilters; import mage.filter.FilterCard;
import mage.filter.common.FilterCreatureCard;
import mage.target.common.TargetCardInGraveyard; import mage.target.common.TargetCardInGraveyard;
import java.util.UUID; import java.util.UUID;
@ -15,12 +16,14 @@ import java.util.UUID;
*/ */
public final class VatEmergence extends CardImpl { public final class VatEmergence extends CardImpl {
private static final FilterCard filter = new FilterCreatureCard("creature card from a graveyard");
public VatEmergence(UUID ownerId, CardSetInfo setInfo) { public VatEmergence(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{B}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{B}");
// Put target creature card from a graveyard onto the battlefield under your control. Proliferate. // Put target creature card from a graveyard onto the battlefield under your control. Proliferate.
this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect()); this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect());
this.getSpellAbility().addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE)); this.getSpellAbility().addTarget(new TargetCardInGraveyard(filter));
this.getSpellAbility().addEffect(new ProliferateEffect()); this.getSpellAbility().addEffect(new ProliferateEffect());
} }

View file

@ -58,8 +58,8 @@ public class VerifyCardDataTest {
private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class); private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class);
private static final String FULL_ABILITIES_CHECK_SET_CODE = "ONE"; // check all abilities and output cards with wrong abilities texts;
private static final boolean CHECK_ONLY_ABILITIES_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages private static final boolean CHECK_ONLY_ABILITIES_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages
private static final String FULL_ABILITIES_CHECK_SET_CODE = "MOC"; // check all abilities and output cards with wrong abilities texts;
private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run

View file

@ -4,6 +4,7 @@ import mage.MageObject;
import mage.abilities.effects.Effect; import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.DoIfCostPaid;
import mage.constants.AbilityType; import mage.constants.AbilityType;
import mage.constants.AbilityWord;
import mage.constants.Zone; import mage.constants.Zone;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
@ -330,6 +331,12 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge
return optional; return optional;
} }
@Override
public TriggeredAbilityImpl setAbilityWord(AbilityWord abilityWord) {
super.setAbilityWord(abilityWord);
return this;
}
public static boolean isInUseableZoneDiesTrigger(TriggeredAbility source, GameEvent event, Game game) { public static boolean isInUseableZoneDiesTrigger(TriggeredAbility source, GameEvent event, Game game) {
// Get the source permanent of the ability // Get the source permanent of the ability
MageObject sourceObject = null; MageObject sourceObject = null;