diff --git a/Mage.Sets/src/mage/cards/a/AboshansDesire.java b/Mage.Sets/src/mage/cards/a/AboshansDesire.java index fb700f46b44..097754de773 100644 --- a/Mage.Sets/src/mage/cards/a/AboshansDesire.java +++ b/Mage.Sets/src/mage/cards/a/AboshansDesire.java @@ -1,10 +1,8 @@ - package mage.cards.a; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; @@ -17,31 +15,34 @@ import mage.constants.*; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author cbt33 */ public final class AboshansDesire extends CardImpl { public AboshansDesire(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{U}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}"); this.subtype.add(SubType.AURA); - // Enchant creature TargetPermanent auraTarget = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); Ability ability = new EnchantAbility(auraTarget); this.addAbility(ability); + // Enchanted creature has flying. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield))); + this.addAbility(new SimpleStaticAbility(new GainAbilityAttachedEffect( + FlyingAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield + ))); + // Threshold - Enchanted creature has shroud as long as seven or more cards are in your graveyard. - ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new GainAbilityAttachedEffect(ShroudAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7), "enchanted creature has shroud as long as seven or more cards are in your graveyard")); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new GainAbilityAttachedEffect(ShroudAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield), + ThresholdCondition.instance, "enchanted creature has shroud as long as seven or more cards are in your graveyard" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private AboshansDesire(final AboshansDesire card) { diff --git a/Mage.Sets/src/mage/cards/a/AnuridBarkripper.java b/Mage.Sets/src/mage/cards/a/AnuridBarkripper.java index e8da691d9ae..4bc780ed368 100644 --- a/Mage.Sets/src/mage/cards/a/AnuridBarkripper.java +++ b/Mage.Sets/src/mage/cards/a/AnuridBarkripper.java @@ -1,36 +1,36 @@ - package mage.cards.a; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.AbilityWord; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author LoneFox */ public final class AnuridBarkripper extends CardImpl { public AnuridBarkripper(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}{G}"); this.subtype.add(SubType.FROG); this.subtype.add(SubType.BEAST); this.power = new MageInt(2); this.toughness = new MageInt(2); // Threshold - Anurid Barkripper gets +2/+2 as long as seven or more cards are in your graveyard. - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} gets +2/+2")); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "as long as seven or more cards are in your graveyard, {this} gets +2/+2" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private AnuridBarkripper(final AnuridBarkripper card) { diff --git a/Mage.Sets/src/mage/cards/a/AvenWarcraft.java b/Mage.Sets/src/mage/cards/a/AvenWarcraft.java index 7b81db1fc4e..5217d1f5dfe 100644 --- a/Mage.Sets/src/mage/cards/a/AvenWarcraft.java +++ b/Mage.Sets/src/mage/cards/a/AvenWarcraft.java @@ -1,22 +1,22 @@ - package mage.cards.a; -import java.util.UUID; import mage.abilities.Ability; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.GainProtectionFromColorAllEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Outcome; import mage.filter.StaticFilters; import mage.game.Game; +import java.util.UUID; + /** - * * @author TheElk801 */ public final class AvenWarcraft extends CardImpl { @@ -45,7 +45,7 @@ class AvenWarcraftEffect extends OneShotEffect { AvenWarcraftEffect() { super(Outcome.Benefit); - this.staticText = "

Threshold — If seven or more cards are in your graveyard, " + this.staticText = "
" + AbilityWord.THRESHOLD.formatWord() + "If seven or more cards are in your graveyard, " + "choose a color. Creatures you control also gain protection from the chosen color until end of turn"; } @@ -60,7 +60,7 @@ class AvenWarcraftEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - if (new CardsInControllerGraveyardCondition(7).apply(game, source)) { + if (ThresholdCondition.instance.apply(game, source)) { game.addEffect(new GainProtectionFromColorAllEffect( Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES diff --git a/Mage.Sets/src/mage/cards/b/BarbarianRing.java b/Mage.Sets/src/mage/cards/b/BarbarianRing.java index 947a8386b37..bc645427ae1 100644 --- a/Mage.Sets/src/mage/cards/b/BarbarianRing.java +++ b/Mage.Sets/src/mage/cards/b/BarbarianRing.java @@ -1,9 +1,7 @@ - package mage.cards.b; -import java.util.UUID; import mage.abilities.Ability; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; @@ -15,17 +13,17 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.Zone; import mage.target.common.TargetAnyTarget; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class BarbarianRing extends CardImpl { public BarbarianRing(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.LAND},""); + super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); // {T}: Add {R}. Barbarian Ring deals 1 damage to you. Ability redManaAbility = new RedManaAbility(); @@ -33,10 +31,10 @@ public final class BarbarianRing extends CardImpl { this.addAbility(redManaAbility); // Threshold - {R}, {T}, Sacrifice Barbarian Ring: Barbarian Ring deals 2 damage to any target. Activate this ability only if seven or more cards are in your graveyard. - Ability thresholdAbility = new ConditionalActivatedAbility(Zone.BATTLEFIELD, - new DamageTargetEffect(2, "it"), - new ManaCostsImpl<>("{R}"), - new CardsInControllerGraveyardCondition(7)); + Ability thresholdAbility = new ConditionalActivatedAbility( + new DamageTargetEffect(2, "it"), + new ManaCostsImpl<>("{R}"), ThresholdCondition.instance + ); thresholdAbility.addCost(new TapSourceCost()); thresholdAbility.addCost(new SacrificeSourceCost()); thresholdAbility.addTarget(new TargetAnyTarget()); diff --git a/Mage.Sets/src/mage/cards/b/BattlefieldScrounger.java b/Mage.Sets/src/mage/cards/b/BattlefieldScrounger.java index 12a98470e52..5a914df491f 100644 --- a/Mage.Sets/src/mage/cards/b/BattlefieldScrounger.java +++ b/Mage.Sets/src/mage/cards/b/BattlefieldScrounger.java @@ -1,11 +1,9 @@ - package mage.cards.b; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.LimitedTimesPerTurnActivatedAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.Cost; import mage.abilities.costs.CostImpl; import mage.abilities.effects.common.continuous.BoostSourceEffect; @@ -18,8 +16,9 @@ import mage.game.Game; import mage.players.Player; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author emerald000 */ public final class BattlefieldScrounger extends CardImpl { @@ -32,14 +31,10 @@ public final class BattlefieldScrounger extends CardImpl { this.toughness = new MageInt(3); // Threshold - Put three cards from your graveyard on the bottom of your library: Battlefield Scrounger gets +3/+3 until end of turn. Activate this ability only once each turn, and only if seven or more cards are in your graveyard. - Ability ability = new LimitedTimesPerTurnActivatedAbility( - Zone.BATTLEFIELD, - new BoostSourceEffect(3, 3, Duration.EndOfTurn), - new BattlefieldScroungerCost(), - 1, - new CardsInControllerGraveyardCondition(7)); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + this.addAbility(new LimitedTimesPerTurnActivatedAbility( + Zone.BATTLEFIELD, new BoostSourceEffect(3, 3, Duration.EndOfTurn), + new BattlefieldScroungerCost(), 1, ThresholdCondition.instance + ).setAbilityWord(AbilityWord.THRESHOLD)); } private BattlefieldScrounger(final BattlefieldScrounger card) { @@ -69,7 +64,7 @@ class BattlefieldScroungerCost extends CostImpl { Player controller = game.getPlayer(controllerId); if (controller != null) { if (this.getTargets().choose(Outcome.Removal, controllerId, source.getSourceId(), source, game)) { - for (UUID targetId: this.getTargets().get(0).getTargets()) { + for (UUID targetId : this.getTargets().get(0).getTargets()) { Card card = game.getCard(targetId); if (card == null || game.getState().getZone(targetId) != Zone.GRAVEYARD) { return false; diff --git a/Mage.Sets/src/mage/cards/b/BattlewiseAven.java b/Mage.Sets/src/mage/cards/b/BattlewiseAven.java index 2099a2961b1..b3dcfd7cf76 100644 --- a/Mage.Sets/src/mage/cards/b/BattlewiseAven.java +++ b/Mage.Sets/src/mage/cards/b/BattlewiseAven.java @@ -1,11 +1,9 @@ - package mage.cards.b; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; @@ -13,28 +11,36 @@ import mage.abilities.keyword.FirstStrikeAbility; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.AbilityWord; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author LoneFox */ public final class BattlewiseAven extends CardImpl { public BattlewiseAven(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}"); this.subtype.add(SubType.BIRD, SubType.SOLDIER); this.power = new MageInt(2); this.toughness = new MageInt(2); // Flying this.addAbility(FlyingAbility.getInstance()); + // Threshold - As long as seven or more cards are in your graveyard, Battlewise Aven gets +1/+1 and has first strike. - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} gets +1/+1")); - ability.addEffect(new ConditionalContinuousEffect(new GainAbilitySourceEffect(FirstStrikeAbility.getInstance()), - new CardsInControllerGraveyardCondition(7), "and has first strike")); + Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "As long as seven or more cards are in your graveyard, {this} gets +1/+1" + )); + ability.addEffect(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(FirstStrikeAbility.getInstance()), + ThresholdCondition.instance, "and has first strike" + )); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/b/Bloodcurdler.java b/Mage.Sets/src/mage/cards/b/Bloodcurdler.java index 54ae5987df5..fa8b0154015 100644 --- a/Mage.Sets/src/mage/cards/b/Bloodcurdler.java +++ b/Mage.Sets/src/mage/cards/b/Bloodcurdler.java @@ -1,16 +1,12 @@ - package mage.cards.b; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.BeginningOfEndStepTriggeredAbility; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.Condition; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; -import mage.abilities.effects.ContinuousEffect; import mage.abilities.effects.common.ExileCardFromOwnGraveyardControllerEffect; import mage.abilities.effects.common.MillCardsControllerEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; @@ -20,14 +16,15 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; +import java.util.UUID; + /** - * * @author cbt33, plopman (Immortal Coil) */ public final class Bloodcurdler extends CardImpl { public Bloodcurdler(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}"); this.subtype.add(SubType.HORROR); this.power = new MageInt(1); @@ -37,18 +34,22 @@ public final class Bloodcurdler extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // At the beginning of your upkeep, put the top card of your library into your graveyard. - this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new MillCardsControllerEffect(1), TargetController.YOU, false)); + this.addAbility(new BeginningOfUpkeepTriggeredAbility( + new MillCardsControllerEffect(1), TargetController.YOU, false + )); - Condition thresholdCondition = new CardsInControllerGraveyardCondition(7); // Threshold - As long as seven or more cards are in your graveyard, Bloodcurdler gets +1/+1 and has "At the beginning of your end step, exile two cards from your graveyard." - Ability thresholdAbility = new SimpleStaticAbility(Zone.BATTLEFIELD, - new ConditionalContinuousEffect(new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), thresholdCondition, - "If seven or more cards are in your graveyard, {this} gets +1/+1")); - ContinuousEffect effect = new GainAbilitySourceEffect(new BeginningOfEndStepTriggeredAbility(new ExileCardFromOwnGraveyardControllerEffect(2), TargetController.YOU, false)); - thresholdAbility.addEffect(new ConditionalContinuousEffect(effect, thresholdCondition, - "and has \"At the beginning of your end step, exile two cards from your graveyard.\"")); - thresholdAbility.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(thresholdAbility); + Ability thresholdAbility = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "If seven or more cards are in your graveyard, {this} gets +1/+1" + )); + thresholdAbility.addEffect(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(new BeginningOfEndStepTriggeredAbility( + new ExileCardFromOwnGraveyardControllerEffect(2), TargetController.YOU, false + )), ThresholdCondition.instance, + "and has \"At the beginning of your end step, exile two cards from your graveyard.\"" + )); + this.addAbility(thresholdAbility.setAbilityWord(AbilityWord.THRESHOLD)); } private Bloodcurdler(final Bloodcurdler card) { diff --git a/Mage.Sets/src/mage/cards/b/BoneshardSlasher.java b/Mage.Sets/src/mage/cards/b/BoneshardSlasher.java index 201c7cd21ee..0ee97afdebe 100644 --- a/Mage.Sets/src/mage/cards/b/BoneshardSlasher.java +++ b/Mage.Sets/src/mage/cards/b/BoneshardSlasher.java @@ -1,43 +1,47 @@ - package mage.cards.b; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.BecomesTargetSourceTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.SacrificeSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.AbilityWord; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author LoneFox */ public final class BoneshardSlasher extends CardImpl { public BoneshardSlasher(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}"); this.subtype.add(SubType.HORROR); this.power = new MageInt(1); this.toughness = new MageInt(1); // Flying this.addAbility(FlyingAbility.getInstance()); + // Threshold - As long as seven or more cards are in your graveyard, Boneshard Slasher gets +2/+2 and has "When Boneshard Slasher becomes the target of a spell or ability, sacrifice it." - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} gets +2/+2")); - Effect effect = new ConditionalContinuousEffect(new GainAbilitySourceEffect(new BecomesTargetSourceTriggeredAbility(new SacrificeSourceEffect())), - new CardsInControllerGraveyardCondition(7), "and has \"When {this} becomes the target of a spell or ability, sacrifice it.\""); - ability.addEffect(effect); + Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "As long as seven or more cards are in your graveyard, {this} gets +2/+2" + )); + ability.addEffect(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(new BecomesTargetSourceTriggeredAbility(new SacrificeSourceEffect())), + ThresholdCondition.instance, "and has \"When {this} becomes the target of a spell or ability, sacrifice it.\"" + )); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/c/CabalInitiate.java b/Mage.Sets/src/mage/cards/c/CabalInitiate.java index d227202ae31..5a438cc840c 100644 --- a/Mage.Sets/src/mage/cards/c/CabalInitiate.java +++ b/Mage.Sets/src/mage/cards/c/CabalInitiate.java @@ -1,24 +1,24 @@ package mage.cards.c; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.DiscardCardCost; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.keyword.LifelinkAbility; -import mage.constants.AbilityWord; -import mage.constants.Duration; -import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author weirddan455 */ public final class CabalInitiate extends CardImpl { @@ -32,12 +32,13 @@ public final class CabalInitiate extends CardImpl { this.toughness = new MageInt(1); // Discard a card: Cabal Initiate gains lifelink until end of turn. - this.addAbility(new SimpleActivatedAbility(new GainAbilitySourceEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn), new DiscardCardCost())); + this.addAbility(new SimpleActivatedAbility( + new GainAbilitySourceEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn), new DiscardCardCost() + )); // Threshold — Cabal Initiate gets +1/+2 as long as seven or more cards are in your graveyard. this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( - new BoostSourceEffect(1, 2, Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7), + new BoostSourceEffect(1, 2, Duration.WhileOnBattlefield), ThresholdCondition.instance, "{this} gets +1/+2 as long as seven or more cards are in your graveyard" )).setAbilityWord(AbilityWord.THRESHOLD)); } diff --git a/Mage.Sets/src/mage/cards/c/CabalInquisitor.java b/Mage.Sets/src/mage/cards/c/CabalInquisitor.java index f47ff363f90..e6129522ac4 100644 --- a/Mage.Sets/src/mage/cards/c/CabalInquisitor.java +++ b/Mage.Sets/src/mage/cards/c/CabalInquisitor.java @@ -2,7 +2,7 @@ package mage.cards.c; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.ExileFromGraveCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; @@ -35,8 +35,7 @@ public final class CabalInquisitor extends CardImpl { // Threshold - {1}{B}, {T}, Exile two cards from your graveyard: Target player discards a card. Activate this ability only any time you could cast a sorcery, and only if seven or more cards are in your graveyard. Ability ability = new ConditionalActivatedAbility( - new DiscardTargetEffect(1), new ManaCostsImpl<>("{1}{B}"), - new CardsInControllerGraveyardCondition(7) + new DiscardTargetEffect(1), new ManaCostsImpl<>("{1}{B}"), ThresholdCondition.instance ).setTiming(TimingRule.SORCERY); ability.addTarget(new TargetPlayer()); ability.addCost(new TapSourceCost()); diff --git a/Mage.Sets/src/mage/cards/c/CabalPit.java b/Mage.Sets/src/mage/cards/c/CabalPit.java index 7cdd3e1ea0f..3c322614a2d 100644 --- a/Mage.Sets/src/mage/cards/c/CabalPit.java +++ b/Mage.Sets/src/mage/cards/c/CabalPit.java @@ -1,9 +1,7 @@ - package mage.cards.c; -import java.util.UUID; import mage.abilities.Ability; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; @@ -16,17 +14,17 @@ import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.Zone; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class CabalPit extends CardImpl { public CabalPit(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.LAND},""); + super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); // {tap}: Add {B}. Cabal Pit deals 1 damage to you. Ability manaAbility = new BlackManaAbility(); @@ -34,10 +32,10 @@ public final class CabalPit extends CardImpl { this.addAbility(manaAbility); // Threshold - {B}, {T}, Sacrifice Cabal Pit: Target creature gets -2/-2 until end of turn. Activate this ability only if seven or more cards are in your graveyard. - Ability thresholdAbility = new ConditionalActivatedAbility(Zone.BATTLEFIELD, - new BoostTargetEffect(-2,-2, Duration.EndOfTurn), - new ManaCostsImpl<>("{B}"), - new CardsInControllerGraveyardCondition(7)); + Ability thresholdAbility = new ConditionalActivatedAbility( + new BoostTargetEffect(-2, -2, Duration.EndOfTurn), + new ManaCostsImpl<>("{B}"), ThresholdCondition.instance + ); thresholdAbility.addCost(new TapSourceCost()); thresholdAbility.addCost(new SacrificeSourceCost()); thresholdAbility.addTarget(new TargetCreaturePermanent()); diff --git a/Mage.Sets/src/mage/cards/c/CabalRitual.java b/Mage.Sets/src/mage/cards/c/CabalRitual.java index 2330b537784..1bd51ddc82d 100644 --- a/Mage.Sets/src/mage/cards/c/CabalRitual.java +++ b/Mage.Sets/src/mage/cards/c/CabalRitual.java @@ -1,32 +1,31 @@ - package mage.cards.c; -import java.util.UUID; import mage.Mana; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalManaEffect; import mage.abilities.effects.mana.BasicManaEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; +import java.util.UUID; + /** - * * @author Plopman */ public final class CabalRitual extends CardImpl { public CabalRitual(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{B}"); - + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{B}"); // Add {B}{B}{B}. // Threshold — Add {B}{B}{B}{B}{B} instead if seven or more cards are in your graveyard. this.getSpellAbility().addEffect(new ConditionalManaEffect( - new BasicManaEffect(Mana.BlackMana(5)), - new BasicManaEffect(Mana.BlackMana(3)), - new CardsInControllerGraveyardCondition(7), - "Add {B}{B}{B}.

Threshold — Add {B}{B}{B}{B}{B} instead if seven or more cards are in your graveyard")); + new BasicManaEffect(Mana.BlackMana(5)), new BasicManaEffect(Mana.BlackMana(3)), + ThresholdCondition.instance, "Add {B}{B}{B}.
" + AbilityWord.THRESHOLD.formatWord() + + "Add {B}{B}{B}{B}{B} instead if seven or more cards are in your graveyard" + )); } private CabalRitual(final CabalRitual card) { diff --git a/Mage.Sets/src/mage/cards/c/CabalTorturer.java b/Mage.Sets/src/mage/cards/c/CabalTorturer.java index 71f43fedea7..b7116721839 100644 --- a/Mage.Sets/src/mage/cards/c/CabalTorturer.java +++ b/Mage.Sets/src/mage/cards/c/CabalTorturer.java @@ -1,11 +1,9 @@ - package mage.cards.c; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalActivatedAbility; @@ -14,32 +12,35 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author LoneFox */ public final class CabalTorturer extends CardImpl { public CabalTorturer(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{B}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.MINION); this.power = new MageInt(1); this.toughness = new MageInt(1); // {B}, {tap}: Target creature gets -1/-1 until end of turn. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(-1, -1, Duration.EndOfTurn), new ManaCostsImpl<>("{B}")); + Ability ability = new SimpleActivatedAbility(new BoostTargetEffect(-1, -1, Duration.EndOfTurn), new ManaCostsImpl<>("{B}")); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); + // Threshold - {3}{B}{B}, {tap}: Target creature gets -2/-2 until end of turn. Activate this ability only if seven or more cards are in your graveyard. - ability = new ConditionalActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(-2, -2, Duration.EndOfTurn), - new ManaCostsImpl<>("{3}{B}{B}"), new CardsInControllerGraveyardCondition(7)); + ability = new ConditionalActivatedAbility( + new BoostTargetEffect(-2, -2, Duration.EndOfTurn), + new ManaCostsImpl<>("{3}{B}{B}"), ThresholdCondition.instance + ); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetCreaturePermanent()); ability.setAbilityWord(AbilityWord.THRESHOLD); diff --git a/Mage.Sets/src/mage/cards/c/CentaurChieftain.java b/Mage.Sets/src/mage/cards/c/CentaurChieftain.java index 3877894a350..ea6547b151b 100644 --- a/Mage.Sets/src/mage/cards/c/CentaurChieftain.java +++ b/Mage.Sets/src/mage/cards/c/CentaurChieftain.java @@ -1,14 +1,11 @@ - package mage.cards.c; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; @@ -18,39 +15,39 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.constants.SubType; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author LoneFox */ public final class CentaurChieftain extends CardImpl { public CentaurChieftain(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}"); this.subtype.add(SubType.CENTAUR); this.power = new MageInt(3); this.toughness = new MageInt(3); // Haste this.addAbility(HasteAbility.getInstance()); - // Threshold - As long as seven or more cards are in your graveyard, Centaur Chieftain has "When Centaur Chieftain enters the battlefield, creatures you control get +1/+1 and gain trample until end of turn." - Effect effect = new BoostControlledEffect(1, 1, Duration.EndOfTurn); - effect.setText("creatures you control get +1/+1"); - Ability gainedAbility = new EntersBattlefieldTriggeredAbility(effect); - effect = new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, - new FilterControlledCreaturePermanent()); - effect.setText("and gain trample until end of turn"); - gainedAbility.addEffect(effect); - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new GainAbilitySourceEffect(gainedAbility), new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} has \"When {this} enters the battlefield, creatures you control get +1/+1 and gain trample until end of turn.\"")); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + // Threshold - As long as seven or more cards are in your graveyard, Centaur Chieftain has "When Centaur Chieftain enters the battlefield, creatures you control get +1/+1 and gain trample until end of turn." + Ability ability = new EntersBattlefieldTriggeredAbility( + new BoostControlledEffect(1, 1, Duration.EndOfTurn) + .setText("creatures you control get +1/+1") + ); + ability.addEffect(new GainAbilityControlledEffect( + TrampleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE + ).setText("and gain trample until end of turn")); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(ability), ThresholdCondition.instance, "As long as seven " + + "or more cards are in your graveyard, {this} has \"When {this} enters the battlefield, " + + "creatures you control get +1/+1 and gain trample until end of turn.\"" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private CentaurChieftain(final CentaurChieftain card) { diff --git a/Mage.Sets/src/mage/cards/c/CentaurGarden.java b/Mage.Sets/src/mage/cards/c/CentaurGarden.java index 461559ac78d..1bf1fa1b913 100644 --- a/Mage.Sets/src/mage/cards/c/CentaurGarden.java +++ b/Mage.Sets/src/mage/cards/c/CentaurGarden.java @@ -1,9 +1,7 @@ - package mage.cards.c; -import java.util.UUID; import mage.abilities.Ability; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; @@ -16,17 +14,17 @@ import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.Zone; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class CentaurGarden extends CardImpl { public CentaurGarden(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.LAND},""); + super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); // {tap}: Add {G}. Centaur Garden deals 1 damage to you. Ability manaAbility = new GreenManaAbility(); @@ -34,10 +32,10 @@ public final class CentaurGarden extends CardImpl { this.addAbility(manaAbility); // Threshold - {G}, {tap}, Sacrifice Centaur Garden: Target creature gets +3/+3 until end of turn. Activate this ability only if seven or more cards are in your graveyard. - Ability thresholdAbility = new ConditionalActivatedAbility(Zone.BATTLEFIELD, - new BoostTargetEffect(+3,+3, Duration.EndOfTurn), - new ManaCostsImpl<>("{G}"), - new CardsInControllerGraveyardCondition(7)); + Ability thresholdAbility = new ConditionalActivatedAbility( + new BoostTargetEffect(3, 3, Duration.EndOfTurn), + new ManaCostsImpl<>("{G}"), ThresholdCondition.instance + ); thresholdAbility.addCost(new TapSourceCost()); thresholdAbility.addCost(new SacrificeSourceCost()); thresholdAbility.addTarget(new TargetCreaturePermanent()); diff --git a/Mage.Sets/src/mage/cards/c/CephalidColiseum.java b/Mage.Sets/src/mage/cards/c/CephalidColiseum.java index f79a2e14581..7f8d92d1ecd 100644 --- a/Mage.Sets/src/mage/cards/c/CephalidColiseum.java +++ b/Mage.Sets/src/mage/cards/c/CephalidColiseum.java @@ -1,9 +1,7 @@ - package mage.cards.c; -import java.util.UUID; import mage.abilities.Ability; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; @@ -15,17 +13,17 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.Zone; import mage.target.TargetPlayer; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class CephalidColiseum extends CardImpl { public CephalidColiseum(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.LAND},""); + super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); // {tap}: Add {U}. Cephalid Coliseum deals 1 damage to you. Ability manaAbility = new BlueManaAbility(); @@ -33,10 +31,10 @@ public final class CephalidColiseum extends CardImpl { this.addAbility(manaAbility); // Threshold - {U}, {tap}, Sacrifice Cephalid Coliseum: Target player draws three cards, then discards three cards. Activate this ability only if seven or more cards are in your graveyard. - Ability thresholdAbility = new ConditionalActivatedAbility(Zone.BATTLEFIELD, - new DrawDiscardTargetEffect(3, 3), - new ManaCostsImpl<>("{U}"), - new CardsInControllerGraveyardCondition(7)); + Ability thresholdAbility = new ConditionalActivatedAbility( + new DrawDiscardTargetEffect(3, 3), + new ManaCostsImpl<>("{U}"), ThresholdCondition.instance + ); thresholdAbility.addCost(new TapSourceCost()); thresholdAbility.addCost(new SacrificeSourceCost()); thresholdAbility.addTarget(new TargetPlayer()); diff --git a/Mage.Sets/src/mage/cards/c/CephalidSage.java b/Mage.Sets/src/mage/cards/c/CephalidSage.java index 9a76c7c2c48..24f111c2b8d 100644 --- a/Mage.Sets/src/mage/cards/c/CephalidSage.java +++ b/Mage.Sets/src/mage/cards/c/CephalidSage.java @@ -1,12 +1,9 @@ - package mage.cards.c; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.DrawDiscardControllerEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; @@ -15,27 +12,27 @@ import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; + +import java.util.UUID; /** - * * @author LoneFox */ public final class CephalidSage extends CardImpl { public CephalidSage(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}"); this.subtype.add(SubType.OCTOPUS); this.power = new MageInt(2); this.toughness = new MageInt(3); // Threshold - As long as seven or more cards are in your graveyard, Cephalid Sage has "When Cephalid Sage enters the battlefield, draw three cards, then discard two cards." - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new GainAbilitySourceEffect(new EntersBattlefieldTriggeredAbility(new DrawDiscardControllerEffect(3, 2))), - new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} has \"When {this} enters the battlefield, draw three cards, then discard two cards.\"")); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(new EntersBattlefieldTriggeredAbility( + new DrawDiscardControllerEffect(3, 2) + )), ThresholdCondition.instance, "as long as seven or more cards are in your graveyard, " + + "{this} has \"When {this} enters the battlefield, draw three cards, then discard two cards.\"" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private CephalidSage(final CephalidSage card) { diff --git a/Mage.Sets/src/mage/cards/c/Chainflinger.java b/Mage.Sets/src/mage/cards/c/Chainflinger.java index 639db719a61..df3b4314f7f 100644 --- a/Mage.Sets/src/mage/cards/c/Chainflinger.java +++ b/Mage.Sets/src/mage/cards/c/Chainflinger.java @@ -1,11 +1,9 @@ - package mage.cards.c; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalActivatedAbility; @@ -15,32 +13,32 @@ import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; import mage.target.common.TargetAnyTarget; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class Chainflinger extends CardImpl { public Chainflinger(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}"); this.subtype.add(SubType.BEAST); this.power = new MageInt(2); this.toughness = new MageInt(2); // {1}{R}, {tap}: Chainflinger deals 1 damage to any target. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1),new ManaCostsImpl<>("{1}{R}")); + Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(1), new ManaCostsImpl<>("{1}{R}")); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetAnyTarget()); this.addAbility(ability); + // Threshold - {2}{R}, {tap}: Chainflinger deals 2 damage to any target. Activate this ability only if seven or more cards are in your graveyard. - Ability thresholdAbility = new ConditionalActivatedAbility(Zone.BATTLEFIELD, - new DamageTargetEffect(2), - new ManaCostsImpl<>("{2}{R}"), - new CardsInControllerGraveyardCondition(7)); + Ability thresholdAbility = new ConditionalActivatedAbility( + new DamageTargetEffect(2), new ManaCostsImpl<>("{2}{R}"), ThresholdCondition.instance + ); thresholdAbility.addCost(new TapSourceCost()); thresholdAbility.addTarget(new TargetAnyTarget()); thresholdAbility.setAbilityWord(AbilityWord.THRESHOLD); diff --git a/Mage.Sets/src/mage/cards/c/ChildhoodHorror.java b/Mage.Sets/src/mage/cards/c/ChildhoodHorror.java index cd265a6a668..8962e7a938a 100644 --- a/Mage.Sets/src/mage/cards/c/ChildhoodHorror.java +++ b/Mage.Sets/src/mage/cards/c/ChildhoodHorror.java @@ -1,14 +1,11 @@ - package mage.cards.c; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.decorator.ConditionalRestrictionEffect; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.combat.CantBlockSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.keyword.FlyingAbility; @@ -16,18 +13,18 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author cbt33 */ public final class ChildhoodHorror extends CardImpl { public ChildhoodHorror(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}"); this.subtype.add(SubType.HORROR); this.power = new MageInt(2); @@ -35,20 +32,15 @@ public final class ChildhoodHorror extends CardImpl { // Flying this.addAbility(FlyingAbility.getInstance()); - // Threshold - As long as seven or more cards are in your graveyard, Childhood Horror gets +2/+2 and can't block. - Ability thresholdAbility = new SimpleStaticAbility( - Zone.BATTLEFIELD, - new ConditionalContinuousEffect( - new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7), - "If seven or more cards are in your graveyard, Childhood Horror gets +2/+2" - )); - Effect effect = new ConditionalRestrictionEffect( - new CantBlockSourceEffect(Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7)); - effect.setText("and can't block"); - thresholdAbility.addEffect(effect); + // Threshold - As long as seven or more cards are in your graveyard, Childhood Horror gets +2/+2 and can't block. + Ability thresholdAbility = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), + ThresholdCondition.instance, "If seven or more cards are in your graveyard, {this} gets +2/+2" + )); + thresholdAbility.addEffect(new ConditionalRestrictionEffect( + new CantBlockSourceEffect(Duration.WhileOnBattlefield), ThresholdCondition.instance + ).setText("and can't block")); thresholdAbility.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(thresholdAbility); } diff --git a/Mage.Sets/src/mage/cards/c/Chlorophant.java b/Mage.Sets/src/mage/cards/c/Chlorophant.java index b5d81c87019..d4701a62c92 100644 --- a/Mage.Sets/src/mage/cards/c/Chlorophant.java +++ b/Mage.Sets/src/mage/cards/c/Chlorophant.java @@ -1,14 +1,10 @@ - package mage.cards.c; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.cards.CardImpl; @@ -16,30 +12,34 @@ import mage.cards.CardSetInfo; import mage.constants.*; import mage.counters.CounterType; +import java.util.UUID; + /** - * * @author cbt33 */ public final class Chlorophant extends CardImpl { public Chlorophant(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{G}{G}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{G}{G}"); this.subtype.add(SubType.ELEMENTAL); this.power = new MageInt(1); this.toughness = new MageInt(1); // At the beginning of your upkeep, you may put a +1/+1 counter on Chlorophant. - this.addAbility(new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), TargetController.YOU, true)); + this.addAbility(new BeginningOfUpkeepTriggeredAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance()), TargetController.YOU, true + )); + // Threshold - As long as seven or more cards are in your graveyard, Chlorophant has "At the beginning of your upkeep, you may put another +1/+1 counter on Chlorophant." - Effect effect = new AddCountersSourceEffect(CounterType.P1P1.createInstance()); - effect.setText("At the beginning of your upkeep, you may put another +1/+1 counter on {this}."); - Ability gainedAbility = new BeginningOfUpkeepTriggeredAbility(effect, TargetController.YOU, true); - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new GainAbilitySourceEffect(gainedAbility, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} has \"At the beginning of your upkeep, you may put another +1/+1 counter on {this}.\"")); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(new BeginningOfUpkeepTriggeredAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance()) + .setText("put another +1/+1 counter on {this}"), + TargetController.YOU, true + ), Duration.WhileOnBattlefield), ThresholdCondition.instance, "as long as seven or more cards " + + "are in your graveyard, {this} has \"At the beginning of your upkeep, you may put another +1/+1 counter on {this}.\"" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private Chlorophant(final Chlorophant card) { diff --git a/Mage.Sets/src/mage/cards/c/CrashingCentaur.java b/Mage.Sets/src/mage/cards/c/CrashingCentaur.java index 36c6e693e59..1d1a9fbe005 100644 --- a/Mage.Sets/src/mage/cards/c/CrashingCentaur.java +++ b/Mage.Sets/src/mage/cards/c/CrashingCentaur.java @@ -1,16 +1,13 @@ - package mage.cards.c; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.DiscardCardCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalContinuousEffect; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.keyword.ShroudAbility; @@ -19,39 +16,39 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author cbt33 */ public final class CrashingCentaur extends CardImpl { public CrashingCentaur(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{G}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}{G}"); this.subtype.add(SubType.CENTAUR); this.power = new MageInt(3); this.toughness = new MageInt(4); // {G}, Discard a card: Crashing Centaur gains trample until end of turn. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(TrampleAbility.getInstance(),Duration.EndOfTurn), new ManaCostsImpl<>("{G}")); + Ability ability = new SimpleActivatedAbility( + new GainAbilitySourceEffect(TrampleAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl<>("{G}") + ); ability.addCost(new DiscardCardCost()); this.addAbility(ability); // Threshold - As long as seven or more cards are in your graveyard, Crashing Centaur gets +2/+2 and has shroud. - Ability thresholdAbility = new SimpleStaticAbility( - Zone.BATTLEFIELD, - new ConditionalContinuousEffect( - new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7), - "If seven or more cards are in your graveyard, {this} gets +2/+2")); - Effect effect = new ConditionalContinuousEffect( - new GainAbilitySourceEffect(ShroudAbility.getInstance()), - new CardsInControllerGraveyardCondition(7), "and has shroud"); - thresholdAbility.addEffect(effect); + Ability thresholdAbility = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "as long as seven or more cards are in your graveyard, {this} gets +2/+2" + )); + thresholdAbility.addEffect(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(ShroudAbility.getInstance()), + ThresholdCondition.instance, "and has shroud" + )); thresholdAbility.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(thresholdAbility); } diff --git a/Mage.Sets/src/mage/cards/d/DecayingSoil.java b/Mage.Sets/src/mage/cards/d/DecayingSoil.java index 5e7a944b578..fb14d5d6f95 100644 --- a/Mage.Sets/src/mage/cards/d/DecayingSoil.java +++ b/Mage.Sets/src/mage/cards/d/DecayingSoil.java @@ -3,8 +3,7 @@ package mage.cards.d; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.DiesCreatureTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.Condition; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.DoIfCostPaid; @@ -13,6 +12,7 @@ import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.TargetController; import mage.constants.Zone; @@ -34,23 +34,24 @@ public final class DecayingSoil extends CardImpl { filter.add(TokenPredicate.FALSE); } - private static final Condition condition = new CardsInControllerGraveyardCondition(7); - public DecayingSoil(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}{B}"); // At the beginning of your upkeep, exile a card from your graveyard. this.addAbility(new BeginningOfUpkeepTriggeredAbility( - Zone.BATTLEFIELD, new ExileFromZoneTargetEffect(Zone.GRAVEYARD, false - ).setText("exile a card from your graveyard"), TargetController.YOU, false, true)); + Zone.BATTLEFIELD, + new ExileFromZoneTargetEffect(Zone.GRAVEYARD, false) + .setText("exile a card from your graveyard"), + TargetController.YOU, false, true + )); // Threshold - As long as seven or more cards are in your graveyard, Decaying Soil has "Whenever a nontoken creature is put into your graveyard from the battlefield, you may pay {1}. If you do, return that card to your hand." this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( new GainAbilitySourceEffect(new DecayingSoilTriggeredAbility()), - condition, "Threshold — As long as seven or more cards are in your graveyard, " + + ThresholdCondition.instance, "as long as seven or more cards are in your graveyard, " + "{this} has \"Whenever a nontoken creature is put into your graveyard from the battlefield, " + "you may pay {1}. If you do, return that card to your hand.\"" - ))); + )).setAbilityWord(AbilityWord.THRESHOLD)); } private DecayingSoil(final DecayingSoil card) { diff --git a/Mage.Sets/src/mage/cards/d/DeepSeaTerror.java b/Mage.Sets/src/mage/cards/d/DeepSeaTerror.java index fad6139c7f5..e5c05545784 100644 --- a/Mage.Sets/src/mage/cards/d/DeepSeaTerror.java +++ b/Mage.Sets/src/mage/cards/d/DeepSeaTerror.java @@ -2,39 +2,36 @@ package mage.cards.d; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.Condition; import mage.abilities.condition.InvertCondition; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalRestrictionEffect; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.combat.CantAttackSourceEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.constants.Zone; import java.util.UUID; /** - * * @author LevelX2 */ public final class DeepSeaTerror extends CardImpl { + private static final Condition condition = new InvertCondition(ThresholdCondition.instance); + public DeepSeaTerror(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}{U}"); this.subtype.add(SubType.SERPENT); this.power = new MageInt(6); this.toughness = new MageInt(6); // Deep-Sea Terror can't attack unless there are seven or more cards in your graveyard. - Effect effect = new ConditionalRestrictionEffect( - new CantAttackSourceEffect(Duration.WhileOnBattlefield), - new InvertCondition(new CardsInControllerGraveyardCondition(7))); - effect.setText("{this} can't attack unless there are seven or more cards in your graveyard"); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); - + this.addAbility(new SimpleStaticAbility(new ConditionalRestrictionEffect( + new CantAttackSourceEffect(Duration.WhileOnBattlefield), condition + ).setText("{this} can't attack unless there are seven or more cards in your graveyard"))); } private DeepSeaTerror(final DeepSeaTerror card) { diff --git a/Mage.Sets/src/mage/cards/d/Demoralize.java b/Mage.Sets/src/mage/cards/d/Demoralize.java index daa858b7578..d0aefc36575 100644 --- a/Mage.Sets/src/mage/cards/d/Demoralize.java +++ b/Mage.Sets/src/mage/cards/d/Demoralize.java @@ -1,8 +1,6 @@ - package mage.cards.d; -import java.util.UUID; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.AddContinuousEffectToGame; import mage.abilities.effects.common.combat.CantBlockAllEffect; @@ -10,35 +8,34 @@ import mage.abilities.effects.common.continuous.GainAbilityAllEffect; import mage.abilities.keyword.MenaceAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.Duration; import mage.filter.StaticFilters; +import java.util.UUID; /** - * * @author LevelX2 */ public final class Demoralize extends CardImpl { public Demoralize(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{R}"); - + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{R}"); // All creatures gain menace until end of turn. (They can't be blocked except by two or more creatures.) - this.getSpellAbility().addEffect(new GainAbilityAllEffect(new MenaceAbility(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES) - .setText("All creatures gain menace until end of turn. (They can't be blocked except by two or more creatures.)")); + this.getSpellAbility().addEffect(new GainAbilityAllEffect( + new MenaceAbility(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES + ).setText("All creatures gain menace until end of turn. (They can't be blocked except by two or more creatures.)")); // Threshold — If seven or more cards are in your graveyard, creatures can't block this turn. - this.getSpellAbility().addEffect( - new ConditionalOneShotEffect( - new AddContinuousEffectToGame(new CantBlockAllEffect(StaticFilters.FILTER_PERMANENT_CREATURES, Duration.EndOfTurn)), - new CardsInControllerGraveyardCondition(7), - "

Threshold — If seven or more cards are in your graveyard, creatures can't block this turn" - )); + this.getSpellAbility().addEffect(new ConditionalOneShotEffect( + new AddContinuousEffectToGame(new CantBlockAllEffect(StaticFilters.FILTER_PERMANENT_CREATURES, Duration.EndOfTurn)), + ThresholdCondition.instance, "
" + AbilityWord.THRESHOLD.formatWord() + + "If seven or more cards are in your graveyard, creatures can't block this turn" + )); } - private Demoralize(final Demoralize card) { super(card); } @@ -47,4 +44,4 @@ public final class Demoralize extends CardImpl { public Demoralize copy() { return new Demoralize(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/d/DirtyWererat.java b/Mage.Sets/src/mage/cards/d/DirtyWererat.java index 77141732363..5301799e739 100644 --- a/Mage.Sets/src/mage/cards/d/DirtyWererat.java +++ b/Mage.Sets/src/mage/cards/d/DirtyWererat.java @@ -1,17 +1,14 @@ - package mage.cards.d; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.DiscardCardCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.decorator.ConditionalRestrictionEffect; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.RegenerateSourceEffect; import mage.abilities.effects.common.combat.CantBlockSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; @@ -19,18 +16,18 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author cbt33 */ public final class DirtyWererat extends CardImpl { public DirtyWererat(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.RAT); this.subtype.add(SubType.MINION); @@ -39,22 +36,18 @@ public final class DirtyWererat extends CardImpl { this.toughness = new MageInt(3); // {B}, Discard a card: Regenerate Dirty Wererat. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new ManaCostsImpl<>("{B}")); + Ability ability = new SimpleActivatedAbility(new RegenerateSourceEffect(), new ManaCostsImpl<>("{B}")); ability.addCost(new DiscardCardCost()); this.addAbility(ability); // Threshold - As long as seven or more cards are in your graveyard, Dirty Wererat gets +2/+2 and can't block. - Ability thresholdAbility = new SimpleStaticAbility(Zone.BATTLEFIELD, - new ConditionalContinuousEffect( - new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7), - "If seven or more cards are in your graveyard, {this} gets +2/+2" - )); - Effect effect = new ConditionalRestrictionEffect( - new CantBlockSourceEffect(Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7)); - effect.setText("and can't block"); - thresholdAbility.addEffect(effect); + Ability thresholdAbility = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), + ThresholdCondition.instance, "If seven or more cards are in your graveyard, {this} gets +2/+2" + )); + thresholdAbility.addEffect(new ConditionalRestrictionEffect( + new CantBlockSourceEffect(Duration.WhileOnBattlefield), ThresholdCondition.instance + ).setText("and can't block")); thresholdAbility.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(thresholdAbility); } diff --git a/Mage.Sets/src/mage/cards/d/DivineSacrament.java b/Mage.Sets/src/mage/cards/d/DivineSacrament.java index 5b9eb9e036f..3e17d625f4a 100644 --- a/Mage.Sets/src/mage/cards/d/DivineSacrament.java +++ b/Mage.Sets/src/mage/cards/d/DivineSacrament.java @@ -1,11 +1,8 @@ - package mage.cards.d; -import java.util.UUID; import mage.ObjectColor; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostAllEffect; import mage.cards.CardImpl; @@ -13,36 +10,35 @@ import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.ColorPredicate; +import java.util.UUID; + /** - * * @author Beta_Steward (Honor of the Pure), LevelX2 (Demoralize), cbt */ public final class DivineSacrament extends CardImpl { private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("White creatures"); + static { filter.add(new ColorPredicate(ObjectColor.WHITE)); } public DivineSacrament(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{W}{W}"); - + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}{W}"); // White creatures get +1/+1. - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, filter, false)); - this.addAbility(ability); + this.addAbility(new SimpleStaticAbility(new BoostAllEffect( + 1, 1, Duration.WhileOnBattlefield, filter, false + ))); + // Threshold - White creatures get an additional +1/+1 as long as seven or more cards are in your graveyard. - ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, filter, false), - new CardsInControllerGraveyardCondition(7), - "If seven or more cards are in your graveyard, white creatures get an additional +1/+1." - )); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, filter, false), + ThresholdCondition.instance, "If seven or more cards are in your graveyard, white creatures get an additional +1/+1." + )).setAbilityWord(AbilityWord.THRESHOLD)); } private DivineSacrament(final DivineSacrament card) { diff --git a/Mage.Sets/src/mage/cards/e/Epicenter.java b/Mage.Sets/src/mage/cards/e/Epicenter.java index 5b7acbcbb41..623498e3ea9 100644 --- a/Mage.Sets/src/mage/cards/e/Epicenter.java +++ b/Mage.Sets/src/mage/cards/e/Epicenter.java @@ -1,14 +1,15 @@ - package mage.cards.e; import mage.abilities.Ability; +import mage.abilities.condition.Condition; import mage.abilities.condition.InvertCondition; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.SacrificeEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.Outcome; import mage.filter.StaticFilters; @@ -16,7 +17,6 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.TargetPlayer; -import java.util.Iterator; import java.util.UUID; /** @@ -24,24 +24,20 @@ import java.util.UUID; */ public final class Epicenter extends CardImpl { + private static final Condition condition = new InvertCondition(ThresholdCondition.instance); + public Epicenter(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{R}"); // Target player sacrifices a land. this.getSpellAbility().addEffect(new ConditionalOneShotEffect( new SacrificeEffect(StaticFilters.FILTER_LAND, 1, "Target player"), - new InvertCondition(new CardsInControllerGraveyardCondition(7)), - "Target player sacrifices a land" + condition, "Target player sacrifices a land" )); - // Threshold - Each player sacrifices all lands they control instead if seven or more cards are in your graveyard. - this.getSpellAbility().addEffect(new ConditionalOneShotEffect( - new EpicenterEffect(), - new CardsInControllerGraveyardCondition(7), - "

Threshold — Each player sacrifices all lands they control instead " + - "if seven or more cards are in your graveyard." - )); - this.getSpellAbility().addTarget(new TargetPlayer()); + + // Threshold - Each player sacrifices all lands they control instead if seven or more cards are in your graveyard. + this.getSpellAbility().addEffect(new EpicenterEffect()); } private Epicenter(final Epicenter card) { @@ -58,6 +54,8 @@ class EpicenterEffect extends OneShotEffect { EpicenterEffect() { super(Outcome.DestroyPermanent); + staticText = "
" + AbilityWord.THRESHOLD.formatWord() + "Each player sacrifices " + + "all lands they control instead if seven or more cards are in your graveyard."; } private EpicenterEffect(final EpicenterEffect effect) { @@ -66,14 +64,14 @@ class EpicenterEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Iterator permanents = game.getBattlefield().getActivePermanents(source.getControllerId(), game).iterator(); - while (permanents.hasNext()) { - Permanent p = permanents.next(); - if (p.isLand(game)) { - p.sacrifice(source, game); - } + if (!ThresholdCondition.instance.apply(game, source)) { + return false; + } + for (Permanent permanent : game.getBattlefield().getActivePermanents( + StaticFilters.FILTER_LAND, source.getControllerId(), source, game + )) { + permanent.sacrifice(source, game); } - return true; } diff --git a/Mage.Sets/src/mage/cards/e/ExcavatingAnurid.java b/Mage.Sets/src/mage/cards/e/ExcavatingAnurid.java index c78e9a2abd7..02b07b2e367 100644 --- a/Mage.Sets/src/mage/cards/e/ExcavatingAnurid.java +++ b/Mage.Sets/src/mage/cards/e/ExcavatingAnurid.java @@ -4,8 +4,7 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.Condition; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.DoIfCostPaid; @@ -20,7 +19,6 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.filter.StaticFilters; -import mage.target.common.TargetControlledPermanent; import java.util.UUID; @@ -29,8 +27,6 @@ import java.util.UUID; */ public final class ExcavatingAnurid extends CardImpl { - private static final Condition condition = new CardsInControllerGraveyardCondition(7); - public ExcavatingAnurid(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}"); @@ -47,12 +43,12 @@ public final class ExcavatingAnurid extends CardImpl { // Threshold — As long as seven or more cards are in your graveyard, Excavating Anurid gets +1/+1 and has vigilance. Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( - new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), - condition, "As long as seven or more cards are in your graveyard, {this} gets +1/+1" + new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "as long as seven or more cards are in your graveyard, {this} gets +1/+1" )); ability.addEffect(new ConditionalContinuousEffect(new GainAbilitySourceEffect( VigilanceAbility.getInstance(), Duration.WhileOnBattlefield - ), condition, "and has vigilance")); + ), ThresholdCondition.instance, "and has vigilance")); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/f/FarWanderings.java b/Mage.Sets/src/mage/cards/f/FarWanderings.java index b27c29e632e..05f9db17f5d 100644 --- a/Mage.Sets/src/mage/cards/f/FarWanderings.java +++ b/Mage.Sets/src/mage/cards/f/FarWanderings.java @@ -1,12 +1,12 @@ - package mage.cards.f; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.Effect; import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; import mage.filter.StaticFilters; import mage.target.common.TargetCardInLibrary; @@ -14,22 +14,28 @@ import mage.target.common.TargetCardInLibrary; import java.util.UUID; /** - * * @author fireshoes */ public final class FarWanderings extends CardImpl { public FarWanderings(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{G}"); // Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle your library. // Threshold - If seven or more cards are in your graveyard, instead search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle your library. Effect effect = new ConditionalOneShotEffect( - new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 3, StaticFilters.FILTER_CARD_BASIC_LAND), true), - new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 1, StaticFilters.FILTER_CARD_BASIC_LAND), true), - new CardsInControllerGraveyardCondition(7), - "Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle.

Threshold — If seven or more cards are in your graveyard, instead search your library for up to three basic land cards, put them onto the battlefield tapped, then shuffle."); + new SearchLibraryPutInPlayEffect(new TargetCardInLibrary( + 3, StaticFilters.FILTER_CARD_BASIC_LAND + ), true), + new SearchLibraryPutInPlayEffect(new TargetCardInLibrary( + 1, StaticFilters.FILTER_CARD_BASIC_LAND + ), true), + ThresholdCondition.instance, "Search your library for a basic land card, " + + "put that card onto the battlefield tapped, then shuffle.
" + AbilityWord.THRESHOLD.formatWord() + + "If seven or more cards are in your graveyard, instead search your library for up to " + + "three basic land cards, put them onto the battlefield tapped, then shuffle." + ); this.getSpellAbility().addEffect(effect); } diff --git a/Mage.Sets/src/mage/cards/f/FledglingDragon.java b/Mage.Sets/src/mage/cards/f/FledglingDragon.java index c57a0aff05a..0715c1c67cb 100644 --- a/Mage.Sets/src/mage/cards/f/FledglingDragon.java +++ b/Mage.Sets/src/mage/cards/f/FledglingDragon.java @@ -1,12 +1,10 @@ - package mage.cards.f; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; @@ -16,31 +14,35 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author LoneFox */ public final class FledglingDragon extends CardImpl { public FledglingDragon(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{R}"); this.subtype.add(SubType.DRAGON); this.power = new MageInt(2); this.toughness = new MageInt(2); // Flying this.addAbility(FlyingAbility.getInstance()); + // Threshold - As long as seven or more cards are in your graveyard, Fledgling Dragon gets +3/+3 and has "{R}: Fledgling Dragon gets +1/+0 until end of turn." - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(3, 3, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} gets +3/+3")); - Ability gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl<>("{R}")); - ability.addEffect(new ConditionalContinuousEffect(new GainAbilitySourceEffect(gainedAbility), - new CardsInControllerGraveyardCondition(7), "and has \"{R}: {this} gets +1/+0 until end of turn.\"")); + Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(3, 3, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "as long as seven or more cards are in your graveyard, {this} gets +3/+3" + )); + ability.addEffect(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(new SimpleActivatedAbility( + new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl<>("{R}") + )), ThresholdCondition.instance, "and has \"{R}: {this} gets +1/+0 until end of turn.\"" + )); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/f/Frightcrawler.java b/Mage.Sets/src/mage/cards/f/Frightcrawler.java index f998a0336db..4ab8b4411fb 100644 --- a/Mage.Sets/src/mage/cards/f/Frightcrawler.java +++ b/Mage.Sets/src/mage/cards/f/Frightcrawler.java @@ -3,7 +3,7 @@ package mage.cards.f; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.decorator.ConditionalRestrictionEffect; import mage.abilities.effects.common.combat.CantBlockSourceEffect; @@ -11,7 +11,10 @@ import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.keyword.FearAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.AbilityWord; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; import java.util.UUID; @@ -29,20 +32,18 @@ public final class Frightcrawler extends CardImpl { // Fear this.addAbility(FearAbility.getInstance()); + // Threshold - As long as seven or more cards are in your graveyard, Frightcrawler gets +2/+2 and can't block. - Ability thresholdAbility = new SimpleStaticAbility( - Zone.BATTLEFIELD, - new ConditionalContinuousEffect( - new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7), - "If seven or more cards are in your graveyard, {this} gets +2/+2 " - )); - thresholdAbility.addEffect(new ConditionalRestrictionEffect( + Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), + ThresholdCondition.instance, "If seven or more cards are in your graveyard, {this} gets +2/+2 " + )); + ability.addEffect(new ConditionalRestrictionEffect( new CantBlockSourceEffect(Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7), - "and can't block.")); - thresholdAbility.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(thresholdAbility); + ThresholdCondition.instance, "and can't block." + )); + ability.setAbilityWord(AbilityWord.THRESHOLD); + this.addAbility(ability); } private Frightcrawler(final Frightcrawler card) { diff --git a/Mage.Sets/src/mage/cards/g/Gloomdrifter.java b/Mage.Sets/src/mage/cards/g/Gloomdrifter.java index 7108d5f129d..d960ff0a22e 100644 --- a/Mage.Sets/src/mage/cards/g/Gloomdrifter.java +++ b/Mage.Sets/src/mage/cards/g/Gloomdrifter.java @@ -1,11 +1,9 @@ package mage.cards.g; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostAllEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; @@ -14,19 +12,19 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; import mage.filter.StaticFilters; +import java.util.UUID; + /** - * * @author LoneFox */ public final class Gloomdrifter extends CardImpl { public Gloomdrifter(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}"); this.subtype.add(SubType.ZOMBIE); this.subtype.add(SubType.MINION); this.power = new MageInt(2); @@ -34,14 +32,16 @@ public final class Gloomdrifter extends CardImpl { // Flying this.addAbility(FlyingAbility.getInstance()); + // Threshold - As long as seven or more cards are in your graveyard, Gloomdrifter has "When Gloomdrifter enters the battlefield, nonblack creatures get -2/-2 until end of turn." - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new GainAbilitySourceEffect(new EntersBattlefieldTriggeredAbility( - new BoostAllEffect(-2, -2, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES_NON_BLACK, false))), - new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} has \"When {this} enters the battlefield, nonblack creatures get -2/-2 until end of turn.\"")); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(new EntersBattlefieldTriggeredAbility( + new BoostAllEffect( + -2, -2, Duration.EndOfTurn, + StaticFilters.FILTER_PERMANENT_CREATURES_NON_BLACK, false + ))), ThresholdCondition.instance, "as long as seven or more cards are in your graveyard, " + + "{this} has \"When {this} enters the battlefield, nonblack creatures get -2/-2 until end of turn.\"" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private Gloomdrifter(final Gloomdrifter card) { diff --git a/Mage.Sets/src/mage/cards/g/GrizzlyFate.java b/Mage.Sets/src/mage/cards/g/GrizzlyFate.java index 1a7fd237f55..a6324a35c74 100644 --- a/Mage.Sets/src/mage/cards/g/GrizzlyFate.java +++ b/Mage.Sets/src/mage/cards/g/GrizzlyFate.java @@ -1,36 +1,34 @@ - package mage.cards.g; -import java.util.UUID; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalOneShotEffect; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.keyword.FlashbackAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.TimingRule; import mage.game.permanent.token.BearToken; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class GrizzlyFate extends CardImpl { public GrizzlyFate(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{G}{G}"); - + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{G}{G}"); // Create two 2/2 green Bear creature tokens. // Threshold - Create four 2/2 green Bear creature tokens instead if seven or more cards are in your graveyard. - Effect effect = new ConditionalOneShotEffect(new CreateTokenEffect(new BearToken(), 4), - new CreateTokenEffect(new BearToken(), 2), - new CardsInControllerGraveyardCondition(7), - "Create two 2/2 green Bear creature tokens.

Threshold — Create four 2/2 green Bear creature tokens instead if seven or more cards are in your graveyard."); - this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addEffect(new ConditionalOneShotEffect( + new CreateTokenEffect(new BearToken(), 4), new CreateTokenEffect(new BearToken(), 2), + ThresholdCondition.instance, "Create two 2/2 green Bear creature tokens.
" + + AbilityWord.THRESHOLD.formatWord() + "Create four 2/2 green Bear creature tokens " + + "instead if seven or more cards are in your graveyard." + )); // Flashback {5}{G}{G} this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{5}{G}{G}"))); diff --git a/Mage.Sets/src/mage/cards/h/HallowedHealer.java b/Mage.Sets/src/mage/cards/h/HallowedHealer.java index b2fbc6b9661..21a746202e7 100644 --- a/Mage.Sets/src/mage/cards/h/HallowedHealer.java +++ b/Mage.Sets/src/mage/cards/h/HallowedHealer.java @@ -1,11 +1,9 @@ - package mage.cards.h; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.decorator.ConditionalActivatedAbility; import mage.abilities.effects.common.PreventDamageToTargetEffect; @@ -13,20 +11,20 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; import mage.target.common.TargetAnyTarget; +import java.util.UUID; + /** - * * @author cbt33 */ public final class HallowedHealer extends CardImpl { public HallowedHealer(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.CLERIC); @@ -34,14 +32,15 @@ public final class HallowedHealer extends CardImpl { this.toughness = new MageInt(1); // {tap}: Prevent the next 2 damage that would be dealt to any target this turn. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PreventDamageToTargetEffect(Duration.EndOfTurn,2), new TapSourceCost()); + Ability ability = new SimpleActivatedAbility(new PreventDamageToTargetEffect(Duration.EndOfTurn, 2), new TapSourceCost()); ability.addTarget(new TargetAnyTarget()); this.addAbility(ability); + // Threshold - {tap}: Prevent the next 4 damage that would be dealt to any target this turn. Activate this ability only if seven or more cards are in your graveyard. - Ability thresholdAbility = new ConditionalActivatedAbility(Zone.BATTLEFIELD, - new PreventDamageToTargetEffect(Duration.EndOfTurn, 4), - new TapSourceCost(), - new CardsInControllerGraveyardCondition(7)); + Ability thresholdAbility = new ConditionalActivatedAbility( + new PreventDamageToTargetEffect(Duration.EndOfTurn, 4), + new TapSourceCost(), ThresholdCondition.instance + ); thresholdAbility.addTarget(new TargetAnyTarget()); thresholdAbility.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(thresholdAbility); diff --git a/Mage.Sets/src/mage/cards/h/HuntingGrounds.java b/Mage.Sets/src/mage/cards/h/HuntingGrounds.java index 49484d5f899..800ab5974a8 100644 --- a/Mage.Sets/src/mage/cards/h/HuntingGrounds.java +++ b/Mage.Sets/src/mage/cards/h/HuntingGrounds.java @@ -1,11 +1,8 @@ - package mage.cards.h; -import java.util.UUID; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SpellCastOpponentTriggeredAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.PutCardFromHandOntoBattlefieldEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; @@ -14,26 +11,26 @@ import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.Zone; -import mage.filter.common.FilterCreatureCard; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author LoneFox */ public final class HuntingGrounds extends CardImpl { public HuntingGrounds(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{G}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}{W}"); // Threshold - As long as seven or more cards are in your graveyard, Hunting Grounds has "Whenever an opponent casts a spell, you may put a creature card from your hand onto the battlefield." - Ability gainedAbility = new SpellCastOpponentTriggeredAbility(new PutCardFromHandOntoBattlefieldEffect( - new FilterCreatureCard("a creature card")), true); - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new GainAbilitySourceEffect(gainedAbility, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} has \"Whenever an opponent casts a spell, you may put a creature card from your hand onto the battlefield.\"")); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(new SpellCastOpponentTriggeredAbility( + new PutCardFromHandOntoBattlefieldEffect(StaticFilters.FILTER_CARD_CREATURE_A), true + ), Duration.WhileOnBattlefield), ThresholdCondition.instance, "as long as seven or more " + + "cards are in your graveyard, {this} has \"Whenever an opponent casts a spell, " + + "you may put a creature card from your hand onto the battlefield.\"" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private HuntingGrounds(final HuntingGrounds card) { diff --git a/Mage.Sets/src/mage/cards/i/IlluminateHistory.java b/Mage.Sets/src/mage/cards/i/IlluminateHistory.java index af5c84a2640..f13521c9e32 100644 --- a/Mage.Sets/src/mage/cards/i/IlluminateHistory.java +++ b/Mage.Sets/src/mage/cards/i/IlluminateHistory.java @@ -1,7 +1,6 @@ package mage.cards.i; -import mage.abilities.condition.Condition; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.discard.DiscardAndDrawThatManyEffect; @@ -18,8 +17,6 @@ import java.util.UUID; */ public final class IlluminateHistory extends CardImpl { - private static final Condition condition = new CardsInControllerGraveyardCondition(7); - public IlluminateHistory(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{R}{R}"); @@ -28,8 +25,8 @@ public final class IlluminateHistory extends CardImpl { // Discard any number of cards, then draw that many cards. Then if there are seven or more cards in your graveyard, create a 3/2 red and white Spirit creature token. this.getSpellAbility().addEffect(new DiscardAndDrawThatManyEffect(Integer.MAX_VALUE)); this.getSpellAbility().addEffect(new ConditionalOneShotEffect( - new CreateTokenEffect(new Spirit32Token()), condition, "Then if there are seven or more " + - "cards in your graveyard, create a 3/2 red and white Spirit creature token" + new CreateTokenEffect(new Spirit32Token()), ThresholdCondition.instance, "Then if there " + + "are seven or more cards in your graveyard, create a 3/2 red and white Spirit creature token" )); } diff --git a/Mage.Sets/src/mage/cards/i/InfectedVermin.java b/Mage.Sets/src/mage/cards/i/InfectedVermin.java index 5074c949c2d..78c9ce5884f 100644 --- a/Mage.Sets/src/mage/cards/i/InfectedVermin.java +++ b/Mage.Sets/src/mage/cards/i/InfectedVermin.java @@ -1,11 +1,8 @@ - package mage.cards.i; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalActivatedAbility; import mage.abilities.effects.common.DamageEverythingEffect; @@ -14,30 +11,28 @@ import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; + +import java.util.UUID; /** - * * @author cbt33 */ public final class InfectedVermin extends CardImpl { public InfectedVermin(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); this.subtype.add(SubType.RAT); this.power = new MageInt(1); this.toughness = new MageInt(1); // {2}{B}: Infected Vermin deals 1 damage to each creature and each player. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageEverythingEffect(1), new ManaCostsImpl<>("{2}{B}"))); + this.addAbility(new SimpleActivatedAbility(new DamageEverythingEffect(1), new ManaCostsImpl<>("{2}{B}"))); + // Threshold - {3}{B}: Infected Vermin deals 3 damage to each creature and each player. Activate this ability only if seven or more cards are in your graveyard. - Ability ability = new ConditionalActivatedAbility(Zone.BATTLEFIELD, - new DamageEverythingEffect(3), - new ManaCostsImpl<>("{3}{B}"), - new CardsInControllerGraveyardCondition(7)); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + this.addAbility(new ConditionalActivatedAbility( + new DamageEverythingEffect(3), new ManaCostsImpl<>("{3}{B}"), ThresholdCondition.instance + ).setAbilityWord(AbilityWord.THRESHOLD)); } private InfectedVermin(final InfectedVermin card) { diff --git a/Mage.Sets/src/mage/cards/k/KamahlsDesire.java b/Mage.Sets/src/mage/cards/k/KamahlsDesire.java index d269afccdc3..94ae7fc5231 100644 --- a/Mage.Sets/src/mage/cards/k/KamahlsDesire.java +++ b/Mage.Sets/src/mage/cards/k/KamahlsDesire.java @@ -1,10 +1,7 @@ - package mage.cards.k; -import java.util.UUID; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect; @@ -13,43 +10,37 @@ import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.FirstStrikeAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AbilityWord; -import mage.constants.AttachmentType; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.Zone; +import mage.constants.*; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author cbt33 */ public final class KamahlsDesire extends CardImpl { public KamahlsDesire(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{R}"); this.subtype.add(SubType.AURA); - // Enchant creature TargetPermanent auraTarget = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); - Ability ability = new EnchantAbility(auraTarget); - this.addAbility(ability); + this.addAbility(new EnchantAbility(auraTarget)); // Enchanted creature has first strike. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FirstStrikeAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield))); + this.addAbility(new SimpleStaticAbility(new GainAbilityAttachedEffect( + FirstStrikeAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield + ))); + // Threshold - Enchanted creature gets +3/+0 as long as seven or more cards are in your graveyard. - ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostEnchantedEffect(3, 0, Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7), - "Enchanted creature gets +3/+0 as long as seven or more cards are in your graveyard")); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostEnchantedEffect(3, 0, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "Enchanted creature gets +3/+0 as long as seven or more cards are in your graveyard" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private KamahlsDesire(final KamahlsDesire card) { diff --git a/Mage.Sets/src/mage/cards/k/KamahlsSledge.java b/Mage.Sets/src/mage/cards/k/KamahlsSledge.java index 2de127ac512..2349adb94c2 100644 --- a/Mage.Sets/src/mage/cards/k/KamahlsSledge.java +++ b/Mage.Sets/src/mage/cards/k/KamahlsSledge.java @@ -1,32 +1,35 @@ - package mage.cards.k; -import java.util.UUID; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.DamageTargetControllerEffect; import mage.abilities.effects.common.DamageTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author LoneFox */ public final class KamahlsSledge extends CardImpl { public KamahlsSledge(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{5}{R}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{5}{R}{R}"); // Kamahl's Sledge deals 4 damage to target creature. this.getSpellAbility().addEffect(new DamageTargetEffect(4)); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + // Threshold - If seven or more cards are in your graveyard, instead Kamahl's Sledge deals 4 damage to that creature and 4 damage to that creature's controller. - this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new DamageTargetControllerEffect(4), - new CardsInControllerGraveyardCondition(7), - "

Threshold — If seven or more cards are in your graveyard, instead {this} deals 4 damage to that creature and 4 damage to that creature's controller.")); + this.getSpellAbility().addEffect(new ConditionalOneShotEffect( + new DamageTargetControllerEffect(4), ThresholdCondition.instance, "
" + + AbilityWord.THRESHOLD.formatWord() + "If seven or more cards are in your graveyard, " + + "instead {this} deals 4 damage to that creature and 4 damage to that creature's controller." + )); } private KamahlsSledge(final KamahlsSledge card) { diff --git a/Mage.Sets/src/mage/cards/k/KirtarsDesire.java b/Mage.Sets/src/mage/cards/k/KirtarsDesire.java index 7496520be38..f50abde9160 100644 --- a/Mage.Sets/src/mage/cards/k/KirtarsDesire.java +++ b/Mage.Sets/src/mage/cards/k/KirtarsDesire.java @@ -1,8 +1,7 @@ package mage.cards.k; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalRestrictionEffect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.combat.CantAttackAttachedEffect; @@ -30,20 +29,16 @@ public final class KirtarsDesire extends CardImpl { TargetPermanent auraTarget = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.Detriment)); - Ability ability = new EnchantAbility(auraTarget); - this.addAbility(ability); + this.addAbility(new EnchantAbility(auraTarget)); // Enchanted creature can't attack. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantAttackAttachedEffect(AttachmentType.AURA))); + this.addAbility(new SimpleStaticAbility(new CantAttackAttachedEffect(AttachmentType.AURA))); // Threshold - Enchanted creature can't block as long as seven or more cards are in your graveyard. - ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalRestrictionEffect( - new CantAttackBlockAttachedEffect(AttachmentType.AURA), - new CardsInControllerGraveyardCondition(7), - "Enchanted creature can't block as long as seven or more cards are in your graveyard")); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); - + this.addAbility(new SimpleStaticAbility(new ConditionalRestrictionEffect( + new CantAttackBlockAttachedEffect(AttachmentType.AURA), ThresholdCondition.instance, + "Enchanted creature can't block as long as seven or more cards are in your graveyard" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private KirtarsDesire(final KirtarsDesire card) { diff --git a/Mage.Sets/src/mage/cards/k/KirtarsWrath.java b/Mage.Sets/src/mage/cards/k/KirtarsWrath.java index 35503847cdb..afed804b230 100644 --- a/Mage.Sets/src/mage/cards/k/KirtarsWrath.java +++ b/Mage.Sets/src/mage/cards/k/KirtarsWrath.java @@ -1,36 +1,37 @@ package mage.cards.k; -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalOneShotEffect; -import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.DestroyAllEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.Outcome; import mage.filter.StaticFilters; -import mage.game.Game; import mage.game.permanent.token.SpiritWhiteToken; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class KirtarsWrath extends CardImpl { public KirtarsWrath(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{W}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{W}{W}"); // Destroy all creatures. They can't be regenerated. + this.getSpellAbility().addEffect(new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_CREATURES, true)); + // Threshold - If seven or more cards are in your graveyard, instead destroy all creatures, then create two 1/1 white Spirit creature tokens with flying. Creatures destroyed this way can't be regenerated. this.getSpellAbility().addEffect(new ConditionalOneShotEffect( - new KirtarsWrathEffect(), - new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_CREATURES, true), - new CardsInControllerGraveyardCondition(7), - "Destroy all creatures. They can't be regenerated.

Threshold — If seven or more cards are in your graveyard, instead destroy all creatures, then create two 1/1 white Spirit creature tokens with flying. Creatures destroyed this way can't be regenerated")); + new CreateTokenEffect(new SpiritWhiteToken(), 2), + ThresholdCondition.instance, "
" + AbilityWord.THRESHOLD.formatWord() + + "If seven or more cards are in your graveyard, instead destroy all creatures, " + + "then create two 1/1 white Spirit creature tokens with flying. " + + "Creatures destroyed this way can't be regenerated" + )); } private KirtarsWrath(final KirtarsWrath card) { @@ -42,26 +43,3 @@ public final class KirtarsWrath extends CardImpl { return new KirtarsWrath(this); } } - -class KirtarsWrathEffect extends OneShotEffect { - - KirtarsWrathEffect() { - super(Outcome.DestroyPermanent); - this.staticText = "destroy all creatures, then create two 1/1 white Spirit creature tokens with flying. Creatures destroyed this way can't be regenerated"; - } - - private KirtarsWrathEffect(final KirtarsWrathEffect effect) { - super(effect); - } - - @Override - public KirtarsWrathEffect copy() { - return new KirtarsWrathEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_CREATURES, true).apply(game, source); - return new CreateTokenEffect(new SpiritWhiteToken(), 2).apply(game, source); - } -} diff --git a/Mage.Sets/src/mage/cards/k/KrosanAvenger.java b/Mage.Sets/src/mage/cards/k/KrosanAvenger.java index 7330a739d98..1b66837f024 100644 --- a/Mage.Sets/src/mage/cards/k/KrosanAvenger.java +++ b/Mage.Sets/src/mage/cards/k/KrosanAvenger.java @@ -1,10 +1,7 @@ - package mage.cards.k; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalActivatedAbility; import mage.abilities.effects.common.RegenerateSourceEffect; @@ -14,16 +11,16 @@ import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class KrosanAvenger extends CardImpl { public KrosanAvenger(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.DRUID); @@ -32,13 +29,11 @@ public final class KrosanAvenger extends CardImpl { // Trample this.addAbility(TrampleAbility.getInstance()); + // Threshold - {1}{G}: Regenerate Krosan Avenger. Activate this ability only if seven or more cards are in your graveyard. - Ability thresholdAbility = new ConditionalActivatedAbility(Zone.BATTLEFIELD, - new RegenerateSourceEffect(), - new ManaCostsImpl<>("{1}{G}"), - new CardsInControllerGraveyardCondition(7)); - thresholdAbility.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(thresholdAbility); + this.addAbility(new ConditionalActivatedAbility( + new RegenerateSourceEffect(), new ManaCostsImpl<>("{1}{G}"), ThresholdCondition.instance + ).setAbilityWord(AbilityWord.THRESHOLD)); } private KrosanAvenger(final KrosanAvenger card) { diff --git a/Mage.Sets/src/mage/cards/k/KrosanBeast.java b/Mage.Sets/src/mage/cards/k/KrosanBeast.java index 88056ee623d..7e942e75f0f 100644 --- a/Mage.Sets/src/mage/cards/k/KrosanBeast.java +++ b/Mage.Sets/src/mage/cards/k/KrosanBeast.java @@ -1,29 +1,26 @@ - package mage.cards.k; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class KrosanBeast extends CardImpl { public KrosanBeast(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}"); this.subtype.add(SubType.SQUIRREL); this.subtype.add(SubType.BEAST); @@ -31,15 +28,10 @@ public final class KrosanBeast extends CardImpl { this.toughness = new MageInt(1); // Threshold - Krosan Beast gets +7/+7 as long as seven or more cards are in your graveyard. - Ability thresholdAbility = new SimpleStaticAbility( - Zone.BATTLEFIELD, - new ConditionalContinuousEffect( - new BoostSourceEffect(7, 7, Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7), - "{this} gets +7/+7 as long as seven or more cards are in your graveyard" - )); - thresholdAbility.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(thresholdAbility); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(7, 7, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "{this} gets +7/+7 as long as seven or more cards are in your graveyard" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private KrosanBeast(final KrosanBeast card) { diff --git a/Mage.Sets/src/mage/cards/k/KrosanRestorer.java b/Mage.Sets/src/mage/cards/k/KrosanRestorer.java index a6f2c4e028b..bc9d0d5640a 100644 --- a/Mage.Sets/src/mage/cards/k/KrosanRestorer.java +++ b/Mage.Sets/src/mage/cards/k/KrosanRestorer.java @@ -1,10 +1,9 @@ package mage.cards.k; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.decorator.ConditionalActivatedAbility; import mage.abilities.effects.common.UntapTargetEffect; @@ -13,32 +12,29 @@ import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; import mage.target.common.TargetLandPermanent; +import java.util.UUID; + /** - * * @author fireshoes */ public final class KrosanRestorer extends CardImpl { public KrosanRestorer(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.DRUID); this.power = new MageInt(1); this.toughness = new MageInt(2); // {tap}: Untap target land. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new UntapTargetEffect(), new TapSourceCost()); + Ability ability = new SimpleActivatedAbility(new UntapTargetEffect(), new TapSourceCost()); ability.addTarget(new TargetLandPermanent()); this.addAbility(ability); // Threshold - {tap}: Untap up to three target lands. Activate this ability only if seven or more cards are in your graveyard. - ability = new ConditionalActivatedAbility(Zone.BATTLEFIELD, - new UntapTargetEffect(), - new TapSourceCost(), - new CardsInControllerGraveyardCondition(7)); + ability = new ConditionalActivatedAbility(new UntapTargetEffect(), new TapSourceCost(), ThresholdCondition.instance); ability.addTarget(new TargetLandPermanent(0, 3)); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/l/LightningSurge.java b/Mage.Sets/src/mage/cards/l/LightningSurge.java index 0f88f15f90a..517f07f2347 100644 --- a/Mage.Sets/src/mage/cards/l/LightningSurge.java +++ b/Mage.Sets/src/mage/cards/l/LightningSurge.java @@ -1,8 +1,6 @@ - package mage.cards.l; -import java.util.UUID; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.Effect; @@ -10,12 +8,13 @@ import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.keyword.FlashbackAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.TimingRule; import mage.target.common.TargetAnyTarget; +import java.util.UUID; + /** - * * @author escplan9 (Derek Monturo - dmontur1 at gmail dot com) */ public final class LightningSurge extends CardImpl { @@ -25,10 +24,12 @@ public final class LightningSurge extends CardImpl { // Lightning Surge deals 4 damage to any target. // Threshold - If seven or more cards are in your graveyard, instead Lightning Surge deals 6 damage to that creature or player and the damage can't be prevented. - Effect effect = new ConditionalOneShotEffect(new DamageTargetEffect(6, false), - new DamageTargetEffect(4), - new CardsInControllerGraveyardCondition(7), - "{this} deals 4 damage to any target.

Threshold — {this} deals 6 damage to that permanent or player and the damage can't be prevented instead if seven or more cards are in your graveyard."); + Effect effect = new ConditionalOneShotEffect( + new DamageTargetEffect(6, false), new DamageTargetEffect(4), + ThresholdCondition.instance, "{this} deals 4 damage to any target.
" + + AbilityWord.THRESHOLD.formatWord() + "If seven or more cards are in your graveyard, " + + "instead {this} deals 6 damage to that permanent or player and the damage can't be prevented" + ); this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addEffect(effect); diff --git a/Mage.Sets/src/mage/cards/m/MaskedGorgon.java b/Mage.Sets/src/mage/cards/m/MaskedGorgon.java index 9949a610b9c..e5641167bac 100644 --- a/Mage.Sets/src/mage/cards/m/MaskedGorgon.java +++ b/Mage.Sets/src/mage/cards/m/MaskedGorgon.java @@ -1,53 +1,61 @@ - package mage.cards.m; -import java.util.UUID; import mage.MageInt; import mage.ObjectColor; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.GainAbilityAllEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.keyword.ProtectionAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.AbilityWord; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; import mage.filter.FilterCard; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.ColorPredicate; +import java.util.UUID; + /** - * * @author LoneFox */ public final class MaskedGorgon extends CardImpl { - private static final FilterCreaturePermanent filter1 = new FilterCreaturePermanent("green creatures and white creatures"); + private static final FilterCreaturePermanent filter1 + = new FilterCreaturePermanent("green creatures and white creatures"); private static final FilterCard filter2 = new FilterCard("Gorgons"); static { - filter1.add(Predicates.or(new ColorPredicate(ObjectColor.GREEN), new ColorPredicate(ObjectColor.WHITE))); + filter1.add(Predicates.or( + new ColorPredicate(ObjectColor.GREEN), + new ColorPredicate(ObjectColor.WHITE) + )); filter2.add(SubType.GORGON.getPredicate()); } public MaskedGorgon(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}"); this.subtype.add(SubType.GORGON); this.power = new MageInt(5); this.toughness = new MageInt(5); // Green creatures and white creatures have protection from Gorgons. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect( - new ProtectionAbility(filter2), Duration.WhileOnBattlefield, filter1))); + this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect( + new ProtectionAbility(filter2), Duration.WhileOnBattlefield, filter1 + ))); + // Threshold - Masked Gorgon has protection from green and from white as long as seven or more cards are in your graveyard. - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new GainAbilitySourceEffect(ProtectionAbility.from(ObjectColor.GREEN, ObjectColor.WHITE), Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - "{this} has protection from green and from white as long as seven or more cards are in your graveyard")); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new GainAbilitySourceEffect( + ProtectionAbility.from(ObjectColor.GREEN, ObjectColor.WHITE), Duration.WhileOnBattlefield + ), ThresholdCondition.instance, "{this} has protection from green and from white " + + "as long as seven or more cards are in your graveyard" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private MaskedGorgon(final MaskedGorgon card) { diff --git a/Mage.Sets/src/mage/cards/m/MetamorphicWurm.java b/Mage.Sets/src/mage/cards/m/MetamorphicWurm.java index 4ca4b41ad0b..a6af6f2d1e5 100644 --- a/Mage.Sets/src/mage/cards/m/MetamorphicWurm.java +++ b/Mage.Sets/src/mage/cards/m/MetamorphicWurm.java @@ -1,29 +1,27 @@ package mage.cards.m; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class MetamorphicWurm extends CardImpl { public MetamorphicWurm(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{G}"); this.subtype.add(SubType.ELEPHANT); this.subtype.add(SubType.WURM); @@ -31,15 +29,10 @@ public final class MetamorphicWurm extends CardImpl { this.toughness = new MageInt(3); // Threshold - Metamorphic Wurm gets +4/+4 as long as seven or more cards are in your graveyard. - Ability thresholdAbility = new SimpleStaticAbility( - Zone.BATTLEFIELD, - new ConditionalContinuousEffect( - new BoostSourceEffect(4, 4, Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7), - "{this} gets +4/+4 as long as seven or more cards are in your graveyard" - )); - thresholdAbility.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(thresholdAbility); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(4, 4, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "{this} gets +4/+4 as long as seven or more cards are in your graveyard" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private MetamorphicWurm(final MetamorphicWurm card) { diff --git a/Mage.Sets/src/mage/cards/m/MindDrillAssailant.java b/Mage.Sets/src/mage/cards/m/MindDrillAssailant.java index 87af282f9d2..2ad8d1a433e 100644 --- a/Mage.Sets/src/mage/cards/m/MindDrillAssailant.java +++ b/Mage.Sets/src/mage/cards/m/MindDrillAssailant.java @@ -3,8 +3,7 @@ package mage.cards.m; import mage.MageInt; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.Condition; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; @@ -23,8 +22,6 @@ import java.util.UUID; */ public final class MindDrillAssailant extends CardImpl { - private static final Condition condition = new CardsInControllerGraveyardCondition(7); - public MindDrillAssailant(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U/B}{U/B}"); @@ -35,8 +32,8 @@ public final class MindDrillAssailant extends CardImpl { // Threshold -- As long as seven or more cards are in your graveyard, Mind Drill Assailant gets +3/+0. this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( - new BoostSourceEffect(3, 0, Duration.WhileOnBattlefield), - condition, "as long as seven or more cards are in your graveyard, {this} gets +3/+0" + new BoostSourceEffect(3, 0, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "as long as seven or more cards are in your graveyard, {this} gets +3/+0" )).setAbilityWord(AbilityWord.THRESHOLD)); // {2}{U/B}: Surveil 1. diff --git a/Mage.Sets/src/mage/cards/m/MysticCrusader.java b/Mage.Sets/src/mage/cards/m/MysticCrusader.java index 4e7cb2e9e4d..ae1084bfb72 100644 --- a/Mage.Sets/src/mage/cards/m/MysticCrusader.java +++ b/Mage.Sets/src/mage/cards/m/MysticCrusader.java @@ -1,12 +1,10 @@ - package mage.cards.m; -import java.util.UUID; import mage.MageInt; import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; @@ -16,18 +14,18 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author cbt33 */ public final class MysticCrusader extends CardImpl { public MysticCrusader(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.NOMAD); this.subtype.add(SubType.MYSTIC); @@ -37,12 +35,16 @@ public final class MysticCrusader extends CardImpl { // Protection from black and from red this.addAbility(ProtectionAbility.from(ObjectColor.BLACK, ObjectColor.RED)); + // Threshold - As long as seven or more cards are in your graveyard, Mystic Crusader gets +1/+1 and has flying. - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} gets +1/+1")); - ability.addEffect(new ConditionalContinuousEffect(new GainAbilitySourceEffect(FlyingAbility.getInstance()), - new CardsInControllerGraveyardCondition(7), "and has flying")); + Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "As long as seven or more cards are in your graveyard, {this} gets +1/+1" + )); + ability.addEffect(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(FlyingAbility.getInstance()), + ThresholdCondition.instance, "and has flying" + )); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/m/MysticEnforcer.java b/Mage.Sets/src/mage/cards/m/MysticEnforcer.java index 70db0f7885b..cb8df497a06 100644 --- a/Mage.Sets/src/mage/cards/m/MysticEnforcer.java +++ b/Mage.Sets/src/mage/cards/m/MysticEnforcer.java @@ -1,12 +1,10 @@ - package mage.cards.m; -import java.util.UUID; import mage.MageInt; import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; @@ -16,18 +14,18 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class MysticEnforcer extends CardImpl { public MysticEnforcer(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.NOMAD); this.subtype.add(SubType.MYSTIC); @@ -37,14 +35,18 @@ public final class MysticEnforcer extends CardImpl { // Protection from black this.addAbility(ProtectionAbility.from(ObjectColor.BLACK)); + // Threshold - As long as seven or more cards are in your graveyard, Mystic Enforcer gets +3/+3 and has flying. - Ability thresholdAbility = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(3, 3, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - " as long as seven or more cards are in your graveyard, {this} gets +3/+3")); - thresholdAbility.addEffect(new ConditionalContinuousEffect(new GainAbilitySourceEffect(FlyingAbility.getInstance()), - new CardsInControllerGraveyardCondition(7), "and has flying")); - thresholdAbility.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(thresholdAbility); + Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(3, 3, Duration.WhileOnBattlefield), ThresholdCondition.instance, + " as long as seven or more cards are in your graveyard, {this} gets +3/+3" + )); + ability.addEffect(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(FlyingAbility.getInstance()), + ThresholdCondition.instance, "and has flying" + )); + ability.setAbilityWord(AbilityWord.THRESHOLD); + this.addAbility(ability); } private MysticEnforcer(final MysticEnforcer card) { diff --git a/Mage.Sets/src/mage/cards/m/MysticFamiliar.java b/Mage.Sets/src/mage/cards/m/MysticFamiliar.java index 35351c5ee57..870720c19df 100644 --- a/Mage.Sets/src/mage/cards/m/MysticFamiliar.java +++ b/Mage.Sets/src/mage/cards/m/MysticFamiliar.java @@ -1,12 +1,10 @@ - package mage.cards.m; -import java.util.UUID; import mage.MageInt; import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; @@ -16,30 +14,34 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author LoneFox */ public final class MysticFamiliar extends CardImpl { public MysticFamiliar(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); this.subtype.add(SubType.BIRD); this.power = new MageInt(1); this.toughness = new MageInt(2); // Flying this.addAbility(FlyingAbility.getInstance()); + // Threshold - As long as seven or more cards are in your graveyard, Mystic Familiar gets +1/+1 and has protection from black. - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} gets +1/+1")); - ability.addEffect(new ConditionalContinuousEffect(new GainAbilitySourceEffect(ProtectionAbility.from(ObjectColor.BLACK)), - new CardsInControllerGraveyardCondition(7), "and has protection from black")); + Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "As long as seven or more cards are in your graveyard, {this} gets +1/+1" + )); + ability.addEffect(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(ProtectionAbility.from(ObjectColor.BLACK)), + ThresholdCondition.instance, "and has protection from black" + )); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/m/MysticPenitent.java b/Mage.Sets/src/mage/cards/m/MysticPenitent.java index 0bf0eef4967..37e88f8b6ac 100644 --- a/Mage.Sets/src/mage/cards/m/MysticPenitent.java +++ b/Mage.Sets/src/mage/cards/m/MysticPenitent.java @@ -1,11 +1,9 @@ - package mage.cards.m; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; @@ -13,20 +11,17 @@ import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.VigilanceAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AbilityWord; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.*; + +import java.util.UUID; /** - * * @author cbt33 */ public final class MysticPenitent extends CardImpl { public MysticPenitent(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.NOMAD); this.subtype.add(SubType.MYSTIC); @@ -36,12 +31,16 @@ public final class MysticPenitent extends CardImpl { // Vigilance this.addAbility(VigilanceAbility.getInstance()); + // Threshold - As long as seven or more cards are in your graveyard, Mystic Penitent gets +1/+1 and has flying. Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} gets +1/+1")); - ability.addEffect(new ConditionalContinuousEffect(new GainAbilitySourceEffect(FlyingAbility.getInstance()), - new CardsInControllerGraveyardCondition(7), "and has flying")); + new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "As long as seven or more cards are in your graveyard, {this} gets +1/+1" + )); + ability.addEffect(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(FlyingAbility.getInstance()), + ThresholdCondition.instance, "and has flying" + )); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/m/MysticVisionary.java b/Mage.Sets/src/mage/cards/m/MysticVisionary.java index 1a2693aa079..d7c6ccdd747 100644 --- a/Mage.Sets/src/mage/cards/m/MysticVisionary.java +++ b/Mage.Sets/src/mage/cards/m/MysticVisionary.java @@ -1,11 +1,8 @@ - package mage.cards.m; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.keyword.FlyingAbility; @@ -14,16 +11,16 @@ import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; + +import java.util.UUID; /** - * * @author cbt33 */ public final class MysticVisionary extends CardImpl { public MysticVisionary(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.NOMAD); this.subtype.add(SubType.MYSTIC); @@ -32,11 +29,10 @@ public final class MysticVisionary extends CardImpl { this.toughness = new MageInt(1); // Threshold - Mystic Visionary has flying as long as seven or more cards are in your graveyard. - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new GainAbilitySourceEffect(FlyingAbility.getInstance()), new CardsInControllerGraveyardCondition(7), - "{this} has flying as long as seven or more cards are in your graveyard.")); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(FlyingAbility.getInstance()), ThresholdCondition.instance, + "{this} has flying as long as seven or more cards are in your graveyard." + )).setAbilityWord(AbilityWord.THRESHOLD)); } private MysticVisionary(final MysticVisionary card) { diff --git a/Mage.Sets/src/mage/cards/m/MysticZealot.java b/Mage.Sets/src/mage/cards/m/MysticZealot.java index a3749382283..b609e7fe724 100644 --- a/Mage.Sets/src/mage/cards/m/MysticZealot.java +++ b/Mage.Sets/src/mage/cards/m/MysticZealot.java @@ -1,11 +1,9 @@ - package mage.cards.m; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; @@ -14,18 +12,18 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author cbt33 */ public final class MysticZealot extends CardImpl { public MysticZealot(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.NOMAD); this.subtype.add(SubType.MYSTIC); @@ -34,11 +32,14 @@ public final class MysticZealot extends CardImpl { this.toughness = new MageInt(4); // Threshold - As long as seven or more cards are in your graveyard, Mystic Zealot gets +1/+1 and has flying. - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} gets +1/+1")); - ability.addEffect(new ConditionalContinuousEffect(new GainAbilitySourceEffect(FlyingAbility.getInstance()), - new CardsInControllerGraveyardCondition(7), "and has flying")); + Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "As long as seven or more cards are in your graveyard, {this} gets +1/+1" + )); + ability.addEffect(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(FlyingAbility.getInstance()), + ThresholdCondition.instance, "and has flying" + )); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/n/NantukoBlightcutter.java b/Mage.Sets/src/mage/cards/n/NantukoBlightcutter.java index 54847ac355f..dd817f836e9 100644 --- a/Mage.Sets/src/mage/cards/n/NantukoBlightcutter.java +++ b/Mage.Sets/src/mage/cards/n/NantukoBlightcutter.java @@ -1,29 +1,23 @@ - package mage.cards.n; -import java.util.UUID; import mage.MageInt; import mage.ObjectColor; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.keyword.ProtectionAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AbilityWord; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Duration; -import mage.constants.TargetController; -import mage.constants.Zone; +import mage.constants.*; import mage.filter.FilterPermanent; import mage.filter.predicate.mageobject.ColorPredicate; +import java.util.UUID; + /** - * * @author LoneFox */ public final class NantukoBlightcutter extends CardImpl { @@ -35,8 +29,10 @@ public final class NantukoBlightcutter extends CardImpl { filter.add(TargetController.OPPONENT.getControllerPredicate()); } + private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter); + public NantukoBlightcutter(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); this.subtype.add(SubType.INSECT); this.subtype.add(SubType.DRUID); this.power = new MageInt(2); @@ -44,13 +40,13 @@ public final class NantukoBlightcutter extends CardImpl { // Protection from black this.addAbility(ProtectionAbility.from(ObjectColor.BLACK)); + // Threshold - Nantuko Blightcutter gets +1/+1 for each black permanent your opponents control as long as seven or more cards are in your graveyard. - PermanentsOnBattlefieldCount count = new PermanentsOnBattlefieldCount(filter); - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(count, count, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - "{this} gets +1/+1 for each black permanent your opponents control as long as seven or more cards are in your graveyard")); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(xValue, xValue, Duration.WhileOnBattlefield), + ThresholdCondition.instance, "{this} gets +1/+1 for each black permanent " + + "your opponents control as long as seven or more cards are in your graveyard" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private NantukoBlightcutter(final NantukoBlightcutter card) { diff --git a/Mage.Sets/src/mage/cards/n/NantukoCalmer.java b/Mage.Sets/src/mage/cards/n/NantukoCalmer.java index 5a00a017a16..71400f8605a 100644 --- a/Mage.Sets/src/mage/cards/n/NantukoCalmer.java +++ b/Mage.Sets/src/mage/cards/n/NantukoCalmer.java @@ -1,12 +1,10 @@ - package mage.cards.n; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; @@ -17,36 +15,36 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; import mage.target.common.TargetEnchantmentPermanent; +import java.util.UUID; + /** - * * @author LoneFox */ public final class NantukoCalmer extends CardImpl { public NantukoCalmer(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{G}"); this.subtype.add(SubType.INSECT); this.subtype.add(SubType.DRUID); this.power = new MageInt(2); this.toughness = new MageInt(3); // {G}, {tap}, Sacrifice Nantuko Calmer: Destroy target enchantment. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new ManaCostsImpl<>("{G}")); + Ability ability = new SimpleActivatedAbility(new DestroyTargetEffect(), new ManaCostsImpl<>("{G}")); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); ability.addTarget(new TargetEnchantmentPermanent()); this.addAbility(ability); + // Threshold - Nantuko Calmer gets +1/+1 as long as seven or more cards are in your graveyard. - ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - "{this} gets +1/+1 as long as seven or more cards are in your graveyard")); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "{this} gets +1/+1 as long as seven or more cards are in your graveyard" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private NantukoCalmer(final NantukoCalmer card) { diff --git a/Mage.Sets/src/mage/cards/n/NantukoMonastery.java b/Mage.Sets/src/mage/cards/n/NantukoMonastery.java index f94c47010cc..2d5d06dff11 100644 --- a/Mage.Sets/src/mage/cards/n/NantukoMonastery.java +++ b/Mage.Sets/src/mage/cards/n/NantukoMonastery.java @@ -1,10 +1,7 @@ - package mage.cards.n; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalActivatedAbility; import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; @@ -14,28 +11,28 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; import mage.game.permanent.token.TokenImpl; +import java.util.UUID; + /** - * * @author anonymous */ public final class NantukoMonastery extends CardImpl { public NantukoMonastery(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()); + // Threshold - {G}{W}: Nantuko Monastery becomes a 4/4 green and white Insect Monk creature with first strike until end of turn. It's still a land. Activate this ability only if seven or more cards are in your graveyard. - Ability ability = new ConditionalActivatedAbility(Zone.BATTLEFIELD, new BecomesCreatureSourceEffect( - new NantukoMonasteryToken(), CardType.LAND, Duration.EndOfTurn), new ManaCostsImpl<>("{G}{W}"), - new CardsInControllerGraveyardCondition(7)); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + this.addAbility(new ConditionalActivatedAbility(new BecomesCreatureSourceEffect( + new NantukoMonasteryToken(), CardType.LAND, Duration.EndOfTurn), + new ManaCostsImpl<>("{G}{W}"), ThresholdCondition.instance + ).setAbilityWord(AbilityWord.THRESHOLD)); } private NantukoMonastery(final NantukoMonastery card) { @@ -61,6 +58,7 @@ class NantukoMonasteryToken extends TokenImpl { toughness = new MageInt(4); this.addAbility(FirstStrikeAbility.getInstance()); } + private NantukoMonasteryToken(final NantukoMonasteryToken token) { super(token); } diff --git a/Mage.Sets/src/mage/cards/n/NimbleMongoose.java b/Mage.Sets/src/mage/cards/n/NimbleMongoose.java index c6d6868b005..b59040924d5 100644 --- a/Mage.Sets/src/mage/cards/n/NimbleMongoose.java +++ b/Mage.Sets/src/mage/cards/n/NimbleMongoose.java @@ -1,11 +1,8 @@ - package mage.cards.n; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.keyword.ShroudAbility; @@ -13,18 +10,18 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author jonubuu */ public final class NimbleMongoose extends CardImpl { public NimbleMongoose(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}"); this.subtype.add(SubType.MONGOOSE); this.power = new MageInt(1); @@ -32,13 +29,12 @@ public final class NimbleMongoose extends CardImpl { // Shroud this.addAbility(ShroudAbility.getInstance()); - // Threshold - Nimble Mongoose gets +2/+2 as long as seven or more cards are in your graveyard. - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - "{this} gets +2/+2 as long as seven or more cards are in your graveyard")); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + // Threshold - Nimble Mongoose gets +2/+2 as long as seven or more cards are in your graveyard. + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "{this} gets +2/+2 as long as seven or more cards are in your graveyard" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private NimbleMongoose(final NimbleMongoose card) { diff --git a/Mage.Sets/src/mage/cards/n/NomadDecoy.java b/Mage.Sets/src/mage/cards/n/NomadDecoy.java index 665dc0f6a1d..ae6c27590a6 100644 --- a/Mage.Sets/src/mage/cards/n/NomadDecoy.java +++ b/Mage.Sets/src/mage/cards/n/NomadDecoy.java @@ -1,11 +1,9 @@ - package mage.cards.n; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalActivatedAbility; @@ -15,18 +13,17 @@ import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; import mage.target.common.TargetCreaturePermanent; -/** +import java.util.UUID; - * +/** * @author cbt33 */ public final class NomadDecoy extends CardImpl { public NomadDecoy(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.NOMAD); @@ -34,16 +31,15 @@ public final class NomadDecoy extends CardImpl { this.toughness = new MageInt(2); // {W}, {tap}: Tap target creature. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TapTargetEffect(), new ManaCostsImpl<>("{W}")); + Ability ability = new SimpleActivatedAbility(new TapTargetEffect(), new ManaCostsImpl<>("{W}")); ability.addTarget(new TargetCreaturePermanent()); ability.addCost(new TapSourceCost()); this.addAbility(ability); // Threshold - {W}{W}, {T}: Tap two target creatures. Activate this ability only if seven or more cards are in your graveyard. - Ability thresholdAbility = new ConditionalActivatedAbility(Zone.BATTLEFIELD, - new TapTargetEffect(), - new ManaCostsImpl<>("{W}{W}"), - new CardsInControllerGraveyardCondition(7)); + Ability thresholdAbility = new ConditionalActivatedAbility( + new TapTargetEffect(), new ManaCostsImpl<>("{W}{W}"), ThresholdCondition.instance + ); thresholdAbility.addCost(new TapSourceCost()); thresholdAbility.addTarget(new TargetCreaturePermanent(2)); thresholdAbility.setAbilityWord(AbilityWord.THRESHOLD); diff --git a/Mage.Sets/src/mage/cards/n/NomadStadium.java b/Mage.Sets/src/mage/cards/n/NomadStadium.java index 4c82db9512b..5bca3530f0a 100644 --- a/Mage.Sets/src/mage/cards/n/NomadStadium.java +++ b/Mage.Sets/src/mage/cards/n/NomadStadium.java @@ -1,9 +1,7 @@ - package mage.cards.n; -import java.util.UUID; import mage.abilities.Ability; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; @@ -15,16 +13,16 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.Zone; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class NomadStadium extends CardImpl { public NomadStadium(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.LAND},""); + super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); // {tap}: Add {W}. Nomad Stadium deals 1 damage to you. Ability manaAbility = new WhiteManaAbility(); @@ -32,10 +30,9 @@ public final class NomadStadium extends CardImpl { this.addAbility(manaAbility); // Threshold - {W}, {tap}, Sacrifice Nomad Stadium: You gain 4 life. Activate this ability only if seven or more cards are in your graveyard. - Ability thresholdAbility = new ConditionalActivatedAbility(Zone.BATTLEFIELD, - new GainLifeEffect(4), - new ManaCostsImpl<>("{W}"), - new CardsInControllerGraveyardCondition(7)); + Ability thresholdAbility = new ConditionalActivatedAbility( + new GainLifeEffect(4), new ManaCostsImpl<>("{W}"), ThresholdCondition.instance + ); thresholdAbility.addCost(new TapSourceCost()); thresholdAbility.addCost(new SacrificeSourceCost()); thresholdAbility.setAbilityWord(AbilityWord.THRESHOLD); diff --git a/Mage.Sets/src/mage/cards/n/NutCollector.java b/Mage.Sets/src/mage/cards/n/NutCollector.java index ca2cc9515fd..8421dfda0e7 100644 --- a/Mage.Sets/src/mage/cards/n/NutCollector.java +++ b/Mage.Sets/src/mage/cards/n/NutCollector.java @@ -1,12 +1,10 @@ - package mage.cards.n; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.continuous.BoostAllEffect; @@ -16,8 +14,9 @@ import mage.constants.*; import mage.filter.common.FilterCreaturePermanent; import mage.game.permanent.token.SquirrelToken; +import java.util.UUID; + /** - * * @author cbt33 */ public final class NutCollector extends CardImpl { @@ -29,7 +28,7 @@ public final class NutCollector extends CardImpl { } public NutCollector(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{G}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.DRUID); @@ -37,11 +36,15 @@ public final class NutCollector extends CardImpl { this.toughness = new MageInt(1); // At the beginning of your upkeep, you may create a 1/1 green Squirrel creature token. - this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new SquirrelToken()), TargetController.YOU, true)); + this.addAbility(new BeginningOfUpkeepTriggeredAbility( + new CreateTokenEffect(new SquirrelToken()), TargetController.YOU, true + )); + // Threshold - Squirrel creatures get +2/+2 as long as seven or more cards are in your graveyard. - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, - new ConditionalContinuousEffect(new BoostAllEffect(2, 2, Duration.WhileOnBattlefield, filter, false), - new CardsInControllerGraveyardCondition(7), "Squirrel creatures get +2/+2 as long as seven or more cards are in your graveyard")); + Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostAllEffect(2, 2, Duration.WhileOnBattlefield, filter, false), + ThresholdCondition.instance, "Squirrel creatures get +2/+2 as long as seven or more cards are in your graveyard" + )); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/o/OtarianJuggernaut.java b/Mage.Sets/src/mage/cards/o/OtarianJuggernaut.java index 9c04450d09b..33debc950d3 100644 --- a/Mage.Sets/src/mage/cards/o/OtarianJuggernaut.java +++ b/Mage.Sets/src/mage/cards/o/OtarianJuggernaut.java @@ -4,7 +4,7 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleEvasionAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.decorator.ConditionalRequirementEffect; import mage.abilities.effects.common.combat.AttacksIfAbleSourceEffect; @@ -12,7 +12,10 @@ import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesSourceEffect import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.AbilityWord; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; import mage.filter.common.FilterCreaturePermanent; import java.util.UUID; @@ -39,14 +42,12 @@ public final class OtarianJuggernaut extends CardImpl { this.addAbility(new SimpleEvasionAbility(new CantBeBlockedByCreaturesSourceEffect(filter, Duration.WhileOnBattlefield))); // Threshold - As long as seven or more cards are in your graveyard, Otarian Juggernaut gets +3/+0 and attacks each combat if able. - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(3, 0, Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7), + Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(3, 0, Duration.WhileOnBattlefield), ThresholdCondition.instance, "As long as seven or more cards are in your graveyard, {this} gets +3/+0")); ability.addEffect(new ConditionalRequirementEffect( new AttacksIfAbleSourceEffect(Duration.WhileOnBattlefield, true), - new CardsInControllerGraveyardCondition(7), - "and attacks each combat if able" + ThresholdCondition.instance, "and attacks each combat if able" )); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/p/PardicArsonist.java b/Mage.Sets/src/mage/cards/p/PardicArsonist.java index c529b5bfa8f..ca73e9a1fe3 100644 --- a/Mage.Sets/src/mage/cards/p/PardicArsonist.java +++ b/Mage.Sets/src/mage/cards/p/PardicArsonist.java @@ -1,12 +1,10 @@ - package mage.cards.p; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; @@ -15,31 +13,30 @@ import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; import mage.target.common.TargetAnyTarget; +import java.util.UUID; + /** - * * @author LoneFox */ public final class PardicArsonist extends CardImpl { public PardicArsonist(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{R}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.BARBARIAN); this.power = new MageInt(3); this.toughness = new MageInt(3); // Threshold - As long as seven or more cards are in your graveyard, Pardic Arsonist has "When Pardic Arsonist enters the battlefield, it deals 3 damage to any target." - Ability gainedAbility = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(3, "it")); - gainedAbility.addTarget(new TargetAnyTarget()); - - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new GainAbilitySourceEffect(gainedAbility), new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} has \"When {this} enters the battlefield, it deals 3 damage to any target.\"")); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + Ability ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(3, "it")); + ability.addTarget(new TargetAnyTarget()); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(ability), ThresholdCondition.instance, "As long as " + + "seven or more cards are in your graveyard, {this} has \"When {this} " + + "enters the battlefield, it deals 3 damage to any target.\"" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private PardicArsonist(final PardicArsonist card) { diff --git a/Mage.Sets/src/mage/cards/p/PatriarchsDesire.java b/Mage.Sets/src/mage/cards/p/PatriarchsDesire.java index ce4733b56e8..77295768e36 100644 --- a/Mage.Sets/src/mage/cards/p/PatriarchsDesire.java +++ b/Mage.Sets/src/mage/cards/p/PatriarchsDesire.java @@ -1,52 +1,42 @@ - package mage.cards.p; -import java.util.UUID; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AbilityWord; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.Zone; +import mage.constants.*; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author cbt33 */ public final class PatriarchsDesire extends CardImpl { public PatriarchsDesire(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}"); this.subtype.add(SubType.AURA); - // Enchant creature TargetPermanent auraTarget = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); - Ability ability = new EnchantAbility(auraTarget); - this.addAbility(ability); + this.addAbility(new EnchantAbility(auraTarget)); // Enchanted creature gets +2/-2. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, -2, Duration.WhileOnBattlefield))); + this.addAbility(new SimpleStaticAbility(new BoostEnchantedEffect(2, -2))); // Threshold - Enchanted creature gets an additional +2/-2 as long as seven or more cards are in your graveyard. - ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostEnchantedEffect(2, -2, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - "Enchanted creature gets an additional +2/-2 as long as seven or more cards are in your graveyard.")); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostEnchantedEffect(2, -2, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "enchanted creature gets an additional +2/-2 as long as seven or more cards are in your graveyard." + )).setAbilityWord(AbilityWord.THRESHOLD)); } private PatriarchsDesire(final PatriarchsDesire card) { diff --git a/Mage.Sets/src/mage/cards/p/PossessedAven.java b/Mage.Sets/src/mage/cards/p/PossessedAven.java index 30fcbadd80a..8c85263792a 100644 --- a/Mage.Sets/src/mage/cards/p/PossessedAven.java +++ b/Mage.Sets/src/mage/cards/p/PossessedAven.java @@ -1,17 +1,14 @@ - package mage.cards.p; -import java.util.UUID; import mage.MageInt; import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalContinuousEffect; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.continuous.BecomesColorSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; @@ -21,15 +18,15 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.ColorPredicate; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author LoneFox */ public final class PossessedAven extends CardImpl { @@ -41,7 +38,7 @@ public final class PossessedAven extends CardImpl { } public PossessedAven(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}{U}"); this.subtype.add(SubType.BIRD); this.subtype.add(SubType.SOLDIER); this.subtype.add(SubType.HORROR); @@ -50,22 +47,23 @@ public final class PossessedAven extends CardImpl { // Flying this.addAbility(FlyingAbility.getInstance()); + // Threshold - As long as seven or more cards are in your graveyard, Possessed Aven gets +1/+1, is black, and has "{2}{B}, {tap}: Destroy target blue creature." - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} gets +1/+1")); - - Effect effect = new ConditionalContinuousEffect(new BecomesColorSourceEffect(ObjectColor.BLACK, Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7), ", is black"); - ability.addEffect(effect); - - Ability gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new ManaCostsImpl<>("{2}{B}")); + Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "As long as seven or more cards are in your graveyard, {this} gets +1/+1" + )); + ability.addEffect(new ConditionalContinuousEffect( + new BecomesColorSourceEffect(ObjectColor.BLACK, Duration.WhileOnBattlefield), + ThresholdCondition.instance, ", is black" + )); + Ability gainedAbility = new SimpleActivatedAbility(new DestroyTargetEffect(), new ManaCostsImpl<>("{2}{B}")); gainedAbility.addCost(new TapSourceCost()); gainedAbility.addTarget(new TargetCreaturePermanent(filter)); - effect = new ConditionalContinuousEffect(new GainAbilitySourceEffect(gainedAbility), - new CardsInControllerGraveyardCondition(7), ", and has \"{2}{B}, {T}: Destroy target blue creature.\""); - ability.addEffect(effect); - + ability.addEffect(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(gainedAbility), ThresholdCondition.instance, + ", and has \"{2}{B}, {T}: Destroy target blue creature.\"" + )); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/p/PossessedBarbarian.java b/Mage.Sets/src/mage/cards/p/PossessedBarbarian.java index 7e0796082df..c19e6aabca8 100644 --- a/Mage.Sets/src/mage/cards/p/PossessedBarbarian.java +++ b/Mage.Sets/src/mage/cards/p/PossessedBarbarian.java @@ -1,17 +1,14 @@ - package mage.cards.p; -import java.util.UUID; import mage.MageInt; import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalContinuousEffect; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.continuous.BecomesColorSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; @@ -21,15 +18,15 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.ColorPredicate; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author LoneFox */ public final class PossessedBarbarian extends CardImpl { @@ -41,7 +38,7 @@ public final class PossessedBarbarian extends CardImpl { } public PossessedBarbarian(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{R}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.BARBARIAN); this.subtype.add(SubType.HORROR); @@ -50,22 +47,24 @@ public final class PossessedBarbarian extends CardImpl { // First strike this.addAbility(FirstStrikeAbility.getInstance()); + // Threshold - As long as seven or more cards are in your graveyard, Possessed Barbarian gets +1/+1, is black, and has "{2}{B}, {tap}: Destroy target red creature." - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} gets +1/+1")); + Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "As long as seven or more cards are in your graveyard, {this} gets +1/+1" + )); - Effect effect = new ConditionalContinuousEffect(new BecomesColorSourceEffect(ObjectColor.BLACK, Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7), ", is black"); - ability.addEffect(effect); - - Ability gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new ManaCostsImpl<>("{2}{B}")); + ability.addEffect(new ConditionalContinuousEffect( + new BecomesColorSourceEffect(ObjectColor.BLACK, Duration.WhileOnBattlefield), + ThresholdCondition.instance, ", is black" + )); + Ability gainedAbility = new SimpleActivatedAbility(new DestroyTargetEffect(), new ManaCostsImpl<>("{2}{B}")); gainedAbility.addCost(new TapSourceCost()); gainedAbility.addTarget(new TargetCreaturePermanent(filter)); - effect = new ConditionalContinuousEffect(new GainAbilitySourceEffect(gainedAbility), - new CardsInControllerGraveyardCondition(7), ", and has \"{2}{B}, {T}: Destroy target red creature.\""); - ability.addEffect(effect); - + ability.addEffect(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(gainedAbility), ThresholdCondition.instance, + ", and has \"{2}{B}, {T}: Destroy target red creature.\"" + )); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/p/PossessedCentaur.java b/Mage.Sets/src/mage/cards/p/PossessedCentaur.java index 7cd4bdd00cf..f35ad616eca 100644 --- a/Mage.Sets/src/mage/cards/p/PossessedCentaur.java +++ b/Mage.Sets/src/mage/cards/p/PossessedCentaur.java @@ -1,17 +1,14 @@ - package mage.cards.p; -import java.util.UUID; import mage.MageInt; import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalContinuousEffect; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.continuous.BecomesColorSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; @@ -21,15 +18,15 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.ColorPredicate; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author LoneFox */ public final class PossessedCentaur extends CardImpl { @@ -41,7 +38,7 @@ public final class PossessedCentaur extends CardImpl { } public PossessedCentaur(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{G}"); this.subtype.add(SubType.CENTAUR); this.subtype.add(SubType.HORROR); this.power = new MageInt(3); @@ -49,22 +46,23 @@ public final class PossessedCentaur extends CardImpl { // Trample this.addAbility(TrampleAbility.getInstance()); + // Threshold - As long as seven or more cards are in your graveyard, Possessed Centaur gets +1/+1, is black, and has "{2}{B}, {tap}: Destroy target green creature." - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} gets +1/+1")); - - Effect effect = new ConditionalContinuousEffect(new BecomesColorSourceEffect(ObjectColor.BLACK, Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7), ", is black"); - ability.addEffect(effect); - - Ability gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new ManaCostsImpl<>("{2}{B}")); + Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "As long as seven or more cards are in your graveyard, {this} gets +1/+1" + )); + ability.addEffect(new ConditionalContinuousEffect( + new BecomesColorSourceEffect(ObjectColor.BLACK, Duration.WhileOnBattlefield), + ThresholdCondition.instance, ", is black" + )); + Ability gainedAbility = new SimpleActivatedAbility(new DestroyTargetEffect(), new ManaCostsImpl<>("{2}{B}")); gainedAbility.addCost(new TapSourceCost()); gainedAbility.addTarget(new TargetCreaturePermanent(filter)); - effect = new ConditionalContinuousEffect(new GainAbilitySourceEffect(gainedAbility), - new CardsInControllerGraveyardCondition(7), ", and has \"{2}{B}, {T}: Destroy target green creature.\""); - ability.addEffect(effect); - + ability.addEffect(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(gainedAbility), ThresholdCondition.instance, + ", and has \"{2}{B}, {T}: Destroy target green creature.\"" + )); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/p/PossessedNomad.java b/Mage.Sets/src/mage/cards/p/PossessedNomad.java index 6788d864e7a..2d3523f34c5 100644 --- a/Mage.Sets/src/mage/cards/p/PossessedNomad.java +++ b/Mage.Sets/src/mage/cards/p/PossessedNomad.java @@ -1,17 +1,14 @@ - package mage.cards.p; -import java.util.UUID; import mage.MageInt; import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalContinuousEffect; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.continuous.BecomesColorSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; @@ -21,15 +18,15 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.ColorPredicate; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author LoneFox */ public final class PossessedNomad extends CardImpl { @@ -41,7 +38,7 @@ public final class PossessedNomad extends CardImpl { } public PossessedNomad(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.NOMAD); this.subtype.add(SubType.HORROR); @@ -50,22 +47,23 @@ public final class PossessedNomad extends CardImpl { // Vigilance this.addAbility(VigilanceAbility.getInstance()); + // Threshold - As long as seven or more cards are in your graveyard, Possessed Nomad gets +1/+1, is black, and has "{2}{B}, {tap}: Destroy target white creature." - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} gets +1/+1")); - - Effect effect = new ConditionalContinuousEffect(new BecomesColorSourceEffect(ObjectColor.BLACK, Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7), ", is black"); - ability.addEffect(effect); - - Ability gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new ManaCostsImpl<>("{2}{B}")); + Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "As long as seven or more cards are in your graveyard, {this} gets +1/+1" + )); + ability.addEffect(new ConditionalContinuousEffect( + new BecomesColorSourceEffect(ObjectColor.BLACK, Duration.WhileOnBattlefield), + ThresholdCondition.instance, ", is black" + )); + Ability gainedAbility = new SimpleActivatedAbility(new DestroyTargetEffect(), new ManaCostsImpl<>("{2}{B}")); gainedAbility.addCost(new TapSourceCost()); gainedAbility.addTarget(new TargetCreaturePermanent(filter)); - effect = new ConditionalContinuousEffect(new GainAbilitySourceEffect(gainedAbility), - new CardsInControllerGraveyardCondition(7), ", and has \"{2}{B}, {T}: Destroy target white creature.\""); - ability.addEffect(effect); - + ability.addEffect(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(gainedAbility), ThresholdCondition.instance, + ", and has \"{2}{B}, {T}: Destroy target white creature.\"" + )); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/p/PutridImp.java b/Mage.Sets/src/mage/cards/p/PutridImp.java index f84fca43084..7c1c19f52de 100644 --- a/Mage.Sets/src/mage/cards/p/PutridImp.java +++ b/Mage.Sets/src/mage/cards/p/PutridImp.java @@ -1,16 +1,13 @@ - package mage.cards.p; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.DiscardCardCost; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.decorator.ConditionalRestrictionEffect; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.combat.CantBlockSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; @@ -19,18 +16,18 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author Plopman */ public final class PutridImp extends CardImpl { public PutridImp(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}"); this.subtype.add(SubType.ZOMBIE); this.subtype.add(SubType.IMP); @@ -38,15 +35,18 @@ public final class PutridImp extends CardImpl { this.toughness = new MageInt(1); // Discard a card: Putrid Imp gains flying until end of turn. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), new DiscardCardCost())); + this.addAbility(new SimpleActivatedAbility(new GainAbilitySourceEffect( + FlyingAbility.getInstance(), Duration.EndOfTurn + ), new DiscardCardCost())); + // Threshold - As long as seven or more cards are in your graveyard, Putrid Imp gets +1/+1 and can't block. - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} gets +1/+1")); - Effect effect = new ConditionalRestrictionEffect(new CantBlockSourceEffect(Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7)); - effect.setText("and can't block"); - ability.addEffect(effect); + Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "As long as seven or more cards are in your graveyard, {this} gets +1/+1" + )); + ability.addEffect(new ConditionalRestrictionEffect( + new CantBlockSourceEffect(Duration.WhileOnBattlefield), ThresholdCondition.instance + ).setText("and can't block")); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/r/RancidEarth.java b/Mage.Sets/src/mage/cards/r/RancidEarth.java index a9cf7b4cc31..4f100e27df0 100644 --- a/Mage.Sets/src/mage/cards/r/RancidEarth.java +++ b/Mage.Sets/src/mage/cards/r/RancidEarth.java @@ -1,38 +1,40 @@ - package mage.cards.r; -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalOneShotEffect; -import mage.abilities.effects.Effect; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.DamageEverythingEffect; +import mage.abilities.effects.common.DamageAllEffect; +import mage.abilities.effects.common.DamagePlayersEffect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.Outcome; -import mage.game.Game; +import mage.filter.StaticFilters; import mage.target.common.TargetLandPermanent; +import java.util.UUID; + /** - * * @author anonymous */ public final class RancidEarth extends CardImpl { public RancidEarth(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{1}{B}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{B}{B}"); // Destroy target land. + this.getSpellAbility().addEffect(new DestroyTargetEffect()); + this.getSpellAbility().addTarget(new TargetLandPermanent()); + // Threshold - If seven or more cards are in your graveyard, instead destroy that land and Rancid Earth deals 1 damage to each creature and each player. this.getSpellAbility().addEffect(new ConditionalOneShotEffect( - new RancidEarthEffect(), - new DestroyTargetEffect(), - new CardsInControllerGraveyardCondition(7), - "Destroy target land.

Threshold — If seven or more cards are in your graveyard, instead destroy that land and Rancid Earth deals 1 damage to each creature and each player.")); - this.getSpellAbility().addTarget(new TargetLandPermanent()); + new DamageAllEffect(1, StaticFilters.FILTER_PERMANENT_CREATURE), + ThresholdCondition.instance, "
" + AbilityWord.THRESHOLD.formatWord() + "If seven or more " + + "cards are in your graveyard, instead destroy that land and {this} deals 1 damage to each creature" + )); + this.getSpellAbility().addEffect(new ConditionalOneShotEffect( + new DamagePlayersEffect(1), ThresholdCondition.instance, "and each player" + )); } private RancidEarth(final RancidEarth card) { @@ -44,27 +46,3 @@ public final class RancidEarth extends CardImpl { return new RancidEarth(this); } } - -class RancidEarthEffect extends OneShotEffect { - - RancidEarthEffect() { - super(Outcome.DestroyPermanent); - this.staticText = "destroy that land and Rancid Earth deals 1 damage to each creature and each player"; - } - - private RancidEarthEffect(final RancidEarthEffect effect) { - super(effect); - } - - @Override - public RancidEarthEffect copy() { - return new RancidEarthEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Effect effect1 = new DestroyTargetEffect("destroy that land"); - effect1.apply(game, source); - return new DamageEverythingEffect(1).apply(game, source); - } -} diff --git a/Mage.Sets/src/mage/cards/r/RebornHero.java b/Mage.Sets/src/mage/cards/r/RebornHero.java index ceaf07f5b33..7909cda325c 100644 --- a/Mage.Sets/src/mage/cards/r/RebornHero.java +++ b/Mage.Sets/src/mage/cards/r/RebornHero.java @@ -1,27 +1,24 @@ - package mage.cards.r; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.DiesSourceTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.ReturnSourceFromGraveyardToBattlefieldEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; -import mage.constants.SubType; import mage.abilities.keyword.VigilanceAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.Zone; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author TheElk801 */ public final class RebornHero extends CardImpl { @@ -38,20 +35,13 @@ public final class RebornHero extends CardImpl { this.addAbility(VigilanceAbility.getInstance()); // Threshold - As long as seven or more cards are in your graveyard, Reborn Hero has "When Reborn Hero dies, you may pay {W}{W}. If you do, return Reborn Hero to the battlefield under your control." - Ability ability = new SimpleStaticAbility( - Zone.BATTLEFIELD, - new ConditionalContinuousEffect( - new GainAbilitySourceEffect(new DiesSourceTriggeredAbility(new DoIfCostPaid( - new ReturnSourceFromGraveyardToBattlefieldEffect(), new ManaCostsImpl<>("{W}{W}") - ))), - new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, " - + "{this} has \"When {this} dies, you may pay {W}{W}. " - + "If you do, return {this} to the battlefield under your control.\"" - ) - ); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(new DiesSourceTriggeredAbility(new DoIfCostPaid( + new ReturnSourceFromGraveyardToBattlefieldEffect(), new ManaCostsImpl<>("{W}{W}") + ))), ThresholdCondition.instance, "As long as seven or more cards are in " + + "your graveyard, {this} has \"When {this} dies, you may pay {W}{W}. If you do, " + + "return {this} to the battlefield under your control.\"" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private RebornHero(final RebornHero card) { diff --git a/Mage.Sets/src/mage/cards/r/RepentantVampire.java b/Mage.Sets/src/mage/cards/r/RepentantVampire.java index 80b5c7dce23..1cfb1d451f9 100644 --- a/Mage.Sets/src/mage/cards/r/RepentantVampire.java +++ b/Mage.Sets/src/mage/cards/r/RepentantVampire.java @@ -1,14 +1,12 @@ - package mage.cards.r; -import java.util.UUID; import mage.MageInt; import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.common.DealtDamageAndDiedTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.DestroyTargetEffect; @@ -20,27 +18,28 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; import mage.counters.CounterType; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.ColorPredicate; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author cbt33, Nantuko (Sengir Vampire) */ public final class RepentantVampire extends CardImpl { private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("black creature"); + static { filter.add(new ColorPredicate(ObjectColor.BLACK)); } public RepentantVampire(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}{B}"); this.subtype.add(SubType.VAMPIRE); this.power = new MageInt(3); @@ -48,19 +47,23 @@ public final class RepentantVampire extends CardImpl { // Flying this.addAbility(FlyingAbility.getInstance()); + // Whenever a creature dealt damage by Repentant Vampire this turn dies, put a +1/+1 counter on Repentant Vampire. - this.addAbility(new DealtDamageAndDiedTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false)); + this.addAbility(new DealtDamageAndDiedTriggeredAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false + )); + // Threshold - As long as seven or more cards are in your graveyard, Repentant Vampire is white and has "{tap}: Destroy target black creature." - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( + Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( new BecomesColorSourceEffect(ObjectColor.WHITE, Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} is white")); - Ability gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new TapSourceCost()); + ThresholdCondition.instance, "As long as seven or more cards are in your graveyard, {this} is white" + )); + Ability gainedAbility = new SimpleActivatedAbility(new DestroyTargetEffect(), new TapSourceCost()); gainedAbility.addTarget(new TargetCreaturePermanent(filter)); ability.addEffect(new ConditionalContinuousEffect( new GainAbilitySourceEffect(gainedAbility, Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7), - "and has \"{T}: Destroy target black creature.\"")); + ThresholdCondition.instance, "and has \"{T}: Destroy target black creature.\"" + )); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SetonsDesire.java b/Mage.Sets/src/mage/cards/s/SetonsDesire.java index b6c919ba85e..7b6f1e4cac3 100644 --- a/Mage.Sets/src/mage/cards/s/SetonsDesire.java +++ b/Mage.Sets/src/mage/cards/s/SetonsDesire.java @@ -1,54 +1,42 @@ - package mage.cards.s; -import java.util.UUID; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalRequirementEffect; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.combat.MustBeBlockedByAllAttachedEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AbilityWord; -import mage.constants.AttachmentType; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.Zone; +import mage.constants.*; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author fireshoes */ public final class SetonsDesire extends CardImpl { public SetonsDesire(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}"); this.subtype.add(SubType.AURA); // Enchant creature TargetPermanent auraTarget = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - Ability ability = new EnchantAbility(auraTarget); - this.addAbility(ability); + this.addAbility(new EnchantAbility(auraTarget)); // Enchanted creature gets +2/+2. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 2, Duration.WhileOnBattlefield))); + this.addAbility(new SimpleStaticAbility(new BoostEnchantedEffect(2, 2))); // Threshold - As long as seven or more cards are in your graveyard, all creatures able to block enchanted creature do so. - Effect effect = new ConditionalRequirementEffect(new MustBeBlockedByAllAttachedEffect(AttachmentType.AURA), new CardsInControllerGraveyardCondition(7)); - effect.setText("As long as seven or more cards are in your graveyard, all creatures able to block enchanted creature do so"); - ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + this.addAbility(new SimpleStaticAbility(new ConditionalRequirementEffect( + new MustBeBlockedByAllAttachedEffect(AttachmentType.AURA), ThresholdCondition.instance + ).setText("As long as seven or more cards are in your graveyard, all creatures able to block enchanted creature do so")).setAbilityWord(AbilityWord.THRESHOLD)); } private SetonsDesire(final SetonsDesire card) { diff --git a/Mage.Sets/src/mage/cards/s/SetonsScout.java b/Mage.Sets/src/mage/cards/s/SetonsScout.java index 44c4f0de4e9..747cac21439 100644 --- a/Mage.Sets/src/mage/cards/s/SetonsScout.java +++ b/Mage.Sets/src/mage/cards/s/SetonsScout.java @@ -1,11 +1,8 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.keyword.ReachAbility; @@ -13,18 +10,18 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author LoneFox */ public final class SetonsScout extends CardImpl { public SetonsScout(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); this.subtype.add(SubType.CENTAUR); this.subtype.add(SubType.DRUID); this.subtype.add(SubType.SCOUT); @@ -34,12 +31,12 @@ public final class SetonsScout extends CardImpl { // Reach this.addAbility(ReachAbility.getInstance()); + // Threshold - Seton's Scout gets +2/+2 as long as seven or more cards are in your graveyard. - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} gets +2/+2")); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "As long as seven or more cards are in your graveyard, {this} gets +2/+2" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private SetonsScout(final SetonsScout card) { diff --git a/Mage.Sets/src/mage/cards/s/ShowerOfCoals.java b/Mage.Sets/src/mage/cards/s/ShowerOfCoals.java index dc5fdcb57f7..661ca44e5ca 100644 --- a/Mage.Sets/src/mage/cards/s/ShowerOfCoals.java +++ b/Mage.Sets/src/mage/cards/s/ShowerOfCoals.java @@ -1,18 +1,18 @@ package mage.cards.s; -import java.util.UUID; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalOneShotEffect; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.DamageTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; import mage.target.common.TargetAnyTarget; +import java.util.UUID; + /** - * * @author cbt33, LevelX2 (Kirtar's Wrath) */ public final class ShowerOfCoals extends CardImpl { @@ -22,13 +22,13 @@ public final class ShowerOfCoals extends CardImpl { // Shower of Coals deals 2 damage to each of up to three target creatures and/or players. // Threshold - Shower of Coals deals 4 damage to each of those creatures and/or players instead if seven or more cards are in your graveyard. - Effect effect = new ConditionalOneShotEffect(new DamageTargetEffect(4), - new DamageTargetEffect(2), - new CardsInControllerGraveyardCondition(7), - "{this} deals 2 damage to each of up to three targets.

Threshold — {this} deals 4 damage to each of those permanents and/or players instead if seven or more cards are in your graveyard."); + this.getSpellAbility().addEffect(new ConditionalOneShotEffect( + new DamageTargetEffect(4), new DamageTargetEffect(2), + ThresholdCondition.instance, "{this} deals 2 damage to each of up to three targets.
" + + AbilityWord.THRESHOLD.formatWord() + "{this} deals 4 damage to each of those permanents " + + "and/or players instead if seven or more cards are in your graveyard." + )); this.getSpellAbility().addTarget(new TargetAnyTarget(0, 3)); - this.getSpellAbility().addEffect(effect); - } private ShowerOfCoals(final ShowerOfCoals card) { diff --git a/Mage.Sets/src/mage/cards/s/SilverSeraph.java b/Mage.Sets/src/mage/cards/s/SilverSeraph.java index e17d2334f2a..49737b161e0 100644 --- a/Mage.Sets/src/mage/cards/s/SilverSeraph.java +++ b/Mage.Sets/src/mage/cards/s/SilverSeraph.java @@ -1,11 +1,8 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.keyword.FlyingAbility; @@ -13,30 +10,30 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author LoneFox */ public final class SilverSeraph extends CardImpl { public SilverSeraph(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{W}{W}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{W}{W}{W}"); this.subtype.add(SubType.ANGEL); this.power = new MageInt(6); this.toughness = new MageInt(6); // Flying this.addAbility(FlyingAbility.getInstance()); + // Threshold - Other creatures you control get +2/+2 as long as seven or more cards are in your graveyard. - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostControlledEffect(2, 2, Duration.WhileOnBattlefield, true), new CardsInControllerGraveyardCondition(7), - "other creatures you control get +2/+2 as long as seven or more cards are in your graveyard")); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostControlledEffect(2, 2, Duration.WhileOnBattlefield, true), + ThresholdCondition.instance, "other creatures you control get +2/+2 as long as seven or more cards are in your graveyard" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private SilverSeraph(final SilverSeraph card) { diff --git a/Mage.Sets/src/mage/cards/s/SpringingTiger.java b/Mage.Sets/src/mage/cards/s/SpringingTiger.java index af7db0f66ee..b900781dff2 100644 --- a/Mage.Sets/src/mage/cards/s/SpringingTiger.java +++ b/Mage.Sets/src/mage/cards/s/SpringingTiger.java @@ -1,44 +1,37 @@ package mage.cards.s; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class SpringingTiger extends CardImpl { public SpringingTiger(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}"); this.subtype.add(SubType.CAT); this.power = new MageInt(3); this.toughness = new MageInt(3); // Threshold - Springing Tiger gets +2/+2 as long as seven or more cards are in your graveyard. - Ability thresholdAbility = new SimpleStaticAbility( - Zone.BATTLEFIELD, - new ConditionalContinuousEffect( - new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7), - "{this} gets +2/+2 as long as seven or more cards are in your graveyard" - )); - thresholdAbility.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(thresholdAbility); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "{this} gets +2/+2 as long as seven or more cards are in your graveyard" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private SpringingTiger(final SpringingTiger card) { diff --git a/Mage.Sets/src/mage/cards/s/StitchTogether.java b/Mage.Sets/src/mage/cards/s/StitchTogether.java index e01a8d9f23d..8ec8820a083 100644 --- a/Mage.Sets/src/mage/cards/s/StitchTogether.java +++ b/Mage.Sets/src/mage/cards/s/StitchTogether.java @@ -1,20 +1,19 @@ - package mage.cards.s; -import java.util.UUID; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalOneShotEffect; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author fireshoes */ public final class StitchTogether extends CardImpl { @@ -24,12 +23,12 @@ public final class StitchTogether extends CardImpl { // Return target creature card from your graveyard to your hand. // Threshold - Return that card from your graveyard to the battlefield instead if seven or more cards are in your graveyard. - Effect effect = new ConditionalOneShotEffect( - new ReturnFromGraveyardToBattlefieldTargetEffect(), - new ReturnFromGraveyardToHandTargetEffect(), - new CardsInControllerGraveyardCondition(7), - "Return target creature card from your graveyard to your hand.

Threshold — Return that card from your graveyard to the battlefield instead if seven or more cards are in your graveyard."); - this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addEffect(new ConditionalOneShotEffect( + new ReturnFromGraveyardToBattlefieldTargetEffect(), new ReturnFromGraveyardToHandTargetEffect(), + ThresholdCondition.instance, "Return target creature card from your graveyard to your hand. " + + "
" + AbilityWord.THRESHOLD.formatWord() + "Return that card from your graveyard " + + "to the battlefield instead if seven or more cards are in your graveyard." + )); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); } diff --git a/Mage.Sets/src/mage/cards/s/StoneTongueBasilisk.java b/Mage.Sets/src/mage/cards/s/StoneTongueBasilisk.java index 56b1d1522ae..16284273755 100644 --- a/Mage.Sets/src/mage/cards/s/StoneTongueBasilisk.java +++ b/Mage.Sets/src/mage/cards/s/StoneTongueBasilisk.java @@ -1,13 +1,11 @@ package mage.cards.s; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.DealsCombatDamageToACreatureTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalRequirementEffect; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.combat.MustBeBlockedByAllSourceEffect; @@ -16,7 +14,6 @@ import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Zone; import java.util.UUID; @@ -32,19 +29,15 @@ public final class StoneTongueBasilisk extends CardImpl { this.toughness = new MageInt(5); // Whenever Stone-Tongue Basilisk deals combat damage to a creature, destroy that creature at end of combat. - Effect effect = new CreateDelayedTriggeredAbilityEffect( - new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()), true); - effect.setText("destroy that creature at end of combat"); - this.addAbility(new DealsCombatDamageToACreatureTriggeredAbility(effect, false, true)); + this.addAbility(new DealsCombatDamageToACreatureTriggeredAbility(new CreateDelayedTriggeredAbilityEffect( + new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()), true + ).setText("destroy that creature at end of combat"), false, true)); // Threshold - As long as seven or more cards are in your graveyard, all creatures able to block Stone-Tongue Basilisk do so. - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalRequirementEffect( - new MustBeBlockedByAllSourceEffect(), - new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, all creatures able to block {this} do so" - )); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + this.addAbility(new SimpleStaticAbility(new ConditionalRequirementEffect( + new MustBeBlockedByAllSourceEffect(), ThresholdCondition.instance, "As long as seven " + + "or more cards are in your graveyard, all creatures able to block {this} do so" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private StoneTongueBasilisk(final StoneTongueBasilisk card) { diff --git a/Mage.Sets/src/mage/cards/s/SwirlingSandstorm.java b/Mage.Sets/src/mage/cards/s/SwirlingSandstorm.java index a587cb1406d..86c959d9b02 100644 --- a/Mage.Sets/src/mage/cards/s/SwirlingSandstorm.java +++ b/Mage.Sets/src/mage/cards/s/SwirlingSandstorm.java @@ -1,21 +1,20 @@ - package mage.cards.s; -import java.util.UUID; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalOneShotEffect; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.DamageAllEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.AbilityPredicate; +import java.util.UUID; + /** - * * @author Quercitron */ public final class SwirlingSandstorm extends CardImpl { @@ -27,14 +26,14 @@ public final class SwirlingSandstorm extends CardImpl { } public SwirlingSandstorm(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{R}"); // Threshold - Swirling Sandstorm deals 5 damage to each creature without flying if seven or more cards are in your graveyard. - Effect effect = new ConditionalOneShotEffect( - new DamageAllEffect(5, filter), - new CardsInControllerGraveyardCondition(7), - "Threshold — {this} deals 5 damage to each creature without flying if seven or more cards are in your graveyard."); - this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addEffect(new ConditionalOneShotEffect( + new DamageAllEffect(5, filter), ThresholdCondition.instance, + AbilityWord.THRESHOLD.formatWord() + "{this} deals " + + "5 damage to each creature without flying if seven or more cards are in your graveyard." + )); } private SwirlingSandstorm(final SwirlingSandstorm card) { diff --git a/Mage.Sets/src/mage/cards/t/TerohsVanguard.java b/Mage.Sets/src/mage/cards/t/TerohsVanguard.java index cd8ddcf5b1e..31332c8a234 100644 --- a/Mage.Sets/src/mage/cards/t/TerohsVanguard.java +++ b/Mage.Sets/src/mage/cards/t/TerohsVanguard.java @@ -1,13 +1,10 @@ - package mage.cards.t; -import java.util.UUID; import mage.MageInt; import mage.ObjectColor; -import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; @@ -17,19 +14,19 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; +import mage.constants.SubType; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author LoneFox */ public final class TerohsVanguard extends CardImpl { public TerohsVanguard(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.NOMAD); this.power = new MageInt(2); @@ -37,15 +34,18 @@ public final class TerohsVanguard extends CardImpl { // Flash this.addAbility(FlashAbility.getInstance()); - // Threshold - As long as seven or more cards are in your graveyard, Teroh's Vanguard has "When Teroh's Vanguard enters the battlefield, creatures you control gain protection from black until end of turn." - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new GainAbilitySourceEffect(new EntersBattlefieldTriggeredAbility( - new GainAbilityControlledEffect(ProtectionAbility.from(ObjectColor.BLACK), Duration.EndOfTurn, new FilterCreaturePermanent()))), - new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} has \"When {this} enters the battlefield, creatures you control gain protection from black until end of turn.\"")); - ability.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(ability); + // Threshold - As long as seven or more cards are in your graveyard, Teroh's Vanguard has "When Teroh's Vanguard enters the battlefield, creatures you control gain protection from black until end of turn." + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(new EntersBattlefieldTriggeredAbility( + new GainAbilityControlledEffect( + ProtectionAbility.from(ObjectColor.BLACK), + Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE + ) + )), ThresholdCondition.instance, "As long as seven or more cards " + + "are in your graveyard, {this} has \"When {this} enters the battlefield, " + + "creatures you control gain protection from black until end of turn.\"" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private TerohsVanguard(final TerohsVanguard card) { diff --git a/Mage.Sets/src/mage/cards/t/ThermalBlast.java b/Mage.Sets/src/mage/cards/t/ThermalBlast.java index c12159c9253..c381bd3aa2d 100644 --- a/Mage.Sets/src/mage/cards/t/ThermalBlast.java +++ b/Mage.Sets/src/mage/cards/t/ThermalBlast.java @@ -1,11 +1,12 @@ package mage.cards.t; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.DamageTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; import mage.target.common.TargetCreaturePermanent; @@ -22,9 +23,8 @@ public final class ThermalBlast extends CardImpl { // Thermal Blast deals 3 damage to target creature. // Threshold - Thermal Blast deals 5 damage to that creature instead if seven or more cards are in your graveyard. this.getSpellAbility().addEffect(new ConditionalOneShotEffect( - new DamageTargetEffect(5), new DamageTargetEffect(3), - new CardsInControllerGraveyardCondition(7), - "{this} deals 3 damage to target creature.
Threshold — " + + new DamageTargetEffect(5), new DamageTargetEffect(3), ThresholdCondition.instance, + "{this} deals 3 damage to target creature.
" + AbilityWord.THRESHOLD.formatWord() + "{this} deals 5 damage instead if seven or more cards are in your graveyard." )); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); diff --git a/Mage.Sets/src/mage/cards/t/ToxicStench.java b/Mage.Sets/src/mage/cards/t/ToxicStench.java index 599666186d6..444de87702e 100644 --- a/Mage.Sets/src/mage/cards/t/ToxicStench.java +++ b/Mage.Sets/src/mage/cards/t/ToxicStench.java @@ -1,27 +1,20 @@ package mage.cards.t; -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.condition.InvertCondition; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalOneShotEffect; -import mage.abilities.effects.ContinuousEffect; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.AddContinuousEffectToGame; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; import mage.filter.StaticFilters; -import mage.game.Game; -import mage.game.permanent.Permanent; import mage.target.common.TargetCreaturePermanent; -import mage.target.targetpointer.FixedTarget; + +import java.util.UUID; /** - * * @author TheElk801 */ public final class ToxicStench extends CardImpl { @@ -30,17 +23,14 @@ public final class ToxicStench extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{B}"); // Target nonblack creature gets -1/-1 until end of turn. - this.getSpellAbility().addEffect(new ConditionalOneShotEffect( - new ToxicStenchEffect(), - new InvertCondition(new CardsInControllerGraveyardCondition(7)), - "Target nonblack creature gets -1/-1 until end of turn.")); - // Threshold - If seven or more cards are in your graveyard, instead destroy that creature. It can't be regenerated. this.getSpellAbility().addEffect(new ConditionalOneShotEffect( new DestroyTargetEffect(true), - new CardsInControllerGraveyardCondition(7), - "

Threshold — If seven or more cards are in your graveyard, instead destroy that creature. It can't be regenerated.")); - + new AddContinuousEffectToGame(new BoostTargetEffect(-1, -1)), + ThresholdCondition.instance, "target nonblack creature gets -1/-1 until end of turn.
" + + AbilityWord.THRESHOLD.formatWord() + "If seven or more cards are in your graveyard, " + + "instead destroy that creature. It can't be regenerated." + )); this.getSpellAbility().addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_PERMANENT_CREATURE_NON_BLACK)); } @@ -53,31 +43,3 @@ public final class ToxicStench extends CardImpl { return new ToxicStench(this); } } - -class ToxicStenchEffect extends OneShotEffect { - - ToxicStenchEffect() { - super(Outcome.UnboostCreature); - } - - private ToxicStenchEffect(final ToxicStenchEffect effect) { - super(effect); - } - - @Override - public ToxicStenchEffect copy() { - return new ToxicStenchEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - ContinuousEffect effect = new BoostTargetEffect(-1, -1, Duration.EndOfTurn); - Permanent permanent = game.getPermanent(source.getFirstTarget()); - if (permanent != null) { - effect.setTargetPointer(new FixedTarget(permanent, game)); - game.addEffect(effect, source); - return true; - } - return false; - } -} diff --git a/Mage.Sets/src/mage/cards/t/TreacherousVampire.java b/Mage.Sets/src/mage/cards/t/TreacherousVampire.java index 07036f4d692..a31734b6a46 100644 --- a/Mage.Sets/src/mage/cards/t/TreacherousVampire.java +++ b/Mage.Sets/src/mage/cards/t/TreacherousVampire.java @@ -1,4 +1,3 @@ - package mage.cards.t; import mage.MageInt; @@ -6,7 +5,7 @@ import mage.abilities.Ability; import mage.abilities.common.AttacksOrBlocksTriggeredAbility; import mage.abilities.common.DiesSourceTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.ExileFromGraveCost; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.Effect; @@ -18,7 +17,10 @@ import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.AbilityWord; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; import mage.target.common.TargetCardInYourGraveyard; import java.util.UUID; @@ -39,20 +41,17 @@ public final class TreacherousVampire extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Whenever Treacherous Vampire attacks or blocks, sacrifice it unless you exile a card from your graveyard. - this.addAbility(new AttacksOrBlocksTriggeredAbility( - new DoUnlessControllerPaysEffect( - new SacrificeSourceEffect(), - new ExileFromGraveCost(new TargetCardInYourGraveyard()) - ).setText("sacrifice it unless you exile a card from your graveyard"), false - )); + this.addAbility(new AttacksOrBlocksTriggeredAbility(new DoUnlessControllerPaysEffect( + new SacrificeSourceEffect(), new ExileFromGraveCost(new TargetCardInYourGraveyard()) + ).setText("sacrifice it unless you exile a card from your graveyard"), false)); // Threshold - As long as seven or more cards are in your graveyard, Treacherous Vampire gets +2/+2 and has "When Treacherous Vampire dies, you lose 6 life." - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), + Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), ThresholdCondition.instance, "As long as seven or more cards are in your graveyard, {this} gets +2/+2")); Effect effect = new ConditionalContinuousEffect( new GainAbilitySourceEffect(new DiesSourceTriggeredAbility(new LoseLifeSourceControllerEffect(6))), - new CardsInControllerGraveyardCondition(7), "and has \"When {this} dies, you lose 6 life.\"" + ThresholdCondition.instance, "and has \"When {this} dies, you lose 6 life.\"" ); ability.addEffect(effect); ability.setAbilityWord(AbilityWord.THRESHOLD); diff --git a/Mage.Sets/src/mage/cards/t/TreacherousWerewolf.java b/Mage.Sets/src/mage/cards/t/TreacherousWerewolf.java index 7c47dfb537c..f319365cb4e 100644 --- a/Mage.Sets/src/mage/cards/t/TreacherousWerewolf.java +++ b/Mage.Sets/src/mage/cards/t/TreacherousWerewolf.java @@ -1,27 +1,24 @@ - package mage.cards.t; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.DiesSourceTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; -import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author TheElk801 */ public final class TreacherousWerewolf extends CardImpl { @@ -35,14 +32,14 @@ public final class TreacherousWerewolf extends CardImpl { this.toughness = new MageInt(2); // Threshold - As long as seven or more cards are in your graveyard, Treacherous Werewolf gets +2/+2 and has "When Treacherous Werewolf dies, you lose 4 life." - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} gets +2/+2")); - Effect effect = new ConditionalContinuousEffect( + Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "As long as seven or more cards are in your graveyard, {this} gets +2/+2" + )); + ability.addEffect(new ConditionalContinuousEffect( new GainAbilitySourceEffect(new DiesSourceTriggeredAbility(new LoseLifeSourceControllerEffect(4))), - new CardsInControllerGraveyardCondition(7), "and has \"When {this} dies, you lose 4 life.\"" - ); - ability.addEffect(effect); + ThresholdCondition.instance, "and has \"When {this} dies, you lose 4 life.\"" + )); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/v/VigilantSentry.java b/Mage.Sets/src/mage/cards/v/VigilantSentry.java index 475d259c046..a7b92af80c8 100644 --- a/Mage.Sets/src/mage/cards/v/VigilantSentry.java +++ b/Mage.Sets/src/mage/cards/v/VigilantSentry.java @@ -1,12 +1,10 @@ - package mage.cards.v; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; @@ -16,32 +14,37 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; import mage.target.common.TargetAttackingOrBlockingCreature; +import java.util.UUID; + /** - * * @author LoneFox */ public final class VigilantSentry extends CardImpl { public VigilantSentry(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.NOMAD); this.power = new MageInt(2); this.toughness = new MageInt(2); // Threshold - As long as seven or more cards are in your graveyard, Vigilant Sentry gets +1/+1 and has "{tap}: Target attacking or blocking creature gets +3/+3 until end of turn." - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} gets +1/+1")); - Ability gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(3, 3, Duration.EndOfTurn), new TapSourceCost()); + Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(1, 1, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "As long as seven or more cards are in your graveyard, {this} gets +1/+1" + )); + Ability gainedAbility = new SimpleActivatedAbility( + new BoostTargetEffect(3, 3, Duration.EndOfTurn), new TapSourceCost() + ); gainedAbility.addTarget(new TargetAttackingOrBlockingCreature()); - ability.addEffect(new ConditionalContinuousEffect(new GainAbilitySourceEffect(gainedAbility), - new CardsInControllerGraveyardCondition(7), "and has \"{T}: Target attacking or blocking creature gets +3/+3 until end of turn.\"")); + ability.addEffect(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(gainedAbility), ThresholdCondition.instance, + "and has \"{T}: Target attacking or blocking creature gets +3/+3 until end of turn.\"" + )); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/w/WaywardAngel.java b/Mage.Sets/src/mage/cards/w/WaywardAngel.java index 9abcfe1db26..31191b2a038 100644 --- a/Mage.Sets/src/mage/cards/w/WaywardAngel.java +++ b/Mage.Sets/src/mage/cards/w/WaywardAngel.java @@ -1,13 +1,11 @@ - package mage.cards.w; -import java.util.UUID; import mage.MageInt; import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.SacrificeControllerEffect; import mage.abilities.effects.common.continuous.BecomesColorSourceEffect; @@ -18,22 +16,18 @@ import mage.abilities.keyword.TrampleAbility; import mage.abilities.keyword.VigilanceAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AbilityWord; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Duration; -import mage.constants.TargetController; -import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.constants.*; +import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author cbt33, Plopman (Archdemon of Unx) */ public final class WaywardAngel extends CardImpl { public WaywardAngel(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{W}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{W}{W}"); this.subtype.add(SubType.ANGEL); this.subtype.add(SubType.HORROR); @@ -42,29 +36,28 @@ public final class WaywardAngel extends CardImpl { // Flying this.addAbility(FlyingAbility.getInstance()); + // Vigilance this.addAbility(VigilanceAbility.getInstance()); + // Threshold - As long as seven or more cards are in your graveyard, Wayward Angel gets +3/+3, is black, has trample, and has "At the beginning of your upkeep, sacrifice a creature." - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostSourceEffect(3, 3, Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7), - "As long as seven or more cards are in your graveyard, {this} gets +3/+3")); + Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(3, 3, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "as long as seven or more cards are in your graveyard, {this} gets +3/+3")); ability.addEffect(new ConditionalContinuousEffect( new BecomesColorSourceEffect(ObjectColor.BLACK, Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7), - ", is black")); + ThresholdCondition.instance, ", is black")); ability.addEffect(new ConditionalContinuousEffect( new GainAbilitySourceEffect(TrampleAbility.getInstance()), - new CardsInControllerGraveyardCondition(7), - ", has trample")); - - Ability gainedAbility = new BeginningOfUpkeepTriggeredAbility(new SacrificeControllerEffect(new FilterControlledCreaturePermanent(), 1, ""), TargetController.YOU, false); - + ThresholdCondition.instance, ", has trample" + )); + Ability gainedAbility = new BeginningOfUpkeepTriggeredAbility( + new SacrificeControllerEffect(StaticFilters.FILTER_CONTROLLED_CREATURE, 1, ""), TargetController.YOU, false + ); ability.addEffect(new ConditionalContinuousEffect( - new GainAbilitySourceEffect(gainedAbility), - new CardsInControllerGraveyardCondition(7), - "and has \"At the beginning of your upkeep, sacrifice a creature.\"")); - + new GainAbilitySourceEffect(gainedAbility), ThresholdCondition.instance, + "and has \"At the beginning of your upkeep, sacrifice a creature.\"" + )); ability.setAbilityWord(AbilityWord.THRESHOLD); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/w/Werebear.java b/Mage.Sets/src/mage/cards/w/Werebear.java index 6efb22e7272..871e325a57d 100644 --- a/Mage.Sets/src/mage/cards/w/Werebear.java +++ b/Mage.Sets/src/mage/cards/w/Werebear.java @@ -1,11 +1,8 @@ - package mage.cards.w; -import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.CardsInControllerGraveyardCondition; +import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.mana.GreenManaAbility; @@ -13,18 +10,18 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityWord; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.Zone; +import mage.constants.SubType; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class Werebear extends CardImpl { public Werebear(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.BEAR); this.subtype.add(SubType.DRUID); @@ -34,16 +31,12 @@ public final class Werebear extends CardImpl { // {tap}: Add {G}. this.addAbility(new GreenManaAbility()); + // Threshold - Werebear gets +3/+3 as long as seven or more cards are in your graveyard. - Ability thresholdAbility = new SimpleStaticAbility( - Zone.BATTLEFIELD, - new ConditionalContinuousEffect( - new BoostSourceEffect(3, 3, Duration.WhileOnBattlefield), - new CardsInControllerGraveyardCondition(7), - "{this} gets +3/+3 as long as seven or more cards are in your graveyard" - )); - thresholdAbility.setAbilityWord(AbilityWord.THRESHOLD); - this.addAbility(thresholdAbility); + this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new BoostSourceEffect(3, 3, Duration.WhileOnBattlefield), ThresholdCondition.instance, + "{this} gets +3/+3 as long as seven or more cards are in your graveyard" + )).setAbilityWord(AbilityWord.THRESHOLD)); } private Werebear(final Werebear card) { diff --git a/Mage/src/main/java/mage/abilities/condition/common/ThresholdCondition.java b/Mage/src/main/java/mage/abilities/condition/common/ThresholdCondition.java new file mode 100644 index 00000000000..ee065ff3510 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/condition/common/ThresholdCondition.java @@ -0,0 +1,33 @@ +package mage.abilities.condition.common; + +import mage.abilities.Ability; +import mage.abilities.condition.Condition; +import mage.game.Controllable; +import mage.game.Game; +import mage.players.Player; + +import java.util.HashSet; +import java.util.Optional; + +/** + * @author TheElk801 + */ +public enum ThresholdCondition implements Condition { + instance; + + @Override + public boolean apply(Game game, Ability source) { + return Optional + .ofNullable(source) + .map(Controllable::getControllerId) + .map(game::getPlayer) + .map(Player::getGraveyard) + .map(HashSet::size) + .orElse(0) >= 7; + } + + @Override + public String toString() { + return "seven or more cards are in your graveyard"; + } +}