diff --git a/Mage.Sets/src/mage/cards/s/SandbenderScavengers.java b/Mage.Sets/src/mage/cards/s/SandbenderScavengers.java new file mode 100644 index 00000000000..6dd8e0abd56 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SandbenderScavengers.java @@ -0,0 +1,105 @@ +package mage.cards.s; + +import mage.MageInt; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.common.DiesSourceTriggeredAbility; +import mage.abilities.common.SacrificePermanentTriggeredAbility; +import mage.abilities.common.delayed.ReflexiveTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.counters.CounterType; +import mage.filter.FilterCard; +import mage.filter.StaticFilters; +import mage.filter.common.FilterCreatureCard; +import mage.filter.predicate.mageobject.ManaValuePredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetCardInYourGraveyard; + +import java.util.Optional; +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class SandbenderScavengers extends CardImpl { + + public SandbenderScavengers(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}{B}"); + + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.ROGUE); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Whenever you sacrifice another permanent, put a +1/+1 counter on this creature. + this.addAbility(new SacrificePermanentTriggeredAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance()), StaticFilters.FILTER_ANOTHER_PERMANENT + )); + + // When this creature dies, you may exile it. When you do, return target creature card with mana value less than or equal to this creature's power from your graveyard to the battlefield. + this.addAbility(new DiesSourceTriggeredAbility(new SandbenderScavengersEffect())); + } + + private SandbenderScavengers(final SandbenderScavengers card) { + super(card); + } + + @Override + public SandbenderScavengers copy() { + return new SandbenderScavengers(this); + } +} + +class SandbenderScavengersEffect extends OneShotEffect { + + SandbenderScavengersEffect() { + super(Outcome.Benefit); + staticText = "you may exile it. When you do, return target creature card with mana value " + + "less than or equal to this creature's power from your graveyard to the battlefield."; + } + + private SandbenderScavengersEffect(final SandbenderScavengersEffect effect) { + super(effect); + } + + @Override + public SandbenderScavengersEffect copy() { + return new SandbenderScavengersEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + Card card = Optional + .ofNullable(source.getSourceObject(game)) + .filter(Card.class::isInstance) + .map(Card.class::cast) + .filter(c -> c.getZoneChangeCounter(game) != source.getStackMomentSourceZCC() + 1) + .orElse(null); + if (player == null || card == null || !player.chooseUse( + Outcome.Exile, "Exile " + card.getName() + '?', source, game + )) { + return false; + } + player.moveCards(card, Zone.EXILED, source, game); + int mv = Optional + .ofNullable((Permanent) getValue("permanentLeftBattlefield")) + .map(MageObject::getPower) + .map(MageInt::getValue) + .orElse(0); + ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect(), false); + FilterCard filter = new FilterCreatureCard("creature card with mana value " + mv + " or less"); + filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, mv + 1)); + ability.addTarget(new TargetCardInYourGraveyard(filter)); + game.fireReflexiveTriggeredAbility(ability, source); + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/AvatarTheLastAirbender.java b/Mage.Sets/src/mage/sets/AvatarTheLastAirbender.java index f266d8ecbdb..43e405dff75 100644 --- a/Mage.Sets/src/mage/sets/AvatarTheLastAirbender.java +++ b/Mage.Sets/src/mage/sets/AvatarTheLastAirbender.java @@ -313,6 +313,8 @@ public final class AvatarTheLastAirbender extends ExpansionSet { cards.add(new SetCardInfo("Ruinous Waterbending", 118, Rarity.UNCOMMON, mage.cards.r.RuinousWaterbending.class)); cards.add(new SetCardInfo("Rumble Arena", 277, Rarity.COMMON, mage.cards.r.RumbleArena.class)); cards.add(new SetCardInfo("Saber-Tooth Moose-Lion", 194, Rarity.COMMON, mage.cards.s.SaberToothMooseLion.class)); + cards.add(new SetCardInfo("Sandbender Scavengers", 239, Rarity.RARE, mage.cards.s.SandbenderScavengers.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sandbender Scavengers", 382, Rarity.RARE, mage.cards.s.SandbenderScavengers.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sandbenders' Storm", 34, Rarity.COMMON, mage.cards.s.SandbendersStorm.class)); cards.add(new SetCardInfo("Secret Tunnel", 278, Rarity.RARE, mage.cards.s.SecretTunnel.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Secret Tunnel", 392, Rarity.RARE, mage.cards.s.SecretTunnel.class, NON_FULL_USE_VARIOUS));