Fix text [CHK] [BOK] [SOK] (#10355)

* Fix text: duplicate ("you control") in Champion ability

* New static filter "artifacts and enchantments"

* Text fixes [CHK] [BOK] [SOK]

* Fix Genju text without breaking the effect this time
This commit is contained in:
xenohedron 2023-06-02 12:33:48 +03:00 committed by GitHub
parent a7c3cb9797
commit 5c8b5f23bb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
48 changed files with 91 additions and 113 deletions

View file

@ -17,7 +17,7 @@ import mage.filter.common.FilterCreaturePermanent;
*/ */
public final class CallToGlory extends CardImpl { public final class CallToGlory extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Samurai"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Samurai creatures");
static { static {
filter.add(SubType.SAMURAI.getPredicate()); filter.add(SubType.SAMURAI.getPredicate());
@ -26,8 +26,8 @@ public final class CallToGlory extends CardImpl {
public CallToGlory(UUID ownerId, CardSetInfo setInfo) { public CallToGlory(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{W}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{W}");
//Untap all creatures you control. Samurai creatures you control get +1/+1 until end of turn. // Untap all creatures you control. Samurai creatures you control get +1/+1 until end of turn.
this.getSpellAbility().addEffect(new UntapAllEffect(StaticFilters.FILTER_CONTROLLED_CREATURE)); this.getSpellAbility().addEffect(new UntapAllEffect(StaticFilters.FILTER_CONTROLLED_CREATURES));
this.getSpellAbility().addEffect(new BoostControlledEffect(1, 1, Duration.EndOfTurn, filter, false)); this.getSpellAbility().addEffect(new BoostControlledEffect(1, 1, Duration.EndOfTurn, filter, false));
} }

View file

@ -7,7 +7,6 @@ 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.StaticFilters;
import mage.filter.common.FilterArtifactOrEnchantmentPermanent;
/** /**
* *
@ -15,9 +14,6 @@ import mage.filter.common.FilterArtifactOrEnchantmentPermanent;
*/ */
public final class CleansingNova extends CardImpl { public final class CleansingNova extends CardImpl {
private static final FilterArtifactOrEnchantmentPermanent filter
= new FilterArtifactOrEnchantmentPermanent("artifacts and enchantments");
public CleansingNova(UUID ownerId, CardSetInfo setInfo) { public CleansingNova(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{W}{W}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{W}{W}");
@ -26,7 +22,7 @@ public final class CleansingNova extends CardImpl {
this.getSpellAbility().addEffect(new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_CREATURES)); this.getSpellAbility().addEffect(new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_CREATURES));
// Destroy all artifacts and enchantments. // Destroy all artifacts and enchantments.
Mode mode = new Mode(new DestroyAllEffect(filter)); Mode mode = new Mode(new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_ARTIFACTS_AND_ENCHANTMENTS));
this.getSpellAbility().getModes().addMode(mode); this.getSpellAbility().getModes().addMode(mode);
} }

View file

@ -10,6 +10,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterArtifactOrEnchantmentPermanent; import mage.filter.common.FilterArtifactOrEnchantmentPermanent;
import mage.filter.predicate.permanent.ControllerIdPredicate; import mage.filter.predicate.permanent.ControllerIdPredicate;
import mage.game.Game; import mage.game.Game;
@ -25,9 +26,6 @@ import java.util.UUID;
*/ */
public final class DismantlingWave extends CardImpl { public final class DismantlingWave extends CardImpl {
private static final FilterPermanent filter
= new FilterArtifactOrEnchantmentPermanent("artifacts and enchantments");
public DismantlingWave(UUID ownerId, CardSetInfo setInfo) { public DismantlingWave(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{W}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{W}");
@ -41,7 +39,7 @@ public final class DismantlingWave extends CardImpl {
this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{6}{W}{W}"))); this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{6}{W}{W}")));
// When you cycle Dismantling Wave, destroy all artifacts and enchantments. // When you cycle Dismantling Wave, destroy all artifacts and enchantments.
this.addAbility(new CycleTriggeredAbility(new DestroyAllEffect(filter))); this.addAbility(new CycleTriggeredAbility(new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_ARTIFACTS_AND_ENCHANTMENTS)));
} }
private DismantlingWave(final DismantlingWave card) { private DismantlingWave(final DismantlingWave card) {

View file

@ -10,7 +10,6 @@ import mage.constants.CardType;
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;
import mage.game.events.GameEvent.EventType;
import mage.players.Player; import mage.players.Player;
import mage.target.targetpointer.FixedTarget; import mage.target.targetpointer.FixedTarget;
@ -79,6 +78,6 @@ class EbonyOwlNetsukeTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "At the beginning of each opponent's upkeep, if that player has seven or more cards in hand, {this} deals 4 damage to that player"; return "At the beginning of each opponent's upkeep, if that player has seven or more cards in hand, {this} deals 4 damage to that player.";
} }
} }

View file

@ -19,7 +19,7 @@ public final class EnshrinedMemories extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{G}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{G}");
// Reveal the top X cards of your library. Put all creature cards revealed this way into your hand and the rest on the bottom of your library in any order. // Reveal the top X cards of your library. Put all creature cards revealed this way into your hand and the rest on the bottom of your library in any order.
this.getSpellAbility().addEffect(new RevealLibraryPutIntoHandEffect(ManacostVariableValue.REGULAR, StaticFilters.FILTER_CARD_CREATURE, Zone.LIBRARY, true)); this.getSpellAbility().addEffect(new RevealLibraryPutIntoHandEffect(ManacostVariableValue.REGULAR, StaticFilters.FILTER_CARD_CREATURES, Zone.LIBRARY, true));
} }
private EnshrinedMemories(final EnshrinedMemories card) { private EnshrinedMemories(final EnshrinedMemories card) {

View file

@ -6,7 +6,7 @@ import mage.abilities.effects.common.ExileAllEffect;
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.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
/** /**
* *
@ -18,7 +18,7 @@ public final class FinalJudgment extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{W}{W}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{W}{W}");
// Exile all creatures. // Exile all creatures.
this.getSpellAbility().addEffect(new ExileAllEffect(new FilterCreaturePermanent())); this.getSpellAbility().addEffect(new ExileAllEffect(StaticFilters.FILTER_PERMANENT_CREATURES));
} }
private FinalJudgment(final FinalJudgment card) { private FinalJudgment(final FinalJudgment card) {

View file

@ -44,7 +44,7 @@ class FlamesOfTheBloodHandReplacementEffect extends ReplacementEffectImpl {
public FlamesOfTheBloodHandReplacementEffect() { public FlamesOfTheBloodHandReplacementEffect() {
super(Duration.EndOfTurn, Outcome.Benefit); super(Duration.EndOfTurn, Outcome.Benefit);
staticText = "If that player would gain life this turn, that player gains no life instead"; staticText = "If that player or that planeswalker's controller would gain life this turn, that player gains no life instead";
} }
public FlamesOfTheBloodHandReplacementEffect(final FlamesOfTheBloodHandReplacementEffect effect) { public FlamesOfTheBloodHandReplacementEffect(final FlamesOfTheBloodHandReplacementEffect effect) {

View file

@ -12,8 +12,7 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.FilterPermanent; import mage.filter.StaticFilters;
import mage.filter.predicate.Predicates;
/** /**
* *
@ -21,14 +20,6 @@ import mage.filter.predicate.Predicates;
*/ */
public final class FountainWatch extends CardImpl { public final class FountainWatch extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent("Artifacts and Enchantments");
static {
filter.add(Predicates.or(
CardType.ARTIFACT.getPredicate(),
CardType.ENCHANTMENT.getPredicate()));
}
public FountainWatch(UUID ownerId, CardSetInfo setInfo) { public FountainWatch(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}{W}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}{W}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
@ -37,7 +28,7 @@ public final class FountainWatch extends CardImpl {
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
// Artifacts and enchantments you control have shroud. // Artifacts and enchantments you control have shroud.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(ShroudAbility.getInstance(), Duration.WhileOnBattlefield, filter, false))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(ShroudAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_ARTIFACTS_AND_ENCHANTMENTS, false)));
} }
private FountainWatch(final FountainWatch card) { private FountainWatch(final FountainWatch card) {

View file

@ -7,6 +7,7 @@ import mage.abilities.Ability;
import mage.abilities.common.DiesAttachedTriggeredAbility; import mage.abilities.common.DiesAttachedTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.effects.common.ReturnToHandSourceEffect;
import mage.abilities.effects.common.continuous.BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect; import mage.abilities.effects.common.continuous.BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect;
@ -44,7 +45,9 @@ public final class GenjuOfTheFalls extends CardImpl {
this.addAbility(ability2); this.addAbility(ability2);
// When enchanted Island is put into a graveyard, you may return Genju of the Falls from your graveyard to your hand. TargetPermanent auraTarget = new TargetLandPermanent(filter); // When enchanted Island is put into a graveyard, you may return Genju of the Falls from your graveyard to your hand. TargetPermanent auraTarget = new TargetLandPermanent(filter);
Ability ability3 = new DiesAttachedTriggeredAbility(new ReturnToHandSourceEffect(false, true), "enchanted Island", true, false); Effect effect = new ReturnToHandSourceEffect(false, true);
effect.setText("you may return {this} from your graveyard to your hand");
Ability ability3 = new DiesAttachedTriggeredAbility(effect, "enchanted Island", true, false);
this.addAbility(ability3); this.addAbility(ability3);
} }

View file

@ -8,6 +8,7 @@ import mage.abilities.common.DiesAttachedTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
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.Effect;
import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.effects.common.ReturnToHandSourceEffect;
import mage.abilities.effects.common.continuous.BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect; import mage.abilities.effects.common.continuous.BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect;
@ -45,7 +46,9 @@ public final class GenjuOfTheFens extends CardImpl {
this.addAbility(ability2); this.addAbility(ability2);
// When enchanted Swamp is put into a graveyard, you may return Genju of the Fens from your graveyard to your hand. // When enchanted Swamp is put into a graveyard, you may return Genju of the Fens from your graveyard to your hand.
Ability ability3 = new DiesAttachedTriggeredAbility(new ReturnToHandSourceEffect(false, true), "enchanted Swamp", true, false); Effect effect = new ReturnToHandSourceEffect(false, true);
effect.setText("you may return {this} from your graveyard to your hand");
Ability ability3 = new DiesAttachedTriggeredAbility(effect, "enchanted Swamp", true, false);
this.addAbility(ability3); this.addAbility(ability3);
} }

View file

@ -51,7 +51,9 @@ public final class GenjuOfTheFields extends CardImpl {
this.addAbility(ability2); this.addAbility(ability2);
// When enchanted Plains is put into a graveyard, you may return Genju of the Fields from your graveyard to your hand. // When enchanted Plains is put into a graveyard, you may return Genju of the Fields from your graveyard to your hand.
Ability ability3 = new DiesAttachedTriggeredAbility(new ReturnToHandSourceEffect(false, true), "enchanted Plains", true, false); Effect effect2 = new ReturnToHandSourceEffect(false, true);
effect2.setText("you may return {this} from your graveyard to your hand");
Ability ability3 = new DiesAttachedTriggeredAbility(effect2, "enchanted Plains", true, false);
this.addAbility(ability3); this.addAbility(ability3);
} }

View file

@ -7,6 +7,7 @@ import mage.abilities.Ability;
import mage.abilities.common.DiesAttachedTriggeredAbility; import mage.abilities.common.DiesAttachedTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.effects.common.ReturnToHandSourceEffect;
import mage.abilities.effects.common.continuous.BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect; import mage.abilities.effects.common.continuous.BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect;
@ -42,7 +43,9 @@ public final class GenjuOfTheRealm extends CardImpl {
this.addAbility(ability2); this.addAbility(ability2);
// When enchanted land is put into a graveyard, you may return Genju of the Realm from your graveyard to your hand. // When enchanted land is put into a graveyard, you may return Genju of the Realm from your graveyard to your hand.
Ability ability3 = new DiesAttachedTriggeredAbility(new ReturnToHandSourceEffect(false, true), "enchanted land", true, false); Effect effect = new ReturnToHandSourceEffect(false, true);
effect.setText("you may return {this} from your graveyard to your hand");
Ability ability3 = new DiesAttachedTriggeredAbility(effect, "enchanted land", true, false);
this.addAbility(ability3); this.addAbility(ability3);
} }

View file

@ -7,6 +7,7 @@ import mage.abilities.Ability;
import mage.abilities.common.DiesAttachedTriggeredAbility; import mage.abilities.common.DiesAttachedTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.effects.common.ReturnToHandSourceEffect;
import mage.abilities.effects.common.continuous.BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect; import mage.abilities.effects.common.continuous.BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect;
@ -43,7 +44,9 @@ public final class GenjuOfTheSpires extends CardImpl {
this.addAbility(ability2); this.addAbility(ability2);
// When enchanted Mountain is put into a graveyard, you may return Genju of the Spires from your graveyard to your hand. // When enchanted Mountain is put into a graveyard, you may return Genju of the Spires from your graveyard to your hand.
Ability ability3 = new DiesAttachedTriggeredAbility(new ReturnToHandSourceEffect(false, true), "enchanted Mountain", true, false); Effect effect = new ReturnToHandSourceEffect(false, true);
effect.setText("you may return {this} from your graveyard to your hand");
Ability ability3 = new DiesAttachedTriggeredAbility(effect, "enchanted Mountain", true, false);
this.addAbility(ability3); this.addAbility(ability3);
} }

View file

@ -28,7 +28,7 @@ public final class Glitterfang extends CardImpl {
// Haste // Haste
this.addAbility(HasteAbility.getInstance()); this.addAbility(HasteAbility.getInstance());
// At the beginning of the end step, return Glitterfang to its owner's hand. // At the beginning of the end step, return Glitterfang to its owner's hand.
this.addAbility(new BeginningOfEndStepTriggeredAbility(new ReturnToHandSourceEffect(true), TargetController.ANY, false)); this.addAbility(new BeginningOfEndStepTriggeredAbility(new ReturnToHandSourceEffect(true), TargetController.NEXT, false));
} }
private Glitterfang(final Glitterfang card) { private Glitterfang(final Glitterfang card) {

View file

@ -23,7 +23,7 @@ public final class HanabiBlast extends CardImpl {
this.getSpellAbility().addEffect(new DamageTargetEffect(2)); this.getSpellAbility().addEffect(new DamageTargetEffect(2));
this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addTarget(new TargetAnyTarget());
this.getSpellAbility().addEffect(ReturnToHandSpellEffect.getInstance()); this.getSpellAbility().addEffect(ReturnToHandSpellEffect.getInstance());
this.getSpellAbility().addEffect(new DiscardControllerEffect(1, true)); this.getSpellAbility().addEffect(new DiscardControllerEffect(1, true).concatBy(", then"));
} }
public HanabiBlast (final HanabiBlast card) { public HanabiBlast (final HanabiBlast card) {

View file

@ -40,7 +40,7 @@ public final class HeedTheMists extends CardImpl {
public HeedTheMistsEffect() { public HeedTheMistsEffect() {
super(Outcome.DrawCard); super(Outcome.DrawCard);
staticText = "Mill a card, then draw cards equal to that card's mana value"; staticText = "Mill a card, then draw cards equal to the milled card's mana value";
} }
public HeedTheMistsEffect(HeedTheMistsEffect effect) { public HeedTheMistsEffect(HeedTheMistsEffect effect) {
@ -49,7 +49,6 @@ public final class HeedTheMists extends CardImpl {
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
boolean result = false;
Player controller = game.getPlayer(source.getControllerId()); Player controller = game.getPlayer(source.getControllerId());
int totalCMC = controller int totalCMC = controller
.millCards(1, source, game) .millCards(1, source, game)

View file

@ -23,9 +23,11 @@ import mage.target.common.TargetControlledCreaturePermanent;
public final class IizukaTheRuthless extends CardImpl { public final class IizukaTheRuthless extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Samurai"); private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Samurai");
private static final FilterControlledCreaturePermanent filter2 = new FilterControlledCreaturePermanent("Samurai creatures");
static { static {
filter.add(SubType.SAMURAI.getPredicate()); filter.add(SubType.SAMURAI.getPredicate());
filter2.add(SubType.SAMURAI.getPredicate());
} }
public IizukaTheRuthless(UUID ownerId, CardSetInfo setInfo) { public IizukaTheRuthless(UUID ownerId, CardSetInfo setInfo) {
@ -38,7 +40,7 @@ public final class IizukaTheRuthless extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
this.addAbility(new BushidoAbility(2)); this.addAbility(new BushidoAbility(2));
// {2}{R}, Sacrifice a Samurai: Samurai creatures you control gain double strike until end of turn. // {2}{R}, Sacrifice a Samurai: Samurai creatures you control gain double strike until end of turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn, filter, false), new ManaCostsImpl<>("{2}{R}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn, filter2, false), new ManaCostsImpl<>("{2}{R}"));
ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(1, 1, filter, true))); ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(1, 1, filter, true)));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -11,8 +11,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterPermanent; import mage.filter.StaticFilters;
import mage.filter.predicate.Predicates;
/** /**
* *
@ -20,14 +19,6 @@ import mage.filter.predicate.Predicates;
*/ */
public final class KalemnesCaptain extends CardImpl { public final class KalemnesCaptain extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent("artifacts and enchantments");
static {
filter.add(Predicates.or(
CardType.ARTIFACT.getPredicate(),
CardType.ENCHANTMENT.getPredicate()));
}
public KalemnesCaptain(UUID ownerId, CardSetInfo setInfo) { public KalemnesCaptain(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.GIANT); this.subtype.add(SubType.GIANT);
@ -42,7 +33,7 @@ public final class KalemnesCaptain extends CardImpl {
this.addAbility(new MonstrosityAbility("{5}{W}{W}", 3)); this.addAbility(new MonstrosityAbility("{5}{W}{W}", 3));
// When Kalemne's Captain becomes monstrous, exile all artifacts and enchantments. // When Kalemne's Captain becomes monstrous, exile all artifacts and enchantments.
this.addAbility(new BecomesMonstrousSourceTriggeredAbility(new ExileAllEffect(filter))); this.addAbility(new BecomesMonstrousSourceTriggeredAbility(new ExileAllEffect(StaticFilters.FILTER_PERMANENT_ARTIFACTS_AND_ENCHANTMENTS)));
} }
private KalemnesCaptain(final KalemnesCaptain card) { private KalemnesCaptain(final KalemnesCaptain card) {

View file

@ -52,7 +52,7 @@ import mage.target.common.TargetControlledCreaturePermanent;
*/ */
public final class KondasBanner extends CardImpl { public final class KondasBanner extends CardImpl {
private static final FilterControlledCreaturePermanent legendaryFilter = new FilterControlledCreaturePermanent("legendary creatures"); private static final FilterControlledCreaturePermanent legendaryFilter = new FilterControlledCreaturePermanent("legendary creature");
static { static {
legendaryFilter.add(SuperType.LEGENDARY.getPredicate()); legendaryFilter.add(SuperType.LEGENDARY.getPredicate());

View file

@ -44,7 +44,7 @@ class ManaSeismEffect extends OneShotEffect {
public ManaSeismEffect() { public ManaSeismEffect() {
super(Outcome.Neutral); super(Outcome.Neutral);
staticText = "Sacrifice any number of lands. Add {C} for each land sacrificed this way"; staticText = "Sacrifice any number of lands, then add that much {C}";
} }
public ManaSeismEffect(final ManaSeismEffect effect) { public ManaSeismEffect(final ManaSeismEffect effect) {

View file

@ -42,7 +42,7 @@ public final class MarkOfTheOni extends CardImpl {
// At the beginning of the end step, if you control no Demons, sacrifice Mark of the Oni. // At the beginning of the end step, if you control no Demons, sacrifice Mark of the Oni.
this.addAbility(new BeginningOfEndStepTriggeredAbility(Zone.BATTLEFIELD, this.addAbility(new BeginningOfEndStepTriggeredAbility(Zone.BATTLEFIELD,
new SacrificeSourceEffect(), new SacrificeSourceEffect(),
TargetController.ANY, TargetController.NEXT,
new PermanentsOnTheBattlefieldCondition( new PermanentsOnTheBattlefieldCondition(
new FilterControlledCreaturePermanent(SubType.DEMON, "if you control no Demons"), new FilterControlledCreaturePermanent(SubType.DEMON, "if you control no Demons"),
ComparisonType.FEWER_THAN, 1), ComparisonType.FEWER_THAN, 1),

View file

@ -48,10 +48,10 @@ public final class MyojinOfCleansingFire extends CardImpl {
this.getSpellAbility().addWatcher(new CastFromHandWatcher()); this.getSpellAbility().addWatcher(new CastFromHandWatcher());
// Myojin of Cleansing Fire enters the battlefield with a divinity counter on it if you cast it from your hand. // Myojin of Cleansing Fire enters the battlefield with a divinity counter on it if you cast it from your hand.
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new AddCountersSourceEffect(CounterType.DIVINITY.createInstance()), CastFromHandSourcePermanentCondition.instance, ""), "{this} enters the battlefield with a divinity counter on it if you cast it from your hand")); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new AddCountersSourceEffect(CounterType.DIVINITY.createInstance()), CastFromHandSourcePermanentCondition.instance, ""), "with a divinity counter on it if you cast it from your hand"));
// Myojin of Cleansing Fire is indestructible as long as it has a divinity counter on it. // Myojin of Cleansing Fire has indestructible as long as it has a divinity counter on it.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield), this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield),
new SourceHasCounterCondition(CounterType.DIVINITY), "{this} is indestructible as long as it has a divinity counter on it"))); new SourceHasCounterCondition(CounterType.DIVINITY), "{this} has indestructible as long as it has a divinity counter on it")));
// Remove a divinity counter from Myojin of Cleansing Fire: Destroy all other creatures. // Remove a divinity counter from Myojin of Cleansing Fire: Destroy all other creatures.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyAllEffect(filter), new RemoveCountersSourceCost(CounterType.DIVINITY.createInstance()))); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyAllEffect(filter), new RemoveCountersSourceCost(CounterType.DIVINITY.createInstance())));
} }

View file

@ -42,10 +42,10 @@ public final class MyojinOfInfiniteRage extends CardImpl {
this.getSpellAbility().addWatcher(new CastFromHandWatcher()); this.getSpellAbility().addWatcher(new CastFromHandWatcher());
// Myojin of Infinite Rage enters the battlefield with a divinity counter on it if you cast it from your hand. // Myojin of Infinite Rage enters the battlefield with a divinity counter on it if you cast it from your hand.
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new AddCountersSourceEffect(CounterType.DIVINITY.createInstance()), CastFromHandSourcePermanentCondition.instance, ""), "{this} enters the battlefield with a divinity counter on it if you cast it from your hand")); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new AddCountersSourceEffect(CounterType.DIVINITY.createInstance()), CastFromHandSourcePermanentCondition.instance, ""), "with a divinity counter on it if you cast it from your hand"));
// Myojin of Infinite Rage is indestructible as long as it has a divinity counter on it. // Myojin of Infinite Rage has indestructible as long as it has a divinity counter on it.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield), this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield),
new SourceHasCounterCondition(CounterType.DIVINITY), "{this} is indestructible as long as it has a divinity counter on it"))); new SourceHasCounterCondition(CounterType.DIVINITY), "{this} has indestructible as long as it has a divinity counter on it")));
// Remove a divinity counter from Myojin of Infinite Rage: Destroy all lands. // Remove a divinity counter from Myojin of Infinite Rage: Destroy all lands.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyAllEffect(StaticFilters.FILTER_LANDS), new RemoveCountersSourceCost(CounterType.DIVINITY.createInstance()))); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyAllEffect(StaticFilters.FILTER_LANDS), new RemoveCountersSourceCost(CounterType.DIVINITY.createInstance())));
} }

View file

@ -43,11 +43,11 @@ public final class MyojinOfLifesWeb extends CardImpl {
this.getSpellAbility().addWatcher(new CastFromHandWatcher()); this.getSpellAbility().addWatcher(new CastFromHandWatcher());
// Myojin of Life's Web enters the battlefield with a divinity counter on it if you cast it from your hand. // Myojin of Life's Web enters the battlefield with a divinity counter on it if you cast it from your hand.
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new AddCountersSourceEffect(CounterType.DIVINITY.createInstance()), CastFromHandSourcePermanentCondition.instance, ""), "{this} enters the battlefield with a divinity counter on it if you cast it from your hand")); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new AddCountersSourceEffect(CounterType.DIVINITY.createInstance()), CastFromHandSourcePermanentCondition.instance, ""), "with a divinity counter on it if you cast it from your hand"));
// Myojin of Life's Web is indestructible as long as it has a divinity counter on it. // Myojin of Life's Web has indestructible as long as it has a divinity counter on it.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield), new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield),
new SourceHasCounterCondition(CounterType.DIVINITY), "{this} is indestructible as long as it has a divinity counter on it"))); new SourceHasCounterCondition(CounterType.DIVINITY), "{this} has indestructible as long as it has a divinity counter on it")));
// Remove a divinity counter from Myojin of Life's Web: Put any number of creature cards from your hand onto the battlefield. // Remove a divinity counter from Myojin of Life's Web: Put any number of creature cards from your hand onto the battlefield.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MyojinOfLifesWebPutCreatureOnBattlefieldEffect(), new RemoveCountersSourceCost(CounterType.DIVINITY.createInstance())); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MyojinOfLifesWebPutCreatureOnBattlefieldEffect(), new RemoveCountersSourceCost(CounterType.DIVINITY.createInstance()));

View file

@ -40,10 +40,10 @@ public final class MyojinOfNightsReach extends CardImpl {
this.getSpellAbility().addWatcher(new CastFromHandWatcher()); this.getSpellAbility().addWatcher(new CastFromHandWatcher());
// Myojin of Night's Reach enters the battlefield with a divinity counter on it if you cast it from your hand. // Myojin of Night's Reach enters the battlefield with a divinity counter on it if you cast it from your hand.
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new AddCountersSourceEffect(CounterType.DIVINITY.createInstance()), CastFromHandSourcePermanentCondition.instance, ""), "{this} enters the battlefield with a divinity counter on it if you cast it from your hand")); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new AddCountersSourceEffect(CounterType.DIVINITY.createInstance()), CastFromHandSourcePermanentCondition.instance, ""), "with a divinity counter on it if you cast it from your hand"));
// Myojin of Night's Reach is indestructible as long as it has a divinity counter on it. // Myojin of Night's Reach has indestructible as long as it has a divinity counter on it.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield), this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield),
new SourceHasCounterCondition(CounterType.DIVINITY), "{this} is indestructible as long as it has a divinity counter on it"))); new SourceHasCounterCondition(CounterType.DIVINITY), "{this} has indestructible as long as it has a divinity counter on it")));
// Remove a divinity counter from Myojin of Night's Reach: Each opponent discards their hand. // Remove a divinity counter from Myojin of Night's Reach: Each opponent discards their hand.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MyojinOfNightsReachEffect(), new RemoveCountersSourceCost(CounterType.DIVINITY.createInstance())); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MyojinOfNightsReachEffect(), new RemoveCountersSourceCost(CounterType.DIVINITY.createInstance()));
this.addAbility(ability); this.addAbility(ability);

View file

@ -45,10 +45,10 @@ public final class MyojinOfSeeingWinds extends CardImpl {
this.getSpellAbility().addWatcher(new CastFromHandWatcher()); this.getSpellAbility().addWatcher(new CastFromHandWatcher());
// Myojin of Seeing Winds enters the battlefield with a divinity counter on it if you cast it from your hand. // Myojin of Seeing Winds enters the battlefield with a divinity counter on it if you cast it from your hand.
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new AddCountersSourceEffect(CounterType.DIVINITY.createInstance()), CastFromHandSourcePermanentCondition.instance, ""), "{this} enters the battlefield with a divinity counter on it if you cast it from your hand")); this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(new AddCountersSourceEffect(CounterType.DIVINITY.createInstance()), CastFromHandSourcePermanentCondition.instance, ""), "with a divinity counter on it if you cast it from your hand"));
// Myojin of Seeing Winds is indestructible as long as it has a divinity counter on it. // Myojin of Seeing Winds has indestructible as long as it has a divinity counter on it.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield), this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield),
new SourceHasCounterCondition(CounterType.DIVINITY), "{this} is indestructible as long as it has a divinity counter on it"))); new SourceHasCounterCondition(CounterType.DIVINITY), "{this} has indestructible as long as it has a divinity counter on it")));
// Remove a divinity counter from Myojin of Seeing Winds: Draw a card for each permanent you control. // Remove a divinity counter from Myojin of Seeing Winds: Draw a card for each permanent you control.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(new PermanentsOnBattlefieldCount(filter)), new RemoveCountersSourceCost(CounterType.DIVINITY.createInstance())); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(new PermanentsOnBattlefieldCount(filter)), new RemoveCountersSourceCost(CounterType.DIVINITY.createInstance()));
this.addAbility(ability); this.addAbility(ability);

View file

@ -11,8 +11,7 @@ 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.Zone;
import mage.filter.common.FilterControlledLandPermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterLandPermanent;
/** /**
* *
@ -24,10 +23,10 @@ public final class NaturesWill extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}{G}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}{G}");
// Whenever one or more creatures you control deal combat damage to a player, tap all lands that player controls and untap all lands you control. // Whenever one or more creatures you control deal combat damage to a player, tap all lands that player controls and untap all lands you control.
Effect tapAllEffect = new TapAllTargetPlayerControlsEffect(new FilterLandPermanent()); Effect tapAllEffect = new TapAllTargetPlayerControlsEffect(StaticFilters.FILTER_LANDS);
tapAllEffect.setText("tap all lands that player controls"); tapAllEffect.setText("tap all lands that player controls");
Ability ability = new DealCombatDamageControlledTriggeredAbility(Zone.BATTLEFIELD, tapAllEffect, true); Ability ability = new DealCombatDamageControlledTriggeredAbility(Zone.BATTLEFIELD, tapAllEffect, true);
ability.addEffect(new UntapAllEffect(new FilterControlledLandPermanent())); ability.addEffect(new UntapAllEffect(StaticFilters.FILTER_CONTROLLED_PERMANENT_LANDS).concatBy("and"));
addAbility(ability); addAbility(ability);
} }

View file

@ -21,7 +21,7 @@ public final class PathOfAngersFlame extends CardImpl {
this.subtype.add(SubType.ARCANE); this.subtype.add(SubType.ARCANE);
// Creatures you control get +2/+0 until end of turn. // Creatures you control get +2/+0 until end of turn.
this.getSpellAbility().addEffect(new BoostControlledEffect(2, 0, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, false)); this.getSpellAbility().addEffect(new BoostControlledEffect(2, 0, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES, false));
} }
private PathOfAngersFlame(final PathOfAngersFlame card) { private PathOfAngersFlame(final PathOfAngersFlame card) {

View file

@ -35,7 +35,7 @@ public final class PatronOfTheAkki extends CardImpl {
this.addAbility(new OfferingAbility(filter)); this.addAbility(new OfferingAbility(filter));
// Whenever Patron of the Akki attacks, creatures you control get +2/+0 until end of turn. // Whenever Patron of the Akki attacks, creatures you control get +2/+0 until end of turn.
this.addAbility(new AttacksTriggeredAbility(new BoostControlledEffect(2, 0, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, false), false)); this.addAbility(new AttacksTriggeredAbility(new BoostControlledEffect(2, 0, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES, false), false));
} }
private PatronOfTheAkki(final PatronOfTheAkki card) { private PatronOfTheAkki(final PatronOfTheAkki card) {

View file

@ -6,8 +6,7 @@ import mage.abilities.effects.common.DestroyAllEffect;
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.FilterPermanent; import mage.filter.StaticFilters;
import mage.filter.predicate.Predicates;
/** /**
* *
@ -15,20 +14,12 @@ import mage.filter.predicate.Predicates;
*/ */
public final class Purify extends CardImpl { public final class Purify extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent("artifacts and enchantments");
static {
filter.add(Predicates.or(
CardType.ARTIFACT.getPredicate(),
CardType.ENCHANTMENT.getPredicate()));
}
public Purify(UUID ownerId, CardSetInfo setInfo) { public Purify(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{W}{W}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{W}{W}");
// Destroy all artifacts and enchantments. // Destroy all artifacts and enchantments.
this.getSpellAbility().addEffect(new DestroyAllEffect(filter)); this.getSpellAbility().addEffect(new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_ARTIFACTS_AND_ENCHANTMENTS));
} }
private Purify(final Purify card) { private Purify(final Purify card) {

View file

@ -19,7 +19,7 @@ public final class ReduceToDreams extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{U}{U}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{U}{U}");
// Return all artifacts and enchantments to their owners' hands. // Return all artifacts and enchantments to their owners' hands.
this.getSpellAbility().addEffect(new ReturnToHandFromBattlefieldAllEffect(StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_ENCHANTMENT)); this.getSpellAbility().addEffect(new ReturnToHandFromBattlefieldAllEffect(StaticFilters.FILTER_PERMANENT_ARTIFACTS_AND_ENCHANTMENTS));
} }
private ReduceToDreams(final ReduceToDreams card) { private ReduceToDreams(final ReduceToDreams card) {

View file

@ -19,7 +19,7 @@ import java.util.UUID;
*/ */
public final class RendFlesh extends CardImpl { public final class RendFlesh extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Non-Spirit creature"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("non-Spirit creature");
static { static {
filter.add(Predicates.not(SubType.SPIRIT.getPredicate())); filter.add(Predicates.not(SubType.SPIRIT.getPredicate()));

View file

@ -20,7 +20,7 @@ import mage.filter.common.FilterCreaturePermanent;
*/ */
public final class SachiDaughterOfSeshiro extends CardImpl { public final class SachiDaughterOfSeshiro extends CardImpl {
private static final FilterCreaturePermanent snakeFilter = new FilterCreaturePermanent("Snakes"); private static final FilterCreaturePermanent snakeFilter = new FilterCreaturePermanent("Snake creatures");
private static final FilterPermanent shamanFilter = new FilterPermanent("Shamans"); private static final FilterPermanent shamanFilter = new FilterPermanent("Shamans");
static { static {

View file

@ -52,7 +52,7 @@ public final class SekkiSeasonsGuide extends CardImpl {
// Sacrifice eight Spirits: Return Sekki from your graveyard to the battlefield. // Sacrifice eight Spirits: Return Sekki from your graveyard to the battlefield.
this.addAbility(new SimpleActivatedAbility( this.addAbility(new SimpleActivatedAbility(
Zone.GRAVEYARD, Zone.GRAVEYARD,
new ReturnSourceFromGraveyardToBattlefieldEffect(), new ReturnSourceFromGraveyardToBattlefieldEffect(false, false),
new SacrificeTargetCost(new TargetControlledPermanent(8, 8, filter, true)))); new SacrificeTargetCost(new TargetControlledPermanent(8, 8, filter, true))));
} }

View file

@ -9,8 +9,7 @@ import mage.abilities.effects.common.DestroyAllEffect;
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.FilterPermanent; import mage.filter.StaticFilters;
import mage.filter.predicate.Predicates;
import mage.game.events.GameEvent.EventType; import mage.game.events.GameEvent.EventType;
/** /**
@ -19,18 +18,12 @@ import mage.game.events.GameEvent.EventType;
*/ */
public final class Serenity extends CardImpl { public final class Serenity extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent("artifacts and enchantments");
static {
filter.add(Predicates.or(CardType.ARTIFACT.getPredicate(), CardType.ENCHANTMENT.getPredicate()));
}
public Serenity(UUID ownerId, CardSetInfo setInfo) { public Serenity(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{W}"); super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{W}");
// At the beginning of your upkeep, destroy all artifacts and enchantments. They can't be regenerated. // At the beginning of your upkeep, destroy all artifacts and enchantments. They can't be regenerated.
Effect effect = new DestroyAllEffect(new FilterPermanent(filter), true); Effect effect = new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_ARTIFACTS_AND_ENCHANTMENTS, true);
Ability ability = new OnEventTriggeredAbility(EventType.UPKEEP_STEP_PRE, "beginning of your upkeep", effect, false); Ability ability = new OnEventTriggeredAbility(EventType.UPKEEP_STEP_PRE, "beginning of your upkeep", effect, false);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -29,7 +29,7 @@ public final class ShireiShizosCaretaker extends CardImpl {
} }
private static final String rule1 = "you may return that card to the battlefield " + private static final String rule1 = "you may return that card to the battlefield " +
"t the beginning of the next end step if {this} is still on the battlefield"; "at the beginning of the next end step if {this} is still on the battlefield";
private static final String rule2 = "Whenever a creature with power 1 or less " + private static final String rule2 = "Whenever a creature with power 1 or less " +
"is put into your graveyard from the battlefield, "; "is put into your graveyard from the battlefield, ";

View file

@ -32,7 +32,7 @@ public final class ShizukoCallerOfAutumn extends CardImpl {
// At the beginning of each player's upkeep, that player adds {G}{G}{G}. Until end of turn, this mana doesn't empty from that player's mana pool as steps and phases end. // At the beginning of each player's upkeep, that player adds {G}{G}{G}. Until end of turn, this mana doesn't empty from that player's mana pool as steps and phases end.
Effect effect = new AddManaToManaPoolTargetControllerEffect(Mana.GreenMana(3), "that player", true); Effect effect = new AddManaToManaPoolTargetControllerEffect(Mana.GreenMana(3), "that player", true);
effect.setText("that player adds {G}{G}{G}. Until end of turn, this mana doesn't empty from that player's mana pool as steps and phases end"); effect.setText("that player adds {G}{G}{G}. Until end of turn, they don't lose this mana as steps and phases end");
this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.ANY, false)); this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.ANY, false));
} }

View file

@ -24,7 +24,7 @@ public final class SwallowingPlague extends CardImpl {
this.subtype.add(SubType.ARCANE); this.subtype.add(SubType.ARCANE);
this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR)); this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addEffect(new GainLifeEffect(ManacostVariableValue.REGULAR)); this.getSpellAbility().addEffect(new GainLifeEffect(ManacostVariableValue.REGULAR).concatBy("and"));
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
} }

View file

@ -50,7 +50,7 @@ class SwayOfTheStarsEffect extends OneShotEffect {
public SwayOfTheStarsEffect() { public SwayOfTheStarsEffect() {
super(Outcome.Neutral); super(Outcome.Neutral);
staticText = "Each player shuffles their hand, graveyard, and permanents they own into their library"; staticText = "Each player shuffles their hand, graveyard, and all permanents they own into their library";
} }
public SwayOfTheStarsEffect(final SwayOfTheStarsEffect effect) { public SwayOfTheStarsEffect(final SwayOfTheStarsEffect effect) {

View file

@ -48,9 +48,9 @@ public final class ThatWhichWasTaken extends CardImpl {
ability.addTarget(new TargetPermanent(filter)); ability.addTarget(new TargetPermanent(filter));
this.addAbility(ability); this.addAbility(ability);
// Each permanent with a divinity counter on it is indestructible. // Each permanent with a divinity counter on it has indestructible.
Effect effect = new GainAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield, filterIndestructible, false); Effect effect = new GainAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield, filterIndestructible, false);
effect.setText("Each permanent with a divinity counter on it is indestructible"); effect.setText("Each permanent with a divinity counter on it has indestructible");
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
effect)); effect));
@ -65,5 +65,3 @@ public final class ThatWhichWasTaken extends CardImpl {
return new ThatWhichWasTaken(this); return new ThatWhichWasTaken(this);
} }
} }

View file

@ -68,7 +68,7 @@ class ToshiroUmezawaEffect extends OneShotEffect {
public ToshiroUmezawaEffect() { public ToshiroUmezawaEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "you may cast target instant card from your graveyard. " this.staticText = "you may cast target instant card from your graveyard. "
+ "If that spell would be put into a graveyard this turn, exile it instead"; + "If that spell would be put into a graveyard, exile it instead";
} }
public ToshiroUmezawaEffect(final ToshiroUmezawaEffect effect) { public ToshiroUmezawaEffect(final ToshiroUmezawaEffect effect) {

View file

@ -21,7 +21,7 @@ import mage.filter.FilterPermanent;
*/ */
public final class TraprootKami extends CardImpl { public final class TraprootKami extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent("the number of Forests on the battlefield"); private static final FilterPermanent filter = new FilterPermanent("Forests on the battlefield");
static { static {
filter.add(SubType.FOREST.getPredicate()); filter.add(SubType.FOREST.getPredicate());

View file

@ -92,7 +92,7 @@ class UbaMaskPlayEffect extends AsThoughEffectImpl {
public UbaMaskPlayEffect() { public UbaMaskPlayEffect() {
super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit);
staticText = "Each player may play cards they exiled with {this} this turn"; staticText = "Each player may play lands and cast spells from among cards they exiled with {this} this turn";
} }
public UbaMaskPlayEffect(final UbaMaskPlayEffect effect) { public UbaMaskPlayEffect(final UbaMaskPlayEffect effect) {

View file

@ -207,6 +207,7 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge
|| ruleLow.startsWith("change") || ruleLow.startsWith("change")
|| ruleLow.startsWith("counter") || ruleLow.startsWith("counter")
|| ruleLow.startsWith("destroy") || ruleLow.startsWith("destroy")
|| ruleLow.startsWith("distribute")
|| ruleLow.startsWith("sacrifice") || ruleLow.startsWith("sacrifice")
|| ruleLow.startsWith("exchange") || ruleLow.startsWith("exchange")
|| ruleLow.startsWith("exile") || ruleLow.startsWith("exile")

View file

@ -8,6 +8,7 @@ import mage.game.Game;
import mage.game.events.DamageEvent; import mage.game.events.DamageEvent;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.util.CardUtil;
/** /**
* *
@ -61,14 +62,14 @@ public class PreventDamageToAttachedEffect extends PreventionEffectImpl {
sb.append("combat "); sb.append("combat ");
} }
sb.append("damage that would be dealt to "); sb.append("damage that would be dealt to ");
sb.append(attachmentType.verb()).append(" creature"); sb.append(CardUtil.getTextWithFirstCharLowerCase(attachmentType.verb())).append(" creature");
} else { } else {
sb.append("If a source would deal "); sb.append("If a source would deal ");
if (onlyCombat) { if (onlyCombat) {
sb.append("combat "); sb.append("combat ");
} }
sb.append("damage to "); sb.append("damage to ");
sb.append(attachmentType.verb()); sb.append(CardUtil.getTextWithFirstCharLowerCase(attachmentType.verb()));
sb.append(" creature, prevent ").append(amountToPrevent); sb.append(" creature, prevent ").append(amountToPrevent);
sb.append(" of that damage"); sb.append(" of that damage");
} }

View file

@ -85,7 +85,7 @@ public class SetPlayerLifeAllEffect extends OneShotEffect {
default: default:
throw new UnsupportedOperationException("Not supported value for targetController"); throw new UnsupportedOperationException("Not supported value for targetController");
} }
sb.append(" 's life total becomes "); sb.append("'s life total becomes ");
sb.append(amount.toString()); sb.append(amount.toString());
return sb.toString(); return sb.toString();
} }

View file

@ -69,7 +69,7 @@ public class ChampionAbility extends StaticAbility {
case 1: case 1:
SubType subType = subTypes.get(0); SubType subType = subTypes.get(0);
this.objectDescription = subType.getDescription(); this.objectDescription = subType.getDescription();
filter = new FilterControlledPermanent(subType, "another " + subType + " you control"); filter = new FilterControlledPermanent(subType, "another " + subType);
filter.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);
break; break;
case 2: case 2:

View file

@ -291,6 +291,11 @@ public final class StaticFilters {
FILTER_PERMANENT_ARTIFACT_OR_ENCHANTMENT.setLockedFilter(true); FILTER_PERMANENT_ARTIFACT_OR_ENCHANTMENT.setLockedFilter(true);
} }
public static final FilterArtifactOrEnchantmentPermanent FILTER_PERMANENT_ARTIFACTS_AND_ENCHANTMENTS = new FilterArtifactOrEnchantmentPermanent("artifacts and enchantments");
static {
FILTER_PERMANENT_ARTIFACTS_AND_ENCHANTMENTS.setLockedFilter(true);
}
public static final FilterControlledPermanent FILTER_PERMANENT_CONTROLLED_ARTIFACT_OR_ENCHANTMENT = new FilterControlledPermanent("artifact or enchantment you control"); public static final FilterControlledPermanent FILTER_PERMANENT_CONTROLLED_ARTIFACT_OR_ENCHANTMENT = new FilterControlledPermanent("artifact or enchantment you control");