diff --git a/Mage.Sets/src/mage/cards/a/AttunedHunter.java b/Mage.Sets/src/mage/cards/a/AttunedHunter.java index 1693ec4685f..1f891f599c6 100644 --- a/Mage.Sets/src/mage/cards/a/AttunedHunter.java +++ b/Mage.Sets/src/mage/cards/a/AttunedHunter.java @@ -2,8 +2,6 @@ package mage.cards.a; import mage.MageInt; import mage.abilities.common.CardsLeaveGraveyardTriggeredAbility; -import mage.abilities.condition.common.MyTurnCondition; -import mage.abilities.decorator.ConditionalTriggeredAbility; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; @@ -11,6 +9,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.counters.CounterType; +import mage.filter.StaticFilters; import java.util.UUID; @@ -31,10 +30,9 @@ public final class AttunedHunter extends CardImpl { this.addAbility(TrampleAbility.getInstance()); // Whenever one or more cards leave your graveyard during your turn, put a +1/+1 counter on this creature. - this.addAbility(new ConditionalTriggeredAbility( - new CardsLeaveGraveyardTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance())), - MyTurnCondition.instance, "Whenever one or more cards leave your graveyard " + - "during your turn, put a +1/+1 counter on this creature." + this.addAbility(new CardsLeaveGraveyardTriggeredAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance()), + StaticFilters.FILTER_CARD_CARDS, true )); } diff --git a/Mage.Sets/src/mage/cards/k/KheruGoldkeeper.java b/Mage.Sets/src/mage/cards/k/KheruGoldkeeper.java new file mode 100644 index 00000000000..e82ca09547e --- /dev/null +++ b/Mage.Sets/src/mage/cards/k/KheruGoldkeeper.java @@ -0,0 +1,55 @@ +package mage.cards.k; + +import mage.MageInt; +import mage.abilities.common.CardsLeaveGraveyardTriggeredAbility; +import mage.abilities.common.RenewAbility; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.counters.CounterType; +import mage.filter.StaticFilters; +import mage.game.permanent.token.TreasureToken; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class KheruGoldkeeper extends CardImpl { + + public KheruGoldkeeper(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{G}{U}"); + + this.subtype.add(SubType.DRAGON); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Whenever one or more cards leave your graveyard during your turn, create a Treasure token. + this.addAbility(new CardsLeaveGraveyardTriggeredAbility( + new CreateTokenEffect(new TreasureToken()), + StaticFilters.FILTER_CARD_CARDS, true + )); + + // Renew -- {2}{B}{G}{U}, Exile this card from your graveyard: Put two +1/+1 counters and a flying counter on target creature. Activate only as a sorcery. + this.addAbility(new RenewAbility( + "{2}{B}{G}{U}", + CounterType.P1P1.createInstance(2), + CounterType.FLYING.createInstance() + )); + } + + private KheruGoldkeeper(final KheruGoldkeeper card) { + super(card); + } + + @Override + public KheruGoldkeeper copy() { + return new KheruGoldkeeper(this); + } +} diff --git a/Mage.Sets/src/mage/cards/t/ThranVigil.java b/Mage.Sets/src/mage/cards/t/ThranVigil.java index 8d4a2cad490..8638188717c 100644 --- a/Mage.Sets/src/mage/cards/t/ThranVigil.java +++ b/Mage.Sets/src/mage/cards/t/ThranVigil.java @@ -2,14 +2,13 @@ package mage.cards.t; import mage.abilities.Ability; import mage.abilities.common.CardsLeaveGraveyardTriggeredAbility; -import mage.abilities.condition.common.MyTurnCondition; -import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.counters.CounterType; -import mage.filter.StaticFilters; +import mage.filter.FilterCard; +import mage.filter.predicate.Predicates; import mage.target.common.TargetControlledCreaturePermanent; import java.util.UUID; @@ -19,16 +18,21 @@ import java.util.UUID; */ public final class ThranVigil extends CardImpl { + private static final FilterCard filter = new FilterCard("artifact and/or creature cards"); + + static { + filter.add(Predicates.or( + CardType.ARTIFACT.getPredicate(), + CardType.CREATURE.getPredicate() + )); + } + public ThranVigil(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}"); // Whenever one or more artifact and/or creature cards leave your graveyard during your turn, put a +1/+1 counter on target creature you control. - Ability ability = new ConditionalInterveningIfTriggeredAbility( - new CardsLeaveGraveyardTriggeredAbility( - new AddCountersTargetEffect(CounterType.P1P1.createInstance()), - StaticFilters.FILTER_CARD_ARTIFACT_OR_CREATURE - ), MyTurnCondition.instance, "Whenever one or more artifact and/or creature cards " + - "leave your graveyard during your turn, put a +1/+1 counter on target creature you control." + Ability ability = new CardsLeaveGraveyardTriggeredAbility( + new AddCountersTargetEffect(CounterType.P1P1.createInstance()), filter, true ); ability.addTarget(new TargetControlledCreaturePermanent()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java index 7c957c560a3..7028a44b67b 100644 --- a/Mage.Sets/src/mage/sets/TarkirDragonstorm.java +++ b/Mage.Sets/src/mage/sets/TarkirDragonstorm.java @@ -81,6 +81,7 @@ public final class TarkirDragonstorm extends ExpansionSet { cards.add(new SetCardInfo("Jeskai Devotee", 110, Rarity.COMMON, mage.cards.j.JeskaiDevotee.class)); cards.add(new SetCardInfo("Jeskai Monument", 244, Rarity.UNCOMMON, mage.cards.j.JeskaiMonument.class)); cards.add(new SetCardInfo("Jungle Hollow", 258, Rarity.COMMON, mage.cards.j.JungleHollow.class)); + cards.add(new SetCardInfo("Kheru Goldkeeper", 199, Rarity.UNCOMMON, mage.cards.k.KheruGoldkeeper.class)); cards.add(new SetCardInfo("Kin-Tree Severance", 200, Rarity.UNCOMMON, mage.cards.k.KinTreeSeverance.class)); cards.add(new SetCardInfo("Kishla Village", 259, Rarity.RARE, mage.cards.k.KishlaVillage.class)); cards.add(new SetCardInfo("Krotiq Nestguard", 148, Rarity.COMMON, mage.cards.k.KrotiqNestguard.class)); diff --git a/Mage/src/main/java/mage/abilities/common/CardsLeaveGraveyardTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/CardsLeaveGraveyardTriggeredAbility.java index 9c82a0e589b..3e7e2ea1c9c 100644 --- a/Mage/src/main/java/mage/abilities/common/CardsLeaveGraveyardTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/CardsLeaveGraveyardTriggeredAbility.java @@ -18,20 +18,27 @@ import java.util.Objects; public class CardsLeaveGraveyardTriggeredAbility extends TriggeredAbilityImpl { private final FilterCard filter; + private final boolean yourTurn; public CardsLeaveGraveyardTriggeredAbility(Effect effect) { this(effect, StaticFilters.FILTER_CARD_CARDS); } public CardsLeaveGraveyardTriggeredAbility(Effect effect, FilterCard filter) { + this(effect, filter, false); + } + + public CardsLeaveGraveyardTriggeredAbility(Effect effect, FilterCard filter, boolean yourTurn) { super(Zone.BATTLEFIELD, effect, false); this.filter = filter; - setTriggerPhrase("Whenever one or more " + filter + " leave your graveyard, "); + this.yourTurn = yourTurn; + setTriggerPhrase("Whenever one or more " + filter + " leave your graveyard" + (yourTurn ? " during your turn" : "") + ", "); } private CardsLeaveGraveyardTriggeredAbility(final CardsLeaveGraveyardTriggeredAbility ability) { super(ability); this.filter = ability.filter; + this.yourTurn = ability.yourTurn; } @Override @@ -41,6 +48,9 @@ public class CardsLeaveGraveyardTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkTrigger(GameEvent event, Game game) { + if (yourTurn && !isControlledBy(game.getActivePlayerId())) { + return false; + } ZoneChangeGroupEvent zEvent = (ZoneChangeGroupEvent) event; return zEvent != null && Zone.GRAVEYARD == zEvent.getFromZone()