From b45b20da5a9c18982d670ff37e122a31868a9615 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Sat, 4 Nov 2023 17:03:10 -0400 Subject: [PATCH] [LCI] Implement Kitesail Larcenist --- .../src/mage/cards/k/KitesailLarcenist.java | 87 +++++++++++++++++++ .../src/mage/sets/TheLostCavernsOfIxalan.java | 1 + 2 files changed, 88 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/k/KitesailLarcenist.java diff --git a/Mage.Sets/src/mage/cards/k/KitesailLarcenist.java b/Mage.Sets/src/mage/cards/k/KitesailLarcenist.java new file mode 100644 index 00000000000..194f1beb714 --- /dev/null +++ b/Mage.Sets/src/mage/cards/k/KitesailLarcenist.java @@ -0,0 +1,87 @@ +package mage.cards.k; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BecomesCreatureTargetEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.WardAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.filter.FilterPermanent; +import mage.filter.predicate.mageobject.AnotherPredicate; +import mage.filter.predicate.permanent.ControllerIdPredicate; +import mage.game.Game; +import mage.game.permanent.token.TreasureToken; +import mage.players.Player; +import mage.target.TargetPermanent; +import mage.target.targetadjustment.TargetAdjuster; +import mage.target.targetpointer.EachTargetPointer; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class KitesailLarcenist extends CardImpl { + + public KitesailLarcenist(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); + + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.PIRATE); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Ward {1} + this.addAbility(new WardAbility(new ManaCostsImpl<>("{1}"))); + + // When Kitesail Larcenist enters the battlefield, for each player, choose up to one other target artifact or creature that player controls. For as long as Kitesail Larcenist remains on the battlefield, the chosen permanents become Treasure artifacts with "{T}, Sacrifice this artifact: Add one mana of any color" and lose all other abilities. + Ability ability = new EntersBattlefieldTriggeredAbility(new BecomesCreatureTargetEffect( + new TreasureToken(), true, false, + Duration.UntilSourceLeavesBattlefield, + false, false, true + ).setTargetPointer(new EachTargetPointer()).setText("for each player, choose up to one other " + + "target artifact or creature that player controls. For as long as {this} " + + "remains on the battlefield, the chosen permanents become Treasure artifacts with " + + "\"{T}, Sacrifice this artifact: Add one mana of any color\" and lose all other abilities")); + this.addAbility(ability.setTargetAdjuster(KitesailLarcenistAdjuster.instance)); + } + + private KitesailLarcenist(final KitesailLarcenist card) { + super(card); + } + + @Override + public KitesailLarcenist copy() { + return new KitesailLarcenist(this); + } +} + +enum KitesailLarcenistAdjuster implements TargetAdjuster { + instance; + + @Override + public void adjustTargets(Ability ability, Game game) { + ability.getTargets().clear(); + for (UUID playerId : game.getState().getPlayersInRange(ability.getControllerId(), game)) { + Player player = game.getPlayer(playerId); + if (player == null) { + continue; + } + FilterPermanent filter = new FilterPermanent( + "other artifact or creature " + (ability.isControlledBy(playerId) ? " you control" : player.getName() + " controls") + ); + filter.add(new ControllerIdPredicate(playerId)); + filter.add(AnotherPredicate.instance); + ability.addTarget(new TargetPermanent(0, 1, filter)); + } + } +} diff --git a/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java b/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java index 82e00aca40f..baaaf9f42c9 100644 --- a/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java +++ b/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java @@ -165,6 +165,7 @@ public final class TheLostCavernsOfIxalan extends ExpansionSet { cards.add(new SetCardInfo("Kaslem's Strider", 197, Rarity.COMMON, mage.cards.k.KaslemsStrider.class)); cards.add(new SetCardInfo("Kellan, Daring Traveler", 231, Rarity.RARE, mage.cards.k.KellanDaringTraveler.class)); cards.add(new SetCardInfo("Kinjalli's Dawnrunner", 19, Rarity.UNCOMMON, mage.cards.k.KinjallisDawnrunner.class)); + cards.add(new SetCardInfo("Kitesail Larcenist", 61, Rarity.RARE, mage.cards.k.KitesailLarcenist.class)); cards.add(new SetCardInfo("Kutzil's Flanker", 20, Rarity.RARE, mage.cards.k.KutzilsFlanker.class)); cards.add(new SetCardInfo("Lodestone Needle", 62, Rarity.UNCOMMON, mage.cards.l.LodestoneNeedle.class)); cards.add(new SetCardInfo("Malamet Brawler", 199, Rarity.COMMON, mage.cards.m.MalametBrawler.class));