diff --git a/Mage.Sets/src/mage/cards/a/AcademyRuins.java b/Mage.Sets/src/mage/cards/a/AcademyRuins.java index 4a5bf489d83..71f1b35cff6 100644 --- a/Mage.Sets/src/mage/cards/a/AcademyRuins.java +++ b/Mage.Sets/src/mage/cards/a/AcademyRuins.java @@ -1,7 +1,5 @@ - package mage.cards.a; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; @@ -13,17 +11,18 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SuperType; import mage.constants.Zone; -import mage.filter.common.FilterArtifactCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author Plopman */ public final class AcademyRuins extends CardImpl { public AcademyRuins(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.LAND},""); + super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); addSuperType(SuperType.LEGENDARY); // {T}: Add {C}. @@ -31,7 +30,7 @@ public final class AcademyRuins extends CardImpl { // {1}{U}, {T}: Put target artifact card from your graveyard on top of your library. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutOnLibraryTargetEffect(true), new ManaCostsImpl("{1}{U}")); ability.addCost(new TapSourceCost()); - ability.addTarget(new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard"))); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/a/AdunOakenshield.java b/Mage.Sets/src/mage/cards/a/AdunOakenshield.java index a50becf6298..e3ebbb16dec 100644 --- a/Mage.Sets/src/mage/cards/a/AdunOakenshield.java +++ b/Mage.Sets/src/mage/cards/a/AdunOakenshield.java @@ -1,24 +1,22 @@ - package mage.cards.a; -import java.util.UUID; import mage.MageInt; 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.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.SuperType; -import mage.constants.Zone; import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author shieldal */ public final class AdunOakenshield extends CardImpl { @@ -33,7 +31,7 @@ public final class AdunOakenshield extends CardImpl { this.toughness = new MageInt(2); //{B}{R}{G}, {T}: Return target creature card from your graveyard to your hand. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl("{B}{R}{G}")); + Ability ability = new SimpleActivatedAbility(new ReturnFromGraveyardToHandTargetEffect(), new ManaCostsImpl("{B}{R}{G}")); ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); ability.addCost(new TapSourceCost()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/a/AidTheFallen.java b/Mage.Sets/src/mage/cards/a/AidTheFallen.java index 5e676ec87b8..4b9d5b3c70c 100644 --- a/Mage.Sets/src/mage/cards/a/AidTheFallen.java +++ b/Mage.Sets/src/mage/cards/a/AidTheFallen.java @@ -1,7 +1,7 @@ package mage.cards.a; import mage.abilities.Mode; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -27,13 +27,13 @@ public final class AidTheFallen extends CardImpl { this.getSpellAbility().getModes().setMaxModes(2); // • Return target creature card from your graveyard to your hand. - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard( StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD ).withChooseHint("returns a creature card to your hand")); // • Return target planeswalker card from your graveyard to your hand. - Mode mode = new Mode(new ReturnToHandTargetEffect()); + Mode mode = new Mode(new ReturnFromGraveyardToHandTargetEffect()); mode.addTarget(new TargetCardInYourGraveyard(filter) .withChooseHint("returns a planeswalker card to your hand")); this.getSpellAbility().addMode(mode); diff --git a/Mage.Sets/src/mage/cards/a/ArcboundReclaimer.java b/Mage.Sets/src/mage/cards/a/ArcboundReclaimer.java index 67511908118..d1908d6da0f 100644 --- a/Mage.Sets/src/mage/cards/a/ArcboundReclaimer.java +++ b/Mage.Sets/src/mage/cards/a/ArcboundReclaimer.java @@ -1,7 +1,5 @@ - package mage.cards.a; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -14,24 +12,25 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; import mage.counters.CounterType; -import mage.filter.common.FilterArtifactCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class ArcboundReclaimer extends CardImpl { public ArcboundReclaimer(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{4}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{4}"); this.subtype.add(SubType.GOLEM); this.power = new MageInt(0); this.toughness = new MageInt(0); // Remove a +1/+1 counter from Arcbound Reclaimer: Put target artifact card from your graveyard on top of your library. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutOnLibraryTargetEffect(true),new RemoveCountersSourceCost(CounterType.P1P1.createInstance())); - ability.addTarget(new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard"))); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutOnLibraryTargetEffect(true), new RemoveCountersSourceCost(CounterType.P1P1.createInstance())); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); this.addAbility(ability); // Modular 2 diff --git a/Mage.Sets/src/mage/cards/a/Archaeomender.java b/Mage.Sets/src/mage/cards/a/Archaeomender.java index 7d796a45047..5b26300f4ad 100644 --- a/Mage.Sets/src/mage/cards/a/Archaeomender.java +++ b/Mage.Sets/src/mage/cards/a/Archaeomender.java @@ -8,8 +8,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.FilterCard; -import mage.filter.common.FilterArtifactCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; import java.util.UUID; @@ -19,9 +18,6 @@ import java.util.UUID; */ public final class Archaeomender extends CardImpl { - private static final FilterCard filter - = new FilterArtifactCard("artifact card from your graveyard"); - public Archaeomender(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); @@ -32,7 +28,7 @@ public final class Archaeomender extends CardImpl { // When Archaeomender enters the battlefield, return target artifact card from your graveyard to your hand. Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect()); - ability.addTarget(new TargetCardInYourGraveyard(filter)); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/a/ArgivianArchaeologist.java b/Mage.Sets/src/mage/cards/a/ArgivianArchaeologist.java index 11f24f71e17..2c9f9b63623 100644 --- a/Mage.Sets/src/mage/cards/a/ArgivianArchaeologist.java +++ b/Mage.Sets/src/mage/cards/a/ArgivianArchaeologist.java @@ -1,41 +1,37 @@ - package mage.cards.a; -import java.util.UUID; import mage.MageInt; 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.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.common.FilterArtifactCard; +import mage.filter.StaticFilters; import mage.target.Target; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author fireshoes */ public final class ArgivianArchaeologist extends CardImpl { - - private static final FilterArtifactCard filter = new FilterArtifactCard("artifact card from your graveyard"); public ArgivianArchaeologist(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.ARTIFICER); this.power = new MageInt(1); this.toughness = new MageInt(1); // {W}{W}, {tap}: Return target artifact card from your graveyard to your hand. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl("{W}{W}")); + Ability ability = new SimpleActivatedAbility(new ReturnFromGraveyardToHandTargetEffect(), new ManaCostsImpl("{W}{W}")); ability.addCost(new TapSourceCost()); - Target target = new TargetCardInYourGraveyard(filter); + Target target = new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD); ability.addTarget(target); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/a/ArgivianRestoration.java b/Mage.Sets/src/mage/cards/a/ArgivianRestoration.java index 9b555630301..81fa3ecb752 100644 --- a/Mage.Sets/src/mage/cards/a/ArgivianRestoration.java +++ b/Mage.Sets/src/mage/cards/a/ArgivianRestoration.java @@ -4,7 +4,7 @@ import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffec import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterArtifactCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; import java.util.UUID; @@ -19,7 +19,7 @@ public final class ArgivianRestoration extends CardImpl { // Return target artifact card from your graveyard to the battlefield. this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect()); - this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard"))); + this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); } private ArgivianRestoration(final ArgivianRestoration card) { diff --git a/Mage.Sets/src/mage/cards/a/Auramancer.java b/Mage.Sets/src/mage/cards/a/Auramancer.java index 6b1d939754c..9319cadce9d 100644 --- a/Mage.Sets/src/mage/cards/a/Auramancer.java +++ b/Mage.Sets/src/mage/cards/a/Auramancer.java @@ -1,12 +1,9 @@ - - package mage.cards.a; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -14,6 +11,8 @@ import mage.constants.SubType; import mage.filter.FilterCard; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** * @author Loki */ @@ -26,13 +25,13 @@ public final class Auramancer extends CardImpl { } public Auramancer(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.WIZARD); this.power = new MageInt(2); this.toughness = new MageInt(2); - Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), true); + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), true); ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/b/BringerOfTheWhiteDawn.java b/Mage.Sets/src/mage/cards/b/BringerOfTheWhiteDawn.java index 4077285857b..ebcdc4ec167 100644 --- a/Mage.Sets/src/mage/cards/b/BringerOfTheWhiteDawn.java +++ b/Mage.Sets/src/mage/cards/b/BringerOfTheWhiteDawn.java @@ -1,7 +1,5 @@ - package mage.cards.b; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; @@ -15,17 +13,18 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.TargetController; import mage.constants.Zone; -import mage.filter.common.FilterArtifactCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author Plopman */ public final class BringerOfTheWhiteDawn extends CardImpl { public BringerOfTheWhiteDawn(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{7}{W}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{7}{W}{W}"); this.subtype.add(SubType.BRINGER); this.power = new MageInt(5); @@ -37,7 +36,7 @@ public final class BringerOfTheWhiteDawn extends CardImpl { this.addAbility(TrampleAbility.getInstance()); // At the beginning of your upkeep, you may return target artifact card from your graveyard to the battlefield. Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new ReturnFromGraveyardToBattlefieldTargetEffect(), TargetController.YOU, true); - ability.addTarget(new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard"))); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/b/BuriedRuin.java b/Mage.Sets/src/mage/cards/b/BuriedRuin.java index 77e4c5a873b..e323ef27004 100644 --- a/Mage.Sets/src/mage/cards/b/BuriedRuin.java +++ b/Mage.Sets/src/mage/cards/b/BuriedRuin.java @@ -1,36 +1,33 @@ - - package mage.cards.b; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.mana.ColorlessManaAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.Zone; -import mage.filter.common.FilterArtifactCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** * @author Loki */ public final class BuriedRuin extends CardImpl { public BuriedRuin(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.LAND},""); + super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); this.addAbility(new ColorlessManaAbility()); - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new GenericManaCost(2)); + Ability ability = new SimpleActivatedAbility(new ReturnFromGraveyardToHandTargetEffect(), new GenericManaCost(2)); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); - ability.addTarget(new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard"))); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); this.addAbility(ability); - } private BuriedRuin(final BuriedRuin card) { @@ -41,5 +38,4 @@ public final class BuriedRuin extends CardImpl { public BuriedRuin copy() { return new BuriedRuin(this); } - } diff --git a/Mage.Sets/src/mage/cards/c/CabalSurgeon.java b/Mage.Sets/src/mage/cards/c/CabalSurgeon.java index ddad3a2ae89..c8db1c1a2af 100644 --- a/Mage.Sets/src/mage/cards/c/CabalSurgeon.java +++ b/Mage.Sets/src/mage/cards/c/CabalSurgeon.java @@ -1,24 +1,22 @@ - package mage.cards.c; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.ExileFromGraveCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author markedagain */ public final class CabalSurgeon extends CardImpl { @@ -31,7 +29,7 @@ public final class CabalSurgeon extends CardImpl { this.toughness = new MageInt(1); // {2}{B}{B}, {tap}, Exile two cards from your graveyard: Return target creature card from your graveyard to your hand. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl("{2}{B}{B}")); + Ability ability = new SimpleActivatedAbility(new ReturnFromGraveyardToHandTargetEffect(), new ManaCostsImpl<>("{2}{B}{B}")); ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); ability.addCost(new TapSourceCost()); ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(2, StaticFilters.FILTER_CARDS_FROM_YOUR_GRAVEYARD))); diff --git a/Mage.Sets/src/mage/cards/c/CallToMind.java b/Mage.Sets/src/mage/cards/c/CallToMind.java index 70f254a9447..5e3dd5fa281 100644 --- a/Mage.Sets/src/mage/cards/c/CallToMind.java +++ b/Mage.Sets/src/mage/cards/c/CallToMind.java @@ -1,6 +1,6 @@ package mage.cards.c; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -18,7 +18,7 @@ public final class CallToMind extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{U}"); // Return target instant or sorcery card from your graveyard to your hand. - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY_FROM_YOUR_GRAVEYARD)); } diff --git a/Mage.Sets/src/mage/cards/c/CallToTheNetherworld.java b/Mage.Sets/src/mage/cards/c/CallToTheNetherworld.java index 75e4751e4a8..bd8e23eace6 100644 --- a/Mage.Sets/src/mage/cards/c/CallToTheNetherworld.java +++ b/Mage.Sets/src/mage/cards/c/CallToTheNetherworld.java @@ -1,10 +1,8 @@ - package mage.cards.c; -import java.util.UUID; import mage.ObjectColor; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.keyword.MadnessAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -13,26 +11,27 @@ import mage.filter.common.FilterCreatureCard; import mage.filter.predicate.mageobject.ColorPredicate; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author nigelzor */ public final class CallToTheNetherworld extends CardImpl { - private static FilterCreatureCard filter = new FilterCreatureCard("black creature card from your graveyard"); + private static final FilterCreatureCard filter = new FilterCreatureCard("black creature card from your graveyard"); static { filter.add(new ColorPredicate(ObjectColor.BLACK)); } public CallToTheNetherworld(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{B}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{B}"); // Return target black creature card from your graveyard to your hand. this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(filter)); - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); // Madness {0} - this.addAbility(new MadnessAbility(this, new ManaCostsImpl("{0}"))); + this.addAbility(new MadnessAbility(this, new ManaCostsImpl<>("{0}"))); } private CallToTheNetherworld(final CallToTheNetherworld card) { diff --git a/Mage.Sets/src/mage/cards/c/CodexShredder.java b/Mage.Sets/src/mage/cards/c/CodexShredder.java index 3f5d319a4d5..4b6743cd198 100644 --- a/Mage.Sets/src/mage/cards/c/CodexShredder.java +++ b/Mage.Sets/src/mage/cards/c/CodexShredder.java @@ -1,40 +1,41 @@ - package mage.cards.c; -import java.util.UUID; +import mage.abilities.Ability; 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.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.Zone; import mage.target.TargetPlayer; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** * @author LevelX2 */ public final class CodexShredder extends CardImpl { public CodexShredder(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{1}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}"); // {T}: Target player puts the top card of their library into their graveyard. - SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutLibraryIntoGraveTargetEffect(1), new TapSourceCost()); + Ability ability = new SimpleActivatedAbility( + new PutLibraryIntoGraveTargetEffect(1), new TapSourceCost() + ); ability.addTarget(new TargetPlayer()); this.addAbility(ability); - + // {5}, {T}, Sacrifice Codex Shredder: Return target card from your graveyard to your hand. - ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl("{5}")); + ability = new SimpleActivatedAbility(new ReturnFromGraveyardToHandTargetEffect(), new ManaCostsImpl<>("{5}")); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); ability.addTarget(new TargetCardInYourGraveyard()); this.addAbility(ability); - } private CodexShredder(final CodexShredder card) { diff --git a/Mage.Sets/src/mage/cards/c/CorpseCur.java b/Mage.Sets/src/mage/cards/c/CorpseCur.java index b41f588765f..f7c59480b54 100644 --- a/Mage.Sets/src/mage/cards/c/CorpseCur.java +++ b/Mage.Sets/src/mage/cards/c/CorpseCur.java @@ -1,46 +1,45 @@ - - package mage.cards.c; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.keyword.InfectAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.filter.FilterCard; +import mage.filter.common.FilterCreatureCard; import mage.filter.predicate.mageobject.AbilityPredicate; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author Loki */ public final class CorpseCur extends CardImpl { - private static final FilterCard filter = new FilterCard("creature card with infect from your graveyard"); + private static final FilterCard filter = new FilterCreatureCard("creature card with infect from your graveyard"); static { filter.add(new AbilityPredicate(InfectAbility.class)); } - public CorpseCur (UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{4}"); + public CorpseCur(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{4}"); this.subtype.add(SubType.PHYREXIAN); this.subtype.add(SubType.DOG); this.power = new MageInt(2); this.toughness = new MageInt(2); this.addAbility(InfectAbility.getInstance()); - Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect()); + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect()); ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); } - public CorpseCur (final CorpseCur card) { + public CorpseCur(final CorpseCur card) { super(card); } @@ -48,5 +47,4 @@ public final class CorpseCur extends CardImpl { public CorpseCur copy() { return new CorpseCur(this); } - } diff --git a/Mage.Sets/src/mage/cards/c/CryptAngel.java b/Mage.Sets/src/mage/cards/c/CryptAngel.java index b975fcec681..03c8c823a6a 100644 --- a/Mage.Sets/src/mage/cards/c/CryptAngel.java +++ b/Mage.Sets/src/mage/cards/c/CryptAngel.java @@ -1,12 +1,10 @@ - package mage.cards.c; -import java.util.UUID; import mage.MageInt; import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.ProtectionAbility; import mage.cards.CardImpl; @@ -18,8 +16,9 @@ import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.ColorPredicate; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author LoneFox */ public final class CryptAngel extends CardImpl { @@ -27,21 +26,26 @@ public final class CryptAngel extends CardImpl { private static final FilterCreatureCard filter2 = new FilterCreatureCard("blue or red creature card from your graveyard"); static { - filter2.add(Predicates.or(new ColorPredicate(ObjectColor.RED), new ColorPredicate(ObjectColor.BLUE))); + filter2.add(Predicates.or( + new ColorPredicate(ObjectColor.RED), + new ColorPredicate(ObjectColor.BLUE) + )); } public CryptAngel(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}"); this.subtype.add(SubType.ANGEL); this.power = new MageInt(3); this.toughness = new MageInt(3); // Flying this.addAbility(FlyingAbility.getInstance()); + // protection from white this.addAbility(ProtectionAbility.from(ObjectColor.WHITE)); + // When Crypt Angel enters the battlefield, return target blue or red creature card from your graveyard to your hand. - Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), false); + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), false); ability.addTarget(new TargetCardInYourGraveyard(filter2)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/d/DarettiScrapSavant.java b/Mage.Sets/src/mage/cards/d/DarettiScrapSavant.java index b5bb44a5724..ca776d07782 100644 --- a/Mage.Sets/src/mage/cards/d/DarettiScrapSavant.java +++ b/Mage.Sets/src/mage/cards/d/DarettiScrapSavant.java @@ -10,7 +10,7 @@ import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterArtifactCard; +import mage.filter.StaticFilters; import mage.filter.common.FilterControlledArtifactPermanent; import mage.game.Game; import mage.game.command.emblems.DarettiScrapSavantEmblem; @@ -39,7 +39,7 @@ public final class DarettiScrapSavant extends CardImpl { // -2: Sacrifice an artifact. If you do, return target artifact card from your graveyard to the battlefield. LoyaltyAbility loyaltyAbility = new LoyaltyAbility(new DarettiSacrificeEffect(), -2); - loyaltyAbility.addTarget(new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard"))); + loyaltyAbility.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); this.addAbility(loyaltyAbility); // -10: You get an emblem with "Whenever an artifact is put into your graveyard from the battlefield, return that card to the battlefield at the beginning of the next end step." diff --git a/Mage.Sets/src/mage/cards/d/DaringArchaeologist.java b/Mage.Sets/src/mage/cards/d/DaringArchaeologist.java index a7d7aa52af3..709d5ab9a94 100644 --- a/Mage.Sets/src/mage/cards/d/DaringArchaeologist.java +++ b/Mage.Sets/src/mage/cards/d/DaringArchaeologist.java @@ -1,7 +1,5 @@ - package mage.cards.d; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -14,12 +12,13 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.counters.CounterType; import mage.filter.FilterSpell; -import mage.filter.common.FilterArtifactCard; +import mage.filter.StaticFilters; import mage.filter.predicate.mageobject.HistoricPredicate; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author TheElk801 */ public final class DaringArchaeologist extends CardImpl { @@ -41,7 +40,7 @@ public final class DaringArchaeologist extends CardImpl { // When Daring Archaeologist enters the battlefield, you may return target artifact card from your graveyard to your hand. Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect() .setText("you may return target artifact card from your graveyard to your hand"), true); - ability.addTarget(new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard"))); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); this.addAbility(ability); // Whenever you cast a historic spell, put a +1/+1 counter on Daring Archaeologist. diff --git a/Mage.Sets/src/mage/cards/d/DisturbedBurial.java b/Mage.Sets/src/mage/cards/d/DisturbedBurial.java index 7889dbbf8ad..cec61e917f9 100644 --- a/Mage.Sets/src/mage/cards/d/DisturbedBurial.java +++ b/Mage.Sets/src/mage/cards/d/DisturbedBurial.java @@ -1,8 +1,6 @@ - package mage.cards.d; -import java.util.UUID; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.keyword.BuybackAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -10,8 +8,9 @@ import mage.constants.CardType; import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author fireshoes */ public final class DisturbedBurial extends CardImpl { @@ -23,7 +22,7 @@ public final class DisturbedBurial extends CardImpl { this.addAbility(new BuybackAbility("{3}")); // Return target creature card from your graveyard to your hand. this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); } private DisturbedBurial(final DisturbedBurial card) { diff --git a/Mage.Sets/src/mage/cards/d/DowsingShaman.java b/Mage.Sets/src/mage/cards/d/DowsingShaman.java index 6306f47b088..dc5338f913b 100644 --- a/Mage.Sets/src/mage/cards/d/DowsingShaman.java +++ b/Mage.Sets/src/mage/cards/d/DowsingShaman.java @@ -1,23 +1,21 @@ - package mage.cards.d; -import java.util.UUID; import mage.MageInt; 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.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; import mage.filter.FilterCard; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author Loki */ public final class DowsingShaman extends CardImpl { @@ -29,7 +27,7 @@ public final class DowsingShaman extends CardImpl { } public DowsingShaman(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}"); this.subtype.add(SubType.CENTAUR); this.subtype.add(SubType.SHAMAN); @@ -37,7 +35,7 @@ public final class DowsingShaman extends CardImpl { this.toughness = new MageInt(4); // {2}{G}, {tap}: Return target enchantment card from your graveyard to your hand. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl("{2}{G}")); + Ability ability = new SimpleActivatedAbility(new ReturnFromGraveyardToHandTargetEffect(), new ManaCostsImpl<>("{2}{G}")); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/e/EntomberExarch.java b/Mage.Sets/src/mage/cards/e/EntomberExarch.java index c616dec979e..ec0717d8e72 100644 --- a/Mage.Sets/src/mage/cards/e/EntomberExarch.java +++ b/Mage.Sets/src/mage/cards/e/EntomberExarch.java @@ -4,7 +4,7 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.Mode; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -31,7 +31,7 @@ public final class EntomberExarch extends CardImpl { // When Entomber Exarch enters the battlefield, choose one — // • Return target creature card from your graveyard to your hand - Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), false); + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), false); ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); // • Target opponent reveals their hand. You choose a noncreature card from it. That player discards that card. diff --git a/Mage.Sets/src/mage/cards/e/ExcavationElephant.java b/Mage.Sets/src/mage/cards/e/ExcavationElephant.java index b39500cc314..a9189fce274 100644 --- a/Mage.Sets/src/mage/cards/e/ExcavationElephant.java +++ b/Mage.Sets/src/mage/cards/e/ExcavationElephant.java @@ -1,7 +1,5 @@ - package mage.cards.e; -import java.util.UUID; import mage.MageInt; import mage.abilities.TriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -9,15 +7,16 @@ import mage.abilities.condition.common.KickedCondition; import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.abilities.keyword.KickerAbility; -import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterArtifactCard; +import mage.constants.SubType; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author TheElk801 */ public final class ExcavationElephant extends CardImpl { @@ -34,11 +33,11 @@ public final class ExcavationElephant extends CardImpl { // When Excavation Elephant enters the battlefield, if it was kicked, return target artifact card from your graveyard to your hand. TriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), false); - ability.addTarget(new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard"))); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); this.addAbility(new ConditionalInterveningIfTriggeredAbility( ability, KickedCondition.instance, "When {this} enters the battlefield, if it was kicked, " - + "return target artifact card from your graveyard to your hand." + + "return target artifact card from your graveyard to your hand." )); } diff --git a/Mage.Sets/src/mage/cards/e/ExhumerThrull.java b/Mage.Sets/src/mage/cards/e/ExhumerThrull.java index bbaae799fd6..ad72504e874 100644 --- a/Mage.Sets/src/mage/cards/e/ExhumerThrull.java +++ b/Mage.Sets/src/mage/cards/e/ExhumerThrull.java @@ -1,26 +1,25 @@ - package mage.cards.e; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.keyword.HauntAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterCreatureCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class ExhumerThrull extends CardImpl { public ExhumerThrull(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{B}"); this.subtype.add(SubType.THRULL); this.power = new MageInt(3); @@ -28,10 +27,9 @@ public final class ExhumerThrull extends CardImpl { // Haunt // When Exhumer Thrull enters the battlefield or the creature it haunts dies, return target creature card from your graveyard to your hand. - Ability ability = new HauntAbility(this, new ReturnToHandTargetEffect()); - ability.addTarget(new TargetCardInYourGraveyard(new FilterCreatureCard("target creature card from your graveyard"))); + Ability ability = new HauntAbility(this, new ReturnFromGraveyardToHandTargetEffect()); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); this.addAbility(ability); - } private ExhumerThrull(final ExhumerThrull card) { diff --git a/Mage.Sets/src/mage/cards/f/FortuitousFind.java b/Mage.Sets/src/mage/cards/f/FortuitousFind.java index eac793b0a75..57af635db03 100644 --- a/Mage.Sets/src/mage/cards/f/FortuitousFind.java +++ b/Mage.Sets/src/mage/cards/f/FortuitousFind.java @@ -5,9 +5,7 @@ import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterCard; import mage.filter.StaticFilters; -import mage.filter.common.FilterArtifactCard; import mage.target.common.TargetCardInYourGraveyard; import java.util.UUID; @@ -17,8 +15,6 @@ import java.util.UUID; */ public final class FortuitousFind extends CardImpl { - private static final FilterCard filter = new FilterArtifactCard("artifact card from your graveyard"); - public FortuitousFind(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B}"); @@ -28,7 +24,7 @@ public final class FortuitousFind extends CardImpl { // Return target artifact card from your graveyard to your hand.; this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); - this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(filter).withChooseHint("return to hand")); + this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD).withChooseHint("return to hand")); // or Return target creature card from your graveyard to your hand. Mode mode = new Mode(); diff --git a/Mage.Sets/src/mage/cards/g/GhoulcallersChant.java b/Mage.Sets/src/mage/cards/g/GhoulcallersChant.java index ef63b31ed13..37d561a54b5 100644 --- a/Mage.Sets/src/mage/cards/g/GhoulcallersChant.java +++ b/Mage.Sets/src/mage/cards/g/GhoulcallersChant.java @@ -1,9 +1,7 @@ - package mage.cards.g; -import java.util.UUID; import mage.abilities.Mode; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -12,8 +10,9 @@ import mage.filter.FilterCard; import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author North */ public final class GhoulcallersChant extends CardImpl { @@ -28,11 +27,10 @@ public final class GhoulcallersChant extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{B}"); // Choose one - Return target creature card from your graveyard to your hand - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); // or return two target Zombie cards from your graveyard to your hand. - Mode mode = new Mode(); - mode.addEffect(new ReturnToHandTargetEffect()); + Mode mode = new Mode(new ReturnFromGraveyardToHandTargetEffect()); mode.addTarget(new TargetCardInYourGraveyard(2, filter)); this.getSpellAbility().addMode(mode); } diff --git a/Mage.Sets/src/mage/cards/g/GlissaTheTraitor.java b/Mage.Sets/src/mage/cards/g/GlissaTheTraitor.java index f71ddd940ea..edff54dff55 100644 --- a/Mage.Sets/src/mage/cards/g/GlissaTheTraitor.java +++ b/Mage.Sets/src/mage/cards/g/GlissaTheTraitor.java @@ -1,11 +1,9 @@ - - package mage.cards.g; -import java.util.UUID; import mage.MageInt; -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.Ability; +import mage.abilities.common.DiesCreatureTriggeredAbility; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.keyword.DeathtouchAbility; import mage.abilities.keyword.FirstStrikeAbility; import mage.cards.CardImpl; @@ -13,21 +11,25 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.SuperType; -import mage.constants.Zone; import mage.filter.FilterCard; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.ZoneChangeEvent; -import mage.game.permanent.Permanent; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author Loki */ public final class GlissaTheTraitor extends CardImpl { - public GlissaTheTraitor (UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{B}{G}{G}"); + + private static final FilterCard filter = new FilterCard("artifact card from your graveyard"); + + static { + filter.add(CardType.ARTIFACT.getPredicate()); + } + + public GlissaTheTraitor(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}{G}{G}"); addSuperType(SuperType.LEGENDARY); this.subtype.add(SubType.PHYREXIAN); this.subtype.add(SubType.ZOMBIE); @@ -38,13 +40,20 @@ public final class GlissaTheTraitor extends CardImpl { this.toughness = new MageInt(3); // First strike, this.addAbility(FirstStrikeAbility.getInstance()); + // Deathtouch this.addAbility(DeathtouchAbility.getInstance()); + // Whenever a creature an opponent controls dies, you may return target artifact card from your graveyard to your hand. - this.addAbility(new GlissaTheTraitorTriggeredAbility()); + Ability ability = new DiesCreatureTriggeredAbility( + new ReturnFromGraveyardToHandTargetEffect(), false, + StaticFilters.FILTER_OPPONENTS_PERMANENT_A_CREATURE + ); + ability.addTarget(new TargetCardInYourGraveyard(filter)); + this.addAbility(ability); } - public GlissaTheTraitor (final GlissaTheTraitor card) { + public GlissaTheTraitor(final GlissaTheTraitor card) { super(card); } @@ -52,48 +61,4 @@ public final class GlissaTheTraitor extends CardImpl { public GlissaTheTraitor copy() { return new GlissaTheTraitor(this); } - -} - -class GlissaTheTraitorTriggeredAbility extends TriggeredAbilityImpl { - private static final FilterCard filter = new FilterCard("artifact card from your graveyard"); - - static { - filter.add(CardType.ARTIFACT.getPredicate()); - } - - GlissaTheTraitorTriggeredAbility() { - super(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), true); - this.addTarget(new TargetCardInYourGraveyard(filter)); - } - - GlissaTheTraitorTriggeredAbility(final GlissaTheTraitorTriggeredAbility ability) { - super(ability); - } - - @Override - public GlissaTheTraitorTriggeredAbility copy() { - return new GlissaTheTraitorTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.ZONE_CHANGE; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - if (((ZoneChangeEvent)event).isDiesEvent()) { - Permanent p = (Permanent) game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD); - if (p != null && p.isCreature(game) && game.getOpponents(this.getControllerId()).contains(p.getControllerId())) { - return true; - } - } - return false; - } - - @Override - public String getTriggerPhrase() { - return "Whenever a creature an opponent controls is put into a graveyard from the battlefield, " ; - } } diff --git a/Mage.Sets/src/mage/cards/g/GolgariGuildmage.java b/Mage.Sets/src/mage/cards/g/GolgariGuildmage.java index 364acf34dff..c765a85134e 100644 --- a/Mage.Sets/src/mage/cards/g/GolgariGuildmage.java +++ b/Mage.Sets/src/mage/cards/g/GolgariGuildmage.java @@ -1,28 +1,27 @@ - package mage.cards.g; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect; 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.filter.StaticFilters; -import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT; import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + +import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT; + /** - * * @author Loki */ public final class GolgariGuildmage extends CardImpl { @@ -34,11 +33,11 @@ public final class GolgariGuildmage extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(2); - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl("{4}{B}")); + Ability ability = new SimpleActivatedAbility(new ReturnFromGraveyardToHandTargetEffect(), new ManaCostsImpl<>("{4}{B}")); ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT))); ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); this.addAbility(ability); - ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance()), new ManaCostsImpl("{4}{G}")); + ability = new SimpleActivatedAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()), new ManaCostsImpl<>("{4}{G}")); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } @@ -51,5 +50,4 @@ public final class GolgariGuildmage extends CardImpl { public GolgariGuildmage copy() { return new GolgariGuildmage(this); } - } diff --git a/Mage.Sets/src/mage/cards/g/GraveExchange.java b/Mage.Sets/src/mage/cards/g/GraveExchange.java index 892e85c2f24..79415dc1081 100644 --- a/Mage.Sets/src/mage/cards/g/GraveExchange.java +++ b/Mage.Sets/src/mage/cards/g/GraveExchange.java @@ -1,26 +1,24 @@ - package mage.cards.g; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; import mage.filter.StaticFilters; -import mage.filter.common.FilterControlledCreaturePermanent; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.Target; import mage.target.TargetPlayer; import mage.target.common.TargetCardInYourGraveyard; -import mage.target.common.TargetControlledPermanent; +import mage.target.common.TargetControlledCreaturePermanent; + +import java.util.UUID; /** - * * @author North */ public final class GraveExchange extends CardImpl { @@ -29,8 +27,9 @@ public final class GraveExchange extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{B}{B}"); // Return target creature card from your graveyard to your hand. - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); + // Target player sacrifices a creature. this.getSpellAbility().addEffect(new GraveExchangeEffect()); this.getSpellAbility().addTarget(new TargetPlayer()); @@ -69,8 +68,10 @@ class GraveExchangeEffect extends OneShotEffect { return false; } - Target target = new TargetControlledPermanent(new FilterControlledCreaturePermanent()); - if (target.canChoose(source.getSourceId(), player.getId(), game) && player.choose(Outcome.Sacrifice, target, source.getSourceId(), game)) { + Target target = new TargetControlledCreaturePermanent(); + target.setNotTarget(true); + if (target.canChoose(source.getSourceId(), player.getId(), game) + && player.choose(Outcome.Sacrifice, target, source.getSourceId(), game)) { Permanent permanent = game.getPermanent(target.getFirstTarget()); if (permanent != null) { return permanent.sacrifice(source, game); diff --git a/Mage.Sets/src/mage/cards/g/GraveRobbers.java b/Mage.Sets/src/mage/cards/g/GraveRobbers.java index 6764815a786..82cfdb2873a 100644 --- a/Mage.Sets/src/mage/cards/g/GraveRobbers.java +++ b/Mage.Sets/src/mage/cards/g/GraveRobbers.java @@ -1,7 +1,6 @@ package mage.cards.g; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -14,11 +13,12 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterArtifactCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInGraveyard; +import java.util.UUID; + /** - * * @author fireshoes */ public final class GraveRobbers extends CardImpl { @@ -33,7 +33,7 @@ public final class GraveRobbers extends CardImpl { // {B}, {tap}: Exile target artifact card from a graveyard. You gain 2 life. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new ManaCostsImpl("{B}")); ability.addCost(new TapSourceCost()); - ability.addTarget(new TargetCardInGraveyard(new FilterArtifactCard("artifact card from your graveyard"))); + ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); ability.addEffect(new GainLifeEffect(2)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/g/GrimHarvest.java b/Mage.Sets/src/mage/cards/g/GrimHarvest.java index ef70c8abfc8..39d8233f9fc 100644 --- a/Mage.Sets/src/mage/cards/g/GrimHarvest.java +++ b/Mage.Sets/src/mage/cards/g/GrimHarvest.java @@ -1,9 +1,7 @@ - package mage.cards.g; -import java.util.UUID; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.keyword.RecoverAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -11,8 +9,9 @@ import mage.constants.CardType; import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author fireshoes */ public final class GrimHarvest extends CardImpl { @@ -21,11 +20,11 @@ public final class GrimHarvest extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{B}"); // Return target creature card from your graveyard to your hand. + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); // Recover {2}{B} - this.addAbility(new RecoverAbility(new ManaCostsImpl("{2}{B}"), this)); + this.addAbility(new RecoverAbility(new ManaCostsImpl<>("{2}{B}"), this)); } private GrimHarvest(final GrimHarvest card) { diff --git a/Mage.Sets/src/mage/cards/g/Groffskithur.java b/Mage.Sets/src/mage/cards/g/Groffskithur.java index c536006bf64..0aca5e7e818 100644 --- a/Mage.Sets/src/mage/cards/g/Groffskithur.java +++ b/Mage.Sets/src/mage/cards/g/Groffskithur.java @@ -1,11 +1,10 @@ package mage.cards.g; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.BecomesBlockedSourceTriggeredAbility; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -14,26 +13,27 @@ import mage.filter.FilterCard; import mage.filter.predicate.mageobject.NamePredicate; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author fireshoes */ public final class Groffskithur extends CardImpl { - + private static final FilterCard filter = new FilterCard("card named Groffskithur from your graveyard"); - + static { filter.add(new NamePredicate("Groffskithur")); } public Groffskithur(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{G}"); this.subtype.add(SubType.BEAST); this.power = new MageInt(3); this.toughness = new MageInt(3); // Whenever Groffskithur becomes blocked, you may return target card named Groffskithur from your graveyard to your hand. - Ability ability = new BecomesBlockedSourceTriggeredAbility(new ReturnToHandTargetEffect(), true); + Ability ability = new BecomesBlockedSourceTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), true); ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/g/Groundskeeper.java b/Mage.Sets/src/mage/cards/g/Groundskeeper.java index 9330f688b68..b5b35ee5935 100644 --- a/Mage.Sets/src/mage/cards/g/Groundskeeper.java +++ b/Mage.Sets/src/mage/cards/g/Groundskeeper.java @@ -1,36 +1,37 @@ - package mage.cards.g; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; +import mage.filter.FilterCard; import mage.filter.common.FilterBasicLandCard; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author fireshoes */ public final class Groundskeeper extends CardImpl { + private static final FilterCard filter = new FilterBasicLandCard("basic land card from your graveyard"); + public Groundskeeper(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.DRUID); this.power = new MageInt(1); this.toughness = new MageInt(1); // {1}{G}: Return target basic land card from your graveyard to your hand. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl("{1}{G}")); - ability.addTarget(new TargetCardInYourGraveyard(new FilterBasicLandCard("basic land card from your graveyard"))); + Ability ability = new SimpleActivatedAbility(new ReturnFromGraveyardToHandTargetEffect(), new ManaCostsImpl<>("{1}{G}")); + ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/h/HalimarTidecaller.java b/Mage.Sets/src/mage/cards/h/HalimarTidecaller.java index 9be88f74626..0662f04939c 100644 --- a/Mage.Sets/src/mage/cards/h/HalimarTidecaller.java +++ b/Mage.Sets/src/mage/cards/h/HalimarTidecaller.java @@ -1,28 +1,27 @@ package mage.cards.h; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.keyword.AwakenAbility; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; import mage.filter.FilterCard; import mage.filter.FilterPermanent; import mage.filter.predicate.mageobject.AbilityPredicate; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class HalimarTidecaller extends CardImpl { @@ -37,7 +36,7 @@ public final class HalimarTidecaller extends CardImpl { } public HalimarTidecaller(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.WIZARD); this.subtype.add(SubType.ALLY); @@ -45,14 +44,14 @@ public final class HalimarTidecaller extends CardImpl { this.toughness = new MageInt(3); // When Halimar Tidecaller enters the battlefield, you may return target card with awaken from your graveyard to your hand. - Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), true); + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), true); ability.addTarget(new TargetCardInYourGraveyard(filterCard)); - this.addAbility(ability); // Land creatures you control have flying. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield, filter))); - + this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect( + FlyingAbility.getInstance(), Duration.WhileOnBattlefield, filter + ))); } private HalimarTidecaller(final HalimarTidecaller card) { diff --git a/Mage.Sets/src/mage/cards/h/HanaKami.java b/Mage.Sets/src/mage/cards/h/HanaKami.java index 4a666877926..6f83c4d0390 100644 --- a/Mage.Sets/src/mage/cards/h/HanaKami.java +++ b/Mage.Sets/src/mage/cards/h/HanaKami.java @@ -1,22 +1,20 @@ - - package mage.cards.h; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; import mage.filter.FilterCard; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** * @author Loki */ @@ -29,12 +27,12 @@ public final class HanaKami extends CardImpl { } public HanaKami(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}"); this.subtype.add(SubType.SPIRIT); this.power = new MageInt(1); this.toughness = new MageInt(1); - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl("{1}{G}")); + Ability ability = new SimpleActivatedAbility(new ReturnFromGraveyardToHandTargetEffect(), new ManaCostsImpl("{1}{G}")); ability.addCost(new SacrificeSourceCost()); ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); @@ -48,5 +46,4 @@ public final class HanaKami extends CardImpl { public HanaKami copy() { return new HanaKami(this); } - } diff --git a/Mage.Sets/src/mage/cards/h/HeikoYamazakiTheGeneral.java b/Mage.Sets/src/mage/cards/h/HeikoYamazakiTheGeneral.java index 451914f9bf5..d741c40fc2e 100644 --- a/Mage.Sets/src/mage/cards/h/HeikoYamazakiTheGeneral.java +++ b/Mage.Sets/src/mage/cards/h/HeikoYamazakiTheGeneral.java @@ -1,27 +1,26 @@ package mage.cards.h; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.AttacksAloneControlledTriggeredAbility; import mage.abilities.effects.common.asthought.PlayFromNotOwnHandZoneTargetEffect; -import mage.constants.*; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.filter.common.FilterArtifactCard; +import mage.constants.*; +import mage.filter.StaticFilters; import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.Predicates; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author weirddan455 */ public final class HeikoYamazakiTheGeneral extends CardImpl { private static final FilterControlledPermanent filter = new FilterControlledPermanent("a Samurai or Warrior you control"); - private static final FilterArtifactCard filter2 = new FilterArtifactCard("artifact card from your graveyard"); static { filter.add(Predicates.or(SubType.SAMURAI.getPredicate(), SubType.WARRIOR.getPredicate())); @@ -45,7 +44,7 @@ public final class HeikoYamazakiTheGeneral extends CardImpl { .setText("you may cast target artifact card from your graveyard this turn"), filter, false, false ); - ability.addTarget(new TargetCardInYourGraveyard(filter2)); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/i/IronsoulEnforcer.java b/Mage.Sets/src/mage/cards/i/IronsoulEnforcer.java index 37a0a57815e..d73969abf96 100644 --- a/Mage.Sets/src/mage/cards/i/IronsoulEnforcer.java +++ b/Mage.Sets/src/mage/cards/i/IronsoulEnforcer.java @@ -8,9 +8,8 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.FilterCard; import mage.filter.FilterPermanent; -import mage.filter.common.FilterArtifactCard; +import mage.filter.StaticFilters; import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.ObjectSourcePlayer; import mage.filter.predicate.ObjectSourcePlayerPredicate; @@ -28,8 +27,6 @@ public final class IronsoulEnforcer extends CardImpl { private static final FilterPermanent filter = new FilterControlledPermanent("{this} or a commander you control"); - private static final FilterCard filter2 - = new FilterArtifactCard("artifact card from your graveyard"); static { filter.add(IronsoulEnforcerPredicate.instance); @@ -47,7 +44,7 @@ public final class IronsoulEnforcer extends CardImpl { Ability ability = new AttacksAloneControlledTriggeredAbility( new ReturnFromGraveyardToBattlefieldTargetEffect(), filter, false, false ); - ability.addTarget(new TargetCardInYourGraveyard(filter2)); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/i/IzzetChronarch.java b/Mage.Sets/src/mage/cards/i/IzzetChronarch.java index 11187f5bfae..5f9864506d5 100644 --- a/Mage.Sets/src/mage/cards/i/IzzetChronarch.java +++ b/Mage.Sets/src/mage/cards/i/IzzetChronarch.java @@ -1,11 +1,9 @@ - package mage.cards.i; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -14,8 +12,9 @@ import mage.filter.FilterCard; import mage.filter.predicate.Predicates; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author Loki */ public final class IzzetChronarch extends CardImpl { @@ -29,14 +28,14 @@ public final class IzzetChronarch extends CardImpl { } public IzzetChronarch(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{R}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.WIZARD); this.power = new MageInt(2); this.toughness = new MageInt(2); - Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), false); + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), false); ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/l/LilianaTheNecromancer.java b/Mage.Sets/src/mage/cards/l/LilianaTheNecromancer.java index aa261351176..43abb3b7425 100644 --- a/Mage.Sets/src/mage/cards/l/LilianaTheNecromancer.java +++ b/Mage.Sets/src/mage/cards/l/LilianaTheNecromancer.java @@ -1,22 +1,13 @@ package mage.cards.l; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.LoyaltyAbility; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.LoseLifeTargetEffect; -import mage.abilities.effects.common.ReturnToHandTargetEffect; -import mage.cards.Card; -import mage.constants.SubType; -import mage.constants.SuperType; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.cards.Cards; -import mage.cards.CardsImpl; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Zone; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; +import mage.cards.*; +import mage.constants.*; import mage.filter.StaticFilters; import mage.filter.common.FilterCreatureCard; import mage.game.Game; @@ -27,8 +18,9 @@ import mage.target.common.TargetCardInGraveyard; import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author TheElk801 */ public final class LilianaTheNecromancer extends CardImpl { @@ -46,13 +38,13 @@ public final class LilianaTheNecromancer extends CardImpl { this.addAbility(ability); // −1: Return target creature card from your graveyard to your hand. - ability = new LoyaltyAbility(new ReturnToHandTargetEffect(), -1); + ability = new LoyaltyAbility(new ReturnFromGraveyardToHandTargetEffect(), -1); ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); this.addAbility(ability); // −7: Destroy up to two target creatures. Put up to two creature cards from graveyards onto the battlefield under your control. ability = new LoyaltyAbility(new DestroyTargetEffect(), -7); - ability.addTarget(new TargetCreaturePermanent(0, 2)); + ability.addTarget(new TargetCreaturePermanent(0, 2, StaticFilters.FILTER_PERMANENT_CREATURES, false)); ability.addEffect(new LilianaTheNecromancerEffect()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/l/LordOfTheUndead.java b/Mage.Sets/src/mage/cards/l/LordOfTheUndead.java index 1db05716b12..32f4233d3d5 100644 --- a/Mage.Sets/src/mage/cards/l/LordOfTheUndead.java +++ b/Mage.Sets/src/mage/cards/l/LordOfTheUndead.java @@ -1,27 +1,25 @@ - package mage.cards.l; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.common.continuous.BoostAllEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.constants.Zone; import mage.filter.FilterCard; import mage.filter.common.FilterCreaturePermanent; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author Loki */ public final class LordOfTheUndead extends CardImpl { @@ -34,16 +32,19 @@ public final class LordOfTheUndead extends CardImpl { } public LordOfTheUndead(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{B}"); this.subtype.add(SubType.ZOMBIE); this.power = new MageInt(2); this.toughness = new MageInt(2); // Other Zombie creatures get +1/+1. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, filter, true))); + this.addAbility(new SimpleStaticAbility(new BoostAllEffect( + 1, 1, Duration.WhileOnBattlefield, filter, true + ))); + // {1}{B}, {tap}: Return target Zombie card from your graveyard to your hand. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl("{1}{B}")); + Ability ability = new SimpleActivatedAbility(new ReturnFromGraveyardToHandTargetEffect(), new ManaCostsImpl<>("{1}{B}")); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetCardInYourGraveyard(filterCard)); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/m/MiseryCharm.java b/Mage.Sets/src/mage/cards/m/MiseryCharm.java index 199f2d81f23..b6cf84a0eb4 100644 --- a/Mage.Sets/src/mage/cards/m/MiseryCharm.java +++ b/Mage.Sets/src/mage/cards/m/MiseryCharm.java @@ -1,11 +1,9 @@ - package mage.cards.m; -import java.util.UUID; import mage.abilities.Mode; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.LoseLifeTargetEffect; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -16,31 +14,33 @@ import mage.target.TargetPermanent; import mage.target.TargetPlayer; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author LoneFox */ public final class MiseryCharm extends CardImpl { - private static final FilterPermanent filter1 = new FilterPermanent("Cleric"); + private static final FilterPermanent filter1 = new FilterPermanent(SubType.CLERIC, "Cleric"); private static final FilterCard filter2 = new FilterCard("Cleric card from your graveyard"); static { - filter1.add(SubType.CLERIC.getPredicate()); filter2.add(SubType.CLERIC.getPredicate()); } public MiseryCharm(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{B}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{B}"); // Choose one - Destroy target Cleric this.getSpellAbility().addEffect(new DestroyTargetEffect()); this.getSpellAbility().addTarget(new TargetPermanent(filter1)); + // or return target Cleric card from your graveyard to your hand Mode mode = new Mode(); - mode.addEffect(new ReturnToHandTargetEffect()); + mode.addEffect(new ReturnFromGraveyardToHandTargetEffect()); mode.addTarget(new TargetCardInYourGraveyard(filter2)); this.getSpellAbility().addMode(mode); + // or target player loses 2 life. mode = new Mode(); mode.addEffect(new LoseLifeTargetEffect(2)); diff --git a/Mage.Sets/src/mage/cards/m/MonkIdealist.java b/Mage.Sets/src/mage/cards/m/MonkIdealist.java index 985d86aa2a2..03e8e4b3b51 100644 --- a/Mage.Sets/src/mage/cards/m/MonkIdealist.java +++ b/Mage.Sets/src/mage/cards/m/MonkIdealist.java @@ -1,32 +1,28 @@ - package mage.cards.m; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.filter.FilterCard; +import mage.filter.common.FilterEnchantmentCard; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author hanasu */ public final class MonkIdealist extends CardImpl { - private static final FilterCard filter = new FilterCard("enchantment card from your graveyard"); + private static final FilterCard filter = new FilterEnchantmentCard("enchantment card from your graveyard"); - static { - filter.add(CardType.ENCHANTMENT.getPredicate()); - } - public MonkIdealist(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.MONK); this.subtype.add(SubType.CLERIC); @@ -34,7 +30,7 @@ public final class MonkIdealist extends CardImpl { this.toughness = new MageInt(2); // When Monk Idealist enters the battlefield, return target enchantment card from your graveyard to your hand. - Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), true); + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), true); ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/m/MoriokScavenger.java b/Mage.Sets/src/mage/cards/m/MoriokScavenger.java index 3b4c2ef147e..db1253c9881 100644 --- a/Mage.Sets/src/mage/cards/m/MoriokScavenger.java +++ b/Mage.Sets/src/mage/cards/m/MoriokScavenger.java @@ -1,11 +1,9 @@ - package mage.cards.m; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -13,8 +11,9 @@ import mage.constants.SubType; import mage.filter.common.FilterCreatureCard; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author LoneFox */ public final class MoriokScavenger extends CardImpl { @@ -26,14 +25,14 @@ public final class MoriokScavenger extends CardImpl { } public MoriokScavenger(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.ROGUE); this.power = new MageInt(2); this.toughness = new MageInt(3); // When Moriok Scavenger enters the battlefield, you may return target artifact creature card from your graveyard to your hand. - Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), true); + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), true); ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/m/MyrReservoir.java b/Mage.Sets/src/mage/cards/m/MyrReservoir.java index 6f4acfc1036..b0c627b4cf2 100644 --- a/Mage.Sets/src/mage/cards/m/MyrReservoir.java +++ b/Mage.Sets/src/mage/cards/m/MyrReservoir.java @@ -1,6 +1,5 @@ package mage.cards.m; -import java.util.UUID; import mage.ConditionalMana; import mage.MageObject; import mage.Mana; @@ -9,18 +8,19 @@ import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.condition.Condition; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.common.ReturnToHandTargetEffect; -import mage.abilities.effects.mana.BasicManaEffect; -import mage.abilities.mana.ActivatedManaAbilityImpl; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; +import mage.abilities.mana.ConditionalColorlessManaAbility; +import mage.abilities.mana.builder.ConditionalManaBuilder; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; import mage.filter.FilterCard; import mage.game.Game; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** * @author nantuko */ @@ -36,10 +36,10 @@ public final class MyrReservoir extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); // {T}: Add {C}{C}. Spend this mana only to cast Myr spells or activate abilities of Myr. - this.addAbility(new MyrReservoirManaAbility()); + this.addAbility(new ConditionalColorlessManaAbility(2, new MyrReservoirManaBuilder())); // {3}, {T}: Return target Myr card from your graveyard to your hand. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new GenericManaCost(3)); + Ability ability = new SimpleActivatedAbility(new ReturnFromGraveyardToHandTargetEffect(), new GenericManaCost(3)); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetCardInYourGraveyard(myrCardFilter)); this.addAbility(ability); @@ -55,33 +55,30 @@ public final class MyrReservoir extends CardImpl { } } -class MyrReservoirManaAbility extends ActivatedManaAbilityImpl { +class MyrReservoirManaBuilder extends ConditionalManaBuilder { - MyrReservoirManaAbility() { - super(Zone.BATTLEFIELD, new BasicManaEffect(new MyrConditionalMana()), new TapSourceCost()); - this.netMana.add(Mana.ColorlessMana(2)); - } - - private MyrReservoirManaAbility(MyrReservoirManaAbility ability) { - super(ability); + @Override + public ConditionalMana build(Object... options) { + return new MyrReservoirConditionalMana(this.mana); } @Override - public MyrReservoirManaAbility copy() { - return new MyrReservoirManaAbility(this); + public String getRule() { + return "Spend this mana only to cast Myr spells or activate abilities of Myr"; } } -class MyrConditionalMana extends ConditionalMana { +class MyrReservoirConditionalMana extends ConditionalMana { - MyrConditionalMana() { - super(Mana.ColorlessMana(2)); + MyrReservoirConditionalMana(Mana mana) { + super(mana); staticText = "Spend this mana only to cast Myr spells or activate abilities of Myr"; - addCondition(new MyrManaCondition()); + addCondition(MyrReservoirManaCondition.instance); } } -class MyrManaCondition implements Condition { +enum MyrReservoirManaCondition implements Condition { + instance; @Override public boolean apply(Game game, Ability source) { diff --git a/Mage.Sets/src/mage/cards/m/MysticRetrieval.java b/Mage.Sets/src/mage/cards/m/MysticRetrieval.java index 36fd978faf8..36afa6a69d1 100644 --- a/Mage.Sets/src/mage/cards/m/MysticRetrieval.java +++ b/Mage.Sets/src/mage/cards/m/MysticRetrieval.java @@ -1,40 +1,30 @@ - package mage.cards.m; -import java.util.UUID; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.keyword.FlashbackAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.TimingRule; -import mage.filter.FilterCard; -import mage.filter.predicate.Predicates; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author Loki */ public final class MysticRetrieval extends CardImpl { - private static final FilterCard filter = new FilterCard("instant or sorcery card from your graveyard"); - - static { - filter.add(Predicates.or( - CardType.INSTANT.getPredicate(), - CardType.SORCERY.getPredicate())); - } public MysticRetrieval(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{U}"); - + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{U}"); // Return target instant or sorcery card from your graveyard to your hand. - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); - this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(filter)); + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); + this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY_FROM_YOUR_GRAVEYARD)); + // Flashback {2}{R} - this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{2}{R}"))); + this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{2}{R}"))); } private MysticRetrieval(final MysticRetrieval card) { diff --git a/Mage.Sets/src/mage/cards/p/PhyrexianReclamation.java b/Mage.Sets/src/mage/cards/p/PhyrexianReclamation.java index fd20cddbe57..589f153890b 100644 --- a/Mage.Sets/src/mage/cards/p/PhyrexianReclamation.java +++ b/Mage.Sets/src/mage/cards/p/PhyrexianReclamation.java @@ -1,21 +1,19 @@ - package mage.cards.p; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.PayLifeCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.Zone; import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author Plopman */ public final class PhyrexianReclamation extends CardImpl { @@ -24,7 +22,7 @@ public final class PhyrexianReclamation extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{B}"); // {1}{B}, Pay 2 life: Return target creature card from your graveyard to your hand. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl("{1}{B}")); + Ability ability = new SimpleActivatedAbility(new ReturnFromGraveyardToHandTargetEffect(), new ManaCostsImpl<>("{1}{B}")); ability.addCost(new PayLifeCost(2)); ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/p/PlanewideCelebration.java b/Mage.Sets/src/mage/cards/p/PlanewideCelebration.java index bc782470193..e7868f0f28c 100644 --- a/Mage.Sets/src/mage/cards/p/PlanewideCelebration.java +++ b/Mage.Sets/src/mage/cards/p/PlanewideCelebration.java @@ -3,7 +3,7 @@ package mage.cards.p; import mage.abilities.Mode; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.GainLifeEffect; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.common.counter.ProliferateEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -34,7 +34,7 @@ public final class PlanewideCelebration extends CardImpl { this.getSpellAbility().addEffect(new CreateTokenEffect(new PlanewideCelebrationToken())); // • Return target permanent card from your graveyard to your hand. - Mode mode = new Mode(new ReturnToHandTargetEffect()); + Mode mode = new Mode(new ReturnFromGraveyardToHandTargetEffect()); mode.addTarget(new TargetCardInYourGraveyard(filter)); this.getSpellAbility().addMode(mode); diff --git a/Mage.Sets/src/mage/cards/p/PossessedSkaab.java b/Mage.Sets/src/mage/cards/p/PossessedSkaab.java index e87fca4d0fa..025c0e63253 100644 --- a/Mage.Sets/src/mage/cards/p/PossessedSkaab.java +++ b/Mage.Sets/src/mage/cards/p/PossessedSkaab.java @@ -1,32 +1,24 @@ - package mage.cards.p; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.ReplacementEffectImpl; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.Zone; +import mage.constants.*; import mage.filter.FilterCard; import mage.filter.predicate.Predicates; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.game.events.ZoneChangeEvent; -import mage.game.permanent.Permanent; -import mage.players.Player; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class PossessedSkaab extends CardImpl { @@ -37,22 +29,23 @@ public final class PossessedSkaab extends CardImpl { filter.add(Predicates.or( CardType.INSTANT.getPredicate(), CardType.SORCERY.getPredicate(), - CardType.CREATURE.getPredicate())); + CardType.CREATURE.getPredicate() + )); } public PossessedSkaab(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{B}"); this.subtype.add(SubType.ZOMBIE); this.power = new MageInt(3); this.toughness = new MageInt(2); // When Possessed Skaab enters the battlefield, return target instant, sorcery, or creature card from your graveyard to your hand. - EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), false); + EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), false); ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); // If Possessed Skaab would die, exile it instead. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new PossessedSkaabDiesEffect())); + this.addAbility(new SimpleStaticAbility(new PossessedSkaabDiesEffect())); } private PossessedSkaab(final PossessedSkaab card) { @@ -100,5 +93,4 @@ class PossessedSkaabDiesEffect extends ReplacementEffectImpl { } return false; } - } diff --git a/Mage.Sets/src/mage/cards/p/ProtomatterPowder.java b/Mage.Sets/src/mage/cards/p/ProtomatterPowder.java index a226b39c18e..6b68dc4a4ef 100644 --- a/Mage.Sets/src/mage/cards/p/ProtomatterPowder.java +++ b/Mage.Sets/src/mage/cards/p/ProtomatterPowder.java @@ -1,7 +1,5 @@ - package mage.cards.p; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; @@ -12,24 +10,25 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Zone; -import mage.filter.common.FilterArtifactCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author Plopman */ public final class ProtomatterPowder extends CardImpl { public ProtomatterPowder(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}{U}"); // {4}{W}, {tap}, Sacrifice Protomatter Powder: Return target artifact card from your graveyard to the battlefield. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnFromGraveyardToBattlefieldTargetEffect(), new ManaCostsImpl("{4}{W}")); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); - ability.addTarget(new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard"))); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/r/RaiseDead.java b/Mage.Sets/src/mage/cards/r/RaiseDead.java index 7b74a60b707..fbac0c100ca 100644 --- a/Mage.Sets/src/mage/cards/r/RaiseDead.java +++ b/Mage.Sets/src/mage/cards/r/RaiseDead.java @@ -1,16 +1,15 @@ - package mage.cards.r; -import java.util.UUID; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author Plopman */ public final class RaiseDead extends CardImpl { @@ -20,7 +19,7 @@ public final class RaiseDead extends CardImpl { // Return target creature card from your graveyard to your hand. this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); } private RaiseDead(final RaiseDead card) { diff --git a/Mage.Sets/src/mage/cards/r/RazorHippogriff.java b/Mage.Sets/src/mage/cards/r/RazorHippogriff.java index b067eb6b062..77fdcab6cef 100644 --- a/Mage.Sets/src/mage/cards/r/RazorHippogriff.java +++ b/Mage.Sets/src/mage/cards/r/RazorHippogriff.java @@ -1,6 +1,5 @@ package mage.cards.r; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -11,21 +10,20 @@ import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Outcome; -import mage.filter.common.FilterArtifactCard; +import mage.constants.SubType; +import mage.filter.StaticFilters; import mage.game.Game; import mage.players.Player; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author nantuko */ public final class RazorHippogriff extends CardImpl { - private static final FilterArtifactCard filter = new FilterArtifactCard("artifact card from your graveyard"); - public RazorHippogriff(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}{W}"); this.subtype.add(SubType.HIPPOGRIFF); @@ -36,7 +34,7 @@ public final class RazorHippogriff extends CardImpl { this.addAbility(FlyingAbility.getInstance()); Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect()); - ability.addTarget(new TargetCardInYourGraveyard(filter)); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); ability.addEffect(new RazorHippogriffGainLifeEffect()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/r/Reap.java b/Mage.Sets/src/mage/cards/r/Reap.java index 5930d317b96..e5097a1c31a 100644 --- a/Mage.Sets/src/mage/cards/r/Reap.java +++ b/Mage.Sets/src/mage/cards/r/Reap.java @@ -29,7 +29,7 @@ public final class Reap extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}"); // Return up to X target cards from your graveyard to your hand, where X is the number of black permanents target opponent controls as you cast Reap. - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect().setText("Return up to X target cards from your graveyard to your hand, where X is the number of black permanents target opponent controls as you cast Reap.")); + this.getSpellAbility().addEffect(new ReturnToHandTargetEffect().setText("Return up to X target cards from your graveyard to your hand, where X is the number of black permanents target opponent controls as you cast this spell")); this.getSpellAbility().addTarget(new TargetOpponent()); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(0, 0)); this.getSpellAbility().setTargetAdjuster(ReapAdjuster.instance); diff --git a/Mage.Sets/src/mage/cards/r/Recollect.java b/Mage.Sets/src/mage/cards/r/Recollect.java index 99bf88cf441..570a23d2378 100644 --- a/Mage.Sets/src/mage/cards/r/Recollect.java +++ b/Mage.Sets/src/mage/cards/r/Recollect.java @@ -1,15 +1,14 @@ - package mage.cards.r; -import java.util.UUID; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author Loki */ public final class Recollect extends CardImpl { @@ -18,7 +17,7 @@ public final class Recollect extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{G}"); // Return target card from your graveyard to your hand. - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard()); } diff --git a/Mage.Sets/src/mage/cards/r/Reconstruction.java b/Mage.Sets/src/mage/cards/r/Reconstruction.java index 6ad87127f6d..6c7be571150 100644 --- a/Mage.Sets/src/mage/cards/r/Reconstruction.java +++ b/Mage.Sets/src/mage/cards/r/Reconstruction.java @@ -1,26 +1,25 @@ - package mage.cards.r; -import java.util.UUID; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterArtifactCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author fireshoes */ public final class Reconstruction extends CardImpl { public Reconstruction(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{U}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{U}"); // Return target artifact card from your graveyard to your hand. - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); - this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard"))); + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); + this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); } private Reconstruction(final Reconstruction card) { diff --git a/Mage.Sets/src/mage/cards/r/Recover.java b/Mage.Sets/src/mage/cards/r/Recover.java index 7fa8cb49758..596006db55e 100644 --- a/Mage.Sets/src/mage/cards/r/Recover.java +++ b/Mage.Sets/src/mage/cards/r/Recover.java @@ -1,17 +1,16 @@ - package mage.cards.r; -import java.util.UUID; import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author dustinconrad */ public final class Recover extends CardImpl { @@ -21,9 +20,9 @@ public final class Recover extends CardImpl { // Return target creature card from your graveyard to your hand. this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); // Draw a card. - this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).setText("
")); } private Recover(final Recover card) { diff --git a/Mage.Sets/src/mage/cards/r/Refurbish.java b/Mage.Sets/src/mage/cards/r/Refurbish.java index e4c90a7d8b9..7ab8d062ab8 100644 --- a/Mage.Sets/src/mage/cards/r/Refurbish.java +++ b/Mage.Sets/src/mage/cards/r/Refurbish.java @@ -1,25 +1,24 @@ - package mage.cards.r; -import java.util.UUID; import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterArtifactCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author fireshoes */ public final class Refurbish extends CardImpl { public Refurbish(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{W}"); // Return target artifact card from your graveyard to the battlefield. - this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard"))); + this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect()); } diff --git a/Mage.Sets/src/mage/cards/r/RememberTheFallen.java b/Mage.Sets/src/mage/cards/r/RememberTheFallen.java index 41d91b74cf5..c1ffd1c5909 100644 --- a/Mage.Sets/src/mage/cards/r/RememberTheFallen.java +++ b/Mage.Sets/src/mage/cards/r/RememberTheFallen.java @@ -1,12 +1,11 @@ package mage.cards.r; import mage.abilities.Mode; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.filter.StaticFilters; -import mage.filter.common.FilterArtifactCard; import mage.target.common.TargetCardInYourGraveyard; import java.util.UUID; @@ -16,8 +15,6 @@ import java.util.UUID; */ public final class RememberTheFallen extends CardImpl { - private static final FilterArtifactCard filterArtifact = new FilterArtifactCard("artifact card from your graveyard"); - public RememberTheFallen(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{W}"); @@ -26,13 +23,13 @@ public final class RememberTheFallen extends CardImpl { this.getSpellAbility().getModes().setMaxModes(2); // • Return target creature card from your graveyard to your hand. - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD).withChooseHint("return to hand")); // • Return target artifact card from your graveyard to your hand. Mode mode = new Mode(); - mode.addEffect(new ReturnToHandTargetEffect()); - mode.addTarget(new TargetCardInYourGraveyard(filterArtifact).withChooseHint("return to hand")); + mode.addEffect(new ReturnFromGraveyardToHandTargetEffect()); + mode.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD).withChooseHint("return to hand")); this.getSpellAbility().addMode(mode); } diff --git a/Mage.Sets/src/mage/cards/r/RestorationSpecialist.java b/Mage.Sets/src/mage/cards/r/RestorationSpecialist.java index b7169c83b9a..82f1de4cbb2 100644 --- a/Mage.Sets/src/mage/cards/r/RestorationSpecialist.java +++ b/Mage.Sets/src/mage/cards/r/RestorationSpecialist.java @@ -1,7 +1,6 @@ package mage.cards.r; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -14,12 +13,13 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterArtifactCard; +import mage.filter.StaticFilters; import mage.filter.common.FilterEnchantmentCard; import mage.target.common.TargetCardInGraveyard; +import java.util.UUID; + /** - * * @author Styxo */ public final class RestorationSpecialist extends CardImpl { @@ -36,7 +36,7 @@ public final class RestorationSpecialist extends CardImpl { Effect effect = new ReturnToHandTargetEffect(true); effect.setText("Return up to one target artifact card and up to one target enchantment card from your graveyard to your hand"); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{W}")); - ability.addTarget(new TargetCardInGraveyard(0, 1, new FilterArtifactCard("artifact card from your graveyard"))); + ability.addTarget(new TargetCardInGraveyard(0, 1, StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); ability.addTarget(new TargetCardInGraveyard(0, 1, new FilterEnchantmentCard("enchantment card from your graveyard"))); ability.addCost(new SacrificeSourceCost()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/r/ReturnToBattle.java b/Mage.Sets/src/mage/cards/r/ReturnToBattle.java index bb1f5fb8b6f..0542676a8ea 100644 --- a/Mage.Sets/src/mage/cards/r/ReturnToBattle.java +++ b/Mage.Sets/src/mage/cards/r/ReturnToBattle.java @@ -1,16 +1,15 @@ - package mage.cards.r; -import java.util.UUID; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author LoneFox */ public final class ReturnToBattle extends CardImpl { @@ -19,7 +18,7 @@ public final class ReturnToBattle extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{B}"); // Return target creature card from your graveyard to your hand. - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); } diff --git a/Mage.Sets/src/mage/cards/r/Revive.java b/Mage.Sets/src/mage/cards/r/Revive.java index ca688b5b711..8da6a39d65c 100644 --- a/Mage.Sets/src/mage/cards/r/Revive.java +++ b/Mage.Sets/src/mage/cards/r/Revive.java @@ -1,9 +1,7 @@ - package mage.cards.r; -import java.util.UUID; import mage.ObjectColor; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -11,8 +9,9 @@ import mage.filter.FilterCard; import mage.filter.predicate.mageobject.ColorPredicate; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author North */ public final class Revive extends CardImpl { @@ -24,11 +23,10 @@ public final class Revive extends CardImpl { } public Revive(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{1}{G}"); - + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{G}"); // Return target green card from your graveyard to your hand. - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(filter)); } diff --git a/Mage.Sets/src/mage/cards/r/RitualOfRestoration.java b/Mage.Sets/src/mage/cards/r/RitualOfRestoration.java index ddf4a863eb4..bdcfa028243 100644 --- a/Mage.Sets/src/mage/cards/r/RitualOfRestoration.java +++ b/Mage.Sets/src/mage/cards/r/RitualOfRestoration.java @@ -1,26 +1,25 @@ - package mage.cards.r; -import java.util.UUID; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterArtifactCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author fireshoes */ public final class RitualOfRestoration extends CardImpl { public RitualOfRestoration(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{W}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{W}"); // Return target artifact card from your graveyard to your hand. - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); - this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard"))); + this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); + this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); } private RitualOfRestoration(final RitualOfRestoration card) { diff --git a/Mage.Sets/src/mage/cards/r/RootwaterDiver.java b/Mage.Sets/src/mage/cards/r/RootwaterDiver.java index f044f1f18bf..392b33d0edc 100644 --- a/Mage.Sets/src/mage/cards/r/RootwaterDiver.java +++ b/Mage.Sets/src/mage/cards/r/RootwaterDiver.java @@ -1,39 +1,36 @@ - package mage.cards.r; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.common.FilterArtifactCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author TGower */ public final class RootwaterDiver extends CardImpl { public RootwaterDiver(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{U}"); this.subtype.add(SubType.MERFOLK); this.power = new MageInt(1); this.toughness = new MageInt(1); // {tap}, Sacrifice Rootwater Diver: Return target artifact card from your graveyard to your hand. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new TapSourceCost()); + Ability ability = new SimpleActivatedAbility(new ReturnFromGraveyardToHandTargetEffect(), new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); - ability.addTarget(new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard"))); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); this.addAbility(ability); - } private RootwaterDiver(final RootwaterDiver card) { diff --git a/Mage.Sets/src/mage/cards/s/SaidDone.java b/Mage.Sets/src/mage/cards/s/SaidDone.java index 24cb3f31eb6..b32b25fe168 100644 --- a/Mage.Sets/src/mage/cards/s/SaidDone.java +++ b/Mage.Sets/src/mage/cards/s/SaidDone.java @@ -1,7 +1,7 @@ package mage.cards.s; import mage.abilities.effects.common.DontUntapInControllersNextUntapStepTargetEffect; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.common.TapTargetEffect; import mage.cards.CardSetInfo; import mage.cards.SplitCard; @@ -27,7 +27,7 @@ public final class SaidDone extends SplitCard { // Said // Return target instant or sorcery card from your graveyard to your hand. - this.getLeftHalfCard().getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + this.getLeftHalfCard().getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getLeftHalfCard().getSpellAbility().addTarget(new TargetCardInYourGraveyard( StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY_FROM_YOUR_GRAVEYARD )); diff --git a/Mage.Sets/src/mage/cards/s/SalvageScout.java b/Mage.Sets/src/mage/cards/s/SalvageScout.java index a3b56b6eaf2..1ae3743b175 100644 --- a/Mage.Sets/src/mage/cards/s/SalvageScout.java +++ b/Mage.Sets/src/mage/cards/s/SalvageScout.java @@ -1,37 +1,35 @@ - - package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.common.FilterArtifactCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** * @author nantuko */ public final class SalvageScout extends CardImpl { public SalvageScout(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.SCOUT); this.power = new MageInt(1); this.toughness = new MageInt(1); - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl("{W}")); - ability.addTarget(new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard"))); + Ability ability = new SimpleActivatedAbility(new ReturnFromGraveyardToHandTargetEffect(), new ManaCostsImpl<>("{W}")); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); ability.addCost(new SacrificeSourceCost()); this.addAbility(ability); } @@ -44,5 +42,4 @@ public final class SalvageScout extends CardImpl { public SalvageScout copy() { return new SalvageScout(this); } - } diff --git a/Mage.Sets/src/mage/cards/s/SalvagerOfSecrets.java b/Mage.Sets/src/mage/cards/s/SalvagerOfSecrets.java index ca28ea97a7e..ce714d45038 100644 --- a/Mage.Sets/src/mage/cards/s/SalvagerOfSecrets.java +++ b/Mage.Sets/src/mage/cards/s/SalvagerOfSecrets.java @@ -1,20 +1,19 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; +import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.ReturnToHandTargetEffect; -import mage.constants.SubType; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.SubType; import mage.filter.common.FilterInstantOrSorceryCard; -import mage.target.Target; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author TheElk801 */ public final class SalvagerOfSecrets extends CardImpl { @@ -30,9 +29,8 @@ public final class SalvagerOfSecrets extends CardImpl { this.toughness = new MageInt(2); // When Salvager of Secrets enters the battlefield, return target instant or sorcery card from your graveyard to your hand. - EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), false); - Target target = new TargetCardInYourGraveyard(filter); - ability.addTarget(target); + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), false); + ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SanctumGargoyle.java b/Mage.Sets/src/mage/cards/s/SanctumGargoyle.java index 2e1f5f3feb3..198294d89cc 100644 --- a/Mage.Sets/src/mage/cards/s/SanctumGargoyle.java +++ b/Mage.Sets/src/mage/cards/s/SanctumGargoyle.java @@ -1,28 +1,26 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; -import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterArtifactCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author North */ public final class SanctumGargoyle extends CardImpl { public SanctumGargoyle(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{3}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}{W}"); this.subtype.add(SubType.GARGOYLE); this.power = new MageInt(2); @@ -32,7 +30,7 @@ public final class SanctumGargoyle extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // When Sanctum Gargoyle enters the battlefield, you may return target artifact card from your graveyard to your hand. Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), true); - ability.addTarget(new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard"))); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SavingGrasp.java b/Mage.Sets/src/mage/cards/s/SavingGrasp.java index 775056361de..0c6ff824a9a 100644 --- a/Mage.Sets/src/mage/cards/s/SavingGrasp.java +++ b/Mage.Sets/src/mage/cards/s/SavingGrasp.java @@ -1,7 +1,5 @@ - package mage.cards.s; -import java.util.UUID; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.abilities.keyword.FlashbackAbility; @@ -9,12 +7,12 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.TargetController; -import mage.constants.TimingRule; import mage.filter.common.FilterCreaturePermanent; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author North */ public final class SavingGrasp extends CardImpl { @@ -26,14 +24,13 @@ public final class SavingGrasp extends CardImpl { } public SavingGrasp(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{U}"); - + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{U}"); // Return target creature you own to your hand. this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); - this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + this.getSpellAbility().addEffect(new ReturnToHandTargetEffect().setText("return target creature you own to your hand")); // Flashback {W} - this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{W}"))); + this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{W}"))); } private SavingGrasp(final SavingGrasp card) { diff --git a/Mage.Sets/src/mage/cards/s/SequesteredStash.java b/Mage.Sets/src/mage/cards/s/SequesteredStash.java index ee0d2b06278..d69331b118a 100644 --- a/Mage.Sets/src/mage/cards/s/SequesteredStash.java +++ b/Mage.Sets/src/mage/cards/s/SequesteredStash.java @@ -1,7 +1,5 @@ - package mage.cards.s; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; @@ -16,19 +14,20 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Zone; -import mage.filter.common.FilterArtifactCard; +import mage.filter.StaticFilters; import mage.game.Game; import mage.players.Player; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class SequesteredStash extends CardImpl { public SequesteredStash(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.LAND},""); + super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); // {R}: Add {C}. this.addAbility(new ColorlessManaAbility()); @@ -74,7 +73,7 @@ class SequesteredStashEffect extends OneShotEffect { if (controller == null) { return false; } - TargetCardInYourGraveyard target = new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard")); + TargetCardInYourGraveyard target = new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD); target.setNotTarget(true); if (target.canChoose(source.getSourceId(), source.getControllerId(), game) && controller.chooseUse(outcome, "Put an artifact card from your graveyard to library?", source, game) diff --git a/Mage.Sets/src/mage/cards/s/SharuumTheHegemon.java b/Mage.Sets/src/mage/cards/s/SharuumTheHegemon.java index 564be3652ee..6d17ea8f450 100644 --- a/Mage.Sets/src/mage/cards/s/SharuumTheHegemon.java +++ b/Mage.Sets/src/mage/cards/s/SharuumTheHegemon.java @@ -1,7 +1,5 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -12,17 +10,18 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.SuperType; -import mage.filter.common.FilterArtifactCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author North */ public final class SharuumTheHegemon extends CardImpl { public SharuumTheHegemon(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{3}{W}{U}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}{W}{U}{B}"); addSuperType(SuperType.LEGENDARY); this.subtype.add(SubType.SPHINX); @@ -34,7 +33,7 @@ public final class SharuumTheHegemon extends CardImpl { // When Sharuum the Hegemon enters the battlefield, you may return target artifact card from your graveyard to the battlefield. Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect(), true); - ability.addTarget(new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard"))); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SibsigMuckdraggers.java b/Mage.Sets/src/mage/cards/s/SibsigMuckdraggers.java index 4233048fb54..28c896aedc4 100644 --- a/Mage.Sets/src/mage/cards/s/SibsigMuckdraggers.java +++ b/Mage.Sets/src/mage/cards/s/SibsigMuckdraggers.java @@ -5,6 +5,7 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.abilities.keyword.DelveAbility; import mage.cards.CardImpl; @@ -29,7 +30,7 @@ public final class SibsigMuckdraggers extends CardImpl { // Delve this.addAbility(new DelveAbility()); // When Sibsig Muckdraggers enters the battlefield, return target creature card from your graveyard to your hand. - Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), false); + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), false); ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SkeletonShard.java b/Mage.Sets/src/mage/cards/s/SkeletonShard.java index 017b33c7075..2e88996d8fb 100644 --- a/Mage.Sets/src/mage/cards/s/SkeletonShard.java +++ b/Mage.Sets/src/mage/cards/s/SkeletonShard.java @@ -7,7 +7,7 @@ import mage.abilities.costs.OrCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -33,7 +33,7 @@ public final class SkeletonShard extends CardImpl { // {3}, {tap} or {B}, {tap}: Return target artifact creature card from your graveyard to your hand. Ability ability = new SimpleActivatedAbility( - new ReturnToHandTargetEffect(), + new ReturnFromGraveyardToHandTargetEffect(), new OrCost( new CompositeCost(new GenericManaCost(3), new TapSourceCost(), "{3}, {T}"), new CompositeCost(new ManaCostsImpl<>("{B}"), new TapSourceCost(), "{B}, {T}"), diff --git a/Mage.Sets/src/mage/cards/s/SkullOfOrm.java b/Mage.Sets/src/mage/cards/s/SkullOfOrm.java index 20add1936af..c93935363ed 100644 --- a/Mage.Sets/src/mage/cards/s/SkullOfOrm.java +++ b/Mage.Sets/src/mage/cards/s/SkullOfOrm.java @@ -1,36 +1,34 @@ - package mage.cards.s; -import java.util.UUID; 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.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.Zone; import mage.filter.FilterCard; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author Plopman */ public final class SkullOfOrm extends CardImpl { private static final FilterCard filter = new FilterCard("enchantment card from your graveyard"); - + static { filter.add(CardType.ENCHANTMENT.getPredicate()); } - + public SkullOfOrm(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{3}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); // {5}, {tap}: Return target enchantment card from your graveyard to your hand. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl("{5}")); + Ability ability = new SimpleActivatedAbility(new ReturnFromGraveyardToHandTargetEffect(), new ManaCostsImpl<>("{5}")); ability.addTarget(new TargetCardInYourGraveyard(filter)); ability.addCost(new TapSourceCost()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/s/SpellkeeperWeird.java b/Mage.Sets/src/mage/cards/s/SpellkeeperWeird.java index ec66f16cadc..68130bbe234 100644 --- a/Mage.Sets/src/mage/cards/s/SpellkeeperWeird.java +++ b/Mage.Sets/src/mage/cards/s/SpellkeeperWeird.java @@ -6,7 +6,7 @@ import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -34,7 +34,7 @@ public final class SpellkeeperWeird extends CardImpl { // {2}, {T}, Sacrifice Spellkeeper Weird: Return target instant or sorcery card from your graveyard to your hand. Ability ability = new SimpleActivatedAbility( - new ReturnToHandTargetEffect(), new GenericManaCost(2) + new ReturnFromGraveyardToHandTargetEffect(), new GenericManaCost(2) ); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); diff --git a/Mage.Sets/src/mage/cards/s/StrongarmThug.java b/Mage.Sets/src/mage/cards/s/StrongarmThug.java index c20c1a67a9c..453895ddef8 100644 --- a/Mage.Sets/src/mage/cards/s/StrongarmThug.java +++ b/Mage.Sets/src/mage/cards/s/StrongarmThug.java @@ -1,12 +1,9 @@ - - package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -14,20 +11,21 @@ import mage.constants.SubType; import mage.filter.common.FilterCreatureCard; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author Backfir3 */ public final class StrongarmThug extends CardImpl { - private static final FilterCreatureCard filter = new FilterCreatureCard("Mercenary card"); + private static final FilterCreatureCard filter = new FilterCreatureCard("Mercenary card from your graveyard"); static { filter.add(SubType.MERCENARY.getPredicate()); } public StrongarmThug(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.MERCENARY); @@ -35,7 +33,7 @@ public final class StrongarmThug extends CardImpl { this.toughness = new MageInt(1); // When Strongarm Thug enters the battlefield, you may return target Mercenary card from your graveyard to your hand. - Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), true); + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), true); ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/t/TezzeretMasterOfTheBridge.java b/Mage.Sets/src/mage/cards/t/TezzeretMasterOfTheBridge.java index 31b421e3b02..596f74f3aa9 100644 --- a/Mage.Sets/src/mage/cards/t/TezzeretMasterOfTheBridge.java +++ b/Mage.Sets/src/mage/cards/t/TezzeretMasterOfTheBridge.java @@ -6,14 +6,13 @@ import mage.abilities.common.SimpleStaticAbility; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DamagePlayersEffect; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledSpellsEffect; import mage.abilities.keyword.AffinityForArtifactsAbility; import mage.cards.*; import mage.constants.*; import mage.filter.FilterCard; import mage.filter.StaticFilters; -import mage.filter.common.FilterArtifactCard; import mage.filter.predicate.Predicates; import mage.game.Game; import mage.players.Player; @@ -35,8 +34,6 @@ public final class TezzeretMasterOfTheBridge extends CardImpl { )); } - private static final FilterCard filter2 = new FilterArtifactCard("artifact card from your graveyard"); - public TezzeretMasterOfTheBridge(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{4}{U}{B}"); @@ -53,8 +50,8 @@ public final class TezzeretMasterOfTheBridge extends CardImpl { this.addAbility(new LoyaltyAbility(new TezzeretMasterOfTheBridgeEffect(), 2)); // -3: Return target artifact card from your graveyard to your hand. - Ability ability = new LoyaltyAbility(new ReturnToHandTargetEffect(), -3); - ability.addTarget(new TargetCardInYourGraveyard(filter2)); + Ability ability = new LoyaltyAbility(new ReturnFromGraveyardToHandTargetEffect(), -3); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); this.addAbility(ability); // -8: Exile the top ten cards of your library. Put all artifact cards from among them onto the battlefield. @@ -136,4 +133,4 @@ class TezzeretMasterOfTheBridgeEffect2 extends OneShotEffect { } return player.moveCards(cards2, Zone.BATTLEFIELD, source, game); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/t/TheUnspeakable.java b/Mage.Sets/src/mage/cards/t/TheUnspeakable.java index 9eb45c2c5bb..c4640bc86f3 100644 --- a/Mage.Sets/src/mage/cards/t/TheUnspeakable.java +++ b/Mage.Sets/src/mage/cards/t/TheUnspeakable.java @@ -1,11 +1,10 @@ package mage.cards.t; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; @@ -16,8 +15,9 @@ import mage.constants.SuperType; import mage.filter.FilterCard; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author Loki */ public final class TheUnspeakable extends CardImpl { @@ -29,7 +29,7 @@ public final class TheUnspeakable extends CardImpl { } public TheUnspeakable(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{6}{U}{U}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{6}{U}{U}{U}"); addSuperType(SuperType.LEGENDARY); this.subtype.add(SubType.SPIRIT); @@ -37,7 +37,7 @@ public final class TheUnspeakable extends CardImpl { this.toughness = new MageInt(7); this.addAbility(FlyingAbility.getInstance()); this.addAbility(TrampleAbility.getInstance()); - Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new ReturnToHandTargetEffect(), true); + Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), true); ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/t/TreasureHunter.java b/Mage.Sets/src/mage/cards/t/TreasureHunter.java index 477946a1b34..f0df756c623 100644 --- a/Mage.Sets/src/mage/cards/t/TreasureHunter.java +++ b/Mage.Sets/src/mage/cards/t/TreasureHunter.java @@ -1,32 +1,31 @@ - package mage.cards.t; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterArtifactCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author Loki */ public final class TreasureHunter extends CardImpl { public TreasureHunter(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); this.subtype.add(SubType.HUMAN); this.power = new MageInt(2); this.toughness = new MageInt(2); - Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), true); - ability.addTarget(new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard"))); + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), true); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/t/TrustyPackbeast.java b/Mage.Sets/src/mage/cards/t/TrustyPackbeast.java index a40d5ac4bce..d34e80749ba 100644 --- a/Mage.Sets/src/mage/cards/t/TrustyPackbeast.java +++ b/Mage.Sets/src/mage/cards/t/TrustyPackbeast.java @@ -1,20 +1,19 @@ - package mage.cards.t; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.ReturnToHandTargetEffect; -import mage.constants.SubType; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterArtifactCard; +import mage.constants.SubType; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author TheElk801 */ public final class TrustyPackbeast extends CardImpl { @@ -27,8 +26,8 @@ public final class TrustyPackbeast extends CardImpl { this.toughness = new MageInt(3); // When Trusty Packbeast enters the battlefield, return target artifact card from your graveyard to your hand. - Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect()); - ability.addTarget(new TargetCardInYourGraveyard(new FilterArtifactCard("artifact card from your graveyard"))); + Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect()); + ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/t/TurntimberSower.java b/Mage.Sets/src/mage/cards/t/TurntimberSower.java index d52069b3c5d..ac6d2e02413 100644 --- a/Mage.Sets/src/mage/cards/t/TurntimberSower.java +++ b/Mage.Sets/src/mage/cards/t/TurntimberSower.java @@ -1,6 +1,5 @@ package mage.cards.t; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; @@ -8,7 +7,7 @@ import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -25,14 +24,14 @@ import mage.game.permanent.token.PlantToken; import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetControlledPermanent; +import java.util.UUID; + /** - * * @author TheElk801 */ public final class TurntimberSower extends CardImpl { - private static final FilterControlledPermanent filter - = new FilterControlledCreaturePermanent("three creatures"); + private static final FilterControlledPermanent filter = new FilterControlledCreaturePermanent("creatures"); public TurntimberSower(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); @@ -47,14 +46,9 @@ public final class TurntimberSower extends CardImpl { // {G}, Sacrifice three creatures: Return target land card from your graveyard to your hand. Ability ability = new SimpleActivatedAbility( - new ReturnToHandTargetEffect() - .setText("Return target land card " - + "from your graveyard to your hand"), - new ManaCostsImpl("{G}") + new ReturnFromGraveyardToHandTargetEffect(), new ManaCostsImpl<>("{G}") ); - ability.addCost(new SacrificeTargetCost( - new TargetControlledPermanent(3, 3, filter, true) - )); + ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(3, filter))); ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_LAND)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/u/Undertaker.java b/Mage.Sets/src/mage/cards/u/Undertaker.java index 169c67c9d5a..f16c85a6b8e 100644 --- a/Mage.Sets/src/mage/cards/u/Undertaker.java +++ b/Mage.Sets/src/mage/cards/u/Undertaker.java @@ -1,24 +1,22 @@ - package mage.cards.u; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; 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.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author shieldal */ public final class Undertaker extends CardImpl { @@ -32,7 +30,7 @@ public final class Undertaker extends CardImpl { this.toughness = new MageInt(1); // {B}, {tap}, Discard a card: Return target creature card from your graveyard to your hand. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl("{B}")); + Ability ability = new SimpleActivatedAbility(new ReturnFromGraveyardToHandTargetEffect(), new ManaCostsImpl<>("{B}")); ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); ability.addCost(new TapSourceCost()); ability.addCost(new DiscardCardCost()); diff --git a/Mage.Sets/src/mage/cards/w/Woebearer.java b/Mage.Sets/src/mage/cards/w/Woebearer.java index 03009f47be2..88e5497878a 100644 --- a/Mage.Sets/src/mage/cards/w/Woebearer.java +++ b/Mage.Sets/src/mage/cards/w/Woebearer.java @@ -1,11 +1,9 @@ - package mage.cards.w; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.keyword.FearAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -14,8 +12,9 @@ import mage.constants.SubType; import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author LoneFox */ public final class Woebearer extends CardImpl { @@ -28,8 +27,9 @@ public final class Woebearer extends CardImpl { // Fear this.addAbility(FearAbility.getInstance()); + // Whenever Woebearer deals combat damage to a player, you may return target creature card from your graveyard to your hand. - Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new ReturnToHandTargetEffect(), true); + Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), true); ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); this.addAbility(ability); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/ReturnFromGraveyardToHandTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ReturnFromGraveyardToHandTargetEffect.java index 760633fc175..5a50db9c3ff 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ReturnFromGraveyardToHandTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ReturnFromGraveyardToHandTargetEffect.java @@ -3,7 +3,6 @@ package mage.abilities.effects.common; import mage.abilities.Ability; import mage.abilities.Mode; import mage.abilities.effects.OneShotEffect; -import mage.cards.Card; import mage.cards.Cards; import mage.cards.CardsImpl; import mage.constants.Outcome; @@ -14,7 +13,6 @@ import mage.target.Target; import mage.util.CardUtil; /** - * * @author jeff */ public class ReturnFromGraveyardToHandTargetEffect extends OneShotEffect { @@ -38,14 +36,9 @@ public class ReturnFromGraveyardToHandTargetEffect extends OneShotEffect { if (controller == null) { return false; } - Cards cardsInGraveyard = new CardsImpl(getTargetPointer().getTargets(game, source)); - for (Card card : cardsInGraveyard.getCards(game)) { - if (card != null - && game.getState().getZone(card.getId()) == Zone.GRAVEYARD) { - controller.moveCards(card, Zone.HAND, source, game); //verify the target card is still in the graveyard - } - } - return false; + Cards cards = new CardsImpl(getTargetPointer().getTargets(game, source)); + cards.retainZone(Zone.GRAVEYARD, game); //verify the target card is still in the graveyard + return !cards.isEmpty() && controller.moveCards(cards, Zone.HAND, source, game); } @Override @@ -62,10 +55,14 @@ public class ReturnFromGraveyardToHandTargetEffect extends OneShotEffect { } else if (target.getMaxNumberOfTargets() > 1) { sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets())).append(' '); } - if (!mode.getTargets().get(0).getTargetName().startsWith("another")) { + if (!target.getTargetName().startsWith("another")) { sb.append("target "); } - sb.append(mode.getTargets().get(0).getTargetName()).append(" to your hand"); + sb.append(target.getTargetName()); + if (!target.getTargetName().endsWith("graveyard")) { + sb.append(" from your graveyard"); + } + sb.append(" to your hand"); return sb.toString(); } diff --git a/Mage/src/main/java/mage/filter/StaticFilters.java b/Mage/src/main/java/mage/filter/StaticFilters.java index e69aea0e331..187e2707aa0 100644 --- a/Mage/src/main/java/mage/filter/StaticFilters.java +++ b/Mage/src/main/java/mage/filter/StaticFilters.java @@ -124,6 +124,12 @@ public final class StaticFilters { FILTER_CARD_INSTANT_OR_SORCERY_FROM_YOUR_GRAVEYARD.setLockedFilter(true); } + public static final FilterCard FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD = new FilterInstantOrSorceryCard("artifact card from your graveyard"); + + static { + FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD.setLockedFilter(true); + } + public static final FilterNoncreatureCard FILTER_CARD_NON_CREATURE = new FilterNoncreatureCard(); static {