diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index 7e9dffbb244..e5b4ba2f211 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -2657,7 +2657,7 @@ public class Card extends GameEntity implements Comparable { } AbilityManaPart am = a.getManaPart(); - if ((am.isBasic() || am.isReflectedMana()) && !res.contains(a)) { + if (am.isBasic() && !res.contains(a)) { res.add(a); } @@ -5973,7 +5973,7 @@ public class Card extends GameEntity implements Comparable { */ public final boolean isReflectedLand() { for (final SpellAbility a : this.getCharacteristics().getManaAbility()) { - if (a.getManaPart().isReflectedMana()) { + if (a.getApi().equals(ApiType.ManaReflected)) { return true; } } diff --git a/src/main/java/forge/CardUtil.java b/src/main/java/forge/CardUtil.java index 3aa0a267db4..8b2b601fd6c 100644 --- a/src/main/java/forge/CardUtil.java +++ b/src/main/java/forge/CardUtil.java @@ -30,6 +30,7 @@ import forge.card.CardCharacteristics; import forge.card.EditionInfo; import forge.card.MagicColor; import forge.card.ability.AbilityUtils; +import forge.card.ability.ApiType; import forge.card.mana.ManaCostBeingPaid; import forge.card.spellability.AbilityManaPart; import forge.card.spellability.SpellAbility; @@ -501,6 +502,10 @@ public final class CardUtil { // so we basically need to have a recursive list that send the parents // so we don't infinite recurse. final Card card = abMana.getSourceCard(); + + if (!abMana.getApi().equals(ApiType.ManaReflected)) { + return colors; + } if (!parents.contains(card)) { parents.add(card); @@ -577,7 +582,7 @@ public final class CardUtil { break; } - if (ab.getManaPart().isReflectedMana()) { + if (ab.getApi().equals(ApiType.ManaReflected)) { if (!parents.contains(ab.getSourceCard())) { // Recursion! reflectAbilities.add(ab); diff --git a/src/main/java/forge/card/ability/effects/ManaReflectedEffect.java b/src/main/java/forge/card/ability/effects/ManaReflectedEffect.java index dce41d2a5b6..fce00e63768 100644 --- a/src/main/java/forge/card/ability/effects/ManaReflectedEffect.java +++ b/src/main/java/forge/card/ability/effects/ManaReflectedEffect.java @@ -83,7 +83,7 @@ public class ManaReflectedEffect extends SpellEffect { } } else { // AI doesn't really have anything here yet - baseMana = MagicColor.toShortString(colors.iterator().next()); + baseMana = sa.getManaPart().getExpressChoice(); } } diff --git a/src/main/java/forge/card/spellability/AbilityManaPart.java b/src/main/java/forge/card/spellability/AbilityManaPart.java index b5ba1364571..a5bd663586a 100644 --- a/src/main/java/forge/card/spellability/AbilityManaPart.java +++ b/src/main/java/forge/card/spellability/AbilityManaPart.java @@ -46,9 +46,6 @@ public class AbilityManaPart implements java.io.Serializable { private String manaRestrictions = ""; private transient ArrayList lastProduced = new ArrayList(); - /** The reflected. */ - private boolean reflected = false; - /** The canceled. */ private boolean canceled = false; @@ -220,18 +217,6 @@ public class AbilityManaPart implements java.io.Serializable { return this.getOrigProduced(); } - /** - *

- * setReflectedMana. - *

- * - * @param bReflect - * a boolean. - */ - public final void setReflectedMana(final boolean bReflect) { - this.reflected = bReflect; - } - /** *

* setAnyChoice. @@ -286,17 +271,6 @@ public class AbilityManaPart implements java.io.Serializable { return this.getSourceCard().isSnow(); } - /** - *

- * isReflectedMana. - *

- * - * @return a boolean. - */ - public final boolean isReflectedMana() { - return this.reflected; - } - /** *

* isAnyMana. diff --git a/src/main/java/forge/control/input/InputPayManaBase.java b/src/main/java/forge/control/input/InputPayManaBase.java index 85acfb7e464..66be84bca17 100644 --- a/src/main/java/forge/control/input/InputPayManaBase.java +++ b/src/main/java/forge/control/input/InputPayManaBase.java @@ -11,6 +11,7 @@ import forge.CardUtil; import forge.Constant; import forge.Singletons; import forge.card.MagicColor; +import forge.card.ability.ApiType; import forge.card.mana.ManaCostBeingPaid; import forge.card.mana.ManaPool; import forge.card.spellability.AbilityManaPart; @@ -68,7 +69,7 @@ public abstract class InputPayManaBase extends Input { if (m.isAnyMana()) { return true; } - if (m.isReflectedMana()) { + if (am.getApi().equals(ApiType.ManaReflected)) { final Iterable reflectableColors = CardUtil.getReflectableManaColors(am, am, new HashSet(), new ArrayList()); for (final String color : reflectableColors) { if (mana.contains(MagicColor.toShortString(color))) { @@ -227,7 +228,7 @@ public abstract class InputPayManaBase extends Input { for (final SpellAbility am : abilities) { AbilityManaPart m = am.getManaPart(); - if (m.isReflectedMana()) { + if (am.getApi().equals(ApiType.ManaReflected)) { final Iterable reflectableColors = CardUtil.getReflectableManaColors(am, am, new HashSet(), new ArrayList()); for (final String color : reflectableColors) { if (manaCost.isColor(color)) { diff --git a/src/main/java/forge/game/GameActionUtil.java b/src/main/java/forge/game/GameActionUtil.java index 2cd728e5535..de509e2c59c 100644 --- a/src/main/java/forge/game/GameActionUtil.java +++ b/src/main/java/forge/game/GameActionUtil.java @@ -36,6 +36,7 @@ import forge.CardPredicates.Presets; import forge.card.SpellManaCost; import forge.card.ability.AbilityFactory; import forge.card.ability.AbilityUtils; +import forge.card.ability.ApiType; import forge.card.cardfactory.CardFactoryUtil; import forge.card.cost.Cost; import forge.card.cost.CostDamage; @@ -1532,6 +1533,9 @@ public final class GameActionUtil { baseMana = "Any"; } } + else if (sa.getApi().equals(ApiType.ManaReflected)) { + baseMana = abMana.getExpressChoice(); + } else { baseMana = abMana.mana(); } diff --git a/src/main/java/forge/game/ai/ComputerUtilMana.java b/src/main/java/forge/game/ai/ComputerUtilMana.java index 010ca20e8d1..67651c14be6 100644 --- a/src/main/java/forge/game/ai/ComputerUtilMana.java +++ b/src/main/java/forge/game/ai/ComputerUtilMana.java @@ -3,6 +3,7 @@ package forge.game.ai; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; @@ -10,10 +11,13 @@ import com.google.common.base.Predicate; import forge.Card; import forge.CardLists; +import forge.CardUtil; +import forge.Constant; import forge.Singletons; import forge.card.MagicColor; import forge.card.SpellManaCost; import forge.card.ability.AbilityUtils; +import forge.card.ability.ApiType; import forge.card.cardfactory.CardFactoryUtil; import forge.card.cost.Cost; import forge.card.cost.CostPayment; @@ -128,7 +132,13 @@ public class ComputerUtilMana { m.setExpressChoice(colorChoice); colorChoice = ComputerUtilMana.getComboManaChoice(ai, ma, sa, cost); m.setExpressChoice(colorChoice); - } + } else if (ma.getApi().equals(ApiType.ManaReflected)) { + if (CardUtil.getReflectableManaColors(ma, ma, new HashSet(), new ArrayList()).contains(MagicColor.toLongString(costParts[nPart]))) { + m.setExpressChoice(costParts[nPart]); + } else { + m.setExpressChoice("0"); + } + } // check if ability produces any color else if (m.isAnyMana()) { String colorChoice = costParts[nPart]; @@ -602,19 +612,24 @@ public class ComputerUtilMana { colorlessSources.add(m); // find possible colors - if (m.getManaPart().canProduce("W")) { + if (m.getManaPart().canProduce("W") + || CardUtil.getReflectableManaColors(m, m, new HashSet(), new ArrayList()).contains(Constant.Color.WHITE)) { whiteSources.add(m); } - if (m.getManaPart().canProduce("U")) { + if (m.getManaPart().canProduce("U") + || CardUtil.getReflectableManaColors(m, m, new HashSet(), new ArrayList()).contains(Constant.Color.BLUE)) { blueSources.add(m); } - if (m.getManaPart().canProduce("B")) { + if (m.getManaPart().canProduce("B") + || CardUtil.getReflectableManaColors(m, m, new HashSet(), new ArrayList()).contains(Constant.Color.BLACK)) { blackSources.add(m); } - if (m.getManaPart().canProduce("R")) { + if (m.getManaPart().canProduce("R") + || CardUtil.getReflectableManaColors(m, m, new HashSet(), new ArrayList()).contains(Constant.Color.RED)) { redSources.add(m); } - if (m.getManaPart().canProduce("G")) { + if (m.getManaPart().canProduce("G") + || CardUtil.getReflectableManaColors(m, m, new HashSet(), new ArrayList()).contains(Constant.Color.GREEN)) { greenSources.add(m); } if (m.getManaPart().isSnow()) {