From 61fa0561655a16c92a127fcae05950cddbde1e4b Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Mon, 22 Jul 2019 18:17:34 -0400 Subject: [PATCH] various text fixes for M20 cards --- .../src/mage/cards/a/AggressiveMammoth.java | 8 +-- .../src/mage/cards/c/CelestialMessenger.java | 2 +- Mage.Sets/src/mage/cards/m/MasterSplicer.java | 13 ++--- .../src/mage/cards/m/MomentOfHeroism.java | 15 +++--- .../src/mage/cards/p/PatternMatcher.java | 5 +- .../mage/cards/r/RienneAngelOfRebirth.java | 4 +- .../src/mage/cards/s/ScholarOfTheAges.java | 3 +- .../src/mage/cards/s/SerrasGuardian.java | 10 ++-- .../src/mage/cards/s/SkeletonArcher.java | 8 +-- Mage.Sets/src/mage/cards/s/SorinsThirst.java | 14 +++-- .../src/mage/cards/v/VialOfDragonfire.java | 11 ++-- Mage.Sets/src/mage/sets/CoreSet2020.java | 6 +-- .../cost/SpellCostReductionSourceEffect.java | 4 +- .../common/discard/DiscardHandAllEffect.java | 8 +-- ...SearchLibraryGraveyardPutInHandEffect.java | 3 +- Utils/mtg-cards-data.txt | 54 ++++++++++++++++--- 16 files changed, 99 insertions(+), 69 deletions(-) diff --git a/Mage.Sets/src/mage/cards/a/AggressiveMammoth.java b/Mage.Sets/src/mage/cards/a/AggressiveMammoth.java index 5916a3abd25..89286e6e847 100644 --- a/Mage.Sets/src/mage/cards/a/AggressiveMammoth.java +++ b/Mage.Sets/src/mage/cards/a/AggressiveMammoth.java @@ -1,20 +1,20 @@ package mage.cards.a; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; -import mage.constants.SubType; import mage.abilities.keyword.TrampleAbility; 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.filter.StaticFilters; +import java.util.UUID; + /** - * * @author TheElk801 */ public final class AggressiveMammoth extends CardImpl { @@ -35,7 +35,7 @@ public final class AggressiveMammoth extends CardImpl { new GainAbilityControlledEffect( TrampleAbility.getInstance(), Duration.WhileOnBattlefield, - StaticFilters.FILTER_CONTROLLED_CREATURES, + StaticFilters.FILTER_PERMANENT_CREATURES, true ) )); diff --git a/Mage.Sets/src/mage/cards/c/CelestialMessenger.java b/Mage.Sets/src/mage/cards/c/CelestialMessenger.java index 36fedf55300..cfe75b9dbb8 100644 --- a/Mage.Sets/src/mage/cards/c/CelestialMessenger.java +++ b/Mage.Sets/src/mage/cards/c/CelestialMessenger.java @@ -43,7 +43,7 @@ public final class CelestialMessenger extends CardImpl { // Celestial Messenger gets +1/+1 as long as you control a Yanling planeswalker. this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), - condition, "gets +1/+1 as long as you control a Yanling planeswalker" + condition, "{this} gets +1/+1 as long as you control a Yanling planeswalker" ))); } diff --git a/Mage.Sets/src/mage/cards/m/MasterSplicer.java b/Mage.Sets/src/mage/cards/m/MasterSplicer.java index 1b54b3214e0..f9d330160b7 100644 --- a/Mage.Sets/src/mage/cards/m/MasterSplicer.java +++ b/Mage.Sets/src/mage/cards/m/MasterSplicer.java @@ -1,7 +1,6 @@ package mage.cards.m; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; @@ -14,23 +13,19 @@ import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.SubtypePredicate; import mage.game.permanent.token.GolemToken; +import java.util.UUID; + /** - * * @author North, Loki */ public final class MasterSplicer extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Golem creatures"); - - static { - filter.add(new SubtypePredicate(SubType.GOLEM)); - } + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.GOLEM, "Golems"); public MasterSplicer(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.HUMAN); this.subtype.add(SubType.ARTIFICER); diff --git a/Mage.Sets/src/mage/cards/m/MomentOfHeroism.java b/Mage.Sets/src/mage/cards/m/MomentOfHeroism.java index cf5a7924513..c61984ef643 100644 --- a/Mage.Sets/src/mage/cards/m/MomentOfHeroism.java +++ b/Mage.Sets/src/mage/cards/m/MomentOfHeroism.java @@ -1,7 +1,5 @@ - package mage.cards.m; -import java.util.UUID; import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.keyword.LifelinkAbility; @@ -11,18 +9,23 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** * @author nantuko */ public final class MomentOfHeroism extends CardImpl { public MomentOfHeroism(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{W}"); - + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{W}"); // Target creature gets +2/+2 and gains lifelink until end of turn. - this.getSpellAbility().addEffect(new BoostTargetEffect(2, 2, Duration.EndOfTurn)); - this.getSpellAbility().addEffect(new GainAbilityTargetEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn)); + this.getSpellAbility().addEffect(new BoostTargetEffect( + 2, 2, Duration.EndOfTurn + ).setText("target creature gets +2/+2")); + this.getSpellAbility().addEffect(new GainAbilityTargetEffect( + LifelinkAbility.getInstance(), Duration.EndOfTurn + ).setText("and gains lifelink until end of turn")); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); } diff --git a/Mage.Sets/src/mage/cards/p/PatternMatcher.java b/Mage.Sets/src/mage/cards/p/PatternMatcher.java index b22972117c9..61844ffa6d1 100644 --- a/Mage.Sets/src/mage/cards/p/PatternMatcher.java +++ b/Mage.Sets/src/mage/cards/p/PatternMatcher.java @@ -12,7 +12,6 @@ import mage.constants.Outcome; import mage.constants.SubType; import mage.filter.FilterCard; import mage.filter.StaticFilters; -import mage.filter.common.FilterCreatureCard; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.NamePredicate; import mage.game.Game; @@ -54,7 +53,7 @@ class RegularExpression extends OneShotEffect { RegularExpression() { super(Outcome.Benefit); - staticText = "search your library for a creature card with the same name as another creature you control, " + + staticText = "search your library for a card with the same name as another creature you control, " + "reveal it, put it into your hand, then shuffle your library."; } @@ -82,7 +81,7 @@ class RegularExpression extends OneShotEffect { .filter(s -> !"".equals(s)) .forEach(s -> predicates.add(new NamePredicate(s))); FilterCard filter - = new FilterCreatureCard("a creature card with the same name as another creature you control"); + = new FilterCard("a creature card with the same name as another creature you control"); filter.add(Predicates.or(predicates)); return new SearchLibraryPutInHandEffect( new TargetCardInLibrary(filter), true, true diff --git a/Mage.Sets/src/mage/cards/r/RienneAngelOfRebirth.java b/Mage.Sets/src/mage/cards/r/RienneAngelOfRebirth.java index 2eb1d62fd71..4da62632650 100644 --- a/Mage.Sets/src/mage/cards/r/RienneAngelOfRebirth.java +++ b/Mage.Sets/src/mage/cards/r/RienneAngelOfRebirth.java @@ -108,8 +108,8 @@ class RienneAngelOfRebirthTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { - return "Whenever another multicolored creature you control is put into a graveyard from the battlefield, " + - "return that card to its owner's hand at the beginning of the next end step"; + return "Whenever another multicolored creature you control dies, " + + "return it to its owner’s hand at the beginning of the next end step."; } } diff --git a/Mage.Sets/src/mage/cards/s/ScholarOfTheAges.java b/Mage.Sets/src/mage/cards/s/ScholarOfTheAges.java index bc51a988b6e..dc66087f911 100644 --- a/Mage.Sets/src/mage/cards/s/ScholarOfTheAges.java +++ b/Mage.Sets/src/mage/cards/s/ScholarOfTheAges.java @@ -19,7 +19,8 @@ import java.util.UUID; */ public final class ScholarOfTheAges extends CardImpl { - private static final FilterCard filter = new FilterInstantOrSorceryCard("instant and/or sorcery cards"); + private static final FilterCard filter + = new FilterInstantOrSorceryCard("instant and/or sorcery cards from your graveyard"); public ScholarOfTheAges(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{U}{U}"); diff --git a/Mage.Sets/src/mage/cards/s/SerrasGuardian.java b/Mage.Sets/src/mage/cards/s/SerrasGuardian.java index e58e5e18d56..5ea66b84fbd 100644 --- a/Mage.Sets/src/mage/cards/s/SerrasGuardian.java +++ b/Mage.Sets/src/mage/cards/s/SerrasGuardian.java @@ -1,21 +1,20 @@ package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; -import mage.constants.SubType; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.VigilanceAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; import mage.filter.StaticFilters; +import java.util.UUID; + /** - * * @author TheElk801 */ public final class SerrasGuardian extends CardImpl { @@ -35,11 +34,10 @@ public final class SerrasGuardian extends CardImpl { // Other creatures you control have vigilance. this.addAbility(new SimpleStaticAbility( - Zone.BATTLEFIELD, new GainAbilityControlledEffect( VigilanceAbility.getInstance(), Duration.WhileOnBattlefield, - StaticFilters.FILTER_CONTROLLED_CREATURES, + StaticFilters.FILTER_PERMANENT_CREATURES, true ) )); diff --git a/Mage.Sets/src/mage/cards/s/SkeletonArcher.java b/Mage.Sets/src/mage/cards/s/SkeletonArcher.java index 59609d28126..9a7dffa93b4 100644 --- a/Mage.Sets/src/mage/cards/s/SkeletonArcher.java +++ b/Mage.Sets/src/mage/cards/s/SkeletonArcher.java @@ -1,18 +1,18 @@ package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.DamageTargetEffect; -import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.SubType; import mage.target.common.TargetAnyTarget; +import java.util.UUID; + /** - * * @author TheElk801 */ public final class SkeletonArcher extends CardImpl { @@ -26,7 +26,7 @@ public final class SkeletonArcher extends CardImpl { this.toughness = new MageInt(3); // When Skeleton Archer enters the battlefield, it deals 1 damage to any target. - Ability ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(1), false); + Ability ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(1, "it"), false); ability.addTarget(new TargetAnyTarget()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SorinsThirst.java b/Mage.Sets/src/mage/cards/s/SorinsThirst.java index 63bfa2f6623..0867591e5ab 100644 --- a/Mage.Sets/src/mage/cards/s/SorinsThirst.java +++ b/Mage.Sets/src/mage/cards/s/SorinsThirst.java @@ -1,8 +1,5 @@ - - package mage.cards.s; -import java.util.UUID; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.GainLifeEffect; import mage.cards.CardImpl; @@ -10,21 +7,22 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author Loki */ public final class SorinsThirst extends CardImpl { - public SorinsThirst (UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{B}{B}"); + public SorinsThirst(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{B}{B}"); this.getSpellAbility().addEffect(new DamageTargetEffect(2)); - this.getSpellAbility().addEffect(new GainLifeEffect(2)); + this.getSpellAbility().addEffect(new GainLifeEffect(2).concatBy("and")); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); } - public SorinsThirst (final SorinsThirst card) { + public SorinsThirst(final SorinsThirst card) { super(card); } diff --git a/Mage.Sets/src/mage/cards/v/VialOfDragonfire.java b/Mage.Sets/src/mage/cards/v/VialOfDragonfire.java index 23735c6903a..5a5cbe42c9f 100644 --- a/Mage.Sets/src/mage/cards/v/VialOfDragonfire.java +++ b/Mage.Sets/src/mage/cards/v/VialOfDragonfire.java @@ -1,7 +1,5 @@ - package mage.cards.v; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; @@ -14,22 +12,23 @@ import mage.constants.CardType; import mage.constants.Zone; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author jeffwadsworth */ public final class VialOfDragonfire extends CardImpl { public VialOfDragonfire(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}"); // {2}, {T}, Sacrifice Vial of Dragonfire: Vial of Dragonfire deals 2 damage to target creature. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new ManaCostsImpl("{2}")); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2, "it"), new ManaCostsImpl("{2}")); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); - + } public VialOfDragonfire(final VialOfDragonfire card) { diff --git a/Mage.Sets/src/mage/sets/CoreSet2020.java b/Mage.Sets/src/mage/sets/CoreSet2020.java index b40bd0d563e..8c04f68cf6d 100644 --- a/Mage.Sets/src/mage/sets/CoreSet2020.java +++ b/Mage.Sets/src/mage/sets/CoreSet2020.java @@ -48,13 +48,13 @@ public final class CoreSet2020 extends ExpansionSet { cards.add(new SetCardInfo("Agent of Treachery", 43, Rarity.RARE, mage.cards.a.AgentOfTreachery.class)); cards.add(new SetCardInfo("Aggressive Mammoth", 337, Rarity.RARE, mage.cards.a.AggressiveMammoth.class)); cards.add(new SetCardInfo("Agonizing Syphon", 83, Rarity.COMMON, mage.cards.a.AgonizingSyphon.class)); - cards.add(new SetCardInfo("Angelic Guardian", 302, Rarity.RARE, mage.cards.a.AngelicGuardian.class)); cards.add(new SetCardInfo("Air Elemental", 44, Rarity.UNCOMMON, mage.cards.a.AirElemental.class)); cards.add(new SetCardInfo("Ajani, Inspiring Leader", 282, Rarity.MYTHIC, mage.cards.a.AjaniInspiringLeader.class)); cards.add(new SetCardInfo("Ajani, Strength of the Pride", 2, Rarity.MYTHIC, mage.cards.a.AjaniStrengthOfThePride.class)); cards.add(new SetCardInfo("Ancestral Blade", 3, Rarity.UNCOMMON, mage.cards.a.AncestralBlade.class)); cards.add(new SetCardInfo("Angel of Vitality", 4, Rarity.UNCOMMON, mage.cards.a.AngelOfVitality.class)); cards.add(new SetCardInfo("Angelic Gift", 5, Rarity.COMMON, mage.cards.a.AngelicGift.class)); + cards.add(new SetCardInfo("Angelic Guardian", 302, Rarity.RARE, mage.cards.a.AngelicGuardian.class)); cards.add(new SetCardInfo("Anticipate", 45, Rarity.COMMON, mage.cards.a.Anticipate.class)); cards.add(new SetCardInfo("Anvilwrought Raptor", 221, Rarity.COMMON, mage.cards.a.AnvilwroughtRaptor.class)); cards.add(new SetCardInfo("Apostle of Purifying Light", 6, Rarity.UNCOMMON, mage.cards.a.ApostleOfPurifyingLight.class)); @@ -175,7 +175,7 @@ public final class CoreSet2020 extends ExpansionSet { cards.add(new SetCardInfo("Gorging Vulture", 102, Rarity.COMMON, mage.cards.g.GorgingVulture.class)); cards.add(new SetCardInfo("Grafdigger's Cage", 227, Rarity.RARE, mage.cards.g.GrafdiggersCage.class)); cards.add(new SetCardInfo("Gravedigger", 103, Rarity.UNCOMMON, mage.cards.g.Gravedigger.class)); - cards.add(new SetCardInfo("Gravewalker", 323, Rarity.RARE, mage.cards.g.Gravewaker.class)); + cards.add(new SetCardInfo("Gravewaker", 323, Rarity.RARE, mage.cards.g.Gravewaker.class)); cards.add(new SetCardInfo("Greenwood Sentinel", 174, Rarity.COMMON, mage.cards.g.GreenwoodSentinel.class)); cards.add(new SetCardInfo("Griffin Protector", 20, Rarity.COMMON, mage.cards.g.GriffinProtector.class)); cards.add(new SetCardInfo("Griffin Sentinel", 21, Rarity.COMMON, mage.cards.g.GriffinSentinel.class)); @@ -357,8 +357,8 @@ public final class CoreSet2020 extends ExpansionSet { cards.add(new SetCardInfo("Undead Servant", 118, Rarity.COMMON, mage.cards.u.UndeadServant.class)); cards.add(new SetCardInfo("Unholy Indenture", 119, Rarity.COMMON, mage.cards.u.UnholyIndenture.class)); cards.add(new SetCardInfo("Unsummon", 78, Rarity.COMMON, mage.cards.u.Unsummon.class)); - cards.add(new SetCardInfo("Vampire of the Dire Moon", 120, Rarity.UNCOMMON, mage.cards.v.VampireOfTheDireMoon.class)); cards.add(new SetCardInfo("Vampire Opportunist", 326, Rarity.COMMON, mage.cards.v.VampireOpportunist.class)); + cards.add(new SetCardInfo("Vampire of the Dire Moon", 120, Rarity.UNCOMMON, mage.cards.v.VampireOfTheDireMoon.class)); cards.add(new SetCardInfo("Veil of Summer", 198, Rarity.UNCOMMON, mage.cards.v.VeilOfSummer.class)); cards.add(new SetCardInfo("Vengeful Warchief", 121, Rarity.UNCOMMON, mage.cards.v.VengefulWarchief.class)); cards.add(new SetCardInfo("Vial of Dragonfire", 241, Rarity.COMMON, mage.cards.v.VialOfDragonfire.class)); diff --git a/Mage/src/main/java/mage/abilities/effects/common/cost/SpellCostReductionSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/cost/SpellCostReductionSourceEffect.java index 4e62811543f..e280df5a066 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/cost/SpellCostReductionSourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/cost/SpellCostReductionSourceEffect.java @@ -31,7 +31,7 @@ public class SpellCostReductionSourceEffect extends CostModificationEffectImpl { this.condition = condition; StringBuilder sb = new StringBuilder(); - sb.append("{this} costs "); + sb.append("this spell costs "); for (String manaSymbol : manaCostsToReduce.getSymbols()) { sb.append(manaSymbol); } @@ -52,7 +52,7 @@ public class SpellCostReductionSourceEffect extends CostModificationEffectImpl { this.amount = amount; this.condition = condition; StringBuilder sb = new StringBuilder(); - sb.append("{this} costs {").append(amount).append("} less to cast"); + sb.append("this spell costs {").append(amount).append("} less to cast"); if (this.condition != null) { sb.append(" ").append(this.condition.toString().startsWith("if ") ? "" : "if "); sb.append(this.condition.toString()); diff --git a/Mage/src/main/java/mage/abilities/effects/common/discard/DiscardHandAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/discard/DiscardHandAllEffect.java index eb7adca5287..d6cb2f4eb78 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/discard/DiscardHandAllEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/discard/DiscardHandAllEffect.java @@ -1,8 +1,5 @@ - package mage.abilities.effects.common.discard; -import java.util.Set; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.Card; @@ -10,6 +7,9 @@ import mage.constants.Outcome; import mage.game.Game; import mage.players.Player; +import java.util.Set; +import java.util.UUID; + /** * @author mluds */ @@ -17,7 +17,7 @@ public class DiscardHandAllEffect extends OneShotEffect { public DiscardHandAllEffect() { super(Outcome.Discard); - this.staticText = "Each player discards their hand"; + this.staticText = "each player discards their hand"; } public DiscardHandAllEffect(final DiscardHandAllEffect effect) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutInHandEffect.java b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutInHandEffect.java index e23b92b1dcc..7af7131b283 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutInHandEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutInHandEffect.java @@ -14,7 +14,6 @@ import mage.target.TargetCard; import mage.target.common.TargetCardInLibrary; /** - * * @author Styxo */ public class SearchLibraryGraveyardPutInHandEffect extends OneShotEffect { @@ -34,7 +33,7 @@ public class SearchLibraryGraveyardPutInHandEffect extends OneShotEffect { super(Outcome.Benefit); this.filter = filter; this.forceToSearchBoth = forceToSearchBoth; - staticText = (youMay ? "You may" : "") + " search your library and" + (forceToSearchBoth ? "" : "/or") + " graveyard for a card named " + filter.getMessage() + staticText = (youMay ? "you may" : "") + " search your library and" + (forceToSearchBoth ? "" : "/or") + " graveyard for a card named " + filter.getMessage() + ", reveal it, and put it into your hand. " + (forceToSearchBoth ? "Then shuffle your library" : "If you search your library this way, shuffle it"); } diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index 4213616d478..820d1f2814b 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -35387,7 +35387,7 @@ Eternal Isolation|Core Set 2020|15|U|{1}{W}|Sorcery|||Put target creature with p Fencing Ace|Core Set 2020|16|U|{1}{W}|Creature - Human Soldier|1|1|Double strike| Gauntlets of Light|Core Set 2020|17|U|{2}{W}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +0/+2 and assigns combat damage equal to its toughness rather than its power.$Enchanted creature has "{2}{W}: Untap this creature."| Glaring Aegis|Core Set 2020|18|C|{W}|Enchantment - Aura|||Enchant creature$When Glaring Aegis enters the battlefield, tap target creature an opponent controls.$Enchanted creature gets +1/+3.| -Gods Willing|Core Set 2020|19|U|{W}|Instant|||Target creature you control gains protection from the color of your choice until end of turn. Scry 1.| +Gods Willing|Core Set 2020|19|U|{W}|Instant|||Target creature you control gains protection from the color of your choice until end of turn.$Scry 1.| Griffin Protector|Core Set 2020|20|C|{3}{W}|Creature - Griffin|2|3|Flying$Whenever another creature enters the battlefield under your control, Griffin Protector gets +1/+1 until end of turn.| Griffin Sentinel|Core Set 2020|21|C|{2}{W}|Creature - Griffin|1|3|Flying$Vigilance| Hanged Executioner|Core Set 2020|22|R|{2}{W}|Creature - Spirit|1|1|Flying$When Hanged Executioner enters the battlefield, create a 1/1 white Spirit creature token with flying.${3}{W}, Exile Hanged Executioner: Exile target creature.| @@ -35397,7 +35397,7 @@ Inspiring Captain|Core Set 2020|25|C|{3}{W}|Creature - Human Knight|3|3|When Ins Leyline of Sanctity|Core Set 2020|26|R|{2}{W}{W}|Enchantment|||If Leyline of Sanctity is in your opening hand, you may begin the game with it on the battlefield.$You have hexproof.| Loxodon Lifechanter|Core Set 2020|27|R|{5}{W}|Creature - Elephant Cleric|4|6|When Loxodon Lifechanter enters the battlefield, you may have your life total become the total toughness of creatures you control.${5}{W}: Loxodon Lifechanter gets +X/+X until end of turn, where X is your life total.| Loyal Pegasus|Core Set 2020|28|U|{W}|Creature - Pegasus|2|1|Flying$Loyal Pegasus can't attack or block alone.| -Master Splicer|Core Set 2020|29|U|{3}{W}|Creature - Human Artificer|1|1|When Master Splicer enters the battlefield, create a 3/3 colorless Golem artifact creature token.$Golem creatures you control get +1/+1.| +Master Splicer|Core Set 2020|29|U|{3}{W}|Creature - Human Artificer|1|1|When Master Splicer enters the battlefield, create a 3/3 colorless Golem artifact creature token.$Golems you control get +1/+1.| Moment of Heroism|Core Set 2020|30|C|{1}{W}|Instant|||Target creature gets +2/+2 and gains lifelink until end of turn.| Moorland Inquisitor|Core Set 2020|31|C|{1}{W}|Creature - Human Soldier|2|2|{2}{W}: Moorland Inquisitor gains first strike until end of turn.| Pacifism|Core Set 2020|32|C|{1}{W}|Enchantment - Aura|||Enchant creature$Enchanted creature can't attack or block.| @@ -35436,7 +35436,7 @@ Leyline of Anticipation|Core Set 2020|64|R|{2}{U}{U}|Enchantment|||If Leyline of Masterful Replication|Core Set 2020|65|R|{5}{U}|Instant|||Choose one —$• Create two 3/3 colorless Golem artifact creature tokens.$• Choose target artifact you control. Each other artifact you control becomes a copy of that artifact until end of turn.| Metropolis Sprite|Core Set 2020|66|C|{1}{U}|Creature - Faerie Rogue|1|2|Flying${U}: Metropolis Sprite gets +1/-1 until end of turn.| Moat Piranhas|Core Set 2020|67|C|{1}{U}|Creature - Fish|3|3|Defender| -Mu Yanling, Sky Dancer|Core Set 2020|68|M|{1}{U}{U}|Legendary Planeswalker - Yanling|2|+2: Until your next turn, up to one target creature gets -2/-0 and loses flying.$−3: Create a 4/4 blue Elemental Bird creature token with flying.$−8: You get an emblem with "Islands you control have '{T}: Draw a card'."| +Mu Yanling, Sky Dancer|Core Set 2020|68|M|{1}{U}{U}|Legendary Planeswalker - Yanling|2|+2: Until your next turn, up to one target creature gets -2/-0 and loses flying.$−3: Create a 4/4 blue Elemental Bird creature token with flying.$−8: You get an emblem with "Islands you control have '{T}: Draw a card.'"| Negate|Core Set 2020|69|C|{1}{U}|Instant|||Counter target noncreature spell.| Octoprophet|Core Set 2020|70|C|{3}{U}|Creature - Octopus|3|3|When Octoprophet enters the battlefield, scry 2.| Portal of Sanctuary|Core Set 2020|71|U|{2}{U}|Artifact|||{1}, {T}: Return target creature you control and each Aura attached to it to their owners' hands. Activate this ability only during your turn.| @@ -35456,9 +35456,9 @@ Audacious Thief|Core Set 2020|84|C|{2}{B}|Creature - Human Rogue|2|2|Whenever Au Barony Vampire|Core Set 2020|85|C|{2}{B}|Creature - Vampire|3|2|| Bladebrand|Core Set 2020|86|C|{1}{B}|Instant|||Target creature gains deathtouch until end of turn.$Draw a card.| Blightbeetle|Core Set 2020|87|U|{1}{B}|Creature - Insect|1|1|Protection from green$Creatures your opponents control can't have +1/+1 counters put on them.| -Blood Burglar|Core Set 2020|88|C|{1}{B}|Creature - Vampire Rogue|2|2|As long as it's your turn, Blood Burglar has lifelink.| +Blood Burglar|Core Set 2020|88|C|{1}{B}|Creature - Vampire Rogue|2|2|As long as it's your turn, Blood Burglar has lifelink.(Damage dealt by this creature also causes you to gain that much life.)| Blood for Bones|Core Set 2020|89|U|{3}{B}|Sorcery|||As an additional cost to cast this spell, sacrifice a creature.$Return a creature card from your graveyard to the battlefield, then return another creature card from your graveyard to your hand.| -Bloodsoaked Altar|Core Set 2020|90|U|{4}{B}{B}|Artifact|||{T}, Pay 2 life, Discard a card, Sacrifice a creature: Create a 5/5 black Demon creature token with flying. Activate this ability only any time you could play a sorcery.| +Bloodsoaked Altar|Core Set 2020|90|U|{4}{B}{B}|Artifact|||{T}, Pay 2 life, Discard a card, Sacrifice a creature: Create a 5/5 black Demon creature token with flying. Activate this ability only any time you could cast a sorcery.| Bloodthirsty Aerialist|Core Set 2020|91|U|{1}{B}{B}|Creature - Vampire Rogue|2|3|Flying$Whenever you gain life, put a +1/+1 counter on Bloodthirsty Aerialist.| Bone Splinters|Core Set 2020|92|C|{B}|Sorcery|||As an additional cost to cast this spell, sacrifice a creature.$Destroy target creature.| Boneclad Necromancer|Core Set 2020|93|C|{3}{B}{B}|Creature - Human Wizard|3|3|When Boneclad Necromancer enters the battlefield, you may exile target creature card from a graveyard. If you do, create a 2/2 black Zombie creature token.| @@ -35589,7 +35589,7 @@ Risen Reef|Core Set 2020|217|U|{1}{G}{U}|Creature - Elemental|1|1|Whenever Risen Skyknight Vanguard|Core Set 2020|218|U|{R}{W}|Creature - Human Knight|1|2|Flying$Whenever Skyknight Vanguard attacks, create a 1/1 white Soldier creature token that's tapped and attacking.| Tomebound Lich|Core Set 2020|219|U|{1}{U}{B}|Creature - Zombie Wizard|1|3|Deathtouch$Lifelink$Whenever Tomebound Lich enters the battlefield or deals combat damage to a player, draw a card, then discard a card.| Yarok, the Desecrated|Core Set 2020|220|M|{2}{B}{G}{U}|Legendary Creature - Elemental Horror|3|5|Deathtouch, lifelink$If a permanent entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time.| -Anvilwrought Raptor|Core Set 2020|221|C|{4}|Artifact Creature - Bird|2|1|Flying, first strike| +Anvilwrought Raptor|Core Set 2020|221|C|{4}|Artifact Creature - Bird|2|1|Flying$First strike| Bag of Holding|Core Set 2020|222|R|{1}|Artifact|||Whenever you discard a card, exile that card from your graveyard.${2}, {T}: Draw a card, then discard a card.${4}, {T}, Sacrifice Bag of Holding: Return all cards exiled with Bag of Holding to their owner's hand.| Colossus Hammer|Core Set 2020|223|U|{1}|Artifact - Equipment|||Equipped creature gets +10/+10 and loses flying.$Equip {8}| Diamond Knight|Core Set 2020|224|U|{3}|Artifact Creature - Knight|1|1|Vigilance$As Diamond Knight enters the battlefield, choose a color.$Whenever you cast a spell of the chosen color, put a +1/+1 counter on Diamond Knight.| @@ -35602,7 +35602,7 @@ Manifold Key|Core Set 2020|230|U|{1}|Artifact|||{1}, {T}: Untap another target a Marauder's Axe|Core Set 2020|231|C|{2}|Artifact - Equipment|||Equipped creature gets +2/+0.$Equip {2}| Meteor Golem|Core Set 2020|232|U|{7}|Artifact Creature - Golem|3|3|When Meteor Golem enters the battlefield, destroy target nonland permanent an opponent controls.| Mystic Forge|Core Set 2020|233|R|{4}|Artifact|||You may look at the top card of your library any time.$You may cast the top card of your library if it's an artifact card or a colorless nonland card.${T}, Pay 1 life: Exile the top card of your library.| -Pattern Matcher|Core Set 2020|234|U|{4}|Artifact Creature - Golem|3|3|When Pattern Matcher enters the battlefield, you may search your library for a creature card with the same name as another creature you control, reveal it, put it into your hand, then shuffle your library.| +Pattern Matcher|Core Set 2020|234|U|{4}|Artifact Creature - Golem|3|3|When Pattern Matcher enters the battlefield, you may search your library for a card with the same name as another creature you control, reveal it, put it into your hand, then shuffle your library.| Prismite|Core Set 2020|235|C|{2}|Artifact Creature - Golem|2|1|{2}: Add one mana of any color.| Retributive Wand|Core Set 2020|236|U|{3}|Artifact|||{3}, {T}: Retributive Wand deals 1 damage to any target.$When Retributive Wand is put into a graveyard from the battlefield, it deals 5 damage to any target.| Salvager of Ruin|Core Set 2020|237|U|{3}|Artifact Creature - Construct|2|1|Sacrifice Salvager of Ruin: Choose target permanent card in your graveyard that was put there from the battlefield this turn. Return it to your hand.| @@ -35617,7 +35617,7 @@ Dismal Backwater|Core Set 2020|245|C||Land|||Dismal Backwater enters the battlef Evolving Wilds|Core Set 2020|246|C||Land|||{T}, Sacrifice Evolving Wilds: Search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library.| Field of the Dead|Core Set 2020|247|R||Land|||Field of the Dead enters the battlefield tapped.${T}: Add {C}.$Whenever Field of the Dead or another land enters the battlefield under your control, if you control seven or more lands with different names, create a 2/2 black Zombie creature token.| Jungle Hollow|Core Set 2020|248|C||Land|||Jungle Hollow enters the battlefield tapped.$When Jungle Hollow enters the battlefield, you gain 1 life.${T}: Add {B} or {G}.| -Lotus Field|Core Set 2020|249|R||Land|||Hexproof$Lotus Field enters the battlefield tapped.$When Lotus Field enters the battlefield, sacrifice two lands.${T}: Add three mana of any color.| +Lotus Field|Core Set 2020|249|R||Land|||Hexproof$Lotus Field enters the battlefield tapped.$When Lotus Field enters the battlefield, sacrifice two lands.${T}: Add three mana of any one color.| Rugged Highlands|Core Set 2020|250|C||Land|||Rugged Highlands enters the battlefield tapped.$When Rugged Highlands enters the battlefield, you gain 1 life.${T}: Add {R} or {G}.| Scoured Barrens|Core Set 2020|251|C||Land|||Scoured Barrens enters the battlefield tapped.$When Scoured Barrens enters the battlefield, you gain 1 life.${T}: Add {W} or {B}.| Swiftwater Cliffs|Core Set 2020|252|C||Land|||Swiftwater Cliffs enters the battlefield tapped.$When Swiftwater Cliffs enters the battlefield, you gain 1 life.${T}: Add {U} or {R}.| @@ -35655,10 +35655,48 @@ Vivien, Nature's Avenger|Core Set 2020|298|M|{4}{G}{G}|Legendary Planeswalker - Ethereal Elk|Core Set 2020|299|R|{3}{G}{G}|Creature - Elk Spirit|3|3|Trample$When Ethereal Elk enters the battlefield, you may search your library and/or graveyard for a card named Vivien, Nature's Avenger, reveal it, and put it into your hand. If you search your library this way, shuffle it.| Gnarlback Rhino|Core Set 2020|300|U|{2}{G}{G}|Creature - Rhino|4|4|Trample$Whenever you cast a spell that targets Gnarlback Rhino, draw a card.| Vivien's Crocodile|Core Set 2020|301|C|{2}{G}|Creature - Crocodile Spirit|3|3|Vivien's Crocodile gets +1/+1 as long as you control a Vivien planeswalker.| +Angelic Guardian|Core Set 2020|302|R|{4}{W}{W}|Creature - Angel|5|5|Flying$Whenever one or more creatures you control attack, they gain indestructible until end of turn.| +Bastion Enforcer|Core Set 2020|303|C|{2}{W}|Creature - Dwarf Soldier|3|2|| +Concordia Pegasus|Core Set 2020|304|C|{1}{W}|Creature - Pegasus|1|3|Flying| +Haazda Officer|Core Set 2020|305|C|{2}{W}|Creature - Human Soldier|3|2|When Haazda Officer enters the battlefield, target creature you control gets +1/+1 until end of turn.| +Impassioned Orator|Core Set 2020|306|C|{1}{W}|Creature - Human Cleric|2|2|Whenever another creature enters the battlefield under your control, you gain 1 life.| Imperial Outrider|Core Set 2020|307|C|{3}{W}|Creature - Human Knight|1|5|| +Ironclad Krovod|Core Set 2020|308|C|{3}{W}|Creature - Beast|2|5|| +Prowling Caracal|Core Set 2020|309|C|{1}{W}|Creature - Cat|3|1|| +Serra's Guardian|Core Set 2020|310|R|{4}{W}{W}|Creature - Angel|5|5|Flying$Vigilance$Other creatures you control have vigilance.| +Show of Valor|Core Set 2020|311|C|{1}{W}|Instant|||Target creature gets +2/+4 until end of turn.| +Siege Mastodon|Core Set 2020|312|C|{4}{W}|Creature - Elephant|3|5|| +Take Vengeance|Core Set 2020|313|C|{1}{W}|Sorcery|||Destroy target tapped creature.| +Trusted Pegasus|Core Set 2020|314|C|{2}{W}|Creature - Pegasus|2|2|Flying$Whenever Trusted Pegasus attacks, target attacking creature without flying gains flying until end of turn.| +Coral Merfolk|Core Set 2020|315|C|{1}{U}|Creature - Merfolk|2|1|| +Phantom Warrior|Core Set 2020|316|C|{1}{U}{U}|Creature - Illusion Warrior|2|2|Phantom Warrior can't be blocked.| +Riddlemaster Sphinx|Core Set 2020|317|R|{4}{U}{U}|Creature - Sphinx|5|5|Flying$When Riddlemaster Sphinx enters the battlefield, you may return target creature an opponent controls to its owner's hand.| +Snapping Drake|Core Set 2020|318|C|{3}{U}|Creature - Drake|3|2|Flying| +Bartizan Bats|Core Set 2020|319|C|{3}{B}|Creature - Bat|3|1|Flying| +Bogstomper|Core Set 2020|320|C|{4}{B}{B}|Creature - Beast|6|5|| Dark Remedy|Core Set 2020|321|C|{1}{B}|Instant|||Target creature gets +1/+3 until end of turn.| +Disentomb|Core Set 2020|322|C|{B}|Sorcery|||Return target creature card from your graveyard to your hand.| +Gravewaker|Core Set 2020|323|R|{4}{B}{B}|Creature - Bird Spirit|5|5|Flying${5}{B}{B}: Return target creature card from your graveyard to the battlefield tapped.| +Skeleton Archer|Core Set 2020|324|C|{3}{B}|Creature - Skeleton Archer|3|3|When Skeleton Archer enters the battlefield, it deals 1 damage to any target.| +Sorin's Thirst|Core Set 2020|325|C|{B}{B}|Instant|||Sorin's Thirst deals 2 damage to target creature and you gain 2 life.| +Vampire Opportunist|Core Set 2020|326|C|{1}{B}|Creature - Vampire|2|1|{6}{B}: Each opponent loses 2 life and you gain 2 life.| +Walking Corpse|Core Set 2020|327|C|{1}{B}|Creature - Zombie|2|2|| Engulfing Eruption|Core Set 2020|328|C|{2}{R}{R}|Sorcery|||Engulfing Eruption deals 5 damage to target creature.| +Fearless Halberdier|Core Set 2020|329|C|{2}{R}|Creature - Human Warrior|3|2|| +Goblin Assailant|Core Set 2020|330|C|{1}{R}|Creature - Goblin Warrior|2|2|| +Hostile Minotaur|Core Set 2020|331|C|{3}{R}|Creature - Minotaur|3|3|Haste| +Immortal Phoenix|Core Set 2020|332|R|{4}{R}{R}|Creature - Phoenix|5|3|Flying$When Immortal Phoenix dies, return it to its owner's hand.| Nimble Birdsticker|Core Set 2020|333|C|{2}{R}|Creature - Goblin|2|3|Reach| +Rubblebelt Recluse|Core Set 2020|334|C|{4}{R}|Creature - Ogre Berserker|6|5|Rubblebelt Recluse attacks each combat if able.| +Shivan Dragon|Core Set 2020|335|R|{4}{R}{R}|Creature - Dragon|5|5|Flying${R}: Shivan Dragon gets +1/+0 until end of turn.| +Volcanic Dragon|Core Set 2020|336|U|{4}{R}{R}|Creature - Dragon|4|4|Flying$Haste| +Aggressive Mammoth|Core Set 2020|337|R|{3}{G}{G}{G}|Creature - Elephant|8|8|Trample$Other creatures you control have trample.| +Bristling Boar|Core Set 2020|338|C|{3}{G}|Creature - Boar|4|3|Bristling Boar can't be blocked by more than one creature.| +Canopy Spider|Core Set 2020|339|C|{1}{G}|Creature - Spider|1|3|Reach| +Frilled Sandwalla|Core Set 2020|340|C|{G}|Creature - Lizard|1|1|{1}{G}: Frilled Sandwalla gets +2/+2 until end of turn. Activate this ability only once each turn.| +Oakenform|Core Set 2020|341|C|{2}{G}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +3/+3.| +Prized Unicorn|Core Set 2020|342|C|{3}{G}|Creature - Unicorn|2|2|All creatures able to block Prized Unicorn do so.| +Titanic Growth|Core Set 2020|343|C|{1}{G}|Instant|||Target creature gets +4/+4 until end of turn.| Woodland Mystic|Core Set 2020|344|C|{1}{G}|Creature - Elf Druid|1|1|{T}: Add {G}.| Chulane, Teller of Tales|Throne of Eldraine|326|M|{2}{G}{W}{U}|Legendary Creature - Human Druid|2|4|Vigilance$Whenever you cast a creature spell, draw a card, then you may put a land card from your hand onto the battlefield.${3}, {T}: Return target creature you control to its owner's hand.| Arcane Signet|Throne of Eldraine|331|C|{2}|Artifact|||{T}: Add one mana of any color in your commander's color identity.|