From ed512d3a1dbd52b53a34c9402a85054540c9e4ea Mon Sep 17 00:00:00 2001 From: spjspj <spjspj4@gmail.com> Date: Wed, 12 Jul 2017 12:40:14 +1000 Subject: [PATCH] Implement Memory Crystal (EXO) --- .../abilities/keyword/BuybackAbility.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/Mage/src/main/java/mage/abilities/keyword/BuybackAbility.java b/Mage/src/main/java/mage/abilities/keyword/BuybackAbility.java index 4f3550804e..4acdd64bbf 100644 --- a/Mage/src/main/java/mage/abilities/keyword/BuybackAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/BuybackAbility.java @@ -28,7 +28,6 @@ package mage.abilities.keyword; import java.util.Iterator; -import java.util.List; import mage.abilities.Ability; import mage.abilities.SpellAbility; import mage.abilities.StaticAbility; @@ -38,7 +37,6 @@ import mage.abilities.costs.OptionalAdditionalCost; import mage.abilities.costs.OptionalAdditionalCostImpl; import mage.abilities.costs.OptionalAdditionalSourceCosts; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.costs.mana.ManaCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.ReplacementEffectImpl; import mage.cards.Card; @@ -98,8 +96,8 @@ public class BuybackAbility extends StaticAbility implements OptionalAdditionalS if (buybackCost != null) { ((Costs) buybackCost).add(cost); } - } - + } + public void resetReduceCost() { amountToReduceBy = 0; } @@ -107,24 +105,29 @@ public class BuybackAbility extends StaticAbility implements OptionalAdditionalS // Called by Memory Crystal to reduce mana costs. public int reduceCost(int genericManaToReduce) { int amountToReduce = genericManaToReduce; + boolean foundCostToReduce = false; if (buybackCost != null) { for (Object cost : ((Costs) buybackCost)) { - if (cost instanceof ManaCostsImpl) { + if (cost instanceof ManaCostsImpl) { for (Object c : (ManaCostsImpl) cost) { - if (c instanceof GenericManaCost) { + if (c instanceof GenericManaCost) { int newCostCMC = ((GenericManaCost) c).convertedManaCost() - amountToReduceBy - genericManaToReduce; + foundCostToReduce = true; if (newCostCMC > 0) { amountToReduceBy += genericManaToReduce; } else { amountToReduce = ((GenericManaCost) c).convertedManaCost() - amountToReduceBy; amountToReduceBy = ((GenericManaCost) c).convertedManaCost(); - } + } } } } } } - return amountToReduce; + if (foundCostToReduce) { + return amountToReduce; + } + return 0; } @Override