From 152513cf6fe3c4133ab245f76a1daba5ced2fcd3 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 23 May 2025 08:41:43 -0400 Subject: [PATCH] [FIC] Implement Rikku, Resourceful Guardian --- .../cards/r/RikkuResourcefulGuardian.java | 91 +++++++++++++++++++ .../src/mage/sets/FinalFantasyCommander.java | 2 + 2 files changed, 93 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/r/RikkuResourcefulGuardian.java diff --git a/Mage.Sets/src/mage/cards/r/RikkuResourcefulGuardian.java b/Mage.Sets/src/mage/cards/r/RikkuResourcefulGuardian.java new file mode 100644 index 00000000000..360e59dfc59 --- /dev/null +++ b/Mage.Sets/src/mage/cards/r/RikkuResourcefulGuardian.java @@ -0,0 +1,91 @@ +package mage.cards.r; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.ActivateAsSorceryActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.combat.CantBeBlockedByAllTargetEffect; +import mage.abilities.effects.common.counter.MoveCounterTargetsEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetOpponentsCreaturePermanent; + +import java.util.Optional; +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class RikkuResourcefulGuardian extends CardImpl { + + public RikkuResourcefulGuardian(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.ARTIFICER); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Whenever you put one or more counters on a creature, until end of turn, that creature can't be blocked by creatures your opponents control. + this.addAbility(new RikkuResourcefulGuardianTriggeredAbility()); + + // Steal -- {1}, {T}: Move a counter from target creature an opponent controls onto target creature you control. Activate only as a sorcery. + Ability ability = new ActivateAsSorceryActivatedAbility(new MoveCounterTargetsEffect(), new GenericManaCost(1)); + ability.addCost(new TapSourceCost()); + ability.addTarget(new TargetOpponentsCreaturePermanent()); + ability.addTarget(new TargetControlledCreaturePermanent()); + this.addAbility(ability.withFlavorWord("Steal")); + } + + private RikkuResourcefulGuardian(final RikkuResourcefulGuardian card) { + super(card); + } + + @Override + public RikkuResourcefulGuardian copy() { + return new RikkuResourcefulGuardian(this); + } +} + +class RikkuResourcefulGuardianTriggeredAbility extends TriggeredAbilityImpl { + + RikkuResourcefulGuardianTriggeredAbility() { + super(Zone.BATTLEFIELD, new CantBeBlockedByAllTargetEffect( + StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE, Duration.EndOfTurn + ).setText("until end of turn, that creature can't be blocked by creatures your opponents control")); + this.setTriggerPhrase("Whenever you put one or more counters on a creature, "); + } + + private RikkuResourcefulGuardianTriggeredAbility(final RikkuResourcefulGuardianTriggeredAbility ability) { + super(ability); + } + + @Override + public RikkuResourcefulGuardianTriggeredAbility copy() { + return new RikkuResourcefulGuardianTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.COUNTERS_ADDED; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + return isControlledBy(event.getPlayerId()) + && Optional + .ofNullable(event) + .map(GameEvent::getTargetId) + .map(game::getPermanent) + .map(permanent -> permanent.isCreature(game)) + .orElse(false); + } +} diff --git a/Mage.Sets/src/mage/sets/FinalFantasyCommander.java b/Mage.Sets/src/mage/sets/FinalFantasyCommander.java index 61c8ada1628..361101cd11f 100644 --- a/Mage.Sets/src/mage/sets/FinalFantasyCommander.java +++ b/Mage.Sets/src/mage/sets/FinalFantasyCommander.java @@ -260,6 +260,8 @@ public final class FinalFantasyCommander extends ExpansionSet { cards.add(new SetCardInfo("Rejoin the Fight", 49, Rarity.RARE, mage.cards.r.RejoinTheFight.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Relic of Legends", 354, Rarity.UNCOMMON, mage.cards.r.RelicOfLegends.class)); cards.add(new SetCardInfo("Resourceful Defense", 251, Rarity.RARE, mage.cards.r.ResourcefulDefense.class)); + cards.add(new SetCardInfo("Rikku, Resourceful Guardian", 145, Rarity.RARE, mage.cards.r.RikkuResourcefulGuardian.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Rikku, Resourceful Guardian", 41, Rarity.RARE, mage.cards.r.RikkuResourcefulGuardian.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Rise of the Dark Realms", 283, Rarity.MYTHIC, mage.cards.r.RiseOfTheDarkRealms.class)); cards.add(new SetCardInfo("Rite of Replication", 270, Rarity.RARE, mage.cards.r.RiteOfReplication.class)); cards.add(new SetCardInfo("Rogue's Passage", 415, Rarity.UNCOMMON, mage.cards.r.RoguesPassage.class));