diff --git a/forge-game/src/main/java/forge/game/cost/Cost.java b/forge-game/src/main/java/forge/game/cost/Cost.java index 0c5e4d28e61..28f81ab44bf 100644 --- a/forge-game/src/main/java/forge/game/cost/Cost.java +++ b/forge-game/src/main/java/forge/game/cost/Cost.java @@ -866,11 +866,12 @@ public class Cost implements Serializable { String r1 = mPart.getRestiction(); String r = r1 == null ? r2 : ( r2 == null ? r1 : r1 + "." + r2); costParts.remove(costPart2); - if (r == null && (mPart.isExiledCreatureCost() || mPart.isEnchantedCreatureCost())) { + boolean XCantBe0 = !mPart.canXbe0() || !costPart2.canXbe0(); + if (r == null && (mPart.isExiledCreatureCost() || mPart.isEnchantedCreatureCost() || XCantBe0)) { // FIXME: something was amiss when trying to add the cost since the mana cost is either \EnchantedCost or \Exiled but the // restriction no longer marks it as such. Therefore, we need to explicitly copy the ExiledCreatureCost/EnchantedCreatureCost // to make cards like Merseine or Back from the Brink work. - costParts.add(0, new CostPartMana(oldManaCost.toManaCost(), r, mPart.isExiledCreatureCost(), mPart.isEnchantedCreatureCost())); + costParts.add(0, new CostPartMana(oldManaCost.toManaCost(), r, mPart.isExiledCreatureCost(), mPart.isEnchantedCreatureCost(), XCantBe0)); } else { costParts.add(0, new CostPartMana(oldManaCost.toManaCost(), r)); } diff --git a/forge-game/src/main/java/forge/game/cost/CostPartMana.java b/forge-game/src/main/java/forge/game/cost/CostPartMana.java index a4b28f34dee..cdc958d7962 100644 --- a/forge-game/src/main/java/forge/game/cost/CostPartMana.java +++ b/forge-game/src/main/java/forge/game/cost/CostPartMana.java @@ -57,9 +57,9 @@ public class CostPartMana extends CostPart { } // This version of the constructor allows to explicitly set exiledCreatureCost/enchantedCreatureCost, used only when copying costs - public CostPartMana(final ManaCost cost, String restriction, boolean exiledCreatureCost, boolean enchantedCreatureCost) { + public CostPartMana(final ManaCost cost, String restriction, boolean exiledCreatureCost, boolean enchantedCreatureCost, boolean XCantBe0) { this.cost = cost; - this.xCantBe0 = "XCantBe0".equals(restriction); + this.xCantBe0 = XCantBe0; this.isExiledCreatureCost = exiledCreatureCost; this.isEnchantedCreatureCost = enchantedCreatureCost; this.restriction = xCantBe0 || isExiledCreatureCost || isEnchantedCreatureCost? null : restriction;