diff --git a/Mage.Sets/src/mage/cards/a/AetherbladeAgent.java b/Mage.Sets/src/mage/cards/a/AetherbladeAgent.java index 9d82c4053f2..87d61c3ad23 100644 --- a/Mage.Sets/src/mage/cards/a/AetherbladeAgent.java +++ b/Mage.Sets/src/mage/cards/a/AetherbladeAgent.java @@ -1,7 +1,7 @@ package mage.cards.a; import mage.abilities.common.ActivateAsSorceryActivatedAbility; -import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.common.DealsCombatDamageToAPlayerOrBattleTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.TransformSourceEffect; @@ -41,9 +41,9 @@ public final class AetherbladeAgent extends TransformingDoubleFacedCard { this.getRightHalfCard().addAbility(DeathtouchAbility.getInstance()); // Whenever Gitaxian Mindstinger deals combat damage to a player or battle, draw a card. - this.getRightHalfCard().addAbility(new DealsCombatDamageToAPlayerTriggeredAbility( + this.getRightHalfCard().addAbility(new DealsCombatDamageToAPlayerOrBattleTriggeredAbility( new DrawCardSourceControllerEffect(1), false - ).setOrBattle(true)); + )); } private AetherbladeAgent(final AetherbladeAgent card) { diff --git a/Mage.Sets/src/mage/cards/a/AvacynianMissionaries.java b/Mage.Sets/src/mage/cards/a/AvacynianMissionaries.java index b786a29c70f..74fa8d538c2 100644 --- a/Mage.Sets/src/mage/cards/a/AvacynianMissionaries.java +++ b/Mage.Sets/src/mage/cards/a/AvacynianMissionaries.java @@ -3,9 +3,7 @@ package mage.cards.a; import mage.abilities.Ability; import mage.abilities.common.BeginningOfEndStepTriggeredAbility; import mage.abilities.common.TransformIntoSourceTriggeredAbility; -import mage.abilities.common.delayed.OnLeaveReturnExiledToBattlefieldAbility; import mage.abilities.condition.common.EquippedSourceCondition; -import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.ExileUntilSourceLeavesEffect; import mage.abilities.effects.common.TransformSourceEffect; import mage.cards.CardSetInfo; @@ -51,7 +49,6 @@ public final class AvacynianMissionaries extends TransformingDoubleFacedCard { // When this creature transforms into Lunarch Inquisitors, you may exile another target creature until Lunarch Inquisitors leaves the battlefield. Ability ability = new TransformIntoSourceTriggeredAbility(new ExileUntilSourceLeavesEffect(), true); ability.addTarget(new TargetPermanent(filter)); - ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new OnLeaveReturnExiledToBattlefieldAbility())); this.getRightHalfCard().addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/d/DennickPiousApprentice.java b/Mage.Sets/src/mage/cards/d/DennickPiousApprentice.java index 5974262eb66..614cf77221e 100644 --- a/Mage.Sets/src/mage/cards/d/DennickPiousApprentice.java +++ b/Mage.Sets/src/mage/cards/d/DennickPiousApprentice.java @@ -49,7 +49,7 @@ public final class DennickPiousApprentice extends TransformingDoubleFacedCard { this.getRightHalfCard().addAbility(new PutCardIntoGraveFromAnywhereAllTriggeredAbility( new InvestigateEffect(1), false, StaticFilters.FILTER_CARD_CREATURE, TargetController.ANY - ).setTriggersOnce(true).setTriggerPhrase("Whenever one or more creature cards are put into graveyards from anywhere, ")); + ).setTriggersOnceEachTurn(true).setTriggerPhrase("Whenever one or more creature cards are put into graveyards from anywhere, ")); // If Dennick, Pious Apparition would be put into a graveyard from anywhere, exile it instead. this.getRightHalfCard().addAbility(DisturbAbility.makeExileAbility()); diff --git a/Mage.Sets/src/mage/cards/g/GarrukRelentless.java b/Mage.Sets/src/mage/cards/g/GarrukRelentless.java index b933f3e37ba..75ecc35b10e 100644 --- a/Mage.Sets/src/mage/cards/g/GarrukRelentless.java +++ b/Mage.Sets/src/mage/cards/g/GarrukRelentless.java @@ -67,7 +67,7 @@ public final class GarrukRelentless extends TransformingDoubleFacedCard { this.getRightHalfCard().addAbility(new LoyaltyAbility(new DoIfCostPaid( new SearchLibraryPutInHandEffect(new TargetCardInLibrary( StaticFilters.FILTER_CARD_CREATURE_A - ), true, true), + ), true), null, new SacrificeTargetCost(new TargetControlledPermanent( StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT diff --git a/Mage.Sets/src/mage/cards/h/HuntmasterOfTheFells.java b/Mage.Sets/src/mage/cards/h/HuntmasterOfTheFells.java index 3ca11965537..e8e2f67f885 100644 --- a/Mage.Sets/src/mage/cards/h/HuntmasterOfTheFells.java +++ b/Mage.Sets/src/mage/cards/h/HuntmasterOfTheFells.java @@ -95,7 +95,7 @@ class RavagerOfTheFellsEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - game.damagePlayerOrPlaneswalker(source.getTargets().get(0).getFirstTarget(), 2, source.getSourceId(), source, game, false, true); + game.damagePlayerOrPermanent(source.getTargets().get(0).getFirstTarget(), 2, source.getSourceId(), source, game, false, true); Permanent creature = game.getPermanent(source.getTargets().get(1).getFirstTarget()); if (creature != null) { creature.damage(2, source.getSourceId(), source, game, false, true); diff --git a/Mage.Sets/src/mage/cards/i/InvasionOfAmonkhet.java b/Mage.Sets/src/mage/cards/i/InvasionOfAmonkhet.java index da70eda4aa9..8cd74774bd2 100644 --- a/Mage.Sets/src/mage/cards/i/InvasionOfAmonkhet.java +++ b/Mage.Sets/src/mage/cards/i/InvasionOfAmonkhet.java @@ -86,7 +86,7 @@ class LazotepConvertCopyEffect extends OneShotEffect { public LazotepConvertCopyEffect() { super(Outcome.Copy); this.staticText = "as a copy of any creature card in a graveyard, " + - "except it's a 4/4 black Zombie in addition to its other colors and types"; + "except it's a 4/4 black Zombie in addition to its other types"; } public LazotepConvertCopyEffect(final LazotepConvertCopyEffect effect) { @@ -106,8 +106,11 @@ class LazotepConvertCopyEffect extends OneShotEffect { if (copyFromCard == null) { return true; } + Card modifiedCopy = copyFromCard.copy(); + //Appliers must be applied before CopyEffect, its applier setting is just for copies of copies + applier.apply(game, modifiedCopy, source, source.getSourceId()); game.addEffect(new CopyEffect( - Duration.Custom, copyFromCard, source.getSourceId() + Duration.Custom, modifiedCopy, source.getSourceId() ).setApplier(applier), source); return true; } diff --git a/Mage.Sets/src/mage/cards/i/InvasionOfErgamon.java b/Mage.Sets/src/mage/cards/i/InvasionOfErgamon.java index cd369942f60..efc430d4ca1 100644 --- a/Mage.Sets/src/mage/cards/i/InvasionOfErgamon.java +++ b/Mage.Sets/src/mage/cards/i/InvasionOfErgamon.java @@ -61,7 +61,7 @@ public final class InvasionOfErgamon extends TransformingDoubleFacedCard { // When Truga Cliffcharger enters the battlefield, you may discard a card. If you do, search your library for a land or battle card, reveal it, put it into your hand, then shuffle. this.getRightHalfCard().addAbility(new EntersBattlefieldTriggeredAbility( new DoIfCostPaid(new SearchLibraryPutInHandEffect( - new TargetCardInLibrary(filter), true, true + new TargetCardInLibrary(filter), true ), new DiscardCardCost()) )); } diff --git a/Mage.Sets/src/mage/cards/i/InvasionOfKamigawa.java b/Mage.Sets/src/mage/cards/i/InvasionOfKamigawa.java index c27935cfe97..86a42c63584 100644 --- a/Mage.Sets/src/mage/cards/i/InvasionOfKamigawa.java +++ b/Mage.Sets/src/mage/cards/i/InvasionOfKamigawa.java @@ -1,7 +1,7 @@ package mage.cards.i; import mage.abilities.Ability; -import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.common.DealsCombatDamageToAPlayerOrBattleTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SiegeAbility; import mage.abilities.effects.common.DrawCardSourceControllerEffect; @@ -47,9 +47,9 @@ public final class InvasionOfKamigawa extends TransformingDoubleFacedCard { this.getRightHalfCard().addAbility(FlyingAbility.getInstance()); // Whenever Rooftop Saboteurs deals combat damage to a player or battle, draw a card. - this.getRightHalfCard().addAbility(new DealsCombatDamageToAPlayerTriggeredAbility( + this.getRightHalfCard().addAbility(new DealsCombatDamageToAPlayerOrBattleTriggeredAbility( new DrawCardSourceControllerEffect(1), false - ).setOrBattle(true)); + )); } private InvasionOfKamigawa(final InvasionOfKamigawa card) { diff --git a/Mage.Sets/src/mage/cards/i/InvasionOfSegovia.java b/Mage.Sets/src/mage/cards/i/InvasionOfSegovia.java index 22cab5e77b3..8f9ee47dee5 100644 --- a/Mage.Sets/src/mage/cards/i/InvasionOfSegovia.java +++ b/Mage.Sets/src/mage/cards/i/InvasionOfSegovia.java @@ -28,7 +28,7 @@ import java.util.UUID; */ public final class InvasionOfSegovia extends TransformingDoubleFacedCard { - private static final FilterCard filter = new FilterCard("noncreature spells"); + private static final FilterCard filter = new FilterCard("noncreature spells you cast"); static { filter.add(Predicates.not(CardType.CREATURE.getPredicate())); diff --git a/Mage.Sets/src/mage/cards/i/InvasionOfTarkir.java b/Mage.Sets/src/mage/cards/i/InvasionOfTarkir.java index 1bf0ac77c5e..d173b7eb5c9 100644 --- a/Mage.Sets/src/mage/cards/i/InvasionOfTarkir.java +++ b/Mage.Sets/src/mage/cards/i/InvasionOfTarkir.java @@ -146,7 +146,7 @@ class DefiantThundermawEffect extends OneShotEffect { if (mor == null) { return false; } - game.damagePlayerOrPlaneswalker( + game.damagePlayerOrPermanent( getTargetPointer().getFirst(game, source), 2, mor.getSourceId(), source, game, false, true ); diff --git a/Mage.Sets/src/mage/cards/i/InventiveIteration.java b/Mage.Sets/src/mage/cards/i/InventiveIteration.java index 662b84ab50e..c3ebff0e6be 100644 --- a/Mage.Sets/src/mage/cards/i/InventiveIteration.java +++ b/Mage.Sets/src/mage/cards/i/InventiveIteration.java @@ -133,6 +133,7 @@ class LivingBreakthroughEffect extends ContinuousRuleModifyingEffectImpl { private LivingBreakthroughEffect(final LivingBreakthroughEffect effect) { super(effect); + this.manaValue = effect.manaValue; } @Override diff --git a/Mage.Sets/src/mage/cards/j/JaceVrynsProdigy.java b/Mage.Sets/src/mage/cards/j/JaceVrynsProdigy.java index 91ab105d0ba..067be162150 100644 --- a/Mage.Sets/src/mage/cards/j/JaceVrynsProdigy.java +++ b/Mage.Sets/src/mage/cards/j/JaceVrynsProdigy.java @@ -7,15 +7,15 @@ import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.condition.common.CardsInControllerGraveyardCondition; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.decorator.ConditionalOneShotEffect; -import mage.abilities.effects.CastCardFromGraveyardThenExileItEffect; import mage.abilities.effects.common.DrawDiscardControllerEffect; import mage.abilities.effects.common.ExileAndReturnSourceEffect; import mage.abilities.effects.common.GetEmblemEffect; +import mage.abilities.effects.common.MayCastTargetThenExileEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.cards.CardSetInfo; import mage.cards.TransformingDoubleFacedCard; import mage.constants.*; -import mage.filter.common.FilterInstantOrSorceryCard; +import mage.filter.StaticFilters; import mage.game.command.emblems.JaceTelepathUnboundEmblem; import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetCreaturePermanent; @@ -56,10 +56,8 @@ public final class JaceVrynsProdigy extends TransformingDoubleFacedCard { this.getRightHalfCard().addAbility(ability); // -3: You may cast target instant or sorcery card from your graveyard this turn. If that card would be put into your graveyard this turn, exile it instead. - ability = new LoyaltyAbility(new CastCardFromGraveyardThenExileItEffect() - .setText("You may cast target instant or sorcery card from your graveyard this turn. " + - "If that spell would be put into your graveyard, exile it instead"), -3); - ability.addTarget(new TargetCardInYourGraveyard(new FilterInstantOrSorceryCard())); + ability = new LoyaltyAbility(new MayCastTargetThenExileEffect(Duration.EndOfTurn), -3); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY_FROM_YOUR_GRAVEYARD)); this.getRightHalfCard().addAbility(ability); // −9: You get an emblem with "Whenever you cast a spell, target opponent mills five cards." diff --git a/Mage.Sets/src/mage/cards/k/KytheonHeroOfAkros.java b/Mage.Sets/src/mage/cards/k/KytheonHeroOfAkros.java index b32c8c38efd..aedc4f9447b 100644 --- a/Mage.Sets/src/mage/cards/k/KytheonHeroOfAkros.java +++ b/Mage.Sets/src/mage/cards/k/KytheonHeroOfAkros.java @@ -82,7 +82,7 @@ public final class KytheonHeroOfAkros extends TransformingDoubleFacedCard { // 0: Until end of turn, Gideon, Battle-Forged becomes a 4/4 Human Soldier creature with indestructible that's still a planeswalker. Prevent all damage that would be dealt to him this turn. ability = new LoyaltyAbility(new BecomesCreatureSourceEffect( - new GideonBattleForgedToken(), "planeswalker", Duration.EndOfTurn + new GideonBattleForgedToken(), CardType.PLANESWALKER, Duration.EndOfTurn ), 0); ability.addEffect(new PreventAllDamageToSourceEffect(Duration.EndOfTurn) .setText("Prevent all damage that would be dealt to him this turn")); diff --git a/Mage.Sets/src/mage/cards/l/LunarchVeteran.java b/Mage.Sets/src/mage/cards/l/LunarchVeteran.java index cbdb631320e..61569f2ffca 100644 --- a/Mage.Sets/src/mage/cards/l/LunarchVeteran.java +++ b/Mage.Sets/src/mage/cards/l/LunarchVeteran.java @@ -51,7 +51,9 @@ public final class LunarchVeteran extends TransformingDoubleFacedCard { this.getRightHalfCard().addAbility(FlyingAbility.getInstance()); // Whenever another creature you control leaves the battlefield, you gain 1 life. - this.getRightHalfCard().addAbility(new LeavesBattlefieldAllTriggeredAbility(new GainLifeEffect(1), filter)); + this.getRightHalfCard().addAbility(new LeavesBattlefieldAllTriggeredAbility( + new GainLifeEffect(1), StaticFilters.FILTER_ANOTHER_CREATURE_YOU_CONTROL + )); // If Luminous Phantom would be put into a graveyard from anywhere, exile it instead. this.getRightHalfCard().addAbility(DisturbAbility.makeExileAbility()); diff --git a/Mage.Sets/src/mage/cards/o/OutlandLiberator.java b/Mage.Sets/src/mage/cards/o/OutlandLiberator.java index 1093bdd6488..1f3cc70ec8f 100644 --- a/Mage.Sets/src/mage/cards/o/OutlandLiberator.java +++ b/Mage.Sets/src/mage/cards/o/OutlandLiberator.java @@ -15,7 +15,7 @@ import mage.constants.SubType; import mage.filter.FilterPermanent; import mage.filter.StaticFilters; import mage.filter.common.FilterArtifactOrEnchantmentPermanent; -import mage.filter.predicate.permanent.DefendingPlayerControlsPredicate; +import mage.filter.predicate.permanent.DefendingPlayerControlsSourceAttackingPredicate; import mage.target.TargetPermanent; import java.util.UUID; @@ -29,7 +29,7 @@ public final class OutlandLiberator extends TransformingDoubleFacedCard { = new FilterArtifactOrEnchantmentPermanent("artifact or enchantment defending player controls"); static { - filter.add(DefendingPlayerControlsPredicate.instance); + filter.add(DefendingPlayerControlsSourceAttackingPredicate.instance); } public OutlandLiberator(UUID ownerId, CardSetInfo setInfo) { diff --git a/Mage.Sets/src/mage/cards/r/RatchetFieldMedic.java b/Mage.Sets/src/mage/cards/r/RatchetFieldMedic.java index 67974f2f4df..59778401460 100644 --- a/Mage.Sets/src/mage/cards/r/RatchetFieldMedic.java +++ b/Mage.Sets/src/mage/cards/r/RatchetFieldMedic.java @@ -73,7 +73,7 @@ public final class RatchetFieldMedic extends TransformingDoubleFacedCard { this.getRightHalfCard().addAbility(new DiesCreatureTriggeredAbility( new TransformSourceEffect().setText("convert {this}"), false, filter ).setTriggerPhrase("Whenever one or more nontoken artifacts you control " + - "are put into a graveyard from the battlefield, ").setTriggersOnce(true)); + "are put into a graveyard from the battlefield, ").setTriggersOnceEachTurn(true)); } private RatchetFieldMedic(final RatchetFieldMedic card) {