From 1dfde6d62299041c301b599c436aa2fbe94acdea Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Tue, 9 Mar 2021 20:01:32 -0500 Subject: [PATCH] [TSR] various text fixes --- Mage.Sets/src/mage/cards/a/ArcBlade.java | 2 +- .../mage/cards/a/ArcadesTheStrategist.java | 2 +- Mage.Sets/src/mage/cards/b/BedlamReveler.java | 4 +- Mage.Sets/src/mage/cards/c/CauterySliver.java | 45 +++++++++---------- .../src/mage/cards/c/CloudshredderSliver.java | 2 +- .../src/mage/cards/d/DreamscapeArtist.java | 2 +- .../src/mage/cards/e/ExquisiteFirecraft.java | 2 +- Mage.Sets/src/mage/cards/f/FiremawKavu.java | 2 +- Mage.Sets/src/mage/cards/g/GaeasAnthem.java | 11 ++--- .../src/mage/cards/g/GauntletOfPower.java | 9 ++-- .../src/mage/cards/g/GoblinEngineer.java | 2 +- Mage.Sets/src/mage/cards/h/HollowOne.java | 2 +- Mage.Sets/src/mage/cards/i/Imperiosaur.java | 2 +- .../src/mage/cards/j/JhoiraOfTheGhitu.java | 2 +- .../src/mage/cards/k/KaervekTheMerciless.java | 2 +- .../mage/cards/l/LaviniaAzoriusRenegade.java | 2 +- Mage.Sets/src/mage/cards/n/NantukoShaman.java | 2 +- Mage.Sets/src/mage/cards/s/SecretPlans.java | 21 ++++----- .../src/mage/cards/s/ShivanSandMage.java | 30 ++++++++----- .../src/mage/cards/s/SidewinderSliver.java | 2 +- .../mage/cards/s/SkitteringMonstrosity.java | 10 +++-- .../mage/cards/s/SlimefootTheStowaway.java | 25 +++++------ .../src/mage/cards/s/StrengthInNumbers.java | 18 +++++--- .../src/mage/cards/t/TemurAscendancy.java | 2 +- .../src/mage/cards/t/ThelonOfHavenwood.java | 2 +- .../src/mage/cards/t/TheloniteHermit.java | 2 +- Mage.Sets/src/mage/cards/t/Timebender.java | 30 ++++++++----- .../src/mage/cards/t/TrompTheDomains.java | 2 +- .../java/mage/abilities/CompoundAbility.java | 8 ++-- .../costs/common/ExileFromGraveCost.java | 16 ++++--- .../common/SacrificeOpponentsEffect.java | 14 +++--- .../abilities/keyword/CyclingAbility.java | 7 +-- .../mage/abilities/keyword/EchoAbility.java | 5 ++- .../main/java/mage/filter/StaticFilters.java | 6 +++ .../permanent/token/AssemblyWorkerToken.java | 2 +- .../permanent/token/LlanowarElvesToken.java | 2 +- .../permanent/token/MetallicSliverToken.java | 2 +- 37 files changed, 167 insertions(+), 134 deletions(-) diff --git a/Mage.Sets/src/mage/cards/a/ArcBlade.java b/Mage.Sets/src/mage/cards/a/ArcBlade.java index c39b9abd343..283dbb551a2 100644 --- a/Mage.Sets/src/mage/cards/a/ArcBlade.java +++ b/Mage.Sets/src/mage/cards/a/ArcBlade.java @@ -30,7 +30,7 @@ public final class ArcBlade extends CardImpl { this.getSpellAbility().addEffect(ExileSpellEffect.getInstance()); // with three time counters on it. Effect effect = new AddCountersSourceEffect(CounterType.TIME.createInstance(), StaticValue.get(3), false, true); - effect.setText("with 3 time counters on it"); + effect.setText("with three time counters on it"); this.getSpellAbility().addEffect(effect); this.getSpellAbility().addTarget(new TargetAnyTarget()); diff --git a/Mage.Sets/src/mage/cards/a/ArcadesTheStrategist.java b/Mage.Sets/src/mage/cards/a/ArcadesTheStrategist.java index 0dbc363239b..c632eb2b98b 100644 --- a/Mage.Sets/src/mage/cards/a/ArcadesTheStrategist.java +++ b/Mage.Sets/src/mage/cards/a/ArcadesTheStrategist.java @@ -25,7 +25,7 @@ import java.util.UUID; public final class ArcadesTheStrategist extends CardImpl { private static final FilterControlledCreaturePermanent filter - = new FilterControlledCreaturePermanent("creature with defender"); + = new FilterControlledCreaturePermanent("a creature with defender"); private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent(); static { diff --git a/Mage.Sets/src/mage/cards/b/BedlamReveler.java b/Mage.Sets/src/mage/cards/b/BedlamReveler.java index 5e4a2b29cc6..3ced1749e1a 100644 --- a/Mage.Sets/src/mage/cards/b/BedlamReveler.java +++ b/Mage.Sets/src/mage/cards/b/BedlamReveler.java @@ -32,10 +32,10 @@ public final class BedlamReveler extends CardImpl { this.toughness = new MageInt(4); // This spell costs {1} less to cast for each instant and sorcery card in your graveyard. - DynamicValue xValue = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY); + DynamicValue xValue = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_INSTANT_AND_SORCERY); Ability ability = new SimpleStaticAbility(Zone.ALL, new SpellCostReductionForEachSourceEffect(1, xValue)); ability.setRuleAtTheTop(true); - ability.addHint(new ValueHint("Instant or sourcery card in your graveyard", xValue)); + ability.addHint(new ValueHint("Instant and sorcery card in your graveyard", xValue)); this.addAbility(ability); // Prowess diff --git a/Mage.Sets/src/mage/cards/c/CauterySliver.java b/Mage.Sets/src/mage/cards/c/CauterySliver.java index 4a44395bd0a..e3a443e068e 100644 --- a/Mage.Sets/src/mage/cards/c/CauterySliver.java +++ b/Mage.Sets/src/mage/cards/c/CauterySliver.java @@ -5,7 +5,7 @@ import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.common.SacrificeSourceCost; -import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.PreventDamageToTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityAllEffect; @@ -14,7 +14,6 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.constants.Zone; import mage.filter.FilterPermanent; import mage.filter.common.FilterCreaturePlayerOrPlaneswalker; import mage.target.common.TargetAnyTarget; @@ -27,6 +26,8 @@ import java.util.UUID; public final class CauterySliver extends CardImpl { private static final FilterPermanent filter = new FilterPermanent(SubType.SLIVER, "All Slivers"); + private static final FilterCreaturePlayerOrPlaneswalker filter2 + = new FilterCreaturePlayerOrPlaneswalker("player, planeswalker, or Sliver creature", SubType.SLIVER); public CauterySliver(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}{W}"); @@ -35,21 +36,27 @@ public final class CauterySliver extends CardImpl { this.toughness = new MageInt(2); // All Slivers have "{1}, Sacrifice this permanent: This permanent deals 1 damage to any target." - Ability ability1 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new ManaCostsImpl("1")); - ability1.addCost(new SacrificeSourceCost()); - ability1.addTarget(new TargetAnyTarget()); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, - new GainAbilityAllEffect(ability1, Duration.WhileOnBattlefield, filter, - "All Slivers have \"{1}, Sacrifice this permanent: This permanent deals 1 damage to any target.\""))); + Ability ability = new SimpleActivatedAbility( + new DamageTargetEffect(1, "this permanent"), new GenericManaCost(1) + ); + ability.addCost(new SacrificeSourceCost()); + ability.addTarget(new TargetAnyTarget()); + this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect( + ability, Duration.WhileOnBattlefield, filter, "All Slivers have \"{1}, " + + "Sacrifice this permanent: This permanent deals 1 damage to any target.\"" + ))); - // All Slivers have "{1}, Sacrifice this permanent: Prevent the next 1 damage that would be dealt to target Sliver creature or player this turn." // All Slivers have "{1}, Sacrifice this permanent: Prevent the next 1 damage that would be dealt to target player, planeswalker, or Sliver creature this turn." - Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PreventDamageToTargetEffect(Duration.EndOfTurn, 1), new ManaCostsImpl("1")); - ability2.addCost(new SacrificeSourceCost()); - ability2.addTarget(new TargetAnyTarget(new FilterCreatureOrPlayerByType(SubType.SLIVER, "Sliver creature or player"))); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, - new GainAbilityAllEffect(ability2, Duration.WhileOnBattlefield, filter, - "All Slivers have \"{1}, Sacrifice this permanent: Prevent the next 1 damage that would be dealt to target Sliver creature or player this turn.\""))); + ability = new SimpleActivatedAbility( + new PreventDamageToTargetEffect(Duration.EndOfTurn, 1), new GenericManaCost(1) + ); + ability.addCost(new SacrificeSourceCost()); + ability.addTarget(new TargetAnyTarget(filter2)); + this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect( + ability, Duration.WhileOnBattlefield, filter, "All Slivers have " + + "\"{1}, Sacrifice this permanent: Prevent the next 1 damage " + + "that would be dealt to target player, planeswalker, or Sliver creature this turn.\"" + ))); } private CauterySliver(final CauterySliver card) { @@ -61,11 +68,3 @@ public final class CauterySliver extends CardImpl { return new CauterySliver(this); } } - -class FilterCreatureOrPlayerByType extends FilterCreaturePlayerOrPlaneswalker { - - public FilterCreatureOrPlayerByType(SubType subType, String name) { - super(name); - this.getPermanentFilter().add(subType.getPredicate()); - } -} diff --git a/Mage.Sets/src/mage/cards/c/CloudshredderSliver.java b/Mage.Sets/src/mage/cards/c/CloudshredderSliver.java index a0a1e6f56e9..15a194d3a3a 100644 --- a/Mage.Sets/src/mage/cards/c/CloudshredderSliver.java +++ b/Mage.Sets/src/mage/cards/c/CloudshredderSliver.java @@ -31,7 +31,7 @@ public final class CloudshredderSliver extends CardImpl { Ability ability = new SimpleStaticAbility(new GainAbilityControlledEffect( FlyingAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURE_SLIVERS - )); + ).setText("Sliver creatures you control have flying")); ability.addEffect(new GainAbilityControlledEffect( HasteAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURE_SLIVERS diff --git a/Mage.Sets/src/mage/cards/d/DreamscapeArtist.java b/Mage.Sets/src/mage/cards/d/DreamscapeArtist.java index fbb6bbd5f69..ac2d6b15a71 100644 --- a/Mage.Sets/src/mage/cards/d/DreamscapeArtist.java +++ b/Mage.Sets/src/mage/cards/d/DreamscapeArtist.java @@ -36,7 +36,7 @@ public final class DreamscapeArtist extends CardImpl { this.toughness = new MageInt(1); // {2}{U}, {tap}, Discard a card, Sacrifice a land: Search your library for up to two basic land cards and put them onto the battlefield. Then shuffle your library. - TargetCardInLibrary target = new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_LAND); + TargetCardInLibrary target = new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_LANDS); Ability ability = new SimpleActivatedAbility( Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(target, false, Outcome.PutLandInPlay), diff --git a/Mage.Sets/src/mage/cards/e/ExquisiteFirecraft.java b/Mage.Sets/src/mage/cards/e/ExquisiteFirecraft.java index d67f2dc52aa..19ca998c294 100644 --- a/Mage.Sets/src/mage/cards/e/ExquisiteFirecraft.java +++ b/Mage.Sets/src/mage/cards/e/ExquisiteFirecraft.java @@ -31,7 +31,7 @@ public final class ExquisiteFirecraft extends CardImpl { // Spell mastery — If there are two or more instant and/or sorcery cards in your graveyard, Exquisite Firecraft can't be countered. ContinuousRuleModifyingEffect cantBeCountered = new CantBeCounteredSourceEffect(); ConditionalContinuousRuleModifyingEffect conditionalCantBeCountered = new ConditionalContinuousRuleModifyingEffect(cantBeCountered, SpellMasteryCondition.instance); - conditionalCantBeCountered.setText("
If there are two or more instant and/or sorcery cards in your graveyard, this spell can't be countered"); + conditionalCantBeCountered.setText("
Spell mastery — If there are two or more instant and/or sorcery cards in your graveyard, this spell can't be countered"); Ability ability = new SimpleStaticAbility(Zone.STACK, conditionalCantBeCountered); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/f/FiremawKavu.java b/Mage.Sets/src/mage/cards/f/FiremawKavu.java index 1ed03c1ef1d..d5609726691 100644 --- a/Mage.Sets/src/mage/cards/f/FiremawKavu.java +++ b/Mage.Sets/src/mage/cards/f/FiremawKavu.java @@ -35,7 +35,7 @@ public final class FiremawKavu extends CardImpl { this.addAbility(ability); // When Firemaw Kavu leaves the battlefield, it deals 4 damage to target creature. - ability = new LeavesBattlefieldTriggeredAbility(new DamageTargetEffect(4), false); + ability = new LeavesBattlefieldTriggeredAbility(new DamageTargetEffect(4, "it"), false); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/g/GaeasAnthem.java b/Mage.Sets/src/mage/cards/g/GaeasAnthem.java index e7c256048f5..ae5a52b1fb4 100644 --- a/Mage.Sets/src/mage/cards/g/GaeasAnthem.java +++ b/Mage.Sets/src/mage/cards/g/GaeasAnthem.java @@ -1,18 +1,16 @@ - package mage.cards.g; -import java.util.UUID; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.Zone; import mage.filter.StaticFilters; +import java.util.UUID; + /** - * * @author dustinconrad */ public final class GaeasAnthem extends CardImpl { @@ -21,7 +19,10 @@ public final class GaeasAnthem extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}{G}"); // Creatures you control get +1/+1. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURE, false))); + this.addAbility(new SimpleStaticAbility(new BoostControlledEffect( + 1, 1, Duration.WhileOnBattlefield, + StaticFilters.FILTER_PERMANENT_CREATURES, false + ))); } private GaeasAnthem(final GaeasAnthem card) { diff --git a/Mage.Sets/src/mage/cards/g/GauntletOfPower.java b/Mage.Sets/src/mage/cards/g/GauntletOfPower.java index 5ca8d54ccde..858b4af2805 100644 --- a/Mage.Sets/src/mage/cards/g/GauntletOfPower.java +++ b/Mage.Sets/src/mage/cards/g/GauntletOfPower.java @@ -1,11 +1,9 @@ package mage.cards.g; -import java.util.ArrayList; -import java.util.List; import mage.Mana; import mage.ObjectColor; import mage.abilities.Ability; -import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.AsEntersBattlefieldAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.Effect; @@ -20,12 +18,13 @@ import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterLandPermanent; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.game.events.ManaEvent; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.targetpointer.FixedTarget; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; /** @@ -43,7 +42,7 @@ public final class GauntletOfPower extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}"); // As Gauntlet of Power enters the battlefield, choose a color. - this.addAbility(new EntersBattlefieldAbility(new ChooseColorEffect(Outcome.Neutral))); + this.addAbility(new AsEntersBattlefieldAbility(new ChooseColorEffect(Outcome.Neutral))); // Creatures of the chosen color get +1/+1. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GauntletOfPowerBoostEffect())); diff --git a/Mage.Sets/src/mage/cards/g/GoblinEngineer.java b/Mage.Sets/src/mage/cards/g/GoblinEngineer.java index 5ba01844c45..9f3cb9b6f0d 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinEngineer.java +++ b/Mage.Sets/src/mage/cards/g/GoblinEngineer.java @@ -53,7 +53,7 @@ public final class GoblinEngineer extends CardImpl { // {R}, {T}, Sacrifice an artifact: Return target artifact card with converted mana cost 3 or less from your graveyard to the battlefield. Ability ability = new SimpleActivatedAbility( - new ReturnFromGraveyardToBattlefieldTargetEffect(), new ManaCostsImpl("{R}") + new ReturnFromGraveyardToBattlefieldTargetEffect(false, false), new ManaCostsImpl("{R}") ); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter))); diff --git a/Mage.Sets/src/mage/cards/h/HollowOne.java b/Mage.Sets/src/mage/cards/h/HollowOne.java index 0dfbd1af58d..8ba2e0b81cf 100644 --- a/Mage.Sets/src/mage/cards/h/HollowOne.java +++ b/Mage.Sets/src/mage/cards/h/HollowOne.java @@ -57,7 +57,7 @@ class HollowOneReductionEffect extends CostModificationEffectImpl { public HollowOneReductionEffect() { super(Duration.WhileOnStack, Outcome.Benefit, CostModificationType.REDUCE_COST); - staticText = "{this} costs {2} less to cast for each card you've cycled or discarded this turn"; + staticText = "this spell costs {2} less to cast for each card you've cycled or discarded this turn"; } protected HollowOneReductionEffect(HollowOneReductionEffect effect) { diff --git a/Mage.Sets/src/mage/cards/i/Imperiosaur.java b/Mage.Sets/src/mage/cards/i/Imperiosaur.java index f98024e3354..0a82b2ddba9 100644 --- a/Mage.Sets/src/mage/cards/i/Imperiosaur.java +++ b/Mage.Sets/src/mage/cards/i/Imperiosaur.java @@ -64,7 +64,7 @@ class ImperiosaurStaticAbility extends StaticAbility { @Override public String getRule() { - return "Spend only mana produced by basic lands to cast {this}."; + return "Spend only mana produced by basic lands to cast this spell."; } } diff --git a/Mage.Sets/src/mage/cards/j/JhoiraOfTheGhitu.java b/Mage.Sets/src/mage/cards/j/JhoiraOfTheGhitu.java index ceb59859821..bfc7e937e9d 100644 --- a/Mage.Sets/src/mage/cards/j/JhoiraOfTheGhitu.java +++ b/Mage.Sets/src/mage/cards/j/JhoiraOfTheGhitu.java @@ -58,7 +58,7 @@ class JhoiraOfTheGhituSuspendEffect extends OneShotEffect { public JhoiraOfTheGhituSuspendEffect() { super(Outcome.PutCardInPlay); - this.staticText = "Put four time counters on the exiled card. If it doesn't have suspend, it gains suspend (At the beginning of your upkeep, remove a time counter from that card. When the last is removed, cast it without paying its mana cost. If it's a creature, it has haste.)"; + this.staticText = "Put four time counters on the exiled card. If it doesn't have suspend, it gains suspend. (At the beginning of your upkeep, remove a time counter from that card. When the last is removed, cast it without paying its mana cost. If it's a creature, it has haste.)"; } public JhoiraOfTheGhituSuspendEffect(final JhoiraOfTheGhituSuspendEffect effect) { diff --git a/Mage.Sets/src/mage/cards/k/KaervekTheMerciless.java b/Mage.Sets/src/mage/cards/k/KaervekTheMerciless.java index d3396f289e9..8fe6a6c0146 100644 --- a/Mage.Sets/src/mage/cards/k/KaervekTheMerciless.java +++ b/Mage.Sets/src/mage/cards/k/KaervekTheMerciless.java @@ -31,7 +31,7 @@ public final class KaervekTheMerciless extends CardImpl { this.toughness = new MageInt(4); // Whenever an opponent casts a spell, Kaervek the Merciless deals damage to any target equal to that spell's converted mana cost. - Ability ability = new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new KaervekTheMercilessEffect(), StaticFilters.FILTER_SPELL, false, SetTargetPointer.SPELL); + Ability ability = new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new KaervekTheMercilessEffect(), StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.SPELL); ability.addTarget(new TargetAnyTarget()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/l/LaviniaAzoriusRenegade.java b/Mage.Sets/src/mage/cards/l/LaviniaAzoriusRenegade.java index f65102a3dd7..5e65d312e3b 100644 --- a/Mage.Sets/src/mage/cards/l/LaviniaAzoriusRenegade.java +++ b/Mage.Sets/src/mage/cards/l/LaviniaAzoriusRenegade.java @@ -153,6 +153,6 @@ class LaviniaAzoriusRenegadeTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { - return "Whenever an opponent casts a spell, if no mana was spent to cast it, counter that spell"; + return "Whenever an opponent casts a spell, if no mana was spent to cast it, counter that spell."; } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/n/NantukoShaman.java b/Mage.Sets/src/mage/cards/n/NantukoShaman.java index 4952cf9a2d3..13317b0a2d0 100644 --- a/Mage.Sets/src/mage/cards/n/NantukoShaman.java +++ b/Mage.Sets/src/mage/cards/n/NantukoShaman.java @@ -41,7 +41,7 @@ public final class NantukoShaman extends CardImpl { Ability ability = new ConditionalInterveningIfTriggeredAbility( new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1)), new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, 0), - "When {this} enters the battlefield, if you control no tapped lands, draw a card"); + "When {this} enters the battlefield, if you control no tapped lands, draw a card."); this.addAbility(ability); // Suspend 1-{2}{G}{G} diff --git a/Mage.Sets/src/mage/cards/s/SecretPlans.java b/Mage.Sets/src/mage/cards/s/SecretPlans.java index de84fb8b472..be1ca35e0d5 100644 --- a/Mage.Sets/src/mage/cards/s/SecretPlans.java +++ b/Mage.Sets/src/mage/cards/s/SecretPlans.java @@ -1,7 +1,5 @@ - package mage.cards.s; -import java.util.UUID; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.TurnedFaceUpAllTriggeredAbility; import mage.abilities.effects.common.DrawCardSourceControllerEffect; @@ -10,13 +8,13 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.Zone; -import mage.filter.common.FilterControlledPermanent; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.card.FaceDownPredicate; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class SecretPlans extends CardImpl { @@ -28,15 +26,18 @@ public final class SecretPlans extends CardImpl { } public SecretPlans(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{G}{U}"); - + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}{U}"); // Face-down creatures you control get +0/+1. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(0,1, Duration.WhileOnBattlefield, filter))); + this.addAbility(new SimpleStaticAbility(new BoostControlledEffect( + 0, 1, Duration.WhileOnBattlefield, filter + ))); // Whenever a permanent you control is turned face up, draw a card. - this.addAbility(new TurnedFaceUpAllTriggeredAbility(new DrawCardSourceControllerEffect(1), new FilterControlledPermanent())); - + this.addAbility(new TurnedFaceUpAllTriggeredAbility( + new DrawCardSourceControllerEffect(1), + StaticFilters.FILTER_CONTROLLED_A_PERMANENT + )); } private SecretPlans(final SecretPlans card) { diff --git a/Mage.Sets/src/mage/cards/s/ShivanSandMage.java b/Mage.Sets/src/mage/cards/s/ShivanSandMage.java index f1e5c3c2091..eca0d7e3fe6 100644 --- a/Mage.Sets/src/mage/cards/s/ShivanSandMage.java +++ b/Mage.Sets/src/mage/cards/s/ShivanSandMage.java @@ -1,7 +1,5 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.Mode; @@ -13,21 +11,30 @@ import mage.cards.Card; 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.counters.CounterType; +import mage.filter.common.FilterPermanentOrSuspendedCard; import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.common.TargetPermanentOrSuspendedCard; +import java.util.UUID; + /** - * * @author L_J */ public final class ShivanSandMage extends CardImpl { + private static final FilterPermanentOrSuspendedCard filter + = new FilterPermanentOrSuspendedCard("permanent with a time counter on it or suspended card"); + + static { + filter.getPermanentFilter().add(CounterType.TIME.getPredicate()); + } + public ShivanSandMage(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{R}"); this.subtype.add(SubType.VIASHINO); this.subtype.add(SubType.SHAMAN); this.power = new MageInt(3); @@ -39,9 +46,8 @@ public final class ShivanSandMage extends CardImpl { ability.addTarget(new TargetPermanentOrSuspendedCard()); // Put two time counters on target permanent with a time counter on it or suspended card. - Mode mode = new Mode(); - mode.addEffect(new ShivanSandMageEffect(true)); - mode.addTarget(new TargetPermanentOrSuspendedCard()); + Mode mode = new Mode(new ShivanSandMageEffect(true)); + mode.addTarget(new TargetPermanentOrSuspendedCard(filter, false)); ability.addMode(mode); ability.getModes().addMode(mode); this.addAbility(ability); @@ -61,20 +67,20 @@ public final class ShivanSandMage extends CardImpl { } class ShivanSandMageEffect extends OneShotEffect { - + private final boolean addCounters; - public ShivanSandMageEffect(boolean addCounters) { + ShivanSandMageEffect(boolean addCounters) { super(Outcome.Benefit); this.addCounters = addCounters; if (addCounters) { - this.staticText = "put two time counters on target permanent or suspended card"; + this.staticText = "put two time counters on target permanent with a time counter on it or suspended card"; } else { this.staticText = "remove two time counters from target permanent or suspended card"; } } - public ShivanSandMageEffect(final ShivanSandMageEffect effect) { + private ShivanSandMageEffect(final ShivanSandMageEffect effect) { super(effect); this.addCounters = effect.addCounters; } diff --git a/Mage.Sets/src/mage/cards/s/SidewinderSliver.java b/Mage.Sets/src/mage/cards/s/SidewinderSliver.java index cebb60974ee..2ffb7a4ff66 100644 --- a/Mage.Sets/src/mage/cards/s/SidewinderSliver.java +++ b/Mage.Sets/src/mage/cards/s/SidewinderSliver.java @@ -36,7 +36,7 @@ public final class SidewinderSliver extends CardImpl { // All Sliver creatures have flanking. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(new FlankingAbility(), Duration.WhileOnBattlefield, filter, false) - .setText("all Slivers have flanking") + .setText("all Sliver creatures have flanking") )); } diff --git a/Mage.Sets/src/mage/cards/s/SkitteringMonstrosity.java b/Mage.Sets/src/mage/cards/s/SkitteringMonstrosity.java index 25a20ef5c47..be920cadcad 100644 --- a/Mage.Sets/src/mage/cards/s/SkitteringMonstrosity.java +++ b/Mage.Sets/src/mage/cards/s/SkitteringMonstrosity.java @@ -1,7 +1,5 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.effects.common.SacrificeSourceEffect; @@ -11,8 +9,9 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.filter.StaticFilters; +import java.util.UUID; + /** - * * @author nigelzor */ public final class SkitteringMonstrosity extends CardImpl { @@ -24,7 +23,10 @@ public final class SkitteringMonstrosity extends CardImpl { this.toughness = new MageInt(5); // When you cast a creature spell, sacrifice Skittering Monstrosity. - this.addAbility(new SpellCastControllerTriggeredAbility(new SacrificeSourceEffect(), StaticFilters.FILTER_SPELL_A_CREATURE, false)); + this.addAbility(new SpellCastControllerTriggeredAbility( + new SacrificeSourceEffect(), StaticFilters.FILTER_SPELL_A_CREATURE, + false, "When you cast a creature spell, sacrifice {this}." + )); } private SkitteringMonstrosity(final SkitteringMonstrosity card) { diff --git a/Mage.Sets/src/mage/cards/s/SlimefootTheStowaway.java b/Mage.Sets/src/mage/cards/s/SlimefootTheStowaway.java index 5cf4db8334d..72f5a00063a 100644 --- a/Mage.Sets/src/mage/cards/s/SlimefootTheStowaway.java +++ b/Mage.Sets/src/mage/cards/s/SlimefootTheStowaway.java @@ -1,7 +1,5 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.DiesCreatureTriggeredAbility; @@ -10,27 +8,24 @@ import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.DamagePlayersEffect; import mage.abilities.effects.common.GainLifeEffect; -import mage.constants.SubType; -import mage.constants.SuperType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; import mage.constants.TargetController; -import mage.constants.Zone; import mage.filter.common.FilterControlledPermanent; import mage.game.permanent.token.SaprolingToken; +import java.util.UUID; + /** - * * @author TheElk801 */ public final class SlimefootTheStowaway extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent("a Saproling you control"); - - static { - filter.add(SubType.SAPROLING.getPredicate()); - } + private static final FilterControlledPermanent filter + = new FilterControlledPermanent(SubType.SAPROLING, "a Saproling you control"); public SlimefootTheStowaway(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{G}"); @@ -41,12 +36,14 @@ public final class SlimefootTheStowaway extends CardImpl { this.toughness = new MageInt(3); // Whenever a Saproling you control dies, Slimefoot, the Stowaway deals 1 damage to each opponent and you gain 1 life. - Ability ability = new DiesCreatureTriggeredAbility(new DamagePlayersEffect(1, TargetController.OPPONENT), false, filter); - ability.addEffect(new GainLifeEffect(1)); + Ability ability = new DiesCreatureTriggeredAbility( + new DamagePlayersEffect(1, TargetController.OPPONENT), false, filter + ); + ability.addEffect(new GainLifeEffect(1).concatBy("and")); this.addAbility(ability); // {4}: Create a 1/1 green Saproling creature token. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new SaprolingToken()), new ManaCostsImpl("{4}"))); + this.addAbility(new SimpleActivatedAbility(new CreateTokenEffect(new SaprolingToken()), new ManaCostsImpl("{4}"))); } private SlimefootTheStowaway(final SlimefootTheStowaway card) { diff --git a/Mage.Sets/src/mage/cards/s/StrengthInNumbers.java b/Mage.Sets/src/mage/cards/s/StrengthInNumbers.java index 0f9517387ad..e855988473f 100644 --- a/Mage.Sets/src/mage/cards/s/StrengthInNumbers.java +++ b/Mage.Sets/src/mage/cards/s/StrengthInNumbers.java @@ -1,7 +1,6 @@ - package mage.cards.s; -import java.util.UUID; +import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.AttackingCreatureCount; import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; @@ -12,18 +11,25 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author escplan9 (Derek Monturo - dmontur1 at gmail dot com) */ public final class StrengthInNumbers extends CardImpl { + private static final DynamicValue xValue = new AttackingCreatureCount(); + public StrengthInNumbers(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}"); // Until end of turn, target creature gains trample and gets +X/+X, where X is the number of attacking creatures. - this.getSpellAbility().addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn)); - this.getSpellAbility().addEffect(new BoostTargetEffect(new AttackingCreatureCount("the number of attacking creatures"), new AttackingCreatureCount(), Duration.EndOfTurn, true)); + this.getSpellAbility().addEffect(new GainAbilityTargetEffect( + TrampleAbility.getInstance(), Duration.EndOfTurn + ).setText("Until end of turn, target creature gains trample")); + this.getSpellAbility().addEffect(new BoostTargetEffect( + xValue, xValue, Duration.EndOfTurn, true + ).setText("and gets +X/+X, where X is the number of attacking creatures")); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); } diff --git a/Mage.Sets/src/mage/cards/t/TemurAscendancy.java b/Mage.Sets/src/mage/cards/t/TemurAscendancy.java index 808d0fda8c8..e2a327fa73e 100644 --- a/Mage.Sets/src/mage/cards/t/TemurAscendancy.java +++ b/Mage.Sets/src/mage/cards/t/TemurAscendancy.java @@ -23,7 +23,7 @@ import mage.filter.predicate.mageobject.PowerPredicate; */ public final class TemurAscendancy extends CardImpl { - final private static FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with power 4 or greater"); + final private static FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature with power 4 or greater"); static { filter.add(new PowerPredicate(ComparisonType.MORE_THAN, 3)); } diff --git a/Mage.Sets/src/mage/cards/t/ThelonOfHavenwood.java b/Mage.Sets/src/mage/cards/t/ThelonOfHavenwood.java index e60794c90af..b87598f205f 100644 --- a/Mage.Sets/src/mage/cards/t/ThelonOfHavenwood.java +++ b/Mage.Sets/src/mage/cards/t/ThelonOfHavenwood.java @@ -47,7 +47,7 @@ public final class ThelonOfHavenwood extends CardImpl { // {B}{G}, Exile a Fungus card from a graveyard: Put a spore counter on each Fungus on the battlefield. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersAllEffect(CounterType.SPORE.createInstance(), filterPermanent), new ManaCostsImpl<>("{B}{G}")); - ability.addCost(new ExileFromGraveCost(new TargetCardInASingleGraveyard(1, 1, filterCard))); + ability.addCost(new ExileFromGraveCost(new TargetCardInASingleGraveyard(1, 1, filterCard), "exile a Fungus card from a graveyard")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/t/TheloniteHermit.java b/Mage.Sets/src/mage/cards/t/TheloniteHermit.java index 87a25f7ae25..7f78ecf9f1b 100644 --- a/Mage.Sets/src/mage/cards/t/TheloniteHermit.java +++ b/Mage.Sets/src/mage/cards/t/TheloniteHermit.java @@ -24,7 +24,7 @@ import mage.game.permanent.token.SaprolingToken; */ public final class TheloniteHermit extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Saproling creatures"); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("All Saprolings"); static { filter.add(SubType.SAPROLING.getPredicate()); diff --git a/Mage.Sets/src/mage/cards/t/Timebender.java b/Mage.Sets/src/mage/cards/t/Timebender.java index 75ab3efbd60..6fba549bd17 100644 --- a/Mage.Sets/src/mage/cards/t/Timebender.java +++ b/Mage.Sets/src/mage/cards/t/Timebender.java @@ -1,7 +1,5 @@ - package mage.cards.t; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.Mode; @@ -13,21 +11,30 @@ import mage.cards.Card; 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.counters.CounterType; +import mage.filter.common.FilterPermanentOrSuspendedCard; import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.common.TargetPermanentOrSuspendedCard; +import java.util.UUID; + /** - * * @author L_J */ public final class Timebender extends CardImpl { + private static final FilterPermanentOrSuspendedCard filter + = new FilterPermanentOrSuspendedCard("permanent with a time counter on it or suspended card"); + + static { + filter.getPermanentFilter().add(CounterType.TIME.getPredicate()); + } + public Timebender(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{U}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.WIZARD); this.power = new MageInt(1); @@ -42,9 +49,8 @@ public final class Timebender extends CardImpl { ability.addTarget(new TargetPermanentOrSuspendedCard()); // Put two time counters on target permanent with a time counter on it or suspended card. - Mode mode = new Mode(); - mode.addEffect(new TimebenderEffect(true)); - mode.addTarget(new TargetPermanentOrSuspendedCard()); + Mode mode = new Mode(new TimebenderEffect(true)); + mode.addTarget(new TargetPermanentOrSuspendedCard(filter, false)); ability.addMode(mode); ability.getModes().addMode(mode); this.addAbility(ability); @@ -62,20 +68,20 @@ public final class Timebender extends CardImpl { } class TimebenderEffect extends OneShotEffect { - + private final boolean addCounters; - public TimebenderEffect(boolean addCounters) { + TimebenderEffect(boolean addCounters) { super(Outcome.Benefit); this.addCounters = addCounters; if (addCounters) { - this.staticText = "put two time counters on target permanent or suspended card"; + this.staticText = "put two time counters on target permanent with a time counter on it or suspended card"; } else { this.staticText = "remove two time counters from target permanent or suspended card"; } } - public TimebenderEffect(final TimebenderEffect effect) { + private TimebenderEffect(final TimebenderEffect effect) { super(effect); this.addCounters = effect.addCounters; } diff --git a/Mage.Sets/src/mage/cards/t/TrompTheDomains.java b/Mage.Sets/src/mage/cards/t/TrompTheDomains.java index 99a06632f4d..7c221891994 100644 --- a/Mage.Sets/src/mage/cards/t/TrompTheDomains.java +++ b/Mage.Sets/src/mage/cards/t/TrompTheDomains.java @@ -25,7 +25,7 @@ public final class TrompTheDomains extends CardImpl { // Domain - Until end of turn, creatures you control gain trample and get +1/+1 for each basic land type among lands you control. Effect effect = new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn); - effect.setText("Domain — Until end of turn, creatures you control gain Trample"); + effect.setText("Domain — Until end of turn, creatures you control gain trample"); this.getSpellAbility().addEffect(effect); DynamicValue domain = new DomainValue(); effect = new BoostControlledEffect(domain, domain, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, false); diff --git a/Mage/src/main/java/mage/abilities/CompoundAbility.java b/Mage/src/main/java/mage/abilities/CompoundAbility.java index e07d9349804..9e4afc1b203 100644 --- a/Mage/src/main/java/mage/abilities/CompoundAbility.java +++ b/Mage/src/main/java/mage/abilities/CompoundAbility.java @@ -7,9 +7,9 @@ import java.util.List; * @author noxx */ public class CompoundAbility extends AbilitiesImpl { - + private String ruleText; - + public CompoundAbility(Ability... abilities) { this(null, abilities); } @@ -31,11 +31,13 @@ public class CompoundAbility extends AbilitiesImpl { } StringBuilder sb = new StringBuilder(); - List rules = super.getRules(null,false); + List rules = super.getRules(null, false); for (int index = 0; index < rules.size(); index++) { if (index > 0) { if (index < rules.size() - 1) { sb.append(", "); + } else if (rules.size() > 2) { + sb.append(", and "); } else { sb.append(" and "); } diff --git a/Mage/src/main/java/mage/abilities/costs/common/ExileFromGraveCost.java b/Mage/src/main/java/mage/abilities/costs/common/ExileFromGraveCost.java index af8299e18eb..5a9377fe137 100644 --- a/Mage/src/main/java/mage/abilities/costs/common/ExileFromGraveCost.java +++ b/Mage/src/main/java/mage/abilities/costs/common/ExileFromGraveCost.java @@ -1,9 +1,6 @@ package mage.abilities.costs.common; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.costs.Cost; import mage.abilities.costs.CostImpl; @@ -19,8 +16,11 @@ import mage.target.common.TargetCardInYourGraveyard; import mage.target.targetpointer.FixedTargets; import mage.util.CardUtil; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** - * * @author nantuko */ public class ExileFromGraveCost extends CostImpl { @@ -39,7 +39,7 @@ public class ExileFromGraveCost extends CostImpl { + ' ' + target.getTargetName(); } else { this.text = "exile " - + (target.getTargetName().startsWith("card ") ? "a ":"") + + (target.getTargetName().startsWith("card ") ? "a " : "") + target.getTargetName(); } if (!this.text.endsWith(" from your graveyard")) { @@ -53,6 +53,12 @@ public class ExileFromGraveCost extends CostImpl { this.text = text; } + public ExileFromGraveCost(TargetCardInASingleGraveyard target, String text) { + target.setNotTarget(true); + this.addTarget(target); + this.text = text; + } + public ExileFromGraveCost(TargetCardInASingleGraveyard target) { target.setNotTarget(true); this.addTarget(target); diff --git a/Mage/src/main/java/mage/abilities/effects/common/SacrificeOpponentsEffect.java b/Mage/src/main/java/mage/abilities/effects/common/SacrificeOpponentsEffect.java index f866c26fc76..e86bae36b4c 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/SacrificeOpponentsEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/SacrificeOpponentsEffect.java @@ -1,8 +1,5 @@ package mage.abilities.effects.common; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.StaticValue; @@ -16,6 +13,10 @@ import mage.players.Player; import mage.target.TargetPermanent; import mage.util.CardUtil; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * All opponents have to sacrifice [amount] permanents that match the [filter]. * @@ -82,17 +83,16 @@ public class SacrificeOpponentsEffect extends OneShotEffect { StringBuilder sb = new StringBuilder(); sb.append("each opponent sacrifices "); if (amount.toString().equals("X")) { - sb.append(amount.toString()); + sb.append(amount.toString()).append(' '); } else { if (amount.toString().equals("1")) { if (!filter.getMessage().startsWith("a ") && !filter.getMessage().startsWith("an ")) { - sb.append('a'); + sb.append("a "); } } else { - sb.append(CardUtil.numberToText(amount.toString())); + sb.append(CardUtil.numberToText(amount.toString())).append(' '); } } - sb.append(' '); sb.append(filter.getMessage()); staticText = sb.toString(); } diff --git a/Mage/src/main/java/mage/abilities/keyword/CyclingAbility.java b/Mage/src/main/java/mage/abilities/keyword/CyclingAbility.java index e236cd7fb94..83fb2c1071a 100644 --- a/Mage/src/main/java/mage/abilities/keyword/CyclingAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/CyclingAbility.java @@ -9,6 +9,7 @@ import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; import mage.constants.Zone; import mage.filter.FilterCard; import mage.target.common.TargetCardInLibrary; +import mage.util.CardUtil; /** * @author BetaSteward_at_googlemail.com @@ -47,11 +48,11 @@ public class CyclingAbility extends ActivatedAbilityImpl { public String getRule() { StringBuilder rule = new StringBuilder(this.text); if (cost instanceof ManaCost) { - rule.append(' '); + rule.append(' ').append(cost.getText()); } else { - rule.append("—"); + rule.append("—").append(CardUtil.getTextWithFirstCharUpperCase(cost.getText())).append('.'); } - rule.append(cost.getText()).append(" (").append(super.getRule(true)).append(")"); + rule.append(" (").append(super.getRule(true)).append(")"); return rule.toString(); } } diff --git a/Mage/src/main/java/mage/abilities/keyword/EchoAbility.java b/Mage/src/main/java/mage/abilities/keyword/EchoAbility.java index afdda45c0de..451fa864ca4 100644 --- a/Mage/src/main/java/mage/abilities/keyword/EchoAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/EchoAbility.java @@ -1,4 +1,3 @@ - package mage.abilities.keyword; import mage.abilities.TriggeredAbilityImpl; @@ -15,7 +14,6 @@ import mage.game.events.GameEvent; import java.util.UUID; /** - * * @author Backfir3 */ public class EchoAbility extends TriggeredAbilityImpl { @@ -117,6 +115,9 @@ public class EchoAbility extends TriggeredAbilityImpl { if (echoCosts != null) { sb.append(echoCosts.getText()); } + if (!manaEcho) { + sb.append('.'); + } } sb.append(" (At the beginning of your upkeep, if this came under your control since the beginning of your last upkeep, sacrifice it unless you pay its echo cost.)"); return sb.toString(); diff --git a/Mage/src/main/java/mage/filter/StaticFilters.java b/Mage/src/main/java/mage/filter/StaticFilters.java index 612bad629c1..9ad63e7bd9b 100644 --- a/Mage/src/main/java/mage/filter/StaticFilters.java +++ b/Mage/src/main/java/mage/filter/StaticFilters.java @@ -298,6 +298,12 @@ public final class StaticFilters { FILTER_CONTROLLED_PERMANENT.setLockedFilter(true); } + public static final FilterControlledPermanent FILTER_CONTROLLED_A_PERMANENT = new FilterControlledPermanent("a permanent you control"); + + static { + FILTER_CONTROLLED_A_PERMANENT.setLockedFilter(true); + } + public static final FilterControlledPermanent FILTER_CONTROLLED_PERMANENT_ARTIFACT = new FilterControlledArtifactPermanent(); static { diff --git a/Mage/src/main/java/mage/game/permanent/token/AssemblyWorkerToken.java b/Mage/src/main/java/mage/game/permanent/token/AssemblyWorkerToken.java index 0f8cd508130..dfb513411a0 100644 --- a/Mage/src/main/java/mage/game/permanent/token/AssemblyWorkerToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/AssemblyWorkerToken.java @@ -14,7 +14,7 @@ import java.util.Arrays; public final class AssemblyWorkerToken extends TokenImpl { public AssemblyWorkerToken() { - super("Assembly-Worker", "2/2 Assembly-Worker artifact creature"); + super("Assembly-Worker", "2/2 colorless Assembly-Worker artifact creature token"); cardType.add(CardType.ARTIFACT); cardType.add(CardType.CREATURE); subtype.add(SubType.ASSEMBLY_WORKER); diff --git a/Mage/src/main/java/mage/game/permanent/token/LlanowarElvesToken.java b/Mage/src/main/java/mage/game/permanent/token/LlanowarElvesToken.java index 799e8600b73..4dc4bd75fb9 100644 --- a/Mage/src/main/java/mage/game/permanent/token/LlanowarElvesToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/LlanowarElvesToken.java @@ -14,7 +14,7 @@ import java.util.Arrays; public final class LlanowarElvesToken extends TokenImpl { public LlanowarElvesToken() { - super("Llanowar Elves", "1/1 green Elf Druid creature token named Llanowar Elves with \"{T}: Add {G}.\""); + super("Llanowar Elves", "1/1 green Elf Druid creature token named Llanowar Elves. It has \"{T}: Add {G}.\""); cardType.add(CardType.CREATURE); color.setGreen(true); subtype.add(SubType.ELF); diff --git a/Mage/src/main/java/mage/game/permanent/token/MetallicSliverToken.java b/Mage/src/main/java/mage/game/permanent/token/MetallicSliverToken.java index 5e445dbc5e5..7ee8dfc3652 100644 --- a/Mage/src/main/java/mage/game/permanent/token/MetallicSliverToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/MetallicSliverToken.java @@ -14,7 +14,7 @@ import java.util.Arrays; public final class MetallicSliverToken extends TokenImpl { public MetallicSliverToken() { - super("Metallic Sliver", "1/1 colorless Sliver creature token named Metallic Sliver"); + super("Metallic Sliver", "1/1 colorless Sliver artifact creature token named Metallic Sliver"); cardType.add(CardType.CREATURE); cardType.add(CardType.ARTIFACT); subtype.add(SubType.SLIVER);