From df5cddf157c3fa819d0817e0d2c32cf7dc2785c7 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Sat, 9 Apr 2022 19:19:33 -0400 Subject: [PATCH] [SNC] Implemented Errant, Street Artist --- .../src/mage/cards/e/ErrantStreetArtist.java | 78 +++++++++++++++++++ .../src/mage/sets/StreetsOfNewCapenna.java | 1 + Utils/mtg-cards-data.txt | 1 + 3 files changed, 80 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/e/ErrantStreetArtist.java diff --git a/Mage.Sets/src/mage/cards/e/ErrantStreetArtist.java b/Mage.Sets/src/mage/cards/e/ErrantStreetArtist.java new file mode 100644 index 00000000000..c373a08ccb1 --- /dev/null +++ b/Mage.Sets/src/mage/cards/e/ErrantStreetArtist.java @@ -0,0 +1,78 @@ +package mage.cards.e; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.CopyTargetSpellEffect; +import mage.abilities.keyword.DefenderAbility; +import mage.abilities.keyword.FlashAbility; +import mage.abilities.keyword.HasteAbility; +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.filter.FilterSpell; +import mage.filter.predicate.Predicate; +import mage.game.Game; +import mage.game.stack.StackObject; +import mage.target.TargetSpell; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class ErrantStreetArtist extends CardImpl { + + private static final FilterSpell filter = new FilterSpell("spell you control that wasn't cast"); + + static { + filter.add(TargetController.YOU.getControllerPredicate()); + filter.add(ErrantStreetArtistPredicate.instance); + } + + public ErrantStreetArtist(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{U}"); + + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.ROGUE); + this.power = new MageInt(0); + this.toughness = new MageInt(3); + + // Flash + this.addAbility(FlashAbility.getInstance()); + + // Defender + this.addAbility(DefenderAbility.getInstance()); + + // Haste + this.addAbility(HasteAbility.getInstance()); + + // {1}{U}, {T}: Copy target spell you control that wasn't cast. You may choose new targets for the copy. + Ability ability = new SimpleActivatedAbility(new CopyTargetSpellEffect(), new ManaCostsImpl<>("{1}{U}")); + ability.addTarget(new TargetSpell(filter)); + this.addAbility(ability); + } + + private ErrantStreetArtist(final ErrantStreetArtist card) { + super(card); + } + + @Override + public ErrantStreetArtist copy() { + return new ErrantStreetArtist(this); + } +} + +enum ErrantStreetArtistPredicate implements Predicate { + instance; + + @Override + public boolean apply(StackObject input, Game game) { + return input.isCopy(); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/StreetsOfNewCapenna.java b/Mage.Sets/src/mage/sets/StreetsOfNewCapenna.java index 62898ab8310..43f5c8799e7 100644 --- a/Mage.Sets/src/mage/sets/StreetsOfNewCapenna.java +++ b/Mage.Sets/src/mage/sets/StreetsOfNewCapenna.java @@ -39,6 +39,7 @@ public final class StreetsOfNewCapenna extends ExpansionSet { cards.add(new SetCardInfo("Cut of the Profits", 72, Rarity.RARE, mage.cards.c.CutOfTheProfits.class)); cards.add(new SetCardInfo("Devilish Valet", 105, Rarity.RARE, mage.cards.d.DevilishValet.class)); cards.add(new SetCardInfo("Disciplined Duelist", 182, Rarity.UNCOMMON, mage.cards.d.DisciplinedDuelist.class)); + cards.add(new SetCardInfo("Errant, Street Artist", 41, Rarity.RARE, mage.cards.e.ErrantStreetArtist.class)); cards.add(new SetCardInfo("Faerie Vandal", 44, Rarity.UNCOMMON, mage.cards.f.FaerieVandal.class)); cards.add(new SetCardInfo("Fight Rigging", 430, Rarity.RARE, mage.cards.f.FightRigging.class)); cards.add(new SetCardInfo("Forest", 270, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index 2171a1a5b29..0e867d743ce 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -43923,6 +43923,7 @@ Mage's Attendant|Streets of New Capenna|21|U|{2}{W}|Creature - Cat Rogue|3|2|Whe Mysterious Limousine|Streets of New Capenna|22|R|{3}{W}{W}|Artifact - Vehicle|4|4|Whenever Mysterious Limousine enters the battlefield or attacks, exile up to one other target creature until Mysterious Limousine leaves the battlefield. If a creature is put into exile this way, return each other card exiled with Mysterious Limousine to the battlefield under its owner's control.$Crew 2| Rumor Gatherer|Streets of New Capenna|29|U|{1}{W}{W}|Creature - Elf Wizard|2|1|Alliance — Whenever another creature enters the battlefield under your control, scry 1. If this is the second time this ability has resolved this turn, draw a card instead.| Cut Your Losses|Streets of New Capenna|38|R|{4}{U}{U}|Sorcery|||Casualty 2$Target player mills half their library, rounded down.| +Errant, Street Artist|Streets of New Capenna|41|R|{U}|Legendary Creature - Human Rogue|0|3|Flash$Defender, haste${1}{U}, {T}: Copy target spell you control that wasn't cast. You may choose new targets for the copy.| Faerie Vandal|Streets of New Capenna|44|U|{1}{U}|Creature - Faerie Rogue|1|2|Flash$Flying$Whenever you draw your second card each turn, put a +1/+1 counter on Faerie Vandal.| Ledger Shredder|Streets of New Capenna|46|R|{1}{U}|Creature - Bird Advisor|1|3|Flying$Whenever a player casts their second spell each turn, Ledger Shredder connives.| A Little Chat|Streets of New Capenna|47|U|{1}{U}|Instant|||Casualty 1$Look at the top two cards of your library. Put one of them into your hand and the other on the bottom of your library.|