mirror of
https://github.com/correl/mage.git
synced 2024-11-14 11:09:31 +00:00
Merge pull request #10369 from xenohedron/refactor-search
Refactor search library effect classes to clean up text generation
This commit is contained in:
commit
807a6c95f1
286 changed files with 377 additions and 469 deletions
|
@ -31,7 +31,7 @@ public final class AcademyRector extends CardImpl {
|
||||||
// When Academy Rector dies, you may exile it. If you do, search your library for an enchantment card, put that card onto the battlefield, then shuffle your library.
|
// When Academy Rector dies, you may exile it. If you do, search your library for an enchantment card, put that card onto the battlefield, then shuffle your library.
|
||||||
this.addAbility(new DiesSourceTriggeredAbility(
|
this.addAbility(new DiesSourceTriggeredAbility(
|
||||||
new DoIfCostPaid(
|
new DoIfCostPaid(
|
||||||
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(new FilterEnchantmentCard())),
|
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(new FilterEnchantmentCard()), false, true),
|
||||||
new ExileSourceFromGraveCost(),
|
new ExileSourceFromGraveCost(),
|
||||||
"Exile to search for an enchantment?"
|
"Exile to search for an enchantment?"
|
||||||
), false
|
), false
|
||||||
|
|
|
@ -35,7 +35,7 @@ public final class AinokGuide extends CardImpl {
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()));
|
Ability ability = new EntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()));
|
||||||
|
|
||||||
// * Search your library for a basic land card, reveal it, then shuffle your library and put that card on top of it.
|
// * Search your library for a basic land card, reveal it, then shuffle your library and put that card on top of it.
|
||||||
Mode mode = new Mode(new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true));
|
Mode mode = new Mode(new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true));
|
||||||
ability.addMode(mode);
|
ability.addMode(mode);
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ public final class AlpineGuide extends CardImpl {
|
||||||
|
|
||||||
// When Alpine Guide enters the battlefield, you may search your library for a Mountain card, put that card onto the battlefield tapped, then shuffle your library.
|
// When Alpine Guide enters the battlefield, you may search your library for a Mountain card, put that card onto the battlefield tapped, then shuffle your library.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInPlayEffect(
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInPlayEffect(
|
||||||
new TargetCardInLibrary(filter), true
|
new TargetCardInLibrary(filter), true, true
|
||||||
), true));
|
), true));
|
||||||
|
|
||||||
// Alpine Guide attacks each combat if able.
|
// Alpine Guide attacks each combat if able.
|
||||||
|
|
|
@ -51,7 +51,7 @@ public final class AlpineHoundmaster extends CardImpl {
|
||||||
|
|
||||||
// When Alpine Houndmaster enters the battlefield, you may search your library for a card named Alpine Watchdog and/or a card named Igneous Cur, reveal them, put them into your hand, then shuffle your library.
|
// When Alpine Houndmaster enters the battlefield, you may search your library for a card named Alpine Watchdog and/or a card named Igneous Cur, reveal them, put them into your hand, then shuffle your library.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
|
||||||
new TargetCardWithDifferentNameInLibrary(0, 2, filter2), true, true
|
new TargetCardWithDifferentNameInLibrary(0, 2, filter2), true
|
||||||
).setText("search your library for a card named Alpine Watchdog and/or a card named Igneous Cur, reveal them, put them into your hand, then shuffle"), true));
|
).setText("search your library for a card named Alpine Watchdog and/or a card named Igneous Cur, reveal them, put them into your hand, then shuffle"), true));
|
||||||
|
|
||||||
// Whenever Alpine Houndmaster attacks, it gets +X/+0 until end of turn, where X is the number of other attacking creatures.
|
// Whenever Alpine Houndmaster attacks, it gets +X/+0 until end of turn, where X is the number of other attacking creatures.
|
||||||
|
|
|
@ -27,7 +27,7 @@ public final class ArmillarySphere extends CardImpl {
|
||||||
|
|
||||||
// {2}, {tap}, Sacrifice Armillary Sphere: Search your library for up to two basic land cards, reveal them, and put them into your hand. Then shuffle your library.
|
// {2}, {tap}, Sacrifice Armillary Sphere: Search your library for up to two basic land cards, reveal them, and put them into your hand. Then shuffle your library.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
||||||
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_LANDS), true, true),
|
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_LANDS), true),
|
||||||
new GenericManaCost(2));
|
new GenericManaCost(2));
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
ability.addCost(new SacrificeSourceCost());
|
ability.addCost(new SacrificeSourceCost());
|
||||||
|
|
|
@ -87,6 +87,6 @@ class AssemblyHallEffect extends OneShotEffect {
|
||||||
String nameToSearch = CardUtil.getCardNameForSameNameSearch(cardToReveal);
|
String nameToSearch = CardUtil.getCardNameForSameNameSearch(cardToReveal);
|
||||||
FilterCard filterCard = new FilterCard("card named " + nameToSearch);
|
FilterCard filterCard = new FilterCard("card named " + nameToSearch);
|
||||||
filterCard.add(new NamePredicate(nameToSearch));
|
filterCard.add(new NamePredicate(nameToSearch));
|
||||||
return new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filterCard), true, true).apply(game, source);
|
return new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filterCard), true).apply(game, source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ public final class Avarax extends CardImpl {
|
||||||
|
|
||||||
// When Avarax enters the battlefield, you may search your library for a card named Avarax, reveal it, and put it into your hand. If you do, shuffle your library.
|
// When Avarax enters the battlefield, you may search your library for a card named Avarax, reveal it, and put it into your hand. If you do, shuffle your library.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
|
||||||
new TargetCardInLibrary(1, filter), true, true
|
new TargetCardInLibrary(1, filter), true
|
||||||
), true));
|
), true));
|
||||||
|
|
||||||
// {1}{R}: Avarax gets +1/+0 until end of turn.
|
// {1}{R}: Avarax gets +1/+0 until end of turn.
|
||||||
|
|
|
@ -47,7 +47,7 @@ public final class AyarasOathsworn extends CardImpl {
|
||||||
"search your library for a card, put it into your hand, then shuffle."
|
"search your library for a card, put it into your hand, then shuffle."
|
||||||
);
|
);
|
||||||
ability.addEffect(new ConditionalOneShotEffect(
|
ability.addEffect(new ConditionalOneShotEffect(
|
||||||
new SearchLibraryPutInHandEffect(new TargetCardInLibrary()), condition2
|
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(), false), condition2
|
||||||
));
|
));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ public final class BantPanorama extends CardImpl {
|
||||||
|
|
||||||
// {1}, {T}, Sacrifice Bant Panorama: Search your library for a basic Forest, Plains, or Island card and put it onto the battlefield tapped. Then shuffle your library.
|
// {1}, {T}, Sacrifice Bant Panorama: Search your library for a basic Forest, Plains, or Island card and put it onto the battlefield tapped. Then shuffle your library.
|
||||||
TargetCardInLibrary target = new TargetCardInLibrary(filter);
|
TargetCardInLibrary target = new TargetCardInLibrary(filter);
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(target, true, Outcome.PutLandInPlay), new GenericManaCost(1));
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(target, true), new GenericManaCost(1));
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
ability.addCost(new SacrificeSourceCost());
|
ability.addCost(new SacrificeSourceCost());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
@ -34,7 +34,7 @@ public final class BattalionFootSoldier extends CardImpl {
|
||||||
|
|
||||||
// When Battalion Foot Soldier enters the battlefield, you may search your library for any number of cards named Battalion Foot Soldier, reveal them, put them into your hand, then shuffle your library.
|
// When Battalion Foot Soldier enters the battlefield, you may search your library for any number of cards named Battalion Foot Soldier, reveal them, put them into your hand, then shuffle your library.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
|
||||||
new TargetCardInLibrary(0, Integer.MAX_VALUE, filter), true, true
|
new TargetCardInLibrary(0, Integer.MAX_VALUE, filter), true
|
||||||
), true));
|
), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -62,7 +62,7 @@ class BeginTheInvasionEffect extends OneShotEffect {
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
int xValue = source.getManaCostsToPay().getX();
|
int xValue = source.getManaCostsToPay().getX();
|
||||||
return new SearchLibraryPutInPlayEffect(
|
return new SearchLibraryPutInPlayEffect(
|
||||||
new TargetCardWithDifferentNameInLibrary(0, xValue, filter), false, true
|
new TargetCardWithDifferentNameInLibrary(0, xValue, filter), false
|
||||||
).apply(game, source);
|
).apply(game, source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ public final class BeholdTheBeyond extends CardImpl {
|
||||||
// Discard your hand. Search your library for three cards and put those cards into your hand. Then shuffle your library.
|
// Discard your hand. Search your library for three cards and put those cards into your hand. Then shuffle your library.
|
||||||
this.getSpellAbility().addEffect(new DiscardHandControllerEffect());
|
this.getSpellAbility().addEffect(new DiscardHandControllerEffect());
|
||||||
TargetCardInLibrary target = new TargetCardInLibrary(0, 3, new FilterCard("cards"));
|
TargetCardInLibrary target = new TargetCardInLibrary(0, 3, new FilterCard("cards"));
|
||||||
Effect effect = new SearchLibraryPutInHandEffect(target);
|
Effect effect = new SearchLibraryPutInHandEffect(target, false);
|
||||||
effect.setText("Search your library for three cards, put those cards into your hand, then shuffle");
|
effect.setText("Search your library for three cards, put those cards into your hand, then shuffle");
|
||||||
this.getSpellAbility().addEffect(effect);
|
this.getSpellAbility().addEffect(effect);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ public final class BeneathTheSands extends CardImpl {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{G}");
|
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{G}");
|
||||||
|
|
||||||
// Search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library.
|
// Search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library.
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true));
|
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true));
|
||||||
|
|
||||||
// Cycling {2}
|
// Cycling {2}
|
||||||
this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}")));
|
this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}")));
|
||||||
|
|
|
@ -27,7 +27,7 @@ public final class BeseechTheQueen extends CardImpl {
|
||||||
|
|
||||||
// <i>({2B} can be paid with any two mana or with {B}. This card's converted mana cost is 6.)</i>
|
// <i>({2B} can be paid with any two mana or with {B}. This card's converted mana cost is 6.)</i>
|
||||||
// Search your library for a card with converted mana cost less than or equal to the number of lands you control, reveal it, and put it into your hand. Then shuffle your library.
|
// Search your library for a card with converted mana cost less than or equal to the number of lands you control, reveal it, and put it into your hand. Then shuffle your library.
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true, true));
|
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private BeseechTheQueen(final BeseechTheQueen card) {
|
private BeseechTheQueen(final BeseechTheQueen card) {
|
||||||
|
|
|
@ -30,7 +30,7 @@ public final class BibFortuna extends CardImpl {
|
||||||
this.toughness = new MageInt(1);
|
this.toughness = new MageInt(1);
|
||||||
|
|
||||||
// When Bib Fortuna enters the battlefield search your library for a card then shuffle your library and put in on top. You lose 1 life.
|
// When Bib Fortuna enters the battlefield search your library for a card then shuffle your library and put in on top. You lose 1 life.
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary()), false);
|
Ability ability = new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary(), false), false);
|
||||||
ability.addEffect(new LoseLifeSourceControllerEffect(1));
|
ability.addEffect(new LoseLifeSourceControllerEffect(1));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ public final class BitterthornNissasAnimus extends CardImpl {
|
||||||
|
|
||||||
// Whenever equipped creature attacks, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle.
|
// Whenever equipped creature attacks, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle.
|
||||||
this.addAbility(new AttacksAttachedTriggeredAbility(new SearchLibraryPutInPlayEffect(
|
this.addAbility(new AttacksAttachedTriggeredAbility(new SearchLibraryPutInPlayEffect(
|
||||||
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND_A), true, true
|
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND_A), true
|
||||||
), true));
|
), true));
|
||||||
|
|
||||||
// Equip {3}
|
// Equip {3}
|
||||||
|
|
|
@ -31,7 +31,7 @@ public final class BlightedWoodland extends CardImpl {
|
||||||
|
|
||||||
// {3}{G}, {T}, Sacrifice Blighted Woodland: Search your library for up to two basic land cards and put them onto the battlefield tapped. Then shuffle your library.
|
// {3}{G}, {T}, Sacrifice Blighted Woodland: Search your library for up to two basic land cards and put them onto the battlefield tapped. Then shuffle your library.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
||||||
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_LANDS), true, true),
|
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_LANDS), true),
|
||||||
new ManaCostsImpl<>("{3}{G}"));
|
new ManaCostsImpl<>("{3}{G}"));
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
ability.addCost(new SacrificeSourceCost());
|
ability.addCost(new SacrificeSourceCost());
|
||||||
|
|
|
@ -43,7 +43,7 @@ public final class BloodSpeaker extends CardImpl {
|
||||||
// At the beginning of your upkeep, you may sacrifice Blood Speaker. If you do, search your library for a Demon card, reveal that card, and put it into your hand. Then shuffle your library.
|
// At the beginning of your upkeep, you may sacrifice Blood Speaker. If you do, search your library for a Demon card, reveal that card, and put it into your hand. Then shuffle your library.
|
||||||
Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD,
|
Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD,
|
||||||
new DoIfCostPaid(
|
new DoIfCostPaid(
|
||||||
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filterCard), true, true, "search your library for "),
|
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filterCard), true, true),
|
||||||
new SacrificeSourceCost()
|
new SacrificeSourceCost()
|
||||||
),
|
),
|
||||||
TargetController.YOU,
|
TargetController.YOU,
|
||||||
|
|
|
@ -11,7 +11,6 @@ import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Outcome;
|
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.filter.FilterCard;
|
import mage.filter.FilterCard;
|
||||||
|
@ -40,7 +39,7 @@ public final class BogbrewWitch extends CardImpl {
|
||||||
// {2}, {T}: Search your library for a card named Festering Newt or Bubbling Cauldron, put it onto the battlefield tapped, then shuffle your library.
|
// {2}, {T}: Search your library for a card named Festering Newt or Bubbling Cauldron, put it onto the battlefield tapped, then shuffle your library.
|
||||||
TargetCardInLibrary target = new TargetCardInLibrary(1, 1, new FilterCard(filter));
|
TargetCardInLibrary target = new TargetCardInLibrary(1, 1, new FilterCard(filter));
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
||||||
new SearchLibraryPutInPlayEffect(target, true, true, Outcome.PutCardInPlay),
|
new SearchLibraryPutInPlayEffect(target, true),
|
||||||
new ManaCostsImpl<>("{2}"));
|
new ManaCostsImpl<>("{2}"));
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
@ -34,7 +34,7 @@ public final class BoggartHarbinger extends CardImpl {
|
||||||
// When Boggart Harbinger enters the battlefield, you may search your library for a Goblin card, reveal it,
|
// When Boggart Harbinger enters the battlefield, you may search your library for a Goblin card, reveal it,
|
||||||
// then shuffle your library and put that card on top of it.
|
// then shuffle your library and put that card on top of it.
|
||||||
TargetCardInLibrary target = new TargetCardInLibrary(filter);
|
TargetCardInLibrary target = new TargetCardInLibrary(filter);
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(target, true, true),true));
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(target, true),true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private BoggartHarbinger(final BoggartHarbinger card) {
|
private BoggartHarbinger(final BoggartHarbinger card) {
|
||||||
|
|
|
@ -27,7 +27,7 @@ public final class BorderlandRanger extends CardImpl {
|
||||||
this.toughness = new MageInt(2);
|
this.toughness = new MageInt(2);
|
||||||
|
|
||||||
// When Borderland Ranger enters the battlefield, you may search your library for a basic land card, reveal it, and put it into your hand. If you do, shuffle your library.
|
// When Borderland Ranger enters the battlefield, you may search your library for a basic land card, reveal it, and put it into your hand. If you do, shuffle your library.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true), true));
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private BorderlandRanger(final BorderlandRanger card) {
|
private BorderlandRanger(final BorderlandRanger card) {
|
||||||
|
|
|
@ -45,7 +45,7 @@ public final class BoseijuReachesSkyward extends CardImpl {
|
||||||
this, SagaChapter.CHAPTER_I,
|
this, SagaChapter.CHAPTER_I,
|
||||||
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(
|
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(
|
||||||
0, 2, filter
|
0, 2, filter
|
||||||
), true, true)
|
), true)
|
||||||
);
|
);
|
||||||
|
|
||||||
// II — Put up to one target land card from your graveyard on top of your library.
|
// II — Put up to one target land card from your graveyard on top of your library.
|
||||||
|
|
|
@ -44,7 +44,7 @@ public final class Bossk extends CardImpl {
|
||||||
this.addAbility(new BosskTriggeredAbility());
|
this.addAbility(new BosskTriggeredAbility());
|
||||||
|
|
||||||
// <i>Bounty</i> — Whenever a creature an opponent controls with a bounty counter on it dies, you may search your library for a basic land card, reveal it, and put it in to your hand. If you do, shuffle your library.
|
// <i>Bounty</i> — Whenever a creature an opponent controls with a bounty counter on it dies, you may search your library for a basic land card, reveal it, and put it in to your hand. If you do, shuffle your library.
|
||||||
this.addAbility(new BountyAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true), true));
|
this.addAbility(new BountyAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Bossk(final Bossk card) {
|
private Bossk(final Bossk card) {
|
||||||
|
|
|
@ -37,7 +37,7 @@ public final class BringerOfTheBlackDawn extends CardImpl {
|
||||||
// Trample
|
// Trample
|
||||||
this.addAbility(TrampleAbility.getInstance());
|
this.addAbility(TrampleAbility.getInstance());
|
||||||
// At the beginning of your upkeep, you may pay 2 life. If you do, search your library for a card, then shuffle your library and put that card on top of it.
|
// At the beginning of your upkeep, you may pay 2 life. If you do, search your library for a card, then shuffle your library and put that card on top of it.
|
||||||
Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new DoIfCostPaid(new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary()), new PayLifeCost(2)), TargetController.YOU, false);
|
Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new DoIfCostPaid(new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary(), false), new PayLifeCost(2)), TargetController.YOU, false);
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ public final class BrokersHideout extends CardImpl {
|
||||||
|
|
||||||
// When Brokers Hideout enters the battlefield, sacrifice it. When you do, search your library for a basic Forest, Plains, or Island card, put it onto the battlefield tapped, then shuffle and you gain 1 life.
|
// When Brokers Hideout enters the battlefield, sacrifice it. When you do, search your library for a basic Forest, Plains, or Island card, put it onto the battlefield tapped, then shuffle and you gain 1 life.
|
||||||
ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility(new SearchLibraryPutInPlayEffect(
|
ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility(new SearchLibraryPutInPlayEffect(
|
||||||
new TargetCardInLibrary(filter), true, true
|
new TargetCardInLibrary(filter), true
|
||||||
), false);
|
), false);
|
||||||
ability.addEffect(new GainLifeEffect(1).concatBy("and"));
|
ability.addEffect(new GainLifeEffect(1).concatBy("and"));
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new DoWhenCostPaid(
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new DoWhenCostPaid(
|
||||||
|
|
|
@ -45,7 +45,7 @@ public final class BrutalizerExarch extends CardImpl {
|
||||||
// When Brutalizer Exarch enters the battlefield, choose one
|
// When Brutalizer Exarch enters the battlefield, choose one
|
||||||
// - Search your library for a creature card, reveal it, then shuffle your library and put that card on top of it;
|
// - Search your library for a creature card, reveal it, then shuffle your library and put that card on top of it;
|
||||||
TargetCardInLibrary target = new TargetCardInLibrary(new FilterCreatureCard("a creature card"));
|
TargetCardInLibrary target = new TargetCardInLibrary(new FilterCreatureCard("a creature card"));
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(target, true, true), false);
|
Ability ability = new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(target, true), false);
|
||||||
// or put target noncreature permanent on the bottom of its owner's library.
|
// or put target noncreature permanent on the bottom of its owner's library.
|
||||||
Mode mode = new Mode(new BrutalizerExarchEffect2());
|
Mode mode = new Mode(new BrutalizerExarchEffect2());
|
||||||
mode.addTarget(new TargetPermanent(filter));
|
mode.addTarget(new TargetPermanent(filter));
|
||||||
|
|
|
@ -33,7 +33,7 @@ public final class BurnishedHart extends CardImpl {
|
||||||
// {3}, Sacrifice Burnished Hart: Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle your library.
|
// {3}, Sacrifice Burnished Hart: Search your library for up to two basic land cards, put them onto the battlefield tapped, then shuffle your library.
|
||||||
Ability ability = new SimpleActivatedAbility(
|
Ability ability = new SimpleActivatedAbility(
|
||||||
Zone.BATTLEFIELD,
|
Zone.BATTLEFIELD,
|
||||||
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0,2, StaticFilters.FILTER_CARD_BASIC_LANDS), true, true),
|
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0,2, StaticFilters.FILTER_CARD_BASIC_LANDS), true),
|
||||||
new GenericManaCost(3));
|
new GenericManaCost(3));
|
||||||
ability.addCost(new SacrificeSourceCost());
|
ability.addCost(new SacrificeSourceCost());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
@ -38,7 +38,7 @@ public final class CabarettiCourtyard extends CardImpl {
|
||||||
|
|
||||||
// When Cabaretti Courtyard enters the battlefield, sacrifice it. When you do, search your library for a basic Mountain, Forest, or Plains card, put it onto the battlefield tapped, then shuffle and you gain 1 life.
|
// When Cabaretti Courtyard enters the battlefield, sacrifice it. When you do, search your library for a basic Mountain, Forest, or Plains card, put it onto the battlefield tapped, then shuffle and you gain 1 life.
|
||||||
ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility(new SearchLibraryPutInPlayEffect(
|
ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility(new SearchLibraryPutInPlayEffect(
|
||||||
new TargetCardInLibrary(filter), true, true
|
new TargetCardInLibrary(filter), true
|
||||||
), false);
|
), false);
|
||||||
ability.addEffect(new GainLifeEffect(1).concatBy("and"));
|
ability.addEffect(new GainLifeEffect(1).concatBy("and"));
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new DoWhenCostPaid(
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new DoWhenCostPaid(
|
||||||
|
|
|
@ -26,7 +26,7 @@ public final class CampusGuide extends CardImpl {
|
||||||
|
|
||||||
// When Campus Guide enters the battlefield, you may search your library for a basic land card, reveal it, then shuffle and put that card on top.
|
// When Campus Guide enters the battlefield, you may search your library for a basic land card, reveal it, then shuffle and put that card on top.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(
|
||||||
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true
|
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true
|
||||||
), true));
|
), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,7 @@ public final class CaptainPhasma extends CardImpl {
|
||||||
new GainAbilityControlledEffect(ability, Duration.WhileOnBattlefield, filter, false)));
|
new GainAbilityControlledEffect(ability, Duration.WhileOnBattlefield, filter, false)));
|
||||||
|
|
||||||
// {W}{U}{B}{R}{G}: Search your library for a Trooper creature card, reveal it, put it into your hand, then shuffle your library.
|
// {W}{U}{B}{R}{G}: Search your library for a Trooper creature card, reveal it, put it into your hand, then shuffle your library.
|
||||||
this.addAbility(new SimpleActivatedAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filterCard), true, true), new ManaCostsImpl<>("{W}{U}{B}{R}{G}")));
|
this.addAbility(new SimpleActivatedAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filterCard), true), new ManaCostsImpl<>("{W}{U}{B}{R}{G}")));
|
||||||
}
|
}
|
||||||
|
|
||||||
private CaptainPhasma(final CaptainPhasma card) {
|
private CaptainPhasma(final CaptainPhasma card) {
|
||||||
|
|
|
@ -28,7 +28,7 @@ public final class CateranSummons extends CardImpl {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{B}");
|
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{B}");
|
||||||
|
|
||||||
// Search your library for a Mercenary card, reveal that card, and put it into your hand. Then shuffle your library.
|
// Search your library for a Mercenary card, reveal that card, and put it into your hand. Then shuffle your library.
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true));
|
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private CateranSummons(final CateranSummons card) {
|
private CateranSummons(final CateranSummons card) {
|
||||||
|
|
|
@ -52,7 +52,7 @@ public final class ConduitOfRuin extends CardImpl {
|
||||||
|
|
||||||
// When you cast Conduit of Ruin, you may search your library for a colorless creature card with converted mana cost 7 or greater, then shuffle your library and put that card on top of it.
|
// When you cast Conduit of Ruin, you may search your library for a colorless creature card with converted mana cost 7 or greater, then shuffle your library and put that card on top of it.
|
||||||
TargetCardInLibrary target = new TargetCardInLibrary(filter);
|
TargetCardInLibrary target = new TargetCardInLibrary(filter);
|
||||||
this.addAbility(new CastSourceTriggeredAbility(new SearchLibraryPutOnLibraryEffect(target, true, true), true));
|
this.addAbility(new CastSourceTriggeredAbility(new SearchLibraryPutOnLibraryEffect(target, true), true));
|
||||||
|
|
||||||
// The first creature spell you cast each turn costs {2} less to cast.
|
// The first creature spell you cast each turn costs {2} less to cast.
|
||||||
Effect effect = new SpellsCostReductionControllerEffect(filterCost, 2);
|
Effect effect = new SpellsCostReductionControllerEffect(filterCost, 2);
|
||||||
|
|
|
@ -23,7 +23,7 @@ public final class Conflux extends CardImpl {
|
||||||
|
|
||||||
// Search your library for a white card, a blue card, a black card, a red card, and a green card. Reveal those cards and put them into your hand. Then shuffle your library.
|
// Search your library for a white card, a blue card, a black card, a red card, and a green card. Reveal those cards and put them into your hand. Then shuffle your library.
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(
|
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(
|
||||||
new ConfluxTarget(), true, true
|
new ConfluxTarget(), true
|
||||||
).setText("search your library for a white card, a blue card, a black card, a red card, and a green card. " +
|
).setText("search your library for a white card, a blue card, a black card, a red card, and a green card. " +
|
||||||
"Reveal those cards, put them into your hand, then shuffle"));
|
"Reveal those cards, put them into your hand, then shuffle"));
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ public final class CovetedPrize extends CardImpl {
|
||||||
).addHint(PartyCountHint.instance).setRuleAtTheTop(true));
|
).addHint(PartyCountHint.instance).setRuleAtTheTop(true));
|
||||||
|
|
||||||
// Search your library for a card, put it into your hand, then shuffle your library. If you have a full party, you may cast a spell with converted mana cost 4 or less from your hand without paying its mana cost.
|
// Search your library for a card, put it into your hand, then shuffle your library. If you have a full party, you may cast a spell with converted mana cost 4 or less from your hand without paying its mana cost.
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary()));
|
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(), false));
|
||||||
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
||||||
new CastFromHandForFreeEffect(filter),
|
new CastFromHandForFreeEffect(filter),
|
||||||
FullPartyCondition.instance, "If you have a full party, " +
|
FullPartyCondition.instance, "If you have a full party, " +
|
||||||
|
|
|
@ -7,7 +7,6 @@ import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Outcome;
|
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
import mage.filter.common.FilterLandCard;
|
import mage.filter.common.FilterLandCard;
|
||||||
import mage.target.common.TargetCardInLibrary;
|
import mage.target.common.TargetCardInLibrary;
|
||||||
|
@ -27,7 +26,7 @@ public final class CropRotation extends CardImpl {
|
||||||
this.getSpellAbility().addCost(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_LAND_SHORT_TEXT)));
|
this.getSpellAbility().addCost(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_LAND_SHORT_TEXT)));
|
||||||
|
|
||||||
// Search your library for a land card and put that card onto the battlefield. Then shuffle your library.
|
// Search your library for a land card and put that card onto the battlefield. Then shuffle your library.
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(new FilterLandCard()), false, Outcome.PutLandInPlay));
|
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(new FilterLandCard()), false, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private CropRotation(final CropRotation card) {
|
private CropRotation(final CropRotation card) {
|
||||||
|
|
|
@ -21,7 +21,7 @@ public final class CruelTutor extends CardImpl {
|
||||||
|
|
||||||
// Search your library for a card, then shuffle your library and put that card on top of it. You lose 2 life.
|
// Search your library for a card, then shuffle your library and put that card on top of it. You lose 2 life.
|
||||||
TargetCardInLibrary target = new TargetCardInLibrary();
|
TargetCardInLibrary target = new TargetCardInLibrary();
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutOnLibraryEffect(target, false, true));
|
this.getSpellAbility().addEffect(new SearchLibraryPutOnLibraryEffect(target, false));
|
||||||
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2));
|
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ public final class DarkPetition extends CardImpl {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{B}{B}");
|
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{B}{B}");
|
||||||
|
|
||||||
// Search your library for a card and put that card into your hand. Then shuffle your library.
|
// Search your library for a card and put that card into your hand. Then shuffle your library.
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary()));
|
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(), false, true));
|
||||||
|
|
||||||
// <i>Spell mastery</i> — If there are two or more instant and/or sorcery cards in your graveyard, add {B}{B}{B}.
|
// <i>Spell mastery</i> — If there are two or more instant and/or sorcery cards in your graveyard, add {B}{B}{B}.
|
||||||
Effect effect = new ConditionalOneShotEffect(new AddManaToManaPoolSourceControllerEffect(Mana.BlackMana(3)),
|
Effect effect = new ConditionalOneShotEffect(new AddManaToManaPoolSourceControllerEffect(Mana.BlackMana(3)),
|
||||||
|
|
|
@ -39,7 +39,7 @@ public final class DaruCavalier extends CardImpl {
|
||||||
|
|
||||||
// When Daru Cavalier enters the battlefield, you may search your library for a card named Daru Cavalier, reveal it, and put it into your hand. If you do, shuffle your library.
|
// When Daru Cavalier enters the battlefield, you may search your library for a card named Daru Cavalier, reveal it, and put it into your hand. If you do, shuffle your library.
|
||||||
TargetCardInLibrary target = new TargetCardInLibrary(0, 1, filter);
|
TargetCardInLibrary target = new TargetCardInLibrary(0, 1, filter);
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(target, true, true), true));
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(target, true), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private DaruCavalier(final DaruCavalier card) {
|
private DaruCavalier(final DaruCavalier card) {
|
||||||
|
|
|
@ -38,7 +38,7 @@ public final class DeadeyeQuartermaster extends CardImpl {
|
||||||
|
|
||||||
// When Deadeye Quartermaster enters the battlefield, you may search your library for an Equipment or a Vehicle card and put it into your hand. If you do, shuffle your library.
|
// When Deadeye Quartermaster enters the battlefield, you may search your library for an Equipment or a Vehicle card and put it into your hand. If you do, shuffle your library.
|
||||||
TargetCardInLibrary target = new TargetCardInLibrary(1, 1, filter);
|
TargetCardInLibrary target = new TargetCardInLibrary(1, 1, filter);
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(target, true, true), true));
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(target, true), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private DeadeyeQuartermaster(final DeadeyeQuartermaster card) {
|
private DeadeyeQuartermaster(final DeadeyeQuartermaster card) {
|
||||||
|
|
|
@ -7,7 +7,6 @@ import mage.abilities.TriggeredAbilityImpl;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Outcome;
|
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.filter.FilterCard;
|
import mage.filter.FilterCard;
|
||||||
|
@ -57,7 +56,7 @@ class DeepGnomeTerramancerTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
FilterCard filter = new FilterCard("Plains card");
|
FilterCard filter = new FilterCard("Plains card");
|
||||||
filter.add(SubType.PLAINS.getPredicate());
|
filter.add(SubType.PLAINS.getPredicate());
|
||||||
TargetCardInLibrary target = new TargetCardInLibrary(filter);
|
TargetCardInLibrary target = new TargetCardInLibrary(filter);
|
||||||
addEffect(new SearchLibraryPutInPlayEffect(target, true, true, Outcome.PutLandInPlay));
|
addEffect(new SearchLibraryPutInPlayEffect(target, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
DeepGnomeTerramancerTriggeredAbility(DeepGnomeTerramancerTriggeredAbility ability) {
|
DeepGnomeTerramancerTriggeredAbility(DeepGnomeTerramancerTriggeredAbility ability) {
|
||||||
|
|
|
@ -7,7 +7,6 @@ import mage.abilities.keyword.FlashbackAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.TimingRule;
|
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
import mage.target.common.TargetCardInLibrary;
|
import mage.target.common.TargetCardInLibrary;
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,6 @@ import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Outcome;
|
|
||||||
import mage.constants.TargetController;
|
import mage.constants.TargetController;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
|
@ -30,7 +29,7 @@ public final class DefenseOfTheHeart extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of your upkeep, if an opponent controls three or more creatures, sacrifice Defense of the Heart, search your library for up to two creature cards, and put those cards onto the battlefield. Then shuffle your library.
|
// At the beginning of your upkeep, if an opponent controls three or more creatures, sacrifice Defense of the Heart, search your library for up to two creature cards, and put those cards onto the battlefield. Then shuffle your library.
|
||||||
TriggeredAbility ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new SacrificeSourceEffect(), TargetController.YOU, false);
|
TriggeredAbility ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new SacrificeSourceEffect(), TargetController.YOU, false);
|
||||||
ability.addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_CREATURE), false, Outcome.PutLandInPlay));
|
ability.addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_CREATURE), false));
|
||||||
DefenseOfTheHeartCondition contition = new DefenseOfTheHeartCondition();
|
DefenseOfTheHeartCondition contition = new DefenseOfTheHeartCondition();
|
||||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, contition, "At the beginning of your upkeep, if an opponent controls three or more creatures, sacrifice {this}, search your library for up to two creature cards, put those cards onto the battlefield, then shuffle"));
|
this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, contition, "At the beginning of your upkeep, if an opponent controls three or more creatures, sacrifice {this}, search your library for up to two creature cards, put those cards onto the battlefield, then shuffle"));
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ public final class DemolitionField extends CardImpl {
|
||||||
));
|
));
|
||||||
ability.addEffect(new SearchLibraryPutInPlayEffect(
|
ability.addEffect(new SearchLibraryPutInPlayEffect(
|
||||||
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND_A),
|
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND_A),
|
||||||
false, true, true, Outcome.PutLandInPlay
|
false, false, true
|
||||||
));
|
));
|
||||||
ability.addTarget(new TargetLandPermanent(filter));
|
ability.addTarget(new TargetLandPermanent(filter));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
@ -26,7 +26,7 @@ public final class DemonicCollusion extends CardImpl {
|
||||||
this.addAbility(new BuybackAbility(new DiscardTargetCost(new TargetCardInHand(2, StaticFilters.FILTER_CARD_CARDS))));
|
this.addAbility(new BuybackAbility(new DiscardTargetCost(new TargetCardInHand(2, StaticFilters.FILTER_CARD_CARDS))));
|
||||||
|
|
||||||
// Search your library for a card and put that card into your hand. Then shuffle your library.
|
// Search your library for a card and put that card into your hand. Then shuffle your library.
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(),false));
|
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(),false, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private DemonicCollusion(final DemonicCollusion card) {
|
private DemonicCollusion(final DemonicCollusion card) {
|
||||||
|
|
|
@ -17,7 +17,7 @@ public final class DemonicTutor extends CardImpl {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{B}");
|
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{B}");
|
||||||
|
|
||||||
// Search your library for a card and put that card into your hand. Then shuffle your library.
|
// Search your library for a card and put that card into your hand. Then shuffle your library.
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary()));
|
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(), false, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private DemonicTutor(final DemonicTutor card) {
|
private DemonicTutor(final DemonicTutor card) {
|
||||||
|
|
|
@ -24,7 +24,7 @@ public final class DiabolicIntent extends CardImpl {
|
||||||
this.getSpellAbility().addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT)));
|
this.getSpellAbility().addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT)));
|
||||||
|
|
||||||
// Search your library for a card and put that card into your hand. Then shuffle your library.
|
// Search your library for a card and put that card into your hand. Then shuffle your library.
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary()));
|
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(), false, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private DiabolicIntent(final DiabolicIntent card) {
|
private DiabolicIntent(final DiabolicIntent card) {
|
||||||
|
|
|
@ -19,7 +19,7 @@ public final class DiabolicTutor extends CardImpl {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{B}{B}");
|
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{B}{B}");
|
||||||
|
|
||||||
TargetCardInLibrary target = new TargetCardInLibrary();
|
TargetCardInLibrary target = new TargetCardInLibrary();
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(target));
|
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(target, false, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private DiabolicTutor(final DiabolicTutor card) {
|
private DiabolicTutor(final DiabolicTutor card) {
|
||||||
|
|
|
@ -19,7 +19,7 @@ public final class DigUp extends CardImpl {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{G}");
|
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{G}");
|
||||||
|
|
||||||
// Cleave {1}{B}{B}{G}
|
// Cleave {1}{B}{B}{G}
|
||||||
this.addAbility(new CleaveAbility(this, new SearchLibraryPutInHandEffect(new TargetCardInLibrary()), "{1}{B}{B}{G}"));
|
this.addAbility(new CleaveAbility(this, new SearchLibraryPutInHandEffect(new TargetCardInLibrary(), false), "{1}{B}{B}{G}"));
|
||||||
|
|
||||||
// Search your library for a [basic land] card, [reveal it,] put it into your hand, then shuffle.
|
// Search your library for a [basic land] card, [reveal it,] put it into your hand, then shuffle.
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(
|
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(
|
||||||
|
|
|
@ -31,7 +31,7 @@ public final class DiligentFarmhand extends CardImpl {
|
||||||
this.toughness = new MageInt(1);
|
this.toughness = new MageInt(1);
|
||||||
|
|
||||||
// {1}{G}, Sacrifice Diligent Farmhand: Search your library for a basic land card and put that card onto the battlefield tapped. Then shuffle your library.
|
// {1}{G}, Sacrifice Diligent Farmhand: Search your library for a basic land card and put that card onto the battlefield tapped. Then shuffle your library.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true), new ManaCostsImpl<>("{1}{G}"));
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true), new ManaCostsImpl<>("{1}{G}"));
|
||||||
ability.addCost(new SacrificeSourceCost());
|
ability.addCost(new SacrificeSourceCost());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
// If Diligent Farmhand is in a graveyard, effects from spells named Muscle Burst count it as a card named Muscle Burst.
|
// If Diligent Farmhand is in a graveyard, effects from spells named Muscle Burst count it as a card named Muscle Burst.
|
||||||
|
@ -46,4 +46,4 @@ public final class DiligentFarmhand extends CardImpl {
|
||||||
public DiligentFarmhand copy() {
|
public DiligentFarmhand copy() {
|
||||||
return new DiligentFarmhand(this);
|
return new DiligentFarmhand(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,7 +87,7 @@ class DiscipleOfDeceitEffect extends OneShotEffect {
|
||||||
String targetName = "card with mana value of " + card.getManaValue();
|
String targetName = "card with mana value of " + card.getManaValue();
|
||||||
FilterCard filter = new FilterCard(targetName);
|
FilterCard filter = new FilterCard(targetName);
|
||||||
filter.add(new ManaValuePredicate(ComparisonType.EQUAL_TO, card.getManaValue()));
|
filter.add(new ManaValuePredicate(ComparisonType.EQUAL_TO, card.getManaValue()));
|
||||||
return new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true, true).apply(game, source);
|
return new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true).apply(game, source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -42,7 +42,7 @@ public final class DistrictGuide extends CardImpl {
|
||||||
// When District Guide enters the battlefield, you may search your library for a basic land card or Gate card, reveal it, put it into your hand, then shuffle your library.
|
// When District Guide enters the battlefield, you may search your library for a basic land card or Gate card, reveal it, put it into your hand, then shuffle your library.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
||||||
new SearchLibraryPutInHandEffect(
|
new SearchLibraryPutInHandEffect(
|
||||||
new TargetCardInLibrary(filter), true, true
|
new TargetCardInLibrary(filter), true
|
||||||
), true
|
), true
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,7 @@ public final class DjeruWithEyesOpen extends CardImpl {
|
||||||
this.addAbility(VigilanceAbility.getInstance());
|
this.addAbility(VigilanceAbility.getInstance());
|
||||||
|
|
||||||
// When Djeru, With Eyes Open enters the battlefield, you may search your library for a planeswalker card, reveal it, put it into your hand, then shuffle your library.
|
// When Djeru, With Eyes Open enters the battlefield, you may search your library for a planeswalker card, reveal it, put it into your hand, then shuffle your library.
|
||||||
Effect effect = new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 1, filter), true, true);
|
Effect effect = new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 1, filter), true);
|
||||||
effect.setText("you may search your library for a planeswalker card, reveal it, put it into your hand, then shuffle");
|
effect.setText("you may search your library for a planeswalker card, reveal it, put it into your hand, then shuffle");
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(effect, true));
|
this.addAbility(new EntersBattlefieldTriggeredAbility(effect, true));
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ public final class DoricNaturesWarden extends CardImpl {
|
||||||
|
|
||||||
// When Doric, Nature's Warden enters the battlefield, search your library for a Forest card, put it into the battlefield tapped, then shuffle.
|
// When Doric, Nature's Warden enters the battlefield, search your library for a Forest card, put it into the battlefield tapped, then shuffle.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
||||||
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), true, true)
|
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), true)
|
||||||
));
|
));
|
||||||
|
|
||||||
// Whenever Doric attacks, you may pay {1}{G}. If you do, transform her.
|
// Whenever Doric attacks, you may pay {1}{G}. If you do, transform her.
|
||||||
|
|
|
@ -33,7 +33,7 @@ public final class DraconicMuralists extends CardImpl {
|
||||||
|
|
||||||
// When Draconic Muralists dies, you may search your library for a Dragon card, reveal it, put it into your hand, then shuffle.
|
// When Draconic Muralists dies, you may search your library for a Dragon card, reveal it, put it into your hand, then shuffle.
|
||||||
this.addAbility(new DiesSourceTriggeredAbility(new SearchLibraryPutInHandEffect(
|
this.addAbility(new DiesSourceTriggeredAbility(new SearchLibraryPutInHandEffect(
|
||||||
new TargetCardInLibrary(filter), true, true
|
new TargetCardInLibrary(filter), true
|
||||||
), true));
|
), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,6 @@ import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.Outcome;
|
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
import mage.filter.common.FilterControlledLandPermanent;
|
import mage.filter.common.FilterControlledLandPermanent;
|
||||||
|
@ -39,7 +38,7 @@ public final class DreamscapeArtist extends CardImpl {
|
||||||
TargetCardInLibrary target = new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_LANDS);
|
TargetCardInLibrary target = new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_LANDS);
|
||||||
Ability ability = new SimpleActivatedAbility(
|
Ability ability = new SimpleActivatedAbility(
|
||||||
Zone.BATTLEFIELD,
|
Zone.BATTLEFIELD,
|
||||||
new SearchLibraryPutInPlayEffect(target, false, Outcome.PutLandInPlay),
|
new SearchLibraryPutInPlayEffect(target, false),
|
||||||
new ManaCostsImpl<>("{2}{U}"));
|
new ManaCostsImpl<>("{2}{U}"));
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
ability.addCost(new DiscardCardCost());
|
ability.addCost(new DiscardCardCost());
|
||||||
|
|
|
@ -64,7 +64,7 @@ public final class DroidFactory extends CardImpl {
|
||||||
filter.add(Predicates.or(subtypePredicates));
|
filter.add(Predicates.or(subtypePredicates));
|
||||||
filter.add(SuperType.BASIC.getPredicate());
|
filter.add(SuperType.BASIC.getPredicate());
|
||||||
TargetCardInLibrary target = new TargetCardInLibrary(filter);
|
TargetCardInLibrary target = new TargetCardInLibrary(filter);
|
||||||
addEffect(new SearchLibraryPutInPlayEffect(target, true, true, Outcome.PutLandInPlay));
|
addEffect(new SearchLibraryPutInPlayEffect(target, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -31,7 +31,7 @@ public final class DuneMover extends CardImpl {
|
||||||
|
|
||||||
// When Dune Mover enters the battlefield, you may search your library for a basic land card, reveal it, then shuffle and put that card on top.
|
// When Dune Mover enters the battlefield, you may search your library for a basic land card, reveal it, then shuffle and put that card on top.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(
|
||||||
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND_A), true, true
|
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND_A), true
|
||||||
), true));
|
), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ public final class EerieProcession extends CardImpl {
|
||||||
|
|
||||||
|
|
||||||
// Search your library for an Arcane card, reveal that card, and put it into your hand. Then shuffle your library.
|
// Search your library for an Arcane card, reveal that card, and put it into your hand. Then shuffle your library.
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true));
|
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private EerieProcession(final EerieProcession card) {
|
private EerieProcession(final EerieProcession card) {
|
||||||
|
|
|
@ -28,7 +28,7 @@ public final class ElfhameSanctuary extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of your upkeep, you may search your library for a basic land card, reveal that card, and put it into your hand. If you do, you skip your draw step this turn and shuffle your library.
|
// At the beginning of your upkeep, you may search your library for a basic land card, reveal that card, and put it into your hand. If you do, you skip your draw step this turn and shuffle your library.
|
||||||
Ability ability = new BeginningOfUpkeepTriggeredAbility(new SearchLibraryPutInHandEffect(
|
Ability ability = new BeginningOfUpkeepTriggeredAbility(new SearchLibraryPutInHandEffect(
|
||||||
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true
|
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true
|
||||||
), TargetController.YOU, true);
|
), TargetController.YOU, true);
|
||||||
ability.addEffect(new SkipDrawStepThisTurn());
|
ability.addEffect(new SkipDrawStepThisTurn());
|
||||||
|
|
||||||
|
@ -80,4 +80,4 @@ class SkipDrawStepThisTurn extends ReplacementEffectImpl {
|
||||||
public boolean applies(GameEvent event, Ability source, Game game) {
|
public boolean applies(GameEvent event, Ability source, Game game) {
|
||||||
return event.getPlayerId().equals(source.getControllerId());
|
return event.getPlayerId().equals(source.getControllerId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@ public final class ElvishHarbinger extends CardImpl {
|
||||||
this.toughness = new MageInt(2);
|
this.toughness = new MageInt(2);
|
||||||
|
|
||||||
// When Elvish Harbinger enters the battlefield, you may search your library for an Elf card, reveal it, then shuffle your library and put that card on top of it.
|
// When Elvish Harbinger enters the battlefield, you may search your library for an Elf card, reveal it, then shuffle your library and put that card on top of it.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary(filter), true, true), true));
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary(filter), true), true));
|
||||||
// {tap}: Add one mana of any color.
|
// {tap}: Add one mana of any color.
|
||||||
this.addAbility(new AnyColorManaAbility(new TapSourceCost()));
|
this.addAbility(new AnyColorManaAbility(new TapSourceCost()));
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ public final class EmbermageGoblin extends CardImpl {
|
||||||
|
|
||||||
// When Embermage Goblin enters the battlefield, you may search your library for a card named Embermage Goblin, reveal it, and put it into your hand. If you do, shuffle your library.
|
// When Embermage Goblin enters the battlefield, you may search your library for a card named Embermage Goblin, reveal it, and put it into your hand. If you do, shuffle your library.
|
||||||
TargetCardInLibrary target = new TargetCardInLibrary(1, 1, filter);
|
TargetCardInLibrary target = new TargetCardInLibrary(1, 1, filter);
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(target, true, true), true));
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(target, true), true));
|
||||||
|
|
||||||
// {tap}: Embermage Goblin deals 1 damage to any target.
|
// {tap}: Embermage Goblin deals 1 damage to any target.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new TapSourceCost());
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new TapSourceCost());
|
||||||
|
|
|
@ -28,7 +28,7 @@ public final class EnlightenedTutor extends CardImpl {
|
||||||
|
|
||||||
|
|
||||||
// Search your library for an artifact or enchantment card and reveal that card. Shuffle your library, then put the card on top of it.
|
// Search your library for an artifact or enchantment card and reveal that card. Shuffle your library, then put the card on top of it.
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary(filter), true, true));
|
this.getSpellAbility().addEffect(new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary(filter), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private EnlightenedTutor(final EnlightenedTutor card) {
|
private EnlightenedTutor(final EnlightenedTutor card) {
|
||||||
|
|
|
@ -38,7 +38,7 @@ public final class EsperPanorama extends CardImpl {
|
||||||
|
|
||||||
this.addAbility(new ColorlessManaAbility());
|
this.addAbility(new ColorlessManaAbility());
|
||||||
TargetCardInLibrary target = new TargetCardInLibrary(filter);
|
TargetCardInLibrary target = new TargetCardInLibrary(filter);
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(target, true, Outcome.PutLandInPlay), new GenericManaCost(1));
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(target, true), new GenericManaCost(1));
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
ability.addCost(new SacrificeSourceCost());
|
ability.addCost(new SacrificeSourceCost());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
@ -11,7 +11,6 @@ import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Outcome;
|
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.filter.FilterCard;
|
import mage.filter.FilterCard;
|
||||||
|
@ -41,7 +40,7 @@ public final class EverbarkShaman extends CardImpl {
|
||||||
this.toughness = new MageInt(5);
|
this.toughness = new MageInt(5);
|
||||||
|
|
||||||
// {T}, Exile a Treefolk card from your graveyard: Search your library for up to two Forest cards and put them onto the battlefield tapped. Then shuffle your library.
|
// {T}, Exile a Treefolk card from your graveyard: Search your library for up to two Forest cards and put them onto the battlefield tapped. Then shuffle your library.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 2, filterForest), true, Outcome.PutLandInPlay), new TapSourceCost());
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 2, filterForest), true), new TapSourceCost());
|
||||||
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(filterTreefolk)));
|
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(filterTreefolk)));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,7 +92,7 @@ class UrzasHotTubEffect extends OneShotEffect {
|
||||||
if (discardedCard != null) {
|
if (discardedCard != null) {
|
||||||
FilterCard filter = new FilterCard();
|
FilterCard filter = new FilterCard();
|
||||||
filter.add(new UrzasHotTubPredicate(discardedCard.getName()));
|
filter.add(new UrzasHotTubPredicate(discardedCard.getName()));
|
||||||
return new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true, true).apply(game, source);
|
return new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true).apply(game, source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ public final class EvolutionCharm extends CardImpl {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}");
|
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}");
|
||||||
|
|
||||||
// Choose one - Search your library for a basic land card, reveal it, put it into your hand, then shuffle your library;
|
// Choose one - Search your library for a basic land card, reveal it, put it into your hand, then shuffle your library;
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 1, StaticFilters.FILTER_CARD_BASIC_LAND), true, true).setText("Search your library for a basic land card, reveal it, put it into your hand, then shuffle"));
|
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 1, StaticFilters.FILTER_CARD_BASIC_LAND), true).setText("Search your library for a basic land card, reveal it, put it into your hand, then shuffle"));
|
||||||
|
|
||||||
// or return target creature card from your graveyard to your hand;
|
// or return target creature card from your graveyard to your hand;
|
||||||
Mode mode = new Mode(new ReturnFromGraveyardToHandTargetEffect());
|
Mode mode = new Mode(new ReturnFromGraveyardToHandTargetEffect());
|
||||||
|
|
|
@ -23,7 +23,7 @@ public final class ExplodingBorders extends CardImpl {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{R}{G}");
|
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{R}{G}");
|
||||||
|
|
||||||
// Domain - Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle your library. Exploding Borders deals X damage to target player, where X is the number of basic land types among lands you control.
|
// Domain - Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle your library. Exploding Borders deals X damage to target player, where X is the number of basic land types among lands you control.
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true));
|
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true));
|
||||||
this.getSpellAbility().addEffect(new DamageTargetEffect(DomainValue.REGULAR));
|
this.getSpellAbility().addEffect(new DamageTargetEffect(DomainValue.REGULAR));
|
||||||
this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker());
|
this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker());
|
||||||
this.getSpellAbility().addHint(DomainHint.instance);
|
this.getSpellAbility().addHint(DomainHint.instance);
|
||||||
|
|
|
@ -37,7 +37,7 @@ public final class FaerieHarbinger extends CardImpl {
|
||||||
// Flying
|
// Flying
|
||||||
this.addAbility(FlyingAbility.getInstance());
|
this.addAbility(FlyingAbility.getInstance());
|
||||||
// When Faerie Harbinger enters the battlefield, you may search your library for a Faerie card, reveal it, then shuffle your library and put that card on top of it.
|
// When Faerie Harbinger enters the battlefield, you may search your library for a Faerie card, reveal it, then shuffle your library and put that card on top of it.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary(filter), true, true), true));
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary(filter), true), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private FaerieHarbinger(final FaerieHarbinger card) {
|
private FaerieHarbinger(final FaerieHarbinger card) {
|
||||||
|
|
|
@ -26,8 +26,8 @@ public final class FarWanderings extends CardImpl {
|
||||||
// Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle your library.
|
// Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle your library.
|
||||||
// Threshold - If seven or more cards are in your graveyard, instead search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle your library.
|
// Threshold - If seven or more cards are in your graveyard, instead search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle your library.
|
||||||
Effect effect = new ConditionalOneShotEffect(
|
Effect effect = new ConditionalOneShotEffect(
|
||||||
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 3, StaticFilters.FILTER_CARD_BASIC_LAND), true, true),
|
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 3, StaticFilters.FILTER_CARD_BASIC_LAND), true),
|
||||||
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 1, StaticFilters.FILTER_CARD_BASIC_LAND), true, true),
|
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 1, StaticFilters.FILTER_CARD_BASIC_LAND), true),
|
||||||
new CardsInControllerGraveyardCondition(7),
|
new CardsInControllerGraveyardCondition(7),
|
||||||
"Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle.<br/><br/><i>Threshold</i> — If seven or more cards are in your graveyard, instead search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle.");
|
"Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle.<br/><br/><i>Threshold</i> — If seven or more cards are in your graveyard, instead search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle.");
|
||||||
this.getSpellAbility().addEffect(effect);
|
this.getSpellAbility().addEffect(effect);
|
||||||
|
|
|
@ -30,7 +30,7 @@ public final class Farfinder extends CardImpl {
|
||||||
|
|
||||||
// When Farfinder etners the battlefield, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle your library.
|
// When Farfinder etners the battlefield, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle your library.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
|
||||||
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true
|
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true
|
||||||
), true));
|
), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ public final class FarhavenElf extends CardImpl {
|
||||||
this.toughness = new MageInt(1);
|
this.toughness = new MageInt(1);
|
||||||
|
|
||||||
// When Farhaven Elf enters the battlefield, you may search your library for a basic land card and put it onto the battlefield tapped. If you do, shuffle your library.
|
// When Farhaven Elf enters the battlefield, you may search your library for a basic land card and put it onto the battlefield tapped. If you do, shuffle your library.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true), true));
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private FarhavenElf(final FarhavenElf card) {
|
private FarhavenElf(final FarhavenElf card) {
|
||||||
|
|
|
@ -6,7 +6,6 @@ import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Outcome;
|
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.filter.FilterCard;
|
import mage.filter.FilterCard;
|
||||||
import mage.filter.predicate.Predicates;
|
import mage.filter.predicate.Predicates;
|
||||||
|
@ -33,7 +32,7 @@ public final class Farseek extends CardImpl {
|
||||||
|
|
||||||
|
|
||||||
// Search your library for a Plains, Island, Swamp, or Mountain card and put it onto the battlefield tapped. Then shuffle your library.
|
// Search your library for a Plains, Island, Swamp, or Mountain card and put it onto the battlefield tapped. Then shuffle your library.
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), true, Outcome.PutLandInPlay));
|
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Farseek(final Farseek card) {
|
private Farseek(final Farseek card) {
|
||||||
|
|
|
@ -38,7 +38,7 @@ public final class Fertilid extends CardImpl {
|
||||||
|
|
||||||
// {1}{G}, Remove a +1/+1 counter from Fertilid: Target player searches their library for a basic land card and puts it onto the battlefield tapped. Then that player shuffles their library.
|
// {1}{G}, Remove a +1/+1 counter from Fertilid: Target player searches their library for a basic land card and puts it onto the battlefield tapped. Then that player shuffles their library.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
||||||
new SearchLibraryPutInPlayTargetPlayerEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true), new ManaCostsImpl<>("{1}{G}"));
|
new SearchLibraryPutInPlayTargetPlayerEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true), new ManaCostsImpl<>("{1}{G}"));
|
||||||
ability.addCost(new RemoveCountersSourceCost(CounterType.P1P1.createInstance(1)));
|
ability.addCost(new RemoveCountersSourceCost(CounterType.P1P1.createInstance(1)));
|
||||||
ability.addTarget(new TargetPlayer());
|
ability.addTarget(new TargetPlayer());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
@ -24,7 +24,7 @@ public final class FertilidsFavor extends CardImpl {
|
||||||
|
|
||||||
// Target player searches their library for a basic land card, puts it onto the battlefield tapped, then shuffles. Put two +1/+1 counters on up to one target artifact or creature.
|
// Target player searches their library for a basic land card, puts it onto the battlefield tapped, then shuffles. Put two +1/+1 counters on up to one target artifact or creature.
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayTargetPlayerEffect(
|
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayTargetPlayerEffect(
|
||||||
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true
|
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true
|
||||||
));
|
));
|
||||||
this.getSpellAbility().addTarget(new TargetPlayer());
|
this.getSpellAbility().addTarget(new TargetPlayer());
|
||||||
this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance(2))
|
this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance(2))
|
||||||
|
|
|
@ -29,7 +29,7 @@ public final class FieldTrip extends CardImpl {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{G}");
|
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{G}");
|
||||||
|
|
||||||
// Search your library for a basic Forest card, put that card onto the battlefield tapped, then shuffle.
|
// Search your library for a basic Forest card, put that card onto the battlefield tapped, then shuffle.
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), true));
|
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), true, true));
|
||||||
|
|
||||||
// Learn.
|
// Learn.
|
||||||
this.getSpellAbility().addEffect(new LearnEffect().concatBy("<br>"));
|
this.getSpellAbility().addEffect(new LearnEffect().concatBy("<br>"));
|
||||||
|
|
|
@ -34,7 +34,7 @@ public final class FierceEmpath extends CardImpl {
|
||||||
|
|
||||||
// When Fierce Empath enters the battlefield, you may search your library for a creature card with converted mana cost 6 or greater, reveal it, put it into your hand, then shuffle your library.
|
// When Fierce Empath enters the battlefield, you may search your library for a creature card with converted mana cost 6 or greater, reveal it, put it into your hand, then shuffle your library.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
|
||||||
new TargetCardInLibrary(filter), true, true)
|
new TargetCardInLibrary(filter), true)
|
||||||
.setText("search your library for a creature card with mana value 6 or greater, reveal it, put it into your hand, then shuffle"),
|
.setText("search your library for a creature card with mana value 6 or greater, reveal it, put it into your hand, then shuffle"),
|
||||||
true));
|
true));
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@ public final class FlagstonesOfTrokair extends CardImpl {
|
||||||
this.addAbility(new WhiteManaAbility());
|
this.addAbility(new WhiteManaAbility());
|
||||||
|
|
||||||
// When Flagstones of Trokair is put into a graveyard from the battlefield, you may search your library for a Plains card and put it onto the battlefield tapped. If you do, shuffle your library.
|
// When Flagstones of Trokair is put into a graveyard from the battlefield, you may search your library for a Plains card and put it onto the battlefield tapped. If you do, shuffle your library.
|
||||||
this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(FILTER), true, true), true, false));
|
this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(FILTER), true), true, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
private FlagstonesOfTrokair(final FlagstonesOfTrokair card) {
|
private FlagstonesOfTrokair(final FlagstonesOfTrokair card) {
|
||||||
|
|
|
@ -35,7 +35,7 @@ public final class FlamekinHarbinger extends CardImpl {
|
||||||
// When Flamekin Harbinger enters the battlefield, you may search your library for an Elemental card,
|
// When Flamekin Harbinger enters the battlefield, you may search your library for an Elemental card,
|
||||||
// reveal it, then shuffle your library and put that card on top of it.
|
// reveal it, then shuffle your library and put that card on top of it.
|
||||||
TargetCardInLibrary target = new TargetCardInLibrary(filter);
|
TargetCardInLibrary target = new TargetCardInLibrary(filter);
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(target, true, true), true));
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(target, true), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private FlamekinHarbinger(final FlamekinHarbinger card) {
|
private FlamekinHarbinger(final FlamekinHarbinger card) {
|
||||||
|
|
|
@ -38,7 +38,7 @@ public final class FlowerFlourish extends SplitCard {
|
||||||
// Search your library for a basic Forest or Plains card, reveal it, put it into your hand, then shuffle your library.
|
// Search your library for a basic Forest or Plains card, reveal it, put it into your hand, then shuffle your library.
|
||||||
this.getLeftHalfCard().getSpellAbility().addEffect(
|
this.getLeftHalfCard().getSpellAbility().addEffect(
|
||||||
new SearchLibraryPutInHandEffect(
|
new SearchLibraryPutInHandEffect(
|
||||||
new TargetCardInLibrary(filter), true, true
|
new TargetCardInLibrary(filter), true
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,6 @@ import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Outcome;
|
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
import mage.target.common.TargetCardInLibrary;
|
import mage.target.common.TargetCardInLibrary;
|
||||||
|
@ -28,7 +27,7 @@ public final class FontOfFertility extends CardImpl {
|
||||||
|
|
||||||
// {1}{G}, Sacrifice Font of Fertility: Search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library.
|
// {1}{G}, Sacrifice Font of Fertility: Search your library for a basic land card, put it onto the battlefield tapped, then shuffle your library.
|
||||||
TargetCardInLibrary target = new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND);
|
TargetCardInLibrary target = new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND);
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(target, true, true, Outcome.PutLandInPlay), new ManaCostsImpl<>("{1}{G}"));
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(target, true), new ManaCostsImpl<>("{1}{G}"));
|
||||||
ability.addCost(new SacrificeSourceCost());
|
ability.addCost(new SacrificeSourceCost());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ public final class ForerunnerOfTheCoalition extends CardImpl {
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
||||||
new SearchLibraryPutOnLibraryEffect(
|
new SearchLibraryPutOnLibraryEffect(
|
||||||
new TargetCardInLibrary(new FilterBySubtypeCard(SubType.PIRATE)),
|
new TargetCardInLibrary(new FilterBySubtypeCard(SubType.PIRATE)),
|
||||||
true, true), true));
|
true), true));
|
||||||
|
|
||||||
// Whenever another Pirate enters the battlefield under your control, each opponent loses 1 life.
|
// Whenever another Pirate enters the battlefield under your control, each opponent loses 1 life.
|
||||||
Ability ability = new EntersBattlefieldControlledTriggeredAbility(
|
Ability ability = new EntersBattlefieldControlledTriggeredAbility(
|
||||||
|
|
|
@ -43,7 +43,6 @@ public final class ForerunnerOfTheEmpire extends CardImpl {
|
||||||
new EntersBattlefieldTriggeredAbility(
|
new EntersBattlefieldTriggeredAbility(
|
||||||
new SearchLibraryPutOnLibraryEffect(
|
new SearchLibraryPutOnLibraryEffect(
|
||||||
new TargetCardInLibrary(new FilterBySubtypeCard(SubType.DINOSAUR)),
|
new TargetCardInLibrary(new FilterBySubtypeCard(SubType.DINOSAUR)),
|
||||||
true,
|
|
||||||
true
|
true
|
||||||
),
|
),
|
||||||
true
|
true
|
||||||
|
|
|
@ -45,7 +45,6 @@ public final class ForerunnerOfTheHeralds extends CardImpl {
|
||||||
new EntersBattlefieldTriggeredAbility(
|
new EntersBattlefieldTriggeredAbility(
|
||||||
new SearchLibraryPutOnLibraryEffect(
|
new SearchLibraryPutOnLibraryEffect(
|
||||||
new TargetCardInLibrary(new FilterBySubtypeCard(SubType.MERFOLK)),
|
new TargetCardInLibrary(new FilterBySubtypeCard(SubType.MERFOLK)),
|
||||||
true,
|
|
||||||
true
|
true
|
||||||
),
|
),
|
||||||
true
|
true
|
||||||
|
@ -65,4 +64,4 @@ public final class ForerunnerOfTheHeralds extends CardImpl {
|
||||||
public ForerunnerOfTheHeralds copy() {
|
public ForerunnerOfTheHeralds copy() {
|
||||||
return new ForerunnerOfTheHeralds(this);
|
return new ForerunnerOfTheHeralds(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,6 @@ public final class ForerunnerOfTheLegion extends CardImpl {
|
||||||
new EntersBattlefieldTriggeredAbility(
|
new EntersBattlefieldTriggeredAbility(
|
||||||
new SearchLibraryPutOnLibraryEffect(
|
new SearchLibraryPutOnLibraryEffect(
|
||||||
new TargetCardInLibrary(new FilterBySubtypeCard(SubType.VAMPIRE)),
|
new TargetCardInLibrary(new FilterBySubtypeCard(SubType.VAMPIRE)),
|
||||||
true,
|
|
||||||
true
|
true
|
||||||
),
|
),
|
||||||
true
|
true
|
||||||
|
@ -63,4 +62,4 @@ public final class ForerunnerOfTheLegion extends CardImpl {
|
||||||
public ForerunnerOfTheLegion copy() {
|
public ForerunnerOfTheLegion copy() {
|
||||||
return new ForerunnerOfTheLegion(this);
|
return new ForerunnerOfTheLegion(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ public final class FrenziedTilling extends CardImpl {
|
||||||
// Destroy target land. Search your library for a basic land card and put that card onto the battlefield tapped. Then shuffle your library.
|
// Destroy target land. Search your library for a basic land card and put that card onto the battlefield tapped. Then shuffle your library.
|
||||||
this.getSpellAbility().addEffect(new DestroyTargetEffect());
|
this.getSpellAbility().addEffect(new DestroyTargetEffect());
|
||||||
this.getSpellAbility().addTarget(new TargetLandPermanent());
|
this.getSpellAbility().addTarget(new TargetLandPermanent());
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true));
|
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private FrenziedTilling(final FrenziedTilling card) {
|
private FrenziedTilling(final FrenziedTilling card) {
|
||||||
|
|
|
@ -43,7 +43,7 @@ public final class FromBeyond extends CardImpl {
|
||||||
|
|
||||||
// {1}{G}, Sacrifice From Beyond: Search your library for an Eldrazi card, reveal it, put it into your hand, then shuffle your library.
|
// {1}{G}, Sacrifice From Beyond: Search your library for an Eldrazi card, reveal it, put it into your hand, then shuffle your library.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
||||||
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true, true),
|
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true),
|
||||||
new ManaCostsImpl<>("{1}{G}"));
|
new ManaCostsImpl<>("{1}{G}"));
|
||||||
ability.addCost(new SacrificeSourceCost());
|
ability.addCost(new SacrificeSourceCost());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
@ -65,7 +65,7 @@ public final class FrostpyreArcanist extends CardImpl {
|
||||||
|
|
||||||
// When Frostpyre Arcanist enters the battlefield, search your library for an instant or sorcery card with the same name as a card in your graveyard, reveal it, put it into your hand, then shuffle your library.
|
// When Frostpyre Arcanist enters the battlefield, search your library for an instant or sorcery card with the same name as a card in your graveyard, reveal it, put it into your hand, then shuffle your library.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
|
||||||
new TargetCardInLibrary(filter2), true, true
|
new TargetCardInLibrary(filter2), true
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,4 +95,4 @@ enum FrostpyreArcanistPredicate implements ObjectSourcePlayerPredicate<Card> {
|
||||||
.map(MageObject::getName)
|
.map(MageObject::getName)
|
||||||
.anyMatch(input.getObject().getName()::equals);
|
.anyMatch(input.getObject().getName()::equals);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ public final class GaeasBounty extends CardImpl {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{G}");
|
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{G}");
|
||||||
|
|
||||||
// Search your library for up to two Forest cards, reveal those cards, and put them into your hand. Then shuffle your library.
|
// Search your library for up to two Forest cards, reveal those cards, and put them into your hand. Then shuffle your library.
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 2, filter), false));
|
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 2, filter), false, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private GaeasBounty(final GaeasBounty card) {
|
private GaeasBounty(final GaeasBounty card) {
|
||||||
|
|
|
@ -21,7 +21,7 @@ public final class Gamble extends CardImpl {
|
||||||
|
|
||||||
|
|
||||||
// Search your library for a card, put that card into your hand, discard a card at random, then shuffle your library.
|
// Search your library for a card, put that card into your hand, discard a card at random, then shuffle your library.
|
||||||
Effect effect = new SearchLibraryPutInHandEffect(new TargetCardInLibrary(), false, true);
|
Effect effect = new SearchLibraryPutInHandEffect(new TargetCardInLibrary(), false);
|
||||||
effect.setText("Search your library for a card, put that card into your hand");
|
effect.setText("Search your library for a card, put that card into your hand");
|
||||||
this.getSpellAbility().addEffect(effect);
|
this.getSpellAbility().addEffect(effect);
|
||||||
effect = new DiscardControllerEffect(1, true);
|
effect = new DiscardControllerEffect(1, true);
|
||||||
|
|
|
@ -49,7 +49,7 @@ public final class GarrukTheVeilCursed extends CardImpl {
|
||||||
this.addAbility(new LoyaltyAbility(new DoIfCostPaid(
|
this.addAbility(new LoyaltyAbility(new DoIfCostPaid(
|
||||||
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(
|
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(
|
||||||
StaticFilters.FILTER_CARD_CREATURE_A
|
StaticFilters.FILTER_CARD_CREATURE_A
|
||||||
), true, true),
|
), true),
|
||||||
null,
|
null,
|
||||||
new SacrificeTargetCost(new TargetControlledPermanent(
|
new SacrificeTargetCost(new TargetControlledPermanent(
|
||||||
StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT
|
StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT
|
||||||
|
|
|
@ -45,7 +45,7 @@ public final class GatecreeperVine extends CardImpl {
|
||||||
|
|
||||||
// When Gatecreeper Vine enters the battlefield, you may search your library for a basic land card or a Gate card, reveal it, put it into your hand, then shuffle your library.
|
// When Gatecreeper Vine enters the battlefield, you may search your library for a basic land card or a Gate card, reveal it, put it into your hand, then shuffle your library.
|
||||||
TargetCardInLibrary target = new TargetCardInLibrary(filter);
|
TargetCardInLibrary target = new TargetCardInLibrary(filter);
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(target, true, true), true));
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(target, true), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private GatecreeperVine(final GatecreeperVine card) {
|
private GatecreeperVine(final GatecreeperVine card) {
|
||||||
|
|
|
@ -34,7 +34,7 @@ public final class GatheringThrong extends CardImpl {
|
||||||
|
|
||||||
// When Gathering Throng enters the battlefield, you may search your library for any number of cards named Gathering Throng, reveal them, put them into your hand, then shuffle.
|
// When Gathering Throng enters the battlefield, you may search your library for any number of cards named Gathering Throng, reveal them, put them into your hand, then shuffle.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
|
||||||
new TargetCardInLibrary(0, Integer.MAX_VALUE, filter), true, true
|
new TargetCardInLibrary(0, Integer.MAX_VALUE, filter), true
|
||||||
), true));
|
), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ public final class GeneralTazri extends CardImpl {
|
||||||
|
|
||||||
// When General Tazri enters the battlefield, you may search your library for an Ally creature card, reveal it, put it into your hand, then shuffle your library.
|
// When General Tazri enters the battlefield, you may search your library for an Ally creature card, reveal it, put it into your hand, then shuffle your library.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
|
||||||
new TargetCardInLibrary(filter), true, true), true));
|
new TargetCardInLibrary(filter), true), true));
|
||||||
// {W}{U}{B}{R}{G}: Ally creatures you control get +X/+X until end of turn, where X is the number of colors among those creatures.
|
// {W}{U}{B}{R}{G}: Ally creatures you control get +X/+X until end of turn, where X is the number of colors among those creatures.
|
||||||
DynamicValue xValue = new GeneralTazriColorCount();
|
DynamicValue xValue = new GeneralTazriColorCount();
|
||||||
BoostControlledEffect effect = new BoostControlledEffect(xValue, xValue, Duration.EndOfTurn, new FilterCreaturePermanent(SubType.ALLY, "Ally creatures"), false);
|
BoostControlledEffect effect = new BoostControlledEffect(xValue, xValue, Duration.EndOfTurn, new FilterCreaturePermanent(SubType.ALLY, "Ally creatures"), false);
|
||||||
|
|
|
@ -31,7 +31,7 @@ public final class GiantHarbinger extends CardImpl {
|
||||||
this.toughness = new MageInt(4);
|
this.toughness = new MageInt(4);
|
||||||
|
|
||||||
// When Giant Harbinger enters the battlefield, you may search your library for a Giant card, reveal it, then shuffle your library and put that card on top of it.
|
// When Giant Harbinger enters the battlefield, you may search your library for a Giant card, reveal it, then shuffle your library and put that card on top of it.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary(filter), true, true), true));
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary(filter), true), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private GiantHarbinger(final GiantHarbinger card) {
|
private GiantHarbinger(final GiantHarbinger card) {
|
||||||
|
|
|
@ -30,7 +30,7 @@ public final class GiantLadybug extends CardImpl {
|
||||||
|
|
||||||
// When Giant Ladybug enters the battlefield, you may search your library for a basic land card, reveal it, then shuffle and put that card on top.
|
// When Giant Ladybug enters the battlefield, you may search your library for a basic land card, reveal it, then shuffle and put that card on top.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(
|
||||||
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND_A), true, true
|
new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND_A), true
|
||||||
), true));
|
), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ public final class GoblinMatron extends CardImpl {
|
||||||
this.toughness = new MageInt(1);
|
this.toughness = new MageInt(1);
|
||||||
|
|
||||||
// When Goblin Matron enters the battlefield, you may search your library for a Goblin card, reveal that card, and put it into your hand. If you do, shuffle your library.
|
// When Goblin Matron enters the battlefield, you may search your library for a Goblin card, reveal that card, and put it into your hand. If you do, shuffle your library.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true), true));
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true, true), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private GoblinMatron(final GoblinMatron card) {
|
private GoblinMatron(final GoblinMatron card) {
|
||||||
|
|
|
@ -44,7 +44,7 @@ public final class GodoBanditWarlord extends CardImpl {
|
||||||
this.toughness = new MageInt(3);
|
this.toughness = new MageInt(3);
|
||||||
|
|
||||||
// When Godo, Bandit Warlord enters the battlefield, you may search your library for an Equipment card and put it onto the battlefield. If you do, shuffle your library.
|
// When Godo, Bandit Warlord enters the battlefield, you may search your library for an Equipment card and put it onto the battlefield. If you do, shuffle your library.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), false, true), true));
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), false), true));
|
||||||
|
|
||||||
// Whenever Godo attacks for the first time each turn, untap it and all Samurai you control. After this phase, there is an additional combat phase.
|
// Whenever Godo attacks for the first time each turn, untap it and all Samurai you control. After this phase, there is an additional combat phase.
|
||||||
Ability ability = new AttacksFirstTimeTriggeredAbility(new UntapSourceEffect().setText("untap it"), false);
|
Ability ability = new AttacksFirstTimeTriggeredAbility(new UntapSourceEffect().setText("untap it"), false);
|
||||||
|
|
|
@ -35,7 +35,7 @@ public final class GolosTirelessPilgrim extends CardImpl {
|
||||||
|
|
||||||
// When Golos, Tireless Pilgrim enters the battlefield, you may search your library for a land card, put that card onto the battlefield tapped, then shuffle your library.
|
// When Golos, Tireless Pilgrim enters the battlefield, you may search your library for a land card, put that card onto the battlefield tapped, then shuffle your library.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInPlayEffect(
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInPlayEffect(
|
||||||
new TargetCardInLibrary(StaticFilters.FILTER_CARD_LAND_A), true
|
new TargetCardInLibrary(StaticFilters.FILTER_CARD_LAND_A), true, true
|
||||||
), true));
|
), true));
|
||||||
|
|
||||||
// {2}{W}{U}{B}{R}{G}: Exile the top three cards of your library. You may play them this turn without paying their mana costs.
|
// {2}{W}{U}{B}{R}{G}: Exile the top three cards of your library. You may play them this turn without paying their mana costs.
|
||||||
|
|
|
@ -33,7 +33,7 @@ public final class Greenseeker extends CardImpl {
|
||||||
|
|
||||||
// {G}, {tap}, Discard a card: Search your library for a basic land card, reveal it, and put it into your hand. Then shuffle your library.
|
// {G}, {tap}, Discard a card: Search your library for a basic land card, reveal it, and put it into your hand. Then shuffle your library.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
||||||
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(1, 1, StaticFilters.FILTER_CARD_BASIC_LAND), true, true),
|
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(1, 1, StaticFilters.FILTER_CARD_BASIC_LAND), true),
|
||||||
new ManaCostsImpl<>("{G}"));
|
new ManaCostsImpl<>("{G}"));
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
ability.addCost(new DiscardCardCost());
|
ability.addCost(new DiscardCardCost());
|
||||||
|
|
|
@ -18,7 +18,7 @@ public final class GrimTutor extends CardImpl {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{B}{B}");
|
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{B}{B}");
|
||||||
|
|
||||||
// Search your library for a card and put that card into your hand, then shuffle your library.
|
// Search your library for a card and put that card into your hand, then shuffle your library.
|
||||||
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary()));
|
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(), false, true));
|
||||||
|
|
||||||
// You lose 3 life.
|
// You lose 3 life.
|
||||||
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(3));
|
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(3));
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue