Fix cards 'T' to 'Z' with card name instead of {this}, Generify TitaniasChosen

This commit is contained in:
Steven Knipe 2025-07-08 02:32:53 -07:00
parent 996dc796a4
commit 05258ba270
25 changed files with 111 additions and 140 deletions

View file

@ -2,9 +2,9 @@
package mage.cards.s; package mage.cards.s;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -48,7 +48,7 @@ class SmokestackEffect extends OneShotEffect {
SmokestackEffect() { SmokestackEffect() {
super(Outcome.Sacrifice); super(Outcome.Sacrifice);
this.staticText = "that player sacrifices a permanent for each soot counter on {this}"; this.staticText = "that player sacrifices a permanent of their choice for each soot counter on {this}";
} }
private SmokestackEffect(final SmokestackEffect effect) { private SmokestackEffect(final SmokestackEffect effect) {

View file

@ -1,11 +1,10 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.FadingAbility; import mage.abilities.keyword.FadingAbility;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -21,6 +20,8 @@ import mage.players.Player;
import mage.target.Target; import mage.target.Target;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
import java.util.UUID;
/** /**
* *
* @author Plopman * @author Plopman
@ -58,7 +59,7 @@ class TangleWireEffect extends OneShotEffect {
TangleWireEffect() { TangleWireEffect() {
super(Outcome.Sacrifice); super(Outcome.Sacrifice);
staticText = "that player taps an untapped artifact, creature, or land they control for each fade counter on Tangle Wire"; staticText = "that player taps an untapped artifact, creature, or land they control for each fade counter on {this}";
} }
private TangleWireEffect(final TangleWireEffect effect) { private TangleWireEffect(final TangleWireEffect effect) {

View file

@ -1,7 +1,6 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID;
import mage.abilities.common.CastOnlyDuringPhaseStepSourceAbility; import mage.abilities.common.CastOnlyDuringPhaseStepSourceAbility;
import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect; import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -10,6 +9,8 @@ import mage.constants.CardType;
import mage.constants.PhaseStep; import mage.constants.PhaseStep;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
* *
* @author L_J * @author L_J
@ -20,7 +21,7 @@ public final class Teleport extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{U}{U}{U}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{U}{U}{U}");
// Cast Teleport only during the declare attackers step. // Cast Teleport only during the declare attackers step.
this.addAbility(new CastOnlyDuringPhaseStepSourceAbility(null, PhaseStep.DECLARE_ATTACKERS, null, "Cast Teleport only during the declare attackers step")); this.addAbility(new CastOnlyDuringPhaseStepSourceAbility(null, PhaseStep.DECLARE_ATTACKERS, null, "Cast {this} only during the declare attackers step"));
// Target creature can't be blocked this turn. // Target creature can't be blocked this turn.
this.getSpellAbility().addEffect(new CantBeBlockedTargetEffect()); this.getSpellAbility().addEffect(new CantBeBlockedTargetEffect());

View file

@ -1,7 +1,6 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
@ -16,12 +15,13 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.constants.Zone;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate; import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import java.util.UUID;
/** /**
@ -29,7 +29,7 @@ import mage.target.TargetPermanent;
*/ */
public final class ThatWhichWasTaken extends CardImpl { public final class ThatWhichWasTaken extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent("permanent other than That Which Was Taken"); private static final FilterPermanent filter = new FilterPermanent("permanent other than {this}");
private static final FilterPermanent filterIndestructible = new FilterPermanent("Each permanent with a divinity counter on it"); private static final FilterPermanent filterIndestructible = new FilterPermanent("Each permanent with a divinity counter on it");

View file

@ -1,15 +1,13 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID;
import mage.MageObject; import mage.MageObject;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SagaAbility; import mage.abilities.common.SagaAbility;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.cards.Card; import mage.cards.Card;
import mage.constants.*;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.game.ExileZone; import mage.game.ExileZone;
@ -20,6 +18,8 @@ import mage.target.common.TargetCardInGraveyard;
import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetControlledCreaturePermanent;
import mage.util.CardUtil; import mage.util.CardUtil;
import java.util.UUID;
/** /**
* *
* @author Grath * @author Grath
@ -140,7 +140,7 @@ class TheAesirEscapeValhallaThreeEffect extends OneShotEffect {
TheAesirEscapeValhallaThreeEffect() { TheAesirEscapeValhallaThreeEffect() {
super(Outcome.Neutral); super(Outcome.Neutral);
staticText = "Return The Aesir Escape Valhalla and the exiled card to their owner's hand."; staticText = "Return {this} and the exiled card to their owner's hand.";
} }
private TheAesirEscapeValhallaThreeEffect(final TheAesirEscapeValhallaThreeEffect effect) { private TheAesirEscapeValhallaThreeEffect(final TheAesirEscapeValhallaThreeEffect effect) {

View file

@ -1,38 +1,38 @@
package mage.cards.t; package mage.cards.t;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.MageObject; import mage.MageObject;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility; import mage.abilities.LoyaltyAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.common.delayed.AtTheBeginOfPlayersNextEndStepDelayedTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.RestrictionEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.SuperType;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import mage.filter.predicate.permanent.ControllerIdPredicate; import mage.filter.predicate.permanent.ControllerIdPredicate;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect;
import mage.target.TargetPermanent;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.common.delayed.AtTheBeginOfPlayersNextEndStepDelayedTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.RestrictionEffect;
import mage.constants.Outcome;
import mage.game.Game; import mage.game.Game;
import mage.game.combat.CombatGroup; import mage.game.combat.CombatGroup;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.game.permanent.token.DoublestrikeSamuraiToken; import mage.game.permanent.token.DoublestrikeSamuraiToken;
import mage.players.Player; import mage.players.Player;
import mage.target.TargetPermanent;
import mage.target.targetpointer.FixedTarget; import mage.target.targetpointer.FixedTarget;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
/** /**
* *
@ -181,8 +181,7 @@ class TheEternalWandererAttackRestrictionEffect extends RestrictionEffect {
TheEternalWandererAttackRestrictionEffect() { TheEternalWandererAttackRestrictionEffect() {
super(Duration.WhileOnBattlefield); super(Duration.WhileOnBattlefield);
staticText = "No more than one creature can attack" + staticText = "No more than one creature can attack {this} each combat";
" The Eternal Wanderer each combat";
} }
private TheEternalWandererAttackRestrictionEffect(final TheEternalWandererAttackRestrictionEffect effect) { private TheEternalWandererAttackRestrictionEffect(final TheEternalWandererAttackRestrictionEffect effect) {

View file

@ -1,7 +1,6 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SkipUntapOptionalAbility; import mage.abilities.common.SkipUntapOptionalAbility;
@ -13,10 +12,11 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Zone;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import java.util.UUID;
/** /**
* *
* @author Plopman * @author Plopman
@ -52,7 +52,7 @@ class ThranWeaponryEffect extends BoostAllEffect{
public ThranWeaponryEffect() { public ThranWeaponryEffect() {
super(2, 2, Duration.WhileOnBattlefield); super(2, 2, Duration.WhileOnBattlefield);
staticText = "All creatures get +2/+2 for as long as Thran Weaponry remains tapped"; staticText = "All creatures get +2/+2 for as long as {this} remains tapped";
} }
private ThranWeaponryEffect(final ThranWeaponryEffect effect) { private ThranWeaponryEffect(final ThranWeaponryEffect effect) {

View file

@ -1,7 +1,6 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTappedAbility; import mage.abilities.common.EntersBattlefieldTappedAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
@ -15,13 +14,13 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Outcome; import mage.constants.Outcome;
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.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.players.Player; import mage.players.Player;
import java.util.UUID;
/** /**
* *
* @author emerald000 * @author emerald000
@ -59,7 +58,7 @@ class TimeVaultReplacementEffect extends ReplacementEffectImpl {
TimeVaultReplacementEffect() { TimeVaultReplacementEffect() {
super(Duration.WhileOnBattlefield, Outcome.Untap); super(Duration.WhileOnBattlefield, Outcome.Untap);
staticText = "If you would begin your turn while {this} is tapped, you may skip that turn instead. If you do, untap Time Vault."; staticText = "If you would begin your turn while {this} is tapped, you may skip that turn instead. If you do, untap {this}.";
} }
private TimeVaultReplacementEffect(final TimeVaultReplacementEffect effect) { private TimeVaultReplacementEffect(final TimeVaultReplacementEffect effect) {

View file

@ -2,29 +2,33 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.TriggeredAbilityImpl; import mage.ObjectColor;
import mage.abilities.common.SpellCastAllTriggeredAbility;
import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.game.Game; import mage.filter.FilterSpell;
import mage.game.events.GameEvent; import mage.filter.predicate.mageobject.ColorPredicate;
import mage.game.events.GameEvent.EventType;
import mage.game.stack.Spell; import java.util.UUID;
/** /**
*
* @author Backfir3 * @author Backfir3
*/ */
public final class TitaniasChosen extends CardImpl { public final class TitaniasChosen extends CardImpl {
private static final FilterSpell filter = new FilterSpell("green spell");
static {
filter.add(new ColorPredicate(ObjectColor.GREEN));
}
public TitaniasChosen(UUID ownerId, CardSetInfo setInfo) { public TitaniasChosen(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
this.subtype.add(SubType.ELF); this.subtype.add(SubType.ELF);
this.subtype.add(SubType.ARCHER); this.subtype.add(SubType.ARCHER);
@ -32,7 +36,7 @@ public final class TitaniasChosen extends CardImpl {
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// Whenever a player casts a green spell, put a +1/+1 counter on Titania's Chosen. // Whenever a player casts a green spell, put a +1/+1 counter on Titania's Chosen.
this.addAbility(new TitaniasChosenAbility()); this.addAbility(new SpellCastAllTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), filter, false));
} }
private TitaniasChosen(final TitaniasChosen card) { private TitaniasChosen(final TitaniasChosen card) {
@ -45,36 +49,3 @@ public final class TitaniasChosen extends CardImpl {
} }
} }
class TitaniasChosenAbility extends TriggeredAbilityImpl {
public TitaniasChosenAbility() {
super(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.P1P1.createInstance()));
}
private TitaniasChosenAbility(final TitaniasChosenAbility ability) {
super(ability);
}
@Override
public TitaniasChosenAbility copy() {
return new TitaniasChosenAbility(this);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.SPELL_CAST;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
Spell spell = game.getStack().getSpell(event.getTargetId());
return spell != null && spell.getColor(game).isGreen();
}
@Override
public String getRule() {
return "Whenever a player casts a green spell, put a +1/+1 counter on Titania's Chosen.";
}
}

View file

@ -70,8 +70,8 @@ class UglukOfTheWhiteHandEffect extends OneShotEffect {
public UglukOfTheWhiteHandEffect() { public UglukOfTheWhiteHandEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "put a +1/+1 counter on Ugluk of the White Hand. " + staticText = "put a +1/+1 counter on {this}. " +
"If that creature was a Goblin or Orc, put two +1/+1 counters on Ugluk instead."; "If that creature was a Goblin or Orc, put two +1/+1 counters on {this} instead.";
} }
private UglukOfTheWhiteHandEffect(final UglukOfTheWhiteHandEffect effect) { private UglukOfTheWhiteHandEffect(final UglukOfTheWhiteHandEffect effect) {

View file

@ -33,7 +33,7 @@ public final class UmbraStalker extends CardImpl {
// Chroma - Umbra Stalker's power and toughness are each equal to the number of black mana symbols in the mana costs of cards in your graveyard. // Chroma - Umbra Stalker's power and toughness are each equal to the number of black mana symbols in the mana costs of cards in your graveyard.
DynamicValue xValue = new ChromaUmbraStalkerCount(); DynamicValue xValue = new ChromaUmbraStalkerCount();
Effect effect = new SetBasePowerToughnessSourceEffect(xValue); Effect effect = new SetBasePowerToughnessSourceEffect(xValue);
effect.setText("<i>Chroma</i> &mdash; Umbra Stalker's power and toughness are each equal to the number of black mana symbols in the mana costs of cards in your graveyard."); effect.setText("<i>Chroma</i> &mdash; {this}'s power and toughness are each equal to the number of black mana symbols in the mana costs of cards in your graveyard.");
this.addAbility(new SimpleStaticAbility(Zone.ALL, effect) this.addAbility(new SimpleStaticAbility(Zone.ALL, effect)
.addHint(new ValueHint("Black mana symbols in your graveyard's permanents", xValue)) .addHint(new ValueHint("Black mana symbols in your graveyard's permanents", xValue))
); );

View file

@ -1,7 +1,6 @@
package mage.cards.u; package mage.cards.u;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
@ -9,20 +8,20 @@ import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ColoredManaCost; import mage.abilities.costs.mana.ColoredManaCost;
import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.DestroyTargetEffect;
import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.constants.SubType;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ColoredManaSymbol; import mage.constants.ColoredManaSymbol;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Zone; import mage.constants.SubType;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.ObjectSourcePlayer; import mage.filter.predicate.ObjectSourcePlayer;
import mage.filter.predicate.ObjectSourcePlayerPredicate; import mage.filter.predicate.ObjectSourcePlayerPredicate;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
* *
@ -30,7 +29,7 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class UnlivingPsychopath extends CardImpl { public final class UnlivingPsychopath extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with power less than Unliving Psychopath's power"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with power less than {this}'s power");
static { static {
filter.add(new UnlivingPsychopathPowerLessThanSourcePredicate()); filter.add(new UnlivingPsychopathPowerLessThanSourcePredicate());
@ -74,6 +73,6 @@ class UnlivingPsychopathPowerLessThanSourcePredicate implements ObjectSourcePlay
@Override @Override
public String toString() { public String toString() {
return "power less than Unliving Psychopath's power"; return "power less than {this}'s power";
} }
} }

View file

@ -1,7 +1,6 @@
package mage.cards.u; package mage.cards.u;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldAbility;
@ -16,6 +15,8 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.counters.CounterType; import mage.counters.CounterType;
import java.util.UUID;
/** /**
* *
* @author tcontis * @author tcontis
@ -39,7 +40,7 @@ public final class UntamedKavu extends CardImpl {
// If Untamed Kavu was kicked, it enters with three +1/+1 counters on it. // If Untamed Kavu was kicked, it enters with three +1/+1 counters on it.
Ability ability = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(3)), Ability ability = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(3)),
KickedCondition.ONCE, KickedCondition.ONCE,
"If Untamed Kavu was kicked, it enters with three +1/+1 counters on it.", ""); "If {this} was kicked, it enters with three +1/+1 counters on it.", "");
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -97,7 +97,7 @@ class ValkiGodOfLiesRevealExileEffect extends OneShotEffect {
ValkiGodOfLiesRevealExileEffect() { ValkiGodOfLiesRevealExileEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "each opponent reveals their hand. For each opponent, exile a creature card they revealed this way until Valki leaves the battlefield."; staticText = "each opponent reveals their hand. For each opponent, exile a creature card they revealed this way until {this} leaves the battlefield.";
} }
private ValkiGodOfLiesRevealExileEffect(final ValkiGodOfLiesRevealExileEffect effect) { private ValkiGodOfLiesRevealExileEffect(final ValkiGodOfLiesRevealExileEffect effect) {
@ -147,7 +147,7 @@ class ValkiGodOfLiesCopyExiledEffect extends OneShotEffect {
ValkiGodOfLiesCopyExiledEffect() { ValkiGodOfLiesCopyExiledEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "Choose a creature card exiled with Valki with mana value X. Valki becomes a copy of that card."; this.staticText = "Choose a creature card exiled with {this} with mana value X. {this} becomes a copy of that card.";
} }
private ValkiGodOfLiesCopyExiledEffect(final ValkiGodOfLiesCopyExiledEffect effect) { private ValkiGodOfLiesCopyExiledEffect(final ValkiGodOfLiesCopyExiledEffect effect) {

View file

@ -11,7 +11,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.players.Player; import mage.players.Player;
@ -53,7 +52,7 @@ class ViashinoHereticEffect extends OneShotEffect {
public ViashinoHereticEffect() { public ViashinoHereticEffect() {
super(Outcome.DestroyPermanent); super(Outcome.DestroyPermanent);
this.staticText = "Destroy target artifact. Viashino Heretic deals damage to that artifact's controller equal to the artifact's mana value"; this.staticText = "Destroy target artifact. {this} deals damage to that artifact's controller equal to the artifact's mana value";
} }
private ViashinoHereticEffect(final ViashinoHereticEffect effect) { private ViashinoHereticEffect(final ViashinoHereticEffect effect) {

View file

@ -16,7 +16,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.AbilityPredicate; import mage.filter.predicate.mageobject.AbilityPredicate;
@ -46,7 +45,7 @@ public final class VileManifestation extends CardImpl {
// Vile Manifestation gets +1/+0 for each card with cycling in your graveyard. // Vile Manifestation gets +1/+0 for each card with cycling in your graveyard.
DynamicValue amount = new CardsInControllerGraveyardCount(filter); DynamicValue amount = new CardsInControllerGraveyardCount(filter);
Effect effect = new BoostSourceEffect(amount, StaticValue.get(0), Duration.WhileOnBattlefield); Effect effect = new BoostSourceEffect(amount, StaticValue.get(0), Duration.WhileOnBattlefield);
effect.setText("Vile Manifestation gets +1/+0 for each card with cycling in your graveyard."); effect.setText("{this} gets +1/+0 for each card with cycling in your graveyard.");
Ability ability = new SimpleStaticAbility(effect); Ability ability = new SimpleStaticAbility(effect);
this.addAbility(ability); this.addAbility(ability);

View file

@ -1,7 +1,6 @@
package mage.cards.w; package mage.cards.w;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.DelayedTriggeredAbility; import mage.abilities.DelayedTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
@ -22,6 +21,8 @@ import mage.game.events.ZoneChangeEvent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import mage.target.targetpointer.FixedTarget; import mage.target.targetpointer.FixedTarget;
import java.util.UUID;
/** /**
* *
* @author L_J * @author L_J
@ -83,6 +84,6 @@ class WarBargeDelayedTriggeredAbility extends DelayedTriggeredAbility {
@Override @Override
public String getRule() { public String getRule() {
return "When War Barge leaves the battlefield this turn, destroy that creature. A creature destroyed this way can't be regenerated."; return "When {this} leaves the battlefield this turn, destroy that creature. A creature destroyed this way can't be regenerated.";
} }
} }

View file

@ -14,7 +14,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone;
import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.TokenImpl;
import java.util.UUID; import java.util.UUID;
@ -37,7 +36,7 @@ public final class WardenOfTheWall extends CardImpl {
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
new BecomesCreatureSourceEffect(new GargoyleToken(), CardType.ARTIFACT, Duration.WhileOnBattlefield), new BecomesCreatureSourceEffect(new GargoyleToken(), CardType.ARTIFACT, Duration.WhileOnBattlefield),
NotMyTurnCondition.instance, NotMyTurnCondition.instance,
"During turns other than yours, Warden of the Wall is a 2/3 Gargoyle artifact creature with flying")) "During turns other than yours, {this} is a 2/3 Gargoyle artifact creature with flying"))
.addHint(NotMyTurnHint.instance)); .addHint(NotMyTurnHint.instance));
} }

View file

@ -1,6 +1,5 @@
package mage.cards.w; package mage.cards.w;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@ -16,6 +15,8 @@ import mage.game.Game;
import mage.players.Player; import mage.players.Player;
import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
/** /**
* *
* @author LevelX2 * @author LevelX2
@ -50,7 +51,7 @@ class WarrenPilferersReturnEffect extends OneShotEffect {
WarrenPilferersReturnEffect() { WarrenPilferersReturnEffect() {
super(Outcome.ReturnToHand); super(Outcome.ReturnToHand);
staticText = "return target creature card from your graveyard to your hand. If that card is a Goblin card, Warren Pilferers gains haste until end of turn"; staticText = "return target creature card from your graveyard to your hand. If that card is a Goblin card, {this} gains haste until end of turn";
} }
private WarrenPilferersReturnEffect(final WarrenPilferersReturnEffect effect) { private WarrenPilferersReturnEffect(final WarrenPilferersReturnEffect effect) {

View file

@ -1,14 +1,15 @@
package mage.cards.w; package mage.cards.w;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.InfoEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.InfoEffect; import java.util.UUID;
/** /**
* *
@ -26,10 +27,10 @@ public final class WhispergearSneak extends CardImpl {
// TODO: Draft specific abilities not implemented // TODO: Draft specific abilities not implemented
// Draft Whispergear Sneak face up. // Draft Whispergear Sneak face up.
this.addAbility(new SimpleStaticAbility(Zone.ALL, new InfoEffect("Draft Whispergear Sneak face up - not implemented."))); this.addAbility(new SimpleStaticAbility(Zone.ALL, new InfoEffect("Draft {this} face up - not implemented.")));
// During the draft, you may turn Whispergear Sneak face down. If you do, look at any unopened booster pack in the draft or any booster pack not being looked at by another player. // During the draft, you may turn Whispergear Sneak face down. If you do, look at any unopened booster pack in the draft or any booster pack not being looked at by another player.
this.addAbility(new SimpleStaticAbility(Zone.ALL, new InfoEffect("During the draft, you may turn Whispergear Sneak face down. If you do, " this.addAbility(new SimpleStaticAbility(Zone.ALL, new InfoEffect("During the draft, you may turn {this} face down. If you do, "
+ "look at any unopened booster pack in the draft or any booster pack not being looked at by another player - not implemented."))); + "look at any unopened booster pack in the draft or any booster pack not being looked at by another player - not implemented.")));
} }

View file

@ -1,7 +1,6 @@
package mage.cards.w; package mage.cards.w;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
@ -10,9 +9,8 @@ import mage.abilities.effects.common.LoseLifeTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.ColoredManaSymbol; import mage.constants.ColoredManaSymbol;
import mage.constants.Zone; import mage.constants.SubType;
import mage.filter.FilterPlayer; import mage.filter.FilterPlayer;
import mage.filter.predicate.ObjectSourcePlayer; import mage.filter.predicate.ObjectSourcePlayer;
import mage.filter.predicate.ObjectSourcePlayerPredicate; import mage.filter.predicate.ObjectSourcePlayerPredicate;
@ -21,13 +19,15 @@ import mage.players.Player;
import mage.target.TargetPlayer; import mage.target.TargetPlayer;
import mage.watchers.common.PlayerDamagedBySourceWatcher; import mage.watchers.common.PlayerDamagedBySourceWatcher;
import java.util.UUID;
/** /**
* *
* @author North * @author North
*/ */
public final class WickedAkuba extends CardImpl { public final class WickedAkuba extends CardImpl {
private static final FilterPlayer filter = new FilterPlayer("player dealt damage by Wicked Akuba this turn"); private static final FilterPlayer filter = new FilterPlayer("player dealt damage by {this} this turn");
static { static {
filter.add(new WickedAkubaPredicate()); filter.add(new WickedAkubaPredicate());

View file

@ -1,7 +1,6 @@
package mage.cards.w; package mage.cards.w;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.TriggeredAbilityImpl; import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect;
@ -18,6 +17,8 @@ import mage.counters.CounterType;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import java.util.UUID;
/** /**
* *
* @author BetaSteward * @author BetaSteward
@ -81,6 +82,6 @@ class WithengarUnboundTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Whenever a player loses the game, put thirteen +1/+1 counters on Withengar Unbound."; return "Whenever a player loses the game, put thirteen +1/+1 counters on {this}.";
} }
} }

View file

@ -1,10 +1,8 @@
package mage.cards.y; package mage.cards.y;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.Effect; import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.DoIfCostPaid;
@ -13,20 +11,18 @@ import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
import mage.abilities.effects.common.continuous.GainControlTargetEffect; import mage.abilities.effects.common.continuous.GainControlTargetEffect;
import mage.abilities.keyword.HasteAbility; import mage.abilities.keyword.HasteAbility;
import mage.abilities.keyword.TrampleAbility; import mage.abilities.keyword.TrampleAbility;
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.*;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.SuperType;
import mage.constants.TargetController;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.ObjectSourcePlayer; import mage.filter.predicate.ObjectSourcePlayer;
import mage.filter.predicate.ObjectSourcePlayerPredicate; import mage.filter.predicate.ObjectSourcePlayerPredicate;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
* *
@ -34,7 +30,7 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class YasovaDragonclaw extends CardImpl { public final class YasovaDragonclaw extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls with power less than Yasova Dragonclaw's power"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls with power less than {this}'s power");
static { static {
filter.add(new YasovaDragonclawPowerLessThanSourcePredicate()); filter.add(new YasovaDragonclawPowerLessThanSourcePredicate());
@ -82,6 +78,6 @@ class YasovaDragonclawPowerLessThanSourcePredicate implements ObjectSourcePlayer
@Override @Override
public String toString() { public String toString() {
return "power less than Yasova Dragonclaw's power"; return "power less than {this}'s power";
} }
} }

View file

@ -1,7 +1,6 @@
package mage.cards.y; package mage.cards.y;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.PutIntoGraveFromBattlefieldAllTriggeredAbility; import mage.abilities.common.PutIntoGraveFromBattlefieldAllTriggeredAbility;
import mage.abilities.effects.Effect; import mage.abilities.effects.Effect;
@ -14,14 +13,21 @@ import mage.constants.SuperType;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate; import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class YomijiWhoBarsTheWay extends CardImpl { public final class YomijiWhoBarsTheWay extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent("a legendary permanent other than {this}");
static {
filter.add(AnotherPredicate.instance);
filter.add(SuperType.LEGENDARY.getPredicate());
}
public YomijiWhoBarsTheWay(UUID ownerId, CardSetInfo setInfo) { public YomijiWhoBarsTheWay(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{W}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{W}{W}");
this.supertype.add(SuperType.LEGENDARY); this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.SPIRIT); this.subtype.add(SubType.SPIRIT);
@ -29,11 +35,7 @@ public final class YomijiWhoBarsTheWay extends CardImpl {
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
// Whenever a legendary permanent other than Yomiji, Who Bars the Way is put into a graveyard from the battlefield, return that card to its owner's hand. // Whenever a legendary permanent other than Yomiji, Who Bars the Way is put into a graveyard from the battlefield, return that card to its owner's hand.
FilterPermanent filter = new FilterPermanent("a legendary permanent other than " + getName()); Effect effect = new ReturnToHandTargetEffect().setText("return that card to its owner's hand");
filter.add(AnotherPredicate.instance);
filter.add(SuperType.LEGENDARY.getPredicate());
Effect effect = new ReturnToHandTargetEffect();
effect.setText("return that card to its owner's hand");
this.addAbility(new PutIntoGraveFromBattlefieldAllTriggeredAbility(effect, false, filter, true)); this.addAbility(new PutIntoGraveFromBattlefieldAllTriggeredAbility(effect, false, filter, true));
} }

View file

@ -1,7 +1,6 @@
package mage.cards.z; package mage.cards.z;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.TriggeredAbilityImpl; import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.Effect; import mage.abilities.effects.Effect;
@ -18,6 +17,8 @@ import mage.game.permanent.Permanent;
import mage.players.Player; import mage.players.Player;
import mage.target.targetpointer.FixedTarget; import mage.target.targetpointer.FixedTarget;
import java.util.UUID;
/** /**
* *
* @author LevelX * @author LevelX
@ -82,6 +83,6 @@ class ZoZuThePunisherAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Whenever a land enters the battlefield, Zo-Zu the Punisher deals 2 damage to that land's controller."; return "Whenever a land enters the battlefield, {this} deals 2 damage to that land's controller.";
} }
} }