diff --git a/Mage.Sets/src/mage/cards/a/AlpineGuide.java b/Mage.Sets/src/mage/cards/a/AlpineGuide.java index 7ec0ffa6ed3..13ae8cd915a 100644 --- a/Mage.Sets/src/mage/cards/a/AlpineGuide.java +++ b/Mage.Sets/src/mage/cards/a/AlpineGuide.java @@ -13,7 +13,6 @@ import mage.constants.SubType; import mage.constants.SuperType; import mage.filter.FilterCard; import mage.filter.FilterPermanent; -import mage.filter.common.FilterBySubtypeCard; import mage.filter.common.FilterControlledPermanent; import mage.target.common.TargetCardInLibrary; @@ -24,7 +23,7 @@ import java.util.UUID; */ public final class AlpineGuide extends CardImpl { - private static final FilterCard filter = new FilterBySubtypeCard(SubType.MOUNTAIN); + private static final FilterCard filter = new FilterCard(SubType.MOUNTAIN); private static final FilterPermanent filter2 = new FilterControlledPermanent(SubType.MOUNTAIN, "Mountain"); public AlpineGuide(UUID ownerId, CardSetInfo setInfo) { diff --git a/Mage.Sets/src/mage/cards/a/ArmMountedAnchor.java b/Mage.Sets/src/mage/cards/a/ArmMountedAnchor.java index ca6455ad195..8c698857b28 100644 --- a/Mage.Sets/src/mage/cards/a/ArmMountedAnchor.java +++ b/Mage.Sets/src/mage/cards/a/ArmMountedAnchor.java @@ -18,7 +18,7 @@ import mage.cards.CardSetInfo; import mage.constants.AttachmentType; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterBySubtypeCard; +import mage.filter.FilterCard; import mage.game.Game; import mage.util.CardUtil; @@ -30,6 +30,8 @@ import java.util.UUID; */ public final class ArmMountedAnchor extends CardImpl { + private static final FilterCard filter = new FilterCard(SubType.PIRATE); + public ArmMountedAnchor(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); this.subtype.add(SubType.EQUIPMENT); @@ -42,11 +44,12 @@ public final class ArmMountedAnchor extends CardImpl { this.addAbility(firstAbility); // Whenever equipped creature deals combat damage to a player, draw two cards. Then discard two cards unless you discard a Pirate card. - Ability drawAbility = new DealsDamageToAPlayerAttachedTriggeredAbility(new DrawCardSourceControllerEffect(2), "equipped creature", false); - DiscardCardCost cost = new DiscardCardCost(new FilterBySubtypeCard(SubType.PIRATE)); - cost.setText("Discard a Pirate card instead of discarding two cards"); + Ability drawAbility = new DealsDamageToAPlayerAttachedTriggeredAbility( + new DrawCardSourceControllerEffect(2), "equipped creature", false + ); drawAbility.addEffect(new DoIfCostPaid( - null, new DiscardControllerEffect(2), cost + null, new DiscardControllerEffect(2), + new DiscardCardCost(filter).setText("Discard a Pirate card instead of discarding two cards") ).setText("Then discard two cards unless you discard a Pirate card")); this.addAbility(drawAbility); diff --git a/Mage.Sets/src/mage/cards/b/BindingTheOldGods.java b/Mage.Sets/src/mage/cards/b/BindingTheOldGods.java index 966e3bdc186..3d655a721f4 100644 --- a/Mage.Sets/src/mage/cards/b/BindingTheOldGods.java +++ b/Mage.Sets/src/mage/cards/b/BindingTheOldGods.java @@ -13,7 +13,6 @@ import mage.constants.SagaChapter; import mage.constants.SubType; import mage.filter.FilterCard; import mage.filter.StaticFilters; -import mage.filter.common.FilterBySubtypeCard; import mage.target.TargetPermanent; import mage.target.common.TargetCardInLibrary; @@ -24,7 +23,7 @@ import java.util.UUID; */ public final class BindingTheOldGods extends CardImpl { - private static final FilterCard filter = new FilterBySubtypeCard(SubType.FOREST); + private static final FilterCard filter = new FilterCard(SubType.FOREST); public BindingTheOldGods(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{B}{G}"); @@ -33,15 +32,18 @@ public final class BindingTheOldGods extends CardImpl { // (As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.) SagaAbility sagaAbility = new SagaAbility(this); + // I — Destroy target nonland permanent an opponent controls. sagaAbility.addChapterEffect( this, SagaChapter.CHAPTER_I, SagaChapter.CHAPTER_I, new DestroyTargetEffect(), new TargetPermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_NON_LAND) ); + // II — Search your library for a Forest card, put it onto the battlefield tapped, then shuffle your library. sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_II, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), true) ); + // III — Creatures you control gain deathtouch until end of turn. sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, new GainAbilityControlledEffect(DeathtouchAbility.getInstance(), Duration.EndOfTurn, diff --git a/Mage.Sets/src/mage/cards/c/CharitableLevy.java b/Mage.Sets/src/mage/cards/c/CharitableLevy.java index bbc6d4a8e7a..a95a84a5a4a 100644 --- a/Mage.Sets/src/mage/cards/c/CharitableLevy.java +++ b/Mage.Sets/src/mage/cards/c/CharitableLevy.java @@ -20,7 +20,6 @@ import mage.constants.TargetController; import mage.counters.CounterType; import mage.filter.FilterCard; import mage.filter.StaticFilters; -import mage.filter.common.FilterBySubtypeCard; import mage.filter.predicate.Predicates; import mage.target.common.TargetCardInLibrary; @@ -39,7 +38,7 @@ public final class CharitableLevy extends CardImpl { private static final Condition condition = new SourceHasCounterCondition(CounterType.COLLECTION, 3); - private static final FilterCard filterPlains = new FilterBySubtypeCard(SubType.PLAINS); + private static final FilterCard filterPlains = new FilterCard(SubType.PLAINS); public CharitableLevy(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}"); diff --git a/Mage.Sets/src/mage/cards/e/ElderfangRitualist.java b/Mage.Sets/src/mage/cards/e/ElderfangRitualist.java index 5d2cfdf3f0c..fa99c9a98ce 100644 --- a/Mage.Sets/src/mage/cards/e/ElderfangRitualist.java +++ b/Mage.Sets/src/mage/cards/e/ElderfangRitualist.java @@ -1,29 +1,28 @@ package mage.cards.e; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.DiesSourceTriggeredAbility; import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; -import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.SubType; import mage.filter.FilterCard; -import mage.filter.common.FilterBySubtypeCard; import mage.filter.predicate.mageobject.AnotherPredicate; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author weirddan455 */ public final class ElderfangRitualist extends CardImpl { - private static final FilterCard filter = new FilterBySubtypeCard(SubType.ELF); + private static final FilterCard filter = new FilterCard(SubType.ELF, "another target Elf card from your graveyard"); + static { filter.add(AnotherPredicate.instance); - filter.setMessage("another target Elf card from your graveyard"); } public ElderfangRitualist(UUID ownerId, CardSetInfo setInfo) { diff --git a/Mage.Sets/src/mage/cards/f/ForerunnerOfTheCoalition.java b/Mage.Sets/src/mage/cards/f/ForerunnerOfTheCoalition.java index 85110624e88..3d968a4d851 100644 --- a/Mage.Sets/src/mage/cards/f/ForerunnerOfTheCoalition.java +++ b/Mage.Sets/src/mage/cards/f/ForerunnerOfTheCoalition.java @@ -1,32 +1,33 @@ - package mage.cards.f; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; +import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.LoseLifeOpponentsEffect; import mage.abilities.effects.common.search.SearchLibraryPutOnLibraryEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.filter.FilterCard; import mage.filter.FilterPermanent; -import mage.filter.common.FilterBySubtypeCard; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; import mage.target.common.TargetCardInLibrary; +import java.util.UUID; + /** - * * @author JayDi85 */ public final class ForerunnerOfTheCoalition extends CardImpl { - private static final FilterPermanent filterAnotherPirate = new FilterPermanent(SubType.PIRATE, "another " + SubType.PIRATE.toString()); + private static final FilterCard filter = new FilterCard(SubType.PIRATE); + private static final FilterPermanent filter2 + = new FilterControlledPermanent(SubType.PIRATE, "another Pirate you control"); static { - filterAnotherPirate.add(AnotherPredicate.instance); - filterAnotherPirate.add(TargetController.YOU.getControllerPredicate()); + filter2.add(AnotherPredicate.instance); } public ForerunnerOfTheCoalition(UUID ownerId, CardSetInfo setInfo) { @@ -39,15 +40,13 @@ public final class ForerunnerOfTheCoalition extends CardImpl { // When Forerunner of the Coalition enters the battlefield, you may search your library for a Pirate card, reveal it, then shuffle your library and put that card on top of it. this.addAbility(new EntersBattlefieldTriggeredAbility( - new SearchLibraryPutOnLibraryEffect( - new TargetCardInLibrary(new FilterBySubtypeCard(SubType.PIRATE)), - true), true)); + new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary(filter), true), true + )); // Whenever another Pirate you control enters, each opponent loses 1 life. - Ability ability = new EntersBattlefieldControlledTriggeredAbility( - Zone.BATTLEFIELD, new LoseLifeOpponentsEffect(1), - filterAnotherPirate, false); - this.addAbility(ability); + this.addAbility(new EntersBattlefieldAllTriggeredAbility( + new LoseLifeOpponentsEffect(1), filter2 + )); } private ForerunnerOfTheCoalition(final ForerunnerOfTheCoalition card) { diff --git a/Mage.Sets/src/mage/cards/f/ForerunnerOfTheEmpire.java b/Mage.Sets/src/mage/cards/f/ForerunnerOfTheEmpire.java index 1b47ba5a9a8..1029bcbb394 100644 --- a/Mage.Sets/src/mage/cards/f/ForerunnerOfTheEmpire.java +++ b/Mage.Sets/src/mage/cards/f/ForerunnerOfTheEmpire.java @@ -1,9 +1,7 @@ - package mage.cards.f; import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; +import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.DamageAllEffect; import mage.abilities.effects.common.search.SearchLibraryPutOnLibraryEffect; @@ -11,10 +9,10 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.TargetController; -import mage.constants.Zone; -import mage.filter.common.FilterBySubtypeCard; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.FilterCard; +import mage.filter.FilterPermanent; +import mage.filter.StaticFilters; +import mage.filter.common.FilterControlledPermanent; import mage.target.common.TargetCardInLibrary; import java.util.UUID; @@ -24,11 +22,9 @@ import java.util.UUID; */ public final class ForerunnerOfTheEmpire extends CardImpl { - private static final FilterCreaturePermanent filterAnyDinosaur = new FilterCreaturePermanent(SubType.DINOSAUR, "a " + SubType.DINOSAUR.toString()); - - static { - filterAnyDinosaur.add(TargetController.YOU.getControllerPredicate()); - } + private static final FilterCard filter = new FilterCard(SubType.DINOSAUR); + private static final FilterPermanent filter2 + = new FilterControlledPermanent(SubType.DINOSAUR, "Dinosaur you control"); public ForerunnerOfTheEmpire(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}"); @@ -39,23 +35,16 @@ public final class ForerunnerOfTheEmpire extends CardImpl { this.toughness = new MageInt(3); // When Forerunner of the Empire enters the battlefield, you may search your library for a Dinosaur card, reveal it, then shuffle your library and put that card on top of it. - this.addAbility( - new EntersBattlefieldTriggeredAbility( - new SearchLibraryPutOnLibraryEffect( - new TargetCardInLibrary(new FilterBySubtypeCard(SubType.DINOSAUR)), - true - ), - true - ) - ); + this.addAbility(new EntersBattlefieldTriggeredAbility( + new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary(filter), true), true + )); // Whenever a Dinosaur you control enters, you may have Forerunner of the Empire deal 1 damage to each creature. - Ability ability = new EntersBattlefieldControlledTriggeredAbility( - Zone.BATTLEFIELD, - new DamageAllEffect(1, new FilterCreaturePermanent()).setText("have {this} deal 1 damage to each creature"), - filterAnyDinosaur, - true); - this.addAbility(ability); + this.addAbility(new EntersBattlefieldAllTriggeredAbility( + new DamageAllEffect(1, StaticFilters.FILTER_PERMANENT_CREATURE) + .setText("have {this} deal 1 damage to each creature"), + filter2, true + )); } private ForerunnerOfTheEmpire(final ForerunnerOfTheEmpire card) { diff --git a/Mage.Sets/src/mage/cards/f/ForerunnerOfTheHeralds.java b/Mage.Sets/src/mage/cards/f/ForerunnerOfTheHeralds.java index a2acbccc45e..7acdee5b7cc 100644 --- a/Mage.Sets/src/mage/cards/f/ForerunnerOfTheHeralds.java +++ b/Mage.Sets/src/mage/cards/f/ForerunnerOfTheHeralds.java @@ -1,34 +1,35 @@ package mage.cards.f; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; +import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.search.SearchLibraryPutOnLibraryEffect; -import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.TargetController; +import mage.constants.SubType; import mage.counters.CounterType; +import mage.filter.FilterCard; import mage.filter.FilterPermanent; -import mage.filter.common.FilterBySubtypeCard; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; import mage.target.common.TargetCardInLibrary; +import java.util.UUID; + /** - * * @author JayDi85 */ public final class ForerunnerOfTheHeralds extends CardImpl { - private static final FilterPermanent filterAnotherMerfolk = new FilterPermanent(SubType.MERFOLK, "another " + SubType.MERFOLK.toString()); + private static final FilterCard filter = new FilterCard(SubType.MERFOLK); + private static final FilterPermanent filter2 + = new FilterControlledPermanent(SubType.MERFOLK, "another Merfolk you control"); + static { - filterAnotherMerfolk.add(AnotherPredicate.instance); - filterAnotherMerfolk.add(TargetController.YOU.getControllerPredicate()); + filter2.add(AnotherPredicate.instance); } public ForerunnerOfTheHeralds(UUID ownerId, CardSetInfo setInfo) { @@ -39,21 +40,15 @@ public final class ForerunnerOfTheHeralds extends CardImpl { this.power = new MageInt(3); this.toughness = new MageInt(2); - // When Forerunner of the Heralds enters the battlefield, you may search your library for a Merfolk card, reveal it, then shuffle your library and put that card on top of it. - this.addAbility( - new EntersBattlefieldTriggeredAbility( - new SearchLibraryPutOnLibraryEffect( - new TargetCardInLibrary(new FilterBySubtypeCard(SubType.MERFOLK)), - true - ), - true - ) - ); + this.addAbility(new EntersBattlefieldTriggeredAbility( + new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary(filter), true), true + )); // Whenever another Merfolk you control enters, put a +1/+1 counter on Forerunner of the Heralds. - Ability ability = new EntersBattlefieldControlledTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), filterAnotherMerfolk); - this.addAbility(ability); + this.addAbility(new EntersBattlefieldAllTriggeredAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance()), filter2 + )); } private ForerunnerOfTheHeralds(final ForerunnerOfTheHeralds card) { diff --git a/Mage.Sets/src/mage/cards/f/ForerunnerOfTheLegion.java b/Mage.Sets/src/mage/cards/f/ForerunnerOfTheLegion.java index 7876f62aff6..fe59885e4d2 100644 --- a/Mage.Sets/src/mage/cards/f/ForerunnerOfTheLegion.java +++ b/Mage.Sets/src/mage/cards/f/ForerunnerOfTheLegion.java @@ -1,32 +1,35 @@ - package mage.cards.f; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; +import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.search.SearchLibraryPutOnLibraryEffect; -import mage.constants.*; 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.FilterBySubtypeCard; +import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author JayDi85 */ public final class ForerunnerOfTheLegion extends CardImpl { - private static final FilterPermanent filterAnotherVampire = new FilterPermanent(SubType.VAMPIRE, "another " + SubType.VAMPIRE.toString()); + private static final FilterCard filter = new FilterCard(SubType.VAMPIRE); + private static final FilterPermanent filter2 + = new FilterControlledPermanent(SubType.VAMPIRE, "another Vampire you control"); + static { - filterAnotherVampire.add(AnotherPredicate.instance); - filterAnotherVampire.add(TargetController.YOU.getControllerPredicate()); + filter2.add(AnotherPredicate.instance); } public ForerunnerOfTheLegion(UUID ownerId, CardSetInfo setInfo) { @@ -38,18 +41,12 @@ public final class ForerunnerOfTheLegion extends CardImpl { this.toughness = new MageInt(2); // When Forerunner of the Legion enters the battlefield, you may search your library for a Vampire card, reveal it, then shuffle your library and put that card on top of it. - this.addAbility( - new EntersBattlefieldTriggeredAbility( - new SearchLibraryPutOnLibraryEffect( - new TargetCardInLibrary(new FilterBySubtypeCard(SubType.VAMPIRE)), - true - ), - true - ) - ); + this.addAbility(new EntersBattlefieldTriggeredAbility( + new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary(filter), true), true + )); // Whenever another Vampire you control enters, target creature gets +1/+1 until end of turn. - Ability ability = new EntersBattlefieldControlledTriggeredAbility(new BoostTargetEffect(1,1, Duration.EndOfTurn), filterAnotherVampire); + Ability ability = new EntersBattlefieldAllTriggeredAbility(new BoostTargetEffect(1, 1), filter2); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/h/HauntingVoyage.java b/Mage.Sets/src/mage/cards/h/HauntingVoyage.java index 345561f7f42..ee33c73254d 100644 --- a/Mage.Sets/src/mage/cards/h/HauntingVoyage.java +++ b/Mage.Sets/src/mage/cards/h/HauntingVoyage.java @@ -1,28 +1,26 @@ package mage.cards.h; -import java.util.LinkedHashSet; -import java.util.Set; -import java.util.UUID; - import mage.abilities.Ability; import mage.abilities.condition.common.ForetoldCondition; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.ChooseCreatureTypeEffect; import mage.abilities.keyword.ForetellAbility; -import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.CardsImpl; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterBySubtypeCard; +import mage.filter.FilterCard; import mage.game.Game; import mage.players.Player; +import mage.target.TargetCard; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author weirddan455 */ public final class HauntingVoyage extends CardImpl { @@ -70,30 +68,15 @@ class HauntingVoyageEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); SubType chosenSubType = ChooseCreatureTypeEffect.getChosenCreatureType(source.getSourceId(), game); - if (controller != null && chosenSubType != null) { - Set cardsToBattlefield = new LinkedHashSet<>(); - if (!ForetoldCondition.instance.apply(game, source)) { - TargetCardInYourGraveyard target = new TargetCardInYourGraveyard(0, 2, new FilterBySubtypeCard(chosenSubType), true); - controller.chooseTarget(outcome, target, source, game); - for (UUID cardId : target.getTargets()) { - Card card = game.getCard(cardId); - if (card != null) { - cardsToBattlefield.add(card); - } - } - } else { - for (UUID cardId : controller.getGraveyard()) { - Card card = game.getCard(cardId); - if (card != null && card.hasSubtype(chosenSubType, game)) { - cardsToBattlefield.add(card); - } - } - } - if (!cardsToBattlefield.isEmpty()) { - controller.moveCards(cardsToBattlefield, Zone.BATTLEFIELD, source, game); - return true; - } + if (controller == null || chosenSubType == null) { + return false; } - return false; + FilterCard filter = new FilterCard(chosenSubType); + if (ForetoldCondition.instance.apply(game, source)) { + return controller.moveCards(controller.getGraveyard().getCards(filter, game), Zone.BATTLEFIELD, source, game); + } + TargetCard target = new TargetCardInYourGraveyard(0, 2, filter, true); + controller.chooseTarget(outcome, target, source, game); + return controller.moveCards(new CardsImpl(target.getTargets()), Zone.BATTLEFIELD, source, game); } } diff --git a/Mage.Sets/src/mage/cards/h/HonoredKnightCaptain.java b/Mage.Sets/src/mage/cards/h/HonoredKnightCaptain.java index a88998a3287..0108ea30338 100644 --- a/Mage.Sets/src/mage/cards/h/HonoredKnightCaptain.java +++ b/Mage.Sets/src/mage/cards/h/HonoredKnightCaptain.java @@ -13,7 +13,6 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.filter.FilterCard; -import mage.filter.common.FilterBySubtypeCard; import mage.game.permanent.token.HumanSoldierToken; import mage.target.common.TargetCardInLibrary; @@ -24,7 +23,7 @@ import java.util.UUID; */ public final class HonoredKnightCaptain extends CardImpl { - private static final FilterCard filter = new FilterBySubtypeCard(SubType.EQUIPMENT); + private static final FilterCard filter = new FilterCard(SubType.EQUIPMENT); public HonoredKnightCaptain(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); diff --git a/Mage.Sets/src/mage/cards/i/ImperialHellkite.java b/Mage.Sets/src/mage/cards/i/ImperialHellkite.java index d896db14b09..5aae2539a15 100644 --- a/Mage.Sets/src/mage/cards/i/ImperialHellkite.java +++ b/Mage.Sets/src/mage/cards/i/ImperialHellkite.java @@ -1,11 +1,8 @@ - package mage.cards.i; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.TurnedFaceUpSourceTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.MorphAbility; @@ -13,31 +10,34 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterBySubtypeCard; +import mage.filter.FilterCard; import mage.target.common.TargetCardInLibrary; +import java.util.UUID; + /** - * * @author fireshoes */ public final class ImperialHellkite extends CardImpl { - + + private static final FilterCard filter = new FilterCard(SubType.DRAGON); + public ImperialHellkite(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{R}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{R}{R}"); this.subtype.add(SubType.DRAGON); this.power = new MageInt(6); this.toughness = new MageInt(6); // Flying this.addAbility(FlyingAbility.getInstance()); - + // Morph {6}{R}{R} this.addAbility(new MorphAbility(this, new ManaCostsImpl<>("{6}{R}{R}"))); - + // When Imperial Hellkite is turned face up, you may search your library for a Dragon card, reveal it, and put it into your hand. If you do, shuffle your library. - Effect effect = new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 1, new FilterBySubtypeCard(SubType.DRAGON)), true); - effect.setText("you may search your library for a Dragon card, reveal it, put it into your hand, then shuffle"); - this.addAbility(new TurnedFaceUpSourceTriggeredAbility(effect)); + this.addAbility(new TurnedFaceUpSourceTriggeredAbility( + new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true), false, true + )); } private ImperialHellkite(final ImperialHellkite card) { diff --git a/Mage.Sets/src/mage/cards/i/InfernalCaretaker.java b/Mage.Sets/src/mage/cards/i/InfernalCaretaker.java index 550e2064979..e5144999d67 100644 --- a/Mage.Sets/src/mage/cards/i/InfernalCaretaker.java +++ b/Mage.Sets/src/mage/cards/i/InfernalCaretaker.java @@ -1,11 +1,8 @@ - package mage.cards.i; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.TurnedFaceUpSourceTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.ReturnToHandFromGraveyardAllEffect; import mage.abilities.keyword.MorphAbility; import mage.cards.CardImpl; @@ -13,18 +10,18 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.filter.FilterCard; -import mage.filter.common.FilterBySubtypeCard; + +import java.util.UUID; /** - * * @author cg5 */ public final class InfernalCaretaker extends CardImpl { - private static FilterCard zombieCard = new FilterBySubtypeCard(SubType.ZOMBIE); - + private static FilterCard zombieCard = new FilterCard(SubType.ZOMBIE); + public InfernalCaretaker(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.CLERIC); this.power = new MageInt(2); @@ -32,11 +29,10 @@ public final class InfernalCaretaker extends CardImpl { // Morph {3}{B} this.addAbility(new MorphAbility(this, new ManaCostsImpl<>("{3}{B}"))); - + // When Infernal Caretaker is turned face up, return all Zombie cards from all graveyards to their owners' hands. - Effect effect = new ReturnToHandFromGraveyardAllEffect(zombieCard); - effect.setText("return all Zombie cards from all graveyards to their owners' hands"); - this.addAbility(new TurnedFaceUpSourceTriggeredAbility(effect)); + this.addAbility(new TurnedFaceUpSourceTriggeredAbility(new ReturnToHandFromGraveyardAllEffect(zombieCard) + .setText("return all Zombie cards from all graveyards to their owners' hands"))); } private InfernalCaretaker(final InfernalCaretaker card) { @@ -47,4 +43,4 @@ public final class InfernalCaretaker extends CardImpl { public InfernalCaretaker copy() { return new InfernalCaretaker(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/k/KnightOfTheWhiteOrchid.java b/Mage.Sets/src/mage/cards/k/KnightOfTheWhiteOrchid.java index aeac56a3b82..b45d6879bb0 100644 --- a/Mage.Sets/src/mage/cards/k/KnightOfTheWhiteOrchid.java +++ b/Mage.Sets/src/mage/cards/k/KnightOfTheWhiteOrchid.java @@ -12,7 +12,6 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.filter.FilterCard; import mage.filter.StaticFilters; -import mage.filter.common.FilterBySubtypeCard; import mage.target.common.TargetCardInLibrary; import java.util.UUID; @@ -22,7 +21,7 @@ import java.util.UUID; */ public final class KnightOfTheWhiteOrchid extends CardImpl { - private static final FilterCard filter = new FilterBySubtypeCard(SubType.PLAINS); + private static final FilterCard filter = new FilterCard(SubType.PLAINS); private static final Condition condition = new OpponentControlsMoreCondition(StaticFilters.FILTER_LANDS); public KnightOfTheWhiteOrchid(UUID ownerId, CardSetInfo setInfo) { diff --git a/Mage.Sets/src/mage/cards/k/KorCartographer.java b/Mage.Sets/src/mage/cards/k/KorCartographer.java index 7e8597e6836..305f2e19512 100644 --- a/Mage.Sets/src/mage/cards/k/KorCartographer.java +++ b/Mage.Sets/src/mage/cards/k/KorCartographer.java @@ -1,7 +1,5 @@ - package mage.cards.k; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; @@ -9,17 +7,20 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.common.FilterBySubtypeCard; +import mage.filter.FilterCard; import mage.target.common.TargetCardInLibrary; +import java.util.UUID; + /** - * * @author North */ public final class KorCartographer extends CardImpl { + private static final FilterCard filter = new FilterCard(SubType.PLAINS); + public KorCartographer(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}"); this.subtype.add(SubType.KOR); this.subtype.add(SubType.SCOUT); @@ -27,7 +28,9 @@ public final class KorCartographer extends CardImpl { this.toughness = new MageInt(2); // When Kor Cartographer enters the battlefield, you may search your library for a Plains card, put it onto the battlefield tapped, then shuffle your library. - this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(new FilterBySubtypeCard(SubType.PLAINS)), true), true)); + this.addAbility(new EntersBattlefieldTriggeredAbility( + new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), true), true + )); } private KorCartographer(final KorCartographer card) { diff --git a/Mage.Sets/src/mage/cards/p/PulsarSquadronAce.java b/Mage.Sets/src/mage/cards/p/PulsarSquadronAce.java index 8ef4d238bb9..6436185825a 100644 --- a/Mage.Sets/src/mage/cards/p/PulsarSquadronAce.java +++ b/Mage.Sets/src/mage/cards/p/PulsarSquadronAce.java @@ -11,7 +11,6 @@ import mage.constants.PutCards; import mage.constants.SubType; import mage.counters.CounterType; import mage.filter.FilterCard; -import mage.filter.common.FilterBySubtypeCard; import java.util.UUID; @@ -20,7 +19,7 @@ import java.util.UUID; */ public final class PulsarSquadronAce extends CardImpl { - private static final FilterCard filter = new FilterBySubtypeCard(SubType.SPACECRAFT); + private static final FilterCard filter = new FilterCard(SubType.SPACECRAFT); public PulsarSquadronAce(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); diff --git a/Mage.Sets/src/mage/cards/t/TempleOfTheDragonQueen.java b/Mage.Sets/src/mage/cards/t/TempleOfTheDragonQueen.java index f680b5d10e8..cf986419a7e 100644 --- a/Mage.Sets/src/mage/cards/t/TempleOfTheDragonQueen.java +++ b/Mage.Sets/src/mage/cards/t/TempleOfTheDragonQueen.java @@ -15,7 +15,7 @@ import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterBySubtypeCard; +import mage.filter.FilterCard; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; @@ -54,7 +54,7 @@ public final class TempleOfTheDragonQueen extends CardImpl { class TempleOfTheDragonQueenEffect extends OneShotEffect { - private static final FilterBySubtypeCard filter = new FilterBySubtypeCard(SubType.DRAGON); + private static final FilterCard filter = new FilterCard(SubType.DRAGON); public TempleOfTheDragonQueenEffect() { super(Outcome.Tap); diff --git a/Mage.Sets/src/mage/cards/t/TombstoneCareerCriminal.java b/Mage.Sets/src/mage/cards/t/TombstoneCareerCriminal.java index b38f4a67822..3b8066acb61 100644 --- a/Mage.Sets/src/mage/cards/t/TombstoneCareerCriminal.java +++ b/Mage.Sets/src/mage/cards/t/TombstoneCareerCriminal.java @@ -12,7 +12,6 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.SuperType; import mage.filter.FilterCard; -import mage.filter.common.FilterBySubtypeCard; import mage.target.common.TargetCardInYourGraveyard; import java.util.UUID; @@ -22,8 +21,8 @@ import java.util.UUID; */ public final class TombstoneCareerCriminal extends CardImpl { - private static final FilterCard filter = new FilterBySubtypeCard(SubType.VILLAIN); - private static final FilterCard filter2 = new FilterBySubtypeCard(SubType.VILLAIN, "Villain spells"); + private static final FilterCard filter = new FilterCard(SubType.VILLAIN); + private static final FilterCard filter2 = new FilterCard(SubType.VILLAIN, "Villain spells"); public TombstoneCareerCriminal(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); diff --git a/Mage/src/main/java/mage/filter/FilterCard.java b/Mage/src/main/java/mage/filter/FilterCard.java index c4eb8cf57ef..553fac22335 100644 --- a/Mage/src/main/java/mage/filter/FilterCard.java +++ b/Mage/src/main/java/mage/filter/FilterCard.java @@ -2,6 +2,7 @@ package mage.filter; import mage.abilities.Ability; import mage.cards.Card; +import mage.constants.SubType; import mage.constants.TargetController; import mage.filter.predicate.ObjectSourcePlayer; import mage.filter.predicate.ObjectSourcePlayerPredicate; @@ -29,7 +30,18 @@ public class FilterCard extends FilterObject { } public FilterCard(String name) { + this(null, name); + } + + public FilterCard(SubType subType) { + this(subType, subType + " card"); + } + + public FilterCard(SubType subType, String name) { super(name); + if (subType != null) { + this.add(subType.getPredicate()); + } } protected FilterCard(final FilterCard filter) { diff --git a/Mage/src/main/java/mage/filter/common/FilterBySubtypeCard.java b/Mage/src/main/java/mage/filter/common/FilterBySubtypeCard.java deleted file mode 100644 index b5bb2f023e4..00000000000 --- a/Mage/src/main/java/mage/filter/common/FilterBySubtypeCard.java +++ /dev/null @@ -1,31 +0,0 @@ -package mage.filter.common; - -import mage.constants.SubType; -import mage.filter.FilterCard; - -/** - * TODO: Collapse this into FilterCard - * - * @author LevelX2 - */ - -public class FilterBySubtypeCard extends FilterCard { - - public FilterBySubtypeCard(SubType subtype) { - this(subtype, subtype + " card"); - } - - public FilterBySubtypeCard(SubType subtype, String name) { - super(name); - this.add(subtype.getPredicate()); - } - - protected FilterBySubtypeCard(final FilterBySubtypeCard filter) { - super(filter); - } - - @Override - public FilterBySubtypeCard copy() { - return new FilterBySubtypeCard(this); - } -}