diff --git a/Mage.Sets/src/mage/cards/a/AbhorrentOverlord.java b/Mage.Sets/src/mage/cards/a/AbhorrentOverlord.java
index a4aaefa10a3..57f88bca5f1 100644
--- a/Mage.Sets/src/mage/cards/a/AbhorrentOverlord.java
+++ b/Mage.Sets/src/mage/cards/a/AbhorrentOverlord.java
@@ -3,17 +3,14 @@ package mage.cards.a;
import mage.MageInt;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
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.CreateTokenEffect;
import mage.abilities.effects.common.SacrificeControllerEffect;
-import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.ColoredManaSymbol;
import mage.constants.SubType;
import mage.constants.TargetController;
import mage.filter.StaticFilters;
@@ -26,8 +23,6 @@ import java.util.UUID;
*/
public final class AbhorrentOverlord extends CardImpl {
- private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.B);
-
public AbhorrentOverlord(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{B}{B}");
this.subtype.add(SubType.DEMON);
@@ -39,15 +34,15 @@ public final class AbhorrentOverlord extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// When Abhorrent Overlord enters the battlefield, create a number of 1/1 black Harpy creature tokens with flying equal to your devotion to black.
- Effect effect = new CreateTokenEffect(new AbhorrentOverlordHarpyToken(), xValue);
+ Effect effect = new CreateTokenEffect(new AbhorrentOverlordHarpyToken(), DevotionCount.B);
effect.setText("create a number of 1/1 black Harpy creature tokens with flying equal to your devotion to black. (Each {B} in the mana costs of permanents you control counts toward your devotion to black.)");
- this.addAbility(new EntersBattlefieldTriggeredAbility(effect).addHint(new ValueHint("Devotion to black", xValue)));
+ this.addAbility(new EntersBattlefieldTriggeredAbility(effect).addHint(DevotionCount.B.getHint()));
// At the beginning of your upkeep, sacrifice a creature.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new SacrificeControllerEffect(StaticFilters.FILTER_PERMANENT_CREATURE, 1, null), TargetController.YOU, false));
}
- public AbhorrentOverlord(final AbhorrentOverlord card) {
+ private AbhorrentOverlord(final AbhorrentOverlord card) {
super(card);
}
@@ -59,7 +54,7 @@ public final class AbhorrentOverlord extends CardImpl {
class AbhorrentOverlordHarpyToken extends TokenImpl {
- public AbhorrentOverlordHarpyToken() {
+ AbhorrentOverlordHarpyToken() {
super("Harpy", "1/1 black Harpy creature tokens with flying");
cardType.add(CardType.CREATURE);
color.setBlack(true);
@@ -70,7 +65,7 @@ class AbhorrentOverlordHarpyToken extends TokenImpl {
this.addAbility(FlyingAbility.getInstance());
}
- public AbhorrentOverlordHarpyToken(final AbhorrentOverlordHarpyToken token) {
+ private AbhorrentOverlordHarpyToken(final AbhorrentOverlordHarpyToken token) {
super(token);
}
diff --git a/Mage.Sets/src/mage/cards/a/AcolytesReward.java b/Mage.Sets/src/mage/cards/a/AcolytesReward.java
index 6dfe74d903d..41394538689 100644
--- a/Mage.Sets/src/mage/cards/a/AcolytesReward.java
+++ b/Mage.Sets/src/mage/cards/a/AcolytesReward.java
@@ -1,14 +1,11 @@
package mage.cards.a;
import mage.abilities.Ability;
-import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.DevotionCount;
import mage.abilities.effects.PreventionEffectImpl;
-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.game.Game;
import mage.game.events.DamageEvent;
@@ -33,10 +30,10 @@ public final class AcolytesReward extends CardImpl {
this.getSpellAbility().addEffect(new AcolytesRewardEffect());
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addTarget(new TargetAnyTarget());
- this.getSpellAbility().addHint(new ValueHint("Devotion to white", AcolytesRewardEffect.xValue));
+ this.getSpellAbility().addHint(DevotionCount.W.getHint());
}
- public AcolytesReward(final AcolytesReward card) {
+ private AcolytesReward(final AcolytesReward card) {
super(card);
}
@@ -49,14 +46,13 @@ public final class AcolytesReward extends CardImpl {
class AcolytesRewardEffect extends PreventionEffectImpl {
protected int amount = 0;
- static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.W);
- public AcolytesRewardEffect() {
+ AcolytesRewardEffect() {
super(Duration.EndOfTurn);
staticText = "Prevent the next X damage that would be dealt to target creature this turn, where X is your devotion to white. If damage is prevented this way, {this} deals that much damage to any target";
}
- public AcolytesRewardEffect(final AcolytesRewardEffect effect) {
+ private AcolytesRewardEffect(final AcolytesRewardEffect effect) {
super(effect);
this.amount = effect.amount;
}
@@ -69,7 +65,7 @@ class AcolytesRewardEffect extends PreventionEffectImpl {
@Override
public void init(Ability source, Game game) {
super.init(source, game);
- amount = xValue.calculate(game, source, this);
+ amount = DevotionCount.W.calculate(game, source, this);
}
@Override
@@ -88,38 +84,42 @@ class AcolytesRewardEffect extends PreventionEffectImpl {
amount = 0;
}
GameEvent preventEvent = new PreventDamageEvent(source.getControllerId(), source.getSourceId(), source.getControllerId(), toPrevent, ((DamageEvent) event).isCombatDamage());
- if (!game.replaceEvent(preventEvent)) {
- Permanent targetCreature = game.getPermanent(source.getFirstTarget());
- if (targetCreature != null) {
- if (amount == 0) {
- this.used = true;
- this.discard();
- }
- if (event.getAmount() >= toPrevent) {
- event.setAmount(event.getAmount() - toPrevent);
- } else {
- event.setAmount(0);
- result = true;
- }
- if (toPrevent > 0) {
- game.informPlayers("Acolyte's Reward prevented " + toPrevent + " to " + targetCreature.getName());
- game.fireEvent(GameEvent.getEvent(GameEvent.EventType.PREVENTED_DAMAGE,
- source.getControllerId(), source.getSourceId(), source.getControllerId(), toPrevent));
-
- Player targetPlayer = game.getPlayer(source.getTargets().get(1).getFirstTarget());
- if (targetPlayer != null) {
- targetPlayer.damage(toPrevent, source.getSourceId(), game, false, true);
- game.informPlayers("Acolyte's Reward deals " + toPrevent + " damage to " + targetPlayer.getLogName());
- } else {
- Permanent targetDamageCreature = game.getPermanent(source.getTargets().get(1).getFirstTarget());
- if (targetDamageCreature != null) {
- targetDamageCreature.damage(toPrevent, source.getSourceId(), game, false, true);
- game.informPlayers("Acolyte's Reward deals " + toPrevent + " damage to " + targetDamageCreature.getName());
- }
- }
- }
- }
+ if (game.replaceEvent(preventEvent)) {
+ return result;
}
+ Permanent targetCreature = game.getPermanent(source.getFirstTarget());
+ if (targetCreature == null) {
+ return result;
+ }
+ if (amount == 0) {
+ this.used = true;
+ this.discard();
+ }
+ if (event.getAmount() >= toPrevent) {
+ event.setAmount(event.getAmount() - toPrevent);
+ } else {
+ event.setAmount(0);
+ result = true;
+ }
+ if (toPrevent == 0) {
+ return result;
+ }
+ game.informPlayers("Acolyte's Reward prevented " + toPrevent + " to " + targetCreature.getName());
+ game.fireEvent(GameEvent.getEvent(GameEvent.EventType.PREVENTED_DAMAGE,
+ source.getControllerId(), source.getSourceId(), source.getControllerId(), toPrevent));
+
+ Player targetPlayer = game.getPlayer(source.getTargets().get(1).getFirstTarget());
+ if (targetPlayer != null) {
+ targetPlayer.damage(toPrevent, source.getSourceId(), game, false, true);
+ game.informPlayers("Acolyte's Reward deals " + toPrevent + " damage to " + targetPlayer.getLogName());
+ return result;
+ }
+ Permanent targetDamageCreature = game.getPermanent(source.getTargets().get(1).getFirstTarget());
+ if (targetDamageCreature == null) {
+ return result;
+ }
+ targetDamageCreature.damage(toPrevent, source.getSourceId(), game, false, true);
+ game.informPlayers("Acolyte's Reward deals " + toPrevent + " damage to " + targetDamageCreature.getName());
return result;
}
diff --git a/Mage.Sets/src/mage/cards/a/AspectOfHydra.java b/Mage.Sets/src/mage/cards/a/AspectOfHydra.java
index 0a664fa53fa..32af5769fcf 100644
--- a/Mage.Sets/src/mage/cards/a/AspectOfHydra.java
+++ b/Mage.Sets/src/mage/cards/a/AspectOfHydra.java
@@ -1,14 +1,11 @@
package mage.cards.a;
-import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.DevotionCount;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
-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.target.common.TargetCreaturePermanent;
@@ -19,20 +16,18 @@ import java.util.UUID;
*/
public final class AspectOfHydra extends CardImpl {
- private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.G);
-
public AspectOfHydra(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{G}");
// Target creature gets +X/+X until end of turn, where X is your devotion to green.
- Effect effect = new BoostTargetEffect(xValue, xValue, Duration.EndOfTurn, true);
+ Effect effect = new BoostTargetEffect(DevotionCount.G, DevotionCount.G, Duration.EndOfTurn, true);
effect.setText("Target creature gets +X/+X until end of turn, where X is your devotion to green");
this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
- this.getSpellAbility().addHint(new ValueHint("Devotion to green", xValue));
+ this.getSpellAbility().addHint(DevotionCount.G.getHint());
}
- public AspectOfHydra(final AspectOfHydra card) {
+ private AspectOfHydra(final AspectOfHydra card) {
super(card);
}
diff --git a/Mage.Sets/src/mage/cards/a/AthreosGodOfPassage.java b/Mage.Sets/src/mage/cards/a/AthreosGodOfPassage.java
index 8fcfb2e3ea8..94e9d1d7831 100644
--- a/Mage.Sets/src/mage/cards/a/AthreosGodOfPassage.java
+++ b/Mage.Sets/src/mage/cards/a/AthreosGodOfPassage.java
@@ -6,12 +6,10 @@ import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.common.PayLifeCost;
-import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.DevotionCount;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.continuous.LoseCreatureTypeSourceEffect;
-import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.IndestructibleAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
@@ -35,7 +33,6 @@ import java.util.UUID;
public final class AthreosGodOfPassage extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another creature you own");
- private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.W, ColoredManaSymbol.B);
static {
filter.add(AnotherPredicate.instance);
@@ -54,9 +51,8 @@ public final class AthreosGodOfPassage extends CardImpl {
this.addAbility(IndestructibleAbility.getInstance());
// As long as your devotion to white and black is less than seven, Athreos isn't a creature.
- Effect effect = new LoseCreatureTypeSourceEffect(xValue, 7);
- effect.setText("As long as your devotion to white and black is less than seven, Athreos isn't a creature");
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect).addHint(new ValueHint("Devotion to white and black", xValue)));
+ this.addAbility(new SimpleStaticAbility(new LoseCreatureTypeSourceEffect(DevotionCount.WB, 7))
+ .addHint(DevotionCount.WB.getHint()));
// Whenever another creature you own dies, return it to your hand unless target opponent pays 3 life.
Ability ability = new AthreosDiesCreatureTriggeredAbility(new AthreosGodOfPassageReturnEffect(), false, filter);
@@ -65,7 +61,7 @@ public final class AthreosGodOfPassage extends CardImpl {
}
- public AthreosGodOfPassage(final AthreosGodOfPassage card) {
+ private AthreosGodOfPassage(final AthreosGodOfPassage card) {
super(card);
}
@@ -77,12 +73,12 @@ public final class AthreosGodOfPassage extends CardImpl {
class AthreosGodOfPassageReturnEffect extends OneShotEffect {
- public AthreosGodOfPassageReturnEffect() {
+ AthreosGodOfPassageReturnEffect() {
super(Outcome.Benefit);
this.staticText = "return it to your hand unless target opponent pays 3 life";
}
- public AthreosGodOfPassageReturnEffect(final AthreosGodOfPassageReturnEffect effect) {
+ private AthreosGodOfPassageReturnEffect(final AthreosGodOfPassageReturnEffect effect) {
super(effect);
}
@@ -94,30 +90,29 @@ class AthreosGodOfPassageReturnEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
- if (controller != null) {
- UUID creatureId = (UUID) this.getValue("creatureId");
- Card creature = game.getCard(creatureId);
- if (creature != null) {
- Player opponent = game.getPlayer(source.getFirstTarget());
- boolean paid = false;
- if (opponent != null) {
- Cost cost = new PayLifeCost(3);
- if (cost.canPay(source, source.getSourceId(), opponent.getId(), game)
- && opponent.chooseUse(outcome, "Pay 3 life to prevent that " + creature.getLogName() + " returns to " + controller.getLogName() + "'s hand?", source, game)) {
- if (cost.pay(source, game, source.getSourceId(), opponent.getId(), false, null)) {
- paid = true;
- }
- }
- }
- if (opponent == null || !paid) {
- if (game.getState().getZone(creature.getId()) == Zone.GRAVEYARD) {
- controller.moveCards(creature, Zone.HAND, source, game);
- }
- }
- }
+ if (controller == null) {
+ return false;
+ }
+ UUID creatureId = (UUID) this.getValue("creatureId");
+ Card creature = game.getCard(creatureId);
+ if (creature == null) {
return true;
}
- return false;
+ Player opponent = game.getPlayer(source.getFirstTarget());
+ boolean paid = false;
+ if (opponent != null) {
+ Cost cost = new PayLifeCost(3);
+ if (cost.canPay(source, source.getSourceId(), opponent.getId(), game)
+ && opponent.chooseUse(outcome, "Pay 3 life to prevent that " + creature.getLogName() + " returns to " + controller.getLogName() + "'s hand?", source, game)
+ && cost.pay(source, game, source.getSourceId(), opponent.getId(), false, null)) {
+ paid = true;
+ }
+ }
+ if ((opponent != null && paid) || game.getState().getZone(creature.getId()) != Zone.GRAVEYARD) {
+ return true;
+ }
+ controller.moveCards(creature, Zone.HAND, source, game);
+ return true;
}
}
@@ -125,12 +120,12 @@ class AthreosDiesCreatureTriggeredAbility extends TriggeredAbilityImpl {
protected FilterCreaturePermanent filter;
- public AthreosDiesCreatureTriggeredAbility(Effect effect, boolean optional, FilterCreaturePermanent filter) {
+ AthreosDiesCreatureTriggeredAbility(Effect effect, boolean optional, FilterCreaturePermanent filter) {
super(Zone.BATTLEFIELD, effect, optional);
this.filter = filter;
}
- public AthreosDiesCreatureTriggeredAbility(AthreosDiesCreatureTriggeredAbility ability) {
+ private AthreosDiesCreatureTriggeredAbility(AthreosDiesCreatureTriggeredAbility ability) {
super(ability);
this.filter = ability.filter;
}
@@ -148,15 +143,16 @@ class AthreosDiesCreatureTriggeredAbility extends TriggeredAbilityImpl {
@Override
public boolean checkTrigger(GameEvent event, Game game) {
ZoneChangeEvent zEvent = (ZoneChangeEvent) event;
- if (zEvent.isDiesEvent()) {
- if (zEvent.getTarget() != null && filter.match(zEvent.getTarget(), sourceId, controllerId, game)) {
- for (Effect effect : this.getEffects()) {
- effect.setValue("creatureId", event.getTargetId());
- }
- return true;
- }
+ if (!zEvent.isDiesEvent()) {
+ return false;
}
- return false;
+ if (zEvent.getTarget() == null || !filter.match(zEvent.getTarget(), sourceId, controllerId, game)) {
+ return false;
+ }
+ for (Effect effect : this.getEffects()) {
+ effect.setValue("creatureId", event.getTargetId());
+ }
+ return true;
}
@Override
diff --git a/Mage.Sets/src/mage/cards/a/AthreosShroudVeiled.java b/Mage.Sets/src/mage/cards/a/AthreosShroudVeiled.java
index e80c53d4652..9e57afad23e 100644
--- a/Mage.Sets/src/mage/cards/a/AthreosShroudVeiled.java
+++ b/Mage.Sets/src/mage/cards/a/AthreosShroudVeiled.java
@@ -6,13 +6,10 @@ import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
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;
import mage.abilities.effects.common.continuous.LoseCreatureTypeSourceEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
-import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.IndestructibleAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
@@ -36,7 +33,6 @@ import java.util.UUID;
*/
public final class AthreosShroudVeiled extends CardImpl {
- private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.W, ColoredManaSymbol.B);
private static final FilterPermanent filter = new FilterCreaturePermanent("another target creature");
static {
@@ -55,10 +51,8 @@ public final class AthreosShroudVeiled extends CardImpl {
this.addAbility(IndestructibleAbility.getInstance());
// As long as your devotion to white and black is less than seven, Athreos isn't a creature.
- Effect effect = new LoseCreatureTypeSourceEffect(xValue, 7);
- effect.setText("As long as your devotion to white and black is less than seven, {this} isn't a creature");
- this.addAbility(new SimpleStaticAbility(effect)
- .addHint(new ValueHint("Devotion to white and black", xValue)));
+ this.addAbility(new SimpleStaticAbility(new LoseCreatureTypeSourceEffect(DevotionCount.WB, 7))
+ .addHint(DevotionCount.WB.getHint()));
// At the beginning of your end step, put a coin counter on another target creature.
Ability ability = new BeginningOfEndStepTriggeredAbility(
diff --git a/Mage.Sets/src/mage/cards/d/DaxosBlessedByTheSun.java b/Mage.Sets/src/mage/cards/d/DaxosBlessedByTheSun.java
index db01c36b4dc..d03488133f3 100644
--- a/Mage.Sets/src/mage/cards/d/DaxosBlessedByTheSun.java
+++ b/Mage.Sets/src/mage/cards/d/DaxosBlessedByTheSun.java
@@ -3,11 +3,9 @@ package mage.cards.d;
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.common.GainLifeEffect;
import mage.abilities.effects.common.continuous.SetToughnessSourceEffect;
-import mage.abilities.hint.ValueHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
@@ -23,8 +21,6 @@ import java.util.UUID;
*/
public final class DaxosBlessedByTheSun extends CardImpl {
- private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.W);
-
public DaxosBlessedByTheSun(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{W}{W}");
@@ -35,9 +31,10 @@ public final class DaxosBlessedByTheSun extends CardImpl {
// Daxos's toughness is equal to your devotion to white.
this.addAbility(new SimpleStaticAbility(
- Zone.ALL, new SetToughnessSourceEffect(xValue, Duration.EndOfGame
- ).setText("{this}'s toughness is equal to your devotion to white"))
- .addHint(new ValueHint("Devotion to white", xValue)));
+ Zone.ALL,
+ new SetToughnessSourceEffect(DevotionCount.W, Duration.EndOfGame)
+ .setText("{this}'s toughness is equal to your devotion to white")
+ ).addHint(DevotionCount.W.getHint()));
// Whenever another creature you control enters the battlefield or dies, you gain 1 life.
this.addAbility(new DaxosBlessedByTheSunAbility());
diff --git a/Mage.Sets/src/mage/cards/d/DiscipleOfPhenax.java b/Mage.Sets/src/mage/cards/d/DiscipleOfPhenax.java
index b57bd9b46f6..7ac0707d672 100644
--- a/Mage.Sets/src/mage/cards/d/DiscipleOfPhenax.java
+++ b/Mage.Sets/src/mage/cards/d/DiscipleOfPhenax.java
@@ -3,12 +3,13 @@ package mage.cards.d;
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.OneShotEffect;
-import mage.abilities.hint.ValueHint;
import mage.cards.*;
-import mage.constants.*;
+import mage.constants.CardType;
+import mage.constants.Outcome;
+import mage.constants.SubType;
+import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.game.Game;
import mage.players.Player;
@@ -36,12 +37,12 @@ public final class DiscipleOfPhenax extends CardImpl {
// from their hand equal to your devotion to black. You choose one of them. That player discards that card.
Ability ability = new EntersBattlefieldTriggeredAbility(new DiscipleOfPhenaxEffect(), false);
ability.addTarget(new TargetPlayer());
- ability.addHint(new ValueHint("Devotion to black", DiscipleOfPhenaxEffect.xValue));
+ ability.addHint(DevotionCount.B.getHint());
this.addAbility(ability);
}
- public DiscipleOfPhenax(final DiscipleOfPhenax card) {
+ private DiscipleOfPhenax(final DiscipleOfPhenax card) {
super(card);
}
@@ -53,14 +54,12 @@ public final class DiscipleOfPhenax extends CardImpl {
class DiscipleOfPhenaxEffect extends OneShotEffect {
- static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.B);
-
- public DiscipleOfPhenaxEffect() {
+ DiscipleOfPhenaxEffect() {
super(Outcome.Discard);
staticText = "target player reveals a number of cards from their hand equal to your devotion to black. You choose one of them. That player discards that card";
}
- public DiscipleOfPhenaxEffect(final DiscipleOfPhenaxEffect effect) {
+ private DiscipleOfPhenaxEffect(final DiscipleOfPhenaxEffect effect) {
super(effect);
}
@@ -71,48 +70,46 @@ class DiscipleOfPhenaxEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
- int devotion = xValue.calculate(game, source, this);
+ int devotion = DevotionCount.B.calculate(game, source, this);
Player targetPlayer = game.getPlayer(targetPointer.getFirst(game, source));
- if (devotion > 0 && targetPlayer != null) {
- Cards revealedCards = new CardsImpl();
- int amount = Math.min(targetPlayer.getHand().size(), devotion);
- if (targetPlayer.getHand().size() > amount) {
- FilterCard filter = new FilterCard("card in target player's hand");
- TargetCardInHand chosenCards = new TargetCardInHand(amount, amount, filter);
- chosenCards.setNotTarget(true);
- if (chosenCards.canChoose(targetPlayer.getId(), game) && targetPlayer.choose(Outcome.Discard, targetPlayer.getHand(), chosenCards, game)) {
- if (!chosenCards.getTargets().isEmpty()) {
- List targets = chosenCards.getTargets();
- for (UUID targetid : targets) {
- Card card = game.getCard(targetid);
- if (card != null) {
- revealedCards.add(card);
- }
+ if (devotion <= 0 || targetPlayer == null) {
+ return false;
+ }
+ Cards revealedCards = new CardsImpl();
+ int amount = Math.min(targetPlayer.getHand().size(), devotion);
+ if (targetPlayer.getHand().size() > amount) {
+ FilterCard filter = new FilterCard("card in target player's hand");
+ TargetCardInHand chosenCards = new TargetCardInHand(amount, amount, filter);
+ chosenCards.setNotTarget(true);
+ if (chosenCards.canChoose(targetPlayer.getId(), game) && targetPlayer.choose(Outcome.Discard, targetPlayer.getHand(), chosenCards, game)) {
+ if (!chosenCards.getTargets().isEmpty()) {
+ List targets = chosenCards.getTargets();
+ for (UUID targetid : targets) {
+ Card card = game.getCard(targetid);
+ if (card != null) {
+ revealedCards.add(card);
}
}
}
- } else {
- revealedCards.addAll(targetPlayer.getHand());
- }
- if (!revealedCards.isEmpty()) {
- targetPlayer.revealCards("Disciple of Phenax", revealedCards, game);
- Player you = game.getPlayer(source.getControllerId());
- if (you != null) {
- TargetCard yourChoice = new TargetCard(Zone.HAND, new FilterCard());
- yourChoice.setNotTarget(true);
- if (you.choose(Outcome.Benefit, revealedCards, yourChoice, game)) {
- Card card = targetPlayer.getHand().get(yourChoice.getFirstTarget(), game);
- return targetPlayer.discard(card, source, game);
-
- }
- } else {
- return false;
- }
}
+ } else {
+ revealedCards.addAll(targetPlayer.getHand());
+ }
+ if (revealedCards.isEmpty()) {
return true;
+ }
+ targetPlayer.revealCards("Disciple of Phenax", revealedCards, game);
+ Player you = game.getPlayer(source.getControllerId());
+ if (you == null) {
+ return false;
+ }
+ TargetCard yourChoice = new TargetCard(Zone.HAND, new FilterCard());
+ yourChoice.setNotTarget(true);
+ if (you.choose(Outcome.Benefit, revealedCards, yourChoice, game)) {
+ Card card = targetPlayer.getHand().get(yourChoice.getFirstTarget(), game);
+ return targetPlayer.discard(card, source, game);
}
-
- return false;
+ return true;
}
}
diff --git a/Mage.Sets/src/mage/cards/e/ElspethUndauntedHero.java b/Mage.Sets/src/mage/cards/e/ElspethUndauntedHero.java
index 56c59b9b83b..445548bb214 100644
--- a/Mage.Sets/src/mage/cards/e/ElspethUndauntedHero.java
+++ b/Mage.Sets/src/mage/cards/e/ElspethUndauntedHero.java
@@ -3,17 +3,18 @@ package mage.cards.e;
import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility;
import mage.abilities.common.PlaneswalkerEntersWithLoyaltyCountersAbility;
-import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.DevotionCount;
import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.abilities.effects.common.search.SearchLibraryGraveyardPutOntoBattlefieldEffect;
-import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.FlyingAbility;
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.counters.CounterType;
import mage.filter.FilterCard;
import mage.filter.StaticFilters;
@@ -33,8 +34,6 @@ public final class ElspethUndauntedHero extends CardImpl {
filter.add(new NamePredicate("Sunlit Hoplite"));
}
- private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.W);
-
public ElspethUndauntedHero(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{W}{W}{W}");
@@ -56,9 +55,9 @@ public final class ElspethUndauntedHero extends CardImpl {
StaticFilters.FILTER_PERMANENT_CREATURES
).setText("Until end of turn, creatures you control gain flying"), -8);
ability.addEffect(new BoostControlledEffect(
- xValue, xValue, Duration.EndOfTurn
+ DevotionCount.W, DevotionCount.W, Duration.EndOfTurn
).setText("and get +X/+X, where X is your devotion to white"));
- ability.addHint(new ValueHint("Devotion to white", xValue));
+ ability.addHint(DevotionCount.W.getHint());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/e/EpharaGodOfThePolis.java b/Mage.Sets/src/mage/cards/e/EpharaGodOfThePolis.java
index 9bfa8d8b1b1..ad727a0038b 100644
--- a/Mage.Sets/src/mage/cards/e/EpharaGodOfThePolis.java
+++ b/Mage.Sets/src/mage/cards/e/EpharaGodOfThePolis.java
@@ -6,12 +6,9 @@ import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.Condition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
-import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.DevotionCount;
-import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.continuous.LoseCreatureTypeSourceEffect;
-import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.IndestructibleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@@ -27,8 +24,6 @@ import java.util.UUID;
*/
public final class EpharaGodOfThePolis extends CardImpl {
- private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.W, ColoredManaSymbol.U);
-
public EpharaGodOfThePolis(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{2}{W}{U}");
this.addSuperType(SuperType.LEGENDARY);
@@ -41,19 +36,20 @@ public final class EpharaGodOfThePolis extends CardImpl {
this.addAbility(IndestructibleAbility.getInstance());
// As long as your devotion to white and blue is less than seven, Ephara isn't a creature.
- Effect effect = new LoseCreatureTypeSourceEffect(xValue, 7);
- effect.setText("As long as your devotion to white and blue is less than seven, Ephara isn't a creature");
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect).addHint(new ValueHint("Devotion to white and blue", xValue)));
+ this.addAbility(new SimpleStaticAbility(new LoseCreatureTypeSourceEffect(DevotionCount.WU, 7))
+ .addHint(DevotionCount.WU.getHint()));
// At the beginning of each upkeep, if you had another creature enter the battlefield under your control last turn, draw a card.
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
- new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), TargetController.ANY, false, false),
- HadAnotherCreatureEnterTheBattlefieldCondition.instance,
- "At the beginning of each upkeep, if you had another creature enter the battlefield under your control last turn, draw a card."),
- new PermanentsEnteredBattlefieldWatcher());
+ new BeginningOfUpkeepTriggeredAbility(
+ Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1),
+ TargetController.ANY, false, false
+ ), EpharaGodOfThePolisCondition.instance, "At the beginning of each upkeep, " +
+ "if you had another creature enter the battlefield under your control last turn, draw a card."
+ ), new PermanentsEnteredBattlefieldWatcher());
}
- public EpharaGodOfThePolis(final EpharaGodOfThePolis card) {
+ private EpharaGodOfThePolis(final EpharaGodOfThePolis card) {
super(card);
}
@@ -63,11 +59,10 @@ public final class EpharaGodOfThePolis extends CardImpl {
}
}
-enum HadAnotherCreatureEnterTheBattlefieldCondition implements Condition {
+enum EpharaGodOfThePolisCondition implements Condition {
instance;
-
@Override
public boolean apply(Game game, Ability source) {
Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId());
diff --git a/Mage.Sets/src/mage/cards/e/ErebosGodOfTheDead.java b/Mage.Sets/src/mage/cards/e/ErebosGodOfTheDead.java
index 70ea3e55005..dde3940d613 100644
--- a/Mage.Sets/src/mage/cards/e/ErebosGodOfTheDead.java
+++ b/Mage.Sets/src/mage/cards/e/ErebosGodOfTheDead.java
@@ -6,13 +6,10 @@ import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.common.PayLifeCost;
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.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.continuous.CantGainLifeAllEffect;
import mage.abilities.effects.common.continuous.LoseCreatureTypeSourceEffect;
-import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.IndestructibleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@@ -25,8 +22,6 @@ import java.util.UUID;
*/
public final class ErebosGodOfTheDead extends CardImpl {
- private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.B);
-
public ErebosGodOfTheDead(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{3}{B}");
addSuperType(SuperType.LEGENDARY);
@@ -39,27 +34,24 @@ public final class ErebosGodOfTheDead extends CardImpl {
this.addAbility(IndestructibleAbility.getInstance());
// As long as your devotion to black is less than five, Erebos isn't a creature.
- Effect effect = new LoseCreatureTypeSourceEffect(xValue, 5);
- effect.setText("As long as your devotion to black is less than five, Erebos isn't a creature.(Each {B} in the mana costs of permanents you control counts towards your devotion to black.)");
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect).addHint(new ValueHint("Devotion to black", xValue)));
+ this.addAbility(new SimpleStaticAbility(new LoseCreatureTypeSourceEffect(DevotionCount.B, 5))
+ .addHint(DevotionCount.B.getHint()));
// Your opponents can't gain life.
this.addAbility(new SimpleStaticAbility(
- Zone.BATTLEFIELD,
- new CantGainLifeAllEffect(
- Duration.WhileOnBattlefield,
- TargetController.OPPONENT
- )
+ new CantGainLifeAllEffect(Duration.WhileOnBattlefield, TargetController.OPPONENT)
));
// {1}{B}, Pay 2 life: Draw a card.
- Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new ManaCostsImpl("{1}{B}"));
+ Ability ability = new SimpleActivatedAbility(
+ new DrawCardSourceControllerEffect(1), new ManaCostsImpl("{1}{B}")
+ );
ability.addCost(new PayLifeCost(2));
this.addAbility(ability);
}
- public ErebosGodOfTheDead(final ErebosGodOfTheDead card) {
+ private ErebosGodOfTheDead(final ErebosGodOfTheDead card) {
super(card);
}
diff --git a/Mage.Sets/src/mage/cards/e/EvangelOfHeliod.java b/Mage.Sets/src/mage/cards/e/EvangelOfHeliod.java
index c875465a192..008265216f5 100644
--- a/Mage.Sets/src/mage/cards/e/EvangelOfHeliod.java
+++ b/Mage.Sets/src/mage/cards/e/EvangelOfHeliod.java
@@ -2,14 +2,11 @@ package mage.cards.e;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
-import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.DevotionCount;
import mage.abilities.effects.common.CreateTokenEffect;
-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 mage.game.permanent.token.SoldierToken;
@@ -20,8 +17,6 @@ import java.util.UUID;
*/
public final class EvangelOfHeliod extends CardImpl {
- private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.W);
-
public EvangelOfHeliod(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{W}{W}");
this.subtype.add(SubType.HUMAN);
@@ -31,11 +26,12 @@ public final class EvangelOfHeliod extends CardImpl {
this.toughness = new MageInt(3);
// When Evangel of Heliod enters the battlefield, create a number of 1/1 white Soldier creature tokens equal to your devotion to white.
- this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new SoldierToken(), xValue))
- .addHint(new ValueHint("Devotion to white", xValue)));
+ this.addAbility(new EntersBattlefieldTriggeredAbility(
+ new CreateTokenEffect(new SoldierToken(), DevotionCount.W)
+ ).addHint(DevotionCount.W.getHint()));
}
- public EvangelOfHeliod(final EvangelOfHeliod card) {
+ private EvangelOfHeliod(final EvangelOfHeliod card) {
super(card);
}
diff --git a/Mage.Sets/src/mage/cards/f/FanaticOfMogis.java b/Mage.Sets/src/mage/cards/f/FanaticOfMogis.java
index f6943e99f15..6c107a4d48a 100644
--- a/Mage.Sets/src/mage/cards/f/FanaticOfMogis.java
+++ b/Mage.Sets/src/mage/cards/f/FanaticOfMogis.java
@@ -2,14 +2,14 @@ package mage.cards.f;
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.DamagePlayersEffect;
-import mage.abilities.hint.ValueHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.*;
+import mage.constants.CardType;
+import mage.constants.Outcome;
+import mage.constants.SubType;
+import mage.constants.TargetController;
import java.util.UUID;
@@ -18,8 +18,6 @@ import java.util.UUID;
*/
public final class FanaticOfMogis extends CardImpl {
- private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.R);
-
public FanaticOfMogis(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
this.subtype.add(SubType.MINOTAUR);
@@ -29,12 +27,13 @@ public final class FanaticOfMogis extends CardImpl {
this.toughness = new MageInt(2);
// When Fanatic of Mogis enters the battlefield, it deals damage to each opponent equal to your devotion to red.
- Effect effect = new DamagePlayersEffect(Outcome.Damage, xValue, TargetController.OPPONENT);
- effect.setText("it deals damage to each opponent equal to your devotion to red. (Each {R} in the mana costs of permanents you control counts towards your devotion to red.)");
- this.addAbility(new EntersBattlefieldTriggeredAbility(effect, false).addHint(new ValueHint("Devotion to red", xValue)));
+ this.addAbility(new EntersBattlefieldTriggeredAbility(
+ new DamagePlayersEffect(Outcome.Damage, DevotionCount.R, TargetController.OPPONENT)
+ .setText("it deals damage to each opponent equal to your devotion to red."), false
+ ).addHint(DevotionCount.R.getHint()));
}
- public FanaticOfMogis(final FanaticOfMogis card) {
+ private FanaticOfMogis(final FanaticOfMogis card) {
super(card);
}
diff --git a/Mage.Sets/src/mage/cards/g/GrayMerchantOfAsphodel.java b/Mage.Sets/src/mage/cards/g/GrayMerchantOfAsphodel.java
index d0495b92f97..c00f37401d6 100644
--- a/Mage.Sets/src/mage/cards/g/GrayMerchantOfAsphodel.java
+++ b/Mage.Sets/src/mage/cards/g/GrayMerchantOfAsphodel.java
@@ -3,19 +3,17 @@ package mage.cards.g;
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.OneShotEffect;
-import mage.abilities.hint.ValueHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.ColoredManaSymbol;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.game.Game;
import mage.players.Player;
+import java.util.Objects;
import java.util.UUID;
/**
@@ -32,12 +30,11 @@ public final class GrayMerchantOfAsphodel extends CardImpl {
// When Gray Merchant of Asphodel enters the battlefield, each opponent loses X life, where X is your devotion to black. You gain life equal to the life lost this way.
this.addAbility(new EntersBattlefieldTriggeredAbility(
- new GrayMerchantOfAsphodelEffect(),
- false)
- .addHint(new ValueHint("Devotion to black", GrayMerchantOfAsphodelEffect.xValue)));
+ new GrayMerchantOfAsphodelEffect(), false
+ ).addHint(DevotionCount.B.getHint()));
}
- public GrayMerchantOfAsphodel(final GrayMerchantOfAsphodel card) {
+ private GrayMerchantOfAsphodel(final GrayMerchantOfAsphodel card) {
super(card);
}
@@ -49,9 +46,7 @@ public final class GrayMerchantOfAsphodel extends CardImpl {
class GrayMerchantOfAsphodelEffect extends OneShotEffect {
- static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.B);
-
- public GrayMerchantOfAsphodelEffect() {
+ GrayMerchantOfAsphodelEffect() {
super(Outcome.GainLife);
this.staticText = "each opponent loses X life, where X is your devotion to black. "
+ "You gain life equal to the life lost this way. "
@@ -59,7 +54,7 @@ class GrayMerchantOfAsphodelEffect extends OneShotEffect {
+ "counts towards your devotion to black.)";
}
- public GrayMerchantOfAsphodelEffect(final GrayMerchantOfAsphodelEffect effect) {
+ private GrayMerchantOfAsphodelEffect(final GrayMerchantOfAsphodelEffect effect) {
super(effect);
}
@@ -71,20 +66,20 @@ class GrayMerchantOfAsphodelEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
- if (controller != null) {
- int totalLifeLost = 0;
- int lifeLost = xValue.calculate(game, source, this);
- if (lifeLost > 0) {
- for (UUID playerId : game.getOpponents(source.getControllerId())) {
- Player opponent = game.getPlayer(playerId);
- if (opponent != null) {
- totalLifeLost += opponent.loseLife(lifeLost, game, false);
- }
- }
- }
- controller.gainLife(totalLifeLost, game, source);
+ if (controller == null) {
+ return false;
+ }
+ int lifeLost = DevotionCount.B.calculate(game, source, this);
+ if (lifeLost == 0) {
return true;
}
- return false;
+ int totalLifeLost = game
+ .getOpponents(source.getControllerId())
+ .stream()
+ .map(game::getPlayer)
+ .filter(Objects::nonNull)
+ .mapToInt(opponent -> opponent.loseLife(lifeLost, game, false))
+ .sum();
+ return controller.gainLife(totalLifeLost, game, source) > 0;
}
}
diff --git a/Mage.Sets/src/mage/cards/h/HeliodGodOfTheSun.java b/Mage.Sets/src/mage/cards/h/HeliodGodOfTheSun.java
index 3f583f76f49..a31c8d8c4bd 100644
--- a/Mage.Sets/src/mage/cards/h/HeliodGodOfTheSun.java
+++ b/Mage.Sets/src/mage/cards/h/HeliodGodOfTheSun.java
@@ -4,18 +4,18 @@ import mage.MageInt;
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.CreateTokenEffect;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.effects.common.continuous.LoseCreatureTypeSourceEffect;
-import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.IndestructibleAbility;
import mage.abilities.keyword.VigilanceAbility;
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.game.permanent.token.HeliodGodOfTheSunToken;
@@ -26,8 +26,6 @@ import java.util.UUID;
*/
public final class HeliodGodOfTheSun extends CardImpl {
- private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.W);
-
public HeliodGodOfTheSun(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{3}{W}");
addSuperType(SuperType.LEGENDARY);
@@ -40,19 +38,23 @@ public final class HeliodGodOfTheSun extends CardImpl {
this.addAbility(IndestructibleAbility.getInstance());
// As long as your devotion to white is less than five, Heliod isn't a creature.(Each {W} in the mana costs of permanents you control counts towards your devotion to white.)
- Effect effect = new LoseCreatureTypeSourceEffect(xValue, 5);
- effect.setText("As long as your devotion to white is less than five, Heliod isn't a creature.(Each {W} in the mana costs of permanents you control counts towards your devotion to white.)");
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect).addHint(new ValueHint("Devotion to white", xValue)));
+ this.addAbility(new SimpleStaticAbility(new LoseCreatureTypeSourceEffect(DevotionCount.W, 5))
+ .addHint(DevotionCount.W.getHint()));
// Other creatures you control have vigilance.
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURE, true)));
+ this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
+ VigilanceAbility.getInstance(), Duration.WhileOnBattlefield,
+ StaticFilters.FILTER_PERMANENT_CREATURE, true
+ )));
// {2}{W}{W}: Create a 2/1 white Cleric enchantment creature token.
- this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new HeliodGodOfTheSunToken()), new ManaCostsImpl("{2}{W}{W}")));
+ this.addAbility(new SimpleActivatedAbility(
+ new CreateTokenEffect(new HeliodGodOfTheSunToken()), new ManaCostsImpl("{2}{W}{W}")
+ ));
}
- public HeliodGodOfTheSun(final HeliodGodOfTheSun card) {
+ private HeliodGodOfTheSun(final HeliodGodOfTheSun card) {
super(card);
}
diff --git a/Mage.Sets/src/mage/cards/i/IroasGodOfVictory.java b/Mage.Sets/src/mage/cards/i/IroasGodOfVictory.java
index e2462a2fcc5..539f75b68aa 100644
--- a/Mage.Sets/src/mage/cards/i/IroasGodOfVictory.java
+++ b/Mage.Sets/src/mage/cards/i/IroasGodOfVictory.java
@@ -2,18 +2,16 @@ package mage.cards.i;
import mage.MageInt;
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.PreventAllDamageToAllEffect;
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
import mage.abilities.effects.common.continuous.LoseCreatureTypeSourceEffect;
-import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.IndestructibleAbility;
import mage.abilities.keyword.MenaceAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
+import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.AttackingPredicate;
@@ -26,16 +24,16 @@ import java.util.UUID;
*/
public final class IroasGodOfVictory extends CardImpl {
- private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures you control");
- private static final FilterControlledCreaturePermanent filterAttacking = new FilterControlledCreaturePermanent("attacking creatures you control");
+ private static final FilterPermanent filter
+ = new FilterCreaturePermanent("Creatures you control");
+ private static final FilterPermanent filterAttacking
+ = new FilterControlledCreaturePermanent("attacking creatures you control");
static {
filter.add(new ControllerPredicate(TargetController.YOU));
filterAttacking.add(AttackingPredicate.instance);
}
- private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.R, ColoredManaSymbol.W);
-
public IroasGodOfVictory(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{2}{R}{W}");
addSuperType(SuperType.LEGENDARY);
@@ -48,18 +46,21 @@ public final class IroasGodOfVictory extends CardImpl {
this.addAbility(IndestructibleAbility.getInstance());
// As long as your devotion to red and white is less than seven, Iroas isn't a creature.
- Effect effect = new LoseCreatureTypeSourceEffect(xValue, 7);
- effect.setText("As long as your devotion to red and white is less than seven, Iroas isn't a creature");
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect).addHint(new ValueHint("Devotion to red and white", xValue)));
+ this.addAbility(new SimpleStaticAbility(new LoseCreatureTypeSourceEffect(DevotionCount.RW, 7))
+ .addHint(DevotionCount.RW.getHint()));
// Creatures you control have menace. (They can't be blocked except by two or more creatures.)
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(new MenaceAbility(), Duration.WhileOnBattlefield, filter)));
+ this.addAbility(new SimpleStaticAbility(
+ new GainAbilityAllEffect(new MenaceAbility(), Duration.WhileOnBattlefield, filter)
+ ));
// Prevent all damage that would be dealt to attacking creatures you control.
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new PreventAllDamageToAllEffect(Duration.WhileOnBattlefield, filterAttacking)));
+ this.addAbility(new SimpleStaticAbility(
+ new PreventAllDamageToAllEffect(Duration.WhileOnBattlefield, filterAttacking)
+ ));
}
- public IroasGodOfVictory(final IroasGodOfVictory card) {
+ private IroasGodOfVictory(final IroasGodOfVictory card) {
super(card);
}
diff --git a/Mage.Sets/src/mage/cards/k/KarametraGodOfHarvests.java b/Mage.Sets/src/mage/cards/k/KarametraGodOfHarvests.java
index 76bef998816..e871deb41db 100644
--- a/Mage.Sets/src/mage/cards/k/KarametraGodOfHarvests.java
+++ b/Mage.Sets/src/mage/cards/k/KarametraGodOfHarvests.java
@@ -3,16 +3,15 @@ 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;
import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
-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 +30,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,16 +46,17 @@ 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)));
+ this.addAbility(new SimpleStaticAbility(new LoseCreatureTypeSourceEffect(DevotionCount.GW, 7))
+ .addHint(DevotionCount.GW.getHint()));
// 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) {
+ private KarametraGodOfHarvests(final KarametraGodOfHarvests card) {
super(card);
}
diff --git a/Mage.Sets/src/mage/cards/k/KarametrasAcolyte.java b/Mage.Sets/src/mage/cards/k/KarametrasAcolyte.java
index 9f53fc8cf07..1d2842be3d1 100644
--- a/Mage.Sets/src/mage/cards/k/KarametrasAcolyte.java
+++ b/Mage.Sets/src/mage/cards/k/KarametrasAcolyte.java
@@ -2,14 +2,11 @@ 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 +16,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,12 +25,13 @@ 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(DevotionCount.G.getHint()));
}
- public KarametrasAcolyte(final KarametrasAcolyte card) {
+ private KarametrasAcolyte(final KarametrasAcolyte card) {
super(card);
}
diff --git a/Mage.Sets/src/mage/cards/k/KeranosGodOfStorms.java b/Mage.Sets/src/mage/cards/k/KeranosGodOfStorms.java
index c78258feeae..e0c75bf8555 100644
--- a/Mage.Sets/src/mage/cards/k/KeranosGodOfStorms.java
+++ b/Mage.Sets/src/mage/cards/k/KeranosGodOfStorms.java
@@ -3,20 +3,20 @@ 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;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.InfoEffect;
import mage.abilities.effects.common.continuous.LoseCreatureTypeSourceEffect;
-import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.IndestructibleAbility;
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 +32,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,19 +44,16 @@ 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)));
+ this.addAbility(new SimpleStaticAbility(new LoseCreatureTypeSourceEffect(DevotionCount.UR, 7))
+ .addHint(DevotionCount.UR.getHint()));
// 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) {
+ private KeranosGodOfStorms(final KeranosGodOfStorms card) {
super(card);
}
@@ -74,7 +69,7 @@ class KeranosGodOfStormsTriggeredAbility extends TriggeredAbilityImpl {
super(Zone.BATTLEFIELD, new InfoEffect(""), false);
}
- KeranosGodOfStormsTriggeredAbility(final KeranosGodOfStormsTriggeredAbility ability) {
+ private KeranosGodOfStormsTriggeredAbility(final KeranosGodOfStormsTriggeredAbility ability) {
super(ability);
}
@@ -90,36 +85,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 1e092b63bfe..5b36b262321 100644
--- a/Mage.Sets/src/mage/cards/k/KlothysGodOfDestiny.java
+++ b/Mage.Sets/src/mage/cards/k/KlothysGodOfDestiny.java
@@ -5,12 +5,9 @@ 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;
import mage.abilities.effects.common.continuous.LoseCreatureTypeSourceEffect;
-import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.IndestructibleAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
@@ -28,8 +25,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 +37,8 @@ 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.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(new LoseCreatureTypeSourceEffect(DevotionCount.RG, 7))
+ .addHint(DevotionCount.RG.getHint()));
// 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 147d6845600..66d04c7c5a0 100644
--- a/Mage.Sets/src/mage/cards/k/KlothyssDesign.java
+++ b/Mage.Sets/src/mage/cards/k/KlothyssDesign.java
@@ -1,13 +1,10 @@
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 +15,15 @@ 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,
- StaticFilters.FILTER_PERMANENT_CREATURES,
- false, true
+ DevotionCount.G, DevotionCount.G, Duration.EndOfTurn,
+ StaticFilters.FILTER_PERMANENT_CREATURES, false, true
));
- this.getSpellAbility().addHint(new ValueHint("Devotion to green", xValue));
+ this.getSpellAbility().addHint(DevotionCount.G.getHint());
}
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 b0effcf4c83..c5bbad1ce63 100644
--- a/Mage.Sets/src/mage/cards/k/KruphixGodOfHorizons.java
+++ b/Mage.Sets/src/mage/cards/k/KruphixGodOfHorizons.java
@@ -3,13 +3,10 @@ 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;
import mage.abilities.effects.common.continuous.LoseCreatureTypeSourceEffect;
import mage.abilities.effects.common.continuous.MaximumHandSizeControllerEffect;
-import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.IndestructibleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@@ -24,8 +21,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 +31,22 @@ 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)));
+ this.addAbility(new SimpleStaticAbility(new LoseCreatureTypeSourceEffect(DevotionCount.GU, 7))
+ .addHint(DevotionCount.GU.getHint()));
// 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 +58,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 a4cfca2c7d2..71df001f009 100644
--- a/Mage.Sets/src/mage/cards/m/MarshmistTitan.java
+++ b/Mage.Sets/src/mage/cards/m/MarshmistTitan.java
@@ -5,10 +5,8 @@ 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;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
@@ -30,10 +28,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(DevotionCount.B.getHint()));
}
- public MarshmistTitan(final MarshmistTitan card) {
+ private MarshmistTitan(final MarshmistTitan card) {
super(card);
}
@@ -45,14 +43,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 (Each {B} in the mana costs of permanents you control counts toward your devotion to black.) ";
+ staticText = "This spell costs {X} less to cast, where X is your devotion to black. " +
+ "(Each {B} in the mana costs of permanents you control counts toward your devotion to black.) ";
}
- public MarshmistTitanCostReductionEffect(final MarshmistTitanCostReductionEffect effect) {
+ private MarshmistTitanCostReductionEffect(final MarshmistTitanCostReductionEffect effect) {
super(effect);
}
@@ -60,22 +57,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 a563aafd4e9..b936b77b902 100644
--- a/Mage.Sets/src/mage/cards/m/MasterOfWaves.java
+++ b/Mage.Sets/src/mage/cards/m/MasterOfWaves.java
@@ -4,18 +4,17 @@ 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;
import mage.abilities.effects.common.continuous.BoostControlledEffect;
-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 +24,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 +39,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.
// (Each {U} in the mana costs of permanents you control counts toward your devotion to blue.)
- 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. (Each {U} in the mana costs of permanents you control counts toward your devotion to blue.)");
- this.addAbility(new EntersBattlefieldTriggeredAbility(effect).addHint(new ValueHint("Devotion to blue", xValue)));
+ this.addAbility(new EntersBattlefieldTriggeredAbility(effect).addHint(DevotionCount.U.getHint()));
}
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 4b366f69908..52ddc25983f 100644
--- a/Mage.Sets/src/mage/cards/m/MogisGodOfSlaughter.java
+++ b/Mage.Sets/src/mage/cards/m/MogisGodOfSlaughter.java
@@ -1,41 +1,30 @@
package mage.cards.m;
import mage.MageInt;
-import mage.MageObject;
import mage.abilities.Ability;
-import mage.abilities.Mode;
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;
-import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.continuous.LoseCreatureTypeSourceEffect;
-import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.IndestructibleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
+import mage.filter.StaticFilters;
import mage.game.Game;
+import mage.game.permanent.Permanent;
import mage.players.Player;
+import mage.target.TargetPermanent;
import mage.target.common.TargetControlledCreaturePermanent;
-import mage.util.CardUtil;
-import java.util.Locale;
import java.util.UUID;
-import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT;
-
/**
* @author LevelX2
*/
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,20 +37,18 @@ 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)));
+ this.addAbility(new SimpleStaticAbility(new LoseCreatureTypeSourceEffect(DevotionCount.BR, 7))
+ .addHint(DevotionCount.BR.getHint()));
// 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"),
- new SacrificeTargetCost(new TargetControlledCreaturePermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT)),
- "Sacrifice a creature? (otherwise you get 2 damage)");
- effect.setText("Mogis deals 2 damage to that player unless they sacrifice a creature");
- Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.OPPONENT, false, true);
+ Ability ability = new BeginningOfUpkeepTriggeredAbility(
+ Zone.BATTLEFIELD, new MogisGodOfSlaughterEffect(),
+ TargetController.OPPONENT, false, true
+ );
this.addAbility(ability);
}
- public MogisGodOfSlaughter(final MogisGodOfSlaughter card) {
+ private MogisGodOfSlaughter(final MogisGodOfSlaughter card) {
super(card);
}
@@ -71,76 +58,35 @@ public final class MogisGodOfSlaughter extends CardImpl {
}
}
-class DoUnlessTargetPaysCost extends OneShotEffect {
+class MogisGodOfSlaughterEffect extends OneShotEffect {
- private final OneShotEffect executingEffect;
- private final Cost cost;
- private final String userMessage;
-
- public DoUnlessTargetPaysCost(OneShotEffect effect, Cost cost) {
- this(effect, cost, null);
+ MogisGodOfSlaughterEffect() {
+ super(Outcome.Damage);
+ staticText = "{this} deals 2 damage to that player unless they sacrifice a creature";
}
- public DoUnlessTargetPaysCost(OneShotEffect effect, Cost cost, String userMessage) {
- super(Outcome.Benefit);
- this.executingEffect = effect;
- this.cost = cost;
- this.userMessage = userMessage;
- }
-
- public DoUnlessTargetPaysCost(final DoUnlessTargetPaysCost effect) {
+ private MogisGodOfSlaughterEffect(final MogisGodOfSlaughterEffect effect) {
super(effect);
- this.executingEffect = (OneShotEffect) effect.executingEffect.copy();
- this.cost = effect.cost.copy();
- this.userMessage = effect.userMessage;
+ }
+
+ @Override
+ public MogisGodOfSlaughterEffect copy() {
+ return new MogisGodOfSlaughterEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
- Player player = game.getPlayer(targetPointer.getFirst(game, source));
- MageObject mageObject = game.getObject(source.getSourceId());
- if (player != null && mageObject != null) {
- String message = userMessage;
- if (message == null) {
- message = getCostText() + " to prevent " + executingEffect.getText(source.getModes().getMode()) + '?';
- }
- message = CardUtil.replaceSourceName(message, mageObject.getLogName());
- cost.clearPaid();
- if (cost.canPay(source, source.getSourceId(), player.getId(), game) && player.chooseUse(executingEffect.getOutcome(), message, source, game)) {
- cost.pay(source, game, source.getSourceId(), player.getId(), false, null);
- }
- if (!cost.isPaid()) {
- executingEffect.setTargetPointer(this.targetPointer);
- return executingEffect.apply(game, source);
- }
- return true;
+ Player player = game.getPlayer(game.getActivePlayerId());
+ if (player == null || game.getBattlefield().countAll(StaticFilters.FILTER_PERMANENT_CREATURE, game.getActivePlayerId(), game) == 0) {
+ return false;
}
- return false;
- }
-
- @Override
- public String getText(Mode mode) {
- if (!staticText.isEmpty()) {
- return staticText;
+ TargetPermanent target = new TargetControlledCreaturePermanent(1);
+ target.setNotTarget(true);
+ if (!player.chooseUse(outcome, "Sacrifice a creature to prevent 2 damage?", source, game)
+ || !player.choose(outcome, target, source.getSourceId(), game)) {
+ return player.damage(2, source.getSourceId(), game) > 0;
}
- return executingEffect.getText(mode) + "unless they" +
- getCostText();
+ Permanent permanent = game.getPermanent(target.getFirstTarget());
+ return permanent != null && permanent.sacrifice(source.getSourceId(), game);
}
-
- private String getCostText() {
- StringBuilder sb = new StringBuilder();
- String costText = cost.getText();
- if (costText != null
- && !costText.toLowerCase(Locale.ENGLISH).startsWith("discard")
- && !costText.toLowerCase(Locale.ENGLISH).startsWith("sacrifice")
- && !costText.toLowerCase(Locale.ENGLISH).startsWith("remove")) {
- sb.append("pay ");
- }
- return sb.append(costText).toString();
- }
-
- @Override
- public DoUnlessTargetPaysCost copy() {
- return new DoUnlessTargetPaysCost(this);
- }
-}
+}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/m/MogissMarauder.java b/Mage.Sets/src/mage/cards/m/MogissMarauder.java
index cc839ac2fbe..fd64155517d 100644
--- a/Mage.Sets/src/mage/cards/m/MogissMarauder.java
+++ b/Mage.Sets/src/mage/cards/m/MogissMarauder.java
@@ -3,16 +3,13 @@ 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;
import mage.abilities.keyword.HasteAbility;
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 +33,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(DevotionCount.B.getHint());
this.addAbility(ability);
}
- public MogissMarauder(final MogissMarauder card) {
+ private MogissMarauder(final MogissMarauder card) {
super(card);
}
@@ -56,15 +58,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 87497bb64f9..b9a4605e4a9 100644
--- a/Mage.Sets/src/mage/cards/n/NykthosShrineToNyx.java
+++ b/Mage.Sets/src/mage/cards/n/NykthosShrineToNyx.java
@@ -4,17 +4,14 @@ 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;
import mage.abilities.mana.ActivatedManaAbilityImpl;
import mage.abilities.mana.ColorlessManaAbility;
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 +20,7 @@ import mage.players.Player;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
+import java.util.stream.Collectors;
/**
* @author LevelX2
@@ -35,17 +33,12 @@ public final class NykthosShrineToNyx extends CardImpl {
// {T}: Add {C}.
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));
- this.addAbility(ability);
+ this.addAbility(new NykthosShrineToNyxManaAbility());
}
- public NykthosShrineToNyx(final NykthosShrineToNyx card) {
+ private NykthosShrineToNyx(final NykthosShrineToNyx card) {
super(card);
}
@@ -57,12 +50,17 @@ 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());
+ this.addHint(DevotionCount.W.getHint());
+ this.addHint(DevotionCount.U.getHint());
+ this.addHint(DevotionCount.B.getHint());
+ this.addHint(DevotionCount.R.getHint());
+ this.addHint(DevotionCount.G.getHint());
}
- public NykthosShrineToNyxManaAbility(final NykthosShrineToNyxManaAbility ability) {
+ private NykthosShrineToNyxManaAbility(final NykthosShrineToNyxManaAbility ability) {
super(ability);
}
@@ -74,27 +72,22 @@ class NykthosShrineToNyxManaAbility extends ActivatedManaAbilityImpl {
@Override
public List getNetMana(Game game) {
ArrayList 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. (Your devotion to a color is the number of mana symbols of that color in the mana costs of permanents you control.)";
}
- public NykthosDynamicManaEffect(final NykthosDynamicManaEffect effect) {
+ private NykthosDynamicManaEffect(final NykthosDynamicManaEffect effect) {
super(effect);
}
@@ -106,60 +99,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 getNetMana(Game game, Ability source) {
- List 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 0f4f9b80d8a..9b0635f87a5 100644
--- a/Mage.Sets/src/mage/cards/n/NyleaGodOfTheHunt.java
+++ b/Mage.Sets/src/mage/cards/n/NyleaGodOfTheHunt.java
@@ -5,18 +5,18 @@ 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;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.effects.common.continuous.LoseCreatureTypeSourceEffect;
-import mage.abilities.hint.ValueHint;
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 +27,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 +38,26 @@ 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.(Each {G} in the mana costs of permanents you control counts towards your devotion to green.)
- Effect effect = new LoseCreatureTypeSourceEffect(xValue, 5);
- effect.setText("As long as your devotion to green is less than five, Nylea isn't a creature.(Each {G} in the mana costs of permanents you control counts towards your devotion to green.)");
- 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.(Each {G} in the mana costs of permanents you control counts towards your devotion to green.)
+ this.addAbility(new SimpleStaticAbility(new LoseCreatureTypeSourceEffect(DevotionCount.G, 5))
+ .addHint(DevotionCount.G.getHint()));
// 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 771edf605d1..c83bd62f9e0 100644
--- a/Mage.Sets/src/mage/cards/n/NyleasDisciple.java
+++ b/Mage.Sets/src/mage/cards/n/NyleasDisciple.java
@@ -2,15 +2,11 @@ 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 +16,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 +25,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(DevotionCount.G.getHint()));
}
- public NyleasDisciple(final NyleasDisciple card) {
+ private NyleasDisciple(final NyleasDisciple card) {
super(card);
}
diff --git a/Mage.Sets/src/mage/cards/p/PharikaGodOfAffliction.java b/Mage.Sets/src/mage/cards/p/PharikaGodOfAffliction.java
index 5ae9c6c9f1a..eb33899f32b 100644
--- a/Mage.Sets/src/mage/cards/p/PharikaGodOfAffliction.java
+++ b/Mage.Sets/src/mage/cards/p/PharikaGodOfAffliction.java
@@ -5,12 +5,9 @@ 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.OneShotEffect;
import mage.abilities.effects.common.continuous.LoseCreatureTypeSourceEffect;
-import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.IndestructibleAbility;
import mage.cards.Card;
import mage.cards.CardImpl;
@@ -20,7 +17,6 @@ import mage.filter.common.FilterCreatureCard;
import mage.game.Game;
import mage.game.permanent.token.PharikaSnakeToken;
import mage.players.Player;
-import mage.target.Target;
import mage.target.common.TargetCardInGraveyard;
import java.util.UUID;
@@ -30,7 +26,7 @@ import java.util.UUID;
*/
public final class PharikaGodOfAffliction extends CardImpl {
- private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.B, ColoredManaSymbol.G);
+ private static final FilterCreatureCard filter = new FilterCreatureCard("a creature card from a graveyard");
public PharikaGodOfAffliction(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{1}{B}{G}");
@@ -44,14 +40,12 @@ public final class PharikaGodOfAffliction extends CardImpl {
this.addAbility(IndestructibleAbility.getInstance());
// As long as your devotion to black and green is less than seven, Pharika isn't a creature.
- Effect effect = new LoseCreatureTypeSourceEffect(xValue, 7);
- effect.setText("As long as your devotion to black and green is less than seven, Pharika isn't a creature");
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect).addHint(new ValueHint("Devotion to black and green", xValue)));
+ this.addAbility(new SimpleStaticAbility(new LoseCreatureTypeSourceEffect(DevotionCount.BG, 7))
+ .addHint(DevotionCount.BG.getHint()));
// {B}{G}: Exile target creature card from a graveyard. It's owner creates a 1/1 black and green Snake enchantment creature token with deathtouch.
- Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PharikaExileEffect(), new ManaCostsImpl("{B}{G}"));
- Target target = new TargetCardInGraveyard(new FilterCreatureCard("a creature card from a graveyard"));
- ability.addTarget(target);
+ Ability ability = new SimpleActivatedAbility(new PharikaExileEffect(), new ManaCostsImpl("{B}{G}"));
+ ability.addTarget(new TargetCardInGraveyard(filter));
this.addAbility(ability);
}
@@ -68,31 +62,33 @@ public final class PharikaGodOfAffliction extends CardImpl {
class PharikaExileEffect extends OneShotEffect {
- public PharikaExileEffect() {
+ PharikaExileEffect() {
super(Outcome.PutCreatureInPlay);
staticText = "Exile target creature card from a graveyard. Its owner creates a 1/1 black and green Snake enchantment creature token with deathtouch";
}
- public PharikaExileEffect(final PharikaExileEffect effect) {
+ private PharikaExileEffect(final PharikaExileEffect effect) {
super(effect);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
- if (controller != null) {
- Card targetCard = game.getCard(source.getFirstTarget());
- if (targetCard != null) {
- if (game.getState().getZone(source.getFirstTarget()) == Zone.GRAVEYARD) {
- controller.moveCardToExileWithInfo(targetCard, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true);
- }
- Player tokenController = game.getPlayer(targetCard.getOwnerId());
- if (tokenController != null) {
- return new PharikaSnakeToken().putOntoBattlefield(1, game, source.getSourceId(), tokenController.getId());
- }
- }
+ if (controller == null) {
+ return false;
}
- return false;
+ Card targetCard = game.getCard(source.getFirstTarget());
+ if (targetCard == null) {
+ return false;
+ }
+ if (game.getState().getZone(source.getFirstTarget()) == Zone.GRAVEYARD) {
+ controller.moveCards(targetCard, Zone.EXILED, source, game);
+ }
+ Player tokenController = game.getPlayer(targetCard.getOwnerId());
+ if (tokenController == null) {
+ return false;
+ }
+ return new PharikaSnakeToken().putOntoBattlefield(1, game, source.getSourceId(), tokenController.getId());
}
@Override
diff --git a/Mage.Sets/src/mage/cards/p/PhenaxGodOfDeception.java b/Mage.Sets/src/mage/cards/p/PhenaxGodOfDeception.java
index 2cbc41301cc..ec36c25ab34 100644
--- a/Mage.Sets/src/mage/cards/p/PhenaxGodOfDeception.java
+++ b/Mage.Sets/src/mage/cards/p/PhenaxGodOfDeception.java
@@ -5,18 +5,18 @@ import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.common.TapSourceCost;
-import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.DevotionCount;
import mage.abilities.dynamicvalue.common.SourcePermanentToughnessValue;
-import mage.abilities.effects.Effect;
import mage.abilities.effects.common.PutTopCardOfLibraryIntoGraveTargetEffect;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.effects.common.continuous.LoseCreatureTypeSourceEffect;
-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.Duration;
+import mage.constants.SubType;
+import mage.constants.SuperType;
import mage.filter.StaticFilters;
import mage.target.TargetPlayer;
@@ -27,8 +27,6 @@ import java.util.UUID;
*/
public final class PhenaxGodOfDeception extends CardImpl {
- private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.U, ColoredManaSymbol.B);
-
public PhenaxGodOfDeception(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{3}{U}{B}");
addSuperType(SuperType.LEGENDARY);
@@ -41,21 +39,24 @@ public final class PhenaxGodOfDeception extends CardImpl {
this.addAbility(IndestructibleAbility.getInstance());
// As long as your devotion to blue and black is less than seven, Phenax isn't a creature.
- Effect effect = new LoseCreatureTypeSourceEffect(xValue, 7);
- effect.setText("As long as your devotion to blue and black is less than seven, Phenax isn't a creature");
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect).addHint(new ValueHint("Devotion to blue and black", xValue)));
+ this.addAbility(new SimpleStaticAbility(new LoseCreatureTypeSourceEffect(DevotionCount.UB, 7))
+ .addHint(DevotionCount.UB.getHint()));
// Creatures you control have "{T}: Target player puts the top X cards of their library into their graveyard, where X is this creature's toughness."
- effect = new PutTopCardOfLibraryIntoGraveTargetEffect(SourcePermanentToughnessValue.getInstance());
- effect.setText("Target player puts the top X cards of their library into their graveyard, where X is this creature's toughness");
- Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new TapSourceCost());
+ Ability ability = new SimpleActivatedAbility(
+ new PutTopCardOfLibraryIntoGraveTargetEffect(SourcePermanentToughnessValue.getInstance())
+ .setText("Target player puts the top X cards of their library into their graveyard, " +
+ "where X is this creature's toughness"), new TapSourceCost());
ability.addTarget(new TargetPlayer());
- effect = new GainAbilityControlledEffect(ability, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES, false);
- effect.setText("Creatures you control have \"{T}: Target player puts the top X cards of their library into their graveyard, where X is this creature's toughness.\"");
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
+ this.addAbility(new SimpleStaticAbility(
+ new GainAbilityControlledEffect(
+ ability, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES, false
+ ).setText("Creatures you control have \"{T}: Target player puts the top X cards of their library " +
+ "into their graveyard, where X is this creature's toughness.\"")
+ ));
}
- public PhenaxGodOfDeception(final PhenaxGodOfDeception card) {
+ private PhenaxGodOfDeception(final PhenaxGodOfDeception card) {
super(card);
}
diff --git a/Mage.Sets/src/mage/cards/p/PurphorosGodOfTheForge.java b/Mage.Sets/src/mage/cards/p/PurphorosGodOfTheForge.java
index 079d06e6980..db290596d0e 100644
--- a/Mage.Sets/src/mage/cards/p/PurphorosGodOfTheForge.java
+++ b/Mage.Sets/src/mage/cards/p/PurphorosGodOfTheForge.java
@@ -5,17 +5,15 @@ import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
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.DamagePlayersEffect;
import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.abilities.effects.common.continuous.LoseCreatureTypeSourceEffect;
-import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.IndestructibleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
+import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.AnotherPredicate;
@@ -26,14 +24,12 @@ import java.util.UUID;
*/
public final class PurphorosGodOfTheForge extends CardImpl {
- private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another creature");
+ private static final FilterPermanent filter = new FilterCreaturePermanent("another creature");
static {
filter.add(AnotherPredicate.instance);
}
- private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.R);
-
public PurphorosGodOfTheForge(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{3}{R}");
@@ -47,18 +43,21 @@ public final class PurphorosGodOfTheForge extends CardImpl {
this.addAbility(IndestructibleAbility.getInstance());
// As long as your devotion to red is less than five, Purphoros isn't a creature.
- Effect effect = new LoseCreatureTypeSourceEffect(xValue, 5);
- effect.setText("As long as your devotion to red is less than five, Purphoros isn't a creature.(Each {R} in the mana costs of permanents you control counts towards your devotion to red.)");
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect).addHint(new ValueHint("Devotion to red", xValue)));
+ this.addAbility(new SimpleStaticAbility(new LoseCreatureTypeSourceEffect(DevotionCount.R, 5))
+ .addHint(DevotionCount.R.getHint()));
// Whenever another creature enters the battlefield under your control, Purphoros deals 2 damage to each opponent.
- this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new DamagePlayersEffect(2, TargetController.OPPONENT), filter));
+ this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
+ new DamagePlayersEffect(2, TargetController.OPPONENT), filter
+ ));
// {2}{R}: Creatures you control get +1/+0 until end of turn.
- this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{2}{R}")));
+ this.addAbility(new SimpleActivatedAbility(
+ new BoostControlledEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{2}{R}")
+ ));
}
- public PurphorosGodOfTheForge(final PurphorosGodOfTheForge card) {
+ private PurphorosGodOfTheForge(final PurphorosGodOfTheForge card) {
super(card);
}
diff --git a/Mage.Sets/src/mage/cards/r/ReverentHunter.java b/Mage.Sets/src/mage/cards/r/ReverentHunter.java
index 762a655df1d..df8997dc6a4 100644
--- a/Mage.Sets/src/mage/cards/r/ReverentHunter.java
+++ b/Mage.Sets/src/mage/cards/r/ReverentHunter.java
@@ -2,14 +2,11 @@ package mage.cards.r;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
-import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.DevotionCount;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
-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 mage.counters.CounterType;
@@ -20,8 +17,6 @@ import java.util.UUID;
*/
public final class ReverentHunter extends CardImpl {
- private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.G);
-
public ReverentHunter(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
this.subtype.add(SubType.HUMAN);
@@ -31,14 +26,12 @@ public final class ReverentHunter extends CardImpl {
this.toughness = new MageInt(1);
// When Reverent Hunter enters the battlefield, put a number of +1/+1 counters on it equal to your devotion to green.
- this.addAbility(
- new EntersBattlefieldTriggeredAbility(
- new AddCountersSourceEffect(CounterType.P1P1.createInstance(0), xValue, true)
- ).addHint(new ValueHint("Devotion to green", xValue))
- );
+ this.addAbility(new EntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(
+ CounterType.P1P1.createInstance(0), DevotionCount.G, true
+ )).addHint(DevotionCount.G.getHint()));
}
- public ReverentHunter(final ReverentHunter card) {
+ private ReverentHunter(final ReverentHunter card) {
super(card);
}
diff --git a/Mage.Sets/src/mage/cards/s/Sanguimancy.java b/Mage.Sets/src/mage/cards/s/Sanguimancy.java
index fbedf639702..4dd87e3bf8f 100644
--- a/Mage.Sets/src/mage/cards/s/Sanguimancy.java
+++ b/Mage.Sets/src/mage/cards/s/Sanguimancy.java
@@ -1,15 +1,12 @@
package mage.cards.s;
-import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.DevotionCount;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
-import mage.abilities.hint.ValueHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.ColoredManaSymbol;
import java.util.UUID;
@@ -18,19 +15,17 @@ import java.util.UUID;
*/
public final class Sanguimancy extends CardImpl {
- private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.B);
-
public Sanguimancy(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{B}");
// You draw X cards and you lose X life, where X is your devotion to black.
- Effect effect = new DrawCardSourceControllerEffect(xValue);
+ Effect effect = new DrawCardSourceControllerEffect(DevotionCount.B);
effect.setText("You draw X cards");
this.getSpellAbility().addEffect(effect);
- effect = new LoseLifeSourceControllerEffect(xValue);
+ effect = new LoseLifeSourceControllerEffect(DevotionCount.B);
effect.setText("and you lose X life, where X is your devotion to black");
this.getSpellAbility().addEffect(effect);
- this.getSpellAbility().addHint(new ValueHint("Devotion to black", xValue));
+ this.getSpellAbility().addHint(DevotionCount.B.getHint());
}
public Sanguimancy(final Sanguimancy card) {
diff --git a/Mage.Sets/src/mage/cards/s/Skyreaping.java b/Mage.Sets/src/mage/cards/s/Skyreaping.java
index 39144af3a08..265fd933ada 100644
--- a/Mage.Sets/src/mage/cards/s/Skyreaping.java
+++ b/Mage.Sets/src/mage/cards/s/Skyreaping.java
@@ -1,15 +1,12 @@
package mage.cards.s;
-import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.DevotionCount;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DamageAllEffect;
-import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.ColoredManaSymbol;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AbilityPredicate;
@@ -26,17 +23,14 @@ public final class Skyreaping extends CardImpl {
filter.add(new AbilityPredicate(FlyingAbility.class));
}
- private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.G);
-
public Skyreaping(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{G}");
-
// Skyreaping deals damage to each creature with flying equal to your devotion to green.
- Effect effect = new DamageAllEffect(xValue, filter);
+ Effect effect = new DamageAllEffect(DevotionCount.G, filter);
effect.setText("{this} deals damage to each creature with flying equal to your devotion to green (Each {G} in the mana costs of permanents you control counts toward your devotion to green.)");
this.getSpellAbility().addEffect(effect);
- this.getSpellAbility().addHint(new ValueHint("Devotion to green", xValue));
+ this.getSpellAbility().addHint(DevotionCount.G.getHint());
}
public Skyreaping(final Skyreaping card) {
diff --git a/Mage.Sets/src/mage/cards/t/ThassaGodOfTheSea.java b/Mage.Sets/src/mage/cards/t/ThassaGodOfTheSea.java
index 9eeaf731239..0b774119ffe 100644
--- a/Mage.Sets/src/mage/cards/t/ThassaGodOfTheSea.java
+++ b/Mage.Sets/src/mage/cards/t/ThassaGodOfTheSea.java
@@ -6,13 +6,10 @@ import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
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.combat.CantBeBlockedTargetEffect;
import mage.abilities.effects.common.continuous.LoseCreatureTypeSourceEffect;
import mage.abilities.effects.keyword.ScryEffect;
-import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.IndestructibleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@@ -27,8 +24,6 @@ import java.util.UUID;
public final class ThassaGodOfTheSea extends CardImpl {
- private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.U);
-
public ThassaGodOfTheSea(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{2}{U}");
addSuperType(SuperType.LEGENDARY);
@@ -40,21 +35,24 @@ public final class ThassaGodOfTheSea extends CardImpl {
// Indestructible
this.addAbility(IndestructibleAbility.getInstance());
- // As long as your devotion to white is less than five, Thassa isn't a creature.(Each {U} in the mana costs of permanents you control counts towards your devotion to white.)
- Effect effect = new LoseCreatureTypeSourceEffect(xValue, 5);
- effect.setText("As long as your devotion to blue is less than five, Thassa isn't a creature.(Each {U} in the mana costs of permanents you control counts towards your devotion to blue.)");
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect).addHint(new ValueHint("Devotion to blue", xValue)));
+ // As long as your devotion to blue is less than five, Thassa isn't a creature.(Each {U} in the mana costs of permanents you control counts towards your devotion to white.)
+ this.addAbility(new SimpleStaticAbility(new LoseCreatureTypeSourceEffect(DevotionCount.U, 5))
+ .addHint(DevotionCount.U.getHint()));
// At the beginning of your upkeep, scry 1.
- this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new ScryEffect(1), TargetController.YOU, false));
+ this.addAbility(new BeginningOfUpkeepTriggeredAbility(
+ new ScryEffect(1), TargetController.YOU, false
+ ));
// {1}{U}: Target creature you control can't be blocked this turn.
- Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedTargetEffect(Duration.EndOfTurn), new ManaCostsImpl("{1}{U}"));
+ Ability ability = new SimpleActivatedAbility(
+ new CantBeBlockedTargetEffect(Duration.EndOfTurn), new ManaCostsImpl("{1}{U}")
+ );
ability.addTarget(new TargetControlledCreaturePermanent());
this.addAbility(ability);
}
- public ThassaGodOfTheSea(final ThassaGodOfTheSea card) {
+ private ThassaGodOfTheSea(final ThassaGodOfTheSea card) {
super(card);
}
diff --git a/Mage.Sets/src/mage/cards/t/ThassasRebuff.java b/Mage.Sets/src/mage/cards/t/ThassasRebuff.java
index 61384c97cbc..889c7a79fff 100644
--- a/Mage.Sets/src/mage/cards/t/ThassasRebuff.java
+++ b/Mage.Sets/src/mage/cards/t/ThassasRebuff.java
@@ -1,13 +1,10 @@
package mage.cards.t;
-import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.DevotionCount;
import mage.abilities.effects.common.CounterUnlessPaysEffect;
-import mage.abilities.hint.ValueHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.ColoredManaSymbol;
import mage.target.TargetSpell;
import java.util.UUID;
@@ -17,18 +14,16 @@ import java.util.UUID;
*/
public final class ThassasRebuff extends CardImpl {
- private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.U);
-
public ThassasRebuff(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}");
// Counter target spell unless its controller pays {X}, where X is your devotion to blue.
- this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(xValue));
+ this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(DevotionCount.U));
this.getSpellAbility().addTarget(new TargetSpell());
- this.getSpellAbility().addHint(new ValueHint("Devotion to blue", xValue));
+ this.getSpellAbility().addHint(DevotionCount.U.getHint());
}
- public ThassasRebuff(final ThassasRebuff card) {
+ private ThassasRebuff(final ThassasRebuff card) {
super(card);
}
diff --git a/Mage.Sets/src/mage/cards/t/ThunderousMight.java b/Mage.Sets/src/mage/cards/t/ThunderousMight.java
index dd716ea8e01..bd30f816fce 100644
--- a/Mage.Sets/src/mage/cards/t/ThunderousMight.java
+++ b/Mage.Sets/src/mage/cards/t/ThunderousMight.java
@@ -2,12 +2,10 @@ package mage.cards.t;
import mage.abilities.Ability;
import mage.abilities.common.AttacksAttachedTriggeredAbility;
-import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.DevotionCount;
import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.continuous.BoostEnchantedEffect;
-import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.EnchantAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@@ -22,8 +20,6 @@ import java.util.UUID;
*/
public final class ThunderousMight extends CardImpl {
- private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.R);
-
public ThunderousMight(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{R}");
this.subtype.add(SubType.AURA);
@@ -36,14 +32,14 @@ public final class ThunderousMight extends CardImpl {
this.addAbility(ability);
// Whenever enchanted creature attacks, it gets +X/+0 until end of turn, where X is your devotion to red.
- BoostEnchantedEffect effect = new BoostEnchantedEffect(xValue, new StaticValue(0), Duration.EndOfTurn);
+ BoostEnchantedEffect effect = new BoostEnchantedEffect(DevotionCount.R, new StaticValue(0), Duration.EndOfTurn);
effect.setText("it gets +X/+0 until end of turn, where X is your devotion to red");
effect.setLockedIn(true);
this.addAbility(new AttacksAttachedTriggeredAbility(effect, AttachmentType.AURA, false)
- .addHint(new ValueHint("Devotion to red", xValue)));
+ .addHint(DevotionCount.R.getHint()));
}
- public ThunderousMight(final ThunderousMight card) {
+ private ThunderousMight(final ThunderousMight card) {
super(card);
}
diff --git a/Mage.Sets/src/mage/cards/x/XenagosGodOfRevels.java b/Mage.Sets/src/mage/cards/x/XenagosGodOfRevels.java
index 9c264b6648d..e0e485e3bb0 100644
--- a/Mage.Sets/src/mage/cards/x/XenagosGodOfRevels.java
+++ b/Mage.Sets/src/mage/cards/x/XenagosGodOfRevels.java
@@ -4,25 +4,22 @@ import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfCombatTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.DevotionCount;
-import mage.abilities.effects.ContinuousEffect;
-import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
import mage.abilities.effects.common.continuous.LoseCreatureTypeSourceEffect;
-import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.HasteAbility;
import mage.abilities.keyword.IndestructibleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
+import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.permanent.AnotherPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.target.common.TargetControlledCreaturePermanent;
+import mage.target.TargetPermanent;
import java.util.UUID;
@@ -31,14 +28,13 @@ import java.util.UUID;
*/
public final class XenagosGodOfRevels extends CardImpl {
- private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another target creature you control");
+ private static final FilterPermanent filter
+ = new FilterControlledCreaturePermanent("another target creature you control");
static {
filter.add(AnotherPredicate.instance);
}
- private static final DynamicValue xValue = new DevotionCount(ColoredManaSymbol.R, ColoredManaSymbol.G);
-
public XenagosGodOfRevels(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{3}{R}{G}");
addSuperType(SuperType.LEGENDARY);
@@ -51,20 +47,23 @@ public final class XenagosGodOfRevels extends CardImpl {
this.addAbility(IndestructibleAbility.getInstance());
// As long as your devotion to red and green is less than seven, Xenagos isn't a creature.
- Effect effect = new LoseCreatureTypeSourceEffect(xValue, 7);
- effect.setText("As long as your devotion to red and green is less than seven, Xenagos isn't a creature");
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect).addHint(new ValueHint("Devotion to red and green", xValue)));
+ this.addAbility(new SimpleStaticAbility(new LoseCreatureTypeSourceEffect(DevotionCount.RG, 7))
+ .addHint(DevotionCount.RG.getHint()));
// At the beginning of combat on your turn, another target creature you control gains haste and gets +X/+X until end of turn, where X is that creature's power.
- effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn);
- effect.setText("another target creature you control gains haste");
- Ability ability = new BeginningOfCombatTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.YOU, false, false);
+ Ability ability = new BeginningOfCombatTriggeredAbility(
+ Zone.BATTLEFIELD,
+ new GainAbilityTargetEffect(
+ HasteAbility.getInstance(), Duration.EndOfTurn
+ ).setText("another target creature you control gains haste"),
+ TargetController.YOU, false, false
+ );
ability.addEffect(new XenagosGodOfRevelsEffect());
- ability.addTarget(new TargetControlledCreaturePermanent(1, 1, filter, false));
+ ability.addTarget(new TargetPermanent(filter));
this.addAbility(ability);
}
- public XenagosGodOfRevels(final XenagosGodOfRevels card) {
+ private XenagosGodOfRevels(final XenagosGodOfRevels card) {
super(card);
}
@@ -76,12 +75,12 @@ public final class XenagosGodOfRevels extends CardImpl {
class XenagosGodOfRevelsEffect extends OneShotEffect {
- public XenagosGodOfRevelsEffect() {
+ XenagosGodOfRevelsEffect() {
super(Outcome.BoostCreature);
this.staticText = "and gets +X/+X until end of turn, where X is that creature's power";
}
- public XenagosGodOfRevelsEffect(final XenagosGodOfRevelsEffect effect) {
+ private XenagosGodOfRevelsEffect(final XenagosGodOfRevelsEffect effect) {
super(effect);
}
@@ -93,11 +92,13 @@ class XenagosGodOfRevelsEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
Permanent targetCreature = game.getPermanent(getTargetPointer().getFirst(game, source));
- if (targetCreature != null) {
- ContinuousEffect effect = new BoostTargetEffect(targetCreature.getPower().getValue(), targetCreature.getPower().getValue(), Duration.EndOfTurn);
- effect.setTargetPointer(this.getTargetPointer());
- game.addEffect(effect, source);
+ if (targetCreature == null) {
+ return false;
}
+ int power = targetCreature.getPower().getValue();
+ game.addEffect(new BoostTargetEffect(
+ power, power, Duration.EndOfTurn
+ ).setTargetPointer(this.getTargetPointer()), source);
return false;
}
}
diff --git a/Mage/src/main/java/mage/abilities/dynamicvalue/common/DevotionCount.java b/Mage/src/main/java/mage/abilities/dynamicvalue/common/DevotionCount.java
index 59e1208dfeb..01076d59d0d 100644
--- a/Mage/src/main/java/mage/abilities/dynamicvalue/common/DevotionCount.java
+++ b/Mage/src/main/java/mage/abilities/dynamicvalue/common/DevotionCount.java
@@ -1,18 +1,18 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
package mage.abilities.dynamicvalue.common;
-import java.util.ArrayList;
-import java.util.Arrays;
+import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.costs.mana.ManaCost;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.effects.Effect;
+import mage.abilities.hint.Hint;
+import mage.abilities.hint.ValueHint;
import mage.constants.ColoredManaSymbol;
import mage.game.Game;
-import mage.game.permanent.Permanent;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
/**
* Each colored mana symbol (e.g. {U}) in the mana costs of permanents you
@@ -20,37 +20,49 @@ import mage.game.permanent.Permanent;
*
* @author LevelX2
*/
-public class DevotionCount implements DynamicValue {
+public enum DevotionCount implements DynamicValue {
+ W(ColoredManaSymbol.W),
+ U(ColoredManaSymbol.U),
+ B(ColoredManaSymbol.B),
+ R(ColoredManaSymbol.R),
+ G(ColoredManaSymbol.G),
+ WU(ColoredManaSymbol.W, ColoredManaSymbol.U),
+ WB(ColoredManaSymbol.W, ColoredManaSymbol.B),
+ UB(ColoredManaSymbol.U, ColoredManaSymbol.B),
+ UR(ColoredManaSymbol.U, ColoredManaSymbol.R),
+ BR(ColoredManaSymbol.B, ColoredManaSymbol.R),
+ BG(ColoredManaSymbol.B, ColoredManaSymbol.G),
+ RG(ColoredManaSymbol.R, ColoredManaSymbol.G),
+ RW(ColoredManaSymbol.R, ColoredManaSymbol.W),
+ GW(ColoredManaSymbol.G, ColoredManaSymbol.W),
+ GU(ColoredManaSymbol.G, ColoredManaSymbol.U);
- private ArrayList devotionColors = new ArrayList<>();
+ private final ArrayList devotionColors = new ArrayList<>();
+ private final Hint hint;
- public DevotionCount(ColoredManaSymbol... devotionColor) {
+ DevotionCount(ColoredManaSymbol... devotionColor) {
this.devotionColors.addAll(Arrays.asList(devotionColor));
- }
-
- public DevotionCount(final DevotionCount dynamicValue) {
- this.devotionColors = dynamicValue.devotionColors;
+ this.hint = new ValueHint(this.getMessage().replace("your d", "D"), this);
}
@Override
public int calculate(Game game, Ability sourceAbility, Effect effect) {
- int devotion = 0;
- for (Permanent permanent : game.getBattlefield().getAllActivePermanents(sourceAbility.getControllerId())) {
- for (ManaCost manaCost : permanent.getManaCost()) {
- for (ColoredManaSymbol coloredManaSymbol : devotionColors) {
- if (manaCost.containsColor(coloredManaSymbol)) {
- devotion++;
- break; // count each manaCost maximum of one time (Hybrid don't count for multiple colors of devotion)
- }
- }
- }
- }
- return devotion;
+ return game.getBattlefield()
+ .getAllActivePermanents(sourceAbility.getControllerId())
+ .stream()
+ .map(MageObject::getManaCost)
+ .flatMap(Collection::stream)
+ .mapToInt(this::checkCost)
+ .sum();
+ }
+
+ private int checkCost(ManaCost manaCost) {
+ return devotionColors.stream().anyMatch(manaCost::containsColor) ? 1 : 0;
}
@Override
public DevotionCount copy() {
- return new DevotionCount(this);
+ return this;
}
@Override
@@ -71,4 +83,8 @@ public class DevotionCount implements DynamicValue {
}
return sb.toString();
}
+
+ public Hint getHint() {
+ return hint;
+ }
}