text fixes

This commit is contained in:
Evan Kranzler 2021-04-30 07:58:19 -04:00
parent b27f2f04c1
commit 8f9afcb617
79 changed files with 158 additions and 177 deletions

View file

@ -77,7 +77,7 @@ class AngrathMinotaurPirateThirdAbilityEffect extends OneShotEffect {
public AngrathMinotaurPirateThirdAbilityEffect() { public AngrathMinotaurPirateThirdAbilityEffect() {
super(Outcome.DestroyPermanent); super(Outcome.DestroyPermanent);
this.staticText = "Destroy all creature target opponent controls. {this} deals damage to that player equal to their total power"; this.staticText = "Destroy all creature target opponent controls. {this} deals damage to that player equal to their total power";
} }
public AngrathMinotaurPirateThirdAbilityEffect(final AngrathMinotaurPirateThirdAbilityEffect effect) { public AngrathMinotaurPirateThirdAbilityEffect(final AngrathMinotaurPirateThirdAbilityEffect effect) {

View file

@ -40,7 +40,7 @@ public final class AngrathsFury extends CardImpl {
// You may search your library and/or graveyard for a card named Angrath, Minotaur Pirate, reveal it, and put it into your hand. If you search your library this way, shuffle it. // You may search your library and/or graveyard for a card named Angrath, Minotaur Pirate, reveal it, and put it into your hand. If you search your library this way, shuffle it.
this.getSpellAbility().addEffect(new SearchLibraryGraveyardPutInHandEffect(filter) this.getSpellAbility().addEffect(new SearchLibraryGraveyardPutInHandEffect(filter)
.setText("You may search your library and/or graveyard for a card named Angrath, Minotaur Pirate, reveal it, and put it into your hand. If you search your library this way, shuffle")); .setText("You may search your library and/or graveyard for a card named Angrath, Minotaur Pirate, reveal it, and put it into your hand. If you search your library this way, shuffle"));
} }

View file

@ -57,7 +57,7 @@ public final class AyliEternalPilgrim extends CardImpl {
new ExileTargetEffect(), new ExileTargetEffect(),
new ManaCostsImpl("{1}{W}{B}"), new ManaCostsImpl("{1}{W}{B}"),
new AyliEternalPilgrimCondition(), new AyliEternalPilgrimCondition(),
"{1}{W}{B}, Sacrifice another creature: Exile target nonland permanent. Activate only if you have at least 10 life more than your starting life total"); "{1}{W}{B}, Sacrifice another creature: Exile target nonland permanent. Activate only if you have at least 10 life more than your starting life total.");
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE))); ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)));
ability.addTarget(new TargetNonlandPermanent()); ability.addTarget(new TargetNonlandPermanent());
this.addAbility(ability); this.addAbility(ability);

View file

@ -25,7 +25,7 @@ import mage.target.common.TargetOpponent;
*/ */
public final class BafflingEnd extends CardImpl { public final class BafflingEnd extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with mana value 3 or less an opponent controls"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls with mana value 3 or less");
static { static {
filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 4)); filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 4));

View file

@ -32,7 +32,7 @@ public final class BaralsExpertise extends CardImpl {
getSpellAbility().addTarget(new TargetPermanent(0, 3, filter, false)); getSpellAbility().addTarget(new TargetPermanent(0, 3, filter, false));
// You may cast a card with converted mana cost 4 or less from your hand without paying its mana cost. // You may cast a card with converted mana cost 4 or less from your hand without paying its mana cost.
getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(4)); getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(4).concatBy("<br>"));
} }
private BaralsExpertise(final BaralsExpertise card) { private BaralsExpertise(final BaralsExpertise card) {

View file

@ -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, false), true)); this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true), true));
} }
private BorderlandRanger(final BorderlandRanger card) { private BorderlandRanger(final BorderlandRanger card) {

View file

@ -70,8 +70,8 @@ class BrainInAJarCastEffect extends OneShotEffect {
public BrainInAJarCastEffect() { public BrainInAJarCastEffect() {
super(Outcome.PlayForFree); super(Outcome.PlayForFree);
this.staticText = ", then you may cast an instant or sorcery card " this.staticText = ", then you may cast an instant or sorcery spell "
+ "with mana values equal to the number of charge " + "with mana value equal to the number of charge "
+ "counters on {this} from your hand without paying its mana cost"; + "counters on {this} from your hand without paying its mana cost";
} }

View file

@ -76,7 +76,7 @@ class BreathstealersCryptEffect extends ReplacementEffectImpl {
if (!cardDrawn.isCreature()) { if (!cardDrawn.isCreature()) {
return true; return true;
} }
game.informPlayers("The card drawn by " + player.getName() + " is a creature card. They discard that card unless they pay 3 life."); game.informPlayers("The card drawn by " + player.getName() + " is a creature card. They discard that card unless they pay 3 life.");
PayLifeCost cost = new PayLifeCost(3); PayLifeCost cost = new PayLifeCost(3);
if (!cost.canPay(source, source, player.getId(), game) if (!cost.canPay(source, source, player.getId(), game)
|| !player.chooseUse(outcome, "Pay 3 life or discard " + cardDrawn.getIdName() + "?", null, "Pay 3 life", "Discard", source, game) || !player.chooseUse(outcome, "Pay 3 life or discard " + cardDrawn.getIdName() + "?", null, "Pay 3 life", "Discard", source, game)

View file

@ -84,6 +84,6 @@ class ActivateAsSorceryConditionalActivatedAbility extends ActivatedAbilityImpl
@Override @Override
public String getRule() { public String getRule() {
return super.getRule() + " Activate only as a sorcery, and only if seven or more cards are in your graveyard."; return super.getRule() + " Activate only as a sorcery and only if seven or more cards are in your graveyard.";
} }
} }

View file

@ -66,7 +66,7 @@ class ChandraRoaringFlameEmblemEffect extends OneShotEffect {
public ChandraRoaringFlameEmblemEffect() { public ChandraRoaringFlameEmblemEffect() {
super(Outcome.Damage); super(Outcome.Damage);
this.staticText = "{this} deals 6 damage to each opponent. Each player dealt damage this way gets an emblem with \"At the beginning of your upkeep, this emblem deals 3 damage to you.\""; this.staticText = "{this} deals 6 damage to each opponent. Each player dealt damage this way gets an emblem with \"At the beginning of your upkeep, this emblem deals 3 damage to you.\"";
} }
public ChandraRoaringFlameEmblemEffect(final ChandraRoaringFlameEmblemEffect effect) { public ChandraRoaringFlameEmblemEffect(final ChandraRoaringFlameEmblemEffect effect) {

View file

@ -88,7 +88,7 @@ class CharmedPendantManaEffect extends ManaEffect {
public CharmedPendantManaEffect() { public CharmedPendantManaEffect() {
super(); super();
staticText = "For each colored mana symbol in that card's mana cost, add one mana of that color"; staticText = "For each colored mana symbol in the milled card's mana cost, add one mana of that color";
} }
public CharmedPendantManaEffect(final CharmedPendantManaEffect effect) { public CharmedPendantManaEffect(final CharmedPendantManaEffect effect) {

View file

@ -25,7 +25,7 @@ public final class Conflux extends CardImpl {
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect( this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(
new ConfluxTarget(), true, true new ConfluxTarget(), true, 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 and put them into your hand. Then shuffle")); "Reveal those cards, put them into your hand, then shuffle"));
} }
private Conflux(final Conflux card) { private Conflux(final Conflux card) {

View file

@ -53,7 +53,7 @@ class SearchLibraryPutInGraveyard extends SearchEffect {
public SearchLibraryPutInGraveyard() { public SearchLibraryPutInGraveyard() {
super(new TargetCardInLibrary(StaticFilters.FILTER_CARD_CREATURE), Outcome.Neutral); super(new TargetCardInLibrary(StaticFilters.FILTER_CARD_CREATURE), Outcome.Neutral);
staticText = "search your library for a card and put that card into your graveyard. Then shuffle"; staticText = "search your library for a creature card, put that card into your graveyard, then shuffle";
} }
public SearchLibraryPutInGraveyard(final SearchLibraryPutInGraveyard effect) { public SearchLibraryPutInGraveyard(final SearchLibraryPutInGraveyard effect) {

View file

@ -55,7 +55,7 @@ class CosmicHorrorEffect extends OneShotEffect {
public CosmicHorrorEffect(Cost cost) { public CosmicHorrorEffect(Cost cost) {
super(Outcome.DestroyPermanent); super(Outcome.DestroyPermanent);
this.cost = cost; this.cost = cost;
staticText = "destroy {this} unless you pay {3}{B}{B}{B}. If {this} is destroyed this way it deals 7 damage to you"; staticText = "destroy {this} unless you pay {3}{B}{B}{B}. If {this} is destroyed this way it deals 7 damage to you";
} }
public CosmicHorrorEffect(final CosmicHorrorEffect effect) { public CosmicHorrorEffect(final CosmicHorrorEffect effect) {

View file

@ -27,7 +27,7 @@ public final class DisasterRadius extends CardImpl {
// As an additional cost to cast Disaster Radius, reveal a creature card from your hand. // As an additional cost to cast Disaster Radius, reveal a creature card from your hand.
TargetCardInHand targetCard = new TargetCardInHand(new FilterCreatureCard("a creature card")); TargetCardInHand targetCard = new TargetCardInHand(new FilterCreatureCard("a creature card from your hand"));
this.getSpellAbility().addCost(new RevealTargetFromHandCost(targetCard)); this.getSpellAbility().addCost(new RevealTargetFromHandCost(targetCard));
// Disaster Radius deals X damage to each creature your opponents control, where X is the revealed card's converted mana cost. // Disaster Radius deals X damage to each creature your opponents control, where X is the revealed card's converted mana cost.

View file

@ -38,7 +38,7 @@ public final class Dispossess extends CardImpl {
class DispossessEffect extends SearchTargetGraveyardHandLibraryForCardNameAndExileEffect { class DispossessEffect extends SearchTargetGraveyardHandLibraryForCardNameAndExileEffect {
public DispossessEffect() { public DispossessEffect() {
super(true, "target opponent's", "any number of cards with that name"); super(true, "target opponent's", "any number of cards with the chosen name");
} }
public DispossessEffect(final DispossessEffect effect) { public DispossessEffect(final DispossessEffect effect) {

View file

@ -40,8 +40,8 @@ class DistantMemoriesEffect extends OneShotEffect {
public DistantMemoriesEffect() { public DistantMemoriesEffect() {
super(Outcome.DrawCard); super(Outcome.DrawCard);
this.staticText = "Search your library for a card, exile it, then shuffle " this.staticText = "Search your library for a card, exile it, then shuffle. "
+ "your library. Any opponent may have you put that card into " + "Any opponent may have you put that card into "
+ "your hand. If no player does, you draw three cards"; + "your hand. If no player does, you draw three cards";
} }

View file

@ -27,7 +27,7 @@ import java.util.UUID;
*/ */
public final class EdificeOfAuthority extends CardImpl { public final class EdificeOfAuthority extends CardImpl {
private static final String rule = "{1}, {T}: Until your next turn, target creature can't attack or block and its activated abilities can't be activated. Activate only if there are three or more brick counter on {this}."; private static final String rule = "{1}, {T}: Until your next turn, target creature can't attack or block and its activated abilities can't be activated. Activate only if there are three or more brick counters on {this}.";
public EdificeOfAuthority(UUID ownerId, CardSetInfo setInfo) { public EdificeOfAuthority(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");

View file

@ -33,7 +33,7 @@ public final class EmberwildeAugur extends CardImpl {
// Sacrifice Emberwilde Augur: Emberwilde Augur deals 3 damage to target player. Activate this ability only during your upkeep. // Sacrifice Emberwilde Augur: Emberwilde Augur deals 3 damage to target player. Activate this ability only during your upkeep.
Ability ability = new ActivateIfConditionActivatedAbility( Ability ability = new ActivateIfConditionActivatedAbility(
Zone.BATTLEFIELD, Zone.BATTLEFIELD,
new DamageTargetEffect(3), new DamageTargetEffect(3, "it"),
new SacrificeSourceCost(), new SacrificeSourceCost(),
new IsStepCondition(PhaseStep.UPKEEP)); new IsStepCondition(PhaseStep.UPKEEP));
ability.addTarget(new TargetPlayerOrPlaneswalker()); ability.addTarget(new TargetPlayerOrPlaneswalker());

View file

@ -48,7 +48,7 @@ class EssenceFluxEffect extends OneShotEffect {
EssenceFluxEffect() { EssenceFluxEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "return that card to the battlefield under its owner's control. If it's a Spirit, put a +1/+1 counter on it"; staticText = "return that card to the battlefield under its owner's control. If it's a Spirit, put a +1/+1 counter on it";
} }
EssenceFluxEffect(final EssenceFluxEffect effect) { EssenceFluxEffect(final EssenceFluxEffect effect) {

View file

@ -123,7 +123,7 @@ class EtherealValkyrieEffect extends OneShotEffect {
Player controller = game.getPlayer(source.getControllerId()); Player controller = game.getPlayer(source.getControllerId());
if (controller != null) { if (controller != null) {
controller.drawCards(1, source, game); controller.drawCards(1, source, game);
TargetCardInHand targetCard = new TargetCardInHand(new FilterCard("card to exile face down. It becomes foretold.")); TargetCardInHand targetCard = new TargetCardInHand(new FilterCard("card to exile face down. It becomes foretold."));
if (controller.chooseTarget(Outcome.Benefit, targetCard, source, game)) { if (controller.chooseTarget(Outcome.Benefit, targetCard, source, game)) {
Card exileCard = game.getCard(targetCard.getFirstTarget()); Card exileCard = game.getCard(targetCard.getFirstTarget());
if (exileCard == null) { if (exileCard == null) {

View file

@ -66,7 +66,7 @@ class FatalLoreEffect extends OneShotEffect {
Player chosenOpponent = game.getPlayer(targetPointer.getFirst(game, source)); Player chosenOpponent = game.getPlayer(targetPointer.getFirst(game, source));
if (controller != null if (controller != null
&& chosenOpponent != null) { && chosenOpponent != null) {
if (chosenOpponent.chooseUse(Outcome.Neutral, "If you choose Yes, the controller draws three cards. If no, the controller gets to destroy up to two target creatures that you control and you get to draw up to 3 cards. Those creatures can't be regenerated.", source, game)) { if (chosenOpponent.chooseUse(Outcome.Neutral, "If you choose Yes, the controller draws three cards. If no, the controller gets to destroy up to two target creatures that you control and you get to draw up to 3 cards. Those creatures can't be regenerated.", source, game)) {
controller.drawCards(3, source, game); controller.drawCards(3, source, game);
} else { } else {
FilterCreaturePermanent filter = new FilterCreaturePermanent("chosen opponent's creature"); FilterCreaturePermanent filter = new FilterCreaturePermanent("chosen opponent's creature");

View file

@ -1,48 +1,38 @@
package mage.cards.f; package mage.cards.f;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.MageObject;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.ActivatedAbilityImpl;
import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.cards.Cards; import mage.constants.*;
import mage.cards.CardsImpl; import mage.filter.FilterCard;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.ComparisonType;
import mage.constants.Outcome;
import mage.constants.TimingRule;
import mage.constants.Zone;
import mage.filter.common.FilterCreatureCard; import mage.filter.common.FilterCreatureCard;
import mage.filter.predicate.mageobject.ManaValuePredicate; import mage.filter.predicate.mageobject.ManaValuePredicate;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player; import mage.players.Player;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
import java.util.UUID;
/** /**
*
* @author escplan9 (Derek Monturo - dmontur1 at gmail dot com) * @author escplan9 (Derek Monturo - dmontur1 at gmail dot com)
*/ */
public final class Fleshwrither extends CardImpl { public final class Fleshwrither extends CardImpl {
public Fleshwrither(UUID ownerId, CardSetInfo setInfo) { public Fleshwrither(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{B}");
this.subtype.add(SubType.HORROR); this.subtype.add(SubType.HORROR);
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// Transfigure {1}{B}{B}: Sacrifice this creature: Search your library for a creature card with the same converted mana cost as this // Transfigure {1}{B}{B}: Sacrifice this creature: Search your library for a creature card with the same converted mana cost as this
// creature and put that card onto the battlefield. Then shuffle your library. Transfigure only as a sorcery. // creature and put that card onto the battlefield. Then shuffle your library. Transfigure only as a sorcery.
SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new FleshwritherEffect(), new ManaCostsImpl("{1}{B}{B}")); this.addAbility(new FleshwritherAbility());
ability.addCost(new SacrificeSourceCost());
ability.setTiming(TimingRule.SORCERY);
this.addAbility(ability);
} }
private Fleshwrither(final Fleshwrither card) { private Fleshwrither(final Fleshwrither card) {
@ -55,11 +45,35 @@ public final class Fleshwrither extends CardImpl {
} }
} }
class FleshwritherAbility extends ActivatedAbilityImpl {
FleshwritherAbility() {
super(Zone.BATTLEFIELD, new FleshwritherEffect(), new ManaCostsImpl<>("{1}{B}{B}"));
this.addCost(new SacrificeSourceCost());
this.setTiming(TimingRule.SORCERY);
}
private FleshwritherAbility(final FleshwritherAbility ability) {
super(ability);
}
@Override
public FleshwritherAbility copy() {
return new FleshwritherAbility(this);
}
@Override
public String getRule() {
return "Transfigure {1}{B}{B} <i>({1}{B}{B}, Sacrifice this creature: " +
"Search your library for a creature card with the same mana value as this creature, " +
"put that card onto the battlefield, then shuffle. Transfigure only as a sorcery.)</i>";
}
}
class FleshwritherEffect extends OneShotEffect { class FleshwritherEffect extends OneShotEffect {
FleshwritherEffect() { FleshwritherEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "Transfigure: Sacrifice this creature: Search your library for a creature card with the same mana value as this creature and put that card onto the battlefield";
} }
FleshwritherEffect(final FleshwritherEffect effect) { FleshwritherEffect(final FleshwritherEffect effect) {
@ -69,22 +83,17 @@ class FleshwritherEffect extends OneShotEffect {
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId()); Player controller = game.getPlayer(source.getControllerId());
MageObject sourceObject = game.getObject(source.getSourceId()); Permanent sourcePermanent = source.getSourcePermanentOrLKI(game);
if (sourceObject != null && controller != null) { if (sourcePermanent == null || controller == null) {
FilterCreatureCard filter = new FilterCreatureCard("creature with mana value " + sourceObject.getManaValue()); return false;
filter.add(new ManaValuePredicate(ComparisonType.EQUAL_TO, sourceObject.getManaValue()));
TargetCardInLibrary target = new TargetCardInLibrary(1, filter);
if (controller.searchLibrary(target, source, game)) {
if (!target.getTargets().isEmpty()) {
Cards chosen = new CardsImpl(target.getTargets());
controller.moveCards(chosen, Zone.BATTLEFIELD, source, game);
}
}
controller.shuffleLibrary(source, game);
return true;
} }
FilterCard filter = new FilterCreatureCard("creature card with mana value " + sourcePermanent.getManaValue());
return false; filter.add(new ManaValuePredicate(ComparisonType.EQUAL_TO, sourcePermanent.getManaValue()));
TargetCardInLibrary target = new TargetCardInLibrary(filter);
controller.searchLibrary(target, source, game);
controller.moveCards(controller.getLibrary().getCard(target.getFirstTarget(), game), Zone.BATTLEFIELD, source, game);
controller.shuffleLibrary(source, game);
return true;
} }
@Override @Override

View file

@ -24,7 +24,7 @@ import java.util.UUID;
*/ */
public final class ForerunnerOfTheEmpire extends CardImpl { public final class ForerunnerOfTheEmpire extends CardImpl {
private static final FilterCreaturePermanent filterAnyDinosaur = new FilterCreaturePermanent(SubType.DINOSAUR, SubType.DINOSAUR.toString()); private static final FilterCreaturePermanent filterAnyDinosaur = new FilterCreaturePermanent(SubType.DINOSAUR, "a " + SubType.DINOSAUR.toString());
static { static {
filterAnyDinosaur.add(TargetController.YOU.getControllerPredicate()); filterAnyDinosaur.add(TargetController.YOU.getControllerPredicate());

View file

@ -28,7 +28,7 @@ public final class Foresight extends CardImpl {
this.getSpellAbility().addEffect(new ForesightEffect()); this.getSpellAbility().addEffect(new ForesightEffect());
// Draw a card at the beginning of the next turn's upkeep. // Draw a card at the beginning of the next turn's upkeep.
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false)); this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false).concatBy("<br>"));
} }
private Foresight(final Foresight card) { private Foresight(final Foresight card) {

View file

@ -16,7 +16,7 @@ import mage.target.common.TargetCardInLibrary;
*/ */
public final class GaeasBounty extends CardImpl { public final class GaeasBounty extends CardImpl {
private static final FilterLandCard filter = new FilterLandCard("Forest"); private static final FilterLandCard filter = new FilterLandCard("Forest cards");
static { static {
filter.add(SubType.FOREST.getPredicate()); filter.add(SubType.FOREST.getPredicate());

View file

@ -1,7 +1,6 @@
package mage.cards.g; package mage.cards.g;
import java.util.UUID;
import mage.Mana; import mage.Mana;
import mage.abilities.common.LimitedTimesPerTurnActivatedAbility; import mage.abilities.common.LimitedTimesPerTurnActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.SacrificeSourceCost;
@ -13,21 +12,28 @@ import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import java.util.UUID;
/** /**
*
* @author spjspj * @author spjspj
*/ */
public final class GaeasTouch extends CardImpl { public final class GaeasTouch extends CardImpl {
private static final FilterCard filter = new FilterCard("a basic Forest card");
static {
filter.add(SuperType.BASIC.getPredicate());
filter.add(SubType.FOREST.getPredicate());
}
public GaeasTouch(UUID ownerId, CardSetInfo setInfo) { public GaeasTouch(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}{G}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}{G}");
// You may put a basic Forest card from your hand onto the battlefield. Activate this ability only any time you could cast a sorcery and only once each turn. // You may put a basic Forest card from your hand onto the battlefield. Activate this ability only any time you could cast a sorcery and only once each turn.
FilterCard filter = new FilterCard("basic Forest card"); LimitedTimesPerTurnActivatedAbility ability = new LimitedTimesPerTurnActivatedAbility(
filter.add(SuperType.BASIC.getPredicate()); Zone.BATTLEFIELD, new PutCardFromHandOntoBattlefieldEffect(filter),
filter.add(SubType.FOREST.getPredicate()); new GenericManaCost(0), 1
LimitedTimesPerTurnActivatedAbility ability = new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, );
new PutCardFromHandOntoBattlefieldEffect(filter), new GenericManaCost(0), 1);
ability.setTiming(TimingRule.SORCERY); ability.setTiming(TimingRule.SORCERY);
addAbility(ability); addAbility(ability);

View file

@ -56,7 +56,7 @@ public final class GateToTheAfterlife extends CardImpl {
// {2}, {T}, Sacrifice Gate to the Afterlife: Search your graveyard, hand, and/or library for a card named God-Pharaoh's Gift and put it onto the battlefield. If you seearch your library this way, shuffle it. Activate this ability only if there are six or more creature cards in your graveyard. // {2}, {T}, Sacrifice Gate to the Afterlife: Search your graveyard, hand, and/or library for a card named God-Pharaoh's Gift and put it onto the battlefield. If you seearch your library this way, shuffle it. Activate this ability only if there are six or more creature cards in your graveyard.
ability = new ConditionalActivatedAbility( ability = new ConditionalActivatedAbility(
Zone.BATTLEFIELD, new GateToTheAfterlifeEffect(), new GenericManaCost(2), Zone.BATTLEFIELD, new GateToTheAfterlifeEffect(), new GenericManaCost(2),
new CardsInControllerGraveyardCondition(6, StaticFilters.FILTER_CARD_CREATURE) new CardsInControllerGraveyardCondition(6, StaticFilters.FILTER_CARD_CREATURES)
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());

View file

@ -108,7 +108,7 @@ class GrandMoffTarkinEffect extends OneShotEffect {
public GrandMoffTarkinEffect() { public GrandMoffTarkinEffect() {
super(Outcome.ReturnToHand); super(Outcome.ReturnToHand);
this.staticText = "destroy target creature that that player controls unless that player pays 2 life. If a player pays life this way, draw a card"; this.staticText = "destroy target creature that that player controls unless that player pays 2 life. If a player pays life this way, draw a card";
} }
public GrandMoffTarkinEffect(final GrandMoffTarkinEffect effect) { public GrandMoffTarkinEffect(final GrandMoffTarkinEffect effect) {

View file

@ -66,7 +66,7 @@ class GryffsBoonEffect extends OneShotEffect {
public GryffsBoonEffect() { public GryffsBoonEffect() {
super(Outcome.PutCardInPlay); super(Outcome.PutCardInPlay);
staticText = "Return {this} from your graveyard to the battlefield attached to target creatur"; staticText = "Return {this} from your graveyard to the battlefield attached to target creature";
} }
public GryffsBoonEffect(final GryffsBoonEffect effect) { public GryffsBoonEffect(final GryffsBoonEffect effect) {

View file

@ -55,7 +55,7 @@ class HarvestSeasonEffect extends OneShotEffect {
HarvestSeasonEffect() { HarvestSeasonEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "Search your library for up to X basic land cards, where X is the number of tapped creatures you control," this.staticText = "Search your library for up to X basic land cards, where X is the number of tapped creatures you control,"
+ " and put those cards onto the battlefield tapped, then shuffle."; + " put those cards onto the battlefield tapped, then shuffle.";
} }
HarvestSeasonEffect(final HarvestSeasonEffect effect) { HarvestSeasonEffect(final HarvestSeasonEffect effect) {

View file

@ -59,7 +59,7 @@ class JacesDefeatEffect extends OneShotEffect {
public JacesDefeatEffect() { public JacesDefeatEffect() {
super(Outcome.Damage); super(Outcome.Damage);
this.staticText = "Counter target blue spell. If it was a Jace planeswalker spell, scry 2."; this.staticText = "Counter target blue spell. If it was a Jace planeswalker spell, scry 2.";
} }
public JacesDefeatEffect(final JacesDefeatEffect effect) { public JacesDefeatEffect(final JacesDefeatEffect effect) {

View file

@ -39,7 +39,7 @@ public final class KariZevsExpertise extends CardImpl {
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn).setText("It gains haste until end of turn")); this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn).setText("It gains haste until end of turn"));
// You may cast a card with converted mana cost 2 or less from your hand without paying its mana cost. // You may cast a card with converted mana cost 2 or less from your hand without paying its mana cost.
this.getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(2)); this.getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(2).concatBy("<br>"));
} }
private KariZevsExpertise(final KariZevsExpertise card) { private KariZevsExpertise(final KariZevsExpertise card) {

View file

@ -29,7 +29,7 @@ public final class KhalniHeartExpedition extends CardImpl {
this.addAbility(new SimpleActivatedAbility( this.addAbility(new SimpleActivatedAbility(
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary( new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(
0, 2, StaticFilters.FILTER_CARD_BASIC_LAND 0, 2, StaticFilters.FILTER_CARD_BASIC_LANDS
), true, Outcome.PutLandInPlay), ), true, Outcome.PutLandInPlay),
new CompositeCost( new CompositeCost(
new RemoveCountersSourceCost(CounterType.QUEST.createInstance(3)), new RemoveCountersSourceCost(CounterType.QUEST.createInstance(3)),

View file

@ -34,7 +34,7 @@ public final class KindlyStranger extends CardImpl {
this.addAbility(new ConditionalActivatedAbility( this.addAbility(new ConditionalActivatedAbility(
Zone.BATTLEFIELD, new TransformSourceEffect(true), new ManaCostsImpl<>("{2}{B}"), Zone.BATTLEFIELD, new TransformSourceEffect(true), new ManaCostsImpl<>("{2}{B}"),
DeliriumCondition.instance, "<i>Delirium</i> &mdash; {2}{B}: Transform {this}. " + DeliriumCondition.instance, "<i>Delirium</i> &mdash; {2}{B}: Transform {this}. " +
"Activate this ability only if there are four or more card types among cards in your graveyard." "Activate only if there are four or more card types among cards in your graveyard."
).addHint(DeliriumHint.instance)); ).addHint(DeliriumHint.instance));
} }

View file

@ -36,7 +36,7 @@ public final class KuldothaPhoenix extends CardImpl {
// <i>Metalcraft</i> &mdash; {4}: Return Kuldotha Phoenix from your graveyard to the battlefield. // <i>Metalcraft</i> &mdash; {4}: Return Kuldotha Phoenix from your graveyard to the battlefield.
// Activate this ability only during your upkeep and only if you control three or more artifacts. // Activate this ability only during your upkeep and only if you control three or more artifacts.
Ability ability = new ConditionalActivatedAbility(Zone.GRAVEYARD, Ability ability = new ConditionalActivatedAbility(Zone.GRAVEYARD,
new ReturnSourceFromGraveyardToBattlefieldEffect(false, true), new ReturnSourceFromGraveyardToBattlefieldEffect(false, false),
new ManaCostsImpl("{4}"), new ManaCostsImpl("{4}"),
new CompoundCondition("during your upkeep and only if you control three or more artifacts", new CompoundCondition("during your upkeep and only if you control three or more artifacts",
new IsStepCondition(PhaseStep.UPKEEP), MetalcraftCondition.instance) new IsStepCondition(PhaseStep.UPKEEP), MetalcraftCondition.instance)

View file

@ -1,40 +1,41 @@
package mage.cards.l; package mage.cards.l;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; 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.SubType; import mage.constants.SubType;
import mage.constants.Outcome;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.NamePredicate; import mage.filter.predicate.mageobject.NamePredicate;
import mage.game.Game;
import mage.players.Player;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
/** import java.util.UUID;
*
* @author LoneFox
/**
* @author LoneFox
*/ */
public final class LlanowarSentinel extends CardImpl { public final class LlanowarSentinel extends CardImpl {
private static final FilterCard filter = new FilterCard("a card named Llanowar Sentinel");
static {
filter.add(new NamePredicate("Llanowar Sentinel"));
}
public LlanowarSentinel(UUID ownerId, CardSetInfo setInfo) { public LlanowarSentinel(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
this.subtype.add(SubType.ELF); this.subtype.add(SubType.ELF);
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// When Llanowar Sentinel enters the battlefield, you may pay {1}{G}. If you do, search your library for a card named Llanowar Sentinel and put that card onto the battlefield. Then shuffle your library. // When Llanowar Sentinel enters the battlefield, you may pay {1}{G}. If you do, search your library for a card named Llanowar Sentinel and put that card onto the battlefield. Then shuffle your library.
this.addAbility(new EntersBattlefieldTriggeredAbility(new LlanowarSentinelEffect())); this.addAbility(new EntersBattlefieldTriggeredAbility(new DoIfCostPaid(
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new ManaCostsImpl<>("{1}{G}")
)));
} }
private LlanowarSentinel(final LlanowarSentinel card) { private LlanowarSentinel(final LlanowarSentinel card) {
@ -46,36 +47,3 @@ public final class LlanowarSentinel extends CardImpl {
return new LlanowarSentinel(this); return new LlanowarSentinel(this);
} }
} }
class LlanowarSentinelEffect extends OneShotEffect {
LlanowarSentinelEffect() {
super(Outcome.Benefit);
this.staticText = "you may pay {1}{G}. If you do, search your library for a card named Llanowar Sentinel and put that card onto the battlefield. Then shuffle"; }
LlanowarSentinelEffect(final LlanowarSentinelEffect effect) {
super(effect);
}
@Override
public LlanowarSentinelEffect copy() {
return new LlanowarSentinelEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
if(player != null) {
if(player.chooseUse(Outcome.BoostCreature, "Do you want to to pay {1}{G}?", source, game)) {
Cost cost = new ManaCostsImpl("{1}{G}");
if(cost.pay(source, game, source, source.getControllerId(), false, null)) {
FilterCard filter = new FilterCard("card named Llanowar Sentinel");
filter.add(new NamePredicate("Llanowar Sentinel"));
new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 1, filter), false, true).apply(game, source);
}
return true;
}
}
return false;
}
}

View file

@ -43,7 +43,7 @@ class ManaSeveranceEffect extends SearchEffect {
public ManaSeveranceEffect() { public ManaSeveranceEffect() {
super(new TargetCardInLibrary(0, Integer.MAX_VALUE, new FilterLandCard()), Outcome.Exile); super(new TargetCardInLibrary(0, Integer.MAX_VALUE, new FilterLandCard()), Outcome.Exile);
this.staticText = "Search your library for any number of land cards and remove them from the game. Shuffle your library afterwards."; this.staticText = "search your library for any number of land cards, exile them, then shuffle";
} }
public ManaSeveranceEffect(final ManaSeveranceEffect effect) { public ManaSeveranceEffect(final ManaSeveranceEffect effect) {

View file

@ -67,7 +67,7 @@ class MisfortuneEffect extends OneShotEffect {
if (controller != null if (controller != null
&& chosenOpponent != null) { && chosenOpponent != null) {
if (chosenOpponent.chooseUse(Outcome.Neutral, "If you choose Yes, the controller puts a +1/+1 counter" if (chosenOpponent.chooseUse(Outcome.Neutral, "If you choose Yes, the controller puts a +1/+1 counter"
+ "on each creature they control and they gain 4 life. If no, the controller puts a -1/-1 counter" + "on each creature they control and they gain 4 life. If no, the controller puts a -1/-1 counter"
+ "on each creature you control and {this} deals 4 damage to you.", source, game)) { + "on each creature you control and {this} deals 4 damage to you.", source, game)) {
Effect putP1P1CounterOnEachControlledCreature = new AddCountersAllEffect( Effect putP1P1CounterOnEachControlledCreature = new AddCountersAllEffect(
CounterType.P1P1.createInstance(), new FilterControlledCreaturePermanent()); CounterType.P1P1.createInstance(), new FilterControlledCreaturePermanent());

View file

@ -47,7 +47,7 @@ public final class NemesisOfMortals extends CardImpl {
// {7}{G}{G}: Monstrosity 5. This ability costs {1} less to activate for each creature card in your graveyard. // {7}{G}{G}: Monstrosity 5. This ability costs {1} less to activate for each creature card in your graveyard.
ability = new MonstrosityAbility("{7}{G}{G}", 5); ability = new MonstrosityAbility("{7}{G}{G}", 5);
for (Effect effect : ability.getEffects()) { for (Effect effect : ability.getEffects()) {
effect.setText("Monstrosity 5. This ability costs {1} less to activate for each creature card in your graveyard"); effect.setText("Monstrosity 5. This ability costs {1} less to activate for each creature card in your graveyard");
} }
ability.setCostAdjuster(NemesisOfMortalsAdjuster.instance); ability.setCostAdjuster(NemesisOfMortalsAdjuster.instance);
this.addAbility(ability); this.addAbility(ability);

View file

@ -70,7 +70,7 @@ class NissaWorldwakerSearchEffect extends OneShotEffect {
public NissaWorldwakerSearchEffect() { public NissaWorldwakerSearchEffect() {
super(Outcome.PutCreatureInPlay); super(Outcome.PutCreatureInPlay);
this.staticText = "Search your library for any number of basic land cards, put them onto the battlefield, then shuffle. Those lands become 4/4 Elemental creatures with trample. They're still lands"; this.staticText = "Search your library for any number of basic land cards, put them onto the battlefield, then shuffle. Those lands become 4/4 Elemental creatures with trample. They're still lands";
} }
public NissaWorldwakerSearchEffect(final NissaWorldwakerSearchEffect effect) { public NissaWorldwakerSearchEffect(final NissaWorldwakerSearchEffect effect) {

View file

@ -56,7 +56,7 @@ class NissasPilgrimageEffect extends OneShotEffect {
public NissasPilgrimageEffect() { public NissasPilgrimageEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "Search your library for up to two basic Forest cards, reveal those cards, and put one onto the battlefield tapped and the rest into your hand. Then shuffle." this.staticText = "Search your library for up to two basic Forest cards, reveal those cards, and put one onto the battlefield tapped and the rest into your hand. Then shuffle."
+ "<br><i>Spell Mastery</i> &mdash; If there are two or more instant and/or sorcery cards in your graveyard, search your library for up to three basic Forest cards instead of two."; + "<br><i>Spell Mastery</i> &mdash; If there are two or more instant and/or sorcery cards in your graveyard, search your library for up to three basic Forest cards instead of two.";
} }

View file

@ -17,7 +17,7 @@ import java.util.UUID;
*/ */
public final class OpenTheGates extends CardImpl { public final class OpenTheGates extends CardImpl {
private static final FilterCard filter = new FilterCard("basic land card or a Gate card"); private static final FilterCard filter = new FilterCard("a basic land card or a Gate card");
static { static {
filter.add(Predicates.or( filter.add(Predicates.or(

View file

@ -68,7 +68,7 @@ class OracleEnVecEffect extends OneShotEffect {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "Target opponent chooses any number of creatures they control. During that player's next turn, " + this.staticText = "Target opponent chooses any number of creatures they control. During that player's next turn, " +
"the chosen creatures attack if able, and other creatures can't attack. At the beginning of that turn's end step, " + "the chosen creatures attack if able, and other creatures can't attack. At the beginning of that turn's end step, " +
"destroy each of the chosen creatures that didn't attack"; "destroy each of the chosen creatures that didn't attack this turn";
} }
OracleEnVecEffect(final OracleEnVecEffect effect) { OracleEnVecEffect(final OracleEnVecEffect effect) {

View file

@ -42,7 +42,7 @@ public final class OraclesVault extends CardImpl {
this.addAbility(new ConditionalActivatedAbility(Zone.BATTLEFIELD, this.addAbility(new ConditionalActivatedAbility(Zone.BATTLEFIELD,
new OraclesVaultFreeEffect(), new TapSourceCost(), new SourceHasCounterCondition(CounterType.BRICK, 3, Integer.MAX_VALUE), new OraclesVaultFreeEffect(), new TapSourceCost(), new SourceHasCounterCondition(CounterType.BRICK, 3, Integer.MAX_VALUE),
"{T}: Exile the top card of your library. Until end of turn, you may play that card without paying its mana cost. " "{T}: Exile the top card of your library. Until end of turn, you may play that card without paying its mana cost. "
+ "Activate only if there are three or more brick counters on {this}")); + "Activate only if there are three or more brick counters on {this}."));
} }
private OraclesVault(final OraclesVault card) { private OraclesVault(final OraclesVault card) {

View file

@ -37,7 +37,7 @@ public final class ParallaxNexus extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
// When Parallax Nexus leaves the battlefield, each player returns to their hand all cards they own exiled with Parallax Nexus. // When Parallax Nexus leaves the battlefield, each player returns to their hand all cards they own exiled with Parallax Nexus.
this.addAbility(new LeavesBattlefieldTriggeredAbility(new ReturnFromExileEffect(Zone.HAND), false)); this.addAbility(new LeavesBattlefieldTriggeredAbility(new ReturnFromExileEffect(Zone.HAND).setText("each player returns to their hand all cards they own exiled with {this}"), false));
} }
private ParallaxNexus(final ParallaxNexus card) { private ParallaxNexus(final ParallaxNexus card) {

View file

@ -53,7 +53,7 @@ class PutridCyclopEffect extends OneShotEffect {
public PutridCyclopEffect() { public PutridCyclopEffect() {
super(Outcome.Detriment); super(Outcome.Detriment);
this.staticText = "scry 1, then reveal the top card of your library. {this} gets -X/-X until end of turn, where X is that card's mana value" this.staticText = "scry 1, then reveal the top card of your library. {this} gets -X/-X until end of turn, where X is that card's mana value."
+ " <i>(To scry 1, look at the top card of your library, then you may put that card on the bottom of your library.)</i>"; + " <i>(To scry 1, look at the top card of your library, then you may put that card on the bottom of your library.)</i>";
} }

View file

@ -78,6 +78,6 @@ class RaidersSpoilsTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Whenever a Warrior you control deals combat damage to a player, you may pay 1 life. If you do, draw a card"; return "Whenever a Warrior you control deals combat damage to a player, you may pay 1 life. If you do, draw a card";
} }
} }

View file

@ -24,7 +24,7 @@ public final class RishkarsExpertise extends CardImpl {
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
// You may cast a card with converted mana cost 5 or less from your hand without paying its mana cost. // You may cast a card with converted mana cost 5 or less from your hand without paying its mana cost.
this.getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(5)); this.getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(5).concatBy("<br>"));
} }
private RishkarsExpertise(final RishkarsExpertise card) { private RishkarsExpertise(final RishkarsExpertise card) {

View file

@ -44,8 +44,8 @@ class RitesOfSpringEffect extends OneShotEffect {
RitesOfSpringEffect() { RitesOfSpringEffect() {
super(Outcome.DrawCard); super(Outcome.DrawCard);
this.staticText = "Discard any number of cards. Search your library for up to that many basic land cards, " + this.staticText = "discard any number of cards. Search your library for up to that many basic land cards, " +
"reveal those cards, and put them into your hand. Then shuffle."; "reveal them, put them into your hand, then shuffle";
} }
private RitesOfSpringEffect(final RitesOfSpringEffect effect) { private RitesOfSpringEffect(final RitesOfSpringEffect effect) {

View file

@ -63,7 +63,7 @@ class ChooseNumberEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId()); Player controller = game.getPlayer(source.getControllerId());
if (controller != null) { if (controller != null) {
int numberChoice = controller.announceXMana(0, Integer.MAX_VALUE, "Choose a number. Noncreature spells with the chosen mana value can't be cast", game, source); int numberChoice = controller.announceXMana(0, Integer.MAX_VALUE, "Choose a number.", game, source);
game.getState().setValue(source.getSourceId().toString(), numberChoice); game.getState().setValue(source.getSourceId().toString(), numberChoice);
Permanent permanent = game.getPermanentEntering(source.getSourceId()); Permanent permanent = game.getPermanentEntering(source.getSourceId());
@ -82,7 +82,7 @@ class ChooseNumberEffect extends OneShotEffect {
} }
private String setText() { private String setText() {
return "Choose a number. Noncreature spells with the chosen mana value can't be cast"; return "Choose a number. Noncreature spells with mana value equal to the chosen number can't be cast";
} }
} }
@ -92,7 +92,7 @@ class SanctumPrelateReplacementEffect extends ContinuousRuleModifyingEffectImpl
public SanctumPrelateReplacementEffect() { public SanctumPrelateReplacementEffect() {
super(Duration.WhileOnBattlefield, Outcome.Detriment); super(Duration.WhileOnBattlefield, Outcome.Detriment);
staticText = "Noncreature spells with the chosen mana value can't be cast"; staticText = "Noncreature spells with mana value equal to the chosen number can't be cast";
} }
public SanctumPrelateReplacementEffect(final SanctumPrelateReplacementEffect effect) { public SanctumPrelateReplacementEffect(final SanctumPrelateReplacementEffect effect) {

View file

@ -63,7 +63,7 @@ public final class SarkhanTheMad extends CardImpl {
class SarkhanTheMadRevealAndDrawEffect extends OneShotEffect { class SarkhanTheMadRevealAndDrawEffect extends OneShotEffect {
private static final String effectText = "Reveal the top card of your library and put it into your hand. {this} deals damage to himself equal to that card's mana value"; private static final String effectText = "Reveal the top card of your library and put it into your hand. {this} deals damage to himself equal to that card's mana value";
SarkhanTheMadRevealAndDrawEffect() { SarkhanTheMadRevealAndDrawEffect() {
super(Outcome.DrawCard); super(Outcome.DrawCard);

View file

@ -47,7 +47,7 @@ class ScatteringStrokeEffect extends OneShotEffect {
public ScatteringStrokeEffect() { public ScatteringStrokeEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "Counter target spell. Clash with an opponent. If you win, at the beginning of your next main phase, you may add {X}, where X is that spell's mana value"; this.staticText = "Counter target spell. Clash with an opponent. If you win, at the beginning of your next main phase, you may add an amount of {C} equal to that spell's mana value";
} }
public ScatteringStrokeEffect(final ScatteringStrokeEffect effect) { public ScatteringStrokeEffect(final ScatteringStrokeEffect effect) {

View file

@ -42,7 +42,7 @@ class SchemingSymmetryEffect extends OneShotEffect {
SchemingSymmetryEffect() { SchemingSymmetryEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "Choose two target players. Each of them searches their library for a card, " + staticText = "Choose two target players. Each of them searches their library for a card, " +
"then shuffles and puts that card on top of it."; "then shuffles and puts that card on top";
} }
private SchemingSymmetryEffect(final SchemingSymmetryEffect effect) { private SchemingSymmetryEffect(final SchemingSymmetryEffect effect) {

View file

@ -70,7 +70,7 @@ class ScryingGlassEffect extends OneShotEffect {
filter.add(new ColorPredicate(color.getColor())); filter.add(new ColorPredicate(color.getColor()));
targetOpponent.revealCards(source, targetOpponent.getHand(), game); targetOpponent.revealCards(source, targetOpponent.getHand(), game);
if (targetOpponent.getHand().count(filter, game) == amount) { if (targetOpponent.getHand().count(filter, game) == amount) {
game.informPlayers(controller.getLogName() + " has chosen the exact number and color of the revealed cards from " + targetOpponent.getName() + "'s hand. They draw a card."); game.informPlayers(controller.getLogName() + " has chosen the exact number and color of the revealed cards from " + targetOpponent.getName() + "'s hand. They draw a card.");
controller.drawCards(1, source, game); controller.drawCards(1, source, game);
return true; return true;
} else { } else {

View file

@ -68,7 +68,7 @@ class SearchForSurvivorsEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId()); Player controller = game.getPlayer(source.getControllerId());
if (controller != null) { if (controller != null) {
game.informPlayers("The controller of Search for Survivors will have their graveyard randomized. " game.informPlayers("The controller of Search for Survivors will have their graveyard randomized. "
+ " A card will be chosen at random from the controller's graveyard. " + " A card will be chosen at random from the controller's graveyard. "
+ " The result is essentially the same as the card rule"); + " The result is essentially the same as the card rule");
// randomly arrange the graveyard // randomly arrange the graveyard

View file

@ -53,7 +53,7 @@ class SearingBlazeEffect extends OneShotEffect {
public SearingBlazeEffect() { public SearingBlazeEffect() {
super(Outcome.Damage); super(Outcome.Damage);
staticText = "{this} deals 1 damage to target player or planeswalker and 1 damage to target creature that player or that planeswalker's controller controls. \nLandfall - If you had a land enter the battlefield under your control this turn, {this} deals 3 damage to that player or planeswalker and 3 damage to that creature instead."; staticText = "{this} deals 1 damage to target player or planeswalker and 1 damage to target creature that player or that planeswalker's controller controls. \nLandfall - If you had a land enter the battlefield under your control this turn, {this} deals 3 damage to that player or planeswalker and 3 damage to that creature instead.";
} }
public SearingBlazeEffect(final SearingBlazeEffect effect) { public SearingBlazeEffect(final SearingBlazeEffect effect) {

View file

@ -66,7 +66,7 @@ class SentinelOfThePearlTridentEffect extends OneShotEffect {
private static final String effectText = "exile target historic permanent you control. " private static final String effectText = "exile target historic permanent you control. "
+ "If you do, return that card to the battlefield under its owner's control" + "If you do, return that card to the battlefield under its owner's control"
+ " at the beginning of the next end step. <i>(Artifacts, legendaries, and Sagas are historic.)</i>"; + " at the beginning of the next end step. <i>(Artifacts, legendaries, and Sagas are historic.)</i>";
SentinelOfThePearlTridentEffect() { SentinelOfThePearlTridentEffect() {
super(Outcome.Detriment); super(Outcome.Detriment);

View file

@ -25,7 +25,8 @@ public final class ShardConvergence extends CardImpl {
// Search your library for a Plains card, an Island card, a Swamp card, and a Mountain card. Reveal those cards and put them into your hand. Then shuffle your library. // Search your library for a Plains card, an Island card, a Swamp card, and a Mountain 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 ShardConvergenceTarget(), true new ShardConvergenceTarget(), true
)); ).setText("search your library for a Plains card, an Island card, a Swamp card, and a Mountain card. " +
"Reveal those cards, put them into your hand, then shuffle"));
} }
private ShardConvergence(final ShardConvergence card) { private ShardConvergence(final ShardConvergence card) {

View file

@ -23,7 +23,7 @@ public final class SramsExpertise extends CardImpl {
this.getSpellAbility().addEffect(new CreateTokenEffect(new ServoToken(), 3)); this.getSpellAbility().addEffect(new CreateTokenEffect(new ServoToken(), 3));
// You may cast a card with converted mana cost 3 or less from your hand without paying its mana cost. // You may cast a card with converted mana cost 3 or less from your hand without paying its mana cost.
this.getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(3)); this.getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(3).concatBy("<br>"));
} }
private SramsExpertise(final SramsExpertise card) { private SramsExpertise(final SramsExpertise card) {

View file

@ -1,7 +1,5 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.condition.common.DeliriumCondition; import mage.abilities.condition.common.DeliriumCondition;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
@ -10,10 +8,9 @@ import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.hint.common.DeliriumHint; import mage.abilities.hint.common.DeliriumHint;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.*;
import mage.constants.SubType;
import mage.constants.Duration; import java.util.UUID;
import mage.constants.Zone;
/** /**
* @author fireshoes * @author fireshoes
@ -32,9 +29,8 @@ public final class StallionOfAshmouth extends CardImpl {
this.addAbility(new ConditionalActivatedAbility( this.addAbility(new ConditionalActivatedAbility(
Zone.BATTLEFIELD, Zone.BATTLEFIELD,
new BoostSourceEffect(1, 1, Duration.EndOfTurn), new BoostSourceEffect(1, 1, Duration.EndOfTurn),
new ManaCostsImpl("{1}{B}"), new ManaCostsImpl<>("{1}{B}"), DeliriumCondition.instance
DeliriumCondition.instance) ).setAbilityWord(AbilityWord.DELIRIUM).addHint(DeliriumHint.instance));
.addHint(DeliriumHint.instance));
} }
private StallionOfAshmouth(final StallionOfAshmouth card) { private StallionOfAshmouth(final StallionOfAshmouth card) {

View file

@ -51,7 +51,7 @@ class TariffEffect extends OneShotEffect {
public TariffEffect() { public TariffEffect() {
super(Outcome.DestroyPermanent); super(Outcome.DestroyPermanent);
this.staticText = "Each player sacrifices the creature they control with the highest mana value unless they pay that creature's mana cost. If two or more creatures a player controls are tied for highest cost, that player chooses one."; this.staticText = "Each player sacrifices the creature they control with the highest mana value unless they pay that creature's mana cost. If two or more creatures a player controls are tied for highest, that player chooses one.";
} }
public TariffEffect(final TariffEffect effect) { public TariffEffect(final TariffEffect effect) {

View file

@ -34,7 +34,7 @@ public final class ThrabenFoulbloods extends CardImpl {
ConditionalContinuousEffect effect = new ConditionalContinuousEffect(new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), DeliriumCondition.instance, "<i>Delirium</i> &mdash; {this} gets +1/+1"); ConditionalContinuousEffect effect = new ConditionalContinuousEffect(new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), DeliriumCondition.instance, "<i>Delirium</i> &mdash; {this} gets +1/+1");
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect);
ability.addEffect(new ConditionalContinuousEffect(new GainAbilitySourceEffect(new MenaceAbility()), DeliriumCondition.instance, ability.addEffect(new ConditionalContinuousEffect(new GainAbilitySourceEffect(new MenaceAbility()), DeliriumCondition.instance,
"and has menace as long as there are four or more card types among cards in your graveyard. <i>(A creature with menace can't be blocked except by two or more creatures.)</i>")); "and has menace as long as there are four or more card types among cards in your graveyard. <i>(A creature with menace can't be blocked except by two or more creatures.)</i>"));
ability.addHint(DeliriumHint.instance); ability.addHint(DeliriumHint.instance);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -50,7 +50,8 @@ class TrenchGorgerEffect extends OneShotEffect {
public TrenchGorgerEffect() { public TrenchGorgerEffect() {
super(Outcome.BoostCreature); super(Outcome.BoostCreature);
this.staticText = "you may search your library for any number of land cards, exile them, then shuffle. If you do, {this}'s power and toughness each become equal to the number of cards exiled this way"; this.staticText = "search your library for any number of land cards, exile them, then shuffle. " +
"If you do, {this} has base power and base toughness each equal to the number of cards exiled this way";
} }
public TrenchGorgerEffect(final TrenchGorgerEffect effect) { public TrenchGorgerEffect(final TrenchGorgerEffect effect) {

View file

@ -50,7 +50,7 @@ class TwoHeadedGiantEffect extends OneShotEffect {
public TwoHeadedGiantEffect() { public TwoHeadedGiantEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "flip two coins. If both coins come up heads, {this} gains double strike until end of turn." this.staticText = "flip two coins. If both coins come up heads, {this} gains double strike until end of turn."
+ " If both coins come up tails, {this} gains menace until end of turn"; + " If both coins come up tails, {this} gains menace until end of turn";
} }

View file

@ -62,7 +62,7 @@ class VancesBlastingCannonsExileEffect extends OneShotEffect {
public VancesBlastingCannonsExileEffect() { public VancesBlastingCannonsExileEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "exile the top card of your library. If it's a nonland card, you may cast that card this turn"; this.staticText = "exile the top card of your library. If it's a nonland card, you may cast that card this turn";
} }
public VancesBlastingCannonsExileEffect(final VancesBlastingCannonsExileEffect effect) { public VancesBlastingCannonsExileEffect(final VancesBlastingCannonsExileEffect effect) {

View file

@ -95,7 +95,7 @@ class VerdantSuccessionTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Whenever a green nontoken creature dies, that creature's controller may search their library for a card with the same name as that creature and put it onto the battlefield. If that player does, they shuffle."; return "Whenever a green nontoken creature dies, that creature's controller may search their library for a card with the same name as that creature, put it onto the battlefield, then shuffle.";
} }
} }

View file

@ -36,7 +36,7 @@ import java.util.UUID;
public final class WallOfStolenIdentity extends CardImpl { public final class WallOfStolenIdentity extends CardImpl {
final static private String rule = "You may have Wall of Stolen Identity enter the battlefield as a copy of any " final static private String rule = "You may have Wall of Stolen Identity enter the battlefield as a copy of any "
+ "creature on the battlefield, except it's a wall in addition to its other types and it has defender. " + "creature on the battlefield, except it's a wall in addition to its other types and it has defender. "
+ "When you do, tap the copied creature and it doesn't untap during its " + "When you do, tap the copied creature and it doesn't untap during its "
+ "controller's untap step for as long as you control {this}"; + "controller's untap step for as long as you control {this}";

View file

@ -31,7 +31,7 @@ public final class WarpedLandscape extends CardImpl {
// {2}, {T}, Sacrifice Warped Landscape: Search your library for a basic land card and put it onto the battlefield tapped. Then shuffle your library. // {2}, {T}, Sacrifice Warped Landscape: Search your library for a basic land card and put it 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, 1, StaticFilters.FILTER_CARD_BASIC_LAND), true, true), new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true),
new GenericManaCost(2)); new GenericManaCost(2));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());

View file

@ -34,7 +34,7 @@ public final class WildFieldScarecrow extends CardImpl {
// {2}, Sacrifice Wild-Field Scarecrow: Search your library for up to two basic land cards, reveal them, and put them into your hand. Then shuffle your library. // {2}, Sacrifice Wild-Field Scarecrow: 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_LAND), true, true), new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_LANDS), true, true),
new GenericManaCost(2)); new GenericManaCost(2));
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
this.addAbility(ability); this.addAbility(ability);

View file

@ -40,7 +40,7 @@ public final class WindZendikon extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
Ability ability2 = new SimpleStaticAbility(Zone.BATTLEFIELD, new BecomesCreatureAttachedEffect( Ability ability2 = new SimpleStaticAbility(Zone.BATTLEFIELD, new BecomesCreatureAttachedEffect(
new WindZendikonElementalToken(), "Enchanted land is a 2/2 blue Elemental creature with flying. It's still a land", new WindZendikonElementalToken(), "Enchanted land is a 2/2 blue Elemental creature with flying. It's still a land",
Duration.WhileOnBattlefield, BecomesCreatureAttachedEffect.LoseType.COLOR)); Duration.WhileOnBattlefield, BecomesCreatureAttachedEffect.LoseType.COLOR));
this.addAbility(ability2); this.addAbility(ability2);

View file

@ -42,7 +42,7 @@ public final class WolfOfDevilsBreach extends CardImpl {
toPay.add(new DiscardCardCost()); toPay.add(new DiscardCardCost());
Ability ability = new AttacksTriggeredAbility(new DoIfCostPaid(new DamageTargetEffect(new WolfOfDevilsBreachDiscardCostCardConvertedMana()), toPay, Ability ability = new AttacksTriggeredAbility(new DoIfCostPaid(new DamageTargetEffect(new WolfOfDevilsBreachDiscardCostCardConvertedMana()), toPay,
"Pay {1}{R} and discard a card to let {this} do damage to target creature or planeswalker equal to the discarded card's mana value?", true), false, "Pay {1}{R} and discard a card to let {this} do damage to target creature or planeswalker equal to the discarded card's mana value?", true), false,
"Whenever {this} attacks you may pay {1}{R} and discard a card. If you do, {this} deals damage to target creature or planeswalker " "Whenever {this} attacks, you may pay {1}{R} and discard a card. If you do, {this} deals damage to target creature or planeswalker "
+ "equal to the discarded card's mana value."); + "equal to the discarded card's mana value.");
ability.addTarget(new TargetCreatureOrPlaneswalker()); ability.addTarget(new TargetCreatureOrPlaneswalker());
this.addAbility(ability); this.addAbility(ability);

View file

@ -23,7 +23,7 @@ public final class YahennisExpertise extends CardImpl {
this.getSpellAbility().addEffect(new BoostAllEffect(-3, -3, Duration.EndOfTurn)); this.getSpellAbility().addEffect(new BoostAllEffect(-3, -3, Duration.EndOfTurn));
// You may cast a card with converted mana cost 3 or less from your hand without paying its mana cost. // You may cast a card with converted mana cost 3 or less from your hand without paying its mana cost.
this.getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(3)); this.getSpellAbility().addEffect(new CastWithoutPayingManaCostEffect(3).concatBy("<br>"));
} }
private YahennisExpertise(final YahennisExpertise card) { private YahennisExpertise(final YahennisExpertise card) {

View file

@ -158,7 +158,7 @@ public class RollPlanarDieEffect extends OneShotEffect {
} }
} }
} }
sb.append(". If you roll PW, planeswalk to a new plane"); sb.append(". If you roll PW, planeswalk to a new plane");
return sb.toString(); return sb.toString();
} }

View file

@ -188,7 +188,7 @@ public class BecomesCreatureTargetEffect extends ContinuousEffectImpl {
sb.append(". It's still a land"); sb.append(". It's still a land");
} }
} }
return sb.toString(); return sb.toString().replace(" .", ".");
} }
} }

View file

@ -39,7 +39,7 @@ public class CastWithoutPayingManaCostEffect extends OneShotEffect {
public CastWithoutPayingManaCostEffect(DynamicValue maxCost) { public CastWithoutPayingManaCostEffect(DynamicValue maxCost) {
super(Outcome.PlayForFree); super(Outcome.PlayForFree);
this.manaCost = maxCost; this.manaCost = maxCost;
this.staticText = "you may cast a card with mana value " this.staticText = "you may cast a spell with mana value "
+ maxCost + " or less from your hand without paying its mana cost"; + maxCost + " or less from your hand without paying its mana cost";
} }

View file

@ -55,7 +55,7 @@ public class GravestormAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Gravestorm <i>(When you cast this spell, copy it for each permanent put into a graveyard this turn. You may choose new targets for the copies.</i>)"; return "Gravestorm <i>(When you cast this spell, copy it for each permanent put into a graveyard this turn. You may choose new targets for the copies.)</i>";
} }
} }

View file

@ -1211,7 +1211,7 @@ public abstract class GameImpl implements Game, Serializable {
return player.getId(); return player.getId();
} }
} }
logger.debug("Game was not possible to pick a choosing player. GameId:" + getId()); logger.debug("Game was not possible to pick a choosing player. GameId:" + getId());
return null; return null;
} }

View file

@ -34,7 +34,7 @@ public final class BelzenlokDemonToken extends TokenImpl {
public BelzenlokDemonToken() { public BelzenlokDemonToken() {
super("Demon", "6/6 black Demon creature token with flying, trample, and " super("Demon", "6/6 black Demon creature token with flying, trample, and "
+ "\"At the beginning of your upkeep, sacrifice another creature. If you can't, this creature deals 6 damage to you.\""); + "\"At the beginning of your upkeep, sacrifice another creature. If you can't, this creature deals 6 damage to you.\"");
availableImageSetCodes = tokenImageSets; availableImageSetCodes = tokenImageSets;
cardType.add(CardType.CREATURE); cardType.add(CardType.CREATURE);
color.setBlack(true); color.setBlack(true);
@ -75,7 +75,7 @@ class BelzenlokDemonTokenEffect extends OneShotEffect {
BelzenlokDemonTokenEffect() { BelzenlokDemonTokenEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "sacrifice another creature. If you can't, this creature deals 6 damage to you."; this.staticText = "sacrifice another creature. If you can't, this creature deals 6 damage to you.";
} }
BelzenlokDemonTokenEffect(final BelzenlokDemonTokenEffect effect) { BelzenlokDemonTokenEffect(final BelzenlokDemonTokenEffect effect) {