mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
remove FilterBySubtypeCard
This commit is contained in:
parent
008aa810d9
commit
68f2d7468c
20 changed files with 147 additions and 206 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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}");
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Card> 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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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}");
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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}");
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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}");
|
||||
|
|
|
|||
|
|
@ -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<Card> {
|
|||
}
|
||||
|
||||
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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue