diff --git a/Mage.Sets/src/mage/cards/a/AetherWeb.java b/Mage.Sets/src/mage/cards/a/AetherWeb.java index ab7aef2393..e635c846f5 100644 --- a/Mage.Sets/src/mage/cards/a/AetherWeb.java +++ b/Mage.Sets/src/mage/cards/a/AetherWeb.java @@ -1,34 +1,32 @@ package mage.cards.a; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.AsThoughEffectImpl; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.continuous.BoostEnchantedEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.abilities.keyword.FlashAbility; +import mage.abilities.keyword.ReachAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; + import java.util.UUID; -import mage.abilities.StaticAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.AsThoughEffectImpl; -import mage.abilities.effects.common.continuous.BoostEnchantedEffect; -import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; -import mage.abilities.keyword.ReachAbility; -import mage.constants.*; -import mage.abilities.keyword.FlashAbility; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.target.common.TargetCreaturePermanent; -import mage.abilities.Ability; -import mage.abilities.effects.common.AttachEffect; -import mage.target.TargetPermanent; -import mage.abilities.keyword.EnchantAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; - /** - * * @author noahg */ public final class AetherWeb extends CardImpl { public AetherWeb(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}"); - + this.subtype.add(SubType.AURA); // Flash @@ -38,15 +36,15 @@ public final class AetherWeb extends CardImpl { TargetPermanent auraTarget = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - Ability ability = new EnchantAbility(auraTarget.getTargetName()); - this.addAbility(ability); + this.addAbility(new EnchantAbility(auraTarget.getTargetName())); // Enchanted creature gets +1/+1, has reach, and can block creatures with shadow as though they didn't have shadow. - StaticAbility staticAbility = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1, 1) - .setText("Enchanted creature gets +1/+1, has reach, and can block creatures with shadow as though they didn't have shadow.")); - staticAbility.addEffect(new GainAbilityAttachedEffect(ReachAbility.getInstance(), AttachmentType.AURA).setText("")); - staticAbility.addEffect(new AetherWebEffect()); - this.addAbility(staticAbility); + Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(1, 1)); + ability.addEffect(new GainAbilityAttachedEffect( + ReachAbility.getInstance(), AttachmentType.AURA + ).setText(", has reach")); + ability.addEffect(new AetherWebEffect()); + this.addAbility(ability); } private AetherWeb(final AetherWeb card) { @@ -63,7 +61,7 @@ class AetherWebEffect extends AsThoughEffectImpl { public AetherWebEffect() { super(AsThoughEffectType.BLOCK_SHADOW, Duration.WhileOnBattlefield, Outcome.Benefit); - staticText = ""; + staticText = ", and can block creatures with shadow as though they didn't have shadow"; } public AetherWebEffect(final AetherWebEffect effect) { @@ -85,4 +83,4 @@ class AetherWebEffect extends AsThoughEffectImpl { Permanent sourcePermanent = source.getSourcePermanentIfItStillExists(game); return sourcePermanent != null && sourceId.equals(sourcePermanent.getAttachedTo()); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/a/AetherflameWall.java b/Mage.Sets/src/mage/cards/a/AetherflameWall.java index d9ab65b70c..8ae22cb482 100644 --- a/Mage.Sets/src/mage/cards/a/AetherflameWall.java +++ b/Mage.Sets/src/mage/cards/a/AetherflameWall.java @@ -12,19 +12,17 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.constants.Zone; import java.util.UUID; /** - * * @author noahg */ public final class AetherflameWall extends CardImpl { public AetherflameWall(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}"); - + this.subtype.add(SubType.WALL); this.power = new MageInt(0); this.toughness = new MageInt(4); @@ -33,10 +31,13 @@ public final class AetherflameWall extends CardImpl { this.addAbility(DefenderAbility.getInstance()); // Aetherflame Wall can block creatures with shadow as though they didn’t have shadow. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CanBlockAsThoughtItHadShadowEffect(Duration.WhileOnBattlefield))); + this.addAbility(new SimpleStaticAbility(new CanBlockAsThoughtItHadShadowEffect(Duration.WhileOnBattlefield) + .setText("{this} can block creatures with shadow as though they didn't have shadow"))); // {R}: Aetherflame Wall gets +1/+0 until end of turn. - this.addAbility(new SimpleActivatedAbility(new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{R}"))); + this.addAbility(new SimpleActivatedAbility( + new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl<>("{R}") + )); } private AetherflameWall(final AetherflameWall card) { diff --git a/Mage.Sets/src/mage/cards/b/BarbedShocker.java b/Mage.Sets/src/mage/cards/b/BarbedShocker.java index 97406cf666..c921f095ef 100644 --- a/Mage.Sets/src/mage/cards/b/BarbedShocker.java +++ b/Mage.Sets/src/mage/cards/b/BarbedShocker.java @@ -31,8 +31,11 @@ public final class BarbedShocker extends CardImpl { this.addAbility(TrampleAbility.getInstance()); // Haste this.addAbility(HasteAbility.getInstance()); + // Whenever Barbed Shocker deals damage to a player, that player discards all the cards in their hand, then draws that many cards. - this.addAbility(new DealsDamageToAPlayerTriggeredAbility(new BarbedShockerEffect(), false, true)); + this.addAbility(new DealsDamageToAPlayerTriggeredAbility( + new BarbedShockerEffect(), false, true + )); } private BarbedShocker(final BarbedShocker card) { @@ -49,7 +52,7 @@ class BarbedShockerEffect extends OneShotEffect { BarbedShockerEffect() { super(Outcome.Discard); - this.staticText = " that player discards all the cards in their hand, then draws that many cards"; + this.staticText = "that player discards all the cards in their hand, then draws that many cards"; } private BarbedShockerEffect(final BarbedShockerEffect effect) { @@ -64,11 +67,12 @@ class BarbedShockerEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Player targetPlayer = game.getPlayer(targetPointer.getFirst(game, source)); - if (targetPlayer == null) { + if (targetPlayer == null || targetPlayer.getHand().isEmpty()) { return false; } - int count = targetPlayer.discard(targetPlayer.getHand(), false, source, game).size(); - targetPlayer.drawCards(count, source, game); + targetPlayer.drawCards(targetPlayer.discard( + targetPlayer.getHand(), false, source, game + ).size(), source, game); return true; } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/b/Bewilder.java b/Mage.Sets/src/mage/cards/b/Bewilder.java index 10ddaddde5..4d13dcb307 100644 --- a/Mage.Sets/src/mage/cards/b/Bewilder.java +++ b/Mage.Sets/src/mage/cards/b/Bewilder.java @@ -1,7 +1,5 @@ - package mage.cards.b; -import java.util.UUID; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.cards.CardImpl; @@ -10,21 +8,22 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author Loki */ public final class Bewilder extends CardImpl { public Bewilder(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{U}"); - + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{U}"); // Target creature gets -3/-0 until end of turn. this.getSpellAbility().addEffect(new BoostTargetEffect(-3, 0, Duration.EndOfTurn)); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + // Draw a card. - this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
")); } private Bewilder(final Bewilder card) { diff --git a/Mage.Sets/src/mage/cards/c/CurseOfTheCabal.java b/Mage.Sets/src/mage/cards/c/CurseOfTheCabal.java index 48a77cf2ba..2f12b0b3d5 100644 --- a/Mage.Sets/src/mage/cards/c/CurseOfTheCabal.java +++ b/Mage.Sets/src/mage/cards/c/CurseOfTheCabal.java @@ -111,7 +111,7 @@ class CurseOfTheCabalInterveningIfTriggeredAbility extends ConditionalIntervenin ), SuspendedCondition.instance, "At the beginning of each player's upkeep, if {this} is suspended, " - + "that player may sacrifice a permanent. If they do, " + + "that player may sacrifice a permanent. If the player does, " + "put two time counters on {this}." ); // controller has to sac a permanent diff --git a/Mage.Sets/src/mage/cards/d/DAvenantHealer.java b/Mage.Sets/src/mage/cards/d/DAvenantHealer.java index 01193c4a88..9c9fa46236 100644 --- a/Mage.Sets/src/mage/cards/d/DAvenantHealer.java +++ b/Mage.Sets/src/mage/cards/d/DAvenantHealer.java @@ -1,7 +1,5 @@ - package mage.cards.d; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -11,14 +9,14 @@ import mage.abilities.effects.common.PreventDamageToTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; +import mage.target.common.TargetAnyTarget; import mage.target.common.TargetAttackingOrBlockingCreature; -import mage.target.common.TargetCreatureOrPlayer; + +import java.util.UUID; /** - * * @author LoneFox */ public final class DAvenantHealer extends CardImpl { @@ -32,12 +30,15 @@ public final class DAvenantHealer extends CardImpl { this.toughness = new MageInt(2); // {T}: D'Avenant Healer deals 1 damage to target attacking or blocking creature. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new TapSourceCost()); + Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(1), new TapSourceCost()); ability.addTarget(new TargetAttackingOrBlockingCreature()); this.addAbility(ability); + // {T}: Prevent the next 1 damage that would be dealt to any target this turn. - ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PreventDamageToTargetEffect(Duration.EndOfTurn, 1), new TapSourceCost()); - ability.addTarget(new TargetCreatureOrPlayer()); + ability = new SimpleActivatedAbility( + new PreventDamageToTargetEffect(Duration.EndOfTurn, 1), new TapSourceCost() + ); + ability.addTarget(new TargetAnyTarget()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/f/FallenIdeal.java b/Mage.Sets/src/mage/cards/f/FallenIdeal.java index 5ef67ce153..e181745d61 100644 --- a/Mage.Sets/src/mage/cards/f/FallenIdeal.java +++ b/Mage.Sets/src/mage/cards/f/FallenIdeal.java @@ -1,13 +1,10 @@ - package mage.cards.f; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.PutIntoGraveFromBattlefieldSourceTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.common.SacrificeTargetCost; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; @@ -17,13 +14,15 @@ import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT; import mage.target.TargetPermanent; -import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + +import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT; + /** - * * @author fireshoes */ public final class FallenIdeal extends CardImpl { @@ -36,18 +35,19 @@ public final class FallenIdeal extends CardImpl { TargetPermanent auraTarget = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); - Ability ability = new EnchantAbility(auraTarget.getTargetName()); - this.addAbility(ability); + this.addAbility(new EnchantAbility(auraTarget.getTargetName())); // Enchanted creature has flying and "Sacrifice a creature: This creature gets +2/+1 until end of turn." - Effect effect = new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield); - Ability gainedAbility = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); - this.addAbility(gainedAbility); - gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(2, 1, Duration.EndOfTurn), - new SacrificeTargetCost(new TargetControlledCreaturePermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT))); - effect = new GainAbilityAttachedEffect(gainedAbility, AttachmentType.AURA, Duration.WhileOnBattlefield); - effect.setText("Enchanted creature has \"Sacrifice a creature: This creature gets +2/+1 until end of turn.\""); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + Ability ability = new SimpleStaticAbility(new GainAbilityAttachedEffect( + FlyingAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield + )); + ability.addEffect(new GainAbilityAttachedEffect( + new SimpleActivatedAbility( + new BoostSourceEffect(2, 1, Duration.EndOfTurn), + new SacrificeTargetCost(new TargetControlledPermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT)) + ), AttachmentType.AURA, Duration.WhileOnBattlefield + ).setText("and \"Sacrifice a creature: This creature gets +2/+1 until end of turn.\"")); + this.addAbility(ability); // When Fallen Ideal is put into a graveyard from the battlefield, return Fallen Ideal to its owner's hand. this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new ReturnToHandSourceEffect())); diff --git a/Mage.Sets/src/mage/cards/f/FlagstonesOfTrokair.java b/Mage.Sets/src/mage/cards/f/FlagstonesOfTrokair.java index 677916b820..39b4365e94 100644 --- a/Mage.Sets/src/mage/cards/f/FlagstonesOfTrokair.java +++ b/Mage.Sets/src/mage/cards/f/FlagstonesOfTrokair.java @@ -32,7 +32,7 @@ public final class FlagstonesOfTrokair extends CardImpl { this.addAbility(new WhiteManaAbility()); // When Flagstones of Trokair is put into a graveyard from the battlefield, you may search your library for a Plains card and put it onto the battlefield tapped. If you do, shuffle your library. - this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(FILTER), true, false), true, false)); + this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(FILTER), true, true), true, false)); } private FlagstonesOfTrokair(final FlagstonesOfTrokair card) { diff --git a/Mage.Sets/src/mage/cards/g/GemstoneCaverns.java b/Mage.Sets/src/mage/cards/g/GemstoneCaverns.java index d04721cd29..9164ea6c02 100644 --- a/Mage.Sets/src/mage/cards/g/GemstoneCaverns.java +++ b/Mage.Sets/src/mage/cards/g/GemstoneCaverns.java @@ -82,7 +82,7 @@ class GemstoneCavernsAbility extends StaticAbility implements OpeningHandAction @Override public String getRule() { - return "If {this} is in your opening hand and you're not playing first, you may begin the game with {this} on the battlefield with a luck counter on it. If you do, exile a card from your hand."; + return "If {this} is in your opening hand and you're not the starting player, you may begin the game with {this} on the battlefield with a luck counter on it. If you do, exile a card from your hand."; } @Override diff --git a/Mage.Sets/src/mage/cards/g/GlassAsp.java b/Mage.Sets/src/mage/cards/g/GlassAsp.java index e8802e0d93..4ac368e349 100644 --- a/Mage.Sets/src/mage/cards/g/GlassAsp.java +++ b/Mage.Sets/src/mage/cards/g/GlassAsp.java @@ -28,7 +28,7 @@ public final class GlassAsp extends CardImpl { // Whenever Glass Asp deals combat damage to a player, that player loses 2 life at the beginning of their next draw step unless they pay {2} before that step. this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new UnlessPaysDelayedEffect( new ManaCostsImpl("{2}"), new LoseLifeTargetEffect(2), PhaseStep.DRAW, true, - "that player loses 2 life at the beginning of their next draw step unless they pay {2} before that draw step."), + "that player loses 2 life at the beginning of their next draw step unless they pay {2} before that step."), false, true)); } diff --git a/Mage.Sets/src/mage/cards/g/GoblinSkycutter.java b/Mage.Sets/src/mage/cards/g/GoblinSkycutter.java index 1342125e7f..b06a7ee85f 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinSkycutter.java +++ b/Mage.Sets/src/mage/cards/g/GoblinSkycutter.java @@ -40,7 +40,7 @@ public final class GoblinSkycutter extends CardImpl { this.toughness = new MageInt(1); // Sacrifice Goblin Skycutter: Goblin Skycutter deals 2 damage to target creature with flying. That creature loses flying until end of turn. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new SacrificeSourceCost()); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2, "it"), new SacrificeSourceCost()); ability.addEffect(new LoseAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn).setText("that creature loses flying until end of turn")); ability.addTarget(new TargetCreaturePermanent(filter)); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/i/IbHalfheartGoblinTactician.java b/Mage.Sets/src/mage/cards/i/IbHalfheartGoblinTactician.java index 6f8cb02d7b..f69f72839a 100644 --- a/Mage.Sets/src/mage/cards/i/IbHalfheartGoblinTactician.java +++ b/Mage.Sets/src/mage/cards/i/IbHalfheartGoblinTactician.java @@ -29,7 +29,7 @@ import mage.target.common.TargetControlledPermanent; */ public final class IbHalfheartGoblinTactician extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent("two Mountains"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("Mountains"); private static final FilterCreaturePermanent filterGoblin = new FilterCreaturePermanent("another Goblin you control"); static { diff --git a/Mage.Sets/src/mage/cards/i/Ixidron.java b/Mage.Sets/src/mage/cards/i/Ixidron.java index 59698198cc..276024aaff 100644 --- a/Mage.Sets/src/mage/cards/i/Ixidron.java +++ b/Mage.Sets/src/mage/cards/i/Ixidron.java @@ -3,6 +3,7 @@ package mage.cards.i; import java.util.UUID; import mage.MageInt; +import mage.abilities.common.AsEntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; @@ -43,7 +44,7 @@ public final class Ixidron extends CardImpl { this.toughness = new MageInt(0); // As Ixidron enters the battlefield, turn all other nontoken creatures face down. - this.addAbility(new EntersBattlefieldAbility(new BecomesFaceDownCreatureAllEffect(filterTurnFaceDown))); + this.addAbility(new AsEntersBattlefieldAbility(new BecomesFaceDownCreatureAllEffect(filterTurnFaceDown))); // Ixidron's power and toughness are each equal to the number of face-down creatures on the battlefield. this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect(new PermanentsOnBattlefieldCount(filter), Duration.EndOfGame))); diff --git a/Mage.Sets/src/mage/cards/k/KaervekTheMerciless.java b/Mage.Sets/src/mage/cards/k/KaervekTheMerciless.java index 22f1c22853..dbbc452823 100644 --- a/Mage.Sets/src/mage/cards/k/KaervekTheMerciless.java +++ b/Mage.Sets/src/mage/cards/k/KaervekTheMerciless.java @@ -51,7 +51,7 @@ class KaervekTheMercilessEffect extends OneShotEffect { public KaervekTheMercilessEffect() { super(Outcome.Benefit); - this.staticText = "{this} deals damage to any target equal to that spell's mana value"; + this.staticText = "{this} deals damage equal to that spell's mana value to any target"; } public KaervekTheMercilessEffect(final KaervekTheMercilessEffect effect) { diff --git a/Mage.Sets/src/mage/cards/l/LiegeOfThePit.java b/Mage.Sets/src/mage/cards/l/LiegeOfThePit.java index a42774758a..50b0a4b1be 100644 --- a/Mage.Sets/src/mage/cards/l/LiegeOfThePit.java +++ b/Mage.Sets/src/mage/cards/l/LiegeOfThePit.java @@ -57,7 +57,7 @@ class LiegeOfThePitEffect extends OneShotEffect { public LiegeOfThePitEffect() { super(Outcome.Damage); - this.staticText = "Sacrifice a creature other than {this}. If you can't {this} deals 7 damage to you."; + this.staticText = "sacrifice a creature other than {this}. If you can't, {this} deals 7 damage to you."; } public LiegeOfThePitEffect(final LiegeOfThePitEffect effect) { diff --git a/Mage.Sets/src/mage/cards/m/Molder.java b/Mage.Sets/src/mage/cards/m/Molder.java index a4f80e6031..0a41990d80 100644 --- a/Mage.Sets/src/mage/cards/m/Molder.java +++ b/Mage.Sets/src/mage/cards/m/Molder.java @@ -27,7 +27,7 @@ public final class Molder extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{G}"); // Destroy target artifact or enchantment with converted mana cost X. It can't be regenerated. You gain X life. - this.getSpellAbility().addEffect(new DestroyTargetEffect("Destroy target artifact or enchantment with mana value X", true)); + this.getSpellAbility().addEffect(new DestroyTargetEffect("Destroy target artifact or enchantment with mana value X. It can't be regenerated", true)); this.getSpellAbility().addEffect(new GainLifeEffect(ManacostVariableValue.REGULAR)); this.getSpellAbility().setTargetAdjuster(MolderAdjuster.instance); } diff --git a/Mage.Sets/src/mage/cards/o/OrcishCannonade.java b/Mage.Sets/src/mage/cards/o/OrcishCannonade.java index f83d0fe652..fe965ea919 100644 --- a/Mage.Sets/src/mage/cards/o/OrcishCannonade.java +++ b/Mage.Sets/src/mage/cards/o/OrcishCannonade.java @@ -27,7 +27,7 @@ public final class OrcishCannonade extends CardImpl { effect.setText("and 3 damage to you"); this.getSpellAbility().addEffect(effect); // Draw a card. - this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
")); } private OrcishCannonade(final OrcishCannonade card) { diff --git a/Mage.Sets/src/mage/cards/s/SaffiEriksdotter.java b/Mage.Sets/src/mage/cards/s/SaffiEriksdotter.java index 48b69f2c1c..a0168a02bc 100644 --- a/Mage.Sets/src/mage/cards/s/SaffiEriksdotter.java +++ b/Mage.Sets/src/mage/cards/s/SaffiEriksdotter.java @@ -57,7 +57,7 @@ class SaffiEriksdotterEffect extends OneShotEffect { public SaffiEriksdotterEffect() { super(Outcome.PutCreatureInPlay); - this.staticText = "When target creature is put into your graveyard from the battlefield this turn, return that card to the battlefield"; + this.staticText = "When target creature is put into your graveyard this turn, return that card to the battlefield"; } public SaffiEriksdotterEffect(final SaffiEriksdotterEffect effect) { diff --git a/Mage.Sets/src/mage/cards/s/SkulkingKnight.java b/Mage.Sets/src/mage/cards/s/SkulkingKnight.java index 38c4408389..8a6c0ededa 100644 --- a/Mage.Sets/src/mage/cards/s/SkulkingKnight.java +++ b/Mage.Sets/src/mage/cards/s/SkulkingKnight.java @@ -28,7 +28,7 @@ public final class SkulkingKnight extends CardImpl { // Flanking this.addAbility(new FlankingAbility()); // When Skulking Knight becomes the target of a spell or ability, sacrifice it. - this.addAbility(new BecomesTargetTriggeredAbility(new SacrificeSourceEffect())); + this.addAbility(new BecomesTargetTriggeredAbility(new SacrificeSourceEffect().setText("sacrifice it"))); } private SkulkingKnight(final SkulkingKnight card) { diff --git a/Mage.Sets/src/mage/cards/s/SpikeTiller.java b/Mage.Sets/src/mage/cards/s/SpikeTiller.java index c280ad938e..489dc31835 100644 --- a/Mage.Sets/src/mage/cards/s/SpikeTiller.java +++ b/Mage.Sets/src/mage/cards/s/SpikeTiller.java @@ -45,7 +45,7 @@ public final class SpikeTiller extends CardImpl { this.addAbility(ability); // {2}, Remove a +1/+1 counter from Spike Tiller: Target land becomes a 2/2 creature that's still a land. Put a +1/+1 counter on it. - Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesCreatureTargetEffect(new CreatureToken(2, 2), false, true, Duration.EndOfGame).setText("Target land becomes a 2/2 creature that's still a land. "), new GenericManaCost(2)); + Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesCreatureTargetEffect(new CreatureToken(2, 2), false, true, Duration.EndOfGame).setText("Target land becomes a 2/2 creature that's still a land"), new GenericManaCost(2)); ability2.addCost(new RemoveCountersSourceCost(CounterType.P1P1.createInstance())); ability2.addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance()).setText("Put a +1/+1 counter on it.")); ability2.addTarget(new TargetLandPermanent()); diff --git a/Mage.Sets/src/mage/cards/s/SpriteNoble.java b/Mage.Sets/src/mage/cards/s/SpriteNoble.java index eb527b73de..5baa3d98b8 100644 --- a/Mage.Sets/src/mage/cards/s/SpriteNoble.java +++ b/Mage.Sets/src/mage/cards/s/SpriteNoble.java @@ -4,14 +4,14 @@ import mage.MageInt; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.effects.common.continuous.BoostAllEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.constants.Zone; +import mage.constants.TargetController; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.AbilityPredicate; @@ -22,9 +22,11 @@ import java.util.UUID; */ public final class SpriteNoble extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures you control with flying"); + private static final FilterCreaturePermanent filter + = new FilterCreaturePermanent("creatures you control with flying"); static { + filter.add(TargetController.YOU.getControllerPredicate()); filter.add(new AbilityPredicate(FlyingAbility.class)); } @@ -36,11 +38,16 @@ public final class SpriteNoble extends CardImpl { // Flying this.addAbility(FlyingAbility.getInstance()); + // Other creatures you control with flying get +0/+1. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(0, 1, Duration.WhileOnBattlefield, filter, true))); + this.addAbility(new SimpleStaticAbility(new BoostAllEffect( + 0, 1, Duration.WhileOnBattlefield, filter, true + ))); + // {tap}: Other creatures you control with flying get +1/+0 until end of turn. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 0, Duration.EndOfTurn, filter, true), - new TapSourceCost())); + this.addAbility(new SimpleActivatedAbility(new BoostAllEffect( + 1, 0, Duration.EndOfTurn, filter, true + ), new TapSourceCost())); } private SpriteNoble(final SpriteNoble card) { diff --git a/Mage.Sets/src/mage/cards/s/StonebrowKrosanHero.java b/Mage.Sets/src/mage/cards/s/StonebrowKrosanHero.java index 9743ebadd6..8d82b17212 100644 --- a/Mage.Sets/src/mage/cards/s/StonebrowKrosanHero.java +++ b/Mage.Sets/src/mage/cards/s/StonebrowKrosanHero.java @@ -23,7 +23,7 @@ import java.util.UUID; */ public final class StonebrowKrosanHero extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(" creature you control with trample"); + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creature you control with trample"); static { filter.add(new AbilityPredicate(TrampleAbility.class)); } diff --git a/Mage.Sets/src/mage/cards/t/TraitorsClutch.java b/Mage.Sets/src/mage/cards/t/TraitorsClutch.java index 50b5d830ef..28e7f43796 100644 --- a/Mage.Sets/src/mage/cards/t/TraitorsClutch.java +++ b/Mage.Sets/src/mage/cards/t/TraitorsClutch.java @@ -1,10 +1,7 @@ - package mage.cards.t; -import java.util.UUID; import mage.ObjectColor; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.continuous.BecomesColorTargetEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; @@ -14,31 +11,32 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.TimingRule; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class TraitorsClutch extends CardImpl { public TraitorsClutch(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{4}{B}"); - + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{4}{B}"); // Target creature gets +1/+0, becomes black, and gains shadow until end of turn. - this.getSpellAbility().addEffect(new BoostTargetEffect(1,0, Duration.EndOfTurn)); - Effect effect = new BecomesColorTargetEffect(ObjectColor.BLACK, Duration.EndOfTurn); - effect.setText(", becomes black"); - this.getSpellAbility().addEffect(effect); - effect = new GainAbilityTargetEffect(ShadowAbility.getInstance(), Duration.EndOfTurn); - effect.setText(", and gains shadow until end of turn"); - this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addEffect(new BoostTargetEffect( + 1, 0, Duration.EndOfTurn + ).setText("target creature gets +1/+0")); + this.getSpellAbility().addEffect(new BecomesColorTargetEffect( + ObjectColor.BLACK, Duration.EndOfTurn + ).setText(", becomes black")); + this.getSpellAbility().addEffect(new GainAbilityTargetEffect( + ShadowAbility.getInstance(), Duration.EndOfTurn + ).setText(", and gains shadow until end of turn")); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); // Flashback {1}{B} - this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{1}{B}"))); + this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{1}{B}"))); } private TraitorsClutch(final TraitorsClutch card) { diff --git a/Mage.Sets/src/mage/cards/u/UnyaroBees.java b/Mage.Sets/src/mage/cards/u/UnyaroBees.java index 05c9a14042..d797d3087f 100644 --- a/Mage.Sets/src/mage/cards/u/UnyaroBees.java +++ b/Mage.Sets/src/mage/cards/u/UnyaroBees.java @@ -35,7 +35,7 @@ public final class UnyaroBees extends CardImpl { // {G}: Unyaro Bees gets +1/+1 until end of turn. this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 1, Duration.EndOfTurn), new ManaCostsImpl("{G}"))); // {3}{G}, Sacrifice Unyaro Bees: Unyaro Bees deals 2 damage to any target. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new ManaCostsImpl("{3}{G}")); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2, "it"), new ManaCostsImpl("{3}{G}")); ability.addCost(new SacrificeSourceCost()); ability.addTarget(new TargetAnyTarget()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/y/YavimayaDryad.java b/Mage.Sets/src/mage/cards/y/YavimayaDryad.java index e125c1975c..427b2bbf30 100644 --- a/Mage.Sets/src/mage/cards/y/YavimayaDryad.java +++ b/Mage.Sets/src/mage/cards/y/YavimayaDryad.java @@ -60,7 +60,7 @@ class YavimayaDryadEffect extends SearchEffect { public YavimayaDryadEffect(TargetCardInLibrary target) { super(target, Outcome.PutLandInPlay); - staticText = "you may search your library for a Forest card and put it onto the battlefield tapped under target player's control. If you do, shuffle"; + staticText = "you may search your library for a Forest card, put it onto the battlefield tapped under target player's control, then shuffle"; } public YavimayaDryadEffect(final YavimayaDryadEffect effect) { diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index 550511d423..04c4d9b44a 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -62,7 +62,7 @@ public class VerifyCardDataTest { private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class); - private static final String FULL_ABILITIES_CHECK_SET_CODE = "AFC"; // check all abilities and output cards with wrong abilities texts; + private static final String FULL_ABILITIES_CHECK_SET_CODE = "TSP"; // check all abilities and output cards with wrong abilities texts; private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run private static final boolean ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages diff --git a/Mage/src/main/java/mage/abilities/common/ActivateOnlyByOpponentActivatedAbility.java b/Mage/src/main/java/mage/abilities/common/ActivateOnlyByOpponentActivatedAbility.java index 62c78b6791..99cb57d335 100644 --- a/Mage/src/main/java/mage/abilities/common/ActivateOnlyByOpponentActivatedAbility.java +++ b/Mage/src/main/java/mage/abilities/common/ActivateOnlyByOpponentActivatedAbility.java @@ -29,6 +29,6 @@ public class ActivateOnlyByOpponentActivatedAbility extends ActivatedAbilityImpl @Override public String getRule() { - return super.getRule() + " Only any opponent may activate this ability."; + return super.getRule() + " Only your opponents may activate this ability."; } } diff --git a/Mage/src/main/java/mage/abilities/effects/keyword/ProtectionChosenColorAttachedEffect.java b/Mage/src/main/java/mage/abilities/effects/keyword/ProtectionChosenColorAttachedEffect.java index 8520d285d6..01bb7f25ab 100644 --- a/Mage/src/main/java/mage/abilities/effects/keyword/ProtectionChosenColorAttachedEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/keyword/ProtectionChosenColorAttachedEffect.java @@ -27,7 +27,7 @@ public class ProtectionChosenColorAttachedEffect extends ContinuousEffectImpl { public ProtectionChosenColorAttachedEffect(boolean notRemoveItself) { super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility); this.notRemoveItself = notRemoveItself; - staticText = "{this} has protection from the chosen color" + (notRemoveItself ? ". This effect doesn't remove {this}" : ""); + staticText = "enchanted creature has protection from the chosen color" + (notRemoveItself ? ". This effect doesn't remove {this}" : ""); } public ProtectionChosenColorAttachedEffect(final ProtectionChosenColorAttachedEffect effect) { diff --git a/Mage/src/main/java/mage/abilities/effects/mana/AddManaInAnyCombinationEffect.java b/Mage/src/main/java/mage/abilities/effects/mana/AddManaInAnyCombinationEffect.java index 30490589f2..bad7e9da6c 100644 --- a/Mage/src/main/java/mage/abilities/effects/mana/AddManaInAnyCombinationEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/mana/AddManaInAnyCombinationEffect.java @@ -169,7 +169,7 @@ public class AddManaInAnyCombinationEffect extends ManaEffect { sb.append('{').append(coloredManaSymbol.toString()).append('}'); } } - if (amountString.equals("X")) { + if (amountString.equals("X") && !amount.getMessage().isEmpty()) { sb.append(", where X is "); sb.append(amount.getMessage()); }