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