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 {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Samurai");
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Samurai creatures");
static {
filter.add(SubType.SAMURAI.getPredicate());
@ -27,7 +27,7 @@ public final class CallToGlory extends CardImpl {
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.
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));
}

View file

@ -7,7 +7,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterArtifactOrEnchantmentPermanent;
/**
*
@ -15,9 +14,6 @@ import mage.filter.common.FilterArtifactOrEnchantmentPermanent;
*/
public final class CleansingNova extends CardImpl {
private static final FilterArtifactOrEnchantmentPermanent filter
= new FilterArtifactOrEnchantmentPermanent("artifacts and enchantments");
public CleansingNova(UUID ownerId, CardSetInfo setInfo) {
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));
// 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);
}

View file

@ -10,6 +10,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterArtifactOrEnchantmentPermanent;
import mage.filter.predicate.permanent.ControllerIdPredicate;
import mage.game.Game;
@ -25,9 +26,6 @@ import java.util.UUID;
*/
public final class DismantlingWave extends CardImpl {
private static final FilterPermanent filter
= new FilterArtifactOrEnchantmentPermanent("artifacts and enchantments");
public DismantlingWave(UUID ownerId, CardSetInfo setInfo) {
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}")));
// 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) {

View file

@ -10,7 +10,6 @@ import mage.constants.CardType;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.players.Player;
import mage.target.targetpointer.FixedTarget;
@ -79,6 +78,6 @@ class EbonyOwlNetsukeTriggeredAbility extends TriggeredAbilityImpl {
@Override
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}");
// 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) {

View file

@ -6,7 +6,7 @@ import mage.abilities.effects.common.ExileAllEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
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}");
// Exile all creatures.
this.getSpellAbility().addEffect(new ExileAllEffect(new FilterCreaturePermanent()));
this.getSpellAbility().addEffect(new ExileAllEffect(StaticFilters.FILTER_PERMANENT_CREATURES));
}
private FinalJudgment(final FinalJudgment card) {

View file

@ -44,7 +44,7 @@ class FlamesOfTheBloodHandReplacementEffect extends ReplacementEffectImpl {
public FlamesOfTheBloodHandReplacementEffect() {
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) {

View file

@ -12,8 +12,7 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.predicate.Predicates;
import mage.filter.StaticFilters;
/**
*
@ -21,14 +20,6 @@ import mage.filter.predicate.Predicates;
*/
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) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}{W}");
this.subtype.add(SubType.HUMAN);
@ -37,7 +28,7 @@ public final class FountainWatch extends CardImpl {
this.toughness = new MageInt(4);
// 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) {

View file

@ -7,6 +7,7 @@ import mage.abilities.Ability;
import mage.abilities.common.DiesAttachedTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.ReturnToHandSourceEffect;
import mage.abilities.effects.common.continuous.BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect;
@ -44,7 +45,9 @@ public final class GenjuOfTheFalls extends CardImpl {
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);
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);
}

View file

@ -8,6 +8,7 @@ import mage.abilities.common.DiesAttachedTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.ReturnToHandSourceEffect;
import mage.abilities.effects.common.continuous.BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect;
@ -45,7 +46,9 @@ public final class GenjuOfTheFens extends CardImpl {
this.addAbility(ability2);
// 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);
}

View file

@ -51,7 +51,9 @@ public final class GenjuOfTheFields extends CardImpl {
this.addAbility(ability2);
// 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);
}

View file

@ -7,6 +7,7 @@ import mage.abilities.Ability;
import mage.abilities.common.DiesAttachedTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.ReturnToHandSourceEffect;
import mage.abilities.effects.common.continuous.BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect;
@ -42,7 +43,9 @@ public final class GenjuOfTheRealm extends CardImpl {
this.addAbility(ability2);
// 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);
}

View file

@ -7,6 +7,7 @@ import mage.abilities.Ability;
import mage.abilities.common.DiesAttachedTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.ReturnToHandSourceEffect;
import mage.abilities.effects.common.continuous.BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect;
@ -43,7 +44,9 @@ public final class GenjuOfTheSpires extends CardImpl {
this.addAbility(ability2);
// 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);
}

View file

@ -28,7 +28,7 @@ public final class Glitterfang extends CardImpl {
// Haste
this.addAbility(HasteAbility.getInstance());
// 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) {

View file

@ -23,7 +23,7 @@ public final class HanabiBlast extends CardImpl {
this.getSpellAbility().addEffect(new DamageTargetEffect(2));
this.getSpellAbility().addTarget(new TargetAnyTarget());
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) {

View file

@ -40,7 +40,7 @@ public final class HeedTheMists extends CardImpl {
public HeedTheMistsEffect() {
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) {
@ -49,7 +49,6 @@ public final class HeedTheMists extends CardImpl {
@Override
public boolean apply(Game game, Ability source) {
boolean result = false;
Player controller = game.getPlayer(source.getControllerId());
int totalCMC = controller
.millCards(1, source, game)

View file

@ -23,9 +23,11 @@ import mage.target.common.TargetControlledCreaturePermanent;
public final class IizukaTheRuthless extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Samurai");
private static final FilterControlledCreaturePermanent filter2 = new FilterControlledCreaturePermanent("Samurai creatures");
static {
filter.add(SubType.SAMURAI.getPredicate());
filter2.add(SubType.SAMURAI.getPredicate());
}
public IizukaTheRuthless(UUID ownerId, CardSetInfo setInfo) {
@ -38,7 +40,7 @@ public final class IizukaTheRuthless extends CardImpl {
this.toughness = new MageInt(3);
this.addAbility(new BushidoAbility(2));
// {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)));
this.addAbility(ability);
}

View file

@ -11,8 +11,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterPermanent;
import mage.filter.predicate.Predicates;
import mage.filter.StaticFilters;
/**
*
@ -20,14 +19,6 @@ import mage.filter.predicate.Predicates;
*/
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) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}{W}");
this.subtype.add(SubType.GIANT);
@ -42,7 +33,7 @@ public final class KalemnesCaptain extends CardImpl {
this.addAbility(new MonstrosityAbility("{5}{W}{W}", 3));
// 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) {

View file

@ -52,7 +52,7 @@ import mage.target.common.TargetControlledCreaturePermanent;
*/
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 {
legendaryFilter.add(SuperType.LEGENDARY.getPredicate());

View file

@ -44,7 +44,7 @@ class ManaSeismEffect extends OneShotEffect {
public ManaSeismEffect() {
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) {

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.
this.addAbility(new BeginningOfEndStepTriggeredAbility(Zone.BATTLEFIELD,
new SacrificeSourceEffect(),
TargetController.ANY,
TargetController.NEXT,
new PermanentsOnTheBattlefieldCondition(
new FilterControlledCreaturePermanent(SubType.DEMON, "if you control no Demons"),
ComparisonType.FEWER_THAN, 1),

View file

@ -48,10 +48,10 @@ public final class MyojinOfCleansingFire extends CardImpl {
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.
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"));
// Myojin of Cleansing Fire is indestructible as long as it has a divinity counter on it.
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 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),
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.
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());
// 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"));
// Myojin of Infinite Rage is indestructible as long as it has a divinity counter on it.
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 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),
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.
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());
// 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"));
// Myojin of Life's Web is indestructible as long as it has a divinity counter on it.
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 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),
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.
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());
// 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"));
// Myojin of Night's Reach is indestructible as long as it has a divinity counter on it.
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 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),
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.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MyojinOfNightsReachEffect(), new RemoveCountersSourceCost(CounterType.DIVINITY.createInstance()));
this.addAbility(ability);

View file

@ -45,10 +45,10 @@ public final class MyojinOfSeeingWinds extends CardImpl {
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.
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"));
// Myojin of Seeing Winds is indestructible as long as it has a divinity counter on it.
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 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),
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.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(new PermanentsOnBattlefieldCount(filter)), new RemoveCountersSourceCost(CounterType.DIVINITY.createInstance()));
this.addAbility(ability);

View file

@ -11,8 +11,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.filter.common.FilterControlledLandPermanent;
import mage.filter.common.FilterLandPermanent;
import mage.filter.StaticFilters;
/**
*
@ -24,10 +23,10 @@ public final class NaturesWill extends CardImpl {
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.
Effect tapAllEffect = new TapAllTargetPlayerControlsEffect(new FilterLandPermanent());
Effect tapAllEffect = new TapAllTargetPlayerControlsEffect(StaticFilters.FILTER_LANDS);
tapAllEffect.setText("tap all lands that player controls");
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);
}

View file

@ -21,7 +21,7 @@ public final class PathOfAngersFlame extends CardImpl {
this.subtype.add(SubType.ARCANE);
// 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) {

View file

@ -35,7 +35,7 @@ public final class PatronOfTheAkki extends CardImpl {
this.addAbility(new OfferingAbility(filter));
// 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) {

View file

@ -6,8 +6,7 @@ import mage.abilities.effects.common.DestroyAllEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.FilterPermanent;
import mage.filter.predicate.Predicates;
import mage.filter.StaticFilters;
/**
*
@ -15,20 +14,12 @@ import mage.filter.predicate.Predicates;
*/
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) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{W}{W}");
// 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) {

View file

@ -19,7 +19,7 @@ public final class ReduceToDreams extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{U}{U}");
// 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) {

View file

@ -19,7 +19,7 @@ import java.util.UUID;
*/
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 {
filter.add(Predicates.not(SubType.SPIRIT.getPredicate()));

View file

@ -20,7 +20,7 @@ import mage.filter.common.FilterCreaturePermanent;
*/
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");
static {

View file

@ -52,7 +52,7 @@ public final class SekkiSeasonsGuide extends CardImpl {
// Sacrifice eight Spirits: Return Sekki from your graveyard to the battlefield.
this.addAbility(new SimpleActivatedAbility(
Zone.GRAVEYARD,
new ReturnSourceFromGraveyardToBattlefieldEffect(),
new ReturnSourceFromGraveyardToBattlefieldEffect(false, false),
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.CardSetInfo;
import mage.constants.CardType;
import mage.filter.FilterPermanent;
import mage.filter.predicate.Predicates;
import mage.filter.StaticFilters;
import mage.game.events.GameEvent.EventType;
/**
@ -19,18 +18,12 @@ import mage.game.events.GameEvent.EventType;
*/
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) {
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.
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);
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 " +
"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 " +
"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.
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));
}

View file

@ -24,7 +24,7 @@ public final class SwallowingPlague extends CardImpl {
this.subtype.add(SubType.ARCANE);
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());
}

View file

@ -50,7 +50,7 @@ class SwayOfTheStarsEffect extends OneShotEffect {
public SwayOfTheStarsEffect() {
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) {

View file

@ -48,9 +48,9 @@ public final class ThatWhichWasTaken extends CardImpl {
ability.addTarget(new TargetPermanent(filter));
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.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,
effect));
@ -65,5 +65,3 @@ public final class ThatWhichWasTaken extends CardImpl {
return new ThatWhichWasTaken(this);
}
}

View file

@ -68,7 +68,7 @@ class ToshiroUmezawaEffect extends OneShotEffect {
public ToshiroUmezawaEffect() {
super(Outcome.Benefit);
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) {

View file

@ -21,7 +21,7 @@ import mage.filter.FilterPermanent;
*/
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 {
filter.add(SubType.FOREST.getPredicate());

View file

@ -92,7 +92,7 @@ class UbaMaskPlayEffect extends AsThoughEffectImpl {
public UbaMaskPlayEffect() {
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) {

View file

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

View file

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

View file

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

View file

@ -291,6 +291,11 @@ public final class StaticFilters {
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");