some text fixes around effects which draw cards and lose life

This commit is contained in:
theelk801 2026-01-18 10:34:17 -05:00
parent 48dee7d128
commit 75717bc839
57 changed files with 177 additions and 308 deletions

View file

@ -1,8 +1,6 @@
package mage.cards.a;
import java.util.UUID;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawCardTargetEffect;
import mage.abilities.effects.common.LoseLifeTargetEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
@ -14,29 +12,26 @@ import mage.target.TargetPlayer;
import mage.target.common.TargetOpponentsCreaturePermanent;
import mage.target.targetpointer.SecondTargetPointer;
import java.util.UUID;
/**
*
* @author Styxo
*/
public final class AcquireTarget extends CardImpl {
public AcquireTarget(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{B}");
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B}");
// Target player draws two cards and loses 2 life.
this.getSpellAbility().addTarget(new TargetPlayer());
this.getSpellAbility().addEffect(new DrawCardTargetEffect(2));
Effect effect = new LoseLifeTargetEffect(2);
effect.setText("and loses 2 life");
this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addEffect(new LoseLifeTargetEffect(2).concatBy("and"));
// Put a bounty counter on up to one target creature an opponent controls.
effect = new AddCountersTargetEffect(CounterType.BOUNTY.createInstance());
effect.setTargetPointer(new SecondTargetPointer());
effect.setText("Put a bounty counter on up to one target creature an opponent controls.");
this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.BOUNTY.createInstance())
.setTargetPointer(new SecondTargetPointer())
.setText("Put a bounty counter on up to one target creature an opponent controls."));
this.getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent(0, 1));
}
private AcquireTarget(final AcquireTarget card) {

View file

@ -35,8 +35,7 @@ public final class ArcaneDenial extends CardImpl {
// You draw a card at the beginning of the next turn's upkeep.
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(
new DrawCardSourceControllerEffect(1)
.setText("you draw a card")
new DrawCardSourceControllerEffect(1, true)
), false).concatBy("<br>")
);
}

View file

@ -1,39 +1,31 @@
package mage.cards.a;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.GainLifeTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.target.common.TargetOpponent;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class Armistice extends CardImpl {
public Armistice(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{W}");
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}");
// {3}{W}{W}: You draw a card and target opponent gains 3 life.
Effect effect = new DrawCardSourceControllerEffect(1);
effect.setText("You draw a card");
Ability ability = new SimpleActivatedAbility(effect, new ManaCostsImpl<>("{3}{W}{W}"));
effect = new GainLifeTargetEffect(3);
effect.setText("and target opponent gains 3 life");
ability.addEffect(effect);
Ability ability = new SimpleActivatedAbility(new DrawCardSourceControllerEffect(1, true), new ManaCostsImpl<>("{3}{W}{W}"));
ability.addEffect(new GainLifeTargetEffect(3).concatBy("and"));
ability.addTarget(new TargetOpponent());
this.addAbility(ability);
}
private Armistice(final Armistice card) {

View file

@ -4,7 +4,6 @@ package mage.cards.b;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawCardTargetEffect;
import mage.abilities.effects.common.LoseLifeTargetEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
@ -23,7 +22,6 @@ import mage.target.common.TargetOpponentsCreaturePermanent;
import java.util.UUID;
/**
*
* @author Styxo
*/
public final class BlackMarketDealer extends CardImpl {
@ -48,9 +46,7 @@ public final class BlackMarketDealer extends CardImpl {
// <i>Bounty</i> &mdash; Whenever a creature an opponent controls with a bounty counter on it dies, target player loses 1 life and draws a card.
ability = new BountyAbility(new LoseLifeTargetEffect(1));
Effect effect = new DrawCardTargetEffect(1);
effect.setText("and draws a card");
ability.addEffect(effect);
ability.addEffect(new DrawCardTargetEffect(1).withTargetDescription("and"));
ability.addTarget(new TargetPlayer());
this.addAbility(ability);
}

View file

@ -19,7 +19,7 @@ public final class BloodPact extends CardImpl {
// Target player draws two cards and loses 2 life.
this.getSpellAbility().addEffect(new DrawCardTargetEffect(2));
this.getSpellAbility().addEffect(new LoseLifeTargetEffect(2).setText("and loses 2 life"));
this.getSpellAbility().addEffect(new LoseLifeTargetEffect(2).withTargetDescription("and"));
this.getSpellAbility().addTarget(new TargetPlayer());
}

View file

@ -30,7 +30,7 @@ public final class BloodgiftDemon extends CardImpl {
// At the beginning of your upkeep, target player draws a card and loses 1 life.
Ability ability = new BeginningOfUpkeepTriggeredAbility(new DrawCardTargetEffect(1));
ability.addEffect(new LoseLifeTargetEffect(1).setText("and loses 1 life"));
ability.addEffect(new LoseLifeTargetEffect(1).withTargetDescription("and"));
ability.addTarget(new TargetPlayer());
this.addAbility(ability);
}

View file

@ -68,7 +68,7 @@ public final class DoctorDoom extends CardImpl {
// At the beginning of your end step, you draw a card and lose 1 life.
Ability ability = new BeginningOfEndStepTriggeredAbility(new DrawCardSourceControllerEffect(1, true));
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
ability.addEffect(new LoseLifeSourceControllerEffect(1, false).concatBy("and"));
this.addAbility(ability);
}

View file

@ -35,7 +35,7 @@ public final class DreadPresence extends CardImpl {
// Whenever a Swamp you control enters, choose one ---
// You draw a card and you lose 1 life.
Ability ability = new EntersBattlefieldControlledTriggeredAbility(
new DrawCardSourceControllerEffect(1).setText("you draw a card"), filter
new DrawCardSourceControllerEffect(1, true), filter
);
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));

View file

@ -1,12 +1,12 @@
package mage.cards.e;
import mage.abilities.Ability;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@ -26,19 +26,15 @@ public final class EyeOfVecna extends CardImpl {
// When Eye of Vecna enters the battlefield, you draw a card and you lose 2 life.
Ability ability = new EntersBattlefieldTriggeredAbility(
new DrawCardSourceControllerEffect(1).setText("you draw a card")
new DrawCardSourceControllerEffect(1, true)
);
ability.addEffect(new LoseLifeSourceControllerEffect(2).concatBy("and"));
this.addAbility(ability);
// At the beginning of your upkeep, you may pay {2}. If you do, you draw a card and you lose 2 life.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
new DoIfCostPaid(
new DrawCardSourceControllerEffect(1)
.setText("you draw a card"),
new GenericManaCost(2)
).addEffect(new LoseLifeSourceControllerEffect(2).concatBy("and"))
));
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new DoIfCostPaid(
new DrawCardSourceControllerEffect(1, true), new GenericManaCost(2)
).addEffect(new LoseLifeSourceControllerEffect(2).concatBy("and"))));
}
private EyeOfVecna(final EyeOfVecna card) {

View file

@ -33,8 +33,7 @@ public class FaerieMastermind extends CardImpl {
//Whenever an opponent draws their second card each turn, you draw a card.
this.addAbility(new DrawNthCardTriggeredAbility(
new DrawCardSourceControllerEffect(1)
.setText("you draw a card"),
new DrawCardSourceControllerEffect(1, true),
false, TargetController.OPPONENT, 2
));

View file

@ -36,7 +36,7 @@ public final class FellStinger extends CardImpl {
// When Fell Stinger exploits a creature, target player draws two cards and loses 2 life.
Ability ability = new ExploitCreatureTriggeredAbility(new DrawCardTargetEffect(2));
ability.addEffect(new LoseLifeTargetEffect(2).setText("and loses 2 life"));
ability.addEffect(new LoseLifeTargetEffect(2).withTargetDescription("and"));
ability.addTarget(new TargetPlayer());
this.addAbility(ability);
}

View file

@ -29,7 +29,7 @@ public final class FirstSphereGargantua extends CardImpl {
// When First-Sphere Gargantua enters the battlefield, you draw a card and you lose 1 life.
Ability ability = new EntersBattlefieldTriggeredAbility(
new DrawCardSourceControllerEffect(1).setText("you draw a card")
new DrawCardSourceControllerEffect(1, true)
);
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
this.addAbility(ability);

View file

@ -23,7 +23,7 @@ public final class ForebodingFruit extends CardImpl {
// Target player draws two cards and loses 2 life.
this.getSpellAbility().addEffect(new DrawCardTargetEffect(2));
this.getSpellAbility().addEffect(new LoseLifeTargetEffect(2).setText("and loses 2 life"));
this.getSpellAbility().addEffect(new LoseLifeTargetEffect(2).withTargetDescription("and"));
this.getSpellAbility().addTarget(new TargetPlayer());
// Adamant If at least three black mana was spent to cast this spell, create a Food token.

View file

@ -29,7 +29,7 @@ public final class FoulmireKnight extends AdventureCard {
// Profane Insight
// You draw a card and you lose 1 life.
this.getSpellCard().getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).setText("You draw a card"));
this.getSpellCard().getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1, true));
this.getSpellCard().getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
this.finalizeAdventure();

View file

@ -18,8 +18,7 @@ public final class FuneralRites extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B}");
// You draw two cards, lose 2 life, and put the top two cards of your library into your graveyard
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2)
.setText("You draw two cards"));
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2, true));
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2)
.setText(", lose 2 life"));
this.getSpellAbility().addEffect(new MillCardsControllerEffect(2)

View file

@ -1,11 +1,8 @@
package mage.cards.f;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.DealsDamageToOpponentTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.discard.DiscardTargetEffect;
import mage.abilities.keyword.TrampleAbility;
@ -14,8 +11,9 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.UUID;
/**
*
* @author LoneFox
*/
public final class FungalShambler extends CardImpl {
@ -29,13 +27,10 @@ public final class FungalShambler extends CardImpl {
// Trample
this.addAbility(TrampleAbility.getInstance());
// Whenever Fungal Shambler deals damage to an opponent, you draw a card and that opponent discards a card.
Effect effect = new DrawCardSourceControllerEffect(1);
effect.setText("you draw a card");
Ability ability = new DealsDamageToOpponentTriggeredAbility(effect, false, false, true);
effect = new DiscardTargetEffect(1);
effect.setText("and that opponent discards a card");
ability.addEffect(effect);
Ability ability = new DealsDamageToOpponentTriggeredAbility(new DrawCardSourceControllerEffect(1), false, false, true);
ability.addEffect(new DiscardTargetEffect(1).setText("and that opponent discards a card"));
this.addAbility(ability);
}

View file

@ -1,7 +1,6 @@
package mage.cards.g;
import mage.MageInt;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.common.EntersBattlefieldOrAttacksSourceTriggeredAbility;
import mage.abilities.costs.common.PayEnergyCost;
import mage.abilities.effects.common.DoIfCostPaid;
@ -9,6 +8,7 @@ import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
import mage.abilities.effects.common.counter.GetEnergyCountersControllerEffect;
import mage.abilities.keyword.MenaceAbility;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@ -37,7 +37,7 @@ public final class GlintSleeveSiphoner extends CardImpl {
// At the beginning of your upkeep, you may pay {E}{E}. If you do, draw a card and you lose 1 life.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new DoIfCostPaid(
new DrawCardSourceControllerEffect(1).setText("you draw a card"), new PayEnergyCost(2)
new DrawCardSourceControllerEffect(1, true), new PayEnergyCost(2)
).addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"))));
}

View file

@ -1,6 +1,5 @@
package mage.cards.h;
import java.util.UUID;
import mage.abilities.effects.common.DrawCardTargetEffect;
import mage.abilities.effects.common.LoseLifeTargetEffect;
import mage.cards.CardImpl;
@ -8,18 +7,19 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.target.TargetPlayer;
import java.util.UUID;
/**
*
* @author Loki
*/
public final class HarrowingJourney extends CardImpl {
public HarrowingJourney(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{B}");
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{B}");
// Target player draws three cards and loses 3 life.
this.getSpellAbility().addEffect(new DrawCardTargetEffect(3));
this.getSpellAbility().addEffect(new LoseLifeTargetEffect(3).setText("and loses 3 life"));
this.getSpellAbility().addEffect(new LoseLifeTargetEffect(3).withTargetDescription("and"));
this.getSpellAbility().addTarget(new TargetPlayer());
}

View file

@ -60,7 +60,7 @@ public final class HenrikaDomnathi extends TransformingDoubleFacedCard {
ability.getModes().setLimitUsageByOnce(false);
// You draw a card and you lose 1 life.
Mode mode = new Mode(new DrawCardSourceControllerEffect(1).setText("you draw a card"));
Mode mode = new Mode(new DrawCardSourceControllerEffect(1));
mode.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
mode.setModeTag("draw and lose life");
ability.addMode(mode);

View file

@ -32,7 +32,7 @@ public final class InsatiableAvarice extends CardImpl {
// + {B}{B} -- Target player draws three cards and loses 3 life.
this.getSpellAbility().addMode(new Mode(new DrawCardTargetEffect(3))
.addEffect(new LoseLifeTargetEffect(3).setText("and loses 3 life"))
.addEffect(new LoseLifeTargetEffect(3).withTargetDescription("and"))
.addTarget(new TargetPlayer())
.withCost(new ManaCostsImpl<>("{B}{B}")));
}

View file

@ -1,31 +1,19 @@
package mage.cards.k;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.ZoneChangeAllTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.constants.*;
import mage.filter.FilterPermanent;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.ZoneChangeEvent;
import mage.players.Player;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class KothophedSoulHoarder extends CardImpl {
@ -37,7 +25,7 @@ public final class KothophedSoulHoarder extends CardImpl {
}
public KothophedSoulHoarder(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{B}{B}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}{B}");
this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.DEMON);
this.power = new MageInt(6);
@ -47,13 +35,13 @@ public final class KothophedSoulHoarder extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// Whenever a permanent owned by another player is put into the graveyard from the battlefield, you draw one card and lose 1 life.
Effect effect = new DrawCardSourceControllerEffect(1);
effect.setText("you draw a card");
Ability ability = new ZoneChangeAllTriggeredAbility(Zone.BATTLEFIELD, Zone.BATTLEFIELD, Zone.GRAVEYARD, effect, filter,
"Whenever a permanent owned by another player is put into a graveyard from the battlefield, ", false);
effect = new LoseLifeSourceControllerEffect(1);
effect.setText("and you lose 1 life");
ability.addEffect(effect);
Ability ability = new ZoneChangeAllTriggeredAbility(
Zone.BATTLEFIELD, Zone.BATTLEFIELD, Zone.GRAVEYARD,
new DrawCardSourceControllerEffect(1, true),
filter, "Whenever a permanent owned by another player " +
"is put into a graveyard from the battlefield, ", false
);
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
this.addAbility(ability);
}
@ -66,36 +54,3 @@ public final class KothophedSoulHoarder extends CardImpl {
return new KothophedSoulHoarder(this);
}
}
class KothophedSoulHoarderTriggeredAbility extends TriggeredAbilityImpl {
public KothophedSoulHoarderTriggeredAbility(Effect effect) {
super(Zone.BATTLEFIELD, effect);
setTriggerPhrase("Whenever a creature leaves an opponent's graveyard, ");
}
private KothophedSoulHoarderTriggeredAbility(final KothophedSoulHoarderTriggeredAbility ability) {
super(ability);
}
@Override
public KothophedSoulHoarderTriggeredAbility copy() {
return new KothophedSoulHoarderTriggeredAbility(this);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.ZONE_CHANGE;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
ZoneChangeEvent zEvent = (ZoneChangeEvent) event;
if (zEvent.getToZone() == Zone.GRAVEYARD && zEvent.getFromZone() == Zone.BATTLEFIELD) {
Card card = game.getCard(zEvent.getTargetId());
Player controller = game.getPlayer(getControllerId());
return card != null && controller != null && controller.hasOpponent(card.getOwnerId(), game);
}
return false;
}
}

View file

@ -28,7 +28,7 @@ public final class LilianasContract extends CardImpl {
// When Liliana's Contract enters the battlefield, you draw four cards and you lose 4 life.
Ability ability = new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(4, true));
ability.addEffect(new LoseLifeSourceControllerEffect(4).setText("and you lose 4 life"));
ability.addEffect(new LoseLifeSourceControllerEffect(4).concatBy("and"));
this.addAbility(ability);
// At the beginning of your upkeep, if you control four or more Demons with different names, you win the game.

View file

@ -1,8 +1,6 @@
package mage.cards.l;
import java.util.UUID;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
import mage.abilities.effects.common.counter.GetEnergyCountersControllerEffect;
@ -10,25 +8,20 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class LiveFast extends CardImpl {
public LiveFast(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{B}");
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B}");
// You draw two cards, lose 2 life, and get {E}{E}.
Effect effect = new DrawCardSourceControllerEffect(2);
effect.setText("You draw two cards");
getSpellAbility().addEffect(effect);
effect = new LoseLifeSourceControllerEffect(2);
effect.setText(", lose 2 life");
getSpellAbility().addEffect(effect);
effect = new GetEnergyCountersControllerEffect(2);
effect.setText(", and get {E}{E} <i>(two energy counters)</i>.");
getSpellAbility().addEffect(effect);
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2, true));
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2).setText(", lose 2 life"));
this.getSpellAbility().addEffect(new GetEnergyCountersControllerEffect(2).setText(", and get {E}{E} <i>(two energy counters)</i>."));
}
private LiveFast(final LiveFast card) {

View file

@ -39,7 +39,7 @@ public final class LolthSpiderQueen extends CardImpl {
));
// 0: You draw a card and you lose 1 life.
Ability ability = new LoyaltyAbility(new DrawCardSourceControllerEffect(1).setText("you draw a card"), 0);
Ability ability = new LoyaltyAbility(new DrawCardSourceControllerEffect(1, true), 0);
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
this.addAbility(ability);

View file

@ -36,7 +36,6 @@ public final class MeasureOfWickedness extends CardImpl {
// At the beginning of your end step, sacrifice Measure of Wickedness and you lose 8 life.
Ability ability = new BeginningOfEndStepTriggeredAbility(TargetController.YOU, new SacrificeSourceEffect(), false, null);
Effect effect = new LoseLifeSourceControllerEffect(8);
effect.setText("and you lose 8 life");
ability.addEffect(effect);
this.addAbility(ability);

View file

@ -1,42 +1,36 @@
package mage.cards.m;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import java.util.UUID;
/**
*
* @author Loki
*/
public final class MoriokReplica extends CardImpl {
public MoriokReplica (UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{3}");
public MoriokReplica(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}");
this.subtype.add(SubType.WARRIOR);
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// {1}{B}, Sacrifice Moriok Replica: You draw two cards and you lose 2 life.
Effect effect = new DrawCardSourceControllerEffect(2);
effect.setText("You draw two cards");
Ability ability = new SimpleActivatedAbility(effect, new ManaCostsImpl<>("{1}{B}"));
effect = new LoseLifeSourceControllerEffect(2);
effect.setText("and you lose 2 life");
Ability ability = new SimpleActivatedAbility(
new DrawCardSourceControllerEffect(2, true), new ManaCostsImpl<>("{1}{B}")
);
ability.addCost(new SacrificeSourceCost());
ability.addEffect(effect);
ability.addEffect(new LoseLifeSourceControllerEffect(2).concatBy("and"));
this.addAbility(ability);
}
@ -48,5 +42,4 @@ public final class MoriokReplica extends CardImpl {
public MoriokReplica copy() {
return new MoriokReplica(this);
}
}

View file

@ -1,26 +1,25 @@
package mage.cards.n;
import java.util.UUID;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import java.util.UUID;
/**
*
* @author jonubuu
*/
public final class NightsWhisper extends CardImpl {
public NightsWhisper(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{1}{B}");
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{B}");
// You draw two cards and you lose 2 life.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2, true));
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2).concatBy("and"));
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2, false).concatBy("and"));
}
private NightsWhisper(final NightsWhisper card) {

View file

@ -1,6 +1,5 @@
package mage.cards.n;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.CantBeCounteredSourceAbility;
@ -8,17 +7,18 @@ import mage.abilities.common.DrawCardControllerTriggeredAbility;
import mage.abilities.common.SpellCastAllTriggeredAbility;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.filter.StaticFilters;
import mage.target.common.TargetAnyTarget;
import java.util.UUID;
/**
*
* @author TheElk801
*/
public final class NivMizzetParun extends CardImpl {
@ -47,7 +47,7 @@ public final class NivMizzetParun extends CardImpl {
// Whenever a player casts an instant or sorcery spell, you draw a card.
this.addAbility(new SpellCastAllTriggeredAbility(
new DrawCardSourceControllerEffect(1).setText("you draw a card"),
new DrawCardSourceControllerEffect(1, true),
StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false
));
}

View file

@ -27,7 +27,7 @@ public final class NoviceOccultist extends CardImpl {
// When Novice Occultist dies, you draw a card and you lose 1 life.
Ability ability = new DiesSourceTriggeredAbility(
new DrawCardSourceControllerEffect(1).setText("you draw a card")
new DrawCardSourceControllerEffect(1, true)
);
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
this.addAbility(ability);

View file

@ -1,8 +1,5 @@
package mage.cards.p;
import java.util.UUID;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawCardTargetEffect;
import mage.abilities.effects.common.LoseLifeTargetEffect;
import mage.cards.CardImpl;
@ -10,8 +7,9 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.target.TargetPlayer;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class PainfulLesson extends CardImpl {
@ -22,9 +20,7 @@ public final class PainfulLesson extends CardImpl {
// Target player draws two cards and loses 2 life.
this.getSpellAbility().addTarget(new TargetPlayer());
this.getSpellAbility().addEffect(new DrawCardTargetEffect(2));
Effect effect = new LoseLifeTargetEffect(2);
effect.setText("and loses 2 life");
this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addEffect(new LoseLifeTargetEffect(2).withTargetDescription("and"));
}
private PainfulLesson(final PainfulLesson card) {

View file

@ -1,9 +1,6 @@
package mage.cards.p;
import java.util.UUID;
import mage.abilities.dynamicvalue.common.ColorsOfManaSpentToCastCount;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
import mage.cards.CardImpl;
@ -11,23 +8,22 @@ import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class PainfulTruths extends CardImpl {
public PainfulTruths(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{B}");
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B}");
// <i>Converge</i> &mdash; You draw X cards and lose X life, where X is the number of colors of mana spent to cast Painful Truths.
getSpellAbility().setAbilityWord(AbilityWord.CONVERGE);
Effect effect = new DrawCardSourceControllerEffect(ColorsOfManaSpentToCastCount.getInstance());
effect.setText("You draw X cards");
getSpellAbility().addEffect(effect);
effect = new LoseLifeSourceControllerEffect(ColorsOfManaSpentToCastCount.getInstance());
effect.setText("and you lose X life, where X is the number of colors of mana spent to cast this spell");
getSpellAbility().addEffect(effect);
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(ColorsOfManaSpentToCastCount.getInstance())
.setText("you draw X cards"));
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(ColorsOfManaSpentToCastCount.getInstance())
.setText("and lose X life, where X is the number of colors of mana spent to cast this spell"));
this.getSpellAbility().setAbilityWord(AbilityWord.CONVERGE);
}
private PainfulTruths(final PainfulTruths card) {

View file

@ -25,7 +25,7 @@ public final class PhyrexianRager extends CardImpl {
this.power = new MageInt(2);
this.toughness = new MageInt(2);
Ability ability = new EntersBattlefieldTriggeredAbility(
new DrawCardSourceControllerEffect(1).setText("you draw a card"), false
new DrawCardSourceControllerEffect(1, true), false
);
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
this.addAbility(ability);

View file

@ -28,7 +28,7 @@ public final class PlumbTheForbidden extends CardImpl {
this.getSpellAbility().addCost(new PlumbTheForbiddenCost());
// You draw a card and you lose 1 life.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).setText("you draw a card"));
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1, true));
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
}

View file

@ -2,9 +2,7 @@ package mage.cards.p;
import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
import mage.abilities.keyword.EntwineAbility;
@ -31,16 +29,11 @@ public final class PromiseOfPower extends CardImpl {
this.getSpellAbility().getModes().setMaxModes(1);
// - You draw five cards and you lose 5 life.
Effect effect = new DrawCardSourceControllerEffect(5);
effect.setText("You draw five cards");
this.getSpellAbility().addEffect(effect);
effect = new LoseLifeSourceControllerEffect(5);
effect.setText("and you lose 5 life");
this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(5, true));
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(5).concatBy("and"));
// - Create an X/X black Demon creature token with flying, where X is the number of cards in your hand.
Mode mode = new Mode(new PromiseOfPowerEffect());
this.getSpellAbility().getModes().addMode(mode);
this.getSpellAbility().getModes().addMode(new Mode(new PromiseOfPowerEffect()));
// Entwine {4}
this.addAbility(new EntwineAbility("{4}"));
@ -70,10 +63,7 @@ class PromiseOfPowerEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
return new CreateTokenEffect(new DemonFlyingToken(controller.getHand().size())).apply(game, source);
}
return false;
return controller != null && new DemonFlyingToken(controller.getHand().size()).putOntoBattlefield(1, game, source);
}
@Override

View file

@ -1,7 +1,10 @@
package mage.cards.r;
import mage.abilities.Mode;
import mage.abilities.effects.common.*;
import mage.abilities.effects.common.DamageAllEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
import mage.abilities.effects.common.PutCardFromHandOrGraveyardOntoBattlefieldEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@ -32,7 +35,7 @@ public class RiveteersConfluence extends CardImpl {
this.getSpellAbility().getModes().setMayChooseSameModeMoreThanOnce(true);
// You draw a card and you lose 1 life.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).setText("you draw a card"));
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1, true));
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
// Riveteers Confluence deals 1 damage to each creature and planeswalker you dont control.

View file

@ -1,14 +1,10 @@
package mage.cards.s;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawCardTargetEffect;
import mage.abilities.effects.common.LoseLifeTargetEffect;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@ -16,30 +12,26 @@ import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.TargetController;
import java.util.UUID;
/**
*
* @author Loki
*/
public final class SeizanPerverterOfTruth extends CardImpl {
public SeizanPerverterOfTruth (UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}{B}");
public SeizanPerverterOfTruth(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}{B}");
this.supertype.add(SuperType.LEGENDARY);
this.subtype.add(SubType.DEMON);
this.subtype.add(SubType.SPIRIT);
this.power = new MageInt(6);
this.toughness = new MageInt(5);
// At the beginning of each player's upkeep, that player loses 2 life and draws two cards.
Effect effect = new LoseLifeTargetEffect(2);
effect.setText("that player loses 2 life");
Ability ability = new BeginningOfUpkeepTriggeredAbility(TargetController.EACH_PLAYER, effect, false);
effect = new DrawCardTargetEffect(2);
effect.setText("and draws two cards");
ability.addEffect(effect);
this.addAbility(ability);
// At the beginning of each player's upkeep, that player loses 2 life and draws two cards.
Ability ability = new BeginningOfUpkeepTriggeredAbility(TargetController.EACH_PLAYER, new LoseLifeTargetEffect(2), false);
ability.addEffect(new DrawCardTargetEffect(2).withTargetDescription("and"));
this.addAbility(ability);
}
private SeizanPerverterOfTruth(final SeizanPerverterOfTruth card) {

View file

@ -3,16 +3,19 @@ package mage.cards.s;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenTargetEffect;
import mage.abilities.effects.common.DrawCardTargetEffect;
import mage.abilities.effects.common.LoseLifeTargetEffect;
import mage.abilities.keyword.DoubleStrikeAbility;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.counters.CounterType;
import mage.filter.FilterPlayer;
import mage.filter.StaticFilters;
@ -68,7 +71,7 @@ public final class ShadrixSilverquill extends CardImpl {
// Target player draws a card and loses 1 life.
ability.addMode(new Mode(new DrawCardTargetEffect(1))
.addEffect(new LoseLifeTargetEffect(1).setText("and loses 1 life"))
.addEffect(new LoseLifeTargetEffect(1).withTargetDescription("and"))
.addTarget(new TargetPlayer(filter2).setTargetTag(2).withChooseHint("to draw a card and lose 1 life")));
// Target player puts a +1/+1 counter on each creature they control.

View file

@ -56,7 +56,7 @@ public final class ShanidSleepersScourge extends CardImpl {
true)));
// Whenever you play a legendary land or cast a legendary spell, you draw a card and you lose 1 life.
Ability ability = new OrTriggeredAbility(Zone.BATTLEFIELD,
new DrawCardSourceControllerEffect(1).setText("you draw a card"), false,
new DrawCardSourceControllerEffect(1, true), false,
"Whenever you play a legendary land or cast a legendary spell, ",
new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, null, legendaryLandFilter, true),
new SpellCastControllerTriggeredAbility(null, legendarySpellFilter, false)

View file

@ -2,8 +2,6 @@
package mage.cards.s;
import java.util.UUID;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawCardTargetEffect;
import mage.abilities.effects.common.LoseLifeTargetEffect;
import mage.cards.CardImpl;
@ -11,22 +9,20 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.target.TargetPlayer;
import java.util.UUID;
/**
*
* @author BetaSteward_at_googlemail.com
*/
public final class SignInBlood extends CardImpl {
public SignInBlood(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{B}{B}");
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{B}{B}");
// Target player draws two cards and loses 2 life.
this.getSpellAbility().addTarget(new TargetPlayer());
this.getSpellAbility().addEffect(new DrawCardTargetEffect(2));
Effect effect = new LoseLifeTargetEffect(2);
effect.setText("and loses 2 life");
this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addEffect(new LoseLifeTargetEffect(2).withTargetDescription("and"));
}
private SignInBlood(final SignInBlood card) {

View file

@ -59,7 +59,7 @@ public final class SilverquillCommand extends CardImpl {
// Target player draws a card and loses 1 life.
mode = new Mode(new DrawCardTargetEffect(1));
mode.addEffect(new LoseLifeTargetEffect(1).setText("and loses 1 life"));
mode.addEffect(new LoseLifeTargetEffect(1).withTargetDescription("and"));
mode.addTarget(new TargetPlayer());
this.getSpellAbility().addMode(mode);

View file

@ -39,12 +39,8 @@ public final class SkeletalScrying extends CardImpl {
this.getSpellAbility().setCostAdjuster(SkeletalScryingAdjuster.instance);
// You draw X cards and you lose X life.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(
GetXValue.instance
).setText("you draw X cards"));
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(
GetXValue.instance
).concatBy("and"));
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(GetXValue.instance, true));
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(GetXValue.instance).concatBy("and"));
}
private SkeletalScrying(final SkeletalScrying card) {

View file

@ -44,7 +44,7 @@ public final class SkemfarAvenger extends CardImpl {
// Whenever another nontoken Elf or Berserker you control dies, you draw a card and you lose 1 life.
Ability ability = new DiesCreatureTriggeredAbility(
new DrawCardSourceControllerEffect(1).setText("you draw a card"), false, filter
new DrawCardSourceControllerEffect(1, true), false, filter
);
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
this.addAbility(ability);

View file

@ -41,9 +41,7 @@ public final class Slitherwisp extends CardImpl {
// Whenever you cast another spell with flash, you draw a card and each opponent loses 1 life.
Ability ability = new SpellCastControllerTriggeredAbility(
new DrawCardSourceControllerEffect(1)
.setText("you draw a card"),
filter, false
new DrawCardSourceControllerEffect(1, true), filter, false
);
ability.addEffect(new LoseLifeOpponentsEffect(1).concatBy("and"));
this.addAbility(ability);

View file

@ -1,27 +1,24 @@
package mage.cards.s;
import java.util.UUID;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class SuccumbToTemptation extends CardImpl {
public SuccumbToTemptation(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{B}{B}");
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{B}{B}");
// You draw two cards and you lose 2 life.
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2, true));
Effect effect = new LoseLifeSourceControllerEffect(2);
effect.setText("and you lose 2 life");
this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2).concatBy("and"));
}
private SuccumbToTemptation(final SuccumbToTemptation card) {

View file

@ -53,7 +53,7 @@ public final class SyrGwynHeroOfAshvale extends CardImpl {
// Whenever an equipped creature you control attacks, you draw a card and you lose 1 life.
Ability ability = new AttacksCreatureYouControlTriggeredAbility(
new DrawCardSourceControllerEffect(1).setText("you draw a card"), false, filter
new DrawCardSourceControllerEffect(1, true), false, filter
);
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
this.addAbility(ability);

View file

@ -31,8 +31,7 @@ public final class TheCouncilOfFour extends CardImpl {
// Whenever a player draws their second card during their turn, you draw a card.
this.addAbility(new DrawNthCardTriggeredAbility(
new DrawCardSourceControllerEffect(1)
.setText("you draw a card"),
new DrawCardSourceControllerEffect(1, true),
false, TargetController.ACTIVE, 2
));

View file

@ -1,7 +1,6 @@
package mage.cards.t;
import mage.abilities.dynamicvalue.common.CardsInTargetHandCount;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.DrawCardTargetEffect;
import mage.abilities.effects.common.LoseLifeTargetEffect;
@ -20,17 +19,14 @@ public final class ToilTrouble extends SplitCard {
// Toil
// Target player draws two cards and loses 2 life.
getLeftHalfCard().getSpellAbility().addTarget(new TargetPlayer().withChooseHint("to draw two cards and lose 2 life"));
getLeftHalfCard().getSpellAbility().addEffect(new DrawCardTargetEffect(2));
getLeftHalfCard().getSpellAbility().addEffect(new LoseLifeTargetEffect(2).setText("and loses 2 life"));
this.getLeftHalfCard().getSpellAbility().addTarget(new TargetPlayer().withChooseHint("to draw two cards and lose 2 life"));
this.getLeftHalfCard().getSpellAbility().addEffect(new DrawCardTargetEffect(2));
this.getLeftHalfCard().getSpellAbility().addEffect(new LoseLifeTargetEffect(2).withTargetDescription("and"));
// Trouble
// Trouble deals damage to target player equal to the number of cards in that player's hand.
Effect effect = new DamageTargetEffect(CardsInTargetHandCount.instance);
effect.setText("{this} deals damage to target player equal to the number of cards in that player's hand");
getRightHalfCard().getSpellAbility().addEffect(effect);
getRightHalfCard().getSpellAbility().addTarget(new TargetPlayer().withChooseHint("to deal damage to"));
this.getRightHalfCard().getSpellAbility().addEffect(new DamageTargetEffect(CardsInTargetHandCount.instance).setText("{this} deals damage to target player equal to the number of cards in that player's hand"));
this.getRightHalfCard().getSpellAbility().addTarget(new TargetPlayer().withChooseHint("to deal damage to"));
}
private ToilTrouble(final ToilTrouble card) {

View file

@ -36,7 +36,7 @@ public final class UndeadAugur extends CardImpl {
// Whenever Undead Augur or another Zombie you control dies, you draw a card and you lose 1 life.
Ability ability = new DiesThisOrAnotherTriggeredAbility(
new DrawCardSourceControllerEffect(1).setText("you draw a card"), false, filter
new DrawCardSourceControllerEffect(1, true), false, filter
);
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
this.addAbility(ability);

View file

@ -32,7 +32,7 @@ public final class UnscrupulousContractor extends CardImpl {
// When Unscrupulous Contractor enters the battlefield, you may sacrifice a creature. When you do, target player draws two cards and loses 2 life.
ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility(new DrawCardTargetEffect(2), false);
ability.addEffect(new LoseLifeTargetEffect(2).setText("and loses 2 life"));
ability.addEffect(new LoseLifeTargetEffect(2).withTargetDescription("and"));
ability.addTarget(new TargetPlayer());
this.addAbility(new EntersBattlefieldTriggeredAbility(new DoWhenCostPaid(
ability, new SacrificeTargetCost(StaticFilters.FILTER_PERMANENT_CREATURE),

View file

@ -34,8 +34,7 @@ public final class UnwillingIngredient extends CardImpl {
// {2}{B}, Exile Unwilling Ingredient from your graveyard: You draw a card and you lose 1 life.
Ability ability = new SimpleActivatedAbility(
Zone.GRAVEYARD,
new DrawCardSourceControllerEffect(1)
.setText("you draw a card"),
new DrawCardSourceControllerEffect(1, true),
new ManaCostsImpl<>("{2}{B}")
);
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));

View file

@ -28,7 +28,7 @@ public final class VaultPlunderer extends CardImpl {
// When Vault Plunderer enters the battlefield, target player draws a card and loses 1 life.
Ability ability = new EntersBattlefieldTriggeredAbility(new DrawCardTargetEffect(1));
ability.addEffect(new LoseLifeTargetEffect(1).setText("and loses 1 life"));
ability.addEffect(new LoseLifeTargetEffect(1).withTargetDescription("and"));
ability.addTarget(new TargetPlayer());
this.addAbility(ability);
}

View file

@ -36,8 +36,8 @@ public final class VraskaBetrayalsSting extends CardImpl {
this.addAbility(CompleatedAbility.getInstance());
// 0: You draw a card and you lose 1 life. Proliferate.
Ability ability = new LoyaltyAbility(new DrawCardSourceControllerEffect(1).setText("You draw a card"), 0);
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
Ability ability = new LoyaltyAbility(new DrawCardSourceControllerEffect(1, true), 0);
ability.addEffect(new LoseLifeSourceControllerEffect(1, false).concatBy("and"));
ability.addEffect(new ProliferateEffect(false));
this.addAbility(ability);

View file

@ -1,11 +1,8 @@
package mage.cards.v;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ExploitCreatureTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
import mage.abilities.keyword.ExploitAbility;
@ -15,14 +12,15 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class VulturousAven extends CardImpl {
public VulturousAven(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}");
this.subtype.add(SubType.BIRD);
this.subtype.add(SubType.SHAMAN);
this.power = new MageInt(2);
@ -30,17 +28,13 @@ public final class VulturousAven extends CardImpl {
// Flying
this.addAbility(FlyingAbility.getInstance());
// Exploit
this.addAbility(new ExploitAbility());
// When Vulturous Aven exploits a creature, you draw two cards and you lose 2 life.
Effect effect = new DrawCardSourceControllerEffect(2);
effect.setText("you draw two cards");
Ability ability = new ExploitCreatureTriggeredAbility(effect, false);
effect = new LoseLifeSourceControllerEffect(2);
effect.setText("and you lose 2 life");
ability.addEffect(effect);
Ability ability = new ExploitCreatureTriggeredAbility(new DrawCardSourceControllerEffect(2, true), false);
ability.addEffect(new LoseLifeSourceControllerEffect(2).concatBy("and"));
this.addAbility(ability);
}

View file

@ -1,9 +1,6 @@
package mage.cards.w;
import java.util.UUID;
import mage.abilities.Mode;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawCardTargetEffect;
import mage.abilities.effects.common.LoseLifeTargetEffect;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
@ -11,14 +8,14 @@ import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.filter.StaticFilters;
import mage.target.TargetPlayer;
import mage.target.common.TargetCardInYourGraveyard;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
*
* @author fireshoes
*/
public final class WretchedConfluence extends CardImpl {
@ -32,21 +29,17 @@ public final class WretchedConfluence extends CardImpl {
this.getSpellAbility().getModes().setMayChooseSameModeMoreThanOnce(true);
// - Target player draws a card and loses 1 life;
Effect effect = new LoseLifeTargetEffect(1);
effect.setText("and loses 1 life");
this.getSpellAbility().addEffect(new DrawCardTargetEffect(1));
this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addEffect(new LoseLifeTargetEffect(1).withTargetDescription("and"));
this.getSpellAbility().addTarget(new TargetPlayer());
// Target creature gets -2/-2 until end of turn;
Mode mode = new Mode(new BoostTargetEffect(-2, -2, Duration.EndOfTurn));
mode.addTarget(new TargetCreaturePermanent());
this.getSpellAbility().getModes().addMode(mode);
this.getSpellAbility().getModes().addMode(new Mode(new BoostTargetEffect(-2, -2))
.addTarget(new TargetCreaturePermanent()));
// Return target creature card from your graveyard to your hand.
mode = new Mode(new ReturnFromGraveyardToHandTargetEffect());
mode.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
this.getSpellAbility().getModes().addMode(mode);
this.getSpellAbility().getModes().addMode(new Mode(new ReturnFromGraveyardToHandTargetEffect())
.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)));
}
private WretchedConfluence(final WretchedConfluence card) {

View file

@ -50,7 +50,7 @@ public final class ZukoConflicted extends CardImpl {
// * Add {R}.
ability.addMode(new Mode(new BasicManaEffect(Mana.RedMana(1)).setText("add"))
.addEffect(new LoseLifeSourceControllerEffect(2).setText("{R}")));
.addEffect(new LoseLifeSourceControllerEffect(2).setText(" {R}")));
// * Exile Zuko, then return him to the battlefield under an opponent's control.
ability.addMode(new Mode(new ZukoConflictedEffect())

View file

@ -1,12 +1,10 @@
package mage.abilities.effects.common;
import mage.constants.Outcome;
import mage.abilities.Ability;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.OneShotEffect;
import mage.constants.Outcome;
import mage.game.Game;
import mage.players.Player;
@ -18,13 +16,21 @@ public class LoseLifeSourceControllerEffect extends OneShotEffect {
protected DynamicValue amount;
public LoseLifeSourceControllerEffect(int amount) {
this(StaticValue.get(amount));
this(amount, true);
}
public LoseLifeSourceControllerEffect(int amount, boolean youLose) {
this(StaticValue.get(amount), youLose);
}
public LoseLifeSourceControllerEffect(DynamicValue amount) {
this(amount, true);
}
public LoseLifeSourceControllerEffect(DynamicValue amount, boolean youLose) {
super(Outcome.LoseLife);
this.amount = amount;
setText();
setText(youLose);
}
protected LoseLifeSourceControllerEffect(final LoseLifeSourceControllerEffect effect) {
@ -47,9 +53,14 @@ public class LoseLifeSourceControllerEffect extends OneShotEffect {
return false;
}
private void setText() {
private void setText(boolean youLose) {
StringBuilder sb = new StringBuilder();
sb.append("you lose ").append(amount.toString()).append(" life");
if (youLose) {
sb.append("you ");
}
sb.append("lose ");
sb.append(amount.toString());
sb.append(" life");
String message = amount.getMessage();
if (!message.isEmpty()) {
sb.append(" for each ");

View file

@ -15,7 +15,7 @@ import mage.target.common.TargetAnyTarget;
public final class DevilToken extends TokenImpl {
public DevilToken() {
super("Devil Token", "1/1 red Devil creature token with \"When this creature dies, it deals 1 damage to any target.\"");
super("Devil Token", "1/1 red Devil creature token with \"When this token dies, it deals 1 damage to any target.\"");
cardType.add(CardType.CREATURE);
subtype.add(SubType.DEVIL);
color.setRed(true);