diff --git a/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java b/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java index 0b7b6d07b91..cc27c97b297 100644 --- a/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java +++ b/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java @@ -728,5 +728,5 @@ public class PlayerPanelExt extends javax.swing.JPanel { private HoverButton commandZone; private HoverButton enchantPlayerViewZone; - private Map manaLabels = new HashMap(); + private final Map manaLabels = new HashMap<>(); } diff --git a/Mage.Sets/src/mage/sets/apocalypse/PhyrexianArena.java b/Mage.Sets/src/mage/sets/apocalypse/PhyrexianArena.java index 2048bbccedd..308241ef158 100644 --- a/Mage.Sets/src/mage/sets/apocalypse/PhyrexianArena.java +++ b/Mage.Sets/src/mage/sets/apocalypse/PhyrexianArena.java @@ -34,7 +34,7 @@ import mage.constants.Rarity; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.effects.common.DrawCardControllerEffect; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.cards.CardImpl; import mage.constants.TargetController; @@ -49,7 +49,7 @@ public class PhyrexianArena extends CardImpl { this.expansionSetCode = "APC"; this.color.setBlack(true); Ability ability = new BeginningOfUpkeepTriggeredAbility(new DrawCardControllerEffect(1), TargetController.YOU, false); - ability.addEffect(new LoseLifeSourceEffect(1)); + ability.addEffect(new LoseLifeSourceControllerEffect(1)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/sets/apocalypse/PhyrexianGargantua.java b/Mage.Sets/src/mage/sets/apocalypse/PhyrexianGargantua.java index c69c0e66d8a..8e32afba079 100644 --- a/Mage.Sets/src/mage/sets/apocalypse/PhyrexianGargantua.java +++ b/Mage.Sets/src/mage/sets/apocalypse/PhyrexianGargantua.java @@ -35,7 +35,7 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.DrawCardControllerEffect; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.cards.CardImpl; /** @@ -52,7 +52,7 @@ public class PhyrexianGargantua extends CardImpl { this.power = new MageInt(4); this.toughness = new MageInt(4); Ability ability = new EntersBattlefieldTriggeredAbility(new DrawCardControllerEffect(2), false); - ability.addEffect(new LoseLifeSourceEffect(2)); + ability.addEffect(new LoseLifeSourceControllerEffect(2)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/sets/avacynrestored/SoulcageFiend.java b/Mage.Sets/src/mage/sets/avacynrestored/SoulcageFiend.java index 08ee67898e8..a0cd2b46574 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/SoulcageFiend.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/SoulcageFiend.java @@ -31,7 +31,7 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.MageInt; import mage.abilities.common.DiesTriggeredAbility; -import mage.abilities.effects.common.LoseLifePlayersEffect; +import mage.abilities.effects.common.LoseLifeAllPlayersEffect; import mage.cards.CardImpl; import java.util.UUID; @@ -51,7 +51,7 @@ public class SoulcageFiend extends CardImpl { this.toughness = new MageInt(2); // When Soulcage Fiend dies, each player loses 3 life. - this.addAbility(new DiesTriggeredAbility(new LoseLifePlayersEffect(3))); + this.addAbility(new DiesTriggeredAbility(new LoseLifeAllPlayersEffect(3))); } public SoulcageFiend(final SoulcageFiend card) { diff --git a/Mage.Sets/src/mage/sets/betrayersofkamigawa/BlessingOfLeeches.java b/Mage.Sets/src/mage/sets/betrayersofkamigawa/BlessingOfLeeches.java index 2b2c92bbc0e..baebb491138 100644 --- a/Mage.Sets/src/mage/sets/betrayersofkamigawa/BlessingOfLeeches.java +++ b/Mage.Sets/src/mage/sets/betrayersofkamigawa/BlessingOfLeeches.java @@ -36,7 +36,7 @@ import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.effects.common.RegenerateAttachedEffect; import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.FlashAbility; @@ -65,7 +65,7 @@ public class BlessingOfLeeches extends CardImpl { this.addAbility(ability); // At the beginning of your upkeep, you lose 1 life. - this.addAbility(new BeginningOfUpkeepTriggeredAbility(new LoseLifeSourceEffect(1), TargetController.YOU, false)); + this.addAbility(new BeginningOfUpkeepTriggeredAbility(new LoseLifeSourceControllerEffect(1), TargetController.YOU, false)); // {0}: Regenerate enchanted creature. this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateAttachedEffect(AttachmentType.AURA),new GenericManaCost(0))); diff --git a/Mage.Sets/src/mage/sets/bornofthegods/HeraldOfTorment.java b/Mage.Sets/src/mage/sets/bornofthegods/HeraldOfTorment.java index 41ef8b3c387..56d214b2014 100644 --- a/Mage.Sets/src/mage/sets/bornofthegods/HeraldOfTorment.java +++ b/Mage.Sets/src/mage/sets/bornofthegods/HeraldOfTorment.java @@ -33,7 +33,7 @@ import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.Effect; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.effects.common.continious.BoostEnchantedEffect; import mage.abilities.effects.common.continious.GainAbilityAttachedEffect; import mage.abilities.keyword.BestowAbility; @@ -67,7 +67,7 @@ public class HeraldOfTorment extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // At the beginning of your upkeep, you lose 1 life. - this.addAbility(new BeginningOfUpkeepTriggeredAbility(new LoseLifeSourceEffect(1), TargetController.YOU, false)); + this.addAbility(new BeginningOfUpkeepTriggeredAbility(new LoseLifeSourceControllerEffect(1), TargetController.YOU, false)); // Enchanted creature gets +3/+3 and has flying. Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(3, 3)); diff --git a/Mage.Sets/src/mage/sets/bornofthegods/Sanguimancy.java b/Mage.Sets/src/mage/sets/bornofthegods/Sanguimancy.java index 1c77ee61942..7e526130ba7 100644 --- a/Mage.Sets/src/mage/sets/bornofthegods/Sanguimancy.java +++ b/Mage.Sets/src/mage/sets/bornofthegods/Sanguimancy.java @@ -32,7 +32,7 @@ import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.DevotionCount; import mage.abilities.effects.Effect; import mage.abilities.effects.common.DrawCardControllerEffect; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.ColoredManaSymbol; @@ -55,7 +55,7 @@ public class Sanguimancy extends CardImpl { Effect effect = new DrawCardControllerEffect(blackDevotion); effect.setText("You draw X cards"); this.getSpellAbility().addEffect(effect); - effect = new LoseLifeSourceEffect(blackDevotion); + effect = new LoseLifeSourceControllerEffect(blackDevotion); effect.setText("and you lose X life, where X is your devotion to black"); this.getSpellAbility().addEffect(effect); } diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/DeathcurseOgre.java b/Mage.Sets/src/mage/sets/championsofkamigawa/DeathcurseOgre.java index 2256dcccc31..9ff33dd1f6f 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/DeathcurseOgre.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/DeathcurseOgre.java @@ -34,7 +34,7 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.MageInt; import mage.abilities.common.DiesTriggeredAbility; -import mage.abilities.effects.common.LoseLifePlayersEffect; +import mage.abilities.effects.common.LoseLifeAllPlayersEffect; import mage.cards.CardImpl; /** @@ -51,7 +51,7 @@ public class DeathcurseOgre extends CardImpl { this.color.setBlack(true); this.power = new MageInt(3); this.toughness = new MageInt(3); - this.addAbility(new DiesTriggeredAbility(new LoseLifePlayersEffect(3))); + this.addAbility(new DiesTriggeredAbility(new LoseLifeAllPlayersEffect(3))); } public DeathcurseOgre (final DeathcurseOgre card) { diff --git a/Mage.Sets/src/mage/sets/commander2013/BalefulForce.java b/Mage.Sets/src/mage/sets/commander2013/BalefulForce.java index cd019ba54b6..2312c1da013 100644 --- a/Mage.Sets/src/mage/sets/commander2013/BalefulForce.java +++ b/Mage.Sets/src/mage/sets/commander2013/BalefulForce.java @@ -31,9 +31,9 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.effects.Effect; import mage.abilities.effects.common.DrawCardControllerEffect; -import mage.abilities.effects.common.LoseLifeControllerEffect; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; @@ -56,7 +56,9 @@ public class BalefulForce extends CardImpl { // At the beginning of each upkeep, you draw a card and you lose 1 life. Ability ability = new BeginningOfUpkeepTriggeredAbility(new DrawCardControllerEffect(1), TargetController.ANY, false); - ability.addEffect(new LoseLifeSourceEffect(1)); + Effect effect = new LoseLifeSourceControllerEffect(1); + effect.setText("and you lose 1 life"); + ability.addEffect(effect); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/sets/conflux/BloodTyrant.java b/Mage.Sets/src/mage/sets/conflux/BloodTyrant.java index 5a196df9299..d51d4ec3cac 100644 --- a/Mage.Sets/src/mage/sets/conflux/BloodTyrant.java +++ b/Mage.Sets/src/mage/sets/conflux/BloodTyrant.java @@ -107,10 +107,7 @@ class PlayerLosesTheGameTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean apply(Game game, Ability source) { int counters = 0; - for (Player player : game.getPlayers().values()) { - if (player != null) { - player.loseLife(1, game); - counters++; + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + for (UUID playerId : controller.getInRange()) { + Player player = game.getPlayer(playerId); + if (player != null) { + if (player.loseLife(1, game) > 0) { + counters++; + } + } } + Permanent bloodTyrant = game.getPermanent(source.getSourceId()); + if (bloodTyrant != null && counters > 0) { + bloodTyrant.addCounters(CounterType.P1P1.createInstance(counters), game); + } + return true; } - Permanent bloodTyrant = game.getPermanent(source.getSourceId()); - if (bloodTyrant != null && counters != 0) { - bloodTyrant.addCounters(CounterType.P1P1.createInstance(counters), game); - } - return true; + return false; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/sets/conflux/Countersquall.java b/Mage.Sets/src/mage/sets/conflux/Countersquall.java index 91554a85ed5..25d58d088e0 100644 --- a/Mage.Sets/src/mage/sets/conflux/Countersquall.java +++ b/Mage.Sets/src/mage/sets/conflux/Countersquall.java @@ -31,7 +31,7 @@ import java.util.UUID; import mage.constants.CardType; import mage.constants.Rarity; import mage.abilities.effects.common.CounterTargetEffect; -import mage.abilities.effects.common.LoseLifeControllerEffect; +import mage.abilities.effects.common.LoseLifeTargetControllerEffect; import mage.cards.CardImpl; import mage.filter.FilterSpell; import mage.filter.predicate.Predicates; @@ -57,9 +57,10 @@ public class Countersquall extends CardImpl { this.color.setBlue(true); this.color.setBlack(true); + // Counter target noncreature spell. Its controller loses 2 life. this.getSpellAbility().addTarget(new TargetSpell(filter)); this.getSpellAbility().addEffect(new CounterTargetEffect()); - this.getSpellAbility().addEffect(new LoseLifeControllerEffect(2)); + this.getSpellAbility().addEffect(new LoseLifeTargetControllerEffect(2)); } public Countersquall(final Countersquall card) { diff --git a/Mage.Sets/src/mage/sets/eighthedition/AmbitionsCost.java b/Mage.Sets/src/mage/sets/eighthedition/AmbitionsCost.java index d5b9dc83219..26d6cc583b3 100644 --- a/Mage.Sets/src/mage/sets/eighthedition/AmbitionsCost.java +++ b/Mage.Sets/src/mage/sets/eighthedition/AmbitionsCost.java @@ -31,7 +31,7 @@ import java.util.UUID; import mage.constants.CardType; import mage.constants.Rarity; import mage.abilities.effects.common.DrawCardControllerEffect; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.cards.CardImpl; /** @@ -48,7 +48,7 @@ public class AmbitionsCost extends CardImpl { // You draw three cards and you lose 3 life. this.getSpellAbility().addEffect(new DrawCardControllerEffect(3)); - this.getSpellAbility().addEffect(new LoseLifeSourceEffect(3)); + this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(3)); } public AmbitionsCost(final AmbitionsCost card) { diff --git a/Mage.Sets/src/mage/sets/eighthedition/VampiricSpirit.java b/Mage.Sets/src/mage/sets/eighthedition/VampiricSpirit.java index 45328a8bc03..0cdb1cbbb9a 100644 --- a/Mage.Sets/src/mage/sets/eighthedition/VampiricSpirit.java +++ b/Mage.Sets/src/mage/sets/eighthedition/VampiricSpirit.java @@ -32,7 +32,7 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.MageInt; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; @@ -54,7 +54,7 @@ public class VampiricSpirit extends CardImpl { // Flying this.addAbility(FlyingAbility.getInstance()); // When Vampiric Spirit enters the battlefield, you lose 4 life. - this.addAbility(new EntersBattlefieldTriggeredAbility(new LoseLifeSourceEffect(4))); + this.addAbility(new EntersBattlefieldTriggeredAbility(new LoseLifeSourceControllerEffect(4))); } public VampiricSpirit(final VampiricSpirit card) { diff --git a/Mage.Sets/src/mage/sets/fifthdawn/NightsWhisper.java b/Mage.Sets/src/mage/sets/fifthdawn/NightsWhisper.java index fdc06e707de..8441d58f689 100644 --- a/Mage.Sets/src/mage/sets/fifthdawn/NightsWhisper.java +++ b/Mage.Sets/src/mage/sets/fifthdawn/NightsWhisper.java @@ -31,7 +31,7 @@ import java.util.UUID; import mage.constants.CardType; import mage.constants.Rarity; import mage.abilities.effects.common.DrawCardControllerEffect; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.cards.CardImpl; /** @@ -48,7 +48,7 @@ public class NightsWhisper extends CardImpl { // You draw two cards and you lose 2 life. this.getSpellAbility().addEffect(new DrawCardControllerEffect(2)); - this.getSpellAbility().addEffect(new LoseLifeSourceEffect(2)); + this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2)); } public NightsWhisper(final NightsWhisper card) { diff --git a/Mage.Sets/src/mage/sets/guildpact/PilloryOfTheSleepless.java b/Mage.Sets/src/mage/sets/guildpact/PilloryOfTheSleepless.java index 2a013abc582..aaabf4e69ea 100644 --- a/Mage.Sets/src/mage/sets/guildpact/PilloryOfTheSleepless.java +++ b/Mage.Sets/src/mage/sets/guildpact/PilloryOfTheSleepless.java @@ -33,7 +33,7 @@ import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.combat.CantAttackBlockAttachedEffect; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.effects.common.continious.GainAbilityAttachedEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; @@ -71,7 +71,7 @@ public class PilloryOfTheSleepless extends CardImpl { // Enchanted creature has "At the beginning of your upkeep, you lose 1 life." this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect( - new BeginningOfUpkeepTriggeredAbility(new LoseLifeSourceEffect(1), TargetController.YOU, false), AttachmentType.AURA))); + new BeginningOfUpkeepTriggeredAbility(new LoseLifeSourceControllerEffect(1), TargetController.YOU, false), AttachmentType.AURA))); } public PilloryOfTheSleepless(final PilloryOfTheSleepless card) { diff --git a/Mage.Sets/src/mage/sets/innistrad/UnholyFiend.java b/Mage.Sets/src/mage/sets/innistrad/UnholyFiend.java index 526fdac798c..2c0a0a35ef4 100644 --- a/Mage.Sets/src/mage/sets/innistrad/UnholyFiend.java +++ b/Mage.Sets/src/mage/sets/innistrad/UnholyFiend.java @@ -32,7 +32,7 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.MageInt; import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.cards.CardImpl; /** @@ -53,7 +53,7 @@ public class UnholyFiend extends CardImpl { this.nightCard = true; - this.addAbility(new BeginningOfYourEndStepTriggeredAbility(new LoseLifeSourceEffect(1), false)); + this.addAbility(new BeginningOfYourEndStepTriggeredAbility(new LoseLifeSourceControllerEffect(1), false)); } public UnholyFiend(final UnholyFiend card) { diff --git a/Mage.Sets/src/mage/sets/lorwyn/Thoughtseize.java b/Mage.Sets/src/mage/sets/lorwyn/Thoughtseize.java index 5dd9afe5b04..b64aa13f741 100644 --- a/Mage.Sets/src/mage/sets/lorwyn/Thoughtseize.java +++ b/Mage.Sets/src/mage/sets/lorwyn/Thoughtseize.java @@ -28,7 +28,7 @@ package mage.sets.lorwyn; import java.util.UUID; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetEffect; import mage.cards.CardImpl; import mage.constants.CardType; @@ -60,7 +60,7 @@ public class Thoughtseize extends CardImpl { // Target player reveals his or her hand. You choose a nonland card from it. That player discards that card. You lose 2 life. this.getSpellAbility().addTarget(new TargetPlayer(true)); this.getSpellAbility().addEffect(new DiscardCardYouChooseTargetEffect(filter, TargetController.ANY)); - this.getSpellAbility().addEffect(new LoseLifeSourceEffect(2)); + this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2)); } public Thoughtseize(final Thoughtseize card) { diff --git a/Mage.Sets/src/mage/sets/magic2010/HowlingBanshee.java b/Mage.Sets/src/mage/sets/magic2010/HowlingBanshee.java index 27a5181d4ca..2c385ed071d 100644 --- a/Mage.Sets/src/mage/sets/magic2010/HowlingBanshee.java +++ b/Mage.Sets/src/mage/sets/magic2010/HowlingBanshee.java @@ -33,7 +33,7 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.MageInt; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.LoseLifePlayersEffect; +import mage.abilities.effects.common.LoseLifeAllPlayersEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; @@ -52,7 +52,7 @@ public class HowlingBanshee extends CardImpl { this.toughness = new MageInt(3); this.addAbility(FlyingAbility.getInstance()); - this.addAbility(new EntersBattlefieldTriggeredAbility(new LoseLifePlayersEffect(3), false)); + this.addAbility(new EntersBattlefieldTriggeredAbility(new LoseLifeAllPlayersEffect(3), false)); } public HowlingBanshee(final HowlingBanshee card) { diff --git a/Mage.Sets/src/mage/sets/magic2012/DarkFavor.java b/Mage.Sets/src/mage/sets/magic2012/DarkFavor.java index 3f3ed14a027..6d152d9097d 100644 --- a/Mage.Sets/src/mage/sets/magic2012/DarkFavor.java +++ b/Mage.Sets/src/mage/sets/magic2012/DarkFavor.java @@ -35,7 +35,7 @@ import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.effects.common.continious.BoostEnchantedEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; @@ -57,7 +57,7 @@ public class DarkFavor extends CardImpl { this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); Ability ability = new EnchantAbility(auraTarget.getTargetName()); this.addAbility(ability); - this.addAbility(new EntersBattlefieldTriggeredAbility(new LoseLifeSourceEffect(1), false)); + this.addAbility(new EntersBattlefieldTriggeredAbility(new LoseLifeSourceControllerEffect(1), false)); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(3, 1, Duration.WhileOnBattlefield))); } diff --git a/Mage.Sets/src/mage/sets/magic2012/Smallpox.java b/Mage.Sets/src/mage/sets/magic2012/Smallpox.java index 61fccc8909d..43e46f3ecec 100644 --- a/Mage.Sets/src/mage/sets/magic2012/Smallpox.java +++ b/Mage.Sets/src/mage/sets/magic2012/Smallpox.java @@ -27,29 +27,27 @@ */ package mage.sets.magic2012; -import java.util.Set; import java.util.UUID; import mage.constants.CardType; -import mage.constants.Outcome; import mage.constants.Rarity; -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DiscardEachPlayerEffect; +import mage.abilities.effects.common.LoseLifeAllPlayersEffect; +import mage.abilities.effects.common.SacrificeAllEffect; import mage.cards.CardImpl; -import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledLandPermanent; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.Target; -import mage.target.common.TargetControlledPermanent; +import mage.filter.common.FilterControlledPermanent; /** * * @author nantuko */ public class Smallpox extends CardImpl { - + + private static final FilterControlledPermanent filterCreature = new FilterControlledCreaturePermanent(); + private static final FilterControlledPermanent filterLand = new FilterControlledLandPermanent(); + public Smallpox(UUID ownerId) { super(ownerId, 108, "Smallpox", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{B}{B}"); this.expansionSetCode = "M12"; @@ -57,7 +55,16 @@ public class Smallpox extends CardImpl { this.color.setBlack(true); // Each player loses 1 life, discards a card, sacrifices a creature, then sacrifices a land. - this.getSpellAbility().addEffect(new SmallpoxEffect()); + this.getSpellAbility().addEffect(new LoseLifeAllPlayersEffect(1)); + Effect effect = new DiscardEachPlayerEffect(); + effect.setText(", discards a card"); + this.getSpellAbility().addEffect(effect); + effect = new SacrificeAllEffect(1, filterCreature); + effect.setText(", sacrifices a creature"); + this.getSpellAbility().addEffect(effect); + effect = new SacrificeAllEffect(1, filterLand); + effect.setText(", then sacrifices a land"); + this.getSpellAbility().addEffect(effect); } public Smallpox(final Smallpox card) { @@ -69,75 +76,3 @@ public class Smallpox extends CardImpl { return new Smallpox(this); } } - -class SmallpoxEffect extends OneShotEffect { - - private static final FilterPermanent filterCreature = new FilterControlledCreaturePermanent(); - private static final FilterPermanent filterLand = new FilterControlledLandPermanent(); - - SmallpoxEffect() { - super(Outcome.DestroyPermanent); - staticText = "Each player loses 1 life, discards a card, sacrifices a creature, then sacrifices a land"; - } - - SmallpoxEffect(final SmallpoxEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - Set players = controller.getInRange(); - for (UUID playerId : players) { - Player player = game.getPlayer(playerId); - if (player != null) { - player.loseLife(1, game); - } - } - for (UUID playerId : players) { - Player player = game.getPlayer(playerId); - if (player != null) { - player.discard(1, source, game); - } - } - for (UUID playerId : players) { - Player player = game.getPlayer(playerId); - if (player != null) { - sacrifice(game, source, player, filterCreature); - } - } - for (UUID playerId : players) { - Player player = game.getPlayer(playerId); - if (player != null) { - sacrifice(game, source, player, filterLand); - } - } - return true; - } - return false; - } - - @Override - public SmallpoxEffect copy() { - return new SmallpoxEffect(this); - } - - private void sacrifice(Game game, Ability source, Player player, FilterPermanent filter) { - Target target = new TargetControlledPermanent(1, 1, filter, false); - if (target.canChoose(player.getId(), game)) { - while (!target.isChosen() && target.canChoose(player.getId(), game) && player.isInGame()) { - player.choose(Outcome.Sacrifice, target, source.getSourceId(), game); - } - - for ( int idx = 0; idx < target.getTargets().size(); idx++) { - Permanent permanent = game.getPermanent((UUID)target.getTargets().get(idx)); - - if ( permanent != null ) { - permanent.sacrifice(source.getSourceId(), game); - } - } - } - } - -} diff --git a/Mage.Sets/src/mage/sets/magic2014/DarkProphecy.java b/Mage.Sets/src/mage/sets/magic2014/DarkProphecy.java index 67c11f55987..b60804b885f 100644 --- a/Mage.Sets/src/mage/sets/magic2014/DarkProphecy.java +++ b/Mage.Sets/src/mage/sets/magic2014/DarkProphecy.java @@ -31,8 +31,7 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.DiesCreatureTriggeredAbility; import mage.abilities.effects.common.DrawCardControllerEffect; -import mage.abilities.effects.common.LoseLifeControllerEffect; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; @@ -59,7 +58,7 @@ public class DarkProphecy extends CardImpl { // Whenever a creature you control dies, you draw a card and lose 1 life. Ability ability = new DiesCreatureTriggeredAbility(new DrawCardControllerEffect(1), false, filter); - ability.addEffect(new LoseLifeSourceEffect(1)); + ability.addEffect(new LoseLifeSourceControllerEffect(1)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/sets/mirrodinbesieged/CausticHound.java b/Mage.Sets/src/mage/sets/mirrodinbesieged/CausticHound.java index fb5d9eda703..91b15aa0578 100644 --- a/Mage.Sets/src/mage/sets/mirrodinbesieged/CausticHound.java +++ b/Mage.Sets/src/mage/sets/mirrodinbesieged/CausticHound.java @@ -34,7 +34,7 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.MageInt; import mage.abilities.common.DiesTriggeredAbility; -import mage.abilities.effects.common.LoseLifePlayersEffect; +import mage.abilities.effects.common.LoseLifeAllPlayersEffect; import mage.cards.CardImpl; /** @@ -50,7 +50,7 @@ public class CausticHound extends CardImpl { this.color.setBlack(true); this.power = new MageInt(4); this.toughness = new MageInt(4); - this.addAbility(new DiesTriggeredAbility(new LoseLifePlayersEffect(4))); + this.addAbility(new DiesTriggeredAbility(new LoseLifeAllPlayersEffect(4))); } public CausticHound (final CausticHound card) { diff --git a/Mage.Sets/src/mage/sets/modernmasters/DeathCloud.java b/Mage.Sets/src/mage/sets/modernmasters/DeathCloud.java index 53c9d6c8281..d19f8d7bba7 100644 --- a/Mage.Sets/src/mage/sets/modernmasters/DeathCloud.java +++ b/Mage.Sets/src/mage/sets/modernmasters/DeathCloud.java @@ -34,7 +34,7 @@ import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.ManacostVariableValue; import mage.abilities.effects.Effect; import mage.abilities.effects.common.DiscardEachPlayerEffect; -import mage.abilities.effects.common.LoseLifePlayersEffect; +import mage.abilities.effects.common.LoseLifeAllPlayersEffect; import mage.abilities.effects.common.SacrificeAllEffect; import mage.cards.CardImpl; import mage.filter.common.FilterControlledCreaturePermanent; @@ -54,7 +54,7 @@ public class DeathCloud extends CardImpl { // Each player loses X life, discards X cards, sacrifices X creatures, then sacrifices X lands. DynamicValue xValue = new ManacostVariableValue(); - this.getSpellAbility().addEffect(new LoseLifePlayersEffect(xValue)); + this.getSpellAbility().addEffect(new LoseLifeAllPlayersEffect(xValue)); Effect effect = new DiscardEachPlayerEffect(xValue, false); effect.setText(", discards X cards"); this.getSpellAbility().addEffect(effect); diff --git a/Mage.Sets/src/mage/sets/morningtide/Bitterblossom.java b/Mage.Sets/src/mage/sets/morningtide/Bitterblossom.java index 80352af9518..9ee4ca9a40b 100644 --- a/Mage.Sets/src/mage/sets/morningtide/Bitterblossom.java +++ b/Mage.Sets/src/mage/sets/morningtide/Bitterblossom.java @@ -35,7 +35,7 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.constants.TargetController; @@ -53,7 +53,7 @@ public class Bitterblossom extends CardImpl { this.supertype.add("Tribal"); this.subtype.add("Faerie"); this.color.setBlack(true); - Ability ability = new BeginningOfUpkeepTriggeredAbility(new LoseLifeSourceEffect(1), TargetController.YOU, false); + Ability ability = new BeginningOfUpkeepTriggeredAbility(new LoseLifeSourceControllerEffect(1), TargetController.YOU, false); ability.addEffect(new CreateTokenEffect(new FaerieToken(), 1)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/sets/nemesis/RathiFiend.java b/Mage.Sets/src/mage/sets/nemesis/RathiFiend.java index 4e1dbd345f1..38696bf1323 100644 --- a/Mage.Sets/src/mage/sets/nemesis/RathiFiend.java +++ b/Mage.Sets/src/mage/sets/nemesis/RathiFiend.java @@ -38,7 +38,7 @@ import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.common.LoseLifePlayersEffect; +import mage.abilities.effects.common.LoseLifeAllPlayersEffect; import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; import mage.cards.CardImpl; import mage.filter.Filter.ComparisonType; @@ -70,7 +70,7 @@ public class RathiFiend extends CardImpl { this.toughness = new MageInt(2); // When Rathi Fiend enters the battlefield, each player loses 3 life. - this.addAbility(new EntersBattlefieldTriggeredAbility(new LoseLifePlayersEffect(3), false)); + this.addAbility(new EntersBattlefieldTriggeredAbility(new LoseLifeAllPlayersEffect(3), false)); // {3}, {T}: Search your library for a Mercenary permanent card with converted mana cost 3 or less and put it onto the battlefield. Then shuffle your library. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter)), new TapSourceCost()); ability.addManaCost(new GenericManaCost(3)); diff --git a/Mage.Sets/src/mage/sets/newphyrexia/GlissasScorn.java b/Mage.Sets/src/mage/sets/newphyrexia/GlissasScorn.java index d1b7c36ee5d..6a521f1bc3d 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/GlissasScorn.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/GlissasScorn.java @@ -31,7 +31,7 @@ import java.util.UUID; import mage.constants.CardType; import mage.constants.Rarity; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.effects.common.LoseLifeControllerEffect; +import mage.abilities.effects.common.LoseLifeTargetControllerEffect; import mage.cards.CardImpl; import mage.target.common.TargetArtifactPermanent; @@ -46,10 +46,10 @@ public class GlissasScorn extends CardImpl { this.expansionSetCode = "NPH"; this.color.setGreen(true); - + // Destroy target artifact. Its controller loses 1 life. this.getSpellAbility().addTarget(new TargetArtifactPermanent()); - this.getSpellAbility().addEffect(new DestroyTargetEffect()); - this.getSpellAbility().addEffect(new LoseLifeControllerEffect(1)); + this.getSpellAbility().addEffect(new DestroyTargetEffect(true)); + this.getSpellAbility().addEffect(new LoseLifeTargetControllerEffect(1)); } public GlissasScorn(final GlissasScorn card) { diff --git a/Mage.Sets/src/mage/sets/newphyrexia/PsychicBarrier.java b/Mage.Sets/src/mage/sets/newphyrexia/PsychicBarrier.java index 741586a421a..275f79463ed 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/PsychicBarrier.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/PsychicBarrier.java @@ -31,7 +31,7 @@ import java.util.UUID; import mage.constants.CardType; import mage.constants.Rarity; import mage.abilities.effects.common.CounterTargetEffect; -import mage.abilities.effects.common.LoseLifeControllerEffect; +import mage.abilities.effects.common.LoseLifeTargetControllerEffect; import mage.cards.CardImpl; import mage.filter.FilterSpell; import mage.filter.predicate.mageobject.CardTypePredicate; @@ -54,10 +54,10 @@ public class PsychicBarrier extends CardImpl { this.expansionSetCode = "NPH"; this.color.setBlue(true); - + // Counter target creature spell. Its controller loses 1 life. this.getSpellAbility().addTarget(new TargetSpell(filter)); this.getSpellAbility().addEffect(new CounterTargetEffect()); - this.getSpellAbility().addEffect(new LoseLifeControllerEffect(1)); + this.getSpellAbility().addEffect(new LoseLifeTargetControllerEffect(1)); } public PsychicBarrier(final PsychicBarrier card) { diff --git a/Mage.Sets/src/mage/sets/newphyrexia/VaporSnag.java b/Mage.Sets/src/mage/sets/newphyrexia/VaporSnag.java index a31093704d9..edb9687d9c9 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/VaporSnag.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/VaporSnag.java @@ -32,7 +32,7 @@ import java.util.UUID; import mage.constants.CardType; import mage.constants.Rarity; -import mage.abilities.effects.common.LoseLifeControllerEffect; +import mage.abilities.effects.common.LoseLifeTargetControllerEffect; import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.cards.CardImpl; import mage.target.common.TargetCreaturePermanent; @@ -47,9 +47,11 @@ public class VaporSnag extends CardImpl { super(ownerId, 48, "Vapor Snag", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{U}"); this.expansionSetCode = "NPH"; this.color.setBlue(true); + + // Return target creature to its owner's hand. Its controller loses 1 life. this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); - this.getSpellAbility().addEffect(new LoseLifeControllerEffect(1)); - this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + this.getSpellAbility().addEffect(new LoseLifeTargetControllerEffect(1)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(true)); } public VaporSnag (final VaporSnag card) { diff --git a/Mage.Sets/src/mage/sets/newphyrexia/VictoriousDestruction.java b/Mage.Sets/src/mage/sets/newphyrexia/VictoriousDestruction.java index 4883543eb99..c6dac2e50fb 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/VictoriousDestruction.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/VictoriousDestruction.java @@ -31,7 +31,7 @@ import java.util.UUID; import mage.constants.CardType; import mage.constants.Rarity; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.effects.common.LoseLifeControllerEffect; +import mage.abilities.effects.common.LoseLifeTargetControllerEffect; import mage.cards.CardImpl; import mage.filter.FilterPermanent; import mage.filter.predicate.Predicates; @@ -58,9 +58,10 @@ public class VictoriousDestruction extends CardImpl { this.color.setRed(true); + // Destroy target artifact or land. Its controller loses 1 life. this.getSpellAbility().addTarget(new TargetPermanent(filter)); this.getSpellAbility().addEffect(new DestroyTargetEffect()); - this.getSpellAbility().addEffect(new LoseLifeControllerEffect(1)); + this.getSpellAbility().addEffect(new LoseLifeTargetControllerEffect(1)); } public VictoriousDestruction(final VictoriousDestruction card) { diff --git a/Mage.Sets/src/mage/sets/ninthedition/ContaminatedBond.java b/Mage.Sets/src/mage/sets/ninthedition/ContaminatedBond.java index 6b6ce323ee3..22d2fe0b407 100644 --- a/Mage.Sets/src/mage/sets/ninthedition/ContaminatedBond.java +++ b/Mage.Sets/src/mage/sets/ninthedition/ContaminatedBond.java @@ -34,7 +34,7 @@ import mage.constants.Rarity; import mage.abilities.Ability; import mage.abilities.common.AttacksOrBlocksEnchantedTriggeredAbility; import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.constants.Outcome; @@ -62,7 +62,7 @@ public class ContaminatedBond extends CardImpl { Ability ability = new EnchantAbility(auraTarget.getTargetName()); this.addAbility(ability); // Whenever enchanted creature attacks or blocks, its controller loses 3 life. - this.addAbility(new AttacksOrBlocksEnchantedTriggeredAbility(Zone.BATTLEFIELD, new LoseLifeSourceEffect(3))); + this.addAbility(new AttacksOrBlocksEnchantedTriggeredAbility(Zone.BATTLEFIELD, new LoseLifeSourceControllerEffect(3))); } public ContaminatedBond(final ContaminatedBond card) { diff --git a/Mage.Sets/src/mage/sets/odyssey/FilthyCur.java b/Mage.Sets/src/mage/sets/odyssey/FilthyCur.java index a135bc8bc7c..07b3e780f74 100644 --- a/Mage.Sets/src/mage/sets/odyssey/FilthyCur.java +++ b/Mage.Sets/src/mage/sets/odyssey/FilthyCur.java @@ -31,7 +31,7 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.Effect; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; @@ -55,7 +55,7 @@ public class FilthyCur extends CardImpl { this.toughness = new MageInt(2); // Whenever Filthy Cur is dealt damage, you lose that much life. - this.addAbility(new DealtDamageLoseLifeTriggeredAbility(Zone.BATTLEFIELD, new LoseLifeSourceEffect(0), false)); + this.addAbility(new DealtDamageLoseLifeTriggeredAbility(Zone.BATTLEFIELD, new LoseLifeSourceControllerEffect(0), false)); } @@ -89,7 +89,7 @@ class DealtDamageLoseLifeTriggeredAbility extends TriggeredAbilityImpl { this.toughness = new MageInt(1); // {tap}: Each player loses 1 life for each Zombie on the battlefield. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new LoseLifePlayersEffect(new PermanentsOnBattlefieldCount(filter), rule), new TapSourceCost())); + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new LoseLifeAllPlayersEffect(new PermanentsOnBattlefieldCount(filter), rule), new TapSourceCost())); } public ShepherdOfRot(final ShepherdOfRot card) { diff --git a/Mage.Sets/src/mage/sets/planeshift/UrzasGuilt.java b/Mage.Sets/src/mage/sets/planeshift/UrzasGuilt.java index 587441e013c..6b42aa86af5 100644 --- a/Mage.Sets/src/mage/sets/planeshift/UrzasGuilt.java +++ b/Mage.Sets/src/mage/sets/planeshift/UrzasGuilt.java @@ -33,7 +33,7 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.abilities.effects.common.DiscardEachPlayerEffect; import mage.abilities.effects.common.DrawCardAllEffect; -import mage.abilities.effects.common.LoseLifeAllEffect; +import mage.abilities.effects.common.LoseLifeAllPlayersEffect; import mage.cards.CardImpl; /** @@ -54,7 +54,7 @@ public class UrzasGuilt extends CardImpl { Effect effect = new DiscardEachPlayerEffect(3, false); effect.setText("then discards three cards"); this.getSpellAbility().addEffect(effect); - effect = new LoseLifeAllEffect(4); + effect = new LoseLifeAllPlayersEffect(4); effect.setText("then loses 4 life"); this.getSpellAbility().addEffect(effect); } diff --git a/Mage.Sets/src/mage/sets/ravnika/ClutchOfTheUndercity.java b/Mage.Sets/src/mage/sets/ravnika/ClutchOfTheUndercity.java index eaae3c349fa..3f2309e0473 100644 --- a/Mage.Sets/src/mage/sets/ravnika/ClutchOfTheUndercity.java +++ b/Mage.Sets/src/mage/sets/ravnika/ClutchOfTheUndercity.java @@ -31,16 +31,10 @@ import java.util.UUID; import mage.constants.CardType; import mage.constants.Rarity; -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.LoseLifeTargetControllerEffect; import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.abilities.keyword.TransmuteAbility; import mage.cards.CardImpl; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; import mage.target.common.TargetCreaturePermanent; /** @@ -57,7 +51,7 @@ public class ClutchOfTheUndercity extends CardImpl { // Return target permanent to its owner's hand. Its controller loses 3 life. this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); - this.getSpellAbility().addEffect(new ClutchOfTheUndercityEffect()); + this.getSpellAbility().addEffect(new LoseLifeTargetControllerEffect(3)); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); // Transmute {1}{U}{B} this.addAbility(new TransmuteAbility("{1}{U}{B}")); @@ -72,32 +66,3 @@ public class ClutchOfTheUndercity extends CardImpl { return new ClutchOfTheUndercity(this); } } - -class ClutchOfTheUndercityEffect extends OneShotEffect { - ClutchOfTheUndercityEffect() { - super(Outcome.Damage); - staticText = "Its controller loses 3 life"; - } - - ClutchOfTheUndercityEffect(final ClutchOfTheUndercityEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent p = (Permanent) game.getLastKnownInformation(targetPointer.getFirst(game, source), Zone.BATTLEFIELD); - if (p != null) { - Player player = game.getPlayer(p.getControllerId()); - if (player != null) { - player.loseLife(3, game); - return true; - } - } - return false; - } - - @Override - public ClutchOfTheUndercityEffect copy() { - return new ClutchOfTheUndercityEffect(this); - } -} diff --git a/Mage.Sets/src/mage/sets/ravnika/Moroii.java b/Mage.Sets/src/mage/sets/ravnika/Moroii.java index 5e785cebfcd..cba02df6c5e 100644 --- a/Mage.Sets/src/mage/sets/ravnika/Moroii.java +++ b/Mage.Sets/src/mage/sets/ravnika/Moroii.java @@ -33,7 +33,7 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.MageInt; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.constants.TargetController; @@ -56,7 +56,7 @@ public class Moroii extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // At the beginning of your upkeep, you lose 1 life. - this.addAbility(new BeginningOfUpkeepTriggeredAbility(new LoseLifeSourceEffect(1), TargetController.YOU, false)); + this.addAbility(new BeginningOfUpkeepTriggeredAbility(new LoseLifeSourceControllerEffect(1), TargetController.YOU, false)); } public Moroii(final Moroii card) { diff --git a/Mage.Sets/src/mage/sets/returntoravnica/LaunchParty.java b/Mage.Sets/src/mage/sets/returntoravnica/LaunchParty.java index 935a412282c..3befe6218a0 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/LaunchParty.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/LaunchParty.java @@ -32,7 +32,7 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.effects.common.LoseLifeControllerEffect; +import mage.abilities.effects.common.LoseLifeTargetControllerEffect; import mage.cards.CardImpl; import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetCreaturePermanent; @@ -54,7 +54,7 @@ public class LaunchParty extends CardImpl { // Destroy target creature. Its controller loses 2 life. this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addEffect(new DestroyTargetEffect()); - this.getSpellAbility().addEffect(new LoseLifeControllerEffect(2)); + this.getSpellAbility().addEffect(new LoseLifeTargetControllerEffect(2)); } public LaunchParty(final LaunchParty card) { diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/MoriokReplica.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/MoriokReplica.java index e607c08ff1f..aa02d094aae 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/MoriokReplica.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/MoriokReplica.java @@ -38,7 +38,7 @@ import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.DrawCardControllerEffect; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.cards.CardImpl; /** @@ -55,7 +55,7 @@ public class MoriokReplica extends CardImpl { this.toughness = new MageInt(2); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardControllerEffect(2), new ManaCostsImpl("{1}{B}")); ability.addCost(new SacrificeSourceCost()); - ability.addEffect(new LoseLifeSourceEffect(2)); + ability.addEffect(new LoseLifeSourceControllerEffect(2)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/NecrogenScudder.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/NecrogenScudder.java index 61f6d2ae7a7..e12f163e548 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/NecrogenScudder.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/NecrogenScudder.java @@ -33,7 +33,7 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.MageInt; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; @@ -50,7 +50,7 @@ public class NecrogenScudder extends CardImpl { this.color.setBlack(true); this.power = new MageInt(3); this.toughness = new MageInt(3); - this.addAbility(new EntersBattlefieldTriggeredAbility(new LoseLifeSourceEffect(3))); + this.addAbility(new EntersBattlefieldTriggeredAbility(new LoseLifeSourceControllerEffect(3))); this.addAbility(FlyingAbility.getInstance()); } diff --git a/Mage.Sets/src/mage/sets/shadowmoor/SpiteflameWitch.java b/Mage.Sets/src/mage/sets/shadowmoor/SpiteflameWitch.java index fc24498837b..3548aaf8d4d 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/SpiteflameWitch.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/SpiteflameWitch.java @@ -34,7 +34,7 @@ import mage.constants.Zone; import mage.MageInt; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.LoseLifePlayersEffect; +import mage.abilities.effects.common.LoseLifeAllPlayersEffect; import mage.cards.CardImpl; /** @@ -54,7 +54,7 @@ public class SpiteflameWitch extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(1); - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new LoseLifePlayersEffect(1), new ManaCostsImpl("{B}{R}"))); + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new LoseLifeAllPlayersEffect(1), new ManaCostsImpl("{B}{R}"))); } public SpiteflameWitch(final SpiteflameWitch card) { diff --git a/Mage.Sets/src/mage/sets/shardsofalara/PunishIgnorance.java b/Mage.Sets/src/mage/sets/shardsofalara/PunishIgnorance.java index f9f211ff64e..f02e9872b25 100644 --- a/Mage.Sets/src/mage/sets/shardsofalara/PunishIgnorance.java +++ b/Mage.Sets/src/mage/sets/shardsofalara/PunishIgnorance.java @@ -28,11 +28,12 @@ package mage.sets.shardsofalara; import java.util.UUID; +import mage.abilities.effects.Effect; import mage.constants.CardType; import mage.constants.Rarity; import mage.abilities.effects.common.CounterTargetEffect; import mage.abilities.effects.common.GainLifeEffect; -import mage.abilities.effects.common.LoseLifeControllerEffect; +import mage.abilities.effects.common.LoseLifeTargetControllerEffect; import mage.cards.CardImpl; import mage.filter.FilterSpell; import mage.target.TargetSpell; @@ -51,10 +52,13 @@ public class PunishIgnorance extends CardImpl { this.color.setBlue(true); this.color.setBlack(true); + // Counter target spell. Its controller loses 3 life and you gain 3 life. this.getSpellAbility().addTarget(new TargetSpell(new FilterSpell())); this.getSpellAbility().addEffect(new CounterTargetEffect()); - this.getSpellAbility().addEffect(new LoseLifeControllerEffect(3)); - this.getSpellAbility().addEffect(new GainLifeEffect(3)); + this.getSpellAbility().addEffect(new LoseLifeTargetControllerEffect(3)); + Effect effect = new GainLifeEffect(3); + effect.setText("and you gain 3 life"); + this.getSpellAbility().addEffect(effect); } public PunishIgnorance(final PunishIgnorance card) { diff --git a/Mage.Sets/src/mage/sets/stronghold/SerpentWarrior.java b/Mage.Sets/src/mage/sets/stronghold/SerpentWarrior.java index 0f5ce1d50b7..3b8ac0d9e09 100644 --- a/Mage.Sets/src/mage/sets/stronghold/SerpentWarrior.java +++ b/Mage.Sets/src/mage/sets/stronghold/SerpentWarrior.java @@ -30,7 +30,7 @@ package mage.sets.stronghold; import java.util.UUID; import mage.MageInt; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; @@ -52,7 +52,7 @@ public class SerpentWarrior extends CardImpl { this.toughness = new MageInt(3); // When Serpent Warrior enters the battlefield, you lose 3 life. - this.addAbility(new EntersBattlefieldTriggeredAbility(new LoseLifeSourceEffect(3))); + this.addAbility(new EntersBattlefieldTriggeredAbility(new LoseLifeSourceControllerEffect(3))); } public SerpentWarrior(final SerpentWarrior card) { diff --git a/Mage.Sets/src/mage/sets/tempest/Reanimate.java b/Mage.Sets/src/mage/sets/tempest/Reanimate.java index d72481f6fbb..91dc8a00a64 100644 --- a/Mage.Sets/src/mage/sets/tempest/Reanimate.java +++ b/Mage.Sets/src/mage/sets/tempest/Reanimate.java @@ -30,7 +30,7 @@ package mage.sets.tempest; import java.util.UUID; import mage.abilities.dynamicvalue.common.TargetConvertedManaCost; import mage.abilities.effects.Effect; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; import mage.cards.CardImpl; import mage.constants.CardType; @@ -53,7 +53,7 @@ public class Reanimate extends CardImpl { // Put target creature card from a graveyard onto the battlefield under your control. You lose life equal to its converted mana cost. this.getSpellAbility().addTarget(new TargetCardInGraveyard(new FilterCreatureCard("creature card from a graveyard"))); this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect()); - Effect effect = new LoseLifeSourceEffect(new TargetConvertedManaCost()); + Effect effect = new LoseLifeSourceControllerEffect(new TargetConvertedManaCost()); effect.setText("You lose life equal to its converted mana cost"); this.getSpellAbility().addEffect(effect); } diff --git a/Mage.Sets/src/mage/sets/tempest/RecklessSpite.java b/Mage.Sets/src/mage/sets/tempest/RecklessSpite.java index 1408c5eb93d..4acaa39ec77 100644 --- a/Mage.Sets/src/mage/sets/tempest/RecklessSpite.java +++ b/Mage.Sets/src/mage/sets/tempest/RecklessSpite.java @@ -32,7 +32,7 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.ObjectColor; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.cards.CardImpl; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.Predicates; @@ -57,7 +57,7 @@ public class RecklessSpite extends CardImpl { this.color.setBlack(true); this.getSpellAbility().addEffect(new DestroyTargetEffect()); this.getSpellAbility().addTarget(new TargetCreaturePermanent(2, 2, filter, false)); - this.getSpellAbility().addEffect(new LoseLifeSourceEffect(5)); + this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(5)); } public RecklessSpite(final RecklessSpite card) { diff --git a/Mage.Sets/src/mage/sets/tenth/GravebornMuse.java b/Mage.Sets/src/mage/sets/tenth/GravebornMuse.java index 9ab8d083baf..0ec4f83c785 100644 --- a/Mage.Sets/src/mage/sets/tenth/GravebornMuse.java +++ b/Mage.Sets/src/mage/sets/tenth/GravebornMuse.java @@ -36,7 +36,7 @@ import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.effects.common.DrawCardControllerEffect; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.cards.CardImpl; import mage.constants.TargetController; import mage.filter.common.FilterControlledPermanent; @@ -65,7 +65,7 @@ public class GravebornMuse extends CardImpl { // At the beginning of your upkeep, you draw X cards and you lose X life, where X is the number of Zombies you control. Ability ability = new BeginningOfUpkeepTriggeredAbility(new DrawCardControllerEffect(new PermanentsOnBattlefieldCount(filter)), TargetController.YOU, false); - ability.addEffect(new LoseLifeSourceEffect(new PermanentsOnBattlefieldCount(filter))); + ability.addEffect(new LoseLifeSourceControllerEffect(new PermanentsOnBattlefieldCount(filter))); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/sets/tenth/PhyrexianRager.java b/Mage.Sets/src/mage/sets/tenth/PhyrexianRager.java index 43e4de504e9..aeb14452088 100644 --- a/Mage.Sets/src/mage/sets/tenth/PhyrexianRager.java +++ b/Mage.Sets/src/mage/sets/tenth/PhyrexianRager.java @@ -35,7 +35,7 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.DrawCardControllerEffect; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.cards.CardImpl; /** @@ -52,7 +52,7 @@ public class PhyrexianRager extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(2); Ability ability = new EntersBattlefieldTriggeredAbility(new DrawCardControllerEffect(1), false); - ability.addEffect(new LoseLifeSourceEffect(1)); + ability.addEffect(new LoseLifeSourceControllerEffect(1)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/sets/theros/BloodTollHarpy.java b/Mage.Sets/src/mage/sets/theros/BloodTollHarpy.java index 4701a230e4a..7715f849652 100644 --- a/Mage.Sets/src/mage/sets/theros/BloodTollHarpy.java +++ b/Mage.Sets/src/mage/sets/theros/BloodTollHarpy.java @@ -31,7 +31,7 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.DamagePlayersEffect; -import mage.abilities.effects.common.LoseLifePlayersEffect; +import mage.abilities.effects.common.LoseLifeAllPlayersEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.constants.CardType; @@ -55,7 +55,7 @@ public class BloodTollHarpy extends CardImpl { // Flying this.addAbility(FlyingAbility.getInstance()); // When Blood-Toll Harpy enters the battlefield, each player loses 1 life. - this.addAbility(new EntersBattlefieldTriggeredAbility(new LoseLifePlayersEffect(1))); + this.addAbility(new EntersBattlefieldTriggeredAbility(new LoseLifeAllPlayersEffect(1))); } public BloodTollHarpy(final BloodTollHarpy card) { diff --git a/Mage.Sets/src/mage/sets/theros/BoonOfErebos.java b/Mage.Sets/src/mage/sets/theros/BoonOfErebos.java index b2b24860596..ac2077d0ec9 100644 --- a/Mage.Sets/src/mage/sets/theros/BoonOfErebos.java +++ b/Mage.Sets/src/mage/sets/theros/BoonOfErebos.java @@ -28,7 +28,7 @@ package mage.sets.theros; import java.util.UUID; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.effects.common.RegenerateTargetEffect; import mage.abilities.effects.common.continious.BoostTargetEffect; import mage.cards.CardImpl; @@ -53,7 +53,7 @@ public class BoonOfErebos extends CardImpl { this.getSpellAbility().addEffect(new BoostTargetEffect(2,0, Duration.EndOfTurn)); this.getSpellAbility().addTarget(new TargetCreaturePermanent(true)); this.getSpellAbility().addEffect(new RegenerateTargetEffect()); - this.getSpellAbility().addEffect(new LoseLifeSourceEffect(2)); + this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2)); } public BoonOfErebos(final BoonOfErebos card) { diff --git a/Mage.Sets/src/mage/sets/theros/ReadTheBones.java b/Mage.Sets/src/mage/sets/theros/ReadTheBones.java index c369f21beef..aaa4327c439 100644 --- a/Mage.Sets/src/mage/sets/theros/ReadTheBones.java +++ b/Mage.Sets/src/mage/sets/theros/ReadTheBones.java @@ -30,7 +30,7 @@ package mage.sets.theros; import java.util.UUID; import mage.abilities.effects.Effect; import mage.abilities.effects.common.DrawCardControllerEffect; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.effects.common.ScryEffect; import mage.cards.CardImpl; import mage.constants.CardType; @@ -53,7 +53,7 @@ public class ReadTheBones extends CardImpl { Effect effect = new DrawCardControllerEffect(2); effect.setText("then draw two cards"); this.getSpellAbility().addEffect(effect); - this.getSpellAbility().addEffect(new LoseLifeSourceEffect(2)); + this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2)); } public ReadTheBones(final ReadTheBones card) { diff --git a/Mage.Sets/src/mage/sets/theros/SipOfHemlock.java b/Mage.Sets/src/mage/sets/theros/SipOfHemlock.java index f2e72399cf0..933d8994b06 100644 --- a/Mage.Sets/src/mage/sets/theros/SipOfHemlock.java +++ b/Mage.Sets/src/mage/sets/theros/SipOfHemlock.java @@ -29,7 +29,7 @@ package mage.sets.theros; import java.util.UUID; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.effects.common.LoseLifeControllerEffect; +import mage.abilities.effects.common.LoseLifeTargetControllerEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; @@ -50,7 +50,7 @@ public class SipOfHemlock extends CardImpl { // Destroy target creature. Its controller loses 2 life. this.getSpellAbility().addEffect(new DestroyTargetEffect()); this.getSpellAbility().addTarget(new TargetCreaturePermanent(true)); - this.getSpellAbility().addEffect(new LoseLifeControllerEffect(2)); + this.getSpellAbility().addEffect(new LoseLifeTargetControllerEffect(2)); } public SipOfHemlock(final SipOfHemlock card) { diff --git a/Mage.Sets/src/mage/sets/urzaslegacy/DelusionsOfMediocrity.java b/Mage.Sets/src/mage/sets/urzaslegacy/DelusionsOfMediocrity.java index ae043a40bb2..7e53d2541cb 100644 --- a/Mage.Sets/src/mage/sets/urzaslegacy/DelusionsOfMediocrity.java +++ b/Mage.Sets/src/mage/sets/urzaslegacy/DelusionsOfMediocrity.java @@ -33,7 +33,7 @@ import mage.constants.Rarity; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.LeavesBattlefieldTriggeredAbility; import mage.abilities.effects.common.GainLifeEffect; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.cards.CardImpl; /** @@ -49,7 +49,7 @@ public class DelusionsOfMediocrity extends CardImpl { //When Delusions of Mediocrity enters the battlefield, you gain 10 life. this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(10), false)); //When Delusions of Mediocrity leaves the battlefield, you lose 10 life. - this.addAbility(new LeavesBattlefieldTriggeredAbility(new LoseLifeSourceEffect(10), false)); + this.addAbility(new LeavesBattlefieldTriggeredAbility(new LoseLifeSourceControllerEffect(10), false)); } public DelusionsOfMediocrity(final DelusionsOfMediocrity card) { diff --git a/Mage.Sets/src/mage/sets/urzaslegacy/Eviscerator.java b/Mage.Sets/src/mage/sets/urzaslegacy/Eviscerator.java index 08adc9d5971..caea36b79ca 100644 --- a/Mage.Sets/src/mage/sets/urzaslegacy/Eviscerator.java +++ b/Mage.Sets/src/mage/sets/urzaslegacy/Eviscerator.java @@ -33,7 +33,7 @@ import mage.constants.Rarity; import mage.MageInt; import mage.ObjectColor; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.keyword.ProtectionAbility; import mage.cards.CardImpl; import mage.filter.FilterCard; @@ -63,7 +63,7 @@ public class Eviscerator extends CardImpl { // Protection from white this.addAbility(new ProtectionAbility(filter)); // When Eviscerator enters the battlefield, you lose 5 life. - this.addAbility(new EntersBattlefieldTriggeredAbility(new LoseLifeSourceEffect(5))); + this.addAbility(new EntersBattlefieldTriggeredAbility(new LoseLifeSourceControllerEffect(5))); } public Eviscerator(final Eviscerator card) { diff --git a/Mage.Sets/src/mage/sets/urzaslegacy/TetheredSkirge.java b/Mage.Sets/src/mage/sets/urzaslegacy/TetheredSkirge.java index 00380fe781a..64d4cc1be6a 100644 --- a/Mage.Sets/src/mage/sets/urzaslegacy/TetheredSkirge.java +++ b/Mage.Sets/src/mage/sets/urzaslegacy/TetheredSkirge.java @@ -32,7 +32,7 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.MageInt; import mage.abilities.common.BecomesTargetTriggeredAbility; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; @@ -54,7 +54,7 @@ public class TetheredSkirge extends CardImpl { // Flying this.addAbility(FlyingAbility.getInstance()); // Whenever Tethered Skirge becomes the target of a spell or ability, you lose 1 life. - this.addAbility(new BecomesTargetTriggeredAbility(new LoseLifeSourceEffect(1))); + this.addAbility(new BecomesTargetTriggeredAbility(new LoseLifeSourceControllerEffect(1))); } public TetheredSkirge(final TetheredSkirge card) { diff --git a/Mage.Sets/src/mage/sets/visions/VampiricTutor.java b/Mage.Sets/src/mage/sets/visions/VampiricTutor.java index b3f639318ce..e5c450895e3 100644 --- a/Mage.Sets/src/mage/sets/visions/VampiricTutor.java +++ b/Mage.Sets/src/mage/sets/visions/VampiricTutor.java @@ -28,7 +28,7 @@ package mage.sets.visions; import java.util.UUID; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.effects.common.search.SearchLibraryPutOnLibraryEffect; import mage.cards.CardImpl; import mage.constants.CardType; @@ -49,7 +49,7 @@ public class VampiricTutor extends CardImpl { // Search your library for a card, then shuffle your library and put that card on top of it. You lose 2 life. this.getSpellAbility().addEffect(new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary())); - this.getSpellAbility().addEffect(new LoseLifeSourceEffect(2)); + this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(2)); } public VampiricTutor(final VampiricTutor card) { diff --git a/Mage.Sets/src/mage/sets/zendikar/HideousEnd.java b/Mage.Sets/src/mage/sets/zendikar/HideousEnd.java index d7cc95cced8..fbba8f3dc3b 100644 --- a/Mage.Sets/src/mage/sets/zendikar/HideousEnd.java +++ b/Mage.Sets/src/mage/sets/zendikar/HideousEnd.java @@ -32,7 +32,7 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.ObjectColor; import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.effects.common.LoseLifeControllerEffect; +import mage.abilities.effects.common.LoseLifeTargetControllerEffect; import mage.cards.CardImpl; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.Predicates; @@ -57,9 +57,10 @@ public class HideousEnd extends CardImpl { this.color.setBlack(true); + // Destroy target nonblack creature. Its controller loses 2 life. this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); this.getSpellAbility().addEffect(new DestroyTargetEffect()); - this.getSpellAbility().addEffect(new LoseLifeControllerEffect(2)); + this.getSpellAbility().addEffect(new LoseLifeTargetControllerEffect(2)); } public HideousEnd(final HideousEnd card) { diff --git a/Mage.Sets/src/mage/sets/zendikar/VampireLacerator.java b/Mage.Sets/src/mage/sets/zendikar/VampireLacerator.java index 6428d0315b3..64d812bcf5d 100644 --- a/Mage.Sets/src/mage/sets/zendikar/VampireLacerator.java +++ b/Mage.Sets/src/mage/sets/zendikar/VampireLacerator.java @@ -36,7 +36,7 @@ import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.condition.common.TenOrLessLifeCondition; import mage.abilities.condition.InvertCondition; import mage.abilities.decorator.ConditionalOneShotEffect; -import mage.abilities.effects.common.LoseLifeSourceEffect; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.cards.CardImpl; import mage.constants.TargetController; @@ -57,7 +57,7 @@ public class VampireLacerator extends CardImpl { this.addAbility(new BeginningOfUpkeepTriggeredAbility( new ConditionalOneShotEffect( - new LoseLifeSourceEffect(1), + new LoseLifeSourceControllerEffect(1), new InvertCondition( new TenOrLessLifeCondition(TenOrLessLifeCondition.CheckType.AN_OPPONENT) ), "you lose 1 life unless an opponent has 10 or less life"), TargetController.YOU, false)); } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/destroy/HideousEndTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/destroy/HideousEndTest.java index 805884ff7a3..d532542f076 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/destroy/HideousEndTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/destroy/HideousEndTest.java @@ -43,7 +43,6 @@ public class HideousEndTest extends CardTestPlayerBase { } @Test - @Ignore public void testWithPossibleProtection() { addCard(Zone.BATTLEFIELD, playerA, "Swamp"); addCard(Zone.BATTLEFIELD, playerA, "Swamp"); @@ -52,13 +51,17 @@ public class HideousEndTest extends CardTestPlayerBase { addCard(Zone.BATTLEFIELD, playerB, "Plains"); addCard(Zone.BATTLEFIELD, playerB, "Plains"); addCard(Zone.BATTLEFIELD, playerB, "Copper Myr"); + // Target artifact or creature you control gains protection from artifacts or from the color of your choice until end of turn. addCard(Zone.HAND, playerB, "Apostle's Blessing"); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Hideous End", "Copper Myr"); - + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Apostle's Blessing", "Copper Myr"); + setChoice(playerB, "Black"); + setStopAt(1, PhaseStep.BEGIN_COMBAT); execute(); + assertGraveyardCount(playerA, "Hideous End", 1); assertPermanentCount(playerB, "Copper Myr", 1); assertLife(playerB, 20); } diff --git a/Mage/src/mage/abilities/effects/ContinuousEffectImpl.java b/Mage/src/mage/abilities/effects/ContinuousEffectImpl.java index 33dc061c4c7..55424ab33c6 100644 --- a/Mage/src/mage/abilities/effects/ContinuousEffectImpl.java +++ b/Mage/src/mage/abilities/effects/ContinuousEffectImpl.java @@ -53,6 +53,7 @@ import mage.game.Game; /** * * @author BetaSteward_at_googlemail.com + * @param */ public abstract class ContinuousEffectImpl> extends EffectImpl implements ContinuousEffect { @@ -63,8 +64,8 @@ public abstract class ContinuousEffectImpl> ex protected boolean used = false; protected boolean discarded = false; // for manual effect discard protected boolean affectedObjectsSet = false; - protected List objects = new ArrayList(); - protected Map metadata = new HashMap(); + protected List objects = new ArrayList<>(); + protected Map metadata = new HashMap<>(); public ContinuousEffectImpl(Duration duration, Outcome outcome) { super(outcome); diff --git a/Mage/src/mage/abilities/effects/common/LoseLifeAllEffect.java b/Mage/src/mage/abilities/effects/common/LoseLifeAllEffect.java deleted file mode 100644 index 6c4713fc1d0..00000000000 --- a/Mage/src/mage/abilities/effects/common/LoseLifeAllEffect.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of BetaSteward_at_googlemail.com. - */ -package mage.abilities.effects.common; - -import java.util.UUID; - -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; - -/** - * - * @author LevelX2 - */ -public class LoseLifeAllEffect extends OneShotEffect { - - private DynamicValue amount; - - public LoseLifeAllEffect(int amount) { - this(new StaticValue(amount)); - } - - public LoseLifeAllEffect(DynamicValue amount) { - super(Outcome.Damage); - this.amount = amount; - staticText = "Each player loses " + amount + " life"; - } - - public LoseLifeAllEffect(final LoseLifeAllEffect effect) { - super(effect); - this.amount = effect.amount; - } - - @Override - public boolean apply(Game game, Ability source) { - for (UUID playerId: game.getPlayer(source.getControllerId()).getInRange()) { - Player player = game.getPlayer(playerId); - if (player != null) { - player.loseLife(amount.calculate(game, source), game); - } - } - return true; - } - - @Override - public LoseLifeAllEffect copy() { - return new LoseLifeAllEffect(this); - } -} diff --git a/Mage/src/mage/abilities/effects/common/LoseLifePlayersEffect.java b/Mage/src/mage/abilities/effects/common/LoseLifeAllPlayersEffect.java similarity index 76% rename from Mage/src/mage/abilities/effects/common/LoseLifePlayersEffect.java rename to Mage/src/mage/abilities/effects/common/LoseLifeAllPlayersEffect.java index 638f0c356b7..03267645521 100644 --- a/Mage/src/mage/abilities/effects/common/LoseLifePlayersEffect.java +++ b/Mage/src/mage/abilities/effects/common/LoseLifeAllPlayersEffect.java @@ -41,48 +41,52 @@ import mage.players.Player; * * @author BetaSteward_at_googlemail.com */ -public class LoseLifePlayersEffect extends OneShotEffect { +public class LoseLifeAllPlayersEffect extends OneShotEffect { - private DynamicValue amount; - String text; + private final DynamicValue amount; - public LoseLifePlayersEffect(int amount) { - super(Outcome.Damage); - this.amount = new StaticValue(amount); - staticText = "each player loses " + amount + " life"; + public LoseLifeAllPlayersEffect(int amount) { + this(new StaticValue(amount)); } - public LoseLifePlayersEffect(DynamicValue amount) { + public LoseLifeAllPlayersEffect(DynamicValue amount) { super(Outcome.Damage); this.amount = amount; - staticText = "each player loses " + amount + " life"; + staticText = setText(); } - public LoseLifePlayersEffect(DynamicValue amount, String text) { + public LoseLifeAllPlayersEffect(DynamicValue amount, String text) { super(Outcome.Damage); this.amount = amount; staticText = text; } - public LoseLifePlayersEffect(final LoseLifePlayersEffect effect) { + public LoseLifeAllPlayersEffect(final LoseLifeAllPlayersEffect effect) { super(effect); this.amount = effect.amount; - this.text = effect.text; } @Override public boolean apply(Game game, Ability source) { for (UUID playerId: game.getPlayer(source.getControllerId()).getInRange()) { Player player = game.getPlayer(playerId); - if (player != null) + if (player != null) { player.loseLife(amount.calculate(game, source), game); + } } return true; } @Override - public LoseLifePlayersEffect copy() { - return new LoseLifePlayersEffect(this); + public LoseLifeAllPlayersEffect copy() { + return new LoseLifeAllPlayersEffect(this); + } + + private String setText() { + StringBuilder sb = new StringBuilder("each player loses "); + sb.append(amount); + sb.append(" life"); + return sb.toString(); } } diff --git a/Mage/src/mage/abilities/effects/common/LoseLifeSourceEffect.java b/Mage/src/mage/abilities/effects/common/LoseLifeSourceControllerEffect.java similarity index 87% rename from Mage/src/mage/abilities/effects/common/LoseLifeSourceEffect.java rename to Mage/src/mage/abilities/effects/common/LoseLifeSourceControllerEffect.java index b0b06afaba1..578e42887f4 100644 --- a/Mage/src/mage/abilities/effects/common/LoseLifeSourceEffect.java +++ b/Mage/src/mage/abilities/effects/common/LoseLifeSourceControllerEffect.java @@ -40,28 +40,28 @@ import mage.players.Player; * * @author BetaSteward_at_googlemail.com */ -public class LoseLifeSourceEffect extends OneShotEffect { +public class LoseLifeSourceControllerEffect extends OneShotEffect { protected DynamicValue amount; - public LoseLifeSourceEffect(int amount) { + public LoseLifeSourceControllerEffect(int amount) { this(new StaticValue(amount)); } - public LoseLifeSourceEffect(DynamicValue amount) { + public LoseLifeSourceControllerEffect(DynamicValue amount) { super(Outcome.LoseLife); this.amount = amount; setText(); } - public LoseLifeSourceEffect(final LoseLifeSourceEffect effect) { + public LoseLifeSourceControllerEffect(final LoseLifeSourceControllerEffect effect) { super(effect); this.amount = effect.amount.copy(); } @Override - public LoseLifeSourceEffect copy() { - return new LoseLifeSourceEffect(this); + public LoseLifeSourceControllerEffect copy() { + return new LoseLifeSourceControllerEffect(this); } @Override diff --git a/Mage/src/mage/abilities/effects/common/LoseLifeControllerEffect.java b/Mage/src/mage/abilities/effects/common/LoseLifeTargetControllerEffect.java similarity index 90% rename from Mage/src/mage/abilities/effects/common/LoseLifeControllerEffect.java rename to Mage/src/mage/abilities/effects/common/LoseLifeTargetControllerEffect.java index a1502d55541..9d202eb4778 100644 --- a/Mage/src/mage/abilities/effects/common/LoseLifeControllerEffect.java +++ b/Mage/src/mage/abilities/effects/common/LoseLifeTargetControllerEffect.java @@ -42,24 +42,24 @@ import mage.players.Player; * * @author North */ -public class LoseLifeControllerEffect extends OneShotEffect { +public class LoseLifeTargetControllerEffect extends OneShotEffect { protected int amount; - public LoseLifeControllerEffect(int amount) { + public LoseLifeTargetControllerEffect(int amount) { super(Outcome.Damage); this.amount = amount; staticText = "Its controller loses " + amount + " life"; } - public LoseLifeControllerEffect(final LoseLifeControllerEffect effect) { + public LoseLifeTargetControllerEffect(final LoseLifeTargetControllerEffect effect) { super(effect); this.amount = effect.amount; } @Override - public LoseLifeControllerEffect copy() { - return new LoseLifeControllerEffect(this); + public LoseLifeTargetControllerEffect copy() { + return new LoseLifeTargetControllerEffect(this); } @Override diff --git a/Mage/src/mage/abilities/effects/common/continious/SwitchPowerToughnessAllEffect.java b/Mage/src/mage/abilities/effects/common/continious/SwitchPowerToughnessAllEffect.java index 0ea723ea40a..5bab031a6f8 100644 --- a/Mage/src/mage/abilities/effects/common/continious/SwitchPowerToughnessAllEffect.java +++ b/Mage/src/mage/abilities/effects/common/continious/SwitchPowerToughnessAllEffect.java @@ -28,6 +28,9 @@ package mage.abilities.effects.common.continious; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; import mage.abilities.Ability; import mage.abilities.Mode; import mage.abilities.effects.ContinuousEffectImpl; @@ -61,15 +64,43 @@ public class SwitchPowerToughnessAllEffect extends ContinuousEffectImpl toDelete = new HashSet<>(); + for (UUID creatureId: objects) { + Permanent creature = game.getPermanent(creatureId); + if (creature != null) { + int power = creature.getPower().getValue(); + creature.getPower().setValue(creature.getToughness().getValue()); + creature.getToughness().setValue(power); + } else { + toDelete.add(creatureId); + } + } + this.objects.removeAll(toDelete); + } else { + for (Permanent creature :game.getState().getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game)) { + int power = creature.getPower().getValue(); + creature.getPower().setValue(creature.getToughness().getValue()); + creature.getToughness().setValue(power); + } } return true; }