diff --git a/Mage.Sets/src/mage/sets/gatecrash/Skullcrack.java b/Mage.Sets/src/mage/sets/gatecrash/Skullcrack.java index c5a4e9df63..200c86c834 100644 --- a/Mage.Sets/src/mage/sets/gatecrash/Skullcrack.java +++ b/Mage.Sets/src/mage/sets/gatecrash/Skullcrack.java @@ -35,6 +35,7 @@ import mage.constants.Rarity; import mage.abilities.Ability; import mage.abilities.effects.ReplacementEffectImpl; import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.continious.PlayersCantGainLifeEffect; import mage.cards.CardImpl; import mage.constants.Duration; import mage.game.Game; @@ -54,10 +55,10 @@ public class Skullcrack extends CardImpl { this.color.setRed(true); // Players can't gain life this turn. Damage can't be prevented this turn. Skullcrack deals 3 damage to target player. - this.getSpellAbility().addEffect(new PlayersCantGetLiveEffect()); + this.getSpellAbility().addEffect(new PlayersCantGainLifeEffect(Duration.EndOfTurn)); this.getSpellAbility().addEffect(new DamageCantBePreventedEffect()); this.getSpellAbility().addEffect(new DamageTargetEffect(3)); - this.getSpellAbility().addTarget(new TargetPlayer()); + this.getSpellAbility().addTarget(new TargetPlayer(true)); } @@ -105,38 +106,3 @@ class DamageCantBePreventedEffect extends ReplacementEffectImpl { - - public PlayersCantGetLiveEffect() { - super(Duration.EndOfTurn, Outcome.Benefit); - staticText = "Players can't gain life this turn"; - } - - public PlayersCantGetLiveEffect(final PlayersCantGetLiveEffect effect) { - super(effect); - } - - @Override - public PlayersCantGetLiveEffect copy() { - return new PlayersCantGetLiveEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - return true; - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.GAIN_LIFE) { - return true; - } - return false; - } -} diff --git a/Mage.Sets/src/mage/sets/magic2011/LeylineOfPunishment.java b/Mage.Sets/src/mage/sets/magic2011/LeylineOfPunishment.java index 568e39f37a..c4f9f6f111 100644 --- a/Mage.Sets/src/mage/sets/magic2011/LeylineOfPunishment.java +++ b/Mage.Sets/src/mage/sets/magic2011/LeylineOfPunishment.java @@ -40,6 +40,7 @@ import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.ReplacementEffectImpl; +import mage.abilities.effects.common.continious.PlayersCantGainLifeEffect; import mage.abilities.keyword.LeylineAbility; import mage.cards.CardImpl; import mage.game.Game; @@ -57,8 +58,12 @@ public class LeylineOfPunishment extends CardImpl { super(ownerId, 148, "Leyline of Punishment", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}{R}"); this.expansionSetCode = "M11"; this.color.setRed(true); + + // If Leyline of Punishment is in your opening hand, you may begin the game with it on the battlefield. this.addAbility(LeylineAbility.getInstance()); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new LeylineOfPunishmentEffect1())); + // Players can't gain life. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new PlayersCantGainLifeEffect())); + // Damage can't be prevented. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new LeylineOfPunishmentEffect2())); } @@ -73,38 +78,6 @@ public class LeylineOfPunishment extends CardImpl { } -class LeylineOfPunishmentEffect1 extends ContinuousEffectImpl { - - public LeylineOfPunishmentEffect1() { - super(Duration.WhileOnBattlefield, Layer.PlayerEffects, SubLayer.NA, Outcome.Benefit); - staticText = "Players can't gain life"; - } - - public LeylineOfPunishmentEffect1(final LeylineOfPunishmentEffect1 effect) { - super(effect); - } - - @Override - public LeylineOfPunishmentEffect1 copy() { - return new LeylineOfPunishmentEffect1(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - for (UUID playerId: controller.getInRange()) { - Player player = game.getPlayer(playerId); - if (player != null) - player.setCanGainLife(false); - } - return true; - } - return false; - } - -} - class LeylineOfPunishmentEffect2 extends ReplacementEffectImpl { public LeylineOfPunishmentEffect2() { diff --git a/Mage.Sets/src/mage/sets/returntoravnica/HavocFestival.java b/Mage.Sets/src/mage/sets/returntoravnica/HavocFestival.java index 584ab11653..92f209b883 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/HavocFestival.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/HavocFestival.java @@ -29,26 +29,20 @@ package mage.sets.returntoravnica; import java.util.UUID; - -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Rarity; -import mage.constants.Duration; -import mage.constants.Layer; -import mage.constants.SubLayer; -import mage.constants.TargetController; -import mage.constants.Zone; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.continious.PlayersCantGainLifeEffect; import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; import mage.game.Game; import mage.players.Player; - - /** * * @author LevelX2 @@ -65,7 +59,7 @@ public class HavocFestival extends CardImpl { this.color.setRed(true); // Players can't gain life. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new HavocFestivalEffect())); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new PlayersCantGainLifeEffect())); // At the beginning of each player's upkeep, that player loses half his or her life, rounded up. Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new HavocFestivalLoseLifeEffect(), TargetController.ANY, false); @@ -84,40 +78,6 @@ public class HavocFestival extends CardImpl { } } -class HavocFestivalEffect extends ContinuousEffectImpl { - - public HavocFestivalEffect() { - super(Duration.WhileOnBattlefield, Layer.PlayerEffects, SubLayer.NA, Outcome.Benefit); - staticText = "Players can't gain life"; - } - - public HavocFestivalEffect(final HavocFestivalEffect effect) { - super(effect); - } - - @Override - public HavocFestivalEffect copy() { - return new HavocFestivalEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - for (UUID playerId: controller.getInRange()) { - Player player = game.getPlayer(playerId); - if (player != null) - { - player.setCanGainLife(false); - } - } - return true; - } - return false; - } - -} - class HavocFestivalLoseLifeEffect extends OneShotEffect { public HavocFestivalLoseLifeEffect() { @@ -146,4 +106,4 @@ class HavocFestivalLoseLifeEffect extends OneShotEffect { + + public PlayersCantGainLifeEffect() { + this(Duration.WhileOnBattlefield); + } + + public PlayersCantGainLifeEffect(Duration duration) { + super(duration, Layer.PlayerEffects, SubLayer.NA, Outcome.Benefit); + StringBuilder sb = new StringBuilder("Players can't gain life"); + if (!this.duration.toString().isEmpty()) { + sb.append(" ").append(duration.toString()); + } + staticText = sb.toString(); + } + + public PlayersCantGainLifeEffect(final PlayersCantGainLifeEffect effect) { + super(effect); + } + + @Override + public PlayersCantGainLifeEffect copy() { + return new PlayersCantGainLifeEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + for (UUID playerId: controller.getInRange()) { + Player player = game.getPlayer(playerId); + if (player != null) + { + player.setCanGainLife(false); + } + } + return true; + } + return false; + } + +}