From e4ebf50d42c5752cd6aa539b72da9777e6f6281d Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Mon, 29 Jun 2020 09:28:46 +0400 Subject: [PATCH] * Artifact you control effects - added card hints; --- .../src/mage/cards/a/AkiriLineSlinger.java | 22 ++++------- .../src/mage/cards/c/CranialPlating.java | 23 +++++------- .../src/mage/cards/d/DeadeyePlunderers.java | 24 ++++-------- Mage.Sets/src/mage/cards/f/FiligreeAngel.java | 30 +++++---------- .../src/mage/cards/h/HungerOfTheNim.java | 21 ++++------- Mage.Sets/src/mage/cards/i/Irradiate.java | 9 +++-- .../src/mage/cards/k/KarnScionOfUrza.java | 3 +- Mage.Sets/src/mage/cards/m/MephiticOoze.java | 24 ++++-------- Mage.Sets/src/mage/cards/n/NimDevourer.java | 37 +++++++------------ Mage.Sets/src/mage/cards/n/NimGrotesque.java | 18 +++++---- Mage.Sets/src/mage/cards/o/OverrideCard.java | 4 +- .../src/mage/cards/p/PowerstoneShard.java | 11 ++++-- .../src/mage/cards/t/TidyConclusion.java | 14 +++---- .../mage/cards/u/UrzaLordHighArtificer.java | 17 ++++----- .../src/mage/cards/v/VaultOfCatlacan.java | 16 ++++---- ...ount.java => ArtifactYouControlCount.java} | 8 ++-- ...lHint.java => ArtifactYouControlHint.java} | 6 +-- .../keyword/AffinityForArtifactsAbility.java | 4 +- .../permanent/token/KarnConstructToken.java | 16 ++------ 19 files changed, 126 insertions(+), 181 deletions(-) rename Mage/src/main/java/mage/abilities/dynamicvalue/common/{ArtifactsYouControlCount.java => ArtifactYouControlCount.java} (76%) rename Mage/src/main/java/mage/abilities/hint/common/{ArtifactsYouControlHint.java => ArtifactYouControlHint.java} (73%) diff --git a/Mage.Sets/src/mage/cards/a/AkiriLineSlinger.java b/Mage.Sets/src/mage/cards/a/AkiriLineSlinger.java index 5cd997b7e0e..507e6796b02 100644 --- a/Mage.Sets/src/mage/cards/a/AkiriLineSlinger.java +++ b/Mage.Sets/src/mage/cards/a/AkiriLineSlinger.java @@ -1,36 +1,29 @@ - package mage.cards.a; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.dynamicvalue.common.ArtifactYouControlCount; import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.effects.Effect; import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.hint.common.ArtifactYouControlHint; import mage.abilities.keyword.FirstStrikeAbility; import mage.abilities.keyword.PartnerAbility; import mage.abilities.keyword.VigilanceAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; -import mage.filter.common.FilterControlledPermanent; + +import java.util.UUID; /** - * * @author spjspj */ public final class AkiriLineSlinger extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent("artifact you control"); - - static { - filter.add(CardType.ARTIFACT.getPredicate()); - } - public AkiriLineSlinger(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}{W}"); - + addSuperType(SuperType.LEGENDARY); this.subtype.add(SubType.KOR); this.subtype.add(SubType.SOLDIER); @@ -45,9 +38,10 @@ public final class AkiriLineSlinger extends CardImpl { this.addAbility(VigilanceAbility.getInstance()); // Akiri, Line-Slinger gets +1/+0 for each artifact you control. - Effect effect = new BoostSourceEffect(new PermanentsOnBattlefieldCount(filter), StaticValue.get(0), Duration.WhileOnBattlefield); + Effect effect = new BoostSourceEffect(ArtifactYouControlCount.instance, StaticValue.get(0), Duration.WhileOnBattlefield); effect.setText("{this} gets +1/+0 for each artifact you control"); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect) + .addHint(ArtifactYouControlHint.instance)); // Partner this.addAbility(PartnerAbility.getInstance()); diff --git a/Mage.Sets/src/mage/cards/c/CranialPlating.java b/Mage.Sets/src/mage/cards/c/CranialPlating.java index 4ff75ee0858..cdafd2c9ac2 100644 --- a/Mage.Sets/src/mage/cards/c/CranialPlating.java +++ b/Mage.Sets/src/mage/cards/c/CranialPlating.java @@ -1,47 +1,44 @@ - package mage.cards.c; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.dynamicvalue.common.ArtifactYouControlCount; import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.BoostEquippedEffect; +import mage.abilities.hint.common.ArtifactYouControlHint; import mage.abilities.keyword.EquipAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Outcome; +import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledPermanent; import mage.target.common.TargetControlledCreaturePermanent; +import java.util.UUID; + /** - * * @author Loki */ public final class CranialPlating extends CardImpl { - private static final FilterControlledPermanent filterCounted = new FilterControlledPermanent("artifacts you control"); - - static { - filterCounted.add(CardType.ARTIFACT.getPredicate()); - } public CranialPlating(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}"); this.subtype.add(SubType.EQUIPMENT); // Equipped creature gets +1/+0 for each artifact you control. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(new PermanentsOnBattlefieldCount(filterCounted), StaticValue.get(0)))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(ArtifactYouControlCount.instance, StaticValue.get(0))) + .addHint(ArtifactYouControlHint.instance)); + // {B}{B}: Attach Cranial Plating to target creature you control. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AttachEffect(Outcome.BoostCreature, "Attach {this} to target creature you control"), new ManaCostsImpl("{B}{B}")); ability.addTarget(new TargetControlledCreaturePermanent()); this.addAbility(ability); + // Equip {1} this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(1))); } diff --git a/Mage.Sets/src/mage/cards/d/DeadeyePlunderers.java b/Mage.Sets/src/mage/cards/d/DeadeyePlunderers.java index 121c9501904..180c7cf2b49 100644 --- a/Mage.Sets/src/mage/cards/d/DeadeyePlunderers.java +++ b/Mage.Sets/src/mage/cards/d/DeadeyePlunderers.java @@ -1,37 +1,28 @@ - package mage.cards.d; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.dynamicvalue.common.ArtifactYouControlCount; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.hint.common.ArtifactYouControlHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.TargetController; +import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.FilterPermanent; import mage.game.permanent.token.TreasureToken; +import java.util.UUID; + /** - * * @author TheElk801 */ public final class DeadeyePlunderers extends CardImpl { - private static final FilterPermanent filter = new FilterPermanent("artifact you control"); - - static { - filter.add(CardType.ARTIFACT.getPredicate()); - filter.add(TargetController.YOU.getControllerPredicate()); - } - public DeadeyePlunderers(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{B}"); @@ -41,8 +32,9 @@ public final class DeadeyePlunderers extends CardImpl { this.toughness = new MageInt(3); // Deadeye Plunderers gets +1/+1 for each artifact you control. - PermanentsOnBattlefieldCount count = new PermanentsOnBattlefieldCount(filter); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceEffect(count, count, Duration.WhileOnBattlefield))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, + new BoostSourceEffect(ArtifactYouControlCount.instance, ArtifactYouControlCount.instance, Duration.WhileOnBattlefield) + ).addHint(ArtifactYouControlHint.instance)); // {2}{U}{B}: Create a colorless artifact token named Treasure with "{T}, Sacrifice this artifact: Add one mana of any color." this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new TreasureToken()), new ManaCostsImpl("{2}{U}{B}"))); diff --git a/Mage.Sets/src/mage/cards/f/FiligreeAngel.java b/Mage.Sets/src/mage/cards/f/FiligreeAngel.java index 638f78ff107..2f060359038 100644 --- a/Mage.Sets/src/mage/cards/f/FiligreeAngel.java +++ b/Mage.Sets/src/mage/cards/f/FiligreeAngel.java @@ -1,34 +1,30 @@ - - package mage.cards.f; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.dynamicvalue.common.ArtifactYouControlCount; import mage.abilities.effects.OneShotEffect; +import mage.abilities.hint.common.ArtifactYouControlHint; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Outcome; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledPermanent; +import mage.constants.SubType; import mage.game.Game; import mage.players.Player; +import java.util.UUID; + /** - * * @author Loki */ public final class FiligreeAngel extends CardImpl { - public FiligreeAngel (UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{5}{W}{W}{U}"); + public FiligreeAngel(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{5}{W}{W}{U}"); this.subtype.add(SubType.ANGEL); - - this.power = new MageInt(4); this.toughness = new MageInt(4); @@ -36,10 +32,10 @@ public final class FiligreeAngel extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // When Filigree Angel enters the battlefield, you gain 3 life for each artifact you control. - this.addAbility(new EntersBattlefieldTriggeredAbility(new FiligreeAngelEffect())); + this.addAbility(new EntersBattlefieldTriggeredAbility(new FiligreeAngelEffect()).addHint(ArtifactYouControlHint.instance)); } - public FiligreeAngel (final FiligreeAngel card) { + public FiligreeAngel(final FiligreeAngel card) { super(card); } @@ -50,12 +46,6 @@ public final class FiligreeAngel extends CardImpl { } class FiligreeAngelEffect extends OneShotEffect { - - private static final FilterPermanent filter = new FilterControlledPermanent(); - - static { - filter.add(CardType.ARTIFACT.getPredicate()); - } public FiligreeAngelEffect() { super(Outcome.GainLife); @@ -70,7 +60,7 @@ class FiligreeAngelEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); if (player != null) { - int life = game.getBattlefield().count(filter, source.getSourceId(), source.getControllerId(), game) * 3; + int life = ArtifactYouControlCount.instance.calculate(game, source, this) * 3; player.gainLife(life, game, source); } return true; diff --git a/Mage.Sets/src/mage/cards/h/HungerOfTheNim.java b/Mage.Sets/src/mage/cards/h/HungerOfTheNim.java index 657891ee47e..28dfd0b529a 100644 --- a/Mage.Sets/src/mage/cards/h/HungerOfTheNim.java +++ b/Mage.Sets/src/mage/cards/h/HungerOfTheNim.java @@ -1,38 +1,31 @@ - package mage.cards.h; -import java.util.UUID; -import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.dynamicvalue.common.ArtifactYouControlCount; import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.effects.Effect; import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.hint.common.ArtifactYouControlHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.filter.common.FilterControlledPermanent; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author fireshoes */ public final class HungerOfTheNim extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent("artifact you control"); - - static { - filter.add(CardType.ARTIFACT.getPredicate()); - } - public HungerOfTheNim(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{1}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{B}"); // Target creature gets +1/+0 until end of turn for each artifact you control. - Effect effect = new BoostTargetEffect(new PermanentsOnBattlefieldCount(filter), StaticValue.get(0), Duration.EndOfTurn, true); - effect.setText("Target creature gets +1/+0 until end of turn for each artifact you control"); + Effect effect = new BoostTargetEffect(ArtifactYouControlCount.instance, StaticValue.get(0), Duration.EndOfTurn, true); getSpellAbility().addEffect(effect); getSpellAbility().addTarget(new TargetCreaturePermanent()); + getSpellAbility().addHint(ArtifactYouControlHint.instance); } public HungerOfTheNim(final HungerOfTheNim card) { diff --git a/Mage.Sets/src/mage/cards/i/Irradiate.java b/Mage.Sets/src/mage/cards/i/Irradiate.java index 2e19012e7c7..7208209f31d 100644 --- a/Mage.Sets/src/mage/cards/i/Irradiate.java +++ b/Mage.Sets/src/mage/cards/i/Irradiate.java @@ -1,9 +1,8 @@ - package mage.cards.i; -import java.util.UUID; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.hint.common.ArtifactYouControlHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -11,19 +10,21 @@ import mage.constants.Duration; import mage.filter.common.FilterControlledArtifactPermanent; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author LoneFox */ public final class Irradiate extends CardImpl { public Irradiate(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{3}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{B}"); // Target creature gets -1/-1 until end of turn for each artifact you control. PermanentsOnBattlefieldCount count = new PermanentsOnBattlefieldCount(new FilterControlledArtifactPermanent(), -1); this.getSpellAbility().addEffect(new BoostTargetEffect(count, count, Duration.EndOfTurn, true)); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + this.getSpellAbility().addHint(ArtifactYouControlHint.instance); } public Irradiate(final Irradiate card) { diff --git a/Mage.Sets/src/mage/cards/k/KarnScionOfUrza.java b/Mage.Sets/src/mage/cards/k/KarnScionOfUrza.java index b42cf9d6049..db1fcbb798e 100644 --- a/Mage.Sets/src/mage/cards/k/KarnScionOfUrza.java +++ b/Mage.Sets/src/mage/cards/k/KarnScionOfUrza.java @@ -6,6 +6,7 @@ import mage.abilities.LoyaltyAbility; import mage.abilities.common.PlaneswalkerEntersWithLoyaltyCountersAbility; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.hint.common.ArtifactYouControlHint; import mage.cards.*; import mage.constants.*; import mage.counters.CounterType; @@ -19,7 +20,6 @@ import mage.target.Target; import mage.target.TargetCard; import mage.target.common.TargetOpponent; -import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.UUID; @@ -46,6 +46,7 @@ public final class KarnScionOfUrza extends CardImpl { // -2: Create a 0/0 colorless Construct artifact creature token with "This creature gets +1/+1 for each artifact you control." LoyaltyAbility ability3 = new LoyaltyAbility(new KarnConstructEffect(), -2); + ability3.addHint(ArtifactYouControlHint.instance); this.addAbility(ability3); } diff --git a/Mage.Sets/src/mage/cards/m/MephiticOoze.java b/Mage.Sets/src/mage/cards/m/MephiticOoze.java index a89562f39e7..f90dbcc6d73 100644 --- a/Mage.Sets/src/mage/cards/m/MephiticOoze.java +++ b/Mage.Sets/src/mage/cards/m/MephiticOoze.java @@ -1,45 +1,37 @@ - package mage.cards.m; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.DealsCombatDamageToACreatureTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.dynamicvalue.common.ArtifactYouControlCount; import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.effects.Effect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.hint.common.ArtifactYouControlHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; +import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledPermanent; + +import java.util.UUID; /** - * * @author fireshoes */ public final class MephiticOoze extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent("artifact you control"); - - static { - filter.add(CardType.ARTIFACT.getPredicate()); - } - public MephiticOoze(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.OOZE); this.power = new MageInt(0); this.toughness = new MageInt(5); // Mephitic Ooze gets +1/+0 for each artifact you control. - Effect effect = new BoostSourceEffect(new PermanentsOnBattlefieldCount(filter), StaticValue.get(0), Duration.WhileOnBattlefield); - effect.setText("{this} gets +1/+0 for each artifact you control"); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + Effect effect = new BoostSourceEffect(ArtifactYouControlCount.instance, StaticValue.get(0), Duration.WhileOnBattlefield); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect).addHint(ArtifactYouControlHint.instance)); // Whenever Mephitic Ooze deals combat damage to a creature, destroy that creature. The creature can't be regenerated. this.addAbility(new DealsCombatDamageToACreatureTriggeredAbility(new DestroyTargetEffect(true), false, true)); diff --git a/Mage.Sets/src/mage/cards/n/NimDevourer.java b/Mage.Sets/src/mage/cards/n/NimDevourer.java index d386661b5c6..80c31583b95 100644 --- a/Mage.Sets/src/mage/cards/n/NimDevourer.java +++ b/Mage.Sets/src/mage/cards/n/NimDevourer.java @@ -1,59 +1,50 @@ - 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.IsStepCondition; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalActivatedAbility; -import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.dynamicvalue.common.ArtifactYouControlCount; import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.ReturnSourceFromGraveyardToBattlefieldEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.hint.common.ArtifactYouControlHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.PhaseStep; -import mage.constants.Zone; +import mage.constants.*; import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterControlledPermanent; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.Target; import mage.target.common.TargetControlledPermanent; +import java.util.UUID; + /** - * * @author fireshoes */ public final class NimDevourer extends CardImpl { - - private static final FilterControlledPermanent filter = new FilterControlledPermanent("artifact you control"); - - static { - filter.add(CardType.ARTIFACT.getPredicate()); - } public NimDevourer(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.ZOMBIE); this.power = new MageInt(4); this.toughness = new MageInt(1); // Nim Devourer gets +1/+0 for each artifact you control. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceEffect(new PermanentsOnBattlefieldCount(filter), StaticValue.get(0), Duration.WhileOnBattlefield))); - + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, + new BoostSourceEffect(ArtifactYouControlCount.instance, StaticValue.get(0), Duration.WhileOnBattlefield)) + .addHint(ArtifactYouControlHint.instance) + ); + // {B}{B}: Return Nim Devourer from your graveyard to the battlefield, then sacrifice a creature. Activate this ability only during your upkeep. - Ability ability = new ConditionalActivatedAbility(Zone.GRAVEYARD, - new ReturnSourceFromGraveyardToBattlefieldEffect(), - new ManaCostsImpl("{B}{B}"), + Ability ability = new ConditionalActivatedAbility(Zone.GRAVEYARD, + new ReturnSourceFromGraveyardToBattlefieldEffect(), + new ManaCostsImpl("{B}{B}"), new IsStepCondition(PhaseStep.UPKEEP), null); ability.addEffect(new NimDevourerEffect()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/n/NimGrotesque.java b/Mage.Sets/src/mage/cards/n/NimGrotesque.java index 03442660b89..63cb3360fbd 100644 --- a/Mage.Sets/src/mage/cards/n/NimGrotesque.java +++ b/Mage.Sets/src/mage/cards/n/NimGrotesque.java @@ -1,35 +1,37 @@ - package mage.cards.n; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.dynamicvalue.common.ArtifactYouControlCount; import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.hint.common.ArtifactYouControlHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; +import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledArtifactPermanent; + +import java.util.UUID; /** - * * @author Plopman */ public final class NimGrotesque extends CardImpl { public NimGrotesque(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{6}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{6}{B}"); this.subtype.add(SubType.ZOMBIE); this.power = new MageInt(3); this.toughness = new MageInt(6); // Nim Grotesque gets +1/+0 for each artifact you control. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceEffect(new PermanentsOnBattlefieldCount(new FilterControlledArtifactPermanent()), StaticValue.get(0), Duration.WhileOnBattlefield))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, + new BoostSourceEffect(ArtifactYouControlCount.instance, StaticValue.get(0), Duration.WhileOnBattlefield)) + .addHint(ArtifactYouControlHint.instance) + ); } public NimGrotesque(final NimGrotesque card) { diff --git a/Mage.Sets/src/mage/cards/o/OverrideCard.java b/Mage.Sets/src/mage/cards/o/OverrideCard.java index d69ba56a7d6..59ad499c0cb 100644 --- a/Mage.Sets/src/mage/cards/o/OverrideCard.java +++ b/Mage.Sets/src/mage/cards/o/OverrideCard.java @@ -4,12 +4,12 @@ import mage.MageObject; import mage.abilities.Ability; import mage.abilities.Mode; import mage.abilities.costs.Cost; +import mage.abilities.dynamicvalue.common.ArtifactYouControlCount; import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; -import mage.filter.common.FilterArtifactPermanent; import mage.game.Game; import mage.game.stack.StackObject; import mage.players.Player; @@ -64,7 +64,7 @@ class OverrideEffect extends OneShotEffect { Player player = game.getPlayer(spell.getControllerId()); Player controller = game.getPlayer(source.getControllerId()); if (player != null && controller != null) { - int amount = game.getBattlefield().countAll(new FilterArtifactPermanent(), source.getControllerId(), game); + int amount = ArtifactYouControlCount.instance.calculate(game, source, this); if (amount > 0) { Cost cost = ManaUtil.createManaCost(amount, false); if (!cost.pay(source, game, spell.getControllerId(), spell.getControllerId(), false)) { diff --git a/Mage.Sets/src/mage/cards/p/PowerstoneShard.java b/Mage.Sets/src/mage/cards/p/PowerstoneShard.java index 7862217f161..722f1d88bd3 100644 --- a/Mage.Sets/src/mage/cards/p/PowerstoneShard.java +++ b/Mage.Sets/src/mage/cards/p/PowerstoneShard.java @@ -1,9 +1,9 @@ - package mage.cards.p; -import java.util.UUID; import mage.Mana; +import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.hint.ValueHint; import mage.abilities.mana.DynamicManaAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -11,8 +11,9 @@ import mage.constants.CardType; import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.NamePredicate; +import java.util.UUID; + /** - * * @author TheElk801 */ public final class PowerstoneShard extends CardImpl { @@ -28,7 +29,9 @@ public final class PowerstoneShard extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); // {T}: Add {C} for each artifact you control named Powerstone Shard. - this.addAbility(new DynamicManaAbility(Mana.ColorlessMana(1), new PermanentsOnBattlefieldCount(filter))); + DynamicValue xValue = new PermanentsOnBattlefieldCount(filter); + this.addAbility(new DynamicManaAbility(Mana.ColorlessMana(1), xValue) + .addHint(new ValueHint("Artifact you control named Powerstone Shard", xValue))); } public PowerstoneShard(final PowerstoneShard card) { diff --git a/Mage.Sets/src/mage/cards/t/TidyConclusion.java b/Mage.Sets/src/mage/cards/t/TidyConclusion.java index 69b74d23b7f..c362070795e 100644 --- a/Mage.Sets/src/mage/cards/t/TidyConclusion.java +++ b/Mage.Sets/src/mage/cards/t/TidyConclusion.java @@ -1,29 +1,29 @@ - package mage.cards.t; -import java.util.UUID; -import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.dynamicvalue.common.ArtifactYouControlCount; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.hint.common.ArtifactYouControlHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.common.FilterControlledArtifactPermanent; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class TidyConclusion extends CardImpl { public TidyConclusion(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{3}{B}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{B}{B}"); // Destroy target creature. You gain 1 life for each artifact you control. this.getSpellAbility().addEffect(new DestroyTargetEffect()); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); - this.getSpellAbility().addEffect(new GainLifeEffect(new PermanentsOnBattlefieldCount(new FilterControlledArtifactPermanent()))); + this.getSpellAbility().addEffect(new GainLifeEffect(ArtifactYouControlCount.instance)); + this.getSpellAbility().addHint(ArtifactYouControlHint.instance); } public TidyConclusion(final TidyConclusion card) { diff --git a/Mage.Sets/src/mage/cards/u/UrzaLordHighArtificer.java b/Mage.Sets/src/mage/cards/u/UrzaLordHighArtificer.java index 616e8dbb6eb..2d783f9150a 100644 --- a/Mage.Sets/src/mage/cards/u/UrzaLordHighArtificer.java +++ b/Mage.Sets/src/mage/cards/u/UrzaLordHighArtificer.java @@ -1,16 +1,17 @@ package mage.cards.u; import mage.MageInt; +import mage.MageObject; import mage.Mana; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapTargetCost; import mage.abilities.costs.mana.GenericManaCost; - -import mage.abilities.effects.ContinuousEffect; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.asthought.PlayFromNotOwnHandZoneTargetEffect; +import mage.abilities.hint.common.ArtifactYouControlHint; import mage.abilities.mana.SimpleManaAbility; import mage.cards.Card; import mage.cards.CardImpl; @@ -24,12 +25,8 @@ import mage.game.Game; import mage.game.permanent.token.KarnConstructToken; import mage.players.Player; import mage.target.common.TargetControlledPermanent; -import mage.target.targetpointer.FixedTargets; -import mage.util.CardUtil; import java.util.UUID; -import mage.MageObject; -import mage.abilities.effects.common.asthought.PlayFromNotOwnHandZoneTargetEffect; /** * @author TheElk801 @@ -53,7 +50,9 @@ public final class UrzaLordHighArtificer extends CardImpl { this.toughness = new MageInt(4); // When Urza, Lord High Artificer enters the battlefield, create a 0/0 colorless Construct artifact creature token with "This creature gets +1/+1 for each artifact you control." - this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new KarnConstructToken()))); + this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new KarnConstructToken())) + .addHint(ArtifactYouControlHint.instance) + ); // Tap an untapped artifact you control: Add {U}. this.addAbility(new SimpleManaAbility( @@ -100,7 +99,7 @@ class UrzaLordHighArtificerEffect extends OneShotEffect { } controller.shuffleLibrary(source, game); Card card = controller.getLibrary().getFromTop(game); - return PlayFromNotOwnHandZoneTargetEffect.exileAndPlayFromExile(game, source, card, - TargetController.YOU, Duration.EndOfTurn, true); + return PlayFromNotOwnHandZoneTargetEffect.exileAndPlayFromExile(game, source, card, + TargetController.YOU, Duration.EndOfTurn, true); } } diff --git a/Mage.Sets/src/mage/cards/v/VaultOfCatlacan.java b/Mage.Sets/src/mage/cards/v/VaultOfCatlacan.java index 06ea9db04bb..2fa55288f79 100644 --- a/Mage.Sets/src/mage/cards/v/VaultOfCatlacan.java +++ b/Mage.Sets/src/mage/cards/v/VaultOfCatlacan.java @@ -1,14 +1,13 @@ - package mage.cards.v; -import java.util.UUID; import mage.Mana; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; -import mage.abilities.effects.mana.DynamicManaEffect; +import mage.abilities.dynamicvalue.common.ArtifactYouControlCount; import mage.abilities.effects.common.InfoEffect; +import mage.abilities.effects.mana.DynamicManaEffect; +import mage.abilities.hint.common.ArtifactYouControlHint; import mage.abilities.mana.AnyColorManaAbility; import mage.abilities.mana.SimpleManaAbility; import mage.cards.CardImpl; @@ -16,10 +15,10 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SuperType; import mage.constants.Zone; -import mage.filter.StaticFilters; + +import java.util.UUID; /** - * * @author LevelX2 */ public final class VaultOfCatlacan extends CardImpl { @@ -40,8 +39,9 @@ public final class VaultOfCatlacan extends CardImpl { // {T}: Add {U} for each artifact you control. this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, - new DynamicManaEffect(Mana.BlueMana(1), new PermanentsOnBattlefieldCount(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT)), - new TapSourceCost())); + new DynamicManaEffect(Mana.BlueMana(1), ArtifactYouControlCount.instance), + new TapSourceCost()) + .addHint(ArtifactYouControlHint.instance)); } diff --git a/Mage/src/main/java/mage/abilities/dynamicvalue/common/ArtifactsYouControlCount.java b/Mage/src/main/java/mage/abilities/dynamicvalue/common/ArtifactYouControlCount.java similarity index 76% rename from Mage/src/main/java/mage/abilities/dynamicvalue/common/ArtifactsYouControlCount.java rename to Mage/src/main/java/mage/abilities/dynamicvalue/common/ArtifactYouControlCount.java index 93613cf69a3..4c626a97a9c 100644 --- a/Mage/src/main/java/mage/abilities/dynamicvalue/common/ArtifactsYouControlCount.java +++ b/Mage/src/main/java/mage/abilities/dynamicvalue/common/ArtifactYouControlCount.java @@ -9,7 +9,7 @@ import mage.game.Game; /** * @author JayDi85 */ -public enum ArtifactsYouControlCount implements DynamicValue { +public enum ArtifactYouControlCount implements DynamicValue { instance; @@ -19,17 +19,17 @@ public enum ArtifactsYouControlCount implements DynamicValue { } @Override - public ArtifactsYouControlCount copy() { + public ArtifactYouControlCount copy() { return instance; } @Override public String toString() { - return "X"; + return "1"; // uses "for each" effects, so must be 1, not X } @Override public String getMessage() { - return "artifacts you control"; + return "artifact you control"; } } diff --git a/Mage/src/main/java/mage/abilities/hint/common/ArtifactsYouControlHint.java b/Mage/src/main/java/mage/abilities/hint/common/ArtifactYouControlHint.java similarity index 73% rename from Mage/src/main/java/mage/abilities/hint/common/ArtifactsYouControlHint.java rename to Mage/src/main/java/mage/abilities/hint/common/ArtifactYouControlHint.java index d4b253da8ec..960c416385f 100644 --- a/Mage/src/main/java/mage/abilities/hint/common/ArtifactsYouControlHint.java +++ b/Mage/src/main/java/mage/abilities/hint/common/ArtifactYouControlHint.java @@ -1,7 +1,7 @@ package mage.abilities.hint.common; import mage.abilities.Ability; -import mage.abilities.dynamicvalue.common.ArtifactsYouControlCount; +import mage.abilities.dynamicvalue.common.ArtifactYouControlCount; import mage.abilities.hint.Hint; import mage.abilities.hint.ValueHint; import mage.game.Game; @@ -9,10 +9,10 @@ import mage.game.Game; /** * @author JayDi85 */ -public enum ArtifactsYouControlHint implements Hint { +public enum ArtifactYouControlHint implements Hint { instance; - private static final Hint hint = new ValueHint("Artifacts you control", ArtifactsYouControlCount.instance); + private static final Hint hint = new ValueHint("Artifacts you control", ArtifactYouControlCount.instance); @Override public String getText(Game game, Ability ability) { diff --git a/Mage/src/main/java/mage/abilities/keyword/AffinityForArtifactsAbility.java b/Mage/src/main/java/mage/abilities/keyword/AffinityForArtifactsAbility.java index 26cecb80a6b..9f35ffadbca 100644 --- a/Mage/src/main/java/mage/abilities/keyword/AffinityForArtifactsAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/AffinityForArtifactsAbility.java @@ -2,7 +2,7 @@ package mage.abilities.keyword; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.AffinityEffect; -import mage.abilities.hint.common.ArtifactsYouControlHint; +import mage.abilities.hint.common.ArtifactYouControlHint; import mage.constants.Zone; import mage.filter.StaticFilters; @@ -15,7 +15,7 @@ public class AffinityForArtifactsAbility extends SimpleStaticAbility { super(Zone.ALL, new AffinityEffect(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT)); setRuleAtTheTop(true); - this.addHint(ArtifactsYouControlHint.instance); + this.addHint(ArtifactYouControlHint.instance); } public AffinityForArtifactsAbility(final AffinityForArtifactsAbility ability) { diff --git a/Mage/src/main/java/mage/game/permanent/token/KarnConstructToken.java b/Mage/src/main/java/mage/game/permanent/token/KarnConstructToken.java index 842cc6d7da1..95b330293d9 100644 --- a/Mage/src/main/java/mage/game/permanent/token/KarnConstructToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/KarnConstructToken.java @@ -2,14 +2,12 @@ package mage.game.permanent.token; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.dynamicvalue.DynamicValue; -import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.dynamicvalue.common.ArtifactYouControlCount; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterControlledPermanent; import java.util.ArrayList; import java.util.Arrays; @@ -20,12 +18,6 @@ import java.util.List; */ public final class KarnConstructToken extends TokenImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent("artifacts you control"); - - static { - filter.add(CardType.ARTIFACT.getPredicate()); - } - static final private List tokenImageSets = new ArrayList<>(); static { @@ -41,10 +33,8 @@ public final class KarnConstructToken extends TokenImpl { power = new MageInt(0); toughness = new MageInt(0); - DynamicValue value = new PermanentsOnBattlefieldCount(filter); - this.addAbility(new SimpleStaticAbility( - Zone.BATTLEFIELD, - new BoostSourceEffect(value, value, Duration.WhileOnBattlefield) + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, + new BoostSourceEffect(ArtifactYouControlCount.instance, ArtifactYouControlCount.instance, Duration.WhileOnBattlefield) .setText("This creature gets +1/+1 for each artifact you control") )); }