diff --git a/src/main/java/forge/card/cardfactory/CardFactorySorceries.java b/src/main/java/forge/card/cardfactory/CardFactorySorceries.java index e26f8a6eb38..72d2b6dbd3b 100644 --- a/src/main/java/forge/card/cardfactory/CardFactorySorceries.java +++ b/src/main/java/forge/card/cardfactory/CardFactorySorceries.java @@ -36,6 +36,7 @@ import forge.Constant; import forge.Singletons; import forge.card.CardType; import forge.card.cost.Cost; +import forge.card.mana.ManaCost; import forge.card.spellability.Spell; import forge.card.spellability.SpellAbility; import forge.control.input.InputPayManaExecuteCommands; @@ -460,13 +461,13 @@ public class CardFactorySorceries { if (newCMC <= baseCMC) { game.getAction().moveToPlay(newArtifact[0]); } else { - final String diffCost = String.valueOf(newCMC - baseCMC); - InputPayManaExecuteCommands inp = new InputPayManaExecuteCommands(game, "Pay difference in artifacts CMC", diffCost); + final int diffCost = newCMC - baseCMC; + InputPayManaExecuteCommands inp = new InputPayManaExecuteCommands(game, "Pay difference in artifacts CMC", ManaCost.get(diffCost)); FThreads.setInputAndWait(inp); if ( inp.isPaid() ) - Singletons.getModel().getGame().getAction().moveToPlay(newArtifact[0]); + game.getAction().moveToPlay(newArtifact[0]); else - Singletons.getModel().getGame().getAction().moveToGraveyard(newArtifact[0]); + game.getAction().moveToGraveyard(newArtifact[0]); } // finally, shuffle library diff --git a/src/main/java/forge/card/mana/ManaCost.java b/src/main/java/forge/card/mana/ManaCost.java index a4b64035b24..cf3f7d7e695 100644 --- a/src/main/java/forge/card/mana/ManaCost.java +++ b/src/main/java/forge/card/mana/ManaCost.java @@ -49,15 +49,14 @@ public final class ManaCost implements Comparable { public static final ManaCost FOUR = new ManaCost(4); public static ManaCost get(int cntColorless) { - if(cntColorless >= 5 || cntColorless < 0) throw new IllegalArgumentException("Supports only 0-4"); switch (cntColorless) { case 0: return ZERO; case 1: return ONE; case 2: return TWO; case 3: return THREE; case 4: return FOUR; - default: return NO_COST; } + return cntColorless > 0 ? new ManaCost(cntColorless) : NO_COST; } // pass mana cost parser here diff --git a/src/main/java/forge/control/input/InputPayManaExecuteCommands.java b/src/main/java/forge/control/input/InputPayManaExecuteCommands.java index 336f742bebe..d65f1657405 100644 --- a/src/main/java/forge/control/input/InputPayManaExecuteCommands.java +++ b/src/main/java/forge/control/input/InputPayManaExecuteCommands.java @@ -18,6 +18,7 @@ package forge.control.input; import forge.Singletons; +import forge.card.mana.ManaCost; import forge.card.mana.ManaCostBeingPaid; import forge.card.spellability.SpellAbility; import forge.game.GameState; @@ -41,7 +42,7 @@ public class InputPayManaExecuteCommands extends InputPayManaBase implements Inp */ private static final long serialVersionUID = 3836655722696348713L; - private String originalManaCost; + private ManaCost originalManaCost; private String message = ""; private boolean bPaid = false; @@ -65,7 +66,7 @@ public class InputPayManaExecuteCommands extends InputPayManaBase implements Inp * @param unpaidCommand2 * a {@link forge.Command} object. */ - public InputPayManaExecuteCommands(final GameState game, final String prompt, final String manaCost2) { + public InputPayManaExecuteCommands(final GameState game, final String prompt, final ManaCost manaCost2) { this(game, prompt, manaCost2, false); } @@ -85,7 +86,7 @@ public class InputPayManaExecuteCommands extends InputPayManaBase implements Inp * @param showOKButton * a boolean. */ - public InputPayManaExecuteCommands(final GameState game, final String prompt, final String manaCost2, final boolean showOKButton) { + public InputPayManaExecuteCommands(final GameState game, final String prompt, final ManaCost manaCost2, final boolean showOKButton) { super(game, new SpellAbility(null) { @Override public void resolve() {} diff --git a/src/main/java/forge/game/GameActionPlay.java b/src/main/java/forge/game/GameActionPlay.java index ba265b8888e..c9b7eaa1f5d 100644 --- a/src/main/java/forge/game/GameActionPlay.java +++ b/src/main/java/forge/game/GameActionPlay.java @@ -461,50 +461,6 @@ public class GameActionPlay { } - /** The Cost cutting_ get multi kicker mana cost paid. */ - private int costCuttingGetMultiKickerManaCostPaid = 0; - /** The Cost cutting_ get multi kicker mana cost paid_ colored. */ - private String costCuttingGetMultiKickerManaCostPaidColored = ""; - - /** - * Gets the cost cutting get multi kicker mana cost paid. - * - * @return the costCuttingGetMultiKickerManaCostPaid - */ - public int getCostCuttingGetMultiKickerManaCostPaid() { - return this.costCuttingGetMultiKickerManaCostPaid; - } - - /** - * Sets the cost cutting get multi kicker mana cost paid. - * - * @param costCuttingGetMultiKickerManaCostPaid0 - * the costCuttingGetMultiKickerManaCostPaid to set - */ - public void setCostCuttingGetMultiKickerManaCostPaid(final int costCuttingGetMultiKickerManaCostPaid0) { - this.costCuttingGetMultiKickerManaCostPaid = costCuttingGetMultiKickerManaCostPaid0; - } - - /** - * Gets the cost cutting get multi kicker mana cost paid colored. - * - * @return the costCuttingGetMultiKickerManaCostPaidColored - */ - public String getCostCuttingGetMultiKickerManaCostPaidColored() { - return this.costCuttingGetMultiKickerManaCostPaidColored; - } - - /** - * Sets the cost cutting get multi kicker mana cost paid colored. - * - * @param costCuttingGetMultiKickerManaCostPaidColored0 - * the costCuttingGetMultiKickerManaCostPaidColored to set - */ - public void setCostCuttingGetMultiKickerManaCostPaidColored( - final String costCuttingGetMultiKickerManaCostPaidColored0) { - this.costCuttingGetMultiKickerManaCostPaidColored = costCuttingGetMultiKickerManaCostPaidColored0; - } - /** * Gets the convokable colors. * diff --git a/src/main/java/forge/game/GameActionUtil.java b/src/main/java/forge/game/GameActionUtil.java index 52d58efaaf8..94e361bbf35 100644 --- a/src/main/java/forge/game/GameActionUtil.java +++ b/src/main/java/forge/game/GameActionUtil.java @@ -607,7 +607,7 @@ public final class GameActionUtil { // at some point in time, it's possible to restore the InputPaySacCost-based input // interface for sacrifice costs (instead of the menu-based one above). - InputPayment toSet = new InputPayManaExecuteCommands(game, source + "\r\n", ability.getManaCost().toString()); + InputPayment toSet = new InputPayManaExecuteCommands(game, source + "\r\n", ability.getManaCost()); FThreads.setInputAndWait(toSet); if (toSet.isPaid() ) { paid.execute(); diff --git a/src/main/java/forge/game/phase/Upkeep.java b/src/main/java/forge/game/phase/Upkeep.java index 53646b173a1..fe594f40c68 100644 --- a/src/main/java/forge/game/phase/Upkeep.java +++ b/src/main/java/forge/game/phase/Upkeep.java @@ -286,7 +286,7 @@ public class Upkeep extends Phase { public void resolve() { final boolean isUpkeepPaid; if (controller.isHuman()) { - InputPayManaExecuteCommands inp = new InputPayManaExecuteCommands(game, sb, upkeepCost.toString()); + InputPayManaExecuteCommands inp = new InputPayManaExecuteCommands(game, sb, upkeepCost); FThreads.setInputAndWait(inp); isUpkeepPaid = inp.isPaid(); } else { // computer @@ -383,7 +383,7 @@ public class Upkeep extends Phase { public void resolve() { boolean isUpkeepPaid = false; if (controller.isHuman()) { - InputPayManaExecuteCommands inp = new InputPayManaExecuteCommands(game, sb, upkeepCost.toString()); + InputPayManaExecuteCommands inp = new InputPayManaExecuteCommands(game, sb, upkeepCost); FThreads.setInputAndWait(inp); isUpkeepPaid = inp.isPaid(); } else { // computers @@ -625,7 +625,7 @@ public class Upkeep extends Phase { @Override public void resolve() { if (game.getZoneOf(c).is(ZoneType.Battlefield)) { - InputPayManaExecuteCommands inp = new InputPayManaExecuteCommands(game, "Pay Demonic Hordes upkeep cost", cost.getManaCost().toString() /*, true */); + InputPayManaExecuteCommands inp = new InputPayManaExecuteCommands(game, "Pay Demonic Hordes upkeep cost", cost.getManaCost() /*, true */); FThreads.setInputAndWait(inp); if ( !inp.isPaid() ) unpaidHordesAb.resolve(); diff --git a/src/main/java/forge/game/zone/MagicStack.java b/src/main/java/forge/game/zone/MagicStack.java index 70d687f17e0..79039e97003 100644 --- a/src/main/java/forge/game/zone/MagicStack.java +++ b/src/main/java/forge/game/zone/MagicStack.java @@ -34,7 +34,6 @@ import forge.card.ability.AbilityUtils; import forge.card.cardfactory.CardFactory; import forge.card.cardfactory.CardFactoryUtil; import forge.card.mana.ManaCost; -import forge.card.mana.ManaCostBeingPaid; import forge.card.spellability.Ability; import forge.card.spellability.AbilityStatic; import forge.card.spellability.AbilityTriggered; @@ -293,95 +292,6 @@ public class MagicStack extends MyObservable { } } - /** - *

- * getMultiKickerSpellCostChange. - *

- * - * @param sa - * a {@link forge.card.spellability.SpellAbility} object. - * @return a {@link forge.card.mana.ManaCostBeingPaid} object. - */ - public final ManaCostBeingPaid getMultiKickerSpellCostChange(final SpellAbility sa) { - final int max = 25; - final String[] numbers = new String[max]; - for (int no = 0; no < max; no++) { - numbers[no] = String.valueOf(no); - } - - ManaCostBeingPaid manaCost = new ManaCostBeingPaid(sa.getManaCost()); - String mana = manaCost.toString(); - - int multiKickerPaid = game.getActionPlay().getCostCuttingGetMultiKickerManaCostPaid(); - - String numberManaCost = " "; - - if (mana.toString().length() == 1) { - numberManaCost = mana.toString().substring(0, 1); - } else if (mana.toString().length() == 0) { - numberManaCost = "0"; // Should Never Occur - } else { - numberManaCost = mana.toString().substring(0, 2); - } - - numberManaCost = numberManaCost.trim(); - - for (int check = 0; check < max; check++) { - if (numberManaCost.equals(numbers[check])) { - - if ((check - multiKickerPaid) < 0) { - multiKickerPaid = multiKickerPaid - check; - game.getActionPlay().setCostCuttingGetMultiKickerManaCostPaid(multiKickerPaid); - mana = mana.replaceFirst(String.valueOf(check), "0"); - } else { - mana = mana.replaceFirst(String.valueOf(check), String.valueOf(check - multiKickerPaid)); - multiKickerPaid = 0; - game.getActionPlay().setCostCuttingGetMultiKickerManaCostPaid(multiKickerPaid); - } - } - mana = mana.trim(); - if (mana.equals("")) { - mana = "0"; - } - manaCost = new ManaCostBeingPaid(mana); - } - final String colorCut = game.getActionPlay().getCostCuttingGetMultiKickerManaCostPaidColored(); - - for (int colorCutIx = 0; colorCutIx < colorCut.length(); colorCutIx++) { - if ("WUGRB".contains(colorCut.substring(colorCutIx, colorCutIx + 1)) - && !mana.equals(mana.replaceFirst((colorCut.substring(colorCutIx, colorCutIx + 1)), ""))) { - mana = mana.replaceFirst(colorCut.substring(colorCutIx, colorCutIx + 1), ""); - - game.getActionPlay().setCostCuttingGetMultiKickerManaCostPaidColored( - game.getActionPlay().getCostCuttingGetMultiKickerManaCostPaidColored() - .replaceFirst(colorCut.substring(colorCutIx, colorCutIx + 1), "")); - - mana = mana.trim(); - if (mana.equals("")) { - mana = "0"; - } - manaCost = new ManaCostBeingPaid(mana); - } - } - - return manaCost; - } - - // TODO: this may be able to use a straight copy of MultiKicker cost change - /** - *

- * getReplicateSpellCostChange. - *

- * - * @param sa - * a {@link forge.card.spellability.SpellAbility} object. - * @return a {@link forge.card.mana.ManaCostBeingPaid} object. - */ - public final ManaCostBeingPaid getReplicateSpellCostChange(final SpellAbility sa) { - final ManaCostBeingPaid manaCost = new ManaCostBeingPaid(sa.getManaCost()); - // String Mana = manaCost.toString(); - return manaCost; - } /** *

@@ -487,7 +397,7 @@ public class MagicStack extends MyObservable { final Card crd = sa.getSourceCard(); String message = "Pay X cost for " + crd.getName() + " (X=" + crd.getXManaCostPaid() + ")\r\n"; - InputPayManaExecuteCommands inp = new InputPayManaExecuteCommands(game, message, String.valueOf(xCost), true); + InputPayManaExecuteCommands inp = new InputPayManaExecuteCommands(game, message, ManaCost.get(xCost), true); FThreads.setInputAndWait(inp); if ( inp.isPaid() ) { crd.addXManaCostPaid(1); @@ -534,29 +444,15 @@ public class MagicStack extends MyObservable { @Override public void run() { abilityIncreaseMultikicker.resolve(); - - final ManaCostBeingPaid manaCost = MagicStack.this.getMultiKickerSpellCostChange(abilityIncreaseMultikicker); - - if (manaCost.isPaid()) { + int mkMagnitude = sa.getSourceCard().getMultiKickerMagnitude(); + String prompt = String.format("Multikicker for %s\r\nTimes Kicked: %d\r\n", sa.getSourceCard(), mkMagnitude ); + InputPayManaExecuteCommands toSet = new InputPayManaExecuteCommands(game, prompt, sp.getMultiKickerManaCost()); + FThreads.setInputAndWait(toSet); + if ( toSet.isPaid() ) { this.run(); - } else { - String prompt; - int mkCostPaid = game.getActionPlay().getCostCuttingGetMultiKickerManaCostPaid(); - String mkCostPaidColored = game.getActionPlay().getCostCuttingGetMultiKickerManaCostPaidColored(); - int mkMagnitude = sa.getSourceCard().getMultiKickerMagnitude(); - if ((mkCostPaid == 0) && mkCostPaidColored.equals("")) { - prompt = String.format("Multikicker for %s\r\nTimes Kicked: %d\r\n", sa.getSourceCard(), mkMagnitude ); - } else { - prompt = String.format("Multikicker for %s\r\nMana in Reserve: %s %s\r\nTimes Kicked: %d", sa.getSourceCard(), - (mkCostPaid != 0) ? Integer.toString(mkCostPaid) : "", mkCostPaidColored, mkMagnitude); - } - InputPayManaExecuteCommands toSet = new InputPayManaExecuteCommands(game, prompt, manaCost.toString()); - FThreads.setInputAndWait(toSet); - if ( toSet.isPaid() ) { - this.run(); - } else - MagicStack.this.push(sa); - } + } else + MagicStack.this.push(sa); + } }; paidCommand.run(); @@ -591,19 +487,14 @@ public class MagicStack extends MyObservable { @Override public void run() { ability.resolve(); - final ManaCostBeingPaid manaCost = MagicStack.this.getReplicateSpellCostChange(ability); - if (manaCost.isPaid()) { + String prompt = String.format("Replicate for %s\r\nTimes Replicated: %d\r\n", sa.getSourceCard(), sa.getSourceCard().getReplicateMagnitude()); + InputPayManaExecuteCommands toSet = new InputPayManaExecuteCommands(game, prompt, sp.getReplicateManaCost()); + FThreads.setInputAndWait(toSet); + if ( toSet.isPaid() ) { this.run(); } else { - String prompt = String.format("Replicate for %s\r\nTimes Replicated: %d\r\n", sa.getSourceCard(), sa.getSourceCard().getReplicateMagnitude()); - InputPayManaExecuteCommands toSet = new InputPayManaExecuteCommands(game, prompt, manaCost.toString()); - FThreads.setInputAndWait(toSet); - if ( toSet.isPaid() ) { - this.run(); - } else { - for (int i = 0; i < sp.getSourceCard().getReplicateMagnitude(); i++) { - CardFactory.copySpellontoStack(sp.getSourceCard(), sp.getSourceCard(), sp, false); - } + for (int i = 0; i < sp.getSourceCard().getReplicateMagnitude(); i++) { + CardFactory.copySpellontoStack(sp.getSourceCard(), sp.getSourceCard(), sp, false); } } }