diff --git a/Mage.Sets/src/mage/cards/k/KarametraGodOfHarvests.java b/Mage.Sets/src/mage/cards/k/KarametraGodOfHarvests.java index 76bef99881..103caf6364 100644 --- a/Mage.Sets/src/mage/cards/k/KarametraGodOfHarvests.java +++ b/Mage.Sets/src/mage/cards/k/KarametraGodOfHarvests.java @@ -3,7 +3,6 @@ package mage.cards.k; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SpellCastControllerTriggeredAbility; -import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.DevotionCount; import mage.abilities.effects.Effect; import mage.abilities.effects.common.continuous.LoseCreatureTypeSourceEffect; @@ -12,7 +11,9 @@ import mage.abilities.hint.ValueHint; import mage.abilities.keyword.IndestructibleAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; import mage.filter.FilterCard; import mage.filter.StaticFilters; import mage.filter.predicate.Predicates; @@ -31,11 +32,10 @@ public final class KarametraGodOfHarvests extends CardImpl { static { filter.add(Predicates.or( new SubtypePredicate(SubType.FOREST), - new SubtypePredicate(SubType.PLAINS))); + new SubtypePredicate(SubType.PLAINS) + )); } - private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.G, ColoredManaSymbol.W); - public KarametraGodOfHarvests(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{3}{G}{W}"); addSuperType(SuperType.LEGENDARY); @@ -48,13 +48,15 @@ public final class KarametraGodOfHarvests extends CardImpl { this.addAbility(IndestructibleAbility.getInstance()); // As long as your devotion to green and white is less than seven, Karametra isn't a creature. - Effect effect = new LoseCreatureTypeSourceEffect(xValue, 7); - effect.setText("As long as your devotion to green and white is less than seven, Karametra isn't a creature"); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect).addHint(new ValueHint("Devotion to green and white", xValue))); + Effect effect = new LoseCreatureTypeSourceEffect(DevotionCount.GW, 7); + effect.setText("As long as your devotion to green and white is less than seven, {this} isn't a creature"); + this.addAbility(new SimpleStaticAbility(effect).addHint(new ValueHint("Devotion to green and white", DevotionCount.GW))); // Whenever you cast a creature spell, you may search your library for a Forest or Plains card, put it onto the battlefield tapped, then shuffle your library. this.addAbility(new SpellCastControllerTriggeredAbility( - new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), true), StaticFilters.FILTER_SPELL_A_CREATURE, true)); + new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), true), + StaticFilters.FILTER_SPELL_A_CREATURE, true + )); } public KarametraGodOfHarvests(final KarametraGodOfHarvests card) { diff --git a/Mage.Sets/src/mage/cards/k/KarametrasAcolyte.java b/Mage.Sets/src/mage/cards/k/KarametrasAcolyte.java index 9f53fc8cf0..fe583cde50 100644 --- a/Mage.Sets/src/mage/cards/k/KarametrasAcolyte.java +++ b/Mage.Sets/src/mage/cards/k/KarametrasAcolyte.java @@ -2,14 +2,12 @@ package mage.cards.k; import mage.MageInt; import mage.Mana; -import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.DevotionCount; import mage.abilities.hint.ValueHint; import mage.abilities.mana.DynamicManaAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.ColoredManaSymbol; import mage.constants.SubType; import java.util.UUID; @@ -19,8 +17,6 @@ import java.util.UUID; */ public final class KarametrasAcolyte extends CardImpl { - private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.G); - public KarametrasAcolyte(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}"); this.subtype.add(SubType.HUMAN); @@ -30,9 +26,10 @@ public final class KarametrasAcolyte extends CardImpl { this.toughness = new MageInt(4); // {T}: Add an amount of {G} equal to your devotion to green. - this.addAbility(new DynamicManaAbility(Mana.GreenMana(1), xValue, - "Add an amount of {G} equal to your devotion to green. (Each {G} in the mana costs of permanents you control counts towards your devotion to green.)") - .addHint(new ValueHint("Devotion to green", xValue))); + this.addAbility(new DynamicManaAbility( + Mana.GreenMana(1), DevotionCount.G, "Add an amount of {G} equal to your devotion to green. " + + "(Each {G} in the mana costs of permanents you control counts towards your devotion to green.)" + ).addHint(new ValueHint("Devotion to green", DevotionCount.G))); } public KarametrasAcolyte(final KarametrasAcolyte card) { diff --git a/Mage.Sets/src/mage/cards/k/KeranosGodOfStorms.java b/Mage.Sets/src/mage/cards/k/KeranosGodOfStorms.java index c78258feea..5de8783f24 100644 --- a/Mage.Sets/src/mage/cards/k/KeranosGodOfStorms.java +++ b/Mage.Sets/src/mage/cards/k/KeranosGodOfStorms.java @@ -3,7 +3,6 @@ package mage.cards.k; import mage.MageInt; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.DevotionCount; import mage.abilities.effects.Effect; import mage.abilities.effects.common.DamageTargetEffect; @@ -16,7 +15,10 @@ import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.cards.CardsImpl; -import mage.constants.*; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.constants.Zone; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.GameEvent.EventType; @@ -32,8 +34,6 @@ import java.util.UUID; */ public final class KeranosGodOfStorms extends CardImpl { - private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.U, ColoredManaSymbol.R); - public KeranosGodOfStorms(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{3}{U}{R}"); addSuperType(SuperType.LEGENDARY); @@ -46,16 +46,14 @@ public final class KeranosGodOfStorms extends CardImpl { this.addAbility(IndestructibleAbility.getInstance()); // As long as your devotion to blue and red is less than seven, Keranos isn't a creature. - Effect effect = new LoseCreatureTypeSourceEffect(xValue, 7); - effect.setText("As long as your devotion to blue and red is less than seven, Keranos isn't a creature"); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect).addHint(new ValueHint("Devotion to blue and red", xValue))); + Effect effect = new LoseCreatureTypeSourceEffect(DevotionCount.UR, 7); + effect.setText("As long as your devotion to blue and red is less than seven, {this} isn't a creature"); + this.addAbility(new SimpleStaticAbility(effect).addHint(new ValueHint("Devotion to blue and red", DevotionCount.UR))); // Reveal the first card you draw on each of your turns. // Whenever you reveal a land card this way, draw a card. // Whenever you reveal a nonland card this way, Keranos deals 3 damage to any target. this.addAbility(new KeranosGodOfStormsTriggeredAbility(), new CardsAmountDrawnThisTurnWatcher()); - - } public KeranosGodOfStorms(final KeranosGodOfStorms card) { @@ -74,7 +72,7 @@ class KeranosGodOfStormsTriggeredAbility extends TriggeredAbilityImpl { super(Zone.BATTLEFIELD, new InfoEffect(""), false); } - KeranosGodOfStormsTriggeredAbility(final KeranosGodOfStormsTriggeredAbility ability) { + private KeranosGodOfStormsTriggeredAbility(final KeranosGodOfStormsTriggeredAbility ability) { super(ability); } @@ -90,36 +88,38 @@ class KeranosGodOfStormsTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkTrigger(GameEvent event, Game game) { - if (event.getPlayerId().equals(this.getControllerId())) { - if (game.isActivePlayer(this.getControllerId())) { - CardsAmountDrawnThisTurnWatcher watcher = - game.getState().getWatcher(CardsAmountDrawnThisTurnWatcher.class); - if (watcher != null && watcher.getAmountCardsDrawn(event.getPlayerId()) != 1) { - return false; - } - Card card = game.getCard(event.getTargetId()); - Player controller = game.getPlayer(this.getControllerId()); - Permanent sourcePermanent = (Permanent) getSourceObject(game); - if (card != null && controller != null && sourcePermanent != null) { - controller.revealCards(sourcePermanent.getIdName(), new CardsImpl(card), game); - this.getTargets().clear(); - this.getEffects().clear(); - if (card.isLand()) { - this.addEffect(new DrawCardSourceControllerEffect(1)); - } else { - this.addEffect(new DamageTargetEffect(3)); - this.addTarget(new TargetAnyTarget()); - } - return true; - } - } + if (!event.getPlayerId().equals(this.getControllerId())) { + return false; } - return false; + if (!game.isActivePlayer(this.getControllerId())) { + return false; + } + CardsAmountDrawnThisTurnWatcher watcher = + game.getState().getWatcher(CardsAmountDrawnThisTurnWatcher.class); + if (watcher != null && watcher.getAmountCardsDrawn(event.getPlayerId()) != 1) { + return false; + } + Card card = game.getCard(event.getTargetId()); + Player controller = game.getPlayer(this.getControllerId()); + Permanent sourcePermanent = (Permanent) getSourceObject(game); + if (card == null || controller == null || sourcePermanent == null) { + return false; + } + controller.revealCards(sourcePermanent.getIdName(), new CardsImpl(card), game); + this.getTargets().clear(); + this.getEffects().clear(); + if (card.isLand()) { + this.addEffect(new DrawCardSourceControllerEffect(1)); + } else { + this.addEffect(new DamageTargetEffect(3)); + this.addTarget(new TargetAnyTarget()); + } + return true; } @Override public String getRule() { return "Reveal the first card you draw on each of your turns. Whenever you reveal a land card this way, draw a card. " + - "Whenever you reveal a nonland card this way, Keranos deals 3 damage to any target."; + "Whenever you reveal a nonland card this way, {this} deals 3 damage to any target."; } } diff --git a/Mage.Sets/src/mage/cards/k/KlothysGodOfDestiny.java b/Mage.Sets/src/mage/cards/k/KlothysGodOfDestiny.java index 1e092b63bf..6cb9ae76b0 100644 --- a/Mage.Sets/src/mage/cards/k/KlothysGodOfDestiny.java +++ b/Mage.Sets/src/mage/cards/k/KlothysGodOfDestiny.java @@ -5,7 +5,6 @@ import mage.Mana; import mage.abilities.Ability; import mage.abilities.common.BeginningOfPreCombatMainTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.DevotionCount; import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; @@ -28,8 +27,6 @@ import java.util.UUID; */ public final class KlothysGodOfDestiny extends CardImpl { - private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.R, ColoredManaSymbol.G); - public KlothysGodOfDestiny(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{1}{R}{G}"); @@ -42,9 +39,9 @@ public final class KlothysGodOfDestiny extends CardImpl { this.addAbility(IndestructibleAbility.getInstance()); // As long as your devotion to red and green is less than seven, Klothys isn't a creature. - Effect effect = new LoseCreatureTypeSourceEffect(xValue, 7); + Effect effect = new LoseCreatureTypeSourceEffect(DevotionCount.RG, 7); effect.setText("As long as your devotion to red and green is less than seven, {this} isn't a creature"); - this.addAbility(new SimpleStaticAbility(effect).addHint(new ValueHint("Devotion to red and green", xValue))); + this.addAbility(new SimpleStaticAbility(effect).addHint(new ValueHint("Devotion to red and green", DevotionCount.RG))); // At the beginning of your precombat main phase, exile target card from a graveyard. If it was a land card, add {R} or {G}. Otherwise, you gain 2 life and Klothys deals 2 damage to each opponent. Ability ability = new BeginningOfPreCombatMainTriggeredAbility( diff --git a/Mage.Sets/src/mage/cards/k/KlothyssDesign.java b/Mage.Sets/src/mage/cards/k/KlothyssDesign.java index 147d684560..57d327364c 100644 --- a/Mage.Sets/src/mage/cards/k/KlothyssDesign.java +++ b/Mage.Sets/src/mage/cards/k/KlothyssDesign.java @@ -1,13 +1,11 @@ package mage.cards.k; -import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.DevotionCount; import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.hint.ValueHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.ColoredManaSymbol; import mage.constants.Duration; import mage.filter.StaticFilters; @@ -18,18 +16,16 @@ import java.util.UUID; */ public final class KlothyssDesign extends CardImpl { - private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.G); - public KlothyssDesign(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{5}{G}"); // Creatures you control get +X/+X until end of turn, where X is your devotion to green. this.getSpellAbility().addEffect(new BoostControlledEffect( - xValue, xValue, Duration.EndOfTurn, + DevotionCount.G, DevotionCount.G, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES, false, true )); - this.getSpellAbility().addHint(new ValueHint("Devotion to green", xValue)); + this.getSpellAbility().addHint(new ValueHint("Devotion to green", DevotionCount.G)); } private KlothyssDesign(final KlothyssDesign card) { diff --git a/Mage.Sets/src/mage/cards/k/KruphixGodOfHorizons.java b/Mage.Sets/src/mage/cards/k/KruphixGodOfHorizons.java index b0effcf4c8..2d36ca74eb 100644 --- a/Mage.Sets/src/mage/cards/k/KruphixGodOfHorizons.java +++ b/Mage.Sets/src/mage/cards/k/KruphixGodOfHorizons.java @@ -3,7 +3,6 @@ package mage.cards.k; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.DevotionCount; import mage.abilities.effects.Effect; import mage.abilities.effects.ReplacementEffectImpl; @@ -24,8 +23,6 @@ import java.util.UUID; */ public final class KruphixGodOfHorizons extends CardImpl { - private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.G, ColoredManaSymbol.U); - public KruphixGodOfHorizons(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{3}{G}{U}"); addSuperType(SuperType.LEGENDARY); @@ -36,20 +33,23 @@ public final class KruphixGodOfHorizons extends CardImpl { // Indestructible this.addAbility(IndestructibleAbility.getInstance()); + // As long as your devotion to green and blue is less than seven, Kruhpix isn't a creature. - Effect effect = new LoseCreatureTypeSourceEffect(xValue, 7); - effect.setText("As long as your devotion to green and blue is less than seven, Kruhpix isn't a creature"); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect).addHint(new ValueHint("Devotion to green and blue", xValue))); + Effect effect = new LoseCreatureTypeSourceEffect(DevotionCount.GU, 7); + effect.setText("As long as your devotion to green and blue is less than seven, {this} isn't a creature"); + this.addAbility(new SimpleStaticAbility(effect).addHint(new ValueHint("Devotion to green and blue", DevotionCount.GU))); // You have no maximum hand size. - effect = new MaximumHandSizeControllerEffect(Integer.MAX_VALUE, Duration.WhileOnBattlefield, MaximumHandSizeControllerEffect.HandSizeModification.SET); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + this.addAbility(new SimpleStaticAbility(new MaximumHandSizeControllerEffect( + Integer.MAX_VALUE, Duration.WhileOnBattlefield, + MaximumHandSizeControllerEffect.HandSizeModification.SET + ))); // If unused mana would empty from your mana pool, that mana becomes colorless instead. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new KruphixGodOfHorizonsEffect())); + this.addAbility(new SimpleStaticAbility(new KruphixGodOfHorizonsEffect())); } - public KruphixGodOfHorizons(final KruphixGodOfHorizons card) { + private KruphixGodOfHorizons(final KruphixGodOfHorizons card) { super(card); } @@ -61,12 +61,12 @@ public final class KruphixGodOfHorizons extends CardImpl { class KruphixGodOfHorizonsEffect extends ReplacementEffectImpl { - public KruphixGodOfHorizonsEffect() { + KruphixGodOfHorizonsEffect() { super(Duration.WhileOnBattlefield, Outcome.Benefit); staticText = "If you would lose unspent mana, that mana becomes colorless instead."; } - public KruphixGodOfHorizonsEffect(final KruphixGodOfHorizonsEffect effect) { + private KruphixGodOfHorizonsEffect(final KruphixGodOfHorizonsEffect effect) { super(effect); } diff --git a/Mage.Sets/src/mage/cards/m/MarshmistTitan.java b/Mage.Sets/src/mage/cards/m/MarshmistTitan.java index a4cfca2c7d..b799b27b27 100644 --- a/Mage.Sets/src/mage/cards/m/MarshmistTitan.java +++ b/Mage.Sets/src/mage/cards/m/MarshmistTitan.java @@ -5,7 +5,6 @@ import mage.Mana; import mage.abilities.Ability; import mage.abilities.SpellAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.DevotionCount; import mage.abilities.effects.common.cost.CostModificationEffectImpl; import mage.abilities.hint.ValueHint; @@ -30,10 +29,10 @@ public final class MarshmistTitan extends CardImpl { // Marshmist Titan costs {X} less to cast, where X is your devotion to black. this.addAbility(new SimpleStaticAbility(Zone.STACK, new MarshmistTitanCostReductionEffect()) - .addHint(new ValueHint("Devotion to black", MarshmistTitanCostReductionEffect.xValue))); + .addHint(new ValueHint("Devotion to black", DevotionCount.B))); } - public MarshmistTitan(final MarshmistTitan card) { + private MarshmistTitan(final MarshmistTitan card) { super(card); } @@ -45,14 +44,13 @@ public final class MarshmistTitan extends CardImpl { class MarshmistTitanCostReductionEffect extends CostModificationEffectImpl { - static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.B); - - public MarshmistTitanCostReductionEffect() { + MarshmistTitanCostReductionEffect() { super(Duration.Custom, Outcome.Benefit, CostModificationType.REDUCE_COST); - staticText = "{this} costs {X} less to cast, where X is your devotion to black <i>(Each {B} in the mana costs of permanents you control counts toward your devotion to black.)</i> "; + staticText = "{this} costs {X} less to cast, where X is your devotion to black. " + + "<i>(Each {B} in the mana costs of permanents you control counts toward your devotion to black.)</i> "; } - public MarshmistTitanCostReductionEffect(final MarshmistTitanCostReductionEffect effect) { + private MarshmistTitanCostReductionEffect(final MarshmistTitanCostReductionEffect effect) { super(effect); } @@ -60,22 +58,19 @@ class MarshmistTitanCostReductionEffect extends CostModificationEffectImpl { public boolean apply(Game game, Ability source, Ability abilityToModify) { SpellAbility spellAbility = (SpellAbility) abilityToModify; Mana mana = spellAbility.getManaCostsToPay().getMana(); - if (mana.getGeneric() > 0) { - int count = xValue.calculate(game, source, this); - int newCount = mana.getGeneric() - count; - if (newCount < 0) { - newCount = 0; - } - mana.setGeneric(newCount); - spellAbility.getManaCostsToPay().load(mana.toString()); - return true; + if (mana.getGeneric() == 0) { + return false; } - return false; + int count = DevotionCount.B.calculate(game, source, this); + mana.setGeneric(Math.max(mana.getGeneric() - count, 0)); + spellAbility.getManaCostsToPay().load(mana.toString()); + return true; } @Override public boolean applies(Ability abilityToModify, Ability source, Game game) { - return abilityToModify.getSourceId().equals(source.getSourceId()) && (abilityToModify instanceof SpellAbility); + return abilityToModify instanceof SpellAbility + && abilityToModify.getSourceId().equals(source.getSourceId()); } @Override diff --git a/Mage.Sets/src/mage/cards/m/MasterOfWaves.java b/Mage.Sets/src/mage/cards/m/MasterOfWaves.java index a563aafd4e..e10ef69162 100644 --- a/Mage.Sets/src/mage/cards/m/MasterOfWaves.java +++ b/Mage.Sets/src/mage/cards/m/MasterOfWaves.java @@ -4,7 +4,6 @@ import mage.MageInt; import mage.ObjectColor; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.DevotionCount; import mage.abilities.effects.Effect; import mage.abilities.effects.common.CreateTokenEffect; @@ -13,9 +12,10 @@ import mage.abilities.hint.ValueHint; import mage.abilities.keyword.ProtectionAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.SubtypePredicate; import mage.game.permanent.token.MasterOfWavesElementalToken; import java.util.UUID; @@ -25,13 +25,8 @@ import java.util.UUID; */ public final class MasterOfWaves extends CardImpl { - private static final FilterCreaturePermanent filterBoost = new FilterCreaturePermanent("Elemental creatures"); - - static { - filterBoost.add(new SubtypePredicate(SubType.ELEMENTAL)); - } - - private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.U); + private static final FilterCreaturePermanent filterBoost + = new FilterCreaturePermanent(SubType.ELEMENTAL, "Elemental creatures"); public MasterOfWaves(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}"); @@ -45,13 +40,15 @@ public final class MasterOfWaves extends CardImpl { this.addAbility(ProtectionAbility.from(ObjectColor.RED)); // Elemental creatures you control get +1/+1. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, filterBoost, false))); + this.addAbility(new SimpleStaticAbility(new BoostControlledEffect( + 1, 1, Duration.WhileOnBattlefield, filterBoost, false + ))); // When Master of Waves enters the battlefield, create a number of 1/0 blue Elemental creature tokens equal to your devotion to blue. // <i>(Each {U} in the mana costs of permanents you control counts toward your devotion to blue.)</i> - Effect effect = new CreateTokenEffect(new MasterOfWavesElementalToken(), xValue); + Effect effect = new CreateTokenEffect(new MasterOfWavesElementalToken(), DevotionCount.U); effect.setText("create a number of 1/0 blue Elemental creature tokens equal to your devotion to blue. <i>(Each {U} in the mana costs of permanents you control counts toward your devotion to blue.)</i>"); - this.addAbility(new EntersBattlefieldTriggeredAbility(effect).addHint(new ValueHint("Devotion to blue", xValue))); + this.addAbility(new EntersBattlefieldTriggeredAbility(effect).addHint(new ValueHint("Devotion to blue", DevotionCount.U))); } public MasterOfWaves(final MasterOfWaves card) { diff --git a/Mage.Sets/src/mage/cards/m/MogisGodOfSlaughter.java b/Mage.Sets/src/mage/cards/m/MogisGodOfSlaughter.java index 4b366f6990..0baac0226a 100644 --- a/Mage.Sets/src/mage/cards/m/MogisGodOfSlaughter.java +++ b/Mage.Sets/src/mage/cards/m/MogisGodOfSlaughter.java @@ -8,7 +8,6 @@ import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.Cost; import mage.abilities.costs.common.SacrificeTargetCost; -import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.DevotionCount; import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; @@ -34,8 +33,6 @@ import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT; */ public final class MogisGodOfSlaughter extends CardImpl { - private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.B, ColoredManaSymbol.R); - public MogisGodOfSlaughter(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{2}{B}{R}"); addSuperType(SuperType.LEGENDARY); @@ -48,9 +45,9 @@ public final class MogisGodOfSlaughter extends CardImpl { this.addAbility(IndestructibleAbility.getInstance()); // As long as your devotion to black and red is less than seven, Mogis isn't a creature. - Effect effect = new LoseCreatureTypeSourceEffect(xValue, 7); - effect.setText("As long as your devotion to black and red is less than seven, Mogis isn't a creature"); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect).addHint(new ValueHint("Devotion to black and red", xValue))); + Effect effect = new LoseCreatureTypeSourceEffect(DevotionCount.BR, 7); + effect.setText("As long as your devotion to black and red is less than seven, {this} isn't a creature"); + this.addAbility(new SimpleStaticAbility(effect).addHint(new ValueHint("Devotion to black and red", DevotionCount.BR))); // At the beginning of each opponent's upkeep, Mogis deals 2 damage to that player unless they sacrifice a creature. effect = new DoUnlessTargetPaysCost(new DamageTargetEffect(2, true, "that player"), @@ -61,7 +58,7 @@ public final class MogisGodOfSlaughter extends CardImpl { this.addAbility(ability); } - public MogisGodOfSlaughter(final MogisGodOfSlaughter card) { + private MogisGodOfSlaughter(final MogisGodOfSlaughter card) { super(card); } diff --git a/Mage.Sets/src/mage/cards/m/MogissMarauder.java b/Mage.Sets/src/mage/cards/m/MogissMarauder.java index cc839ac2fb..10b87cd340 100644 --- a/Mage.Sets/src/mage/cards/m/MogissMarauder.java +++ b/Mage.Sets/src/mage/cards/m/MogissMarauder.java @@ -3,7 +3,6 @@ package mage.cards.m; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.DevotionCount; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.hint.ValueHint; @@ -12,7 +11,6 @@ import mage.abilities.keyword.IntimidateAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.ColoredManaSymbol; import mage.constants.Duration; import mage.constants.SubType; import mage.game.Game; @@ -36,16 +34,21 @@ public final class MogissMarauder extends CardImpl { // When Mogis's Marauder enters the battlefield, up to X target creatures each gain intimidate and haste, where X is your devotion to black. Ability ability = new EntersBattlefieldTriggeredAbility( - new GainAbilityTargetEffect(IntimidateAbility.getInstance(), Duration.EndOfTurn, - "up to X target creatures each gain intimidate"), false); - ability.addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn, - "and haste until end of turn, where X is your devotion to black")); + new GainAbilityTargetEffect( + IntimidateAbility.getInstance(), Duration.EndOfTurn, + "up to X target creatures each gain intimidate" + ), false + ); + ability.addEffect(new GainAbilityTargetEffect( + HasteAbility.getInstance(), Duration.EndOfTurn, + "and haste until end of turn, where X is your devotion to black" + )); ability.setTargetAdjuster(MogissMarauderAdjuster.instance); - ability.addHint(new ValueHint("Devotion to black", MogissMarauderAdjuster.xValue)); + ability.addHint(new ValueHint("Devotion to black", DevotionCount.B)); this.addAbility(ability); } - public MogissMarauder(final MogissMarauder card) { + private MogissMarauder(final MogissMarauder card) { super(card); } @@ -56,15 +59,12 @@ public final class MogissMarauder extends CardImpl { } enum MogissMarauderAdjuster implements TargetAdjuster { - instance; - static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.B); - @Override public void adjustTargets(Ability ability, Game game) { ability.getTargets().clear(); - int numbTargets = xValue.calculate(game, ability, null); + int numbTargets = DevotionCount.B.calculate(game, ability, null); if (numbTargets > 0) { ability.addTarget(new TargetCreaturePermanent(0, numbTargets)); } diff --git a/Mage.Sets/src/mage/cards/n/NykthosShrineToNyx.java b/Mage.Sets/src/mage/cards/n/NykthosShrineToNyx.java index 87497bb64f..7306bd6a60 100644 --- a/Mage.Sets/src/mage/cards/n/NykthosShrineToNyx.java +++ b/Mage.Sets/src/mage/cards/n/NykthosShrineToNyx.java @@ -4,7 +4,6 @@ import mage.Mana; import mage.abilities.Ability; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.DevotionCount; import mage.abilities.effects.common.ManaEffect; import mage.abilities.hint.ValueHint; @@ -14,7 +13,6 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.choices.ChoiceColor; import mage.constants.CardType; -import mage.constants.ColoredManaSymbol; import mage.constants.SuperType; import mage.constants.Zone; import mage.game.Game; @@ -23,6 +21,7 @@ import mage.players.Player; import java.util.ArrayList; import java.util.List; import java.util.UUID; +import java.util.stream.Collectors; /** * @author LevelX2 @@ -37,15 +36,15 @@ public final class NykthosShrineToNyx extends CardImpl { this.addAbility(new ColorlessManaAbility()); // {2}, {T}: Choose a color. Add an amount of mana of that color equal to your devotion to that color. Ability ability = new NykthosShrineToNyxManaAbility(); - ability.addHint(new ValueHint("Devotion to red", NykthosDynamicManaEffect.xValueR)); - ability.addHint(new ValueHint("Devotion to blue", NykthosDynamicManaEffect.xValueU)); - ability.addHint(new ValueHint("Devotion to white", NykthosDynamicManaEffect.xValueW)); - ability.addHint(new ValueHint("Devotion to black", NykthosDynamicManaEffect.xValueB)); - ability.addHint(new ValueHint("Devotion to green", NykthosDynamicManaEffect.xValueG)); + ability.addHint(new ValueHint("Devotion to white", DevotionCount.W)); + ability.addHint(new ValueHint("Devotion to blue", DevotionCount.U)); + ability.addHint(new ValueHint("Devotion to black", DevotionCount.B)); + ability.addHint(new ValueHint("Devotion to red", DevotionCount.R)); + ability.addHint(new ValueHint("Devotion to green", DevotionCount.G)); this.addAbility(ability); } - public NykthosShrineToNyx(final NykthosShrineToNyx card) { + private NykthosShrineToNyx(final NykthosShrineToNyx card) { super(card); } @@ -57,12 +56,12 @@ public final class NykthosShrineToNyx extends CardImpl { class NykthosShrineToNyxManaAbility extends ActivatedManaAbilityImpl { - public NykthosShrineToNyxManaAbility() { + NykthosShrineToNyxManaAbility() { super(Zone.BATTLEFIELD, new NykthosDynamicManaEffect(), new GenericManaCost(2)); this.addCost(new TapSourceCost()); } - public NykthosShrineToNyxManaAbility(final NykthosShrineToNyxManaAbility ability) { + private NykthosShrineToNyxManaAbility(final NykthosShrineToNyxManaAbility ability) { super(ability); } @@ -74,27 +73,22 @@ class NykthosShrineToNyxManaAbility extends ActivatedManaAbilityImpl { @Override public List<Mana> getNetMana(Game game) { ArrayList<Mana> netManaCopy = new ArrayList<>(); - if (game != null) { - netManaCopy.addAll(((ManaEffect) this.getEffects().get(0)).getNetMana(game, this)); + if (game == null) { + return netManaCopy; } + netManaCopy.addAll(((ManaEffect) this.getEffects().get(0)).getNetMana(game, this)); return netManaCopy; } } class NykthosDynamicManaEffect extends ManaEffect { - static final DynamicValue xValueR = new DevotionCount(ColoredManaSymbol.R); - static final DynamicValue xValueU = new DevotionCount(ColoredManaSymbol.U); - static final DynamicValue xValueW = new DevotionCount(ColoredManaSymbol.W); - static final DynamicValue xValueB = new DevotionCount(ColoredManaSymbol.B); - static final DynamicValue xValueG = new DevotionCount(ColoredManaSymbol.G); - - public NykthosDynamicManaEffect() { + NykthosDynamicManaEffect() { super(); this.staticText = "Choose a color. Add an amount of mana of that color equal to your devotion to that color. <i>(Your devotion to a color is the number of mana symbols of that color in the mana costs of permanents you control.)</i>"; } - public NykthosDynamicManaEffect(final NykthosDynamicManaEffect effect) { + private NykthosDynamicManaEffect(final NykthosDynamicManaEffect effect) { super(effect); } @@ -106,60 +100,59 @@ class NykthosDynamicManaEffect extends ManaEffect { @Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - checkToFirePossibleEvents(getMana(game, source), game, source); - controller.getManaPool().addMana(getMana(game, source), game, source); - return true; + if (controller == null) { + return false; } - return false; + checkToFirePossibleEvents(getMana(game, source), game, source); + controller.getManaPool().addMana(getMana(game, source), game, source); + return true; } @Override public List<Mana> getNetMana(Game game, Ability source) { - List<Mana> netMana = new ArrayList<>(); - for (String colorChoice : ChoiceColor.getBaseColors()) { - Mana mana = computeMana(colorChoice, game, source); - if (mana.count() > 0) { - netMana.add(mana); - } - } - return netMana; + return ChoiceColor.getBaseColors() + .stream() + .map(s -> computeMana(s, game, source)) + .filter(mana -> mana.count() > 0) + .collect(Collectors.toList()); } @Override public Mana produceMana(boolean netMana, Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - ChoiceColor choice = new ChoiceColor(); - choice.setMessage("Choose a color for devotion of Nykthos"); - if (controller.choose(outcome, choice, game)) { - return computeMana(choice.getChoice(), game, source); - } + if (controller == null) { + return null; } - return null; + ChoiceColor choice = new ChoiceColor(); + choice.setMessage("Choose a color for devotion of Nykthos"); + if (!controller.choose(outcome, choice, game)) { + return null; + } + return computeMana(choice.getChoice(), game, source); } - public Mana computeMana(String color, Game game, Ability source) { + private Mana computeMana(String color, Game game, Ability source) { Mana mana = new Mana(); - if (color != null && !color.isEmpty()) { - switch (color) { - case "Red": - mana.setRed(xValueR.calculate(game, source, this)); - break; - case "Blue": - mana.setBlue(xValueU.calculate(game, source, this)); - break; - case "White": - mana.setWhite(xValueW.calculate(game, source, this)); - break; - case "Black": - mana.setBlack(xValueB.calculate(game, source, this)); - break; - case "Green": - mana.setGreen(xValueG.calculate(game, source, this)); - break; - } + if (color == null || color.isEmpty()) { + return mana; + } + switch (color) { + case "White": + mana.setWhite(DevotionCount.W.calculate(game, source, this)); + break; + case "Blue": + mana.setBlue(DevotionCount.U.calculate(game, source, this)); + break; + case "Black": + mana.setBlack(DevotionCount.B.calculate(game, source, this)); + break; + case "Red": + mana.setRed(DevotionCount.R.calculate(game, source, this)); + break; + case "Green": + mana.setGreen(DevotionCount.G.calculate(game, source, this)); + break; } return mana; } diff --git a/Mage.Sets/src/mage/cards/n/NyleaGodOfTheHunt.java b/Mage.Sets/src/mage/cards/n/NyleaGodOfTheHunt.java index 0f4f9b80d8..cc746f96ba 100644 --- a/Mage.Sets/src/mage/cards/n/NyleaGodOfTheHunt.java +++ b/Mage.Sets/src/mage/cards/n/NyleaGodOfTheHunt.java @@ -5,7 +5,6 @@ import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.DevotionCount; import mage.abilities.effects.Effect; import mage.abilities.effects.common.continuous.BoostTargetEffect; @@ -16,7 +15,10 @@ import mage.abilities.keyword.IndestructibleAbility; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.constants.SuperType; import mage.filter.StaticFilters; import mage.target.common.TargetCreaturePermanent; @@ -27,8 +29,6 @@ import java.util.UUID; */ public final class NyleaGodOfTheHunt extends CardImpl { - private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.G); - public NyleaGodOfTheHunt(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{3}{G}"); addSuperType(SuperType.LEGENDARY); @@ -40,22 +40,27 @@ public final class NyleaGodOfTheHunt extends CardImpl { // Indestructible this.addAbility(IndestructibleAbility.getInstance()); - // As long as your devotion to white is less than five, Nylea isn't a creature.<i>(Each {G} in the mana costs of permanents you control counts towards your devotion to green.)</i> - Effect effect = new LoseCreatureTypeSourceEffect(xValue, 5); - effect.setText("As long as your devotion to green is less than five, Nylea isn't a creature.<i>(Each {G} in the mana costs of permanents you control counts towards your devotion to green.)</i>"); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect).addHint(new ValueHint("Devotion to green", xValue))); + // As long as your devotion to green is less than five, Nylea isn't a creature.<i>(Each {G} in the mana costs of permanents you control counts towards your devotion to green.)</i> + Effect effect = new LoseCreatureTypeSourceEffect(DevotionCount.G, 5); + effect.setText("As long as your devotion to green is less than five, {this} isn't a creature."); + this.addAbility(new SimpleStaticAbility(effect).addHint(new ValueHint("Devotion to green", DevotionCount.G))); // Other creatures you control have trample. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURE, true))); + this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect( + TrampleAbility.getInstance(), Duration.WhileOnBattlefield, + StaticFilters.FILTER_PERMANENT_CREATURE, true + ))); // {3}{G}: Target creature gets +2/+2 until end of turn. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(2, 2, Duration.EndOfTurn), new ManaCostsImpl("{3}{G}")); + Ability ability = new SimpleActivatedAbility( + new BoostTargetEffect(2, 2, Duration.EndOfTurn), new ManaCostsImpl("{3}{G}") + ); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } - public NyleaGodOfTheHunt(final NyleaGodOfTheHunt card) { + private NyleaGodOfTheHunt(final NyleaGodOfTheHunt card) { super(card); } diff --git a/Mage.Sets/src/mage/cards/n/NyleasDisciple.java b/Mage.Sets/src/mage/cards/n/NyleasDisciple.java index 771edf605d..39766259d1 100644 --- a/Mage.Sets/src/mage/cards/n/NyleasDisciple.java +++ b/Mage.Sets/src/mage/cards/n/NyleasDisciple.java @@ -2,15 +2,12 @@ package mage.cards.n; import mage.MageInt; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.DevotionCount; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.hint.ValueHint; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.ColoredManaSymbol; import mage.constants.SubType; import java.util.UUID; @@ -20,8 +17,6 @@ import java.util.UUID; */ public final class NyleasDisciple extends CardImpl { - private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.G); - public NyleasDisciple(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{G}"); this.subtype.add(SubType.CENTAUR); @@ -31,12 +26,12 @@ public final class NyleasDisciple extends CardImpl { this.toughness = new MageInt(3); // When Nylea's Disciple enters the battlefield, you gain life equal to your devotion to green. - Effect effect = new GainLifeEffect(xValue); - effect.setText("you gain life equal to your devotion to green"); - this.addAbility(new EntersBattlefieldTriggeredAbility(effect).addHint(new ValueHint("Devotion to green", xValue))); + this.addAbility(new EntersBattlefieldTriggeredAbility( + new GainLifeEffect(DevotionCount.G).setText("you gain life equal to your devotion to green") + ).addHint(new ValueHint("Devotion to green", DevotionCount.G))); } - public NyleasDisciple(final NyleasDisciple card) { + private NyleasDisciple(final NyleasDisciple card) { super(card); }