diff --git a/Mage.Sets/src/mage/cards/o/OathOfKaya.java b/Mage.Sets/src/mage/cards/o/OathOfKaya.java new file mode 100644 index 0000000000..0141a45601 --- /dev/null +++ b/Mage.Sets/src/mage/cards/o/OathOfKaya.java @@ -0,0 +1,109 @@ +package mage.cards.o; + +import mage.abilities.Ability; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SuperType; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.target.common.TargetAnyTarget; +import mage.target.targetpointer.FixedTarget; + +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class OathOfKaya extends CardImpl { + + public OathOfKaya(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}{B}"); + + this.addSuperType(SuperType.LEGENDARY); + + // When Oath of Kaya enters the battlefield, it deals 3 damage to any target and you gain 3 life. + Ability ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(3, "it")); + ability.addEffect(new GainLifeEffect(3).concatBy("and")); + ability.addTarget(new TargetAnyTarget()); + this.addAbility(ability); + + // Whenever an opponent attacks a planeswalker you control with one or more creatures, Oath of Kaya deals 2 damage to that player and you gain 2 life. + this.addAbility(new OathOfKayaTriggeredAbility()); + } + + private OathOfKaya(final OathOfKaya card) { + super(card); + } + + @Override + public OathOfKaya copy() { + return new OathOfKaya(this); + } +} + +class OathOfKayaTriggeredAbility extends TriggeredAbilityImpl { + private final Set<UUID> attackedThisCombat = new HashSet(); + + OathOfKayaTriggeredAbility() { + super(Zone.BATTLEFIELD, null, false); + } + + private OathOfKayaTriggeredAbility(final OathOfKayaTriggeredAbility ability) { + super(ability); + this.attackedThisCombat.addAll(ability.attackedThisCombat); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.ATTACKER_DECLARED + || event.getType() == GameEvent.EventType.DECLARE_ATTACKERS_STEP_POST; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.DECLARE_ATTACKERS_STEP_POST) { + this.attackedThisCombat.clear(); + return false; + } + for (UUID attackerId : game.getCombat().getAttackers()) { + Permanent attacker = game.getPermanent(attackerId); + if (attacker == null) { + continue; + } + UUID defendingPlayerId = game.getCombat().getDefendingPlayerId(attackerId, game); + UUID defenderId = game.getCombat().getDefenderId(attackerId); + if (defendingPlayerId.equals(defenderId) || attackedThisCombat.contains(defenderId)) { + continue; + } + attackedThisCombat.add(defenderId); + this.getEffects().clear(); + Effect effect = new DamageTargetEffect(2); + effect.setTargetPointer(new FixedTarget(defendingPlayerId, game)); + this.addEffect(effect); + this.addEffect(new GainLifeEffect(2)); + return true; + } + return false; + } + + @Override + public OathOfKayaTriggeredAbility copy() { + return new OathOfKayaTriggeredAbility(this); + } + + @Override + public String getRule() { + return "Whenever an opponent attacks a planeswalker you control with one or more creatures, " + + "{this} deals 2 damage to that player and you gain 2 life."; + } +} diff --git a/Mage.Sets/src/mage/sets/WarOfTheSpark.java b/Mage.Sets/src/mage/sets/WarOfTheSpark.java index 2014e4aefa..5b4443e51c 100644 --- a/Mage.Sets/src/mage/sets/WarOfTheSpark.java +++ b/Mage.Sets/src/mage/sets/WarOfTheSpark.java @@ -198,6 +198,7 @@ public final class WarOfTheSpark extends ExpansionSet { cards.add(new SetCardInfo("Nissa, Who Shakes the World", 169, Rarity.RARE, mage.cards.n.NissaWhoShakesTheWorld.class)); cards.add(new SetCardInfo("Niv-Mizzet Reborn", 208, Rarity.MYTHIC, mage.cards.n.NivMizzetReborn.class)); cards.add(new SetCardInfo("No Escape", 63, Rarity.COMMON, mage.cards.n.NoEscape.class)); + cards.add(new SetCardInfo("Oath of Kaya", 209, Rarity.RARE, mage.cards.o.OathOfKaya.class)); cards.add(new SetCardInfo("Ob Nixilis's Cruelty", 101, Rarity.COMMON, mage.cards.o.ObNixilissCruelty.class)); cards.add(new SetCardInfo("Ob Nixilis, the Hate-Twisted", 100, Rarity.UNCOMMON, mage.cards.o.ObNixilisTheHateTwisted.class)); cards.add(new SetCardInfo("Orzhov Guildgate", 269, Rarity.COMMON, mage.cards.o.OrzhovGuildgate.class));