mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
refactor: create GainLifeAllEffect
This commit is contained in:
parent
794fb7d42e
commit
b24a20fec4
10 changed files with 136 additions and 323 deletions
|
|
@ -5,17 +5,15 @@ import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
|||
import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.CountersSourceCount;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.effects.common.GainLifeAllEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.TargetController;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetPlayerOrPlaneswalker;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -31,7 +29,7 @@ public final class AriaOfFlame extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}");
|
||||
|
||||
// When Aria of Flame enters the battlefield, each opponent gains 10 life.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new AriaOfFlameEffect()));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeAllEffect(10, TargetController.OPPONENT)));
|
||||
|
||||
// Whenever you cast an instant or sorcery spell, put a verse counter on Aria of Flame, then it deals damage equal to the number of verse counters on it to target player or planeswalker.
|
||||
Ability ability = new SpellCastControllerTriggeredAbility(
|
||||
|
|
@ -54,31 +52,3 @@ public final class AriaOfFlame extends CardImpl {
|
|||
return new AriaOfFlame(this);
|
||||
}
|
||||
}
|
||||
|
||||
class AriaOfFlameEffect extends OneShotEffect {
|
||||
|
||||
AriaOfFlameEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "each opponent gains 10 life";
|
||||
}
|
||||
|
||||
private AriaOfFlameEffect(AriaOfFlameEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
for (UUID playerId : game.getOpponents(source.getControllerId())) {
|
||||
Player player = game.getPlayer(playerId);
|
||||
if (player != null) {
|
||||
player.gainLife(10, game, source);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AriaOfFlameEffect copy() {
|
||||
return new AriaOfFlameEffect(this);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,20 +1,16 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.effects.common.GainLifeAllEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.game.Game;
|
||||
import mage.constants.SubType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class CentaurPeacemaker extends CardImpl {
|
||||
|
|
@ -28,9 +24,7 @@ public final class CentaurPeacemaker extends CardImpl {
|
|||
this.toughness = new MageInt(3);
|
||||
|
||||
// When Centaur Mediator enters the battlefield, each player gains 4 life.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new CentaurMediatorEffect()
|
||||
));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeAllEffect(4)));
|
||||
}
|
||||
|
||||
private CentaurPeacemaker(final CentaurPeacemaker card) {
|
||||
|
|
@ -42,32 +36,3 @@ public final class CentaurPeacemaker extends CardImpl {
|
|||
return new CentaurPeacemaker(this);
|
||||
}
|
||||
}
|
||||
|
||||
class CentaurMediatorEffect extends OneShotEffect {
|
||||
|
||||
CentaurMediatorEffect() {
|
||||
super(Outcome.GainLife);
|
||||
staticText = "each player gains 4 life.";
|
||||
}
|
||||
|
||||
private CentaurMediatorEffect(final CentaurMediatorEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CentaurMediatorEffect copy() {
|
||||
return new CentaurMediatorEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
game.getState().getPlayersInRange(
|
||||
source.getControllerId(), game)
|
||||
.stream()
|
||||
.map(game::getPlayer)
|
||||
.filter(Objects::nonNull)
|
||||
.forEachOrdered(player -> player.gainLife(4, game, source));
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,37 +1,35 @@
|
|||
|
||||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.GainLifeAllEffect;
|
||||
import mage.abilities.mana.ColorlessManaAbility;
|
||||
import mage.abilities.mana.GreenManaAbility;
|
||||
import mage.abilities.mana.RedManaAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.constants.TargetController;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jonubuu
|
||||
*/
|
||||
public final class GroveOfTheBurnwillows extends CardImpl {
|
||||
|
||||
public GroveOfTheBurnwillows(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.LAND},"");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
|
||||
|
||||
// {tap}: Add {C}.
|
||||
this.addAbility(new ColorlessManaAbility());
|
||||
|
||||
// {tap}: Add {R} or {G}. Each opponent gains 1 life.
|
||||
Ability RedManaAbility = new RedManaAbility();
|
||||
RedManaAbility.addEffect(new GroveOfTheBurnwillowsEffect());
|
||||
this.addAbility(RedManaAbility);
|
||||
Ability GreenManaAbility = new GreenManaAbility();
|
||||
GreenManaAbility.addEffect(new GroveOfTheBurnwillowsEffect());
|
||||
this.addAbility(GreenManaAbility);
|
||||
Ability ability = new RedManaAbility();
|
||||
ability.addEffect(new GainLifeAllEffect(1, TargetController.OPPONENT));
|
||||
this.addAbility(ability);
|
||||
ability = new GreenManaAbility();
|
||||
ability.addEffect(new GainLifeAllEffect(1, TargetController.OPPONENT));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private GroveOfTheBurnwillows(final GroveOfTheBurnwillows card) {
|
||||
|
|
@ -43,31 +41,3 @@ public final class GroveOfTheBurnwillows extends CardImpl {
|
|||
return new GroveOfTheBurnwillows(this);
|
||||
}
|
||||
}
|
||||
|
||||
class GroveOfTheBurnwillowsEffect extends OneShotEffect {
|
||||
|
||||
GroveOfTheBurnwillowsEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "Each opponent gains 1 life";
|
||||
}
|
||||
|
||||
private GroveOfTheBurnwillowsEffect(final GroveOfTheBurnwillowsEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
for (UUID playerId : game.getOpponents(source.getControllerId())) {
|
||||
Player player = game.getPlayer(playerId);
|
||||
if(player != null) {
|
||||
player.gainLife(1, game, source);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GroveOfTheBurnwillowsEffect copy() {
|
||||
return new GroveOfTheBurnwillowsEffect(this);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,8 @@ import mage.ObjectColor;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.DrawCardAllEffect;
|
||||
import mage.abilities.effects.common.GainLifeAllEffect;
|
||||
import mage.abilities.effects.common.WinGameSourceControllerEffect;
|
||||
import mage.abilities.hint.Hint;
|
||||
import mage.abilities.hint.HintUtils;
|
||||
|
|
@ -12,7 +13,6 @@ import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
|||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
|
||||
|
|
@ -27,7 +27,9 @@ public final class HappilyEverAfter extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}");
|
||||
|
||||
// When Happily Ever After enters the battlefield, each player gains 5 life and draws a card.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new HappilyEverAfterEffect()));
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new GainLifeAllEffect(5));
|
||||
ability.addEffect(new DrawCardAllEffect(1).setText("and draws a card"));
|
||||
this.addAbility(ability);
|
||||
|
||||
// At the beginning of your upkeep, if there are five colors among permanents you control, there are six or more card types among permanents you control and/or cards in your graveyard, and your life total is greater than or equal to your starting life total, you win the game.
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new WinGameSourceControllerEffect())
|
||||
|
|
@ -47,37 +49,6 @@ public final class HappilyEverAfter extends CardImpl {
|
|||
}
|
||||
}
|
||||
|
||||
class HappilyEverAfterEffect extends OneShotEffect {
|
||||
|
||||
HappilyEverAfterEffect() {
|
||||
super(Outcome.GainLife);
|
||||
staticText = "each player gains 5 life and draws a card";
|
||||
}
|
||||
|
||||
private HappilyEverAfterEffect(final HappilyEverAfterEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HappilyEverAfterEffect copy() {
|
||||
return new HappilyEverAfterEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
game.getState()
|
||||
.getPlayersInRange(source.getControllerId(), game)
|
||||
.stream()
|
||||
.map(game::getPlayer)
|
||||
.filter(Objects::nonNull)
|
||||
.forEachOrdered(player -> {
|
||||
player.gainLife(5, game, source);
|
||||
player.drawCards(1, source, game);
|
||||
});
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
enum HappilyEverAfterCondition implements Condition {
|
||||
instance;
|
||||
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@ import mage.MageInt;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.effects.ContinuousEffectImpl;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.DrawCardAllEffect;
|
||||
import mage.abilities.effects.common.GainLifeAllEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
|
||||
import mage.abilities.keyword.MenaceAbility;
|
||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||
|
|
@ -15,7 +15,6 @@ import mage.constants.*;
|
|||
import mage.counters.CounterType;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetOpponentsCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -40,7 +39,7 @@ public final class MathasFiendSeeker extends CardImpl {
|
|||
Ability ability = new BeginningOfEndStepTriggeredAbility(
|
||||
new AddCountersTargetEffect(CounterType.BOUNTY.createInstance())
|
||||
);
|
||||
ability.addEffect(new MathasFiendSeekerGainAbilityEffect());
|
||||
ability.addEffect(new MathasFiendSeekerEffect());
|
||||
ability.addTarget(new TargetOpponentsCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
@ -55,26 +54,26 @@ public final class MathasFiendSeeker extends CardImpl {
|
|||
}
|
||||
}
|
||||
|
||||
class MathasFiendSeekerGainAbilityEffect extends ContinuousEffectImpl {
|
||||
class MathasFiendSeekerEffect extends ContinuousEffectImpl {
|
||||
|
||||
private final Ability ability;
|
||||
|
||||
MathasFiendSeekerGainAbilityEffect() {
|
||||
MathasFiendSeekerEffect() {
|
||||
super(Duration.Custom, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility);
|
||||
staticText = "For as long as that creature has a bounty counter on it, " +
|
||||
"it has \"When this creature dies, each opponent draws a card and gains 2 life.\"";
|
||||
this.ability = new DiesSourceTriggeredAbility(new DrawCardAllEffect(1, TargetController.OPPONENT));
|
||||
this.ability.addEffect(new MathasFiendSeekerGainLifeEffect());
|
||||
this.ability.addEffect(new GainLifeAllEffect(2, TargetController.OPPONENT).setText("and gains 2 life"));
|
||||
}
|
||||
|
||||
private MathasFiendSeekerGainAbilityEffect(final MathasFiendSeekerGainAbilityEffect effect) {
|
||||
private MathasFiendSeekerEffect(final MathasFiendSeekerEffect effect) {
|
||||
super(effect);
|
||||
this.ability = effect.ability.copy();
|
||||
}
|
||||
|
||||
@Override
|
||||
public MathasFiendSeekerGainAbilityEffect copy() {
|
||||
return new MathasFiendSeekerGainAbilityEffect(this);
|
||||
public MathasFiendSeekerEffect copy() {
|
||||
return new MathasFiendSeekerEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -88,31 +87,3 @@ class MathasFiendSeekerGainAbilityEffect extends ContinuousEffectImpl {
|
|||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
class MathasFiendSeekerGainLifeEffect extends OneShotEffect {
|
||||
|
||||
MathasFiendSeekerGainLifeEffect() {
|
||||
super(Outcome.GainLife);
|
||||
staticText = "and gains 2 life.";
|
||||
}
|
||||
|
||||
private MathasFiendSeekerGainLifeEffect(final MathasFiendSeekerGainLifeEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MathasFiendSeekerGainLifeEffect copy() {
|
||||
return new MathasFiendSeekerGainLifeEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
for (UUID playerId : game.getOpponents(source.getControllerId())) {
|
||||
Player player = game.getPlayer(playerId);
|
||||
if (player != null) {
|
||||
player.gainLife(2, game, source);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,20 +6,16 @@ import mage.abilities.costs.common.DiscardCardCost;
|
|||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.dynamicvalue.common.ControllerGainedLifeCount;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.*;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.cards.ModalDoubleFacedCard;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.predicate.Predicates;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.token.Pest11GainLifeToken;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetCardInASingleGraveyard;
|
||||
import mage.target.common.TargetCardInYourGraveyard;
|
||||
import mage.watchers.common.PlayerGainedLifeWatcher;
|
||||
|
|
@ -82,7 +78,7 @@ public final class PestilentCauldron extends ModalDoubleFacedCard {
|
|||
// Sorcery
|
||||
// Return up to two target creature, land, and/or planeswalker cards from your graveyard to your hand. Each player gains 4 life. Exile Restorative Burst.
|
||||
this.getRightHalfCard().getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect());
|
||||
this.getRightHalfCard().getSpellAbility().addEffect(new RestorativeBurstEffect());
|
||||
this.getRightHalfCard().getSpellAbility().addEffect(new GainLifeAllEffect(4));
|
||||
this.getRightHalfCard().getSpellAbility().addEffect(new ExileSpellEffect());
|
||||
this.getRightHalfCard().getSpellAbility().addTarget(new TargetCardInYourGraveyard(0, 2, filter));
|
||||
}
|
||||
|
|
@ -96,31 +92,3 @@ public final class PestilentCauldron extends ModalDoubleFacedCard {
|
|||
return new PestilentCauldron(this);
|
||||
}
|
||||
}
|
||||
|
||||
class RestorativeBurstEffect extends OneShotEffect {
|
||||
|
||||
RestorativeBurstEffect() {
|
||||
super(Outcome.GainLife);
|
||||
staticText = "Each player gains 4 life.";
|
||||
}
|
||||
|
||||
private RestorativeBurstEffect(final RestorativeBurstEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RestorativeBurstEffect copy() {
|
||||
return new RestorativeBurstEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) {
|
||||
Player player = game.getPlayer(playerId);
|
||||
if (player != null) {
|
||||
player.gainLife(4, game, source);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,15 +4,12 @@ import mage.MageInt;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.common.DealsDamageSourceTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.GainLifeAllEffect;
|
||||
import mage.abilities.effects.common.LoseLifeAllPlayersEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -31,7 +28,7 @@ public final class PutridWarrior extends CardImpl {
|
|||
|
||||
// Whenever Putrid Warrior deals damage, choose one - Each player loses 1 life; or each player gains 1 life.
|
||||
Ability ability = new DealsDamageSourceTriggeredAbility(new LoseLifeAllPlayersEffect(1));
|
||||
ability.addMode(new Mode(new PutridWarriorGainLifeEffect()));
|
||||
ability.addMode(new Mode(new GainLifeAllEffect(1)));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
|
|
@ -44,32 +41,3 @@ public final class PutridWarrior extends CardImpl {
|
|||
return new PutridWarrior(this);
|
||||
}
|
||||
}
|
||||
|
||||
class PutridWarriorGainLifeEffect extends OneShotEffect {
|
||||
|
||||
PutridWarriorGainLifeEffect() {
|
||||
super(Outcome.GainLife);
|
||||
staticText = "each player gains 1 life";
|
||||
}
|
||||
|
||||
private PutridWarriorGainLifeEffect(final PutridWarriorGainLifeEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PutridWarriorGainLifeEffect copy() {
|
||||
return new PutridWarriorGainLifeEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) {
|
||||
Player player = game.getPlayer(playerId);
|
||||
if (player != null) {
|
||||
player.gainLife(1, game, source);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,33 +1,34 @@
|
|||
|
||||
package mage.cards.t;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.GainLifeAllEffect;
|
||||
import mage.abilities.effects.common.LoseLifeAllPlayersEffect;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.players.PlayerList;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public final class Triskaidekaphobia extends CardImpl {
|
||||
|
||||
public Triskaidekaphobia(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{B}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}");
|
||||
|
||||
// At the beginning of your upkeep, choose one - Each player with exactly 13 life loses the game, then each player gains 1 life.
|
||||
// Each player with exactly 13 life loses the game, then each player loses 1 life.
|
||||
Ability ability = new BeginningOfUpkeepTriggeredAbility(new TriskaidekaphobiaGainLifeEffect());
|
||||
Mode mode = new Mode(new TriskaidekaphobiaLoseLifeEffect());
|
||||
ability.addMode(mode);
|
||||
ability.addEffect(new GainLifeAllEffect(1).concatBy(", then"));
|
||||
ability.addMode(new Mode(new TriskaidekaphobiaGainLifeEffect())
|
||||
.addEffect(new LoseLifeAllPlayersEffect(1).concatBy(", then")));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
|
|
@ -45,7 +46,7 @@ class TriskaidekaphobiaGainLifeEffect extends OneShotEffect {
|
|||
|
||||
TriskaidekaphobiaGainLifeEffect() {
|
||||
super(Outcome.Neutral);
|
||||
this.staticText = "Each player with exactly 13 life loses the game, then each player gains 1 life";
|
||||
this.staticText = "each player with exactly 13 life loses the game";
|
||||
}
|
||||
|
||||
private TriskaidekaphobiaGainLifeEffect(final TriskaidekaphobiaGainLifeEffect effect) {
|
||||
|
|
@ -59,60 +60,10 @@ class TriskaidekaphobiaGainLifeEffect extends OneShotEffect {
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
int life;
|
||||
PlayerList playerList = game.getState().getPlayersInRange(source.getControllerId(), game);
|
||||
for (UUID pid : playerList) {
|
||||
Player player = game.getPlayer(pid);
|
||||
if (player != null) {
|
||||
life = player.getLife();
|
||||
if (life == 13) {
|
||||
player.lost(game);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (UUID pid : playerList) {
|
||||
Player player = game.getPlayer(pid);
|
||||
if (player != null) {
|
||||
player.gainLife(1, game, source);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
class TriskaidekaphobiaLoseLifeEffect extends OneShotEffect {
|
||||
|
||||
TriskaidekaphobiaLoseLifeEffect() {
|
||||
super(Outcome.Neutral);
|
||||
this.staticText = "Each player with exactly 13 life loses the game, then each player loses 1 life";
|
||||
}
|
||||
|
||||
private TriskaidekaphobiaLoseLifeEffect(final TriskaidekaphobiaLoseLifeEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TriskaidekaphobiaLoseLifeEffect copy() {
|
||||
return new TriskaidekaphobiaLoseLifeEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
int life;
|
||||
PlayerList playerList = game.getState().getPlayersInRange(source.getControllerId(), game);
|
||||
for (UUID pid : playerList) {
|
||||
Player player = game.getPlayer(pid);
|
||||
if (player != null) {
|
||||
life = player.getLife();
|
||||
if (life == 13) {
|
||||
player.lost(game);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (UUID pid : playerList) {
|
||||
Player player = game.getPlayer(pid);
|
||||
if (player != null) {
|
||||
player.loseLife(1, game, source, false);
|
||||
for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) {
|
||||
Player player = game.getPlayer(playerId);
|
||||
if (player != null && player.getLife() == 13) {
|
||||
player.lost(game);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.common.SpellCastOpponentTriggeredAbility;
|
||||
import mage.abilities.costs.Cost;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.GainLifeAllEffect;
|
||||
import mage.cards.*;
|
||||
import mage.constants.*;
|
||||
import mage.filter.FilterCard;
|
||||
|
|
@ -49,6 +50,7 @@ public final class WanderingArchaic extends ModalDoubleFacedCard {
|
|||
// Sorcery
|
||||
// Each player looks at the top five cards of their library, reveals a land card and/or an instant or sorcery card from among them, then puts the cards they revealed this way into their hand and the rest on the bottom of their library in a random order. Each player gains 3 life.
|
||||
this.getRightHalfCard().getSpellAbility().addEffect(new ExploreTheVastlandsEffect());
|
||||
this.getRightHalfCard().getSpellAbility().addEffect(new GainLifeAllEffect(3));
|
||||
}
|
||||
|
||||
private WanderingArchaic(final WanderingArchaic card) {
|
||||
|
|
@ -105,7 +107,7 @@ class ExploreTheVastlandsEffect extends OneShotEffect {
|
|||
staticText = "each player looks at the top five cards of their library " +
|
||||
"and may reveal a land card and/or an instant or sorcery card from among them. " +
|
||||
"Each player puts the cards they revealed this way into their hand and the rest " +
|
||||
"on the bottom of their library in a random order. Each player gains 3 life";
|
||||
"on the bottom of their library in a random order.";
|
||||
}
|
||||
|
||||
private ExploreTheVastlandsEffect(final ExploreTheVastlandsEffect effect) {
|
||||
|
|
@ -133,12 +135,6 @@ class ExploreTheVastlandsEffect extends OneShotEffect {
|
|||
player.moveCards(toHand, Zone.HAND, source, game);
|
||||
player.putCardsOnBottomOfLibrary(cards, game, source, false);
|
||||
}
|
||||
for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) {
|
||||
Player player = game.getPlayer(playerId);
|
||||
if (player != null) {
|
||||
player.gainLife(3, game, source);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,83 @@
|
|||
package mage.abilities.effects.common;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.TargetController;
|
||||
import mage.game.Game;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public class GainLifeAllEffect extends OneShotEffect {
|
||||
|
||||
private final int amount;
|
||||
private final TargetController targetController;
|
||||
|
||||
public GainLifeAllEffect(int amount) {
|
||||
this(amount, TargetController.EACH_PLAYER);
|
||||
}
|
||||
|
||||
public GainLifeAllEffect(int amount, TargetController targetController) {
|
||||
super(Outcome.Benefit);
|
||||
this.amount = amount;
|
||||
this.targetController = targetController;
|
||||
staticText = makeRule(amount, targetController);
|
||||
}
|
||||
|
||||
private GainLifeAllEffect(final GainLifeAllEffect effect) {
|
||||
super(effect);
|
||||
this.amount = effect.amount;
|
||||
this.targetController = effect.targetController;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GainLifeAllEffect copy() {
|
||||
return new GainLifeAllEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
for (UUID playerId : getPlayers(targetController, game, source)) {
|
||||
Optional.ofNullable(playerId)
|
||||
.map(game::getPlayer)
|
||||
.ifPresent(player -> player.gainLife(amount, game, source));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private static Collection<UUID> getPlayers(TargetController targetController, Game game, Ability source) {
|
||||
switch (targetController) {
|
||||
case ANY:
|
||||
case EACH_PLAYER:
|
||||
return game.getState().getPlayersInRange(source.getControllerId(), game);
|
||||
case OPPONENT:
|
||||
return game.getOpponents(source.getControllerId());
|
||||
default:
|
||||
throw new IllegalArgumentException("TargetController " + targetController + " not supported");
|
||||
}
|
||||
}
|
||||
|
||||
private static String makeRule(int amount, TargetController targetController) {
|
||||
StringBuilder sb = new StringBuilder("each ");
|
||||
switch (targetController) {
|
||||
case ANY:
|
||||
case EACH_PLAYER:
|
||||
sb.append("player");
|
||||
break;
|
||||
case OPPONENT:
|
||||
sb.append("opponent");
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("TargetController " + targetController + " not supported");
|
||||
}
|
||||
sb.append(" gains ");
|
||||
sb.append(amount);
|
||||
sb.append(" life");
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue