mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
Remove duplicate code for X costs (#12551)
* Replace "([a-zA-Z]+).getManaCostsToPay().getX()" with CardUtil.getSourceCostsTag(game, $1, "X", 0) Fix Disrupting Shoal * Change final card .getX() calls * Condense all ManacostVariableValue enum values into "instance" * Further removal of getX, Display X symbol for non-mana X cards * Fix test * Fully remove ManaCosts.getX * Replace all different X dynamic values with GetXValue * Remove individual cards checking getAmount for X values (leaving cost reduction that does not use X) * Add null check for game object inside getSourceCostsTagsMap * fix build errors * fix Vicious Betrayal * text fix
This commit is contained in:
parent
1cb902fc43
commit
e8808c3ae3
509 changed files with 1322 additions and 1571 deletions
|
|
@ -8,7 +8,7 @@ import mage.abilities.Abilities;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.SpellAbility;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.Effects;
|
||||
import mage.abilities.hint.HintUtils;
|
||||
|
|
@ -743,18 +743,10 @@ public class CardView extends SimpleCardView {
|
|||
}
|
||||
|
||||
// icon - x cost
|
||||
if (showCard != null
|
||||
&& showCard.getManaCost().containsX()
|
||||
&& showAbility != null
|
||||
if (showCard != null && showAbility != null
|
||||
&& (showCard.getManaCost().containsX() || CardUtil.checkSourceCostsTagExists(game, showAbility, "X"))
|
||||
&& (showZone.match(Zone.BATTLEFIELD) || showZone.match(Zone.STACK))) {
|
||||
int costX;
|
||||
if (showCard instanceof Permanent) {
|
||||
// permanent on battlefield (can show x icon multiple turns, so use end_game source)
|
||||
costX = ManacostVariableValue.END_GAME.calculate(game, showAbility, null);
|
||||
} else {
|
||||
// other like Stack (can show x icon on stack only, so use normal source)
|
||||
costX = ManacostVariableValue.REGULAR.calculate(game, showAbility, null);
|
||||
}
|
||||
int costX = GetXValue.instance.calculate(game, showAbility, null);
|
||||
this.cardIcons.add(CardIconImpl.variableCost(costX));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,11 +3,9 @@ package mage.view;
|
|||
import mage.MageObject;
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.Modes;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.hint.Hint;
|
||||
import mage.abilities.hint.HintUtils;
|
||||
import mage.abilities.icon.CardIconImpl;
|
||||
import mage.cards.Card;
|
||||
import mage.constants.AbilityType;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -16,7 +14,6 @@ import mage.game.Game;
|
|||
import mage.game.stack.StackAbility;
|
||||
import mage.game.stack.StackObject;
|
||||
import mage.target.Target;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
import mage.target.targetpointer.TargetPointer;
|
||||
import mage.util.GameLog;
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.CostAdjuster;
|
||||
import mage.abilities.costs.common.DiscardTargetCost;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.InfoEffect;
|
||||
import mage.abilities.effects.common.discard.LookTargetHandChooseDiscardEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -15,6 +15,7 @@ import mage.filter.StaticFilters;
|
|||
import mage.game.Game;
|
||||
import mage.target.common.TargetCardInHand;
|
||||
import mage.target.common.TargetOpponent;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -34,7 +35,7 @@ public final class AbandonHope extends CardImpl {
|
|||
this.addAbility(ability);
|
||||
|
||||
// Look at target opponent's hand and choose X cards from it. That player discards those cards.
|
||||
this.getSpellAbility().addEffect(new LookTargetHandChooseDiscardEffect(false, ManacostVariableValue.REGULAR));
|
||||
this.getSpellAbility().addEffect(new LookTargetHandChooseDiscardEffect(false, GetXValue.instance));
|
||||
this.getSpellAbility().addTarget(new TargetOpponent());
|
||||
this.getSpellAbility().setCostAdjuster(AbandonHopeAdjuster.instance);
|
||||
}
|
||||
|
|
@ -54,7 +55,7 @@ enum AbandonHopeAdjuster implements CostAdjuster {
|
|||
|
||||
@Override
|
||||
public void adjustCosts(Ability ability, Game game) {
|
||||
int xValue = ability.getManaCostsToPay().getX();
|
||||
int xValue = CardUtil.getSourceCostsTag(game, ability, "X", 0);
|
||||
if (xValue > 0) {
|
||||
ability.addCost(new DiscardTargetCost(new TargetCardInHand(xValue, xValue, StaticFilters.FILTER_CARD_CARDS)));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package mage.cards.a;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.ContinuousEffectImpl;
|
||||
import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
|
|
@ -75,7 +75,7 @@ class AbuelosAwakeningEffect extends ReturnFromGraveyardToBattlefieldTargetEffec
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
int counterAmount = ManacostVariableValue.REGULAR.calculate(game, source, this);
|
||||
int counterAmount = GetXValue.instance.calculate(game, source, this);
|
||||
for (UUID targetId : getTargetPointer().getTargets(game, source)) {
|
||||
AbuelosAwakeningContinuousEffect continuousEffect = new AbuelosAwakeningContinuousEffect();
|
||||
continuousEffect.setTargetPointer(new FixedTarget(targetId, game));
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ import mage.game.Game;
|
|||
import mage.target.common.TargetCardInHand;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
import mage.target.targetadjustment.XTargetsCountAdjuster;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -58,7 +59,7 @@ enum AetherTideCostAdjuster implements CostAdjuster {
|
|||
|
||||
@Override
|
||||
public void adjustCosts(Ability ability, Game game) {
|
||||
int xValue = ability.getManaCostsToPay().getX();
|
||||
int xValue = CardUtil.getSourceCostsTag(game, ability, "X", 0);
|
||||
if (xValue > 0) {
|
||||
ability.addCost(new DiscardTargetCost(new TargetCardInHand(xValue, xValue, StaticFilters.FILTER_CARD_CREATURES)));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import mage.filter.common.FilterCreatureCard;
|
|||
import mage.game.Game;
|
||||
import mage.target.common.TargetCardInYourGraveyard;
|
||||
import mage.target.targetadjustment.TargetAdjuster;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
|
@ -74,7 +75,7 @@ enum AgadeemsAwakeningAdjuster implements TargetAdjuster {
|
|||
@Override
|
||||
public void adjustTargets(Ability ability, Game game) {
|
||||
ability.getTargets().clear();
|
||||
ability.addTarget(new AgadeemsAwakeningTarget(ability.getManaCostsToPay().getX()));
|
||||
ability.addTarget(new AgadeemsAwakeningTarget(CardUtil.getSourceCostsTag(game, ability, "X", 0)));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
package mage.cards.a;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
|
|
@ -18,6 +16,9 @@ import mage.players.Player;
|
|||
import mage.target.TargetPermanent;
|
||||
import mage.target.common.TargetControlledCreaturePermanent;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author Cguy7777
|
||||
|
|
@ -72,7 +73,7 @@ class AggressiveBiomancyEffect extends OneShotEffect {
|
|||
source.getControllerId(),
|
||||
null,
|
||||
false,
|
||||
source.getManaCostsToPay().getX());
|
||||
CardUtil.getSourceCostsTag(game, source, "X", 0));
|
||||
effect.addAdditionalAbilities(fightAbility);
|
||||
effect.setTargetPointer(new FixedTarget(creatureToCopy, game));
|
||||
return effect.apply(game, source);
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package mage.cards.a;
|
|||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.GainLifeTargetEffect;
|
||||
import mage.abilities.effects.common.PreventDamageToTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -23,9 +23,9 @@ public final class AlabasterPotion extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{W}{W}");
|
||||
|
||||
// Choose one - Target player gains X life; or prevent the next X damage that would be dealt to any target this turn.
|
||||
this.getSpellAbility().addEffect(new GainLifeTargetEffect(ManacostVariableValue.REGULAR));
|
||||
this.getSpellAbility().addEffect(new GainLifeTargetEffect(GetXValue.instance));
|
||||
this.getSpellAbility().addTarget(new TargetPlayer());
|
||||
Mode mode = new Mode(new PreventDamageToTargetEffect(Duration.EndOfTurn, false, true, ManacostVariableValue.REGULAR));
|
||||
Mode mode = new Mode(new PreventDamageToTargetEffect(Duration.EndOfTurn, false, true, GetXValue.instance));
|
||||
mode.addTarget(new TargetAnyTarget());
|
||||
this.getSpellAbility().addMode(mode);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,16 @@
|
|||
|
||||
package mage.cards.a;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.costs.mana.VariableManaCost;
|
||||
import mage.abilities.effects.ReplacementEffectImpl;
|
||||
import mage.cards.*;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.cards.Cards;
|
||||
import mage.cards.CardsImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
|
|
@ -18,6 +20,9 @@ import mage.game.Game;
|
|||
import mage.game.events.GameEvent;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetCard;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -73,7 +78,7 @@ class AladdinsLampEffect extends ReplacementEffectImpl {
|
|||
return false;
|
||||
}
|
||||
|
||||
Cards cards = new CardsImpl(controller.getLibrary().getTopCards(game, source.getManaCostsToPay().getX()));
|
||||
Cards cards = new CardsImpl(controller.getLibrary().getTopCards(game, CardUtil.getSourceCostsTag(game, source, "X", 0)));
|
||||
controller.lookAtCards(source, null, cards, game);
|
||||
TargetCard target = new TargetCard(Zone.LIBRARY, new FilterCard("card to stay at the top of library"));
|
||||
if (controller.choose(outcome, cards, target, source, game)) {
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import mage.abilities.common.SimpleActivatedAbility;
|
|||
import mage.abilities.costs.common.SacrificeTargetCost;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.GainLifeEffect;
|
||||
import mage.abilities.effects.keyword.InvestigateEffect;
|
||||
|
|
@ -43,11 +43,11 @@ public final class AlquistProftMasterSleuth extends CardImpl {
|
|||
|
||||
// {X}{W}{U}{U}, {T}, Sacrifice a Clue: You draw X cards and gain X life.
|
||||
Ability ability = new SimpleActivatedAbility(
|
||||
new DrawCardSourceControllerEffect(ManacostVariableValue.REGULAR, "you"), new ManaCostsImpl<>("{X}{W}{U}{U}")
|
||||
new DrawCardSourceControllerEffect(GetXValue.instance, "you"), new ManaCostsImpl<>("{X}{W}{U}{U}")
|
||||
);
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_CLUE));
|
||||
ability.addEffect(new GainLifeEffect(ManacostVariableValue.REGULAR).setText("and gain X life"));
|
||||
ability.addEffect(new GainLifeEffect(GetXValue.instance).setText("and gain X life"));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,6 @@
|
|||
|
||||
package mage.cards.a;
|
||||
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import mage.MageObject;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.condition.common.SpellMasteryCondition;
|
||||
|
|
@ -16,6 +13,11 @@ import mage.filter.common.FilterLandCard;
|
|||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -61,7 +63,7 @@ class AnimistsAwakeningEffect extends OneShotEffect {
|
|||
return false;
|
||||
}
|
||||
Cards cards = new CardsImpl();
|
||||
int xValue = source.getManaCostsToPay().getX();
|
||||
int xValue = CardUtil.getSourceCostsTag(game, source, "X", 0);
|
||||
cards.addAllCards(controller.getLibrary().getTopCards(game, xValue));
|
||||
if (!cards.isEmpty()) {
|
||||
controller.revealCards(sourceObject.getIdName(), cards, game);
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package mage.cards.a;
|
|||
|
||||
import mage.MageObjectReference;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.ExileThenReturnTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -60,7 +60,7 @@ class AnotherRoundEffect extends OneShotEffect {
|
|||
return false;
|
||||
}
|
||||
|
||||
int xValue = ManacostVariableValue.REGULAR.calculate(game, source, this);
|
||||
int xValue = GetXValue.instance.calculate(game, source, this);
|
||||
TargetControlledCreaturePermanent target =
|
||||
new TargetControlledCreaturePermanent(
|
||||
0, Integer.MAX_VALUE,
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ import mage.constants.Zone;
|
|||
import mage.counters.CounterType;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -75,7 +76,7 @@ class AnthroplasmEffect extends OneShotEffect {
|
|||
//Remove all +1/+1 counters
|
||||
permanent.removeAllCounters(CounterType.P1P1.getName(), source, game);
|
||||
//put X +1/+1 counters
|
||||
permanent.addCounters(CounterType.P1P1.createInstance(source.getManaCostsToPay().getX()), source.getControllerId(), source, game);
|
||||
permanent.addCounters(CounterType.P1P1.createInstance(CardUtil.getSourceCostsTag(game, source, "X", 0)), source.getControllerId(), source, game);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.DamageAllEffect;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.keyword.ChannelAbility;
|
||||
|
|
@ -43,13 +43,13 @@ public final class ArashiTheSkyAsunder extends CardImpl {
|
|||
this.toughness = new MageInt(5);
|
||||
|
||||
// {X}{G}, {tap}: Arashi, the Sky Asunder deals X damage to target creature with flying.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(ManacostVariableValue.REGULAR), new ManaCostsImpl<>("{X}{G}"));
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(GetXValue.instance), new ManaCostsImpl<>("{X}{G}"));
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addTarget(new TargetPermanent(filter));
|
||||
this.addAbility(ability);
|
||||
|
||||
// Channel - {X}{G}{G}, Discard Arashi: Arashi deals X damage to each creature with flying.
|
||||
this.addAbility(new ChannelAbility("{X}{G}{G}", new DamageAllEffect(ManacostVariableValue.REGULAR, filter)));
|
||||
this.addAbility(new ChannelAbility("{X}{G}{G}", new DamageAllEffect(GetXValue.instance, filter)));
|
||||
}
|
||||
|
||||
private ArashiTheSkyAsunder(final ArashiTheSkyAsunder card) {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package mage.cards.a;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.AttacksWithCreaturesTriggeredAbility;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.PopulateEffect;
|
||||
|
|
@ -66,7 +66,7 @@ class ArborealAllianceEffect extends OneShotEffect {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
return new CreateTokenEffect(
|
||||
new SylvanOfferingTreefolkToken(ManacostVariableValue.ETB.calculate(game, source, this))
|
||||
new SylvanOfferingTreefolkToken(GetXValue.instance.calculate(game, source, this))
|
||||
).apply(game, source);
|
||||
}
|
||||
}
|
||||
|
|
@ -14,6 +14,7 @@ import mage.filter.FilterCard;
|
|||
import mage.filter.predicate.Predicates;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -73,7 +74,7 @@ class AscendFromAvernusEffect extends OneShotEffect {
|
|||
return false;
|
||||
}
|
||||
Cards cards = new CardsImpl(player.getGraveyard().getCards(filter, game));
|
||||
cards.removeIf(uuid -> game.getCard(uuid).getManaValue() > source.getManaCostsToPay().getX());
|
||||
cards.removeIf(uuid -> game.getCard(uuid).getManaValue() > CardUtil.getSourceCostsTag(game, source, "X", 0));
|
||||
return player.moveCards(cards, Zone.BATTLEFIELD, source, game);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,8 +2,6 @@ package mage.cards.a;
|
|||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.LoyaltyAbility;
|
||||
import mage.abilities.costs.VariableCostImpl;
|
||||
import mage.abilities.costs.common.PayVariableLoyaltyCost;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.continuous.AddCardSubTypeTargetEffect;
|
||||
import mage.cards.*;
|
||||
|
|
@ -111,9 +109,7 @@ class AshiokNightmareWeaverPutIntoPlayEffect extends OneShotEffect {
|
|||
return false;
|
||||
}
|
||||
|
||||
int cmc = CardUtil.castStream(
|
||||
source.getCosts().stream(), PayVariableLoyaltyCost.class
|
||||
).mapToInt(VariableCostImpl::getAmount).sum();
|
||||
int cmc = CardUtil.getSourceCostsTag(game, source, "X", 0);
|
||||
|
||||
FilterCard filter = new FilterCreatureCard("creature card with mana value " + cmc);
|
||||
filter.add(new ManaValuePredicate(ComparisonType.EQUAL_TO, cmc));
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
package mage.cards.a;
|
||||
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
import mage.abilities.effects.keyword.AmassEffect;
|
||||
import mage.abilities.keyword.DoubleStrikeAbility;
|
||||
|
|
@ -33,7 +33,7 @@ public final class AssaultOnOsgiliath extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{R}{R}{R}");
|
||||
|
||||
// Amass Orcs X, then Goblins and Orcs you control gain double strike and haste until end of turn.
|
||||
this.getSpellAbility().addEffect(new AmassEffect(ManacostVariableValue.REGULAR, SubType.ORC));
|
||||
this.getSpellAbility().addEffect(new AmassEffect(GetXValue.instance, SubType.ORC));
|
||||
this.getSpellAbility().addEffect(new GainAbilityControlledEffect(
|
||||
DoubleStrikeAbility.getInstance(), Duration.EndOfTurn, filter
|
||||
).setText(", then Goblins and Orcs you control gain double strike"));
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import mage.abilities.costs.VariableCost;
|
|||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.costs.mana.VariableManaCost;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.GainLifeEffect;
|
||||
import mage.abilities.effects.common.PreventDamageToTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -41,7 +41,7 @@ public final class AtalyaSamiteMaster extends CardImpl {
|
|||
this.toughness = new MageInt(3);
|
||||
|
||||
// {X}, {tap}: Choose one - Prevent the next X damage that would be dealt to target creature this turn; or you gain X life. Spend only white mana on X.
|
||||
PreventDamageToTargetEffect effect = new PreventDamageToTargetEffect(Duration.EndOfTurn, false, true, ManacostVariableValue.REGULAR);
|
||||
PreventDamageToTargetEffect effect = new PreventDamageToTargetEffect(Duration.EndOfTurn, false, true, GetXValue.instance);
|
||||
effect.setText("Prevent the next X damage that would be dealt to target creature this turn. Spend only white mana on X.");
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl<>("{X}"));
|
||||
ability.addCost(new TapSourceCost());
|
||||
|
|
@ -54,7 +54,7 @@ public final class AtalyaSamiteMaster extends CardImpl {
|
|||
ability.addTarget(new TargetCreaturePermanent());
|
||||
|
||||
// or you gain X life
|
||||
Mode mode = new Mode(new GainLifeEffect(ManacostVariableValue.REGULAR).setText("You gain X life. Spend only white mana on X."));
|
||||
Mode mode = new Mode(new GainLifeEffect(GetXValue.instance).setText("You gain X life. Spend only white mana on X."));
|
||||
ability.addMode(mode);
|
||||
|
||||
this.addAbility(ability);
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import mage.game.Game;
|
|||
import mage.game.permanent.token.StormCrowToken;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
|
@ -62,7 +63,7 @@ class AttemptedMurderEffect extends OneShotEffect {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player player = game.getPlayer(source.getControllerId());
|
||||
int xValue = source.getManaCostsToPay().getX();
|
||||
int xValue = CardUtil.getSourceCostsTag(game, source, "X", 0);
|
||||
if (player == null || xValue < 1) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ package mage.cards.a;
|
|||
import mage.MageObject;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.ContinuousEffect;
|
||||
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
|
|
@ -61,7 +61,7 @@ public final class AureliasFury extends CardImpl {
|
|||
|
||||
// Aurelia's Fury deals X damage divided as you choose among any number of target creatures and/or players.
|
||||
// Tap each creature dealt damage this way. Players dealt damage this way can't cast noncreature spells this turn.
|
||||
DynamicValue xValue = ManacostVariableValue.REGULAR;
|
||||
DynamicValue xValue = GetXValue.instance;
|
||||
this.getSpellAbility().addEffect(new DamageMultiEffect(xValue));
|
||||
this.getSpellAbility().addEffect(new AureliasFuryEffect());
|
||||
this.getSpellAbility().addTarget(new TargetAnyTargetAmount(xValue));
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
|
||||
package mage.cards.a;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.costs.mana.ManaCosts;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
|
|
@ -14,6 +13,9 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.CardType;
|
||||
import mage.game.Game;
|
||||
import mage.target.common.TargetAnyTargetAmount;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -55,7 +57,7 @@ class AvacynsJudgmentManacostVariableValue implements DynamicValue {
|
|||
if (manaCosts.getVariableCosts().isEmpty()) {
|
||||
return 2;
|
||||
}
|
||||
return sourceAbility.getManaCostsToPay().getX();
|
||||
return CardUtil.getSourceCostsTag(game, sourceAbility, "X", 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
package mage.cards.a;
|
||||
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.DestroyTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -30,7 +30,7 @@ public final class Avalanche extends CardImpl {
|
|||
// Destroy X target snow lands.
|
||||
this.getSpellAbility().addEffect(new DestroyTargetEffect("Destroy X target snow lands"));
|
||||
this.getSpellAbility().addTarget(new TargetPermanent(1, 1, filter, false));
|
||||
this.getSpellAbility().setTargetAdjuster(new TargetsCountAdjuster(ManacostVariableValue.REGULAR));
|
||||
this.getSpellAbility().setTargetAdjuster(new TargetsCountAdjuster(GetXValue.instance));
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
package mage.cards.a;
|
||||
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -18,7 +18,7 @@ public final class AwakenTheWoods extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{G}{G}");
|
||||
|
||||
// Create X 1/1 green Forest Dryad land creature tokens.
|
||||
this.getSpellAbility().addEffect(new CreateTokenEffect(new ForestDryadToken(), ManacostVariableValue.REGULAR));
|
||||
this.getSpellAbility().addEffect(new CreateTokenEffect(new ForestDryadToken(), GetXValue.instance));
|
||||
}
|
||||
|
||||
private AwakenTheWoods(final AwakenTheWoods card) {
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import java.util.UUID;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.ContinuousEffectImpl;
|
||||
import mage.abilities.effects.common.counter.AddCountersAttachedEffect;
|
||||
import mage.constants.*;
|
||||
|
|
@ -38,7 +38,7 @@ public final class AwakenedAwareness extends CardImpl {
|
|||
|
||||
// When Awakened Awareness enters the battlefield, put X +1/+1 counters on enchanted permanent.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new AddCountersAttachedEffect(CounterType.P1P1.createInstance(), ManacostVariableValue.ETB, "enchanted permanent")
|
||||
new AddCountersAttachedEffect(CounterType.P1P1.createInstance(), GetXValue.instance, "enchanted permanent")
|
||||
));
|
||||
|
||||
// As long as enchanted permanent is a creature, it has base power and toughness 1/1.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
package mage.cards.b;
|
||||
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -30,7 +30,7 @@ public final class BackInTown extends CardImpl {
|
|||
this.getSpellAbility().addEffect(new ReturnFromGraveyardToBattlefieldTargetEffect()
|
||||
.setText("return X target outlaw creature cards from your graveyard to the battlefield"));
|
||||
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(filter));
|
||||
this.getSpellAbility().setTargetAdjuster(new TargetsCountAdjuster(ManacostVariableValue.REGULAR));
|
||||
this.getSpellAbility().setTargetAdjuster(new TargetsCountAdjuster(GetXValue.instance));
|
||||
}
|
||||
|
||||
private BackInTown(final BackInTown card) {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package mage.cards.b;
|
|||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.common.delayed.AtTheBeginOfNextUpkeepDelayedTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||
import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
|
|
@ -25,7 +25,7 @@ public final class BalduvianRage extends CardImpl {
|
|||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{X}{R}");
|
||||
|
||||
// Target attacking creature gets +X/+0 until end of turn.
|
||||
this.getSpellAbility().addEffect(new BoostTargetEffect(ManacostVariableValue.REGULAR, StaticValue.get(0), Duration.EndOfTurn));
|
||||
this.getSpellAbility().addEffect(new BoostTargetEffect(GetXValue.instance, StaticValue.get(0), Duration.EndOfTurn));
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent(new FilterAttackingCreature()));
|
||||
|
||||
// Draw a card at the beginning of the next turn's upkeep.
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -30,7 +30,7 @@ public final class BallistaSquad extends CardImpl {
|
|||
this.toughness = new MageInt(2);
|
||||
|
||||
// {X}{W}, {T}: Ballista Squad deals X damage to target attacking or blocking creature.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(ManacostVariableValue.REGULAR), new ManaCostsImpl<>("{X}{W}"));
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(GetXValue.instance), new ManaCostsImpl<>("{X}{W}"));
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addTarget(new TargetAttackingOrBlockingCreature());
|
||||
this.addAbility(ability);
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
package mage.cards.b;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.cards.Card;
|
||||
|
|
@ -21,6 +20,9 @@ import mage.game.permanent.Permanent;
|
|||
import mage.game.stack.Spell;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetAnyTarget;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -90,7 +92,7 @@ class BaneFireEffect extends OneShotEffect {
|
|||
public boolean apply(Game game, Ability source) {
|
||||
Player targetPlayer = game.getPlayer(source.getFirstTarget());
|
||||
Permanent targetCreature = game.getPermanent(source.getFirstTarget());
|
||||
int damage = source.getManaCostsToPay().getX();
|
||||
int damage = CardUtil.getSourceCostsTag(game, source, "X", 0);
|
||||
boolean preventable = damage < 5;
|
||||
if (targetPlayer != null) {
|
||||
targetPlayer.damage(damage, source.getSourceId(), source, game, false, preventable);
|
||||
|
|
@ -106,7 +108,7 @@ class BaneFireEffect extends OneShotEffect {
|
|||
|
||||
class BanefireCantCounterEffect extends ContinuousRuleModifyingEffectImpl {
|
||||
|
||||
private Condition condition = new testCondition(ManacostVariableValue.REGULAR, 5);
|
||||
private Condition condition = new testCondition(GetXValue.instance, 5);
|
||||
|
||||
public BanefireCantCounterEffect() {
|
||||
super(Duration.WhileOnStack, Outcome.Benefit);
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import mage.abilities.common.SimpleActivatedAbility;
|
|||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.dynamicvalue.common.HalfValue;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.DamageControllerEffect;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -31,9 +31,9 @@ public final class Banshee extends CardImpl {
|
|||
this.toughness = new MageInt(1);
|
||||
|
||||
// {X}, {T}: Banshee deals half X damage, rounded down, to any target, and half X damage, rounded up, to you.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(new HalfValue(ManacostVariableValue.REGULAR, false)).setText("Banshee deals half X damage, rounded down, to any target,"), new ManaCostsImpl<>("{X}"));
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(new HalfValue(GetXValue.instance, false)).setText("Banshee deals half X damage, rounded down, to any target,"), new ManaCostsImpl<>("{X}"));
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addEffect(new DamageControllerEffect(new HalfValue(ManacostVariableValue.REGULAR, true)).setText(" and half X damage, rounded up, to you"));
|
||||
ability.addEffect(new DamageControllerEffect(new HalfValue(GetXValue.instance, true)).setText(" and half X damage, rounded up, to you"));
|
||||
ability.addTarget(new TargetAnyTarget());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import mage.abilities.condition.common.MorbidCondition;
|
|||
import mage.abilities.condition.common.YouControlPermanentCondition;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.keyword.AmassEffect;
|
||||
import mage.abilities.mana.BlackManaAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -48,7 +48,7 @@ public final class BaradDur extends CardImpl {
|
|||
// {X}{X}{B}, {T}: Amass Orcs X. Activate only if a creature died this turn.
|
||||
Ability ability = new ActivateIfConditionActivatedAbility(
|
||||
Zone.BATTLEFIELD,
|
||||
new AmassEffect(ManacostVariableValue.REGULAR, SubType.ORC, false),
|
||||
new AmassEffect(GetXValue.instance, SubType.ORC, false),
|
||||
new ManaCostsImpl<>("{X}{X}{B}"),
|
||||
MorbidCondition.instance
|
||||
);
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package mage.cards.b;
|
|||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.dynamicvalue.common.SignInversionDynamicValue;
|
||||
import mage.abilities.effects.common.GainLifeEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
|
|
@ -20,7 +20,7 @@ import mage.target.common.TargetCreaturePermanent;
|
|||
*/
|
||||
public final class BattleAtTheBridge extends CardImpl {
|
||||
|
||||
private static final DynamicValue xValue = new SignInversionDynamicValue(ManacostVariableValue.REGULAR);
|
||||
private static final DynamicValue xValue = new SignInversionDynamicValue(GetXValue.instance);
|
||||
|
||||
public BattleAtTheBridge(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{B}");
|
||||
|
|
@ -32,7 +32,7 @@ public final class BattleAtTheBridge extends CardImpl {
|
|||
|
||||
this.getSpellAbility().addEffect(new BoostTargetEffect(xValue, xValue, Duration.EndOfTurn));
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||
this.getSpellAbility().addEffect(new GainLifeEffect(ManacostVariableValue.REGULAR));
|
||||
this.getSpellAbility().addEffect(new GainLifeEffect(GetXValue.instance));
|
||||
}
|
||||
|
||||
private BattleAtTheBridge(final BattleAtTheBridge card) {
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import mage.constants.Outcome;
|
|||
import mage.filter.FilterCard;
|
||||
import mage.game.Game;
|
||||
import mage.target.common.TargetCardWithDifferentNameInLibrary;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -60,7 +61,7 @@ class BeginTheInvasionEffect extends OneShotEffect {
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
int xValue = source.getManaCostsToPay().getX();
|
||||
int xValue = CardUtil.getSourceCostsTag(game, source, "X", 0);
|
||||
return new SearchLibraryPutInPlayEffect(
|
||||
new TargetCardWithDifferentNameInLibrary(0, xValue, filter), false
|
||||
).apply(game, source);
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import mage.abilities.common.SimpleActivatedAbility;
|
|||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.MultipliedValue;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -25,8 +25,8 @@ public final class BelbesArmor extends CardImpl {
|
|||
|
||||
// {X}, {tap}: Target creature gets -X/+X until end of turn.
|
||||
Ability ability = new SimpleActivatedAbility(new BoostTargetEffect(
|
||||
new MultipliedValue(ManacostVariableValue.REGULAR, -1),
|
||||
ManacostVariableValue.REGULAR, Duration.EndOfTurn
|
||||
new MultipliedValue(GetXValue.instance, -1),
|
||||
GetXValue.instance, Duration.EndOfTurn
|
||||
).setText("Target creature gets -X/+X until end of turn"), new ManaCostsImpl<>("{X}"));
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package mage.cards.b;
|
|||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.continuous.SetBasePowerToughnessAllEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -22,7 +22,7 @@ public final class BiomassMutation extends CardImpl {
|
|||
|
||||
|
||||
// Creatures you control have base power and toughness X/X until end of turn.
|
||||
DynamicValue variableMana = ManacostVariableValue.REGULAR;
|
||||
DynamicValue variableMana = GetXValue.instance;
|
||||
this.getSpellAbility().addEffect(new SetBasePowerToughnessAllEffect(variableMana, variableMana, Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import mage.abilities.costs.common.TapSourceCost;
|
|||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.dynamicvalue.IntPlusDynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.CountersSourceCount;
|
||||
import mage.abilities.dynamicvalue.common.RemovedCountersForCostValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.abilities.mana.DynamicManaAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -38,7 +38,7 @@ public final class BlackManaBattery extends CardImpl {
|
|||
// Add {B}, then add an additional {B} for each charge counter removed this way.
|
||||
ability = new DynamicManaAbility(
|
||||
Mana.BlackMana(1),
|
||||
new IntPlusDynamicValue(1, RemovedCountersForCostValue.instance),
|
||||
new IntPlusDynamicValue(1, GetXValue.instance),
|
||||
new TapSourceCost(),
|
||||
"Add {B}, then add {B} for each charge counter removed this way",
|
||||
true, new IntPlusDynamicValue(1, new CountersSourceCount(CounterType.CHARGE)));
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
package mage.cards.b;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.dynamicvalue.common.SignInversionDynamicValue;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
|
|
@ -20,13 +18,16 @@ import mage.players.Player;
|
|||
import mage.target.TargetCard;
|
||||
import mage.target.common.TargetCardInYourGraveyard;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class BlackSunsTwilight extends CardImpl {
|
||||
|
||||
private static final DynamicValue xValue = new SignInversionDynamicValue(ManacostVariableValue.REGULAR);
|
||||
private static final DynamicValue xValue = new SignInversionDynamicValue(GetXValue.instance);
|
||||
|
||||
public BlackSunsTwilight(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{B}");
|
||||
|
|
@ -69,7 +70,7 @@ class BlackSunsTwilightEffect extends OneShotEffect {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player player = game.getPlayer(source.getControllerId());
|
||||
int xValue = source.getManaCostsToPay().getX();
|
||||
int xValue = CardUtil.getSourceCostsTag(game, source, "X", 0);
|
||||
if (player == null || xValue < 5) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
package mage.cards.b;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.ShuffleSpellEffect;
|
||||
|
|
@ -13,6 +12,9 @@ import mage.constants.Outcome;
|
|||
import mage.counters.CounterType;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -51,7 +53,7 @@ class BlackSunsZenithEffect extends OneShotEffect {
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
int amount = source.getManaCostsToPay().getX();
|
||||
int amount = CardUtil.getSourceCostsTag(game, source, "X", 0);
|
||||
for (Permanent permanent : game.getBattlefield().getAllActivePermanents()) {
|
||||
if (permanent != null && permanent.isCreature(game)) {
|
||||
permanent.addCounters(CounterType.M1M1.createInstance(amount), source.getControllerId(), source, game);
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import mage.abilities.costs.common.RemoveVariableCountersSourceCost;
|
|||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.MultipliedValue;
|
||||
import mage.abilities.dynamicvalue.common.RemovedCountersForCostValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
|
|
@ -27,7 +27,7 @@ import mage.filter.StaticFilters;
|
|||
*/
|
||||
public final class BlademaneBaku extends CardImpl {
|
||||
|
||||
private static final DynamicValue xValue = new MultipliedValue(RemovedCountersForCostValue.instance, 2);
|
||||
private static final DynamicValue xValue = new MultipliedValue(GetXValue.instance, 2);
|
||||
|
||||
public BlademaneBaku(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}");
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import mage.abilities.costs.common.SacrificeSourceCost;
|
|||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.DestroyAllEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
|
|
@ -46,7 +46,7 @@ public final class BlastZone extends CardImpl {
|
|||
|
||||
// {X}{X}, {T}: Put X charge counters on Blast Zone.
|
||||
Ability ability = new SimpleActivatedAbility(new AddCountersSourceEffect(
|
||||
CounterType.CHARGE.createInstance(), ManacostVariableValue.REGULAR, true
|
||||
CounterType.CHARGE.createInstance(), GetXValue.instance, true
|
||||
), new ManaCostsImpl<>("{X}{X}"));
|
||||
ability.addCost(new TapSourceCost());
|
||||
this.addAbility(ability);
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
package mage.cards.b;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -20,7 +20,7 @@ public final class Blaze extends CardImpl {
|
|||
|
||||
|
||||
// Blaze deals X damage to any target.
|
||||
this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR));
|
||||
this.getSpellAbility().addEffect(new DamageTargetEffect(GetXValue.instance));
|
||||
this.getSpellAbility().addTarget(new TargetAnyTarget());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package mage.cards.b;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.decorator.ConditionalOneShotEffect;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.DestroyAllEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -14,6 +14,7 @@ import mage.filter.common.FilterNonlandPermanent;
|
|||
import mage.filter.predicate.Predicates;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.token.InklingToken;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -33,7 +34,7 @@ public final class BlotOutTheSky extends CardImpl {
|
|||
|
||||
// Create X tapped 2/1 white and black Inkling creature tokens with flying. If X is 6 or more, destroy all noncreature, nonland permanents.
|
||||
this.getSpellAbility().addEffect(new CreateTokenEffect(
|
||||
new InklingToken(), ManacostVariableValue.REGULAR, true, false
|
||||
new InklingToken(), GetXValue.instance, true, false
|
||||
));
|
||||
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
||||
new DestroyAllEffect(filter), BlotOutTheSkyCondition.instance,
|
||||
|
|
@ -56,6 +57,6 @@ enum BlotOutTheSkyCondition implements Condition {
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
return source.getManaCostsToPay().getX() >= 6;
|
||||
return CardUtil.getSourceCostsTag(game, source, "X", 0) >= 6;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import mage.abilities.costs.common.TapSourceCost;
|
|||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.dynamicvalue.IntPlusDynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.CountersSourceCount;
|
||||
import mage.abilities.dynamicvalue.common.RemovedCountersForCostValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.abilities.mana.DynamicManaAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -37,7 +37,7 @@ public final class BlueManaBattery extends CardImpl {
|
|||
// then add an additional {U} for each charge counter removed this way.
|
||||
ability = new DynamicManaAbility(
|
||||
Mana.BlueMana(1),
|
||||
new IntPlusDynamicValue(1, RemovedCountersForCostValue.instance),
|
||||
new IntPlusDynamicValue(1, GetXValue.instance),
|
||||
new TapSourceCost(),
|
||||
"Add {U}, then add {U} for each charge counter removed this way",
|
||||
true, new IntPlusDynamicValue(1, new CountersSourceCount(CounterType.CHARGE)));
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import mage.constants.Duration;
|
|||
import mage.game.Game;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
import mage.target.targetadjustment.XManaValueTargetAdjuster;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -50,6 +51,6 @@ enum BlueSunsTwilightCondition implements Condition {
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
return source.getManaCostsToPay().getX() >= 5;
|
||||
return CardUtil.getSourceCostsTag(game, source, "X", 0) >= 5;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
package mage.cards.b;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.DrawCardTargetEffect;
|
||||
import mage.abilities.effects.common.ShuffleSpellEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -21,7 +21,7 @@ public final class BlueSunsZenith extends CardImpl {
|
|||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{X}{U}{U}{U}");
|
||||
|
||||
// Target player draws X cards. Shuffle Blue Sun's Zenith into its owner's library.
|
||||
this.getSpellAbility().addEffect(new DrawCardTargetEffect(ManacostVariableValue.REGULAR));
|
||||
this.getSpellAbility().addEffect(new DrawCardTargetEffect(GetXValue.instance));
|
||||
this.getSpellAbility().addEffect(ShuffleSpellEffect.getInstance());
|
||||
this.getSpellAbility().addTarget(new TargetPlayer());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ package mage.cards.b;
|
|||
import java.util.UUID;
|
||||
import mage.abilities.costs.common.PayLifeCost;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.LoseLifeOpponentsEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -18,7 +18,7 @@ public final class BondOfAgony extends CardImpl {
|
|||
public BondOfAgony(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{B}");
|
||||
|
||||
DynamicValue xValue = ManacostVariableValue.REGULAR;
|
||||
DynamicValue xValue = GetXValue.instance;
|
||||
|
||||
// As an additional cost to cast Bond of Agony, pay X life.
|
||||
// magenoxx: here we don't use PayVariableLifeCost as {X} shouldn't actually be announced
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import mage.game.Game;
|
|||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetPlayerOrPlaneswalker;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -55,7 +56,7 @@ class BonfireOfTheDamnedEffect extends OneShotEffect {
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
int damage = source.getManaCostsToPay().getX();
|
||||
int damage = CardUtil.getSourceCostsTag(game, source, "X", 0);
|
||||
if (damage < 1) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
package mage.cards.b;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.DamageEverythingEffect;
|
||||
import mage.abilities.keyword.HorsemanshipAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -27,7 +27,7 @@ public final class BorrowingTheEastWind extends CardImpl {
|
|||
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{G}{G}");
|
||||
|
||||
// Borrowing the East Wind deals X damage to each creature with horsemanship and each player.
|
||||
this.getSpellAbility().addEffect(new DamageEverythingEffect(ManacostVariableValue.REGULAR, filter)); }
|
||||
this.getSpellAbility().addEffect(new DamageEverythingEffect(GetXValue.instance, filter)); }
|
||||
|
||||
private BorrowingTheEastWind(final BorrowingTheEastWind card) {
|
||||
super(card);
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import mage.abilities.costs.common.RemoveVariableCountersSourceCost;
|
|||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.decorator.ConditionalOneShotEffect;
|
||||
import mage.abilities.dynamicvalue.common.CountersSourceCount;
|
||||
import mage.abilities.dynamicvalue.common.RemovedCountersForCostValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
|
|
@ -44,7 +44,7 @@ public final class BottomlessVault extends CardImpl {
|
|||
// {tap}, Remove any number of storage counters from Bottomless Vault: Add {B} for each storage counter removed this way.
|
||||
Ability ability = new DynamicManaAbility(
|
||||
Mana.BlackMana(1),
|
||||
RemovedCountersForCostValue.instance,
|
||||
GetXValue.instance,
|
||||
new TapSourceCost(),
|
||||
"Add {B} for each storage counter removed this way",
|
||||
true, new CountersSourceCount(CounterType.STORAGE));
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import mage.abilities.common.SimpleActivatedAbility;
|
|||
import mage.abilities.costs.common.RemoveVariableCountersSourceCost;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.dynamicvalue.common.RemovedCountersForCostValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -112,7 +112,7 @@ class BrainInAJarScryEffect extends OneShotEffect {
|
|||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller != null) {
|
||||
int x = RemovedCountersForCostValue.instance.calculate(game, source, this);
|
||||
int x = GetXValue.instance.calculate(game, source, this);
|
||||
if (x > 0) {
|
||||
return controller.scry(x, source, game);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
package mage.cards.b;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.DrawCardTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -21,7 +21,7 @@ public final class Braingeyser extends CardImpl {
|
|||
|
||||
|
||||
// Target player draws X cards.
|
||||
this.getSpellAbility().addEffect(new DrawCardTargetEffect(ManacostVariableValue.REGULAR));
|
||||
this.getSpellAbility().addEffect(new DrawCardTargetEffect(GetXValue.instance));
|
||||
this.getSpellAbility().addTarget(new TargetPlayer());
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import mage.filter.StaticFilters;
|
|||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetCardInHand;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -62,7 +63,7 @@ class BreakthroughEffect extends OneShotEffect {
|
|||
if (player == null) {
|
||||
return false;
|
||||
}
|
||||
int amountToKeep = source.getManaCostsToPay().getX();
|
||||
int amountToKeep = CardUtil.getSourceCostsTag(game, source, "X", 0);
|
||||
if (amountToKeep == 0) {
|
||||
player.discard(player.getHand(), false, source, game);
|
||||
} else if (amountToKeep < player.getHand().size()) {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package mage.cards.b;
|
|||
import mage.ObjectColor;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -27,7 +27,7 @@ public final class Brightflame extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{R}{R}{W}{W}");
|
||||
|
||||
// Radiance - Brightflame deals X damage to target creature and each other creature that shares a color with it. You gain life equal to the damage dealt this way.
|
||||
this.getSpellAbility().addEffect(new BrightflameEffect(ManacostVariableValue.REGULAR));
|
||||
this.getSpellAbility().addEffect(new BrightflameEffect(GetXValue.instance));
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||
this.getSpellAbility().setAbilityWord(AbilityWord.RADIANCE);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package mage.cards.b;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.ClashEffect;
|
||||
import mage.abilities.effects.common.CounterUnlessPaysEffect;
|
||||
|
|
@ -25,7 +25,7 @@ public final class BrokenAmbitions extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{U}");
|
||||
|
||||
// Counter target spell unless its controller pays {X}. Clash with an opponent. If you win, that spell's controller puts the top four cards of their library into their graveyard.
|
||||
this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(ManacostVariableValue.REGULAR));
|
||||
this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(GetXValue.instance));
|
||||
this.getSpellAbility().addEffect(new BrokenAmbitionsEffect());
|
||||
this.getSpellAbility().addTarget(new TargetSpell());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.ExileUntilSourceLeavesEffect;
|
||||
import mage.abilities.effects.common.GainLifeEffect;
|
||||
|
|
@ -58,7 +58,7 @@ public final class BronzebeakForagers extends CardImpl {
|
|||
new ManaCostsImpl<>("{X}{W}")
|
||||
);
|
||||
dissolveAbility.setTargetAdjuster(BronzebeakForagerDissolveAdjuster.instance);
|
||||
dissolveAbility.addEffect(new GainLifeEffect(ManacostVariableValue.REGULAR));
|
||||
dissolveAbility.addEffect(new GainLifeEffect(GetXValue.instance));
|
||||
this.addAbility(dissolveAbility);
|
||||
}
|
||||
|
||||
|
|
@ -79,7 +79,7 @@ enum BronzebeakForagerDissolveAdjuster implements TargetAdjuster {
|
|||
@Override
|
||||
public void adjustTargets(Ability ability, Game game) {
|
||||
ability.getTargets().clear();
|
||||
int xValue = ability.getManaCostsToPay().getX();
|
||||
int xValue = CardUtil.getSourceCostsTag(game, ability, "X", 0);
|
||||
FilterCard filter = new FilterCard("card with mana value " + xValue);
|
||||
filter.add(new ManaValuePredicate(ComparisonType.EQUAL_TO, xValue));
|
||||
ability.addTarget(new TargetCardInExile(filter, CardUtil.getExileZoneId(game, ability)));
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package mage.cards.b;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.keyword.RavenousAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -37,7 +37,7 @@ public final class Broodlord extends CardImpl {
|
|||
|
||||
// Brood Telepathy -- When Broodlord enters the battlefield, distribute X +1/+1 counters among any number of other target creatures you control.
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new BroodlordEffect());
|
||||
ability.addTarget(new TargetPermanentAmount(ManacostVariableValue.ETB, StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE));
|
||||
ability.addTarget(new TargetPermanentAmount(GetXValue.instance, StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE));
|
||||
this.addAbility(ability.withFlavorWord("Brood Telepathy"));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import mage.game.permanent.Permanent;
|
|||
import mage.players.Player;
|
||||
import mage.target.common.TargetAnyTarget;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -69,7 +70,7 @@ class BurnFromWithinEffect extends OneShotEffect {
|
|||
return false;
|
||||
}
|
||||
|
||||
int amount = source.getManaCostsToPay().getX();
|
||||
int amount = CardUtil.getSourceCostsTag(game, source, "X", 0);
|
||||
|
||||
// Target is a creature
|
||||
Permanent creature = game.getPermanent(getTargetPointer().getFirst(game, source));
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -31,7 +31,7 @@ public final class CabalInterrogator extends CardImpl {
|
|||
// {X}{B}, {tap}: Target player reveals X cards from their hand and you choose one of them. That player discards that card.
|
||||
// Activate only as a sorcery.
|
||||
Ability ability = new ActivateAsSorceryActivatedAbility(
|
||||
new DiscardCardYouChooseTargetEffect(ManacostVariableValue.REGULAR),
|
||||
new DiscardCardYouChooseTargetEffect(GetXValue.instance),
|
||||
new ManaCostsImpl<>("{X}{B}"));
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addTarget(new TargetPlayer());
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import mage.abilities.common.SimpleActivatedAbility;
|
|||
import mage.abilities.costs.common.DiscardCardCost;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -33,7 +33,7 @@ public final class CacklingWitch extends CardImpl {
|
|||
this.toughness = new MageInt(1);
|
||||
|
||||
// {X}{B}, {tap}, Discard a card: Target creature gets +X/+0 until end of turn.
|
||||
ManacostVariableValue manaX = ManacostVariableValue.REGULAR;
|
||||
GetXValue manaX = GetXValue.instance;
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
||||
new BoostTargetEffect(manaX, StaticValue.get(0), Duration.EndOfTurn),
|
||||
new ManaCostsImpl<>("{X}{B}"));
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import mage.abilities.costs.common.RemoveVariableCountersSourceCost;
|
|||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.dynamicvalue.common.CountersSourceCount;
|
||||
import mage.abilities.dynamicvalue.common.RemovedCountersForCostValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.abilities.effects.mana.AddManaInAnyCombinationEffect;
|
||||
import mage.abilities.mana.ColorlessManaAbility;
|
||||
|
|
@ -36,7 +36,7 @@ public final class CalciformPools extends CardImpl {
|
|||
this.addAbility(ability);
|
||||
// {1}, Remove X storage counters from Calciform Pools: Add X mana in any combination of {W} and/or {U}.
|
||||
ability = new SimpleManaAbility(Zone.BATTLEFIELD,
|
||||
new AddManaInAnyCombinationEffect(RemovedCountersForCostValue.instance,
|
||||
new AddManaInAnyCombinationEffect(GetXValue.instance,
|
||||
new CountersSourceCount(CounterType.STORAGE), ColoredManaSymbol.W, ColoredManaSymbol.U),
|
||||
new GenericManaCost(1));
|
||||
ability.addCost(new RemoveVariableCountersSourceCost(CounterType.STORAGE));
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package mage.cards.c;
|
|||
|
||||
import mage.MageObjectReference;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.RedirectionEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -73,7 +73,7 @@ class CaptainsManeuverEffect extends RedirectionEffect {
|
|||
@Override
|
||||
public void init(Ability source, Game game) {
|
||||
super.init(source, game);
|
||||
amountToRedirect = ManacostVariableValue.REGULAR.calculate(game, source, this);
|
||||
amountToRedirect = GetXValue.instance.calculate(game, source, this);
|
||||
redirectToObject = new MageObjectReference(source.getTargets().get(1).getFirstTarget(), game);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package mage.cards.c;
|
|||
import mage.MageObject;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.DamageAllEffect;
|
||||
|
|
@ -40,7 +40,7 @@ public final class CataclysmicProspecting extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{R}{R}");
|
||||
|
||||
// Cataclysmic Prospecting deals X damage to each creature. For each mana from a Desert spent to cast this spell, create a tapped Treasure token.
|
||||
this.getSpellAbility().addEffect(new DamageAllEffect(ManacostVariableValue.REGULAR, StaticFilters.FILTER_PERMANENT_CREATURE));
|
||||
this.getSpellAbility().addEffect(new DamageAllEffect(GetXValue.instance, StaticFilters.FILTER_PERMANENT_CREATURE));
|
||||
this.getSpellAbility().addEffect(new CreateTokenEffect(new TreasureToken(), CataclysmicProspectingValue.instance, true, false)
|
||||
.setText("For each mana from a Desert spent to cast this spell, create a tapped Treasure token."));
|
||||
this.getSpellAbility().addWatcher(new CataclysmicProspectingWatcher());
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import mage.abilities.costs.common.RemoveCountersSourceCost;
|
|||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.common.ColorsOfManaSpentToCastCount;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
|
|
@ -25,6 +25,7 @@ import mage.counters.CounterType;
|
|||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.common.TargetAnyTarget;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -45,7 +46,7 @@ public final class ChamberSentry extends CardImpl {
|
|||
"with a +1/+1 counter on it for each color of mana spent to cast it"));
|
||||
|
||||
// {X}, {T}, Remove X +1/+1 counters from Chamber Sentry: It deals X damage to any target.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(ManacostVariableValue.REGULAR)
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(GetXValue.instance)
|
||||
.setText("It deals X damage to any target"),
|
||||
new ManaCostsImpl<>("{X}"));
|
||||
ability.addCost(new TapSourceCost());
|
||||
|
|
@ -128,6 +129,6 @@ class ChamberSentryRemoveVariableCountersSourceCost extends VariableCostImpl {
|
|||
|
||||
@Override
|
||||
public int announceXValue(Ability source, Game game) {
|
||||
return source.getManaCostsToPay().getX();
|
||||
return CardUtil.getSourceCostsTag(game, source, "X", 0);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package mage.cards.c;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.LoyaltyAbility;
|
||||
import mage.abilities.common.CantBeCounteredSourceAbility;
|
||||
import mage.abilities.dynamicvalue.common.GetXLoyaltyValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.DamageAllEffect;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
|
|
@ -51,7 +51,7 @@ public final class ChandraAwakenedInferno extends CardImpl {
|
|||
this.addAbility(new LoyaltyAbility(new DamageAllEffect(3, filter), -3));
|
||||
|
||||
// -X: Chandra, Awakened Inferno deals X damage to target creature or planeswalker. If a permanent dealt damage this way would die this turn, exile it instead.
|
||||
Ability ability = new LoyaltyAbility(new DamageTargetEffect(GetXLoyaltyValue.instance));
|
||||
Ability ability = new LoyaltyAbility(new DamageTargetEffect(GetXValue.instance));
|
||||
ability.addEffect(
|
||||
new ExileTargetIfDiesEffect()
|
||||
.setText("If a permanent dealt damage this way would die this turn, exile it instead.")
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package mage.cards.c;
|
|||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.LoyaltyAbility;
|
||||
import mage.abilities.dynamicvalue.common.GetXLoyaltyValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.DamageAllEffect;
|
||||
|
|
@ -39,7 +39,7 @@ public final class ChandraFlamecaller extends CardImpl {
|
|||
|
||||
// -X: Chandra, Flamecaller deals X damage to each creature.
|
||||
this.addAbility(new LoyaltyAbility(new DamageAllEffect(
|
||||
GetXLoyaltyValue.instance, StaticFilters.FILTER_PERMANENT_CREATURE
|
||||
GetXValue.instance, StaticFilters.FILTER_PERMANENT_CREATURE
|
||||
)));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import mage.MageObjectReference;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.LoyaltyAbility;
|
||||
import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.common.GetXLoyaltyValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.AsThoughEffectImpl;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.CopyTargetStackObjectEffect;
|
||||
|
|
@ -52,7 +52,7 @@ public class ChandraHopesBeacon extends CardImpl {
|
|||
|
||||
//−X: Chandra, Hope’s Beacon deals X damage to each of up to two targets.
|
||||
LoyaltyAbility loyaltyAbility = new LoyaltyAbility(new DamageTargetEffect(
|
||||
GetXLoyaltyValue.instance, true, "each of up to two targets"
|
||||
GetXValue.instance, true, "each of up to two targets"
|
||||
));
|
||||
loyaltyAbility.addTarget(new TargetAnyTarget(0, 2));
|
||||
this.addAbility(loyaltyAbility);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import mage.abilities.LoyaltyAbility;
|
||||
import mage.abilities.dynamicvalue.common.GetXLoyaltyValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.DamageAllControlledTargetEffect;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -9,7 +9,6 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
import mage.target.common.TargetPlayerOrPlaneswalker;
|
||||
|
||||
|
|
@ -33,7 +32,7 @@ public final class ChandraNalaar extends CardImpl {
|
|||
this.addAbility(ability1);
|
||||
|
||||
// -X: Chandra Nalaar deals X damage to target creature.
|
||||
LoyaltyAbility ability2 = new LoyaltyAbility(new DamageTargetEffect(GetXLoyaltyValue.instance));
|
||||
LoyaltyAbility ability2 = new LoyaltyAbility(new DamageTargetEffect(GetXValue.instance));
|
||||
ability2.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability2);
|
||||
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.*;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -74,7 +75,7 @@ class ChimericCoilsEffect extends ContinuousEffectImpl {
|
|||
break;
|
||||
case PTChangingEffects_7:
|
||||
if (sublayer == SubLayer.SetPT_7b) {
|
||||
int xValue = source.getManaCostsToPay().getX();
|
||||
int xValue = CardUtil.getSourceCostsTag(game, source, "X", 0);
|
||||
permanent.getPower().setModifiedBaseValue(xValue);
|
||||
permanent.getToughness().setModifiedBaseValue(xValue);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.*;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -69,7 +70,7 @@ class ChimericStaffEffect extends ContinuousEffectImpl {
|
|||
break;
|
||||
case PTChangingEffects_7:
|
||||
if (sublayer == SubLayer.SetPT_7b) {
|
||||
int xValue = source.getManaCostsToPay().getX();
|
||||
int xValue = CardUtil.getSourceCostsTag(game, source, "X", 0);
|
||||
permanent.getPower().setModifiedBaseValue(xValue);
|
||||
permanent.getToughness().setModifiedBaseValue(xValue);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import mage.abilities.common.SimpleActivatedAbility;
|
|||
import mage.abilities.costs.common.SacrificeSourceCost;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -31,7 +31,7 @@ public final class CinderElemental extends CardImpl {
|
|||
this.toughness = new MageInt(2);
|
||||
|
||||
// {X}{R}, {tap}, Sacrifice Cinder Elemental: Cinder Elemental deals X damage to any target.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(ManacostVariableValue.REGULAR, "it"), new ManaCostsImpl<>("{X}{R}"));
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(GetXValue.instance, "it"), new ManaCostsImpl<>("{X}{R}"));
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addCost(new SacrificeSourceCost());
|
||||
ability.addTarget(new TargetAnyTarget());
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ import mage.filter.predicate.mageobject.ManaValuePredicate;
|
|||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetCardInLibrary;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -73,7 +74,7 @@ class CitanulFluteSearchEffect extends OneShotEffect {
|
|||
|
||||
FilterCard filter = new FilterCreatureCard("creature card with mana value X or less");
|
||||
//Set the mana cost one higher to 'emulate' a less than or equal to comparison.
|
||||
filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, source.getManaCostsToPay().getX() + 1));
|
||||
filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, CardUtil.getSourceCostsTag(game, source, "X", 0) + 1));
|
||||
|
||||
TargetCardInLibrary target = new TargetCardInLibrary(filter);
|
||||
player.searchLibrary(target, source, game);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -35,14 +35,14 @@ public final class ClanDefiance extends CardImpl {
|
|||
this.getSpellAbility().getModes().setMinModes(1);
|
||||
this.getSpellAbility().getModes().setMaxModes(3);
|
||||
// Clan Defiance deals X damage to target creature with flying;
|
||||
this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR));
|
||||
this.getSpellAbility().addEffect(new DamageTargetEffect(GetXValue.instance));
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent(filterFlying).withChooseHint("deals X damage, with flying"));
|
||||
// Clan Defiance deals X damage to target creature without flying;
|
||||
Mode mode1 = new Mode(new DamageTargetEffect(ManacostVariableValue.REGULAR));
|
||||
Mode mode1 = new Mode(new DamageTargetEffect(GetXValue.instance));
|
||||
mode1.addTarget(new TargetCreaturePermanent(filterWithoutFlying).withChooseHint("deals X damage, without flying"));
|
||||
this.getSpellAbility().addMode(mode1);
|
||||
// and/or Clan Defiance deals X damage to target player.
|
||||
Mode mode2 = new Mode(new DamageTargetEffect(ManacostVariableValue.REGULAR));
|
||||
Mode mode2 = new Mode(new DamageTargetEffect(GetXValue.instance));
|
||||
mode2.addTarget(new TargetPlayerOrPlaneswalker().withChooseHint("deals X damage"));
|
||||
this.getSpellAbility().addMode(mode2);
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.CounterUnlessPaysEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -19,7 +19,7 @@ public final class ClashOfWills extends CardImpl {
|
|||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{X}{U}");
|
||||
|
||||
// Counter target spell unless its controller pays {X}.
|
||||
this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(ManacostVariableValue.REGULAR));
|
||||
this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(GetXValue.instance));
|
||||
this.getSpellAbility().addTarget(new TargetSpell());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import mage.counters.CounterType;
|
|||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.util.CardUtil;
|
||||
import mage.watchers.common.AttackedOrBlockedThisCombatWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -97,7 +98,7 @@ class ClockworkAvianEffect extends OneShotEffect {
|
|||
return false;
|
||||
}
|
||||
int maxCounters = Integer.min(
|
||||
4 - permanent.getCounters(game).getCount(CounterType.P1P0), source.getManaCostsToPay().getX()
|
||||
4 - permanent.getCounters(game).getCount(CounterType.P1P0), CardUtil.getSourceCostsTag(game, source, "X", 0)
|
||||
);
|
||||
if (maxCounters < 1) {
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import mage.counters.CounterType;
|
|||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.util.CardUtil;
|
||||
import mage.watchers.common.AttackedOrBlockedThisCombatWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -94,7 +95,7 @@ class ClockworkBeastEffect extends OneShotEffect {
|
|||
return false;
|
||||
}
|
||||
int maxCounters = Integer.min(
|
||||
7 - permanent.getCounters(game).getCount(CounterType.P1P0), source.getManaCostsToPay().getX()
|
||||
7 - permanent.getCounters(game).getCount(CounterType.P1P0), CardUtil.getSourceCostsTag(game, source, "X", 0)
|
||||
);
|
||||
if (maxCounters < 1) {
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import mage.filter.common.FilterCreaturePermanent;
|
|||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.util.CardUtil;
|
||||
import mage.watchers.common.AttackedOrBlockedThisCombatWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -102,7 +103,7 @@ class ClockworkSteedEffect extends OneShotEffect {
|
|||
return false;
|
||||
}
|
||||
int maxCounters = Integer.min(
|
||||
4 - permanent.getCounters(game).getCount(CounterType.P1P0), source.getManaCostsToPay().getX()
|
||||
4 - permanent.getCounters(game).getCount(CounterType.P1P0), CardUtil.getSourceCostsTag(game, source, "X", 0)
|
||||
);
|
||||
if (maxCounters < 1) {
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import mage.filter.common.FilterCreaturePermanent;
|
|||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.util.CardUtil;
|
||||
import mage.watchers.common.AttackedOrBlockedThisCombatWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -106,7 +107,7 @@ class ClockworkSwarmEffect extends OneShotEffect {
|
|||
return false;
|
||||
}
|
||||
int maxCounters = Integer.min(
|
||||
4 - permanent.getCounters(game).getCount(CounterType.P1P0), source.getManaCostsToPay().getX()
|
||||
4 - permanent.getCounters(game).getCount(CounterType.P1P0), CardUtil.getSourceCostsTag(game, source, "X", 0)
|
||||
);
|
||||
if (maxCounters < 1) {
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package mage.cards.c;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.keyword.CrewAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -72,7 +72,7 @@ class ClownCarEffect extends OneShotEffect {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player player = game.getPlayer(source.getControllerId());
|
||||
int xValue = ManacostVariableValue.ETB.calculate(game, source, this);
|
||||
int xValue = GetXValue.instance.calculate(game, source, this);
|
||||
if (player == null || xValue < 1) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ import mage.game.permanent.Permanent;
|
|||
import mage.players.Player;
|
||||
import mage.target.common.TargetAnyTarget;
|
||||
import mage.target.targetadjustment.TargetsCountAdjuster;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -58,7 +59,7 @@ class CometStormEffect extends OneShotEffect {
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
int damage = source.getManaCostsToPay().getX();
|
||||
int damage = CardUtil.getSourceCostsTag(game, source, "X", 0);
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller != null) {
|
||||
for (UUID uuid : this.getTargetPointer().getTargets(game, source)) {
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import mage.constants.Outcome;
|
|||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetPlayer;
|
||||
import mage.util.CardUtil;
|
||||
import mage.watchers.common.CommanderPlaysCountWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -94,7 +95,7 @@ class CommandersInsightEffect extends OneShotEffect {
|
|||
if (player == null || watcher == null) {
|
||||
return false;
|
||||
}
|
||||
int toDraw = watcher.getPlayerCount(player.getId()) + source.getManaCostsToPay().getX();
|
||||
int toDraw = watcher.getPlayerCount(player.getId()) + CardUtil.getSourceCostsTag(game, source, "X", 0);
|
||||
return player.drawCards(toDraw, source, game) > 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ class CommuneWithLavaEffect extends OneShotEffect {
|
|||
Player controller = game.getPlayer(source.getControllerId());
|
||||
Card sourceCard = game.getCard(source.getSourceId());
|
||||
if (controller != null && sourceCard != null) {
|
||||
int amount = source.getManaCostsToPay().getX();
|
||||
int amount = CardUtil.getSourceCostsTag(game, source, "X", 0);
|
||||
Set<Card> cards = controller.getLibrary().getTopCards(game, amount);
|
||||
controller.moveCardsToExile(cards, source, game, true, CardUtil.getCardExileZoneId(game, source), sourceCard.getIdName());
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.CounterUnlessPaysEffect;
|
||||
import mage.abilities.effects.keyword.ScryEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -21,7 +21,7 @@ public final class Condescend extends CardImpl {
|
|||
|
||||
|
||||
// Counter target spell unless its controller pays {X}.
|
||||
this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(ManacostVariableValue.REGULAR));
|
||||
this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(GetXValue.instance));
|
||||
this.getSpellAbility().addTarget(new TargetSpell());
|
||||
// Scry 2.
|
||||
this.getSpellAbility().addEffect(new ScryEffect(2));
|
||||
|
|
|
|||
|
|
@ -1,21 +1,19 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.costs.Cost;
|
||||
import mage.abilities.costs.common.DiscardXTargetCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.DamageMultiEffect;
|
||||
import mage.abilities.keyword.FlashbackAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.target.common.TargetAnyTargetAmount;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
|
|
@ -26,9 +24,8 @@ public final class Conflagrate extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{X}{R}");
|
||||
|
||||
// Conflagrate deals X damage divided as you choose among any number of targets.
|
||||
DynamicValue xValue = new ConflagrateVariableValue();
|
||||
this.getSpellAbility().addEffect(new DamageMultiEffect(xValue));
|
||||
this.getSpellAbility().addTarget(new TargetAnyTargetAmount(xValue));
|
||||
this.getSpellAbility().addEffect(new DamageMultiEffect(GetXValue.instance));
|
||||
this.getSpellAbility().addTarget(new TargetAnyTargetAmount(GetXValue.instance));
|
||||
|
||||
// Flashback-{R}{R}, Discard X cards.
|
||||
Ability ability = new FlashbackAbility(this, new ManaCostsImpl<>("{R}{R}"));
|
||||
|
|
@ -46,32 +43,3 @@ public final class Conflagrate extends CardImpl {
|
|||
return new Conflagrate(this);
|
||||
}
|
||||
}
|
||||
|
||||
class ConflagrateVariableValue implements DynamicValue {
|
||||
|
||||
@Override
|
||||
public int calculate(Game game, Ability sourceAbility, Effect effect) {
|
||||
int xValue = sourceAbility.getManaCostsToPay().getX();
|
||||
for (Cost cost : sourceAbility.getCosts()) {
|
||||
if (cost instanceof DiscardXTargetCost) {
|
||||
xValue = ((DiscardXTargetCost) cost).getAmount();
|
||||
}
|
||||
}
|
||||
return xValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConflagrateVariableValue copy() {
|
||||
return new ConflagrateVariableValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "X";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ import mage.game.permanent.Permanent;
|
|||
import mage.target.common.TargetCardInYourGraveyard;
|
||||
import mage.target.common.TargetPlaneswalkerPermanent;
|
||||
import mage.target.targetadjustment.TargetAdjuster;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -65,7 +66,7 @@ enum ConfrontThePastAdjuster implements TargetAdjuster {
|
|||
public void adjustTargets(Ability ability, Game game) {
|
||||
if (ability.getEffects().size() == 1
|
||||
&& ability.getEffects().get(0) instanceof ReturnFromGraveyardToBattlefieldTargetEffect) {
|
||||
int xValue = ability.getManaCostsToPay().getX();
|
||||
int xValue = CardUtil.getSourceCostsTag(game, ability, "X", 0);
|
||||
ability.getTargets().clear();
|
||||
FilterPermanentCard filter = new FilterPermanentCard("planeswalker card with mana value X or less");
|
||||
filter.add(CardType.PLANESWALKER.getPredicate());
|
||||
|
|
@ -93,7 +94,7 @@ class ConfrontThePastLoyaltyEffect extends OneShotEffect {
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
int xValue = source.getManaCostsToPay().getX();
|
||||
int xValue = CardUtil.getSourceCostsTag(game, source, "X", 0);
|
||||
Permanent target = game.getPermanent(source.getFirstTarget());
|
||||
target.removeCounters(CounterType.LOYALTY.createInstance(xValue * 2), source, game);
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ package mage.cards.c;
|
|||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.VariableCost;
|
||||
import mage.abilities.costs.mana.VariableManaCost;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.effects.common.GainLifeEffect;
|
||||
import mage.abilities.effects.common.InfoEffect;
|
||||
|
|
@ -38,8 +38,8 @@ public final class ConsumeSpirit extends CardImpl {
|
|||
|
||||
// Consume Spirit deals X damage to any target and you gain X life.
|
||||
this.getSpellAbility().addTarget(new TargetAnyTarget());
|
||||
this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR));
|
||||
this.getSpellAbility().addEffect(new GainLifeEffect(ManacostVariableValue.REGULAR).concatBy("and"));
|
||||
this.getSpellAbility().addEffect(new DamageTargetEffect(GetXValue.instance));
|
||||
this.getSpellAbility().addEffect(new GainLifeEffect(GetXValue.instance).concatBy("and"));
|
||||
VariableCost variableCost = this.getSpellAbility().getManaCostsToPay().getVariableCosts().get(0);
|
||||
if (variableCost instanceof VariableManaCost) {
|
||||
((VariableManaCost) variableCost).setFilter(filterBlack);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import mage.abilities.dynamicvalue.common.HalfValue;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersPlayersEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -21,9 +21,9 @@ public final class ContaminatedDrink extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{U}{B}");
|
||||
|
||||
// Draw X cards, then you get half X rad counters, rounded up.
|
||||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(ManacostVariableValue.REGULAR));
|
||||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(GetXValue.instance));
|
||||
this.getSpellAbility().addEffect(new AddCountersPlayersEffect(
|
||||
CounterType.RAD.createInstance(), new HalfValue(ManacostVariableValue.REGULAR, true), TargetController.YOU
|
||||
CounterType.RAD.createInstance(), new HalfValue(GetXValue.instance, true), TargetController.YOU
|
||||
).setText(", then you get half X rad counters, rounded up"));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.DamageAllEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -27,7 +27,7 @@ public final class CorrosiveGale extends CardImpl {
|
|||
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{X}{G/P}");
|
||||
|
||||
|
||||
this.getSpellAbility().addEffect(new DamageAllEffect(ManacostVariableValue.REGULAR, filter));
|
||||
this.getSpellAbility().addEffect(new DamageAllEffect(GetXValue.instance, filter));
|
||||
}
|
||||
|
||||
private CorrosiveGale(final CorrosiveGale card) {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package mage.cards.c;
|
|||
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.MultipliedValue;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -17,7 +17,7 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class CrackleWithPower extends CardImpl {
|
||||
|
||||
private static final DynamicValue value = new MultipliedValue(ManacostVariableValue.REGULAR, 5);
|
||||
private static final DynamicValue value = new MultipliedValue(GetXValue.instance, 5);
|
||||
|
||||
public CrackleWithPower(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{X}{X}{R}{R}");
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package mage.cards.c;
|
|||
import mage.abilities.condition.common.FerociousCondition;
|
||||
import mage.abilities.decorator.ConditionalOneShotEffect;
|
||||
import mage.abilities.dynamicvalue.IntPlusDynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.hint.common.FerociousHint;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -24,8 +24,8 @@ public final class CratersClaws extends CardImpl {
|
|||
// Crater's Claws deals X damage to any target.
|
||||
// <i>Ferocious</i> — Crater's Claws deals X plus 2 damage to that creature or player instead if you control a creature with power 4 or greater.
|
||||
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
||||
new DamageTargetEffect(new IntPlusDynamicValue(2, ManacostVariableValue.REGULAR)),
|
||||
new DamageTargetEffect(ManacostVariableValue.REGULAR),
|
||||
new DamageTargetEffect(new IntPlusDynamicValue(2, GetXValue.instance)),
|
||||
new DamageTargetEffect(GetXValue.instance),
|
||||
FerociousCondition.instance,
|
||||
"{this} deals X damage to any target."
|
||||
+ "<br><i>Ferocious</i> — {this} deals X plus 2 damage instead if you control a creature with power 4 or greater"));
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
|
||||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect;
|
||||
|
|
@ -15,6 +14,9 @@ import mage.filter.predicate.Predicates;
|
|||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.common.TargetCardInOpponentsGraveyard;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public final class CrimePunishment extends SplitCard {
|
||||
|
||||
|
|
@ -69,7 +71,7 @@ class PunishmentEffect extends OneShotEffect {
|
|||
public boolean apply(Game game, Ability source) {
|
||||
for (Permanent permanent : game.getBattlefield().getActivePermanents(source.getControllerId(), game)) {
|
||||
if (permanent != null
|
||||
&& permanent.getManaValue() == source.getManaCostsToPay().getX()
|
||||
&& permanent.getManaValue() == CardUtil.getSourceCostsTag(game, source, "X", 0)
|
||||
&& (permanent.isArtifact(game)
|
||||
|| permanent.isCreature(game)
|
||||
|| permanent.isEnchantment(game))) {
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import mage.abilities.costs.VariableCost;
|
|||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.costs.mana.VariableManaCost;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
|
|
@ -43,7 +43,7 @@ public final class CrimsonHellkite extends CardImpl {
|
|||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
// {X}, {tap}: Crimson Hellkite deals X damage to target creature. Spend only red mana on X.
|
||||
Effect effect = new DamageTargetEffect(ManacostVariableValue.REGULAR);
|
||||
Effect effect = new DamageTargetEffect(GetXValue.instance);
|
||||
effect.setText("{this} deals X damage to target creature. Spend only red mana on X");
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl<>("{X}"));
|
||||
ability.addCost(new TapSourceCost());
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import mage.abilities.costs.common.RemoveVariableCountersSourceCost;
|
|||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.dynamicvalue.common.CountersSourceCount;
|
||||
import mage.abilities.dynamicvalue.common.RemovedCountersForCostValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.abilities.mana.ColorlessManaAbility;
|
||||
import mage.abilities.mana.ConditionalAnyColorManaAbility;
|
||||
|
|
@ -44,7 +44,7 @@ public final class CrucibleOfTheSpiritDragon extends CardImpl {
|
|||
// {T}, Remove X storage counters from Crucible of the Spirit Dragon: Add X mana in any combination of colors. Spend this mana only to cast Dragon spells or activate abilities of Dragons.
|
||||
ability = new ConditionalAnyColorManaAbility(
|
||||
new TapSourceCost(),
|
||||
RemovedCountersForCostValue.instance,
|
||||
GetXValue.instance,
|
||||
new CountersSourceCount(CounterType.STORAGE),
|
||||
new CrucibleOfTheSpiritDragonManaBuilder(),
|
||||
false
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import mage.abilities.costs.common.RemoveVariableCountersSourceCost;
|
|||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ColoredManaCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.common.RemovedCountersForCostValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -45,7 +45,7 @@ public final class CruelSadist extends CardImpl {
|
|||
|
||||
// {2}{B}, {T}, Remove X +1/+1 counters from Cruel Sadist: Cruel Sadist deals X damage to target creature.
|
||||
ability = new SimpleActivatedAbility(
|
||||
new DamageTargetEffect(RemovedCountersForCostValue.instance, "it"), new ManaCostsImpl<>("{2}{B}")
|
||||
new DamageTargetEffect(GetXValue.instance, "it"), new ManaCostsImpl<>("{2}{B}")
|
||||
);
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addCost(new RemoveVariableCountersSourceCost(CounterType.P1P1));
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import mage.abilities.common.SimpleActivatedAbility;
|
|||
import mage.abilities.costs.VariableCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.costs.mana.VariableManaCost;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.DamageEverythingEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -38,7 +38,7 @@ public final class CryptRats extends CardImpl {
|
|||
this.toughness = new MageInt(1);
|
||||
|
||||
// {X}: Crypt Rats deals X damage to each creature and each player. Spend only black mana on X.
|
||||
Effect effect = new DamageEverythingEffect(ManacostVariableValue.REGULAR);
|
||||
Effect effect = new DamageEverythingEffect(GetXValue.instance);
|
||||
effect.setText("{this} deals X damage to each creature and each player. Spend only black mana on X");
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect,new ManaCostsImpl<>("{X}"));
|
||||
VariableCost variableCost = ability.getManaCostsToPay().getVariableCosts().get(0);
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ import mage.filter.predicate.mageobject.ColorPredicate;
|
|||
import mage.game.Game;
|
||||
import mage.game.permanent.token.TreasureToken;
|
||||
import mage.players.Player;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -75,7 +76,7 @@ class CulminationOfStudiesEffect extends OneShotEffect {
|
|||
if (player == null) {
|
||||
return false;
|
||||
}
|
||||
Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, source.getManaCostsToPay().getX()));
|
||||
Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, CardUtil.getSourceCostsTag(game, source, "X", 0)));
|
||||
player.moveCards(cards, Zone.EXILED, source, game);
|
||||
cards.removeIf(uuid -> game.getState().getZone(uuid) != Zone.EXILED);
|
||||
int landCards = cards.count(StaticFilters.FILTER_CARD_LAND, game);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
|
||||
import mage.abilities.keyword.CasualtyAbility;
|
||||
|
|
@ -22,8 +22,8 @@ public final class CutOfTheProfits extends CardImpl {
|
|||
this.addAbility(new CasualtyAbility(3));
|
||||
|
||||
// You draw X cards and you lose X life.
|
||||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(ManacostVariableValue.REGULAR, "you"));
|
||||
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(ManacostVariableValue.REGULAR).concatBy("and"));
|
||||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(GetXValue.instance, "you"));
|
||||
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(GetXValue.instance).concatBy("and"));
|
||||
}
|
||||
|
||||
private CutOfTheProfits(final CutOfTheProfits card) {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.effects.common.LoseLifeOpponentsEffect;
|
||||
import mage.abilities.keyword.AftermathAbility;
|
||||
|
|
@ -28,7 +28,7 @@ public final class CutRibbons extends SplitCard {
|
|||
// Ribbons
|
||||
// Each opponent loses X life.
|
||||
getRightHalfCard().addAbility(new AftermathAbility().setRuleAtTheTop(true));
|
||||
getRightHalfCard().getSpellAbility().addEffect(new LoseLifeOpponentsEffect(ManacostVariableValue.REGULAR));
|
||||
getRightHalfCard().getSpellAbility().addEffect(new LoseLifeOpponentsEffect(GetXValue.instance));
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
|
||||
package mage.cards.d;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -11,6 +10,9 @@ import mage.constants.Outcome;
|
|||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetPlayer;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -52,8 +54,8 @@ class DamnablePactEffect extends OneShotEffect {
|
|||
public boolean apply(Game game, Ability source) {
|
||||
Player targetPlayer = game.getPlayer(getTargetPointer().getFirst(game, source));
|
||||
if (targetPlayer != null) {
|
||||
targetPlayer.drawCards(source.getManaCostsToPay().getX(), source, game);
|
||||
targetPlayer.loseLife(source.getManaCostsToPay().getX(), game, source, false);
|
||||
targetPlayer.drawCards(CardUtil.getSourceCostsTag(game, source, "X", 0), source, game);
|
||||
targetPlayer.loseLife(CardUtil.getSourceCostsTag(game, source, "X", 0), game, source, false);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ import mage.target.Target;
|
|||
import mage.target.common.TargetCardInYourGraveyard;
|
||||
import mage.target.targetadjustment.TargetAdjuster;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Objects;
|
||||
|
|
@ -53,7 +54,7 @@ enum DanceOfTheManseAdjuster implements TargetAdjuster {
|
|||
|
||||
@Override
|
||||
public void adjustTargets(Ability ability, Game game) {
|
||||
int xValue = ability.getManaCostsToPay().getX();
|
||||
int xValue = CardUtil.getSourceCostsTag(game, ability, "X", 0);
|
||||
FilterCard filter = new FilterCard("artifact and/or non-Aura enchantment cards " +
|
||||
"each with mana value " + xValue + " or less from your graveyard");
|
||||
filter.add(Predicates.or(
|
||||
|
|
@ -102,7 +103,7 @@ class DanceOfTheManseEffect extends OneShotEffect {
|
|||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toSet()));
|
||||
player.moveCards(cards, Zone.BATTLEFIELD, source, game);
|
||||
if (source.getManaCostsToPay().getX() < 6) {
|
||||
if (CardUtil.getSourceCostsTag(game, source, "X", 0) < 6) {
|
||||
return true;
|
||||
}
|
||||
cards.stream()
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package mage.cards.d;
|
|||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
|
||||
import mage.abilities.dynamicvalue.common.GetXValue;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.CreateTokenTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
|
|
@ -31,7 +31,7 @@ public final class DarkSalvation extends CardImpl {
|
|||
|
||||
// Target player creates X 2/2 black Zombie creature tokens, then up to one target creature gets -1/-1 until end of turn for each Zombie that player controls.
|
||||
this.getSpellAbility().addTarget(new TargetPlayer());
|
||||
this.getSpellAbility().addEffect(new CreateTokenTargetEffect(new ZombieToken(), ManacostVariableValue.REGULAR));
|
||||
this.getSpellAbility().addEffect(new CreateTokenTargetEffect(new ZombieToken(), GetXValue.instance));
|
||||
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 1));
|
||||
Effect effect = new BoostTargetEffect(
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue