diff --git a/Mage.Sets/src/mage/cards/k/KittKantoMayhemDiva.java b/Mage.Sets/src/mage/cards/k/KittKantoMayhemDiva.java new file mode 100644 index 00000000000..d0c936fa6c8 --- /dev/null +++ b/Mage.Sets/src/mage/cards/k/KittKantoMayhemDiva.java @@ -0,0 +1,79 @@ +package mage.cards.k; + +import mage.MageInt; +import mage.abilities.common.BeginningOfCombatTriggeredAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.delayed.ReflexiveTriggeredAbility; +import mage.abilities.costs.common.TapTargetCost; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.DoWhenCostPaid; +import mage.abilities.effects.common.combat.GoadTargetEffect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.filter.FilterPermanent; +import mage.filter.StaticFilters; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.permanent.token.CitizenGreenWhiteToken; +import mage.target.TargetPermanent; +import mage.target.common.TargetControlledPermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class KittKantoMayhemDiva extends CardImpl { + + private static final FilterPermanent filter + = new FilterCreaturePermanent("creature controlled by the active player"); + + static { + filter.add(TargetController.ACTIVE.getControllerPredicate()); + } + + public KittKantoMayhemDiva(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}{G}{W}"); + + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.CAT); + this.subtype.add(SubType.BARD); + this.subtype.add(SubType.DRUID); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // When Kitt Kanto enters the battlefield, create a 1/1 green and white Citizen creature token. + this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new CitizenGreenWhiteToken()))); + + // At the beginning of combat on each player's turn, you may tap two untapped creatures you control. When you do, target creature that player controls gets +2/+2 and gains trample until end of turn. Goad that creature. + ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility( + new BoostTargetEffect(2, 2) + .setText("target creature that player controls gets +2/+2"), + false + ); + ability.addEffect(new GainAbilityTargetEffect( + TrampleAbility.getInstance(), Duration.EndOfTurn, + "and gains trample until end of turn" + )); + ability.addEffect(new GoadTargetEffect().setText("Goad that creature")); + ability.addTarget(new TargetPermanent(filter)); + this.addAbility(new BeginningOfCombatTriggeredAbility(new DoWhenCostPaid( + ability, + new TapTargetCost(new TargetControlledPermanent( + 2, StaticFilters.FILTER_CONTROLLED_UNTAPPED_CREATURES + )), "Tap two untapped creatures you control?" + ), TargetController.EACH_PLAYER, false)); + } + + private KittKantoMayhemDiva(final KittKantoMayhemDiva card) { + super(card); + } + + @Override + public KittKantoMayhemDiva copy() { + return new KittKantoMayhemDiva(this); + } +} diff --git a/Mage.Sets/src/mage/sets/NewCapennaCommander.java b/Mage.Sets/src/mage/sets/NewCapennaCommander.java index 35a22086cc8..30d154fb768 100644 --- a/Mage.Sets/src/mage/sets/NewCapennaCommander.java +++ b/Mage.Sets/src/mage/sets/NewCapennaCommander.java @@ -1,6 +1,7 @@ package mage.sets; import mage.cards.ExpansionSet; +import mage.constants.Rarity; import mage.constants.SetType; import java.util.Arrays; @@ -22,6 +23,8 @@ public final class NewCapennaCommander extends ExpansionSet { super("New Capenna Commander", "NCC", ExpansionSet.buildDate(2022, 4, 29), SetType.SUPPLEMENTAL); this.hasBasicLands = false; + cards.add(new SetCardInfo("Kitt Kanto, Mayhem Diva", 4, Rarity.MYTHIC, mage.cards.k.KittKantoMayhemDiva.class)); + cards.removeIf(setCardInfo -> unfinished.contains(setCardInfo.getName())); // remove when shield counters are implemented } } diff --git a/Mage/src/main/java/mage/abilities/common/BeginningOfCombatTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/BeginningOfCombatTriggeredAbility.java index ab997fbfdf1..9165fc03c9e 100644 --- a/Mage/src/main/java/mage/abilities/common/BeginningOfCombatTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/BeginningOfCombatTriggeredAbility.java @@ -10,8 +10,8 @@ import mage.target.targetpointer.FixedTarget; public class BeginningOfCombatTriggeredAbility extends TriggeredAbilityImpl { - private TargetController targetController; - private boolean setTargetPointer; + private final TargetController targetController; + private final boolean setTargetPointer; public BeginningOfCombatTriggeredAbility(Effect effect, TargetController targetController, boolean isOptional) { this(Zone.BATTLEFIELD, effect, targetController, isOptional, false); @@ -62,6 +62,7 @@ public class BeginningOfCombatTriggeredAbility extends TriggeredAbilityImpl { return true; } break; + case EACH_PLAYER: case ANY: if (setTargetPointer) { this.getEffects().forEach(effect -> { @@ -80,6 +81,8 @@ public class BeginningOfCombatTriggeredAbility extends TriggeredAbilityImpl { return "At the beginning of combat on your turn, " + generateZoneString(); case OPPONENT: return "At the beginning of each opponent's combat step, " + generateZoneString(); + case EACH_PLAYER: + return "At the beginning of combat on each player's turn, " + generateZoneString(); case ANY: return "At the beginning of each combat, " + generateZoneString(); } @@ -87,9 +90,8 @@ public class BeginningOfCombatTriggeredAbility extends TriggeredAbilityImpl { } private String generateZoneString() { - switch (getZone()) { - case GRAVEYARD: - return "if {this} is in your graveyard, "; + if (getZone() == Zone.GRAVEYARD) { + return "if {this} is in your graveyard, "; } return ""; }