diff --git a/Mage.Sets/src/mage/cards/b/BouncersBeatdown.java b/Mage.Sets/src/mage/cards/b/BouncersBeatdown.java new file mode 100644 index 00000000000..558caa0baac --- /dev/null +++ b/Mage.Sets/src/mage/cards/b/BouncersBeatdown.java @@ -0,0 +1,58 @@ +package mage.cards.b; + +import mage.ObjectColor; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.Condition; +import mage.abilities.condition.common.SourceTargetsPermanentCondition; +import mage.abilities.dynamicvalue.common.GreatestPowerAmongControlledCreaturesValue; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.ExileTargetIfDiesEffect; +import mage.abilities.effects.common.cost.SpellCostReductionSourceEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Zone; +import mage.filter.FilterPermanent; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.target.common.TargetCreatureOrPlaneswalker; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class BouncersBeatdown extends CardImpl { + + private static final FilterPermanent filter + = new FilterPermanent("a black permanent"); + + static { + filter.add(new ColorPredicate(ObjectColor.BLACK)); + } + + private static final Condition condition = new SourceTargetsPermanentCondition(filter); + + public BouncersBeatdown(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{G}"); + + // This spell costs {2} less to cast if it targets a black permanent. + this.addAbility(new SimpleStaticAbility( + Zone.ALL, new SpellCostReductionSourceEffect(3, condition).setCanWorksOnStackOnly(true) + ).setRuleAtTheTop(true)); + + // Bouncer's Beatdown deals X damage to target creature or planeswalker, where X is the greatest power among creatures you control. If that creature or planeswalker would die this turn, exile it instead. + this.getSpellAbility().addEffect(new DamageTargetEffect(GreatestPowerAmongControlledCreaturesValue.instance)); + this.getSpellAbility().addTarget(new TargetCreatureOrPlaneswalker()); + this.getSpellAbility().addEffect(new ExileTargetIfDiesEffect("creature or planeswalker")); + this.getSpellAbility().addHint(GreatestPowerAmongControlledCreaturesValue.getHint()); + } + + private BouncersBeatdown(final BouncersBeatdown card) { + super(card); + } + + @Override + public BouncersBeatdown copy() { + return new BouncersBeatdown(this); + } +} diff --git a/Mage.Sets/src/mage/sets/StreetsOfNewCapenna.java b/Mage.Sets/src/mage/sets/StreetsOfNewCapenna.java index a1f5c3233ff..196397ef5f4 100644 --- a/Mage.Sets/src/mage/sets/StreetsOfNewCapenna.java +++ b/Mage.Sets/src/mage/sets/StreetsOfNewCapenna.java @@ -45,6 +45,7 @@ public final class StreetsOfNewCapenna extends ExpansionSet { cards.add(new SetCardInfo("Boon of Safety", 4, Rarity.COMMON, mage.cards.b.BoonOfSafety.class)); cards.add(new SetCardInfo("Bootleggers' Stash", 134, Rarity.MYTHIC, mage.cards.b.BootleggersStash.class)); cards.add(new SetCardInfo("Botanical Plaza", 247, Rarity.COMMON, mage.cards.b.BotanicalPlaza.class)); + cards.add(new SetCardInfo("Bouncer's Beatdown", 135, Rarity.UNCOMMON, mage.cards.b.BouncersBeatdown.class)); cards.add(new SetCardInfo("Brass Knuckles", 234, Rarity.UNCOMMON, mage.cards.b.BrassKnuckles.class)); cards.add(new SetCardInfo("Brazen Upstart", 169, Rarity.UNCOMMON, mage.cards.b.BrazenUpstart.class)); cards.add(new SetCardInfo("Broken Wings", 136, Rarity.COMMON, mage.cards.b.BrokenWings.class)); diff --git a/Mage/src/main/java/mage/abilities/dynamicvalue/common/GreatestPowerAmongControlledCreaturesValue.java b/Mage/src/main/java/mage/abilities/dynamicvalue/common/GreatestPowerAmongControlledCreaturesValue.java index dca236e88e4..5fb88a388da 100644 --- a/Mage/src/main/java/mage/abilities/dynamicvalue/common/GreatestPowerAmongControlledCreaturesValue.java +++ b/Mage/src/main/java/mage/abilities/dynamicvalue/common/GreatestPowerAmongControlledCreaturesValue.java @@ -1,12 +1,15 @@ package mage.abilities.dynamicvalue.common; +import mage.MageInt; +import mage.MageObject; import mage.abilities.Ability; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.effects.Effect; +import mage.abilities.hint.Hint; +import mage.abilities.hint.ValueHint; import mage.filter.StaticFilters; import mage.game.Game; -import mage.game.permanent.Permanent; /** * @author Styxo @@ -14,15 +17,18 @@ import mage.game.permanent.Permanent; public enum GreatestPowerAmongControlledCreaturesValue implements DynamicValue { instance; + private static final Hint hint=new ValueHint("Greatest power among creatures you control",instance); @Override public int calculate(Game game, Ability sourceAbility, Effect effect) { - int amount = 0; - for (Permanent p : game.getBattlefield().getActivePermanents( - StaticFilters.FILTER_CONTROLLED_CREATURE, sourceAbility.getControllerId(), game - )) { - amount = Math.max(p.getPower().getValue(), amount); - } - return amount; + return game + .getBattlefield() + .getActivePermanents( + StaticFilters.FILTER_CONTROLLED_CREATURE, + sourceAbility.getControllerId(), game + ).stream() + .map(MageObject::getPower) + .mapToInt(MageInt::getValue) + .sum(); } @Override @@ -40,4 +46,7 @@ public enum GreatestPowerAmongControlledCreaturesValue implements DynamicValue { return "X"; } + public static Hint getHint() { + return hint; + } } diff --git a/Mage/src/main/java/mage/abilities/effects/common/ExileTargetIfDiesEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ExileTargetIfDiesEffect.java index ceb64907ca7..d73cff9fde7 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ExileTargetIfDiesEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ExileTargetIfDiesEffect.java @@ -1,4 +1,3 @@ - package mage.abilities.effects.common; import mage.MageObjectReference; @@ -11,14 +10,17 @@ import mage.game.Game; import mage.game.permanent.Permanent; /** - * * @author LevelX2 */ public class ExileTargetIfDiesEffect extends OneShotEffect { public ExileTargetIfDiesEffect() { + this("creature"); + } + + public ExileTargetIfDiesEffect(String targetName) { super(Outcome.Damage); - this.staticText = "If that creature would die this turn, exile it instead"; + this.staticText = "If that " + targetName + " would die this turn, exile it instead"; } public ExileTargetIfDiesEffect(final ExileTargetIfDiesEffect effect) {