diff --git a/src/main/java/forge/card/abilityFactory/AbilityFactory_Mana.java b/src/main/java/forge/card/abilityFactory/AbilityFactory_Mana.java index 0825da8223f..d317d687cc7 100644 --- a/src/main/java/forge/card/abilityFactory/AbilityFactory_Mana.java +++ b/src/main/java/forge/card/abilityFactory/AbilityFactory_Mana.java @@ -411,7 +411,7 @@ public class AbilityFactory_Mana { * @param parents a {@link java.util.ArrayList} object. * @return a {@link java.util.ArrayList} object. */ - private static ArrayList reflectableMana(Ability_Mana abMana, AbilityFactory af, ArrayList colors, ArrayList parents) { + public static ArrayList reflectableMana(Ability_Mana abMana, AbilityFactory af, ArrayList colors, ArrayList parents) { // Here's the problem with reflectable Mana. If more than one is out, they need to Reflect each other, // so we basically need to have a recursive list that send the parents so we don't infinite recurse. HashMap params = af.getMapParams(); diff --git a/src/main/java/forge/gui/input/Input_PayManaCostUtil.java b/src/main/java/forge/gui/input/Input_PayManaCostUtil.java index 427c6f37680..596aa780002 100644 --- a/src/main/java/forge/gui/input/Input_PayManaCostUtil.java +++ b/src/main/java/forge/gui/input/Input_PayManaCostUtil.java @@ -2,7 +2,9 @@ package forge.gui.input; import forge.AllZone; import forge.Card; +import forge.CardUtil; import forge.Constant; +import forge.card.abilityFactory.AbilityFactory_Mana; import forge.card.mana.ManaCost; import forge.card.mana.ManaPool; import forge.card.spellability.Ability_Mana; @@ -76,10 +78,19 @@ public class Input_PayManaCostUtil { ArrayList colorMatches = new ArrayList(); for (Ability_Mana am : abilities) { - String[] m = ManaPool.formatMana(am); - for (String color : m) - if (manaCost.isColor(color)) // convert to long before checking if color - colorMatches.add(am); + if (am.isReflectedMana()){ + ArrayList reflectableColors = AbilityFactory_Mana.reflectableMana(am, am.getAbilityFactory(), new ArrayList(), new ArrayList()); + for (String color : reflectableColors){ + if (manaCost.isColor(color)) // convert to long before checking if color + colorMatches.add(am); + } + } + else{ + String[] m = ManaPool.formatMana(am); + for (String color : m) + if (manaCost.isColor(color)) // convert to long before checking if color + colorMatches.add(am); + } } if (colorMatches.size() == 0 || colorMatches.size() == abilities.size()) @@ -127,15 +138,31 @@ public class Input_PayManaCostUtil { * @return a boolean. */ public static boolean canMake(Ability_Mana am, String mana) { - if (mana.contains("1")) return true; - if (mana.contains("S") && am.isSnow()) return true; - - for (String color : ManaPool.formatMana(am)) - if (mana.contains(color)) return true; + if (mana.contains("1")){ + return true; + } + if (mana.contains("S") && am.isSnow()){ + return true; + } + + if (am.isReflectedMana()){ + ArrayList reflectableColors = AbilityFactory_Mana.reflectableMana(am, am.getAbilityFactory(), new ArrayList(), new ArrayList()); + for (String color : reflectableColors){ + if (mana.contains(getShortColorString(color))){ + return true; + } + } + } + else{ + for (String color : ManaPool.formatMana(am)){ + if (mana.contains(color)){ + return true; + } + } + } return false; } - /** *

getLongColorString.

*