diff --git a/Mage.Sets/src/mage/cards/a/AmbassadorLaquatus.java b/Mage.Sets/src/mage/cards/a/AmbassadorLaquatus.java index 54f47c6f93c..213e8a4ae44 100644 --- a/Mage.Sets/src/mage/cards/a/AmbassadorLaquatus.java +++ b/Mage.Sets/src/mage/cards/a/AmbassadorLaquatus.java @@ -6,7 +6,7 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -31,7 +31,7 @@ public final class AmbassadorLaquatus extends CardImpl { this.toughness = new MageInt(3); // {3}: Target player puts the top three cards of their library into their graveyard. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(3), new GenericManaCost(3)); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MillCardsTargetEffect(3), new GenericManaCost(3)); ability.addTarget(new TargetPlayer()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/a/ArchiveTrap.java b/Mage.Sets/src/mage/cards/a/ArchiveTrap.java index d6c90ce72c5..1b431a97a91 100644 --- a/Mage.Sets/src/mage/cards/a/ArchiveTrap.java +++ b/Mage.Sets/src/mage/cards/a/ArchiveTrap.java @@ -8,7 +8,7 @@ import mage.abilities.Ability; import mage.abilities.condition.Condition; import mage.abilities.costs.AlternativeCostSourceAbility; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -16,7 +16,6 @@ import mage.constants.SubType; import mage.constants.WatcherScope; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.players.Player; import mage.target.common.TargetOpponent; import mage.watchers.Watcher; @@ -36,7 +35,7 @@ public final class ArchiveTrap extends CardImpl { // Target opponent puts the top thirteen cards of their library into their graveyard. this.getSpellAbility().addTarget(new TargetOpponent()); - this.getSpellAbility().addEffect(new PutLibraryIntoGraveTargetEffect(13)); + this.getSpellAbility().addEffect(new MillCardsTargetEffect(13)); } private ArchiveTrap(final ArchiveTrap card) { diff --git a/Mage.Sets/src/mage/cards/a/AshiokDreamRender.java b/Mage.Sets/src/mage/cards/a/AshiokDreamRender.java index 622dd67b3b7..da888faf9e9 100644 --- a/Mage.Sets/src/mage/cards/a/AshiokDreamRender.java +++ b/Mage.Sets/src/mage/cards/a/AshiokDreamRender.java @@ -6,7 +6,7 @@ import mage.abilities.LoyaltyAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; import mage.abilities.effects.common.ExileGraveyardAllPlayersEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; @@ -34,7 +34,7 @@ public final class AshiokDreamRender extends CardImpl { this.addAbility(new SimpleStaticAbility(new AshiokDreamRenderEffect())); // -1: Target player puts the top four cards of their library into their graveyard. Then exile each opponent's graveyard. - Ability ability = new LoyaltyAbility(new PutLibraryIntoGraveTargetEffect(4), -1); + Ability ability = new LoyaltyAbility(new MillCardsTargetEffect(4), -1); ability.addEffect(new ExileGraveyardAllPlayersEffect(StaticFilters.FILTER_CARD, TargetController.OPPONENT).setText("Then exile each opponent's graveyard.")); ability.addTarget(new TargetPlayer()); this.addAbility(ability); @@ -93,4 +93,4 @@ class AshiokDreamRenderEffect extends ContinuousRuleModifyingEffectImpl { && event.getTargetId().equals(game.getControllerId(event.getSourceId())) && controller.hasOpponent(game.getControllerId(event.getSourceId()), game); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/b/BelltowerSphinx.java b/Mage.Sets/src/mage/cards/b/BelltowerSphinx.java index 9ddda1a02a0..fdd0fb21831 100644 --- a/Mage.Sets/src/mage/cards/b/BelltowerSphinx.java +++ b/Mage.Sets/src/mage/cards/b/BelltowerSphinx.java @@ -1,25 +1,19 @@ package mage.cards.b; import mage.MageInt; -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.dynamicvalue.common.StaticValue; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.common.SourceDealsDamageToThisTriggeredAbility; +import mage.abilities.dynamicvalue.common.SavedDamageValue; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.players.Player; -import mage.target.targetpointer.FixedTarget; import java.util.UUID; /** - * @author nantuko + * @author xenohedron */ public final class BelltowerSphinx extends CardImpl { @@ -33,8 +27,11 @@ public final class BelltowerSphinx extends CardImpl { // Flying this.addAbility(FlyingAbility.getInstance()); - // Whenever a source deals damage to Belltower Sphinx, that source's controller puts that many cards from the top of their library into their graveyard. - this.addAbility(new BelltowerSphinxEffect()); + // Whenever a source deals damage to Belltower Sphinx, that source's controller mills that many cards. + this.addAbility(new SourceDealsDamageToThisTriggeredAbility( + new MillCardsTargetEffect(SavedDamageValue.MANY) + .setText("that source's controller mills that many cards") + )); } private BelltowerSphinx(final BelltowerSphinx card) { @@ -46,45 +43,3 @@ public final class BelltowerSphinx extends CardImpl { return new BelltowerSphinx(this); } } - -class BelltowerSphinxEffect extends TriggeredAbilityImpl { - - public BelltowerSphinxEffect() { - super(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(0)); - } - - public BelltowerSphinxEffect(BelltowerSphinxEffect effect) { - super(effect); - } - - @Override - public BelltowerSphinxEffect copy() { - return new BelltowerSphinxEffect(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PERMANENT; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - if (event.getTargetId().equals(this.sourceId)) { - UUID controller = game.getControllerId(event.getSourceId()); - if (controller != null) { - Player player = game.getPlayer(controller); - if (player != null) { - getEffects().get(0).setTargetPointer(new FixedTarget(player.getId())); - ((PutLibraryIntoGraveTargetEffect) getEffects().get(0)).setAmount(StaticValue.get(event.getAmount())); - return true; - } - } - } - return false; - } - - @Override - public String getRule() { - return "Whenever a source deals damage to {this}, that source's controller mills that many cards."; - } -} diff --git a/Mage.Sets/src/mage/cards/b/BoromirWardenOfTheTower.java b/Mage.Sets/src/mage/cards/b/BoromirWardenOfTheTower.java index b2fe2c73015..f902918bb4d 100644 --- a/Mage.Sets/src/mage/cards/b/BoromirWardenOfTheTower.java +++ b/Mage.Sets/src/mage/cards/b/BoromirWardenOfTheTower.java @@ -39,7 +39,7 @@ public final class BoromirWardenOfTheTower extends CardImpl { this.addAbility(VigilanceAbility.getInstance()); // Whenever an opponent casts a spell, if no mana was spent to cast it, counter that spell. - this.addAbility(new SpellCastOpponentNoManaSpentTriggeredAbility(new CounterTargetEffect())); + this.addAbility(new SpellCastOpponentNoManaSpentTriggeredAbility(new CounterTargetEffect().setText("counter that spell"))); // Sacrifice Boromir, Warden of the Tower: Creatures you control gain indestructible until end of turn. The Ring tempts you. Ability ability = new SimpleActivatedAbility(new GainAbilityAllEffect( @@ -58,4 +58,4 @@ public final class BoromirWardenOfTheTower extends CardImpl { public BoromirWardenOfTheTower copy() { return new BoromirWardenOfTheTower(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/b/BrainFreeze.java b/Mage.Sets/src/mage/cards/b/BrainFreeze.java index 405debe5b58..c89c1daf6d1 100644 --- a/Mage.Sets/src/mage/cards/b/BrainFreeze.java +++ b/Mage.Sets/src/mage/cards/b/BrainFreeze.java @@ -2,7 +2,7 @@ package mage.cards.b; import java.util.UUID; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.keyword.StormAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -21,7 +21,7 @@ public final class BrainFreeze extends CardImpl { // Target player puts the top three cards of their library into their graveyard. this.getSpellAbility().addTarget(new TargetPlayer()); - this.getSpellAbility().addEffect(new PutLibraryIntoGraveTargetEffect(3)); + this.getSpellAbility().addEffect(new MillCardsTargetEffect(3)); // Storm this.addAbility(new StormAbility()); } diff --git a/Mage.Sets/src/mage/cards/c/CatharticAdept.java b/Mage.Sets/src/mage/cards/c/CatharticAdept.java index 900958a3174..2fcf54407d8 100644 --- a/Mage.Sets/src/mage/cards/c/CatharticAdept.java +++ b/Mage.Sets/src/mage/cards/c/CatharticAdept.java @@ -5,7 +5,7 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -28,7 +28,7 @@ public final class CatharticAdept extends CardImpl { this.toughness = new MageInt(1); SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, - new PutLibraryIntoGraveTargetEffect(1), + new MillCardsTargetEffect(1), new TapSourceCost()); ability.addTarget(new TargetPlayer()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/c/ChronicFlooding.java b/Mage.Sets/src/mage/cards/c/ChronicFlooding.java index 1bede5dee36..abc3bf9779b 100644 --- a/Mage.Sets/src/mage/cards/c/ChronicFlooding.java +++ b/Mage.Sets/src/mage/cards/c/ChronicFlooding.java @@ -7,7 +7,7 @@ import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.Effect; import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -17,7 +17,6 @@ import mage.constants.Outcome; import mage.constants.Zone; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.game.permanent.Permanent; import mage.target.TargetPermanent; import mage.target.common.TargetLandPermanent; @@ -57,7 +56,7 @@ public final class ChronicFlooding extends CardImpl { class ChronicFloodingAbility extends TriggeredAbilityImpl { ChronicFloodingAbility() { - super(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(3)); + super(Zone.BATTLEFIELD, new MillCardsTargetEffect(3)); } ChronicFloodingAbility(final ChronicFloodingAbility ability) { diff --git a/Mage.Sets/src/mage/cards/c/CodexShredder.java b/Mage.Sets/src/mage/cards/c/CodexShredder.java index 4b6743cd198..56ed3b67f65 100644 --- a/Mage.Sets/src/mage/cards/c/CodexShredder.java +++ b/Mage.Sets/src/mage/cards/c/CodexShredder.java @@ -5,7 +5,7 @@ import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -25,7 +25,7 @@ public final class CodexShredder extends CardImpl { // {T}: Target player puts the top card of their library into their graveyard. Ability ability = new SimpleActivatedAbility( - new PutLibraryIntoGraveTargetEffect(1), new TapSourceCost() + new MillCardsTargetEffect(1), new TapSourceCost() ); ability.addTarget(new TargetPlayer()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/c/CompellingArgument.java b/Mage.Sets/src/mage/cards/c/CompellingArgument.java index 240033a968e..864a71eec07 100644 --- a/Mage.Sets/src/mage/cards/c/CompellingArgument.java +++ b/Mage.Sets/src/mage/cards/c/CompellingArgument.java @@ -3,7 +3,7 @@ package mage.cards.c; import java.util.UUID; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.keyword.CyclingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -21,7 +21,7 @@ public final class CompellingArgument extends CardImpl { // Target player puts the top five cards of their library into their graveyard. this.getSpellAbility().addTarget(new TargetPlayer()); - this.getSpellAbility().addEffect(new PutLibraryIntoGraveTargetEffect(5)); + this.getSpellAbility().addEffect(new MillCardsTargetEffect(5)); // Cycling {U} this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{U}"))); diff --git a/Mage.Sets/src/mage/cards/c/CragSaurian.java b/Mage.Sets/src/mage/cards/c/CragSaurian.java index f02711f93c0..33c5fa8ad3b 100644 --- a/Mage.Sets/src/mage/cards/c/CragSaurian.java +++ b/Mage.Sets/src/mage/cards/c/CragSaurian.java @@ -1,10 +1,9 @@ - package mage.cards.c; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.SourceDealsDamageToThisTriggeredAbility; import mage.abilities.effects.ContinuousEffect; import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; @@ -15,10 +14,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Outcome; -import mage.constants.Zone; import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.players.Player; import mage.target.targetpointer.FixedTarget; @@ -35,7 +31,7 @@ public final class CragSaurian extends CardImpl { this.toughness = new MageInt(4); // Whenever a source deals damage to Crag Saurian, that source's controller gains control of Crag Saurian. - this.addAbility(new CragSaurianTriggeredAbility()); + this.addAbility(new SourceDealsDamageToThisTriggeredAbility(new CragSaurianEffect())); } private CragSaurian(final CragSaurian card) { @@ -77,40 +73,3 @@ class CragSaurianEffect extends OneShotEffect { return new CragSaurianEffect(this); } } - -class CragSaurianTriggeredAbility extends TriggeredAbilityImpl { - - CragSaurianTriggeredAbility() { - super(Zone.BATTLEFIELD, new CragSaurianEffect()); - setTriggerPhrase("Whenever a source deals damage to {this}, "); - } - - CragSaurianTriggeredAbility(final CragSaurianTriggeredAbility ability) { - super(ability); - } - - @Override - public CragSaurianTriggeredAbility copy() { - return new CragSaurianTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PERMANENT; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - if (event.getTargetId().equals(this.sourceId)) { - UUID controller = game.getControllerId(event.getSourceId()); - if (controller != null) { - Player player = game.getPlayer(controller); - if (player != null) { - getEffects().get(0).setTargetPointer(new FixedTarget(player.getId())); - return true; - } - } - } - return false; - } -} \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/c/CrosstownCourier.java b/Mage.Sets/src/mage/cards/c/CrosstownCourier.java index b817b8ac5e3..53def730d27 100644 --- a/Mage.Sets/src/mage/cards/c/CrosstownCourier.java +++ b/Mage.Sets/src/mage/cards/c/CrosstownCourier.java @@ -1,26 +1,18 @@ - package mage.cards.c; -import java.util.UUID; import mage.MageInt; -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.dynamicvalue.common.StaticValue; -import mage.abilities.effects.Effect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.dynamicvalue.common.SavedDamageValue; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.DamagedPlayerEvent; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.target.targetpointer.FixedTarget; + +import java.util.UUID; /** - * - * @author LevelX2 + * @author xenohedron */ public final class CrosstownCourier extends CardImpl { @@ -32,7 +24,7 @@ public final class CrosstownCourier extends CardImpl { this.toughness = new MageInt(1); // Whenever Crosstown Courier deals combat damage to a player, that player puts that many cards from the top of their library into their graveyard. - this.addAbility(new CrosstownCourierTriggeredAbility()); + this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new MillCardsTargetEffect(SavedDamageValue.MANY), false, true)); } private CrosstownCourier(final CrosstownCourier card) { @@ -44,43 +36,4 @@ public final class CrosstownCourier extends CardImpl { return new CrosstownCourier(this); } - static class CrosstownCourierTriggeredAbility extends TriggeredAbilityImpl { - - public CrosstownCourierTriggeredAbility() { - super(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(0), false); - } - - public CrosstownCourierTriggeredAbility(final CrosstownCourierTriggeredAbility ability) { - super(ability); - } - - @Override - public CrosstownCourierTriggeredAbility copy() { - return new CrosstownCourierTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PLAYER; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - if (event.getSourceId().equals(this.sourceId) && ((DamagedPlayerEvent) event).isCombatDamage()) { - for (Effect effect : getEffects()) { - if (effect instanceof PutLibraryIntoGraveTargetEffect) { - effect.setTargetPointer(new FixedTarget(event.getTargetId())); - ((PutLibraryIntoGraveTargetEffect) effect).setAmount(StaticValue.get(event.getAmount())); - return true; - } - } - } - return false; - } - - @Override - public String getRule() { - return "Whenever {this} deals combat damage to a player, that player mills that many cards."; - } - } } diff --git a/Mage.Sets/src/mage/cards/c/CurseOfTheBloodyTome.java b/Mage.Sets/src/mage/cards/c/CurseOfTheBloodyTome.java index 64d5156db7c..0be4a5f5829 100644 --- a/Mage.Sets/src/mage/cards/c/CurseOfTheBloodyTome.java +++ b/Mage.Sets/src/mage/cards/c/CurseOfTheBloodyTome.java @@ -3,7 +3,7 @@ package mage.cards.c; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -33,7 +33,7 @@ public final class CurseOfTheBloodyTome extends CardImpl { // At the beginning of enchanted player's upkeep, that player puts the top two cards of their library into their graveyard. this.addAbility(new BeginningOfUpkeepTriggeredAbility( - new PutLibraryIntoGraveTargetEffect(2) + new MillCardsTargetEffect(2) .setText("that player mills two cards"), TargetController.ENCHANTED, false )); diff --git a/Mage.Sets/src/mage/cards/d/DecimatorWeb.java b/Mage.Sets/src/mage/cards/d/DecimatorWeb.java index 80e1060a029..fe629e198e8 100644 --- a/Mage.Sets/src/mage/cards/d/DecimatorWeb.java +++ b/Mage.Sets/src/mage/cards/d/DecimatorWeb.java @@ -8,7 +8,7 @@ import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.LoseLifeTargetEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -28,7 +28,7 @@ public final class DecimatorWeb extends CardImpl { Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new LoseLifeTargetEffect(2), new ManaCostsImpl<>("{4}")); ability.addCost(new TapSourceCost()); ability.addEffect(new AddCountersTargetEffect(CounterType.POISON.createInstance())); - ability.addEffect(new PutLibraryIntoGraveTargetEffect(6)); + ability.addEffect(new MillCardsTargetEffect(6)); ability.addTarget(new TargetOpponent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/d/DiligentExcavator.java b/Mage.Sets/src/mage/cards/d/DiligentExcavator.java index d959be9ee91..a4bf3ab993a 100644 --- a/Mage.Sets/src/mage/cards/d/DiligentExcavator.java +++ b/Mage.Sets/src/mage/cards/d/DiligentExcavator.java @@ -5,7 +5,7 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SpellCastControllerTriggeredAbility; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -35,7 +35,7 @@ public final class DiligentExcavator extends CardImpl { this.toughness = new MageInt(3); // Whenever you cast a historic spell, target player puts the top two cards of their library into their graveyard. - Ability ability = new SpellCastControllerTriggeredAbility(new PutLibraryIntoGraveTargetEffect(2), filter, false); + Ability ability = new SpellCastControllerTriggeredAbility(new MillCardsTargetEffect(2), filter, false); ability.addTarget(new TargetPlayer()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/d/Doorkeeper.java b/Mage.Sets/src/mage/cards/d/Doorkeeper.java index b1e233cc0bd..3af52155cbb 100644 --- a/Mage.Sets/src/mage/cards/d/Doorkeeper.java +++ b/Mage.Sets/src/mage/cards/d/Doorkeeper.java @@ -8,7 +8,7 @@ import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.keyword.DefenderAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -42,7 +42,7 @@ public final class Doorkeeper extends CardImpl { this.addAbility(DefenderAbility.getInstance()); // {2}{U}, {T}: Target player puts the top X cards of their library into their graveyard, where X is the number of creatures with defender you control. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(new PermanentsOnBattlefieldCount(filter)), new ManaCostsImpl<>("{2}{U}")); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MillCardsTargetEffect(new PermanentsOnBattlefieldCount(filter)), new ManaCostsImpl<>("{2}{U}")); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetPlayer()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/d/Dreadwaters.java b/Mage.Sets/src/mage/cards/d/Dreadwaters.java index da3b414908b..f4f1ccefe9e 100644 --- a/Mage.Sets/src/mage/cards/d/Dreadwaters.java +++ b/Mage.Sets/src/mage/cards/d/Dreadwaters.java @@ -3,7 +3,7 @@ package mage.cards.d; import java.util.UUID; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -30,7 +30,7 @@ public final class Dreadwaters extends CardImpl { // Target player puts the top X cards of their library into their graveyard, where X is the number of lands you control. this.getSpellAbility().addTarget(new TargetPlayer()); - this.getSpellAbility().addEffect(new PutLibraryIntoGraveTargetEffect(new PermanentsOnBattlefieldCount(filter))); + this.getSpellAbility().addEffect(new MillCardsTargetEffect(new PermanentsOnBattlefieldCount(filter))); } private Dreadwaters(final Dreadwaters card) { diff --git a/Mage.Sets/src/mage/cards/d/DreamTwist.java b/Mage.Sets/src/mage/cards/d/DreamTwist.java index ee0c78b061d..bc499da5c8a 100644 --- a/Mage.Sets/src/mage/cards/d/DreamTwist.java +++ b/Mage.Sets/src/mage/cards/d/DreamTwist.java @@ -3,12 +3,11 @@ package mage.cards.d; import java.util.UUID; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.keyword.FlashbackAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.TimingRule; import mage.target.TargetPlayer; /** @@ -22,7 +21,7 @@ public final class DreamTwist extends CardImpl { // Target player puts the top three cards of their library into their graveyard. this.getSpellAbility().addTarget(new TargetPlayer()); - this.getSpellAbility().addEffect(new PutLibraryIntoGraveTargetEffect(3)); + this.getSpellAbility().addEffect(new MillCardsTargetEffect(3)); // Flashback {1}{U} this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{1}{U}"))); diff --git a/Mage.Sets/src/mage/cards/d/DreambornMuse.java b/Mage.Sets/src/mage/cards/d/DreambornMuse.java index 1ea48de2e1e..09130a3b52d 100644 --- a/Mage.Sets/src/mage/cards/d/DreambornMuse.java +++ b/Mage.Sets/src/mage/cards/d/DreambornMuse.java @@ -3,7 +3,7 @@ package mage.cards.d; import mage.MageInt; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.dynamicvalue.common.CardsInTargetPlayerHandCount; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -24,7 +24,7 @@ public final class DreambornMuse extends CardImpl { this.toughness = new MageInt(2); // At the beginning of each player's upkeep, that player puts the top X cards of their library into their graveyard, where X is the number of cards in their hand. - PutLibraryIntoGraveTargetEffect effect = new PutLibraryIntoGraveTargetEffect(CardsInTargetPlayerHandCount.instance); + MillCardsTargetEffect effect = new MillCardsTargetEffect(CardsInTargetPlayerHandCount.instance); effect.setText("that player mills X cards, where X is the number of cards in their hand"); this.addAbility(new BeginningOfUpkeepTriggeredAbility(effect, TargetController.ANY, false)); } diff --git a/Mage.Sets/src/mage/cards/d/DrownedSecrets.java b/Mage.Sets/src/mage/cards/d/DrownedSecrets.java index 3fedb03a4c8..0a966e8f36b 100644 --- a/Mage.Sets/src/mage/cards/d/DrownedSecrets.java +++ b/Mage.Sets/src/mage/cards/d/DrownedSecrets.java @@ -4,7 +4,7 @@ import java.util.UUID; import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.common.SpellCastControllerTriggeredAbility; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -29,7 +29,7 @@ public final class DrownedSecrets extends CardImpl { // Whenever you cast a blue spell, target player puts the top two cards if their library into their graveyard. Ability ability = new SpellCastControllerTriggeredAbility( - new PutLibraryIntoGraveTargetEffect(2), filter, false + new MillCardsTargetEffect(2), filter, false ); ability.addTarget(new TargetPlayer()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/d/DrownerInitiate.java b/Mage.Sets/src/mage/cards/d/DrownerInitiate.java index 03d68c0f310..d09dd1a0cad 100644 --- a/Mage.Sets/src/mage/cards/d/DrownerInitiate.java +++ b/Mage.Sets/src/mage/cards/d/DrownerInitiate.java @@ -8,7 +8,7 @@ import mage.abilities.Ability; import mage.abilities.common.SpellCastAllTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.DoIfCostPaid; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -39,7 +39,7 @@ public final class DrownerInitiate extends CardImpl { this.toughness = new MageInt(1); // Whenever a player casts a blue spell, you may pay {1}. If you do, target player puts the top two cards of their library into their graveyard. - Ability ability = new SpellCastAllTriggeredAbility(new DoIfCostPaid(new PutLibraryIntoGraveTargetEffect(2), new ManaCostsImpl<>("{1}")), filter, false); + Ability ability = new SpellCastAllTriggeredAbility(new DoIfCostPaid(new MillCardsTargetEffect(2), new ManaCostsImpl<>("{1}")), filter, false); ability.addTarget(new TargetPlayer()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/d/DrownerOfSecrets.java b/Mage.Sets/src/mage/cards/d/DrownerOfSecrets.java index c40c050e7f3..faadb053900 100644 --- a/Mage.Sets/src/mage/cards/d/DrownerOfSecrets.java +++ b/Mage.Sets/src/mage/cards/d/DrownerOfSecrets.java @@ -6,7 +6,7 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapTargetCost; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -39,7 +39,7 @@ public final class DrownerOfSecrets extends CardImpl { this.toughness = new MageInt(3); // Tap an untapped Merfolk you control: Target player puts the top card of their library into their graveyard. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(1), new TapTargetCost(new TargetControlledPermanent(filter))); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MillCardsTargetEffect(1), new TapTargetCost(new TargetControlledPermanent(filter))); ability.addTarget(new TargetPlayer()); this.addAbility(ability); } @@ -52,4 +52,4 @@ public final class DrownerOfSecrets extends CardImpl { public DrownerOfSecrets copy() { return new DrownerOfSecrets(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/d/DuskmantleGuildmage.java b/Mage.Sets/src/mage/cards/d/DuskmantleGuildmage.java index 19ea4092009..817a00b4832 100644 --- a/Mage.Sets/src/mage/cards/d/DuskmantleGuildmage.java +++ b/Mage.Sets/src/mage/cards/d/DuskmantleGuildmage.java @@ -10,7 +10,7 @@ import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.Effect; import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.LoseLifeTargetEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -20,7 +20,6 @@ import mage.constants.Duration; import mage.constants.Zone; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.game.events.ZoneChangeEvent; import mage.target.TargetPlayer; import mage.target.targetpointer.FixedTarget; @@ -43,7 +42,7 @@ public final class DuskmantleGuildmage extends CardImpl { this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateDelayedTriggeredAbilityEffect(new CardPutIntoOpponentGraveThisTurn()), new ManaCostsImpl<>("{1}{U}{B}"))); // {2}{U}{B}: Target player puts the top two cards of their library into their graveyard. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(2), new ManaCostsImpl<>("{2}{U}{B}")); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MillCardsTargetEffect(2), new ManaCostsImpl<>("{2}{U}{B}")); ability.addTarget(new TargetPlayer()); this.addAbility(ability); } @@ -97,4 +96,4 @@ class CardPutIntoOpponentGraveThisTurn extends DelayedTriggeredAbility { public String getRule() { return "Whenever a card is put into an opponent's graveyard from anywhere this turn, that player loses 1 life"; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/d/DuskmantleHouseOfShadow.java b/Mage.Sets/src/mage/cards/d/DuskmantleHouseOfShadow.java index 0544f2e578d..676be5a1cd0 100644 --- a/Mage.Sets/src/mage/cards/d/DuskmantleHouseOfShadow.java +++ b/Mage.Sets/src/mage/cards/d/DuskmantleHouseOfShadow.java @@ -6,7 +6,7 @@ import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.mana.ColorlessManaAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -26,7 +26,7 @@ public final class DuskmantleHouseOfShadow extends CardImpl { // {tap}: Add {C}. this.addAbility(new ColorlessManaAbility()); // {U}{B}, {tap}: Target player puts the top card of their library into their graveyard. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(1), new ManaCostsImpl<>("{U}{B}")); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MillCardsTargetEffect(1), new ManaCostsImpl<>("{U}{B}")); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetPlayer()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/e/EmbalmersTools.java b/Mage.Sets/src/mage/cards/e/EmbalmersTools.java index 57ea87557fb..ac1c418f387 100644 --- a/Mage.Sets/src/mage/cards/e/EmbalmersTools.java +++ b/Mage.Sets/src/mage/cards/e/EmbalmersTools.java @@ -5,7 +5,7 @@ import mage.abilities.ActivatedAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.common.TapTargetCost; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.effects.common.cost.CostModificationEffectImpl; import mage.cards.Card; import mage.cards.CardImpl; @@ -41,7 +41,7 @@ public final class EmbalmersTools extends CardImpl { this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new EmbalmersToolsEffect())); // Tap an untapped Zombie you control: Target player puts the top card of their library into their graveyard. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(1), new TapTargetCost(new TargetControlledPermanent(filter))); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MillCardsTargetEffect(1), new TapTargetCost(new TargetControlledPermanent(filter))); ability.addTarget(new TargetPlayer()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/e/EnigmaEidolon.java b/Mage.Sets/src/mage/cards/e/EnigmaEidolon.java index 4d1c59ecffa..992566b49ef 100644 --- a/Mage.Sets/src/mage/cards/e/EnigmaEidolon.java +++ b/Mage.Sets/src/mage/cards/e/EnigmaEidolon.java @@ -8,7 +8,7 @@ import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -31,7 +31,7 @@ public final class EnigmaEidolon extends CardImpl { this.toughness = new MageInt(2); // {U}, Sacrifice Enigma Eidolon: Target player puts the top three cards of their library into their graveyard. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(3), new ManaCostsImpl<>("{U}")); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MillCardsTargetEffect(3), new ManaCostsImpl<>("{U}")); ability.addCost(new SacrificeSourceCost()); ability.addTarget(new TargetPlayer()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/e/ExtractorDemon.java b/Mage.Sets/src/mage/cards/e/ExtractorDemon.java index cd90bf2f5bb..fd2d24eef44 100644 --- a/Mage.Sets/src/mage/cards/e/ExtractorDemon.java +++ b/Mage.Sets/src/mage/cards/e/ExtractorDemon.java @@ -4,7 +4,7 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.LeavesBattlefieldAllTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.UnearthAbility; import mage.cards.CardImpl; @@ -40,7 +40,7 @@ public final class ExtractorDemon extends CardImpl { // Whenever another creature leaves the battlefield, you may have target player put the top two cards of their library into their graveyard. Ability ability = new LeavesBattlefieldAllTriggeredAbility( - new PutLibraryIntoGraveTargetEffect(2) + new MillCardsTargetEffect(2) .setText("you may have target player mill two cards"), filter, true ); diff --git a/Mage.Sets/src/mage/cards/g/GeralfsMindcrusher.java b/Mage.Sets/src/mage/cards/g/GeralfsMindcrusher.java index 7ce71f818fb..9fd9135efcd 100644 --- a/Mage.Sets/src/mage/cards/g/GeralfsMindcrusher.java +++ b/Mage.Sets/src/mage/cards/g/GeralfsMindcrusher.java @@ -5,7 +5,7 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.keyword.UndyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -28,7 +28,7 @@ public final class GeralfsMindcrusher extends CardImpl { this.toughness = new MageInt(5); // When Geralf's Mindcrusher enters the battlefield, target player puts the top five cards of their library into their graveyard. - Ability ability = new EntersBattlefieldTriggeredAbility(new PutLibraryIntoGraveTargetEffect(5)); + Ability ability = new EntersBattlefieldTriggeredAbility(new MillCardsTargetEffect(5)); ability.addTarget(new TargetPlayer()); this.addAbility(ability); // Undying diff --git a/Mage.Sets/src/mage/cards/g/GlimpseTheUnthinkable.java b/Mage.Sets/src/mage/cards/g/GlimpseTheUnthinkable.java index 7fd708e7630..5725d11330c 100644 --- a/Mage.Sets/src/mage/cards/g/GlimpseTheUnthinkable.java +++ b/Mage.Sets/src/mage/cards/g/GlimpseTheUnthinkable.java @@ -2,7 +2,7 @@ package mage.cards.g; import java.util.UUID; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -19,7 +19,7 @@ public final class GlimpseTheUnthinkable extends CardImpl { // Target player puts the top ten cards of their library into their graveyard. - this.getSpellAbility().addEffect(new PutLibraryIntoGraveTargetEffect(10)); + this.getSpellAbility().addEffect(new MillCardsTargetEffect(10)); this.getSpellAbility().addTarget(new TargetPlayer()); } diff --git a/Mage.Sets/src/mage/cards/g/GrislySpectacle.java b/Mage.Sets/src/mage/cards/g/GrislySpectacle.java index f30a0ba4203..b5aa875370c 100644 --- a/Mage.Sets/src/mage/cards/g/GrislySpectacle.java +++ b/Mage.Sets/src/mage/cards/g/GrislySpectacle.java @@ -6,7 +6,7 @@ import mage.abilities.Ability; import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -73,7 +73,7 @@ class GrislySpectacleEffect extends OneShotEffect { Player controller = game.getPlayer(creature.getControllerId()); if (controller != null) { int power = creature.getPower().getValue(); - Effect effect = new PutLibraryIntoGraveTargetEffect(power); + Effect effect = new MillCardsTargetEffect(power); effect.setTargetPointer(new FixedTarget(controller.getId())); return effect.apply(game, source); } diff --git a/Mage.Sets/src/mage/cards/h/HairStrungKoto.java b/Mage.Sets/src/mage/cards/h/HairStrungKoto.java index f775610cf6a..15ab48311a3 100644 --- a/Mage.Sets/src/mage/cards/h/HairStrungKoto.java +++ b/Mage.Sets/src/mage/cards/h/HairStrungKoto.java @@ -32,7 +32,7 @@ package mage.cards.h; import java.util.UUID; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapTargetCost; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -61,7 +61,7 @@ public final class HairStrungKoto extends CardImpl { * card of their library into their graveyard. */ SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, - new PutLibraryIntoGraveTargetEffect(1), + new MillCardsTargetEffect(1), new TapTargetCost(new TargetControlledCreaturePermanent(1, 1, filter, false))); ability.addTarget(new TargetPlayer()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/h/HalimarExcavator.java b/Mage.Sets/src/mage/cards/h/HalimarExcavator.java index 5dd7f98f012..b6e27458796 100644 --- a/Mage.Sets/src/mage/cards/h/HalimarExcavator.java +++ b/Mage.Sets/src/mage/cards/h/HalimarExcavator.java @@ -6,7 +6,7 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.AllyEntersBattlefieldTriggeredAbility; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -36,7 +36,7 @@ public final class HalimarExcavator extends CardImpl { this.power = new MageInt(1); this.toughness = new MageInt(3); - Ability ability = new AllyEntersBattlefieldTriggeredAbility(new PutLibraryIntoGraveTargetEffect(new PermanentsOnBattlefieldCount(filter)), false); + Ability ability = new AllyEntersBattlefieldTriggeredAbility(new MillCardsTargetEffect(new PermanentsOnBattlefieldCount(filter)), false); ability.addTarget(new TargetPlayer()); this.addAbility(ability.setAbilityWord(null)); } diff --git a/Mage.Sets/src/mage/cards/h/HedronCrab.java b/Mage.Sets/src/mage/cards/h/HedronCrab.java index 0caee9bd219..fe79207872f 100644 --- a/Mage.Sets/src/mage/cards/h/HedronCrab.java +++ b/Mage.Sets/src/mage/cards/h/HedronCrab.java @@ -4,7 +4,7 @@ package mage.cards.h; import java.util.UUID; import mage.MageInt; import mage.abilities.common.LandfallAbility; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -24,7 +24,7 @@ public final class HedronCrab extends CardImpl { this.power = new MageInt(0); this.toughness = new MageInt(2); // Landfall - Whenever a land enters the battlefield under your control, target player puts the top three cards of their library into their graveyard. - LandfallAbility ability = new LandfallAbility(new PutLibraryIntoGraveTargetEffect(3), false); + LandfallAbility ability = new LandfallAbility(new MillCardsTargetEffect(3), false); ability.addTarget(new TargetPlayer()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/h/HomaridExplorer.java b/Mage.Sets/src/mage/cards/h/HomaridExplorer.java index 6b97572f8b4..7b87dbf9530 100644 --- a/Mage.Sets/src/mage/cards/h/HomaridExplorer.java +++ b/Mage.Sets/src/mage/cards/h/HomaridExplorer.java @@ -4,7 +4,7 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -20,7 +20,7 @@ public final class HomaridExplorer extends CardImpl { toughness = new MageInt(3); // When Homarid Explorer enters the battlefield, target player puts the top four cards of their library into their graveyard. - Ability ability = new EntersBattlefieldTriggeredAbility(new PutLibraryIntoGraveTargetEffect(4)); + Ability ability = new EntersBattlefieldTriggeredAbility(new MillCardsTargetEffect(4)); ability.addTarget(new TargetPlayer()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/h/HorrifyingRevelation.java b/Mage.Sets/src/mage/cards/h/HorrifyingRevelation.java index 2f458a8b601..622186b3499 100644 --- a/Mage.Sets/src/mage/cards/h/HorrifyingRevelation.java +++ b/Mage.Sets/src/mage/cards/h/HorrifyingRevelation.java @@ -2,7 +2,7 @@ package mage.cards.h; import java.util.UUID; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.effects.common.discard.DiscardTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -21,7 +21,7 @@ public final class HorrifyingRevelation extends CardImpl { this.getSpellAbility().addTarget(new TargetPlayer()); this.getSpellAbility().addEffect(new DiscardTargetEffect(1)); - this.getSpellAbility().addEffect(new PutLibraryIntoGraveTargetEffect(1)); + this.getSpellAbility().addEffect(new MillCardsTargetEffect(1)); } private HorrifyingRevelation(final HorrifyingRevelation card) { diff --git a/Mage.Sets/src/mage/cards/i/IcebergCancrix.java b/Mage.Sets/src/mage/cards/i/IcebergCancrix.java index 0387b08d111..da7610aa5c0 100644 --- a/Mage.Sets/src/mage/cards/i/IcebergCancrix.java +++ b/Mage.Sets/src/mage/cards/i/IcebergCancrix.java @@ -3,7 +3,7 @@ package mage.cards.i; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -38,7 +38,7 @@ public final class IcebergCancrix extends CardImpl { // Whenever another snow permanent enters the battlefield under your control, you may have target player put the top two cards of their library into their graveyard. Ability ability = new EntersBattlefieldControlledTriggeredAbility( - Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(2), filter, + Zone.BATTLEFIELD, new MillCardsTargetEffect(2), filter, true, "Whenever another snow permanent enters the battlefield under your control, " + "you may have target player mill two cards." ); diff --git a/Mage.Sets/src/mage/cards/i/IpnuRivulet.java b/Mage.Sets/src/mage/cards/i/IpnuRivulet.java index 0909d66eba2..e7b40fbc366 100644 --- a/Mage.Sets/src/mage/cards/i/IpnuRivulet.java +++ b/Mage.Sets/src/mage/cards/i/IpnuRivulet.java @@ -8,7 +8,7 @@ import mage.abilities.costs.common.PayLifeCost; import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.ColorlessManaAbility; import mage.cards.CardImpl; @@ -46,7 +46,7 @@ public final class IpnuRivulet extends CardImpl { this.addAbility(manaAbility); // {1}{U}, {t}, Sacrifice a Desert: Target player puts the top four cards of their library into their graveyard. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(4), new ManaCostsImpl<>("{1}{U}")); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MillCardsTargetEffect(4), new ManaCostsImpl<>("{1}{U}")); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(1, 1, filter, true))); ability.addTarget(new TargetPlayer()); diff --git a/Mage.Sets/src/mage/cards/j/JaceBeleren.java b/Mage.Sets/src/mage/cards/j/JaceBeleren.java index ae4556de0e8..0cd4760b604 100644 --- a/Mage.Sets/src/mage/cards/j/JaceBeleren.java +++ b/Mage.Sets/src/mage/cards/j/JaceBeleren.java @@ -5,7 +5,7 @@ import java.util.UUID; import mage.abilities.LoyaltyAbility; import mage.abilities.effects.common.DrawCardAllEffect; import mage.abilities.effects.common.DrawCardTargetEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -35,7 +35,7 @@ public final class JaceBeleren extends CardImpl { this.addAbility(ability1); // -10: Target player puts the top twenty cards of their library into their graveyard. - LoyaltyAbility ability2 = new LoyaltyAbility(new PutLibraryIntoGraveTargetEffect(20), -10); + LoyaltyAbility ability2 = new LoyaltyAbility(new MillCardsTargetEffect(20), -10); ability2.addTarget(new TargetPlayer()); this.addAbility(ability2); } diff --git a/Mage.Sets/src/mage/cards/j/JaceMemoryAdept.java b/Mage.Sets/src/mage/cards/j/JaceMemoryAdept.java index 127ad7cd80f..571d3318904 100644 --- a/Mage.Sets/src/mage/cards/j/JaceMemoryAdept.java +++ b/Mage.Sets/src/mage/cards/j/JaceMemoryAdept.java @@ -4,10 +4,9 @@ package mage.cards.j; import java.util.UUID; import mage.abilities.Ability; import mage.abilities.LoyaltyAbility; -import mage.abilities.Mode; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardTargetEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -31,12 +30,12 @@ public final class JaceMemoryAdept extends CardImpl { // +1: Draw a card. Target player puts the top card of their library into their graveyard. LoyaltyAbility ability1 = new LoyaltyAbility(new DrawCardSourceControllerEffect(1), 1); - ability1.addEffect(new PutLibraryIntoGraveTargetEffect(1)); + ability1.addEffect(new MillCardsTargetEffect(1)); ability1.addTarget(new TargetPlayer()); this.addAbility(ability1); // 0: Target player puts the top ten cards of their library into their graveyard. - LoyaltyAbility ability2 = new LoyaltyAbility(new PutLibraryIntoGraveTargetEffect(10), 0); + LoyaltyAbility ability2 = new LoyaltyAbility(new MillCardsTargetEffect(10), 0); ability2.addTarget(new TargetPlayer()); this.addAbility(ability2); diff --git a/Mage.Sets/src/mage/cards/j/JaceWielderOfMysteries.java b/Mage.Sets/src/mage/cards/j/JaceWielderOfMysteries.java index f0abbff5c4a..34194b79b81 100644 --- a/Mage.Sets/src/mage/cards/j/JaceWielderOfMysteries.java +++ b/Mage.Sets/src/mage/cards/j/JaceWielderOfMysteries.java @@ -6,7 +6,7 @@ import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.ReplacementEffectImpl; import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; @@ -33,7 +33,7 @@ public final class JaceWielderOfMysteries extends CardImpl { this.addAbility(new SimpleStaticAbility(new JaceWielderOfMysteriesContinuousEffect())); // +1 Target player puts the top two cards of their library into their graveyard. Draw a card. - Ability ability = new LoyaltyAbility(new PutLibraryIntoGraveTargetEffect(2), 1); + Ability ability = new LoyaltyAbility(new MillCardsTargetEffect(2), 1); ability.addTarget(new TargetPlayer()); ability.addEffect(new DrawCardSourceControllerEffect(1)); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/j/JacesErasure.java b/Mage.Sets/src/mage/cards/j/JacesErasure.java index a9c7d7fd90a..e0188d7c812 100644 --- a/Mage.Sets/src/mage/cards/j/JacesErasure.java +++ b/Mage.Sets/src/mage/cards/j/JacesErasure.java @@ -4,7 +4,7 @@ package mage.cards.j; import java.util.UUID; import mage.abilities.common.DrawCardControllerTriggeredAbility; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -20,7 +20,7 @@ public final class JacesErasure extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{U}"); - DrawCardControllerTriggeredAbility ability = new DrawCardControllerTriggeredAbility(new PutLibraryIntoGraveTargetEffect(1), true); + DrawCardControllerTriggeredAbility ability = new DrawCardControllerTriggeredAbility(new MillCardsTargetEffect(1), true); ability.addTarget(new TargetPlayer()); this.addAbility(ability); } @@ -33,4 +33,4 @@ public final class JacesErasure extends CardImpl { public JacesErasure copy() { return new JacesErasure(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/l/LaviniaAzoriusRenegade.java b/Mage.Sets/src/mage/cards/l/LaviniaAzoriusRenegade.java index 23b9b994000..f7008f900fe 100644 --- a/Mage.Sets/src/mage/cards/l/LaviniaAzoriusRenegade.java +++ b/Mage.Sets/src/mage/cards/l/LaviniaAzoriusRenegade.java @@ -42,7 +42,7 @@ public final class LaviniaAzoriusRenegade extends CardImpl { this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new LaviniaAzoriusRenegadeReplacementEffect())); // Whenever an opponent casts a spell, if no mana was spent to cast it, counter that spell. - this.addAbility(new SpellCastOpponentNoManaSpentTriggeredAbility(new CounterTargetEffect())); + this.addAbility(new SpellCastOpponentNoManaSpentTriggeredAbility(new CounterTargetEffect().setText("counter that spell"))); } private LaviniaAzoriusRenegade(final LaviniaAzoriusRenegade card) { @@ -111,4 +111,4 @@ class LaviniaAzoriusRenegadeReplacementEffect extends ContinuousRuleModifyingEff public LaviniaAzoriusRenegadeReplacementEffect copy() { return new LaviniaAzoriusRenegadeReplacementEffect(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/l/LichLordOfUnx.java b/Mage.Sets/src/mage/cards/l/LichLordOfUnx.java index 36ee8ba72a0..3626084e7eb 100644 --- a/Mage.Sets/src/mage/cards/l/LichLordOfUnx.java +++ b/Mage.Sets/src/mage/cards/l/LichLordOfUnx.java @@ -9,7 +9,7 @@ import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.LoseLifeTargetEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.hint.Hint; import mage.abilities.hint.ValueHint; import mage.cards.CardImpl; @@ -51,7 +51,7 @@ public final class LichLordOfUnx extends CardImpl { .setText("target player loses X life"), new ManaCostsImpl<>("{U}{U}{B}{B}") ); - ability.addEffect(new PutLibraryIntoGraveTargetEffect(xValue) + ability.addEffect(new MillCardsTargetEffect(xValue) .setText("and mills X cards, where X is the number of Zombies you control")); ability.addTarget(new TargetPlayer()); this.addAbility(ability.addHint(hint)); diff --git a/Mage.Sets/src/mage/cards/m/MemorySluice.java b/Mage.Sets/src/mage/cards/m/MemorySluice.java index 13ee4e0952f..b5820c2b319 100644 --- a/Mage.Sets/src/mage/cards/m/MemorySluice.java +++ b/Mage.Sets/src/mage/cards/m/MemorySluice.java @@ -2,7 +2,7 @@ package mage.cards.m; import java.util.UUID; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.keyword.ConspireAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -19,7 +19,7 @@ public final class MemorySluice extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{U/B}"); // Target player puts the top four cards of their library into their graveyard. - this.getSpellAbility().addEffect(new PutLibraryIntoGraveTargetEffect(4)); + this.getSpellAbility().addEffect(new MillCardsTargetEffect(4)); this.getSpellAbility().addTarget(new TargetPlayer()); // Conspire diff --git a/Mage.Sets/src/mage/cards/m/MerfolkMesmerist.java b/Mage.Sets/src/mage/cards/m/MerfolkMesmerist.java index cd4d8599142..83c8f7cbea3 100644 --- a/Mage.Sets/src/mage/cards/m/MerfolkMesmerist.java +++ b/Mage.Sets/src/mage/cards/m/MerfolkMesmerist.java @@ -8,7 +8,7 @@ import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ColoredManaCost; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -29,7 +29,7 @@ public final class MerfolkMesmerist extends CardImpl { this.power = new MageInt(1); this.toughness = new MageInt(2); - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(2), new ColoredManaCost(ColoredManaSymbol.U)); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MillCardsTargetEffect(2), new ColoredManaCost(ColoredManaSymbol.U)); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetPlayer()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/m/MerfolkSecretkeeper.java b/Mage.Sets/src/mage/cards/m/MerfolkSecretkeeper.java index 291c438190b..c767db74dcd 100644 --- a/Mage.Sets/src/mage/cards/m/MerfolkSecretkeeper.java +++ b/Mage.Sets/src/mage/cards/m/MerfolkSecretkeeper.java @@ -1,7 +1,7 @@ package mage.cards.m; import mage.MageInt; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.AdventureCard; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -25,7 +25,7 @@ public final class MerfolkSecretkeeper extends AdventureCard { // Venture Deeper // Target player puts the top four cards of their library into their graveyard. - this.getSpellCard().getSpellAbility().addEffect(new PutLibraryIntoGraveTargetEffect(4)); + this.getSpellCard().getSpellAbility().addEffect(new MillCardsTargetEffect(4)); this.getSpellCard().getSpellAbility().addTarget(new TargetPlayer()); } diff --git a/Mage.Sets/src/mage/cards/m/MerfolkWindrobber.java b/Mage.Sets/src/mage/cards/m/MerfolkWindrobber.java index a54467e218e..09e2cc5a4e3 100644 --- a/Mage.Sets/src/mage/cards/m/MerfolkWindrobber.java +++ b/Mage.Sets/src/mage/cards/m/MerfolkWindrobber.java @@ -9,7 +9,7 @@ import mage.abilities.condition.common.CardsInOpponentGraveyardCondition; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.effects.Effect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.constants.SubType; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; @@ -60,7 +60,7 @@ public final class MerfolkWindrobber extends CardImpl { class MerfolkWindrobberTriggeredAbility extends TriggeredAbilityImpl { public MerfolkWindrobberTriggeredAbility() { - super(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(1)); + super(Zone.BATTLEFIELD, new MillCardsTargetEffect(1)); } public MerfolkWindrobberTriggeredAbility(final MerfolkWindrobberTriggeredAbility ability) { diff --git a/Mage.Sets/src/mage/cards/m/MerrowWitsniper.java b/Mage.Sets/src/mage/cards/m/MerrowWitsniper.java index f360607b714..2dbb307d2d9 100644 --- a/Mage.Sets/src/mage/cards/m/MerrowWitsniper.java +++ b/Mage.Sets/src/mage/cards/m/MerrowWitsniper.java @@ -5,7 +5,7 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -26,7 +26,7 @@ public final class MerrowWitsniper extends CardImpl { this.toughness = new MageInt(1); // When Merrow Witsniper enters the battlefield, target player puts the top card of their library into their graveyard. - Ability ability = new EntersBattlefieldTriggeredAbility(new PutLibraryIntoGraveTargetEffect(1)); + Ability ability = new EntersBattlefieldTriggeredAbility(new MillCardsTargetEffect(1)); ability.addTarget(new TargetPlayer()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/m/Millstone.java b/Mage.Sets/src/mage/cards/m/Millstone.java index 571204e513a..06a4bcd902b 100644 --- a/Mage.Sets/src/mage/cards/m/Millstone.java +++ b/Mage.Sets/src/mage/cards/m/Millstone.java @@ -6,7 +6,7 @@ import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -23,7 +23,7 @@ public final class Millstone extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}"); // {2}, {tap}: Target player puts the top two cards of their library into their graveyard. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(2), new GenericManaCost(2)); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MillCardsTargetEffect(2), new GenericManaCost(2)); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetPlayer()); this.addAbility(ability); @@ -37,4 +37,4 @@ public final class Millstone extends CardImpl { public Millstone copy() { return new Millstone(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/m/MindSculpt.java b/Mage.Sets/src/mage/cards/m/MindSculpt.java index 830299c8959..0f83b404c01 100644 --- a/Mage.Sets/src/mage/cards/m/MindSculpt.java +++ b/Mage.Sets/src/mage/cards/m/MindSculpt.java @@ -2,7 +2,7 @@ package mage.cards.m; import java.util.UUID; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -19,7 +19,7 @@ public final class MindSculpt extends CardImpl { // Target opponent puts the top seven cards of their library into their graveyard. - this.getSpellAbility().addEffect(new PutLibraryIntoGraveTargetEffect(7)); + this.getSpellAbility().addEffect(new MillCardsTargetEffect(7)); this.getSpellAbility().addTarget(new TargetOpponent()); } diff --git a/Mage.Sets/src/mage/cards/m/MindeyeDrake.java b/Mage.Sets/src/mage/cards/m/MindeyeDrake.java index 9560bb25eaf..c68144f0882 100644 --- a/Mage.Sets/src/mage/cards/m/MindeyeDrake.java +++ b/Mage.Sets/src/mage/cards/m/MindeyeDrake.java @@ -5,7 +5,7 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.DiesSourceTriggeredAbility; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -29,7 +29,7 @@ public final class MindeyeDrake extends CardImpl { // Flying this.addAbility(FlyingAbility.getInstance()); // When Mindeye Drake dies, target player puts the top five cards of their library into their graveyard. - Ability ability = new DiesSourceTriggeredAbility(new PutLibraryIntoGraveTargetEffect(5)); + Ability ability = new DiesSourceTriggeredAbility(new MillCardsTargetEffect(5)); ability.addTarget(new TargetPlayer()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/m/MindscourDragon.java b/Mage.Sets/src/mage/cards/m/MindscourDragon.java index 97e2cf4cb5c..a6feb6e135d 100644 --- a/Mage.Sets/src/mage/cards/m/MindscourDragon.java +++ b/Mage.Sets/src/mage/cards/m/MindscourDragon.java @@ -5,7 +5,7 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.DealsDamageToOpponentTriggeredAbility; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -29,7 +29,7 @@ public final class MindscourDragon extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Whenever Mindscour Dragon deals combat damage to an opponent, target player puts the top four cards of their library into their graveyard. - Ability ability = new DealsDamageToOpponentTriggeredAbility(new PutLibraryIntoGraveTargetEffect(4), false, true); + Ability ability = new DealsDamageToOpponentTriggeredAbility(new MillCardsTargetEffect(4), false, true); ability.addTarget(new TargetPlayer()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/m/MinisterOfInquiries.java b/Mage.Sets/src/mage/cards/m/MinisterOfInquiries.java index e700d70b2c8..8eb78cbd358 100644 --- a/Mage.Sets/src/mage/cards/m/MinisterOfInquiries.java +++ b/Mage.Sets/src/mage/cards/m/MinisterOfInquiries.java @@ -8,7 +8,7 @@ import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.PayEnergyCost; import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.effects.common.counter.GetEnergyCountersControllerEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -34,7 +34,7 @@ public final class MinisterOfInquiries extends CardImpl { this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2))); // {T}. Pay {E}: Target player puts the top three cards of their library into their graveyard. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(3), new TapSourceCost()); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MillCardsTargetEffect(3), new TapSourceCost()); ability.addCost(new PayEnergyCost(1)); ability.addTarget(new TargetPlayer()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/n/NavigatorsRuin.java b/Mage.Sets/src/mage/cards/n/NavigatorsRuin.java index 63ae105dcf7..9bea0b72cd5 100644 --- a/Mage.Sets/src/mage/cards/n/NavigatorsRuin.java +++ b/Mage.Sets/src/mage/cards/n/NavigatorsRuin.java @@ -4,7 +4,7 @@ import mage.abilities.Ability; import mage.abilities.common.BeginningOfEndStepTriggeredAbility; import mage.abilities.condition.common.RaidCondition; import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.hint.common.RaidHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -26,7 +26,7 @@ public final class NavigatorsRuin extends CardImpl { // Raid - At the beginning of your end step, if you attacked with a creature this turm, target opponent puts the top four cards of their library into their graveyard. Ability ability = new ConditionalInterveningIfTriggeredAbility(new BeginningOfEndStepTriggeredAbility( - new PutLibraryIntoGraveTargetEffect(4), TargetController.YOU, false), + new MillCardsTargetEffect(4), TargetController.YOU, false), RaidCondition.instance, "At the beginning of your end step, " + "if you attacked this turn, target opponent mills four cards." diff --git a/Mage.Sets/src/mage/cards/n/NemesisOfReason.java b/Mage.Sets/src/mage/cards/n/NemesisOfReason.java index a50f650043c..abf7baaad02 100644 --- a/Mage.Sets/src/mage/cards/n/NemesisOfReason.java +++ b/Mage.Sets/src/mage/cards/n/NemesisOfReason.java @@ -5,7 +5,7 @@ package mage.cards.n; import mage.MageInt; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.Effect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -31,7 +31,7 @@ public final class NemesisOfReason extends CardImpl { this.toughness = new MageInt(7); // Whenever Nemesis of Reason attacks, defending player puts the top ten cards of their library into their graveyard. - this.addAbility(new NemesisOfReasonTriggeredAbility(new PutLibraryIntoGraveTargetEffect(10))); + this.addAbility(new NemesisOfReasonTriggeredAbility(new MillCardsTargetEffect(10))); } private NemesisOfReason(final NemesisOfReason card) { @@ -80,4 +80,4 @@ class NemesisOfReasonTriggeredAbility extends TriggeredAbilityImpl { public String getRule() { return "Whenever {this} attacks, defending player mills ten cards."; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/n/NephaliaDrownyard.java b/Mage.Sets/src/mage/cards/n/NephaliaDrownyard.java index e2ea5566439..51df662a62c 100644 --- a/Mage.Sets/src/mage/cards/n/NephaliaDrownyard.java +++ b/Mage.Sets/src/mage/cards/n/NephaliaDrownyard.java @@ -6,7 +6,7 @@ import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.mana.ColorlessManaAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -26,7 +26,7 @@ public final class NephaliaDrownyard extends CardImpl { this.addAbility(new ColorlessManaAbility()); // {1}{U}{B}, {T}: Target player puts the top three cards of their library into their graveyard. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(3), new ManaCostsImpl<>("{1}{U}{B}")); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MillCardsTargetEffect(3), new ManaCostsImpl<>("{1}{U}{B}")); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetPlayer()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/n/NestedGhoul.java b/Mage.Sets/src/mage/cards/n/NestedGhoul.java index 7eecaa1a7ac..bab9b93d493 100644 --- a/Mage.Sets/src/mage/cards/n/NestedGhoul.java +++ b/Mage.Sets/src/mage/cards/n/NestedGhoul.java @@ -1,24 +1,18 @@ - package mage.cards.n; -import java.util.UUID; import mage.MageInt; -import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.SourceDealsDamageToThisTriggeredAbility; import mage.abilities.effects.common.CreateTokenEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.game.permanent.token.PhyrexianZombieToken; -import mage.game.permanent.token.ZombieToken; + +import java.util.UUID; /** - * - * @author Loki + * @author xenohedron */ public final class NestedGhoul extends CardImpl { @@ -30,7 +24,9 @@ public final class NestedGhoul extends CardImpl { this.power = new MageInt(4); this.toughness = new MageInt(2); - this.addAbility(new NestedGhoulTriggeredAbility()); + + // Whenever a source deals damage to Nested Ghoul, create a 2/2 black Phyrexian Zombie creature token. + this.addAbility(new SourceDealsDamageToThisTriggeredAbility(new CreateTokenEffect(new PhyrexianZombieToken()))); } private NestedGhoul(final NestedGhoul card) { @@ -43,34 +39,3 @@ public final class NestedGhoul extends CardImpl { } } - -class NestedGhoulTriggeredAbility extends TriggeredAbilityImpl { - - NestedGhoulTriggeredAbility() { - super(Zone.BATTLEFIELD, new CreateTokenEffect(new PhyrexianZombieToken())); - } - - NestedGhoulTriggeredAbility(final NestedGhoulTriggeredAbility ability) { - super(ability); - } - - @Override - public NestedGhoulTriggeredAbility copy() { - return new NestedGhoulTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PERMANENT; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - return event.getTargetId().equals(this.sourceId); - } - - @Override - public String getRule() { - return "Whenever a source deals damage to {this}, create a 2/2 black Phyrexian Zombie creature token."; - } -} diff --git a/Mage.Sets/src/mage/cards/p/ParanoidDelusions.java b/Mage.Sets/src/mage/cards/p/ParanoidDelusions.java index f1848782cf3..ef058f2e772 100644 --- a/Mage.Sets/src/mage/cards/p/ParanoidDelusions.java +++ b/Mage.Sets/src/mage/cards/p/ParanoidDelusions.java @@ -3,7 +3,7 @@ package mage.cards.p; import java.util.UUID; import mage.abilities.effects.common.CipherEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -20,7 +20,7 @@ public final class ParanoidDelusions extends CardImpl { // Target player puts the top three cards of their library into their graveyard. - this.getSpellAbility().addEffect(new PutLibraryIntoGraveTargetEffect(3)); + this.getSpellAbility().addEffect(new MillCardsTargetEffect(3)); this.getSpellAbility().addTarget(new TargetPlayer()); // Cipher this.getSpellAbility().addEffect(new CipherEffect()); diff --git a/Mage.Sets/src/mage/cards/p/PersistentPetitioners.java b/Mage.Sets/src/mage/cards/p/PersistentPetitioners.java index 07f4d004a00..1f7a6a117d4 100644 --- a/Mage.Sets/src/mage/cards/p/PersistentPetitioners.java +++ b/Mage.Sets/src/mage/cards/p/PersistentPetitioners.java @@ -7,7 +7,7 @@ import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapTargetCost; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.InfoEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -42,7 +42,7 @@ public final class PersistentPetitioners extends CardImpl { // {1}, {T}: Target player puts the top card of their library into their graveyard. Ability ability = new SimpleActivatedAbility( - new PutLibraryIntoGraveTargetEffect(1), new GenericManaCost(1) + new MillCardsTargetEffect(1), new GenericManaCost(1) ); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetPlayer()); @@ -50,7 +50,7 @@ public final class PersistentPetitioners extends CardImpl { // Tap four untapped Advisors you control: Target player puts the top twelve cards of their library into their graveyard. ability = new SimpleActivatedAbility( - new PutLibraryIntoGraveTargetEffect(12), + new MillCardsTargetEffect(12), new TapTargetCost(new TargetControlledPermanent( 4, 4, filter, true )) diff --git a/Mage.Sets/src/mage/cards/p/PhyrexianObliterator.java b/Mage.Sets/src/mage/cards/p/PhyrexianObliterator.java index e332f99709c..3a487b54cb7 100644 --- a/Mage.Sets/src/mage/cards/p/PhyrexianObliterator.java +++ b/Mage.Sets/src/mage/cards/p/PhyrexianObliterator.java @@ -1,27 +1,20 @@ - package mage.cards.p; -import java.util.UUID; import mage.MageInt; -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.common.SourceDealsDamageToThisTriggeredAbility; +import mage.abilities.dynamicvalue.common.SavedDamageValue; import mage.abilities.effects.common.SacrificeEffect; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.FilterPermanent; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.players.Player; -import mage.target.targetpointer.FixedTarget; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * - * @author Loki + * @author xenohedron */ public final class PhyrexianObliterator extends CardImpl { @@ -37,7 +30,9 @@ public final class PhyrexianObliterator extends CardImpl { this.addAbility(TrampleAbility.getInstance()); // Whenever a source deals damage to Phyrexian Obliterator, that source's controller sacrifices that many permanents. - this.addAbility(new PhyrexianObliteratorTriggeredAbility()); + this.addAbility(new SourceDealsDamageToThisTriggeredAbility( + new SacrificeEffect(StaticFilters.FILTER_PERMANENTS, SavedDamageValue.MANY, "that source's controller") + )); } private PhyrexianObliterator(final PhyrexianObliterator card) { @@ -49,45 +44,3 @@ public final class PhyrexianObliterator extends CardImpl { return new PhyrexianObliterator(this); } } - -class PhyrexianObliteratorTriggeredAbility extends TriggeredAbilityImpl { - - PhyrexianObliteratorTriggeredAbility() { - super(Zone.BATTLEFIELD, new SacrificeEffect(new FilterPermanent(), 0, "")); - } - - PhyrexianObliteratorTriggeredAbility(final PhyrexianObliteratorTriggeredAbility ability) { - super(ability); - } - - @Override - public PhyrexianObliteratorTriggeredAbility copy() { - return new PhyrexianObliteratorTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PERMANENT; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - if (event.getTargetId().equals(this.sourceId)) { - UUID controller = game.getControllerId(event.getSourceId()); - if (controller != null) { - Player player = game.getPlayer(controller); - if (player != null) { - getEffects().get(0).setTargetPointer(new FixedTarget(player.getId())); - ((SacrificeEffect) getEffects().get(0)).setAmount(StaticValue.get(event.getAmount())); - return true; - } - } - } - return false; - } - - @Override - public String getRule() { - return "Whenever a source deals damage to {this}, that source's controller sacrifices that many permanents."; - } -} diff --git a/Mage.Sets/src/mage/cards/p/PilferedPlans.java b/Mage.Sets/src/mage/cards/p/PilferedPlans.java index c3d62f35fb6..26fd113edeb 100644 --- a/Mage.Sets/src/mage/cards/p/PilferedPlans.java +++ b/Mage.Sets/src/mage/cards/p/PilferedPlans.java @@ -3,7 +3,7 @@ package mage.cards.p; import java.util.UUID; import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -20,7 +20,7 @@ public final class PilferedPlans extends CardImpl { // Target player puts the top two cards of their library into their graveyard. Draw two cards. - this.getSpellAbility().addEffect(new PutLibraryIntoGraveTargetEffect(2)); + this.getSpellAbility().addEffect(new MillCardsTargetEffect(2)); this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2)); this.getSpellAbility().addTarget(new TargetPlayer()); diff --git a/Mage.Sets/src/mage/cards/p/PsychicDrain.java b/Mage.Sets/src/mage/cards/p/PsychicDrain.java index fc2ca735faf..2afe59ce15c 100644 --- a/Mage.Sets/src/mage/cards/p/PsychicDrain.java +++ b/Mage.Sets/src/mage/cards/p/PsychicDrain.java @@ -5,7 +5,7 @@ import java.util.UUID; import mage.abilities.dynamicvalue.common.ManacostVariableValue; import mage.abilities.effects.Effect; import mage.abilities.effects.common.GainLifeEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -21,7 +21,7 @@ public final class PsychicDrain extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{U}{B}"); // Target player puts the top X cards of their library into their graveyard and you gain X life. - this.getSpellAbility().addEffect(new PutLibraryIntoGraveTargetEffect(ManacostVariableValue.REGULAR)); + this.getSpellAbility().addEffect(new MillCardsTargetEffect(ManacostVariableValue.REGULAR)); this.getSpellAbility().addTarget(new TargetPlayer()); Effect effect = new GainLifeEffect(ManacostVariableValue.REGULAR); effect.setText("and you gain X life"); diff --git a/Mage.Sets/src/mage/cards/r/RayOfErasure.java b/Mage.Sets/src/mage/cards/r/RayOfErasure.java index 6d33a84a4bd..b99e156bb25 100644 --- a/Mage.Sets/src/mage/cards/r/RayOfErasure.java +++ b/Mage.Sets/src/mage/cards/r/RayOfErasure.java @@ -5,7 +5,7 @@ import java.util.UUID; import mage.abilities.common.delayed.AtTheBeginOfNextUpkeepDelayedTriggeredAbility; import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -22,7 +22,7 @@ public final class RayOfErasure extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{U}"); // Target player puts the top card of their library into their graveyard. - this.getSpellAbility().addEffect(new PutLibraryIntoGraveTargetEffect(1)); + this.getSpellAbility().addEffect(new MillCardsTargetEffect(1)); this.getSpellAbility().addTarget(new TargetPlayer()); // Draw a card at the beginning of the next turn's upkeep. diff --git a/Mage.Sets/src/mage/cards/r/ReaperOfSheoldred.java b/Mage.Sets/src/mage/cards/r/ReaperOfSheoldred.java index 66d96f9741f..4b860bb441a 100644 --- a/Mage.Sets/src/mage/cards/r/ReaperOfSheoldred.java +++ b/Mage.Sets/src/mage/cards/r/ReaperOfSheoldred.java @@ -1,27 +1,19 @@ - package mage.cards.r; -import java.util.UUID; import mage.MageInt; -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.effects.Effect; +import mage.abilities.common.SourceDealsDamageToThisTriggeredAbility; import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.abilities.keyword.InfectAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; import mage.counters.CounterType; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.players.Player; -import mage.target.targetpointer.FixedTarget; + +import java.util.UUID; /** - * - * @author Loki + * @author xenohedron */ public final class ReaperOfSheoldred extends CardImpl { @@ -37,7 +29,10 @@ public final class ReaperOfSheoldred extends CardImpl { this.addAbility(InfectAbility.getInstance()); // Whenever a source deals damage to Reaper of Sheoldred, that source's controller gets a poison counter. - this.addAbility(new ReaperOfSheoldredTriggeredAbility()); + this.addAbility(new SourceDealsDamageToThisTriggeredAbility( + new AddCountersTargetEffect(CounterType.POISON.createInstance()) + .setText("that source's controller gets a poison counter") + )); } private ReaperOfSheoldred(final ReaperOfSheoldred card) { @@ -49,46 +44,3 @@ public final class ReaperOfSheoldred extends CardImpl { return new ReaperOfSheoldred(this); } } - -class ReaperOfSheoldredTriggeredAbility extends TriggeredAbilityImpl { - - ReaperOfSheoldredTriggeredAbility() { - super(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.POISON.createInstance())); - } - - ReaperOfSheoldredTriggeredAbility(final ReaperOfSheoldredTriggeredAbility ability) { - super(ability); - } - - @Override - public ReaperOfSheoldredTriggeredAbility copy() { - return new ReaperOfSheoldredTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PERMANENT; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - if (event.getTargetId().equals(this.getSourceId())) { - UUID controller = game.getControllerId(event.getSourceId()); - if (controller != null) { - Player player = game.getPlayer(controller); - if (player != null) { - for (Effect effect : this.getEffects()) { - effect.setTargetPointer(new FixedTarget(player.getId())); - } - return true; - } - } - } - return false; - } - - @Override - public String getRule() { - return "Whenever a source deals damage to {this}, that source's controller gets a poison counter."; - } -} diff --git a/Mage.Sets/src/mage/cards/r/ReefPirates.java b/Mage.Sets/src/mage/cards/r/ReefPirates.java index cae4eeaff3d..97409ecaf97 100644 --- a/Mage.Sets/src/mage/cards/r/ReefPirates.java +++ b/Mage.Sets/src/mage/cards/r/ReefPirates.java @@ -5,7 +5,7 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.common.DealsDamageToAPlayerTriggeredAbility; import mage.abilities.effects.Effect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -25,7 +25,7 @@ public final class ReefPirates extends CardImpl { this.toughness = new MageInt(2); // Whenever Reef Pirates deals damage to an opponent, that player puts the top card of their library into their graveyard. - Effect effect = new PutLibraryIntoGraveTargetEffect(1); + Effect effect = new MillCardsTargetEffect(1); effect.setText("that player mills a card"); this.addAbility(new DealsDamageToAPlayerTriggeredAbility(effect, false, true)); } diff --git a/Mage.Sets/src/mage/cards/r/RelicGolem.java b/Mage.Sets/src/mage/cards/r/RelicGolem.java index 39768ed9081..9237718d221 100644 --- a/Mage.Sets/src/mage/cards/r/RelicGolem.java +++ b/Mage.Sets/src/mage/cards/r/RelicGolem.java @@ -7,7 +7,7 @@ import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.common.CardsInOpponentGraveyardCondition; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.effects.common.combat.CantAttackBlockUnlessConditionSourceEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -35,7 +35,7 @@ public final class RelicGolem extends CardImpl { ).addHint(CardsInOpponentGraveyardCondition.EIGHT.getHint())); // {2}, {T}: Target player mills two cards. - Ability ability = new SimpleActivatedAbility(new PutLibraryIntoGraveTargetEffect(2), new GenericManaCost(2)); + Ability ability = new SimpleActivatedAbility(new MillCardsTargetEffect(2), new GenericManaCost(2)); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetPlayer()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/r/ReturnedCentaur.java b/Mage.Sets/src/mage/cards/r/ReturnedCentaur.java index 9b71697d7ca..d239aa04b99 100644 --- a/Mage.Sets/src/mage/cards/r/ReturnedCentaur.java +++ b/Mage.Sets/src/mage/cards/r/ReturnedCentaur.java @@ -5,7 +5,7 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -27,7 +27,7 @@ public final class ReturnedCentaur extends CardImpl { this.toughness = new MageInt(4); // When Returned Centaur enters the battlefield, target player puts the top four cards of their library into their graveyard. - Ability ability = new EntersBattlefieldTriggeredAbility(new PutLibraryIntoGraveTargetEffect(4)); + Ability ability = new EntersBattlefieldTriggeredAbility(new MillCardsTargetEffect(4)); ability.addTarget(new TargetPlayer()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/r/RotcrownGhoul.java b/Mage.Sets/src/mage/cards/r/RotcrownGhoul.java index 938b29400d2..e96f03b0d30 100644 --- a/Mage.Sets/src/mage/cards/r/RotcrownGhoul.java +++ b/Mage.Sets/src/mage/cards/r/RotcrownGhoul.java @@ -5,7 +5,7 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.DiesSourceTriggeredAbility; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -25,7 +25,7 @@ public final class RotcrownGhoul extends CardImpl { this.toughness = new MageInt(3); // When Rotcrown Ghoul dies, target player puts the top five cards of their library into their graveyard. - Ability ability = new DiesSourceTriggeredAbility(new PutLibraryIntoGraveTargetEffect(5)); + Ability ability = new DiesSourceTriggeredAbility(new MillCardsTargetEffect(5)); ability.addTarget(new TargetPlayer()); this.addAbility(ability); } @@ -38,4 +38,4 @@ public final class RotcrownGhoul extends CardImpl { public RotcrownGhoul copy() { return new RotcrownGhoul(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/s/SageOfMysteries.java b/Mage.Sets/src/mage/cards/s/SageOfMysteries.java index 2aa06f987c8..e6665dd441e 100644 --- a/Mage.Sets/src/mage/cards/s/SageOfMysteries.java +++ b/Mage.Sets/src/mage/cards/s/SageOfMysteries.java @@ -3,7 +3,7 @@ package mage.cards.s; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.abilityword.ConstellationAbility; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -27,7 +27,7 @@ public final class SageOfMysteries extends CardImpl { // Constellation — Whenever an enchantment enters the battlefield under your control, target player puts the top two cards of their library into their graveyard. Ability ability = new ConstellationAbility( - new PutLibraryIntoGraveTargetEffect(2), false, false + new MillCardsTargetEffect(2), false, false ); ability.addTarget(new TargetPlayer()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/s/SagesRowDenizen.java b/Mage.Sets/src/mage/cards/s/SagesRowDenizen.java index 61a9c84cc97..513c462ce07 100644 --- a/Mage.Sets/src/mage/cards/s/SagesRowDenizen.java +++ b/Mage.Sets/src/mage/cards/s/SagesRowDenizen.java @@ -5,7 +5,7 @@ import mage.MageInt; import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -38,7 +38,7 @@ public final class SagesRowDenizen extends CardImpl { this.toughness = new MageInt(3); // Whenever another blue creature enters the battlefield under your control, target player puts the top two cards of their library into their graveyard. - Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(2), filter, false, null, true); + Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new MillCardsTargetEffect(2), filter, false, null, true); ability.addTarget(new TargetPlayer()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SandsOfDelirium.java b/Mage.Sets/src/mage/cards/s/SandsOfDelirium.java index e94d9945bab..9131b491a37 100644 --- a/Mage.Sets/src/mage/cards/s/SandsOfDelirium.java +++ b/Mage.Sets/src/mage/cards/s/SandsOfDelirium.java @@ -6,7 +6,7 @@ import mage.abilities.costs.VariableCostType; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.VariableManaCost; import mage.abilities.dynamicvalue.common.ManacostVariableValue; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -24,7 +24,7 @@ public final class SandsOfDelirium extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); // {X}, {tap}: Target player puts the top X cards of their library into their graveyard. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(ManacostVariableValue.REGULAR), new VariableManaCost(VariableCostType.NORMAL)); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MillCardsTargetEffect(ManacostVariableValue.REGULAR), new VariableManaCost(VariableCostType.NORMAL)); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetPlayer()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/s/ScreamingShield.java b/Mage.Sets/src/mage/cards/s/ScreamingShield.java index 0e37473c597..0156022875c 100644 --- a/Mage.Sets/src/mage/cards/s/ScreamingShield.java +++ b/Mage.Sets/src/mage/cards/s/ScreamingShield.java @@ -5,7 +5,7 @@ import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.effects.common.continuous.BoostEquippedEffect; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; import mage.abilities.keyword.EquipAbility; @@ -30,7 +30,7 @@ public final class ScreamingShield extends CardImpl { // Equipped creature gets +0/+3 and has "{2}, {T}: Target player puts the top three cards of their library into their graveyard." Ability toAdd = new SimpleActivatedAbility( - new PutLibraryIntoGraveTargetEffect(3), new GenericManaCost(2) + new MillCardsTargetEffect(3), new GenericManaCost(2) ); toAdd.addCost(new TapSourceCost()); toAdd.addTarget(new TargetPlayer()); diff --git a/Mage.Sets/src/mage/cards/s/ScreechingSilcaw.java b/Mage.Sets/src/mage/cards/s/ScreechingSilcaw.java index 600768cfb46..a65526d9ab0 100644 --- a/Mage.Sets/src/mage/cards/s/ScreechingSilcaw.java +++ b/Mage.Sets/src/mage/cards/s/ScreechingSilcaw.java @@ -5,7 +5,7 @@ import mage.abilities.TriggeredAbility; import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; import mage.abilities.condition.common.MetalcraftCondition; import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.hint.common.MetalcraftHint; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; @@ -33,7 +33,7 @@ public final class ScreechingSilcaw extends CardImpl { //"Metalcraft — Whenever Screeching Silcaw deals combat damage to a player, if you control three or more artifacts, that player puts the top four cards of their library into their graveyard. TriggeredAbility conditional = new ConditionalInterveningIfTriggeredAbility( new DealsCombatDamageToAPlayerTriggeredAbility( - new PutLibraryIntoGraveTargetEffect(4), false, true + new MillCardsTargetEffect(4), false, true ), MetalcraftCondition.instance, "Whenever {this} " + "deals combat damage to a player, if you control three or more artifacts, that player mills four cards." ); diff --git a/Mage.Sets/src/mage/cards/s/ScreechingSliver.java b/Mage.Sets/src/mage/cards/s/ScreechingSliver.java index 615966f00b7..9839b851990 100644 --- a/Mage.Sets/src/mage/cards/s/ScreechingSliver.java +++ b/Mage.Sets/src/mage/cards/s/ScreechingSliver.java @@ -6,7 +6,7 @@ import mage.MageInt; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityAllEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -32,7 +32,7 @@ public final class ScreechingSliver extends CardImpl { this.toughness = new MageInt(1); // All Slivers have "{T}: Target player puts the top card of their library into their graveyard." - SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(1), new TapSourceCost()); + SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MillCardsTargetEffect(1), new TapSourceCost()); ability.addTarget(new TargetPlayer()); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, diff --git a/Mage.Sets/src/mage/cards/s/SeerOfTheLastTomorrow.java b/Mage.Sets/src/mage/cards/s/SeerOfTheLastTomorrow.java index 32136cf2ebf..28894657da5 100644 --- a/Mage.Sets/src/mage/cards/s/SeerOfTheLastTomorrow.java +++ b/Mage.Sets/src/mage/cards/s/SeerOfTheLastTomorrow.java @@ -8,7 +8,7 @@ import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.DiscardCardCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -31,7 +31,7 @@ public final class SeerOfTheLastTomorrow extends CardImpl { this.toughness = new MageInt(4); // {U}, {T}, Discard a card: Target player puts the top three cards of their library into their graveyard. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(3), new ManaCostsImpl<>("{U}")); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MillCardsTargetEffect(3), new ManaCostsImpl<>("{U}")); ability.addCost(new TapSourceCost()); ability.addCost(new DiscardCardCost()); ability.addTarget(new TargetPlayer()); diff --git a/Mage.Sets/src/mage/cards/s/SelhoffOccultist.java b/Mage.Sets/src/mage/cards/s/SelhoffOccultist.java index e50328d26e4..a0597f8b60f 100644 --- a/Mage.Sets/src/mage/cards/s/SelhoffOccultist.java +++ b/Mage.Sets/src/mage/cards/s/SelhoffOccultist.java @@ -5,7 +5,7 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.DiesThisOrAnotherCreatureTriggeredAbility; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -27,7 +27,7 @@ public final class SelhoffOccultist extends CardImpl { this.toughness = new MageInt(3); // Whenever Selhoff Occultist or another creature dies, target player puts the top card of their library into their graveyard. - Ability ability = new DiesThisOrAnotherCreatureTriggeredAbility(new PutLibraryIntoGraveTargetEffect(1), false); + Ability ability = new DiesThisOrAnotherCreatureTriggeredAbility(new MillCardsTargetEffect(1), false); ability.addTarget(new TargetPlayer()); this.addAbility(ability); } @@ -40,4 +40,4 @@ public final class SelhoffOccultist extends CardImpl { public SelhoffOccultist copy() { return new SelhoffOccultist(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/s/ShadowStinger.java b/Mage.Sets/src/mage/cards/s/ShadowStinger.java index a3b66c6d661..14f796d260c 100644 --- a/Mage.Sets/src/mage/cards/s/ShadowStinger.java +++ b/Mage.Sets/src/mage/cards/s/ShadowStinger.java @@ -5,7 +5,7 @@ import mage.abilities.TriggeredAbilityImpl; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapTargetCost; import mage.abilities.effects.Effect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.keyword.DeathtouchAbility; import mage.cards.CardImpl; @@ -68,7 +68,7 @@ public final class ShadowStinger extends CardImpl { class ShadowStingerTriggeredAbility extends TriggeredAbilityImpl { ShadowStingerTriggeredAbility() { - super(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(3)); + super(Zone.BATTLEFIELD, new MillCardsTargetEffect(3)); } private ShadowStingerTriggeredAbility(final ShadowStingerTriggeredAbility ability) { diff --git a/Mage.Sets/src/mage/cards/s/Shriekgeist.java b/Mage.Sets/src/mage/cards/s/Shriekgeist.java index 32ebd3fb502..ba117dd83fe 100644 --- a/Mage.Sets/src/mage/cards/s/Shriekgeist.java +++ b/Mage.Sets/src/mage/cards/s/Shriekgeist.java @@ -5,7 +5,7 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.Effect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -15,7 +15,6 @@ import mage.constants.Zone; import mage.game.Game; import mage.game.events.DamagedPlayerEvent; import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.target.targetpointer.FixedTarget; /** @@ -49,7 +48,7 @@ public final class Shriekgeist extends CardImpl { class ShriekgeistTriggeredAbility extends TriggeredAbilityImpl { public ShriekgeistTriggeredAbility() { - super(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(2)); + super(Zone.BATTLEFIELD, new MillCardsTargetEffect(2)); } public ShriekgeistTriggeredAbility(final ShriekgeistTriggeredAbility ability) { diff --git a/Mage.Sets/src/mage/cards/s/Shriekhorn.java b/Mage.Sets/src/mage/cards/s/Shriekhorn.java index 7a23d3a052a..b098369f1b4 100644 --- a/Mage.Sets/src/mage/cards/s/Shriekhorn.java +++ b/Mage.Sets/src/mage/cards/s/Shriekhorn.java @@ -5,7 +5,7 @@ import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.RemoveCountersSourceCost; import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -29,7 +29,7 @@ public final class Shriekhorn extends CardImpl { ), "with three charge counters on it" )); - Ability ability = new SimpleActivatedAbility(new PutLibraryIntoGraveTargetEffect(2), new TapSourceCost()); + Ability ability = new SimpleActivatedAbility(new MillCardsTargetEffect(2), new TapSourceCost()); ability.addCost(new RemoveCountersSourceCost(CounterType.CHARGE.createInstance())); ability.addTarget(new TargetPlayer()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/s/SoratamiMindsweeper.java b/Mage.Sets/src/mage/cards/s/SoratamiMindsweeper.java index d290eabe9aa..5d05386b39d 100644 --- a/Mage.Sets/src/mage/cards/s/SoratamiMindsweeper.java +++ b/Mage.Sets/src/mage/cards/s/SoratamiMindsweeper.java @@ -7,7 +7,7 @@ import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.ReturnToHandChosenControlledPermanentCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -38,7 +38,7 @@ public final class SoratamiMindsweeper extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // {2}, Return a land you control to its owner's hand: Target player puts the top two cards of their library into their graveyard. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,new PutLibraryIntoGraveTargetEffect(2), new ManaCostsImpl<>("{2}")); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,new MillCardsTargetEffect(2), new ManaCostsImpl<>("{2}")); ability.addTarget(new TargetPlayer()); ability.addCost(new ReturnToHandChosenControlledPermanentCost(new TargetControlledPermanent(filter))); this.addAbility(ability); @@ -53,5 +53,3 @@ public final class SoratamiMindsweeper extends CardImpl { return new SoratamiMindsweeper(this); } } - - diff --git a/Mage.Sets/src/mage/cards/s/StartledAwake.java b/Mage.Sets/src/mage/cards/s/StartledAwake.java index d2709bba456..91b981fec30 100644 --- a/Mage.Sets/src/mage/cards/s/StartledAwake.java +++ b/Mage.Sets/src/mage/cards/s/StartledAwake.java @@ -5,7 +5,7 @@ import mage.abilities.Ability; import mage.abilities.common.ActivateAsSorceryActivatedAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.keyword.TransformAbility; import mage.cards.Card; import mage.cards.CardImpl; @@ -31,7 +31,7 @@ public final class StartledAwake extends CardImpl { // Target opponent puts the top thirteen cards of their library into their graveyard. this.getSpellAbility().addTarget(new TargetOpponent()); - this.getSpellAbility().addEffect(new PutLibraryIntoGraveTargetEffect(13)); + this.getSpellAbility().addEffect(new MillCardsTargetEffect(13)); // {3}{U}{U}: Put Startled Awake from your graveyard onto the battlefield transformed. Activate this ability only any time you could cast a sorcery. this.addAbility(new TransformAbility()); diff --git a/Mage.Sets/src/mage/cards/s/SternMentor.java b/Mage.Sets/src/mage/cards/s/SternMentor.java index 2945ee43172..44d850d5eb7 100644 --- a/Mage.Sets/src/mage/cards/s/SternMentor.java +++ b/Mage.Sets/src/mage/cards/s/SternMentor.java @@ -7,7 +7,7 @@ import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityPairedEffect; import mage.abilities.keyword.SoulbondAbility; import mage.cards.CardImpl; @@ -37,7 +37,7 @@ public final class SternMentor extends CardImpl { this.addAbility(new SoulbondAbility()); // As long as Stern Mentor is paired with another creature, each of those creatures has "{T}: Target player puts the top two cards of their library into their graveyard." - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(2), new TapSourceCost()); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MillCardsTargetEffect(2), new TapSourceCost()); ability.addTarget(new TargetPlayer()); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityPairedEffect(ability, ruleText))); } diff --git a/Mage.Sets/src/mage/cards/s/SwordOfBodyAndMind.java b/Mage.Sets/src/mage/cards/s/SwordOfBodyAndMind.java index e8f28e56487..528bc95f8fd 100644 --- a/Mage.Sets/src/mage/cards/s/SwordOfBodyAndMind.java +++ b/Mage.Sets/src/mage/cards/s/SwordOfBodyAndMind.java @@ -6,7 +6,7 @@ import mage.abilities.TriggeredAbilityImpl; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.effects.common.continuous.BoostEquippedEffect; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; import mage.abilities.keyword.EquipAbility; @@ -60,7 +60,7 @@ class SwordOfBodyAndMindAbility extends TriggeredAbilityImpl { public SwordOfBodyAndMindAbility() { super(Zone.BATTLEFIELD, new CreateTokenEffect(new WolfToken())); - this.addEffect(new PutLibraryIntoGraveTargetEffect(10)); + this.addEffect(new MillCardsTargetEffect(10)); } public SwordOfBodyAndMindAbility(final SwordOfBodyAndMindAbility ability) { diff --git a/Mage.Sets/src/mage/cards/t/TeferisTutelage.java b/Mage.Sets/src/mage/cards/t/TeferisTutelage.java index 1b31489e790..130c6033a23 100644 --- a/Mage.Sets/src/mage/cards/t/TeferisTutelage.java +++ b/Mage.Sets/src/mage/cards/t/TeferisTutelage.java @@ -4,7 +4,7 @@ import mage.abilities.Ability; import mage.abilities.common.DrawCardControllerTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.DrawDiscardControllerEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -24,7 +24,7 @@ public final class TeferisTutelage extends CardImpl { this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawDiscardControllerEffect(1, 1))); // Whenever you draw a card, target opponent mills two cards. - Ability ability = new DrawCardControllerTriggeredAbility(new PutLibraryIntoGraveTargetEffect(2), false); + Ability ability = new DrawCardControllerTriggeredAbility(new MillCardsTargetEffect(2), false); ability.addTarget(new TargetOpponent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/t/ThassasBounty.java b/Mage.Sets/src/mage/cards/t/ThassasBounty.java index dad5863fb97..2e48c308b38 100644 --- a/Mage.Sets/src/mage/cards/t/ThassasBounty.java +++ b/Mage.Sets/src/mage/cards/t/ThassasBounty.java @@ -3,7 +3,7 @@ package mage.cards.t; import java.util.UUID; import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -21,7 +21,7 @@ public final class ThassasBounty extends CardImpl { // Draw three cards. Target player puts the top three cards of their library into their graveyard. this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(3)); - this.getSpellAbility().addEffect(new PutLibraryIntoGraveTargetEffect(3)); + this.getSpellAbility().addEffect(new MillCardsTargetEffect(3)); this.getSpellAbility().addTarget(new TargetPlayer()); } diff --git a/Mage.Sets/src/mage/cards/t/ThoughtScour.java b/Mage.Sets/src/mage/cards/t/ThoughtScour.java index cb26bf8baaf..c67088843cc 100644 --- a/Mage.Sets/src/mage/cards/t/ThoughtScour.java +++ b/Mage.Sets/src/mage/cards/t/ThoughtScour.java @@ -1,7 +1,7 @@ package mage.cards.t; import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -19,7 +19,7 @@ public final class ThoughtScour extends CardImpl { // Target player puts the top two cards of their library into their graveyard. this.getSpellAbility().addTarget(new TargetPlayer()); - this.getSpellAbility().addEffect(new PutLibraryIntoGraveTargetEffect(2)); + this.getSpellAbility().addEffect(new MillCardsTargetEffect(2)); // Draw a card. this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
")); diff --git a/Mage.Sets/src/mage/cards/t/TomeScour.java b/Mage.Sets/src/mage/cards/t/TomeScour.java index dd0beacd036..cccc869c0a8 100644 --- a/Mage.Sets/src/mage/cards/t/TomeScour.java +++ b/Mage.Sets/src/mage/cards/t/TomeScour.java @@ -3,7 +3,7 @@ package mage.cards.t; import java.util.UUID; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -19,7 +19,7 @@ public final class TomeScour extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{U}"); this.getSpellAbility().addTarget(new TargetPlayer()); - this.getSpellAbility().addEffect(new PutLibraryIntoGraveTargetEffect(5)); + this.getSpellAbility().addEffect(new MillCardsTargetEffect(5)); } private TomeScour(final TomeScour card) { diff --git a/Mage.Sets/src/mage/cards/t/TowerOfMurmurs.java b/Mage.Sets/src/mage/cards/t/TowerOfMurmurs.java index ea9b4f66b7e..98d15aff448 100644 --- a/Mage.Sets/src/mage/cards/t/TowerOfMurmurs.java +++ b/Mage.Sets/src/mage/cards/t/TowerOfMurmurs.java @@ -7,7 +7,7 @@ import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -22,7 +22,7 @@ public final class TowerOfMurmurs extends CardImpl { public TowerOfMurmurs (UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{4}"); - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(8), new GenericManaCost(8)); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MillCardsTargetEffect(8), new GenericManaCost(8)); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetPlayer()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/u/UrzaAcademyHeadmaster.java b/Mage.Sets/src/mage/cards/u/UrzaAcademyHeadmaster.java index d474f4ffcf1..ca085e00e77 100644 --- a/Mage.Sets/src/mage/cards/u/UrzaAcademyHeadmaster.java +++ b/Mage.Sets/src/mage/cards/u/UrzaAcademyHeadmaster.java @@ -268,7 +268,7 @@ class UrzaAcademyHeadmasterRandomEffect extends OneShotEffect { break; case 8: // JACE MEMORY ADEPT 2 sb.append("Target player mills ten cards."); - effects.add(new PutLibraryIntoGraveTargetEffect(10)); + effects.add(new MillCardsTargetEffect(10)); target = new TargetPlayer(); break; case 9: // JACE ARCHITECT OF THOUGHT 2 diff --git a/Mage.Sets/src/mage/cards/v/VedalkenEntrancer.java b/Mage.Sets/src/mage/cards/v/VedalkenEntrancer.java index 4bfc91040b9..6291ad42e55 100644 --- a/Mage.Sets/src/mage/cards/v/VedalkenEntrancer.java +++ b/Mage.Sets/src/mage/cards/v/VedalkenEntrancer.java @@ -7,7 +7,7 @@ import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ColoredManaCost; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -31,7 +31,7 @@ public final class VedalkenEntrancer extends CardImpl { this.toughness = new MageInt(4); // {U}, {tap}: Target player puts the top two cards of their library into their graveyard. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(2), new ColoredManaCost(ColoredManaSymbol.U)); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MillCardsTargetEffect(2), new ColoredManaCost(ColoredManaSymbol.U)); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetPlayer()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/v/VisionCharm.java b/Mage.Sets/src/mage/cards/v/VisionCharm.java index fd572acead1..93b127798c8 100644 --- a/Mage.Sets/src/mage/cards/v/VisionCharm.java +++ b/Mage.Sets/src/mage/cards/v/VisionCharm.java @@ -5,7 +5,7 @@ import mage.abilities.Ability; import mage.abilities.Mode; import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.common.PhaseOutTargetEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.mana.*; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -33,7 +33,7 @@ public final class VisionCharm extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{U}"); // Choose one - Target player puts the top four cards of their library into their graveyard; - this.getSpellAbility().addEffect(new PutLibraryIntoGraveTargetEffect(4)); + this.getSpellAbility().addEffect(new MillCardsTargetEffect(4)); this.getSpellAbility().addTarget(new TargetPlayer()); // or choose a land type and a basic land type. Each land of the first chosen type becomes the second chosen type until end of turn; diff --git a/Mage.Sets/src/mage/cards/w/WallOfLostThoughts.java b/Mage.Sets/src/mage/cards/w/WallOfLostThoughts.java index 94f2236dd2c..d5a1333bbf9 100644 --- a/Mage.Sets/src/mage/cards/w/WallOfLostThoughts.java +++ b/Mage.Sets/src/mage/cards/w/WallOfLostThoughts.java @@ -3,7 +3,7 @@ package mage.cards.w; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.keyword.DefenderAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -29,7 +29,7 @@ public final class WallOfLostThoughts extends CardImpl { this.addAbility(DefenderAbility.getInstance()); // When Wall of Lost Thoughts enters the battlefield, target player puts the top four cards of their library into their graveyard. - Ability ability = new EntersBattlefieldTriggeredAbility(new PutLibraryIntoGraveTargetEffect(4)); + Ability ability = new EntersBattlefieldTriggeredAbility(new MillCardsTargetEffect(4)); ability.addTarget(new TargetPlayer()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/w/WeightOfMemory.java b/Mage.Sets/src/mage/cards/w/WeightOfMemory.java index 736f3188e0b..0be1cccbf84 100644 --- a/Mage.Sets/src/mage/cards/w/WeightOfMemory.java +++ b/Mage.Sets/src/mage/cards/w/WeightOfMemory.java @@ -2,7 +2,7 @@ package mage.cards.w; import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -23,7 +23,7 @@ public final class WeightOfMemory extends CardImpl { this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(3)); // Target player puts the top three cards of their library into their graveyard. this.getSpellAbility().addTarget(new TargetPlayer()); - this.getSpellAbility().addEffect(new PutLibraryIntoGraveTargetEffect(3)); + this.getSpellAbility().addEffect(new MillCardsTargetEffect(3)); } private WeightOfMemory(final WeightOfMemory card) { diff --git a/Mage.Sets/src/mage/cards/w/Whetwheel.java b/Mage.Sets/src/mage/cards/w/Whetwheel.java index b4c1f72aa3c..22d5c0ec047 100644 --- a/Mage.Sets/src/mage/cards/w/Whetwheel.java +++ b/Mage.Sets/src/mage/cards/w/Whetwheel.java @@ -7,7 +7,7 @@ import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.dynamicvalue.common.ManacostVariableValue; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.abilities.keyword.MorphAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -25,7 +25,7 @@ public final class Whetwheel extends CardImpl { super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{4}"); // {X}{X}, {tap}: Target player puts the top X cards of their library into their graveyard. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect( + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MillCardsTargetEffect( ManacostVariableValue.REGULAR), new ManaCostsImpl<>("{X}{X}")); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetPlayer()); diff --git a/Mage.Sets/src/mage/cards/w/WorryBeads.java b/Mage.Sets/src/mage/cards/w/WorryBeads.java index 6f206e45f4c..370e688e90c 100644 --- a/Mage.Sets/src/mage/cards/w/WorryBeads.java +++ b/Mage.Sets/src/mage/cards/w/WorryBeads.java @@ -1,7 +1,7 @@ package mage.cards.w; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; +import mage.abilities.effects.common.MillCardsTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -20,7 +20,7 @@ public final class WorryBeads extends CardImpl { // At the beginning of each player's upkeep, that player puts the top card of their library into their graveyard. this.addAbility(new BeginningOfUpkeepTriggeredAbility( - Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(1).setText("that player mills a card"), + Zone.BATTLEFIELD, new MillCardsTargetEffect(1).setText("that player mills a card"), TargetController.ANY, false, true )); } diff --git a/Mage/src/main/java/mage/abilities/common/SourceDealsDamageToThisTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/SourceDealsDamageToThisTriggeredAbility.java new file mode 100644 index 00000000000..a085bb30462 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/common/SourceDealsDamageToThisTriggeredAbility.java @@ -0,0 +1,55 @@ +package mage.abilities.common; + +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.Effect; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.players.Player; +import mage.target.targetpointer.FixedTarget; + +/** + * @author xenohedron + */ +public class SourceDealsDamageToThisTriggeredAbility extends TriggeredAbilityImpl { + + public SourceDealsDamageToThisTriggeredAbility(Effect effect) { + this(effect, false); + } + + public SourceDealsDamageToThisTriggeredAbility(Effect effect, boolean optional) { + super(Zone.BATTLEFIELD, effect, optional); + setTriggerPhrase("Whenever a source deals damage to {this}, "); + } + + public SourceDealsDamageToThisTriggeredAbility(final SourceDealsDamageToThisTriggeredAbility ability) { + super(ability); + } + + @Override + public SourceDealsDamageToThisTriggeredAbility copy() { + return new SourceDealsDamageToThisTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DAMAGED_PERMANENT; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (!event.getTargetId().equals(this.sourceId)) { + return false; + } + int damageAmount = event.getAmount(); + if (damageAmount < 1) { + return false; + } + this.getEffects().setValue("damage", damageAmount); + Player sourceController = game.getPlayer(game.getControllerId(event.getSourceId())); + if (sourceController != null) { + getEffects().setTargetPointer(new FixedTarget(sourceController.getId())); + } + return true; + } +} diff --git a/Mage/src/main/java/mage/abilities/costs/common/RevealDragonFromHandCost.java b/Mage/src/main/java/mage/abilities/costs/common/RevealDragonFromHandCost.java index 08d7782fab1..87c61404315 100644 --- a/Mage/src/main/java/mage/abilities/costs/common/RevealDragonFromHandCost.java +++ b/Mage/src/main/java/mage/abilities/costs/common/RevealDragonFromHandCost.java @@ -27,6 +27,7 @@ public class RevealDragonFromHandCost extends RevealTargetFromHandCost { public RevealDragonFromHandCost() { super(new TargetCardInHand(0, 1, filter)); + this.text = "you may reveal a Dragon card from your hand"; } private RevealDragonFromHandCost(final RevealDragonFromHandCost cost) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/MillCardsTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/MillCardsTargetEffect.java index 5a25cdf649e..7ce8cb33db1 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/MillCardsTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/MillCardsTargetEffect.java @@ -59,11 +59,17 @@ public class MillCardsTargetEffect extends OneShotEffect { sb.append("that player"); } sb.append(" mills "); - if (numberCards.toString().equals("1")) { - sb.append("a card"); + String message = numberCards.getMessage(); + if (message.isEmpty()) { + if (numberCards.toString().equals("1")) { + sb.append("a card"); + } else { + sb.append(CardUtil.numberToText(numberCards.toString())); + sb.append(" cards"); + } } else { - sb.append(CardUtil.numberToText(numberCards.toString())); - sb.append(" cards"); + sb.append("X cards, where X is the number of "); + sb.append(message); } return sb.toString(); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/PutLibraryIntoGraveTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/PutLibraryIntoGraveTargetEffect.java deleted file mode 100644 index fe775591343..00000000000 --- a/Mage/src/main/java/mage/abilities/effects/common/PutLibraryIntoGraveTargetEffect.java +++ /dev/null @@ -1,83 +0,0 @@ -package mage.abilities.effects.common; - -import mage.abilities.Ability; -import mage.abilities.Mode; -import mage.abilities.dynamicvalue.DynamicValue; -import mage.abilities.dynamicvalue.common.StaticValue; -import mage.abilities.effects.OneShotEffect; -import mage.constants.Outcome; -import mage.game.Game; -import mage.players.Player; -import mage.util.CardUtil; - -/** - * @author BetaSteward_at_googlemail.com - */ -public class PutLibraryIntoGraveTargetEffect extends OneShotEffect { - - private DynamicValue amount; - - public PutLibraryIntoGraveTargetEffect(int amount) { - this(StaticValue.get(amount)); - } - - public PutLibraryIntoGraveTargetEffect(DynamicValue amount) { - super(Outcome.Detriment); - this.amount = amount; - } - - public PutLibraryIntoGraveTargetEffect(final PutLibraryIntoGraveTargetEffect effect) { - super(effect); - this.amount = effect.amount.copy(); - } - - public void setAmount(DynamicValue value) { - this.amount = value; - } - - @Override - public PutLibraryIntoGraveTargetEffect copy() { - return new PutLibraryIntoGraveTargetEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(targetPointer.getFirst(game, source)); - if (player != null) { - player.millCards(amount.calculate(game, source, this), source, game); - return true; - } - return false; - } - - @Override - public String getText(Mode mode) { - if (staticText != null && !staticText.isEmpty()) { - return staticText; - } - StringBuilder sb = new StringBuilder(); - String message = amount.getMessage(); - - if (!mode.getTargets().isEmpty()) { - sb.append("target ").append(mode.getTargets().get(0).getTargetName()); - } else { - sb.append("that target"); - } - - sb.append(" mills "); - if (message.isEmpty()) { - if (amount.toString().equals("1")) { - sb.append("a card"); - } else { - sb.append(CardUtil.numberToText(amount.toString())).append(" cards"); - } - } else { - sb.append("X cards, where X is the number of "); - } - - if (!message.isEmpty()) { - sb.append(message); - } - return sb.toString(); - } -} diff --git a/Mage/src/main/java/mage/abilities/effects/common/SacrificeEffect.java b/Mage/src/main/java/mage/abilities/effects/common/SacrificeEffect.java index 976feeb7923..56e8d4cab54 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/SacrificeEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/SacrificeEffect.java @@ -89,7 +89,7 @@ public class SacrificeEffect extends OneShotEffect { if (preText != null) { sb.append(preText); } - if (preText != null && (preText.endsWith("player") || preText.endsWith("opponent"))) { + if (preText != null && (preText.endsWith("player") || preText.endsWith("opponent") || preText.endsWith("controller"))) { sb.append(" sacrifices "); } else { if (preText == null || preText.isEmpty()) { diff --git a/Mage/src/main/java/mage/game/command/planes/LetheLakePlane.java b/Mage/src/main/java/mage/game/command/planes/LetheLakePlane.java index 0be2718aced..e0bfde62ab0 100644 --- a/Mage/src/main/java/mage/game/command/planes/LetheLakePlane.java +++ b/Mage/src/main/java/mage/game/command/planes/LetheLakePlane.java @@ -8,7 +8,6 @@ import mage.abilities.condition.common.MainPhaseStackEmptyCondition; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.Effect; import mage.abilities.effects.common.MillCardsTargetEffect; -import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; import mage.abilities.effects.common.RollPlanarDieEffect; import mage.abilities.effects.common.cost.PlanarDieRollCostIncreasingEffect; import mage.constants.Planes; @@ -31,7 +30,7 @@ public class LetheLakePlane extends Plane { this.setPlaneType(Planes.PLANE_LETHE_LAKE); // At the beginning of your upkeep, put the top ten cards of your libary into your graveyard - Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.COMMAND, new PutLibraryIntoGraveTargetEffect(10).setText("that player mills 10 cards"), TargetController.ANY, false, true); + Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.COMMAND, new MillCardsTargetEffect(10).setText("that player mills 10 cards"), TargetController.ANY, false, true); this.getAbilities().add(ability); // Active player can roll the planar die: Whenever you roll {CHAOS}, target player puts the top ten cards of their library into their graveyard