diff --git a/Mage.Sets/src/mage/cards/b/BroodcallerScourge.java b/Mage.Sets/src/mage/cards/b/BroodcallerScourge.java new file mode 100644 index 00000000000..4a8145bbece --- /dev/null +++ b/Mage.Sets/src/mage/cards/b/BroodcallerScourge.java @@ -0,0 +1,76 @@ +package mage.cards.b; + +import mage.MageInt; +import mage.abilities.common.OneOrMoreDamagePlayerTriggeredAbility; +import mage.abilities.effects.common.PutCardFromHandOntoBattlefieldEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.filter.FilterCard; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.common.FilterPermanentCard; +import mage.filter.predicate.ObjectSourcePlayer; +import mage.filter.predicate.ObjectSourcePlayerPredicate; +import mage.game.Game; +import mage.util.CardUtil; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class BroodcallerScourge extends CardImpl { + + private static final FilterCard filter + = new FilterPermanentCard("a permanent card with mana value less than or equal to that damage"); + private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent(SubType.DRAGON, "Dragons"); + + static { + filter.add(BroodcallerScourgePredicate.instance); + } + + public BroodcallerScourge(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{G}{G}"); + + this.subtype.add(SubType.DRAGON); + this.power = new MageInt(5); + this.toughness = new MageInt(7); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Whenever one or more Dragons you control deal combat damage to a player, you may put a permanent card with mana value less than or equal to that damage from your hand onto the battlefield. + this.addAbility(new OneOrMoreDamagePlayerTriggeredAbility( + new PutCardFromHandOntoBattlefieldEffect(filter), + filter2, true, true + )); + } + + private BroodcallerScourge(final BroodcallerScourge card) { + super(card); + } + + @Override + public BroodcallerScourge copy() { + return new BroodcallerScourge(this); + } +} + +enum BroodcallerScourgePredicate implements ObjectSourcePlayerPredicate { + instance; + + @Override + public boolean apply(ObjectSourcePlayer input, Game game) { + return input + .getObject() + .getManaValue() + <= CardUtil + .getEffectValueFromAbility( + input.getSource(), "damage", + Integer.class, 0 + ); + } +} diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstormCommander.java b/Mage.Sets/src/mage/sets/TarkirDragonstormCommander.java index 022875588b2..6d0138635c2 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstormCommander.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstormCommander.java @@ -61,6 +61,7 @@ public final class TarkirDragonstormCommander extends ExpansionSet { cards.add(new SetCardInfo("Bone Devourer", 26, Rarity.RARE, mage.cards.b.BoneDevourer.class)); cards.add(new SetCardInfo("Boros Signet", 314, Rarity.UNCOMMON, mage.cards.b.BorosSignet.class)); cards.add(new SetCardInfo("Bountiful Landscape", 342, Rarity.COMMON, mage.cards.b.BountifulLandscape.class)); + cards.add(new SetCardInfo("Broodcaller Scourge", 44, Rarity.RARE, mage.cards.b.BroodcallerScourge.class)); cards.add(new SetCardInfo("Caldera Pyremaw", 33, Rarity.RARE, mage.cards.c.CalderaPyremaw.class)); cards.add(new SetCardInfo("Canopy Gargantuan", 45, Rarity.RARE, mage.cards.c.CanopyGargantuan.class)); cards.add(new SetCardInfo("Canopy Vista", 343, Rarity.RARE, mage.cards.c.CanopyVista.class)); diff --git a/Mage/src/main/java/mage/util/CardUtil.java b/Mage/src/main/java/mage/util/CardUtil.java index 4356de3d90f..eb2a2e8d513 100644 --- a/Mage/src/main/java/mage/util/CardUtil.java +++ b/Mage/src/main/java/mage/util/CardUtil.java @@ -2236,6 +2236,19 @@ public final class CardUtil { return sb.toString(); } + public static T getEffectValueFromAbility(Ability ability, String key, Class clazz) { + return getEffectValueFromAbility(ability, key, clazz, null); + } + + public static T getEffectValueFromAbility(Ability ability, String key, Class clazz, T defaultValue) { + return castStream( + ability.getAllEffects() + .stream() + .map(effect -> effect.getValue(key)), + clazz + ).findFirst().orElse(defaultValue); + } + public static Stream castStream(Collection collection, Class clazz) { return castStream(collection.stream(), clazz); }