From e7365a8068e7a3ca8df0b87fe7168e0d7330a424 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Wed, 3 Apr 2013 18:54:11 +0000 Subject: [PATCH] bugfix, CostPartMana tried to take color of X into account --- src/main/java/forge/card/cost/CostPartMana.java | 13 +++++++------ src/main/java/forge/card/mana/ManaCost.java | 6 +----- .../java/forge/card/mana/ManaCostBeingPaid.java | 3 ++- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/main/java/forge/card/cost/CostPartMana.java b/src/main/java/forge/card/cost/CostPartMana.java index b90fa4696e6..e6d5717ee8d 100644 --- a/src/main/java/forge/card/cost/CostPartMana.java +++ b/src/main/java/forge/card/cost/CostPartMana.java @@ -19,6 +19,7 @@ package forge.card.cost; import forge.Card; import forge.FThreads; +import forge.card.MagicColor; import forge.card.ability.AbilityUtils; import forge.card.mana.ManaCost; import forge.card.mana.ManaCostBeingPaid; @@ -117,13 +118,13 @@ public class CostPartMana extends CostPart { final Card source = ability.getSourceCard(); ManaCostBeingPaid toPay = new ManaCostBeingPaid(getManaToPay()); - if (this.getAmountOfX() > 0) { + if (this.getAmountOfX() > 0 && !ability.getSVar("X").equals("Count$xPaid")) { // if X cost is a defined value, other than xPaid - if (!ability.getSVar("X").equals("Count$xPaid")) { - // this currently only works for things about Targeted object - int xCost = AbilityUtils.calculateAmount(source, "X", ability) * this.getAmountOfX(); - toPay.increaseColorlessMana(xCost); - } + + // this currently only works for things about Targeted object + int xCost = AbilityUtils.calculateAmount(source, "X", ability) * this.getAmountOfX(); + byte xColor = MagicColor.fromName(ability.hasParam("XColor") ? ability.getParam("XColor") : "1"); + toPay.increaseShard(ManaCostShard.valueOf(xColor), xCost); } diff --git a/src/main/java/forge/card/mana/ManaCost.java b/src/main/java/forge/card/mana/ManaCost.java index cf3f7d7e695..d591db9b9f4 100644 --- a/src/main/java/forge/card/mana/ManaCost.java +++ b/src/main/java/forge/card/mana/ManaCost.java @@ -79,9 +79,6 @@ public final class ManaCost implements Comparable { * the parser */ public ManaCost(final IParserManaCost parser) { - if (!parser.hasNext()) { - throw new RuntimeException("Empty manacost passed to parser (this should have been handled before)"); - } final List shardsTemp = new ArrayList(); this.hasNoCost = false; while (parser.hasNext()) { @@ -90,8 +87,7 @@ public final class ManaCost implements Comparable { shardsTemp.add(shard); } // null is OK - that was generic mana } - this.genericCost = parser.getTotalColorlessCost(); // collect generic - // mana + this.genericCost = parser.getTotalColorlessCost(); // collect generic mana // here sealClass(shardsTemp); } diff --git a/src/main/java/forge/card/mana/ManaCostBeingPaid.java b/src/main/java/forge/card/mana/ManaCostBeingPaid.java index cf68569afcd..2c809203e5d 100644 --- a/src/main/java/forge/card/mana/ManaCostBeingPaid.java +++ b/src/main/java/forge/card/mana/ManaCostBeingPaid.java @@ -85,7 +85,8 @@ public class ManaCostBeingPaid { @Override public int getTotalColorlessCost() { - return unpaidShards.get(ManaCostShard.COLORLESS); + Integer c = unpaidShards.get(ManaCostShard.COLORLESS); + return c == null ? 0 : c.intValue(); } }