From a287582026365960dd78113fcd47911c4c7295d2 Mon Sep 17 00:00:00 2001 From: xenohedron Date: Tue, 4 Jul 2023 17:48:56 -0400 Subject: [PATCH] fix Vanish Into Eternity --- .../src/mage/cards/v/VanishIntoEternity.java | 4 +- .../cost/SpellCostIncreaseSourceEffect.java | 102 ++++++++++++++++++ 2 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 Mage/src/main/java/mage/abilities/effects/common/cost/SpellCostIncreaseSourceEffect.java diff --git a/Mage.Sets/src/mage/cards/v/VanishIntoEternity.java b/Mage.Sets/src/mage/cards/v/VanishIntoEternity.java index f4a4c1462ad..57be1a2017e 100644 --- a/Mage.Sets/src/mage/cards/v/VanishIntoEternity.java +++ b/Mage.Sets/src/mage/cards/v/VanishIntoEternity.java @@ -6,7 +6,7 @@ import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.SourceTargetsPermanentCondition; import mage.abilities.effects.common.ExileTargetEffect; -import mage.abilities.effects.common.cost.SpellCostReductionSourceEffect; +import mage.abilities.effects.common.cost.SpellCostIncreaseSourceEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -27,7 +27,7 @@ public final class VanishIntoEternity extends CardImpl { // This spell costs {3} more to cast if it targets a creature. this.addAbility(new SimpleStaticAbility( - Zone.ALL, new SpellCostReductionSourceEffect(3, condition).setCanWorksOnStackOnly(true) + Zone.ALL, new SpellCostIncreaseSourceEffect(3, condition).setCanWorksOnStackOnly(true) ).setRuleAtTheTop(true)); // Exile target nonland permanent. diff --git a/Mage/src/main/java/mage/abilities/effects/common/cost/SpellCostIncreaseSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/cost/SpellCostIncreaseSourceEffect.java new file mode 100644 index 00000000000..7a72c93cf06 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/effects/common/cost/SpellCostIncreaseSourceEffect.java @@ -0,0 +1,102 @@ +package mage.abilities.effects.common.cost; + +import mage.abilities.Ability; +import mage.abilities.SpellAbility; +import mage.abilities.condition.Condition; +import mage.abilities.costs.mana.ManaCost; +import mage.abilities.costs.mana.ManaCosts; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.constants.CostModificationType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.game.Game; +import mage.util.CardUtil; + +/** + * @author LevelX2 + */ +public class SpellCostIncreaseSourceEffect extends CostModificationEffectImpl { + + private final DynamicValue amount; + private ManaCosts manaCostsToIncrease = null; + private Condition condition; + + public SpellCostIncreaseSourceEffect(ManaCosts manaCostsToIncrease) { + this(manaCostsToIncrease, null); + } + + public SpellCostIncreaseSourceEffect(ManaCosts manaCostsToIncrease, Condition condition) { + super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.INCREASE_COST); + this.amount = StaticValue.get(0); + this.manaCostsToIncrease = manaCostsToIncrease; + this.condition = condition; + + StringBuilder sb = new StringBuilder(); + sb.append("this spell costs "); + sb.append(manaCostsToIncrease.getText()); + sb.append(" more to cast"); + if (this.condition != null) { + sb.append(" if ").append(this.condition.toString()); + } + this.staticText = sb.toString(); + } + + public SpellCostIncreaseSourceEffect(int amount) { + this(StaticValue.get(amount), null); + } + + public SpellCostIncreaseSourceEffect(DynamicValue amount) { + this(amount, null); + } + + public SpellCostIncreaseSourceEffect(int amount, Condition condition) { + this(StaticValue.get(amount), condition); + } + + public SpellCostIncreaseSourceEffect(DynamicValue amount, Condition condition) { + super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.REDUCE_COST); + this.amount = amount; + this.condition = condition; + StringBuilder sb = new StringBuilder(); + sb.append("this spell costs {").append(this.amount).append("} more to cast"); + if (this.condition != null) { + sb.append(" ").append(this.condition.toString().startsWith("if ") ? "" : "if "); + sb.append(this.condition.toString()); + } + if (this.amount.toString().equals("X")) { + sb.append(", where X is ").append(this.amount.getMessage()); + } + this.staticText = sb.toString(); + } + + protected SpellCostIncreaseSourceEffect(final SpellCostIncreaseSourceEffect effect) { + super(effect); + this.amount = effect.amount; + this.manaCostsToIncrease = effect.manaCostsToIncrease; + this.condition = effect.condition; + } + + @Override + public boolean apply(Game game, Ability source, Ability abilityToModify) { + if (manaCostsToIncrease != null) { + CardUtil.increaseCost((SpellAbility) abilityToModify, manaCostsToIncrease); + } else { + CardUtil.increaseCost(abilityToModify, this.amount.calculate(game, source, this)); + } + return true; + } + + @Override + public boolean applies(Ability abilityToModify, Ability source, Game game) { + if (abilityToModify.getSourceId().equals(source.getSourceId()) && (abilityToModify instanceof SpellAbility)) { + return condition == null || condition.apply(game, source); + } + return false; + } + + @Override + public SpellCostIncreaseSourceEffect copy() { + return new SpellCostIncreaseSourceEffect(this); + } +}