From 5e83c3c3f00bfd2b59eda081325f8f0b09e46666 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Sun, 1 Jun 2025 17:10:15 -0400 Subject: [PATCH] various text fixes --- .../src/mage/cards/a/ArclightPhoenix.java | 50 +++++------ Mage.Sets/src/mage/cards/a/ArmoryGuard.java | 26 +++--- .../src/mage/cards/b/BlindObedience.java | 2 +- .../mage/cards/b/BraidsArisenNightmare.java | 2 +- Mage.Sets/src/mage/cards/c/Chainsaw.java | 3 +- Mage.Sets/src/mage/cards/c/ChaliceOfLife.java | 61 +++---------- .../src/mage/cards/c/CryptidInspector.java | 24 ++--- .../src/mage/cards/d/DeathmistRaptor.java | 2 +- .../src/mage/cards/d/DemonicTaskmaster.java | 2 +- .../src/mage/cards/d/DistendedMindbender.java | 2 +- .../src/mage/cards/e/EdgarsAwakening.java | 7 +- Mage.Sets/src/mage/cards/e/ExperimentOne.java | 7 +- .../mage/cards/f/FearOfSleepParalysis.java | 4 +- Mage.Sets/src/mage/cards/g/GryffsBoon.java | 2 +- Mage.Sets/src/mage/cards/h/HauntedScreen.java | 3 +- .../mage/cards/k/KaitoBaneOfNightmares.java | 2 +- .../src/mage/cards/k/KheruSpellsnatcher.java | 2 +- .../mage/cards/l/LaviniaAzoriusRenegade.java | 2 +- Mage.Sets/src/mage/cards/m/Malfegor.java | 33 +++---- .../src/mage/cards/m/MogisGodOfSlaughter.java | 2 +- .../src/mage/cards/n/NeglectedHeirloom.java | 9 +- .../src/mage/cards/n/NikoLightOfHope.java | 4 +- Mage.Sets/src/mage/cards/p/Plaguecrafter.java | 2 +- .../mage/cards/r/RashmiEternitiesCrafter.java | 90 +++++++------------ Mage.Sets/src/mage/cards/s/SharkTyphoon.java | 2 +- .../mage/cards/t/TamiyoFieldResearcher.java | 10 +-- .../src/mage/cards/t/ThroughTheBreach.java | 3 +- .../src/mage/cards/t/ThunderfootBaloth.java | 2 +- Mage.Sets/src/mage/cards/t/TimelyWard.java | 9 +- .../src/mage/cards/w/WoebringerDemon.java | 2 +- .../java/mage/verify/VerifyCardDataTest.java | 2 +- ...raveFromLibrarySourceTriggeredAbility.java | 2 +- .../common/RevealSourceFromYourHandCost.java | 30 +++---- .../effects/common/DamageTargetEffect.java | 17 ++-- .../common/continuous/WUBRGInsteadEffect.java | 2 +- .../ArlinnEmbracedByTheMoonEmblem.java | 2 +- .../game/permanent/token/BeastieToken.java | 2 +- .../token/SeizeTheStormElementalToken.java | 4 +- .../token/WrennAndSevenTreefolkToken.java | 4 +- 39 files changed, 179 insertions(+), 257 deletions(-) diff --git a/Mage.Sets/src/mage/cards/a/ArclightPhoenix.java b/Mage.Sets/src/mage/cards/a/ArclightPhoenix.java index e4000613e0f..2332e95e80d 100644 --- a/Mage.Sets/src/mage/cards/a/ArclightPhoenix.java +++ b/Mage.Sets/src/mage/cards/a/ArclightPhoenix.java @@ -2,18 +2,18 @@ package mage.cards.a; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.triggers.BeginningOfCombatTriggeredAbility; import mage.abilities.condition.Condition; -import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; import mage.abilities.effects.common.ReturnSourceFromGraveyardToBattlefieldEffect; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.HasteAbility; +import mage.abilities.triggers.BeginningOfCombatTriggeredAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.stack.Spell; +import mage.util.CardUtil; import mage.watchers.Watcher; import java.util.HashMap; @@ -39,17 +39,10 @@ public final class ArclightPhoenix extends CardImpl { this.addAbility(HasteAbility.getInstance()); // At the beginning of combat on your turn, if you cast 3 or more instants and/or sorceries this turn, return Arclight Phoenix from your graveyard to the battlefield. - this.addAbility(new ConditionalInterveningIfTriggeredAbility( - new BeginningOfCombatTriggeredAbility( - Zone.GRAVEYARD, - TargetController.YOU, new ReturnSourceFromGraveyardToBattlefieldEffect(), - false - ), ArclightPhoenixCondition.instance, - "At the beginning of combat on your turn, " - + "if you've cast three or more instant " - + "and sorcery spells this turn, return {this} " - + "from your graveyard to the battlefield." - ), new ArclightPhoenixWatcher()); + this.addAbility(new BeginningOfCombatTriggeredAbility( + Zone.GRAVEYARD, TargetController.YOU, + new ReturnSourceFromGraveyardToBattlefieldEffect(), false + ).withInterveningIf(ArclightPhoenixCondition.instance), new ArclightPhoenixWatcher()); } private ArclightPhoenix(final ArclightPhoenix card) { @@ -67,8 +60,12 @@ enum ArclightPhoenixCondition implements Condition { @Override public boolean apply(Game game, Ability source) { - ArclightPhoenixWatcher watcher = game.getState().getWatcher(ArclightPhoenixWatcher.class); - return watcher != null && watcher.getInstantSorceryCount(source.getControllerId()) > 2; + return ArclightPhoenixWatcher.getInstantSorceryCount(game, source); + } + + @Override + public String toString() { + return "you've cast three or more instant and sorcery spells this turn"; } } @@ -82,15 +79,12 @@ class ArclightPhoenixWatcher extends Watcher { @Override public void watch(GameEvent event, Game game) { - if (event.getType() == GameEvent.EventType.SPELL_CAST) { - Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell == null || !spell.isInstantOrSorcery(game)) { - return; - } - this.instantSorceryCount.putIfAbsent(spell.getControllerId(), 0); - this.instantSorceryCount.compute( - spell.getControllerId(), (k, a) -> a + 1 - ); + if (event.getType() != GameEvent.EventType.SPELL_CAST) { + return; + } + Spell spell = game.getStack().getSpell(event.getTargetId()); + if (spell != null && spell.isInstantOrSorcery(game)) { + this.instantSorceryCount.compute(spell.getControllerId(), CardUtil::setOrIncrementValue); } } @@ -100,7 +94,11 @@ class ArclightPhoenixWatcher extends Watcher { this.instantSorceryCount.clear(); } - int getInstantSorceryCount(UUID playerId) { - return this.instantSorceryCount.getOrDefault(playerId, 0); + static boolean getInstantSorceryCount(Game game, Ability source) { + return game + .getState() + .getWatcher(ArclightPhoenixWatcher.class) + .instantSorceryCount + .getOrDefault(source.getControllerId(), 0) >= 3; } } diff --git a/Mage.Sets/src/mage/cards/a/ArmoryGuard.java b/Mage.Sets/src/mage/cards/a/ArmoryGuard.java index 6b20c41adaa..ea8a354fc45 100644 --- a/Mage.Sets/src/mage/cards/a/ArmoryGuard.java +++ b/Mage.Sets/src/mage/cards/a/ArmoryGuard.java @@ -1,9 +1,9 @@ package mage.cards.a; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.Condition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; @@ -12,25 +12,19 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.FilterPermanent; +import mage.filter.common.FilterControlledPermanent; + +import java.util.UUID; /** - * * @author jeffwadsworth */ public final class ArmoryGuard extends CardImpl { - - private static final String rule = "Armory Guard has vigilance as long as you control a Gate"; - - private static final FilterPermanent filter = new FilterPermanent("Gate"); - - static { - filter.add(SubType.GATE.getPredicate()); - } + + private static final Condition condition = new PermanentsOnTheBattlefieldCondition(new FilterControlledPermanent(SubType.GATE)); public ArmoryGuard(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}"); this.subtype.add(SubType.GIANT); this.subtype.add(SubType.SOLDIER); @@ -38,8 +32,10 @@ public final class ArmoryGuard extends CardImpl { this.toughness = new MageInt(5); // Armory Guard has vigilance as long as you control a Gate. - ConditionalContinuousEffect effect = new ConditionalContinuousEffect(new GainAbilitySourceEffect(VigilanceAbility.getInstance()), new PermanentsOnTheBattlefieldCondition(filter), rule); - this.addAbility(new SimpleStaticAbility(effect)); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(VigilanceAbility.getInstance()), + condition, "{this} has vigilance as long as you control a Gate" + ))); } private ArmoryGuard(final ArmoryGuard card) { diff --git a/Mage.Sets/src/mage/cards/b/BlindObedience.java b/Mage.Sets/src/mage/cards/b/BlindObedience.java index 5f0a7323da0..a8c942dd0ad 100644 --- a/Mage.Sets/src/mage/cards/b/BlindObedience.java +++ b/Mage.Sets/src/mage/cards/b/BlindObedience.java @@ -24,7 +24,7 @@ public final class BlindObedience extends CardImpl { // Artifacts and creatures your opponents control enter the battlefield tapped. this.addAbility(new SimpleStaticAbility(new PermanentsEnterBattlefieldTappedEffect( StaticFilters.FILTER_OPPONENTS_PERMANENT_ARTIFACT_OR_CREATURE - ).setText("artifacts and creatures your opponents control enter the battlefield tapped"))); + ).setText("artifacts and creatures your opponents control enter tapped"))); } diff --git a/Mage.Sets/src/mage/cards/b/BraidsArisenNightmare.java b/Mage.Sets/src/mage/cards/b/BraidsArisenNightmare.java index 54769817e1d..809a042df26 100644 --- a/Mage.Sets/src/mage/cards/b/BraidsArisenNightmare.java +++ b/Mage.Sets/src/mage/cards/b/BraidsArisenNightmare.java @@ -67,7 +67,7 @@ class BraidsArisenNightmareEffect extends OneShotEffect { public BraidsArisenNightmareEffect() { super(Outcome.Sacrifice); this.staticText = "you may sacrifice an artifact, creature, enchantment, land, or planeswalker. " + - "If you do, each opponent may sacrifice a permanent that shares a card type with it. " + + "If you do, each opponent may sacrifice a permanent of their choice that shares a card type with it. " + "For each opponent who doesn't, that player loses 2 life and you draw a card"; } diff --git a/Mage.Sets/src/mage/cards/c/Chainsaw.java b/Mage.Sets/src/mage/cards/c/Chainsaw.java index 8477a05584a..9dbc3fa349a 100644 --- a/Mage.Sets/src/mage/cards/c/Chainsaw.java +++ b/Mage.Sets/src/mage/cards/c/Chainsaw.java @@ -43,7 +43,8 @@ public final class Chainsaw extends CardImpl { StaticFilters.FILTER_PERMANENT_CREATURES, false)); // Equipped creature gets +X/+0, where X is the number of rev counters on Chainsaw. - this.addAbility(new SimpleStaticAbility(new BoostEquippedEffect(xValue, StaticValue.get(0)))); + this.addAbility(new SimpleStaticAbility(new BoostEquippedEffect(xValue, StaticValue.get(0)) + .setText("equipped creature gets +X/+0, where X is the number of rev counters on {this}"))); // Equip {3} this.addAbility(new EquipAbility(3, false)); diff --git a/Mage.Sets/src/mage/cards/c/ChaliceOfLife.java b/Mage.Sets/src/mage/cards/c/ChaliceOfLife.java index 8f436e29e57..f809074e503 100644 --- a/Mage.Sets/src/mage/cards/c/ChaliceOfLife.java +++ b/Mage.Sets/src/mage/cards/c/ChaliceOfLife.java @@ -1,36 +1,37 @@ - package mage.cards.c; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.condition.common.MoreThanStartingLifeTotalCondition; import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.keyword.TransformAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; + +import java.util.UUID; /** - * * @author intimidatingant */ public final class ChaliceOfLife extends CardImpl { public ChaliceOfLife(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{3}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); this.secondSideCardClazz = mage.cards.c.ChaliceOfDeath.class; this.addAbility(new TransformAbility()); - // {tap}: You gain 1 life. Then if you have at least 10 life more than your starting life total, transform Chalice of Life. - this.addAbility(new SimpleActivatedAbility(new ChaliceOfLifeEffect(), new TapSourceCost())); + Ability ability = new SimpleActivatedAbility(new GainLifeEffect(1), new TapSourceCost()); + ability.addEffect(new ConditionalOneShotEffect( + new TransformSourceEffect(), MoreThanStartingLifeTotalCondition.TEN, + "Then if you have at least 10 life more than your starting life total, transform {this}" + )); + this.addAbility(ability); } private ChaliceOfLife(final ChaliceOfLife card) { @@ -42,39 +43,3 @@ public final class ChaliceOfLife extends CardImpl { return new ChaliceOfLife(this); } } - -class ChaliceOfLifeEffect extends OneShotEffect { - - ChaliceOfLifeEffect() { - super(Outcome.GainLife); - staticText = "You gain 1 life. Then if you have at least 10 life more than your starting life total, transform Chalice of Life"; - } - - private ChaliceOfLifeEffect(final ChaliceOfLifeEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanent(source.getSourceId()); - if (permanent != null) { - Player player = game.getPlayer(source.getControllerId()); - if(player != null) { - //gain 1 life - player.gainLife(1, game, source); - - // if you have at least 10 life more than your starting life total, transform Chalice of Life. - if (player.getLife() >= game.getStartingLife() + 10) { - permanent.transform(source, game); - } - } - } - return false; - } - - @Override - public ChaliceOfLifeEffect copy() { - return new ChaliceOfLifeEffect(this); - } - -} diff --git a/Mage.Sets/src/mage/cards/c/CryptidInspector.java b/Mage.Sets/src/mage/cards/c/CryptidInspector.java index 2481532b2ff..f7caa7f7bb8 100644 --- a/Mage.Sets/src/mage/cards/c/CryptidInspector.java +++ b/Mage.Sets/src/mage/cards/c/CryptidInspector.java @@ -1,7 +1,5 @@ package mage.cards.c; -import java.util.UUID; - import mage.MageInt; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; import mage.abilities.common.TurnedFaceUpAllTriggeredAbility; @@ -18,12 +16,14 @@ import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.card.FaceDownPredicate; +import java.util.UUID; + /** * @author jackd149 */ public final class CryptidInspector extends CardImpl { private static final FilterPermanent filter1 = new FilterPermanent("a face-down permanent"); - private static final FilterPermanent filter2 = new FilterControlledPermanent("Cryptid Inspector or another permanent you control"); + private static final FilterPermanent filter2 = new FilterControlledPermanent(); static { filter1.add(FaceDownPredicate.instance); @@ -40,17 +40,17 @@ public final class CryptidInspector extends CardImpl { // Whenever a face-down permanent you control enters and whenever Cryptid Inspector or another permanent you control is turned face up, // put a +1/+1 counter on Cryptid Inspector. this.addAbility(new OrTriggeredAbility( - Zone.BATTLEFIELD, - new AddCountersSourceEffect(CounterType.P1P1.createInstance()), - false, - "Whenever a face-down permanent you control enters and " - + "whenever Cryptid Inspector or another permanent you control is turned face up, ", - new EntersBattlefieldControlledTriggeredAbility(null, filter1), - new TurnedFaceUpAllTriggeredAbility(null, filter2) + Zone.BATTLEFIELD, + new AddCountersSourceEffect(CounterType.P1P1.createInstance()), + false, + "Whenever a face-down permanent you control enters and " + + "whenever {this} or another permanent you control is turned face up, ", + new EntersBattlefieldControlledTriggeredAbility(null, filter1), + new TurnedFaceUpAllTriggeredAbility(null, filter2) )); } - private CryptidInspector(final CryptidInspector card){ + private CryptidInspector(final CryptidInspector card) { super(card); } @@ -58,4 +58,4 @@ public final class CryptidInspector extends CardImpl { public CryptidInspector copy() { return new CryptidInspector(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/d/DeathmistRaptor.java b/Mage.Sets/src/mage/cards/d/DeathmistRaptor.java index 3726d9e2150..3b3e02f246c 100644 --- a/Mage.Sets/src/mage/cards/d/DeathmistRaptor.java +++ b/Mage.Sets/src/mage/cards/d/DeathmistRaptor.java @@ -58,7 +58,7 @@ class DeathmistRaptorEffect extends OneShotEffect { DeathmistRaptorEffect() { super(Outcome.Benefit); - this.staticText = "you may return {this} from your graveyard to the battlefield face up or face down"; + this.staticText = "you may return this card from your graveyard to the battlefield face up or face down"; } private DeathmistRaptorEffect(final DeathmistRaptorEffect effect) { diff --git a/Mage.Sets/src/mage/cards/d/DemonicTaskmaster.java b/Mage.Sets/src/mage/cards/d/DemonicTaskmaster.java index d3059c545f2..96bb4c160ac 100644 --- a/Mage.Sets/src/mage/cards/d/DemonicTaskmaster.java +++ b/Mage.Sets/src/mage/cards/d/DemonicTaskmaster.java @@ -20,7 +20,7 @@ import mage.filter.predicate.mageobject.AnotherPredicate; */ public final class DemonicTaskmaster extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a creature other than Demonic Taskmaster"); + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a creature other than {this}"); static { filter.add(AnotherPredicate.instance); diff --git a/Mage.Sets/src/mage/cards/d/DistendedMindbender.java b/Mage.Sets/src/mage/cards/d/DistendedMindbender.java index 954e6261132..d12bec48bd7 100644 --- a/Mage.Sets/src/mage/cards/d/DistendedMindbender.java +++ b/Mage.Sets/src/mage/cards/d/DistendedMindbender.java @@ -66,7 +66,7 @@ class DistendedMindbenderEffect extends OneShotEffect { public DistendedMindbenderEffect() { super(Outcome.Discard); this.staticText = "target opponent reveals their hand. " + - "You choose from it a nonland card with mana value 3 or less and a card with mana value 4 or greater." + + "You choose from it a nonland card with mana value 3 or less and a card with mana value 4 or greater. " + "That player discards those cards."; } diff --git a/Mage.Sets/src/mage/cards/e/EdgarsAwakening.java b/Mage.Sets/src/mage/cards/e/EdgarsAwakening.java index 5e97ea7cb09..66bf82d5c73 100644 --- a/Mage.Sets/src/mage/cards/e/EdgarsAwakening.java +++ b/Mage.Sets/src/mage/cards/e/EdgarsAwakening.java @@ -56,6 +56,7 @@ class EdgarsAwakeningTriggeredAbility extends TriggeredAbilityImpl { EdgarsAwakeningTriggeredAbility() { super(Zone.ALL, new DoWhenCostPaid(makeAbility(), new ManaCostsImpl<>("{B}"), "Pay {B}?")); + this.setTriggerPhrase("When you discard this card, "); } private EdgarsAwakeningTriggeredAbility(final EdgarsAwakeningTriggeredAbility ability) { @@ -76,10 +77,4 @@ class EdgarsAwakeningTriggeredAbility extends TriggeredAbilityImpl { public boolean checkTrigger(GameEvent event, Game game) { return this.getSourceId().equals(event.getTargetId()); } - - @Override - public String getRule() { - return "When you discard {this}, you may pay {B}. " + - "When you do, return target creature card from your graveyard to your hand."; - } } diff --git a/Mage.Sets/src/mage/cards/e/ExperimentOne.java b/Mage.Sets/src/mage/cards/e/ExperimentOne.java index dd3989f1704..b262f1def2a 100644 --- a/Mage.Sets/src/mage/cards/e/ExperimentOne.java +++ b/Mage.Sets/src/mage/cards/e/ExperimentOne.java @@ -1,6 +1,5 @@ package mage.cards.e; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.RemoveCountersSourceCost; @@ -10,11 +9,11 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; import mage.counters.CounterType; +import java.util.UUID; + /** - * * @author Plopman */ public final class ExperimentOne extends CardImpl { @@ -32,7 +31,7 @@ public final class ExperimentOne extends CardImpl { this.addAbility(new EvolveAbility()); //Remove two +1/+1 counters from Experiment One: Regenerate Experiment One. - this.addAbility(new SimpleActivatedAbility(new RegenerateSourceEffect(), new RemoveCountersSourceCost(CounterType.P1P1.createInstance(2)))); + this.addAbility(new SimpleActivatedAbility(new RegenerateSourceEffect("it"), new RemoveCountersSourceCost(CounterType.P1P1.createInstance(2)))); } private ExperimentOne(final ExperimentOne card) { diff --git a/Mage.Sets/src/mage/cards/f/FearOfSleepParalysis.java b/Mage.Sets/src/mage/cards/f/FearOfSleepParalysis.java index db977eb225d..eab4edbe21d 100644 --- a/Mage.Sets/src/mage/cards/f/FearOfSleepParalysis.java +++ b/Mage.Sets/src/mage/cards/f/FearOfSleepParalysis.java @@ -38,7 +38,7 @@ public final class FearOfSleepParalysis extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Eerie -- Whenever Fear of Sleep Paralysis or another enchantment you control enters and whenever you fully unlock a Room, tap up to one target creature and put a stun counter on it. - Ability ability = new EerieAbility(new TapTargetEffect()); + Ability ability = new EerieAbility(new TapTargetEffect()).setTriggerPhrase("Whenever this creature or another enchantment you control enters and whenever you fully unlock a Room, "); ability.addEffect(new AddCountersTargetEffect(CounterType.STUN.createInstance()).setText("and put a stun counter on it")); ability.addTarget(new TargetCreaturePermanent(0, 1)); this.addAbility(ability); @@ -89,4 +89,4 @@ class FearOfSleepParalysisEffect extends ReplacementEffectImpl { return target != null && event.getData().equals(CounterType.STUN.getName()) && !target.getControllerId().equals(source.getControllerId()); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/g/GryffsBoon.java b/Mage.Sets/src/mage/cards/g/GryffsBoon.java index 5f56a7ade08..213309ba88c 100644 --- a/Mage.Sets/src/mage/cards/g/GryffsBoon.java +++ b/Mage.Sets/src/mage/cards/g/GryffsBoon.java @@ -66,7 +66,7 @@ class GryffsBoonEffect extends OneShotEffect { GryffsBoonEffect() { super(Outcome.PutCardInPlay); - staticText = "Return {this} from your graveyard to the battlefield attached to target creature"; + staticText = "Return this card from your graveyard to the battlefield attached to target creature"; } private GryffsBoonEffect(final GryffsBoonEffect effect) { diff --git a/Mage.Sets/src/mage/cards/h/HauntedScreen.java b/Mage.Sets/src/mage/cards/h/HauntedScreen.java index 773a04ee2f7..24bb9b85055 100644 --- a/Mage.Sets/src/mage/cards/h/HauntedScreen.java +++ b/Mage.Sets/src/mage/cards/h/HauntedScreen.java @@ -46,7 +46,8 @@ public final class HauntedScreen extends CardImpl { ); ability.addEffect(new BecomesCreatureSourceEffect(new CreatureToken( 0, 0, "0/0 Spirit creature", SubType.SPIRIT - ), CardType.ARTIFACT, Duration.Custom).withKeepCreatureSubtypes(true)); + ), CardType.ARTIFACT, Duration.Custom).withKeepCreatureSubtypes(true) + .setText("It becomes a 0/0 Spirit creature in addition to its other types")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/k/KaitoBaneOfNightmares.java b/Mage.Sets/src/mage/cards/k/KaitoBaneOfNightmares.java index f7d515aa699..af7f274d3cf 100644 --- a/Mage.Sets/src/mage/cards/k/KaitoBaneOfNightmares.java +++ b/Mage.Sets/src/mage/cards/k/KaitoBaneOfNightmares.java @@ -63,7 +63,7 @@ public final class KaitoBaneOfNightmares extends CardImpl { // 0: Surveil 2. Then draw a card for each opponent who lost life this turn. Ability ability = new LoyaltyAbility(new SurveilEffect(2), 0); - ability.addEffect(new DrawCardSourceControllerEffect(KaitoBaneOfNightmaresCount.instance)); + ability.addEffect(new DrawCardSourceControllerEffect(KaitoBaneOfNightmaresCount.instance).concatBy("Then")); this.addAbility(ability); // -2: Tap target creature. Put two stun counters on it. diff --git a/Mage.Sets/src/mage/cards/k/KheruSpellsnatcher.java b/Mage.Sets/src/mage/cards/k/KheruSpellsnatcher.java index 2007ecb6737..02308a13a9f 100644 --- a/Mage.Sets/src/mage/cards/k/KheruSpellsnatcher.java +++ b/Mage.Sets/src/mage/cards/k/KheruSpellsnatcher.java @@ -56,7 +56,7 @@ class KheruSpellsnatcherEffect extends OneShotEffect { super(Outcome.Benefit); this.staticText = "counter target spell. If that spell is countered this way, " + "exile it instead of putting it into its owner's graveyard. " - + "You may cast that card without paying its mana cost as long as it remains exiled"; + + "You may cast that card without paying its mana cost for as long as it remains exiled"; } private KheruSpellsnatcherEffect(final KheruSpellsnatcherEffect effect) { diff --git a/Mage.Sets/src/mage/cards/l/LaviniaAzoriusRenegade.java b/Mage.Sets/src/mage/cards/l/LaviniaAzoriusRenegade.java index 5dd5ac6e8d5..534cbbc9dd3 100644 --- a/Mage.Sets/src/mage/cards/l/LaviniaAzoriusRenegade.java +++ b/Mage.Sets/src/mage/cards/l/LaviniaAzoriusRenegade.java @@ -42,7 +42,7 @@ public final class LaviniaAzoriusRenegade extends CardImpl { // Whenever an opponent casts a spell, if no mana was spent to cast it, counter that spell. this.addAbility(new SpellCastOpponentTriggeredAbility( Zone.BATTLEFIELD, new CounterTargetEffect(), - StaticFilters.FILTER_SPELL_NO_MANA_SPENT, false, true + StaticFilters.FILTER_SPELL_NO_MANA_SPENT, false )); } diff --git a/Mage.Sets/src/mage/cards/m/Malfegor.java b/Mage.Sets/src/mage/cards/m/Malfegor.java index 350a076c26b..8b81dc09beb 100644 --- a/Mage.Sets/src/mage/cards/m/Malfegor.java +++ b/Mage.Sets/src/mage/cards/m/Malfegor.java @@ -1,25 +1,26 @@ package mage.cards.m; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.SacrificeOpponentsEffect; -import mage.abilities.effects.common.discard.DiscardHandControllerEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Outcome; +import mage.constants.SubType; import mage.constants.SuperType; import mage.filter.StaticFilters; +import mage.game.Controllable; import mage.game.Game; -import mage.players.Player; + +import java.util.Optional; +import java.util.Set; +import java.util.UUID; /** - * * @author jeffwadsworth */ public final class Malfegor extends CardImpl { @@ -38,7 +39,6 @@ public final class Malfegor extends CardImpl { // When Malfegor enters the battlefield, discard your hand. Each opponent sacrifices a creature for each card discarded this way. this.addAbility(new EntersBattlefieldTriggeredAbility(new MalfegorEffect(), false)); - } private Malfegor(final Malfegor card) { @@ -64,16 +64,17 @@ class MalfegorEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller == null) { - return false; - } - int sacrificeNumber = controller.getHand().size(); - if (sacrificeNumber == 0) { - return true; - } - new DiscardHandControllerEffect().apply(game, source); - return new SacrificeOpponentsEffect(sacrificeNumber, StaticFilters.FILTER_CONTROLLED_CREATURE).apply(game, source); + return Optional + .ofNullable(source) + .map(Controllable::getControllerId) + .map(game::getPlayer) + .filter(player -> !player.getHand().isEmpty()) + .map(player -> player.discard(player.getHand(), false, source, game)) + .map(Set::size) + .filter(amount -> amount > 0 && new SacrificeOpponentsEffect( + amount, StaticFilters.FILTER_CONTROLLED_CREATURE + ).apply(game, source)) + .isPresent(); } @Override diff --git a/Mage.Sets/src/mage/cards/m/MogisGodOfSlaughter.java b/Mage.Sets/src/mage/cards/m/MogisGodOfSlaughter.java index 38cf90d99a6..b35b152259b 100644 --- a/Mage.Sets/src/mage/cards/m/MogisGodOfSlaughter.java +++ b/Mage.Sets/src/mage/cards/m/MogisGodOfSlaughter.java @@ -61,7 +61,7 @@ class MogisGodOfSlaughterEffect extends OneShotEffect { MogisGodOfSlaughterEffect() { super(Outcome.Damage); - staticText = "{this} deals 2 damage to that player unless they sacrifice a creature"; + staticText = "{this} deals 2 damage to that player unless they sacrifice a creature of their choice"; } private MogisGodOfSlaughterEffect(final MogisGodOfSlaughterEffect effect) { diff --git a/Mage.Sets/src/mage/cards/n/NeglectedHeirloom.java b/Mage.Sets/src/mage/cards/n/NeglectedHeirloom.java index 695aa58165a..a4db3dfc9be 100644 --- a/Mage.Sets/src/mage/cards/n/NeglectedHeirloom.java +++ b/Mage.Sets/src/mage/cards/n/NeglectedHeirloom.java @@ -1,8 +1,5 @@ - package mage.cards.n; -import java.util.UUID; - import mage.abilities.TriggeredAbilityImpl; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.GenericManaCost; @@ -13,13 +10,15 @@ import mage.abilities.keyword.TransformAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Outcome; +import mage.constants.SubType; import mage.constants.Zone; import mage.game.Game; import mage.game.events.GameEvent; import mage.target.common.TargetControlledCreaturePermanent; +import java.util.UUID; + /** * @author halljared */ @@ -85,6 +84,6 @@ class NeglectedHeirloomTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { - return "When equipped creature transforms, transform Neglected Heirloom."; + return "When equipped creature transforms, transform {this}."; } } diff --git a/Mage.Sets/src/mage/cards/n/NikoLightOfHope.java b/Mage.Sets/src/mage/cards/n/NikoLightOfHope.java index 931831c102e..3422ccb86fc 100644 --- a/Mage.Sets/src/mage/cards/n/NikoLightOfHope.java +++ b/Mage.Sets/src/mage/cards/n/NikoLightOfHope.java @@ -74,7 +74,7 @@ class NikoLightOfHopeEffect extends OneShotEffect { NikoLightOfHopeEffect() { super(Outcome.Benefit); - staticText = "Exile target nonlegendary creature you control. Shards you control become copies of it until the beginning of the next end step. Return it to the battlefield under its owner's control at the beginning of the next end step."; + staticText = "Exile target nonlegendary creature you control. Shards you control become copies of it until the next end step. Return it to the battlefield under its owner's control at the beginning of the next end step."; } private NikoLightOfHopeEffect(final NikoLightOfHopeEffect effect) { @@ -112,4 +112,4 @@ class NikoLightOfHopeEffect extends OneShotEffect { return false; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/p/Plaguecrafter.java b/Mage.Sets/src/mage/cards/p/Plaguecrafter.java index 77fc9965d6a..2f6a81beadb 100644 --- a/Mage.Sets/src/mage/cards/p/Plaguecrafter.java +++ b/Mage.Sets/src/mage/cards/p/Plaguecrafter.java @@ -55,7 +55,7 @@ class PlaguecrafterEffect extends OneShotEffect { PlaguecrafterEffect() { super(Outcome.Benefit); - this.staticText = "each player sacrifices a creature or planeswalker. " + this.staticText = "each player sacrifices a creature or planeswalker of their choice. " + "Each player who can't discards a card."; } diff --git a/Mage.Sets/src/mage/cards/r/RashmiEternitiesCrafter.java b/Mage.Sets/src/mage/cards/r/RashmiEternitiesCrafter.java index 46e7d191989..7fffd79eca4 100644 --- a/Mage.Sets/src/mage/cards/r/RashmiEternitiesCrafter.java +++ b/Mage.Sets/src/mage/cards/r/RashmiEternitiesCrafter.java @@ -1,29 +1,26 @@ package mage.cards.r; -import java.util.UUID; -import mage.ApprovingObject; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SpellCastControllerTriggeredAbility; -import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.cards.CardsImpl; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.SubType; -import mage.constants.SuperType; -import mage.constants.Zone; +import mage.constants.*; +import mage.filter.FilterCard; +import mage.filter.predicate.mageobject.ManaValuePredicate; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.stack.Spell; import mage.players.Player; +import mage.util.CardUtil; import mage.watchers.common.SpellsCastWatcher; +import java.util.UUID; + /** - * * @author emerald000 */ public final class RashmiEternitiesCrafter extends CardImpl { @@ -56,6 +53,7 @@ class RashmiEternitiesCrafterTriggeredAbility extends SpellCastControllerTrigger RashmiEternitiesCrafterTriggeredAbility() { super(new RashmiEternitiesCrafterEffect(), false); + setTriggerPhrase("Whenever you cast your first spell each turn, "); } private RashmiEternitiesCrafterTriggeredAbility(final RashmiEternitiesCrafterTriggeredAbility ability) { @@ -69,27 +67,11 @@ class RashmiEternitiesCrafterTriggeredAbility extends SpellCastControllerTrigger @Override public boolean checkTrigger(GameEvent event, Game game) { - if (super.checkTrigger(event, game)) { - SpellsCastWatcher watcher = game.getState().getWatcher(SpellsCastWatcher.class); - if (watcher != null && watcher.getCount(event.getPlayerId()) == 1) { - Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null) { - for (Effect effect : getEffects()) { - effect.setValue("RashmiEternitiesCrafterCMC", spell.getManaValue()); - } - return true; - } - } - } - return false; - } - - @Override - public String getRule() { - return "Whenever you cast your first spell each turn, reveal the top card " - + "of your library. If it's a nonland card with mana value " - + "less than that spell's, you may cast it without paying " - + "its mana cost. If you don't cast the revealed card, put it into your hand."; + return super.checkTrigger(event, game) + && game + .getState() + .getWatcher(SpellsCastWatcher.class) + .getCount(event.getPlayerId()) == 1; } } @@ -97,10 +79,8 @@ class RashmiEternitiesCrafterEffect extends OneShotEffect { RashmiEternitiesCrafterEffect() { super(Outcome.PlayForFree); - this.staticText = "reveal the top card of your library. If it's a nonland" - + " card with mana value less than that spell's, you may " - + "cast it without paying its mana cost. If you don't cast the " - + "revealed card, put it into your hand"; + this.staticText = "reveal the top card of your library. You may cast it without paying its mana cost " + + "if it's a spell with lesser mana value. If you don't cast it, put it into your hand."; } private RashmiEternitiesCrafterEffect(final RashmiEternitiesCrafterEffect effect) { @@ -114,32 +94,22 @@ class RashmiEternitiesCrafterEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - boolean cardWasCast = false; - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - Card card = controller.getLibrary().getFromTop(game); - if (card != null) { - controller.revealCards("Rashmi, Eternities Crafter", new CardsImpl(card), game); - if (card.isLand(game)) { - controller.moveCards(card, Zone.HAND, source, game); - return true; - } - Object cmcObject = this.getValue("RashmiEternitiesCrafterCMC"); - if (cmcObject != null - && card.getManaValue() < (int) cmcObject - && controller.chooseUse(Outcome.PlayForFree, "Cast " + card.getName() - + " without paying its mana cost?", source, game)) { - game.getState().setValue("PlayFromNotOwnHandZone" + card.getId(), Boolean.TRUE); - cardWasCast = controller.cast(controller.chooseAbilityForCast(card, game, true), - game, true, new ApprovingObject(source, game)); - game.getState().setValue("PlayFromNotOwnHandZone" + card.getId(), null); - } - if (!cardWasCast) { - controller.moveCards(card, Zone.HAND, source, game); - } - return true; - } + Player player = game.getPlayer(source.getControllerId()); + Spell spell = (Spell) getValue("spellCast"); + if (player == null || spell == null) { + return false; } - return false; + Card card = player.getLibrary().getFromTop(game); + if (card == null) { + return false; + } + player.revealCards("Rashmi, Eternities Crafter", new CardsImpl(card), game); + FilterCard filter = new FilterCard(); + filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, spell.getManaValue())); + CardUtil.castSpellWithAttributesForFree(player, source, game, card, filter); + if (Zone.LIBRARY.match(game.getState().getZone(card.getId()))) { + player.moveCards(card, Zone.HAND, source, game); + } + return true; } } diff --git a/Mage.Sets/src/mage/cards/s/SharkTyphoon.java b/Mage.Sets/src/mage/cards/s/SharkTyphoon.java index 93f2129b3ae..97e6883c30a 100644 --- a/Mage.Sets/src/mage/cards/s/SharkTyphoon.java +++ b/Mage.Sets/src/mage/cards/s/SharkTyphoon.java @@ -118,6 +118,6 @@ class SharkTyphoonTriggeredAbility extends ZoneChangeTriggeredAbility { @Override public String getRule() { - return "When you cycle {this}, create an X/X blue Shark creature token with flying."; + return "When you cycle this card, create an X/X blue Shark creature token with flying."; } } diff --git a/Mage.Sets/src/mage/cards/t/TamiyoFieldResearcher.java b/Mage.Sets/src/mage/cards/t/TamiyoFieldResearcher.java index d938346820c..3fd3f65fb23 100644 --- a/Mage.Sets/src/mage/cards/t/TamiyoFieldResearcher.java +++ b/Mage.Sets/src/mage/cards/t/TamiyoFieldResearcher.java @@ -13,9 +13,7 @@ import mage.abilities.effects.common.TapTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.FilterPermanent; import mage.filter.StaticFilters; -import mage.filter.predicate.Predicates; import mage.game.Game; import mage.game.command.emblems.TamiyoFieldResearcherEmblem; import mage.game.events.DamagedBatchBySourceEvent; @@ -35,12 +33,6 @@ import java.util.UUID; */ public final class TamiyoFieldResearcher extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("nonland permanent"); - - static { - filter.add(Predicates.not(CardType.LAND.getPredicate())); - } - public TamiyoFieldResearcher(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{1}{G}{W}{U}"); this.supertype.add(SuperType.LEGENDARY); @@ -55,7 +47,7 @@ public final class TamiyoFieldResearcher extends CardImpl { // -2: Tap up to two target nonland permanents. They don't untap during their controller's next untap step. ability = new LoyaltyAbility(new TapTargetEffect(), -2); - ability.addTarget(new TargetPermanent(0, 2, filter, false)); + ability.addTarget(new TargetPermanent(0, 2, StaticFilters.FILTER_PERMANENTS_NON_LAND, false)); ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect("They")); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/t/ThroughTheBreach.java b/Mage.Sets/src/mage/cards/t/ThroughTheBreach.java index 9b141d2c3ae..c24a2f21d88 100644 --- a/Mage.Sets/src/mage/cards/t/ThroughTheBreach.java +++ b/Mage.Sets/src/mage/cards/t/ThroughTheBreach.java @@ -1,6 +1,5 @@ package mage.cards.t; -import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.PutCardIntoPlayWithHasteAndSacrificeEffect; import mage.abilities.keyword.SpliceAbility; import mage.cards.CardImpl; @@ -27,7 +26,7 @@ public final class ThroughTheBreach extends CardImpl { )); // Splice onto Arcane {2}{R}{R} - this.addAbility(new SpliceAbility(SpliceAbility.ARCANE, new ManaCostsImpl<>("{2}{R}{R}"))); + this.addAbility(new SpliceAbility(SpliceAbility.ARCANE, "{2}{R}{R}")); } private ThroughTheBreach(final ThroughTheBreach card) { diff --git a/Mage.Sets/src/mage/cards/t/ThunderfootBaloth.java b/Mage.Sets/src/mage/cards/t/ThunderfootBaloth.java index 3f76d6069d9..8b18562b249 100644 --- a/Mage.Sets/src/mage/cards/t/ThunderfootBaloth.java +++ b/Mage.Sets/src/mage/cards/t/ThunderfootBaloth.java @@ -33,7 +33,7 @@ public final class ThunderfootBaloth extends CardImpl { // Lieutenant - As long as you control your commander, Thunderfoot Baloth gets +2/+2 and other creatures you control get +2/+2 and have trample. this.addAbility(new LieutenantAbility(new BoostControlledEffect( 2, 2, Duration.WhileOnBattlefield, true - ), "and other creature you control get +2/+2").addLieutenantEffect(new GainAbilityAllEffect( + ), "and other creatures you control get +2/+2").addLieutenantEffect(new GainAbilityAllEffect( TrampleAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_CONTROLLED_CREATURES, true ), "and have trample")); diff --git a/Mage.Sets/src/mage/cards/t/TimelyWard.java b/Mage.Sets/src/mage/cards/t/TimelyWard.java index 0e9d9ef01eb..6d52ca741ea 100644 --- a/Mage.Sets/src/mage/cards/t/TimelyWard.java +++ b/Mage.Sets/src/mage/cards/t/TimelyWard.java @@ -11,7 +11,10 @@ import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.IndestructibleAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.SubType; import mage.filter.FilterPermanent; import mage.filter.predicate.mageobject.CommanderPredicate; import mage.target.TargetPermanent; @@ -38,8 +41,8 @@ public final class TimelyWard extends CardImpl { this.subtype.add(SubType.AURA); // You may cast this spell as though it had flash if it targets a commander. - this.addAbility(new CastAsThoughItHadFlashIfConditionAbility(condition, - "You may cast {this} as though it had flash if it targets a commander." + this.addAbility(new CastAsThoughItHadFlashIfConditionAbility( + condition, "You may cast this spell as though it had flash if it targets a commander." )); // Enchant creature diff --git a/Mage.Sets/src/mage/cards/w/WoebringerDemon.java b/Mage.Sets/src/mage/cards/w/WoebringerDemon.java index 8917bdf355a..26dbfd48dea 100644 --- a/Mage.Sets/src/mage/cards/w/WoebringerDemon.java +++ b/Mage.Sets/src/mage/cards/w/WoebringerDemon.java @@ -55,7 +55,7 @@ class WoebringerDemonEffect extends OneShotEffect { WoebringerDemonEffect() { super(Outcome.Detriment); - this.staticText = "that player sacrifices a creature. If the player can't, sacrifice {this}"; + this.staticText = "that player sacrifices a creature of their choice. If the player can't, sacrifice {this}"; } private WoebringerDemonEffect(final WoebringerDemonEffect effect) { diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index ba3a9e16c74..aed774e5565 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -75,7 +75,7 @@ public class VerifyCardDataTest { private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class); - private static final String FULL_ABILITIES_CHECK_SET_CODES = "FDN"; // check ability text due mtgjson, can use multiple sets like MAT;CMD or * for all + private static final String FULL_ABILITIES_CHECK_SET_CODES = "INR"; // check ability text due mtgjson, can use multiple sets like MAT;CMD or * for all private static final boolean CHECK_ONLY_ABILITIES_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages private static final boolean CHECK_COPYABLE_FIELDS = true; // disable for better verify test performance diff --git a/Mage/src/main/java/mage/abilities/common/PutIntoGraveFromLibrarySourceTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/PutIntoGraveFromLibrarySourceTriggeredAbility.java index 22d6e67dd0a..1f61c7b9613 100644 --- a/Mage/src/main/java/mage/abilities/common/PutIntoGraveFromLibrarySourceTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/PutIntoGraveFromLibrarySourceTriggeredAbility.java @@ -13,7 +13,7 @@ public class PutIntoGraveFromLibrarySourceTriggeredAbility extends ZoneChangeTri } public PutIntoGraveFromLibrarySourceTriggeredAbility(Effect effect, boolean optional) { - super(Zone.LIBRARY, Zone.GRAVEYARD, effect, "When {this} is put into your graveyard from your library, ", optional); + super(Zone.LIBRARY, Zone.GRAVEYARD, effect, "When this card is put into your graveyard from your library, ", optional); } protected PutIntoGraveFromLibrarySourceTriggeredAbility(final PutIntoGraveFromLibrarySourceTriggeredAbility ability) { diff --git a/Mage/src/main/java/mage/abilities/costs/common/RevealSourceFromYourHandCost.java b/Mage/src/main/java/mage/abilities/costs/common/RevealSourceFromYourHandCost.java index 6af8ad5ad4d..ddaf70e39f9 100644 --- a/Mage/src/main/java/mage/abilities/costs/common/RevealSourceFromYourHandCost.java +++ b/Mage/src/main/java/mage/abilities/costs/common/RevealSourceFromYourHandCost.java @@ -1,7 +1,5 @@ - - package mage.abilities.costs.common; -import java.util.UUID; + import mage.abilities.Ability; import mage.abilities.costs.Cost; import mage.abilities.costs.CostImpl; @@ -12,18 +10,17 @@ import mage.constants.Zone; import mage.game.Game; import mage.players.Player; +import java.util.UUID; + /** - * - * - * * @author LevelX2 - * */ public class RevealSourceFromYourHandCost extends CostImpl { public RevealSourceFromYourHandCost() { - this.text = "reveal {this} from your hand"; + this.text = "reveal this card from your hand"; } + public RevealSourceFromYourHandCost(RevealSourceFromYourHandCost cost) { super(cost); } @@ -32,14 +29,16 @@ public class RevealSourceFromYourHandCost extends CostImpl { public boolean pay(Ability ability, Game game, Ability source, UUID controllerId, boolean noMana, Cost costToPay) { paid = false; Player player = game.getPlayer(controllerId); - if (player != null) { - Card card = player.getHand().get(ability.getSourceId(), game); - if (card != null) { - Cards cards = new CardsImpl(card); - paid = true; - player.revealCards("Reveal card cost", cards, game); - } + if (player == null) { + return paid; } + Card card = player.getHand().get(ability.getSourceId(), game); + if (card == null) { + return paid; + } + Cards cards = new CardsImpl(card); + paid = true; + player.revealCards("Reveal card cost", cards, game); return paid; } @@ -52,5 +51,4 @@ public class RevealSourceFromYourHandCost extends CostImpl { public RevealSourceFromYourHandCost copy() { return new RevealSourceFromYourHandCost(this); } - } diff --git a/Mage/src/main/java/mage/abilities/effects/common/DamageTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/DamageTargetEffect.java index c531d1fc39c..ae23687ce8a 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/DamageTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/DamageTargetEffect.java @@ -172,12 +172,17 @@ public class DamageTargetEffect extends OneShotEffect { } else { if (firstTarget.getMinNumberOfTargets() == 0) { int maxTargets = firstTarget.getMaxNumberOfTargets(); - if (maxTargets == Integer.MAX_VALUE) { - sb.append("any number of "); - } else { - sb.append("each of up to "); - sb.append(CardUtil.numberToText(maxTargets)); - sb.append(' '); + switch (maxTargets) { + case Integer.MAX_VALUE: + sb.append("any number of "); + break; + case 1: + sb.append("up to one "); + break; + default: + sb.append("each of up to "); + sb.append(CardUtil.numberToText(maxTargets)); + sb.append(' '); } } if (!targetName.contains("target ")) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/WUBRGInsteadEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/WUBRGInsteadEffect.java index ef516b424f0..1e6ed210a2c 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/WUBRGInsteadEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/WUBRGInsteadEffect.java @@ -25,7 +25,7 @@ public class WUBRGInsteadEffect extends ContinuousEffectImpl { public WUBRGInsteadEffect() { super(Duration.WhileOnBattlefield, Outcome.Detriment); - staticText = "You may pay {W}{U}{B}{R}{G} rather than pay the mana cost for spells that you cast"; + staticText = "You may pay {W}{U}{B}{R}{G} rather than pay the mana cost for spells you cast"; } protected WUBRGInsteadEffect(final WUBRGInsteadEffect effect) { diff --git a/Mage/src/main/java/mage/game/command/emblems/ArlinnEmbracedByTheMoonEmblem.java b/Mage/src/main/java/mage/game/command/emblems/ArlinnEmbracedByTheMoonEmblem.java index d722d1e07ce..5606f00850c 100644 --- a/Mage/src/main/java/mage/game/command/emblems/ArlinnEmbracedByTheMoonEmblem.java +++ b/Mage/src/main/java/mage/game/command/emblems/ArlinnEmbracedByTheMoonEmblem.java @@ -33,7 +33,7 @@ public final class ArlinnEmbracedByTheMoonEmblem extends Emblem { Ability ability2 = new SimpleActivatedAbility(effect2, new TapSourceCost()); ability2.addTarget(new TargetAnyTarget()); effect = new GainAbilityControlledEffect(ability2, Duration.EndOfGame, filter); - effect.setText("and '{T}: This creature deals damage equal to its power to any target"); + effect.setText("and '{T}: This creature deals damage equal to its power to any target'"); ability.addEffect(effect); this.getAbilities().add(ability); } diff --git a/Mage/src/main/java/mage/game/permanent/token/BeastieToken.java b/Mage/src/main/java/mage/game/permanent/token/BeastieToken.java index 7bd07279026..b5e4f4fe03d 100644 --- a/Mage/src/main/java/mage/game/permanent/token/BeastieToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/BeastieToken.java @@ -12,7 +12,7 @@ import mage.constants.SubType; public final class BeastieToken extends TokenImpl { public BeastieToken() { - super("Beast Token", "4/4 white Beast creature token with \"This creature can't attack or block alone.\""); + super("Beast Token", "4/4 white Beast creature token with \"This token can't attack or block alone.\""); cardType.add(CardType.CREATURE); color.setWhite(true); subtype.add(SubType.BEAST); diff --git a/Mage/src/main/java/mage/game/permanent/token/SeizeTheStormElementalToken.java b/Mage/src/main/java/mage/game/permanent/token/SeizeTheStormElementalToken.java index 908e4c7f8f2..00b0721fc7c 100644 --- a/Mage/src/main/java/mage/game/permanent/token/SeizeTheStormElementalToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/SeizeTheStormElementalToken.java @@ -22,7 +22,7 @@ public final class SeizeTheStormElementalToken extends TokenImpl { public SeizeTheStormElementalToken(DynamicValue xValue, Hint hint) { super("Elemental Token", "red Elemental creature token with trample and " + - "\"This creature's power and toughness are each equal to the number of instant " + + "\"This token's power and toughness are each equal to the number of instant " + "and sorcery cards in your graveyard plus the number of cards with flashback you own in exile.\""); cardType.add(CardType.CREATURE); color.setRed(true); @@ -32,7 +32,7 @@ public final class SeizeTheStormElementalToken extends TokenImpl { this.addAbility(TrampleAbility.getInstance()); this.addAbility(new SimpleStaticAbility(new SetBasePowerToughnessSourceEffect( xValue - ).setText("this creature's power and toughness are each equal to the number of " + + ).setText("this token's power and toughness are each equal to the number of " + "instant and sorcery cards in your graveyard, plus the number of cards with flashback you own in exile") ).addHint(hint)); } diff --git a/Mage/src/main/java/mage/game/permanent/token/WrennAndSevenTreefolkToken.java b/Mage/src/main/java/mage/game/permanent/token/WrennAndSevenTreefolkToken.java index a25f5aaa8c7..ac2080ca59a 100644 --- a/Mage/src/main/java/mage/game/permanent/token/WrennAndSevenTreefolkToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/WrennAndSevenTreefolkToken.java @@ -15,7 +15,7 @@ import mage.constants.Zone; public final class WrennAndSevenTreefolkToken extends TokenImpl { public WrennAndSevenTreefolkToken() { - super("Treefolk Token", "green Treefolk creature token with reach and \"This creature's power and toughness are each equal to the number of lands you control.\""); + super("Treefolk Token", "green Treefolk creature token with reach and \"This token's power and toughness are each equal to the number of lands you control.\""); cardType.add(CardType.CREATURE); color.setGreen(true); subtype.add(SubType.TREEFOLK); @@ -24,7 +24,7 @@ public final class WrennAndSevenTreefolkToken extends TokenImpl { this.addAbility(ReachAbility.getInstance()); this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetBasePowerToughnessSourceEffect( LandsYouControlCount.instance - ).setText("this creature's power and toughness are each equal to the number of lands you control"))); + ).setText("this token's power and toughness are each equal to the number of lands you control"))); } private WrennAndSevenTreefolkToken(final WrennAndSevenTreefolkToken token) {