From 72f8c2f5436568cafb5c46d4dfd035118d1b3998 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Tue, 26 Apr 2022 18:54:55 -0400 Subject: [PATCH] [NCC] Implemented Park Heights Maverick --- .../src/mage/cards/p/ParkHeightsMaverick.java | 54 +++++++++++++++++++ .../src/mage/sets/NewCapennaCommander.java | 1 + .../abilities/meta/OrTriggeredAbility.java | 34 ++++++------ 3 files changed, 70 insertions(+), 19 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/p/ParkHeightsMaverick.java diff --git a/Mage.Sets/src/mage/cards/p/ParkHeightsMaverick.java b/Mage.Sets/src/mage/cards/p/ParkHeightsMaverick.java new file mode 100644 index 00000000000..dcb5a76889a --- /dev/null +++ b/Mage.Sets/src/mage/cards/p/ParkHeightsMaverick.java @@ -0,0 +1,54 @@ +package mage.cards.p; + +import mage.MageInt; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.common.DiesSourceTriggeredAbility; +import mage.abilities.effects.common.counter.ProliferateEffect; +import mage.abilities.keyword.DauntAbility; +import mage.abilities.keyword.DethroneAbility; +import mage.abilities.meta.OrTriggeredAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.Zone; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class ParkHeightsMaverick extends CardImpl { + + public ParkHeightsMaverick(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); + + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.SOLDIER); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Dethrone + this.addAbility(new DethroneAbility()); + + // Park Heights Maverick can't be blocked by creatures with power 2 or less. + this.addAbility(new DauntAbility()); + + // Whenever Park Heights Maverick deals combat damage to a player or dies, proliferate. + this.addAbility(new OrTriggeredAbility( + Zone.ALL, new ProliferateEffect(), false, + "Whenever {this} deals combat damage to a player or dies, ", + new DealsCombatDamageToAPlayerTriggeredAbility(null, false), + new DiesSourceTriggeredAbility(null, false) + )); + } + + private ParkHeightsMaverick(final ParkHeightsMaverick card) { + super(card); + } + + @Override + public ParkHeightsMaverick copy() { + return new ParkHeightsMaverick(this); + } +} diff --git a/Mage.Sets/src/mage/sets/NewCapennaCommander.java b/Mage.Sets/src/mage/sets/NewCapennaCommander.java index b370e8fa0da..00aad54406a 100644 --- a/Mage.Sets/src/mage/sets/NewCapennaCommander.java +++ b/Mage.Sets/src/mage/sets/NewCapennaCommander.java @@ -203,6 +203,7 @@ public final class NewCapennaCommander extends ExpansionSet { cards.add(new SetCardInfo("Outpost Siege", 272, Rarity.RARE, mage.cards.o.OutpostSiege.class)); cards.add(new SetCardInfo("Overgrown Battlement", 303, Rarity.UNCOMMON, mage.cards.o.OvergrownBattlement.class)); cards.add(new SetCardInfo("Painful Truths", 255, Rarity.RARE, mage.cards.p.PainfulTruths.class)); + cards.add(new SetCardInfo("Park Heights Maverick", 63, Rarity.RARE, mage.cards.p.ParkHeightsMaverick.class)); cards.add(new SetCardInfo("Path of Ancestry", 419, Rarity.COMMON, mage.cards.p.PathOfAncestry.class)); cards.add(new SetCardInfo("Path to Exile", 208, Rarity.UNCOMMON, mage.cards.p.PathToExile.class)); cards.add(new SetCardInfo("Planar Outburst", 209, Rarity.RARE, mage.cards.p.PlanarOutburst.class)); diff --git a/Mage/src/main/java/mage/abilities/meta/OrTriggeredAbility.java b/Mage/src/main/java/mage/abilities/meta/OrTriggeredAbility.java index e6da4948459..0c9a502888d 100644 --- a/Mage/src/main/java/mage/abilities/meta/OrTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/meta/OrTriggeredAbility.java @@ -1,17 +1,20 @@ package mage.abilities.meta; +import mage.abilities.Ability; import mage.abilities.TriggeredAbility; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.Effect; import mage.constants.Zone; import mage.game.Game; import mage.game.events.GameEvent; +import mage.util.CardUtil; import mage.watchers.Watcher; import java.util.ArrayList; +import java.util.Collections; import java.util.List; -import java.util.Locale; import java.util.UUID; +import java.util.stream.Collectors; /** * A triggered ability that combines several others and triggers whenever one or @@ -25,7 +28,7 @@ import java.util.UUID; public class OrTriggeredAbility extends TriggeredAbilityImpl { private final String ruleTrigger; - private TriggeredAbility[] triggeredAbilities; + private final List triggeredAbilities = new ArrayList<>(); public OrTriggeredAbility(Zone zone, Effect effect, TriggeredAbility... abilities) { this(zone, effect, false, null, abilities); @@ -33,8 +36,8 @@ public class OrTriggeredAbility extends TriggeredAbilityImpl { public OrTriggeredAbility(Zone zone, Effect effect, boolean optional, String ruleTrigger, TriggeredAbility... abilities) { super(zone, effect, optional); - this.triggeredAbilities = abilities; this.ruleTrigger = ruleTrigger; + Collections.addAll(this.triggeredAbilities, abilities); for (TriggeredAbility ability : triggeredAbilities) { //Remove useless data ability.getEffects().clear(); @@ -43,11 +46,10 @@ public class OrTriggeredAbility extends TriggeredAbilityImpl { public OrTriggeredAbility(OrTriggeredAbility ability) { super(ability); - this.triggeredAbilities = new TriggeredAbility[ability.triggeredAbilities.length]; - for (int i = 0; i < this.triggeredAbilities.length; i++) { - this.triggeredAbilities[i] = ability.triggeredAbilities[i].copy(); - } this.ruleTrigger = ability.ruleTrigger; + for (TriggeredAbility triggeredAbility : ability.triggeredAbilities) { + this.triggeredAbilities.add(triggeredAbility.copy()); + } } @Override @@ -81,18 +83,12 @@ public class OrTriggeredAbility extends TriggeredAbilityImpl { if (ruleTrigger != null && !ruleTrigger.isEmpty()) { return ruleTrigger; } - StringBuilder sb = new StringBuilder(); - if (triggeredAbilities[0].getRule().length() > 0) { - sb.append(triggeredAbilities[0].getRule().substring(0, 1).toUpperCase(Locale.ENGLISH)) - .append(triggeredAbilities[0].getRule().substring(1).toLowerCase(Locale.ENGLISH)); - } - - for (int i = 1; i < (triggeredAbilities.length - 1); i++) { - sb.append(triggeredAbilities[i].getRule().toLowerCase(Locale.ENGLISH)); - } - - sb.append(" or ").append(triggeredAbilities[triggeredAbilities.length - 1].getRule().toLowerCase(Locale.ENGLISH)); - return sb.toString(); + return triggeredAbilities + .stream() + .map(Ability::getRule) + .map(CardUtil::getTextWithFirstCharLowerCase) + .map(s -> s.substring(0, s.length() - 2)) + .collect(Collectors.joining(" or ")) + ", "; } @Override