diff --git a/forge-game/src/main/java/forge/game/cost/CostPayEnergy.java b/forge-game/src/main/java/forge/game/cost/CostPayEnergy.java index 99a3a3c2383..28bf1f69cb8 100644 --- a/forge-game/src/main/java/forge/game/cost/CostPayEnergy.java +++ b/forge-game/src/main/java/forge/game/cost/CostPayEnergy.java @@ -19,6 +19,7 @@ package forge.game.cost; import forge.game.ability.AbilityUtils; import forge.game.card.Card; +import forge.game.card.CounterType; import forge.game.player.Player; import forge.game.spellability.SpellAbility; @@ -80,7 +81,7 @@ public class CostPayEnergy extends CostPart { amount = AbilityUtils.calculateAmount(ability.getHostCard(), getAmount(), ability); } } else { - return activator.getEnergy() >= amount; + return activator.getCounters(CounterType.ENERGY) >= amount; } return true; diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index 130db02f2af..7856c3a87d5 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -86,7 +86,6 @@ public class Player extends GameEntity implements Comparable { private int life = 20; private int startingLife = 20; - private int energy = 0; private final Map assignedDamage = new HashMap(); private int spellsCastThisTurn = 0; private int landsPlayedThisTurn = 0; @@ -493,32 +492,27 @@ public class Player extends GameEntity implements Comparable { return false; } - public final int getEnergy() { - return energy; - } - public final void setEnergy(int newEnergy) { energy = newEnergy; } - public final boolean canPayEnergy(final int energyPayment) { - return energy >= energyPayment; + int cnt = getCounters(CounterType.ENERGY); + return cnt >= energyPayment; } public final int loseEnergy(int lostEnergy) { - if (lostEnergy > energy) { - return 0; + int cnt = getCounters(CounterType.ENERGY); + if (lostEnergy > cnt) { + return -1; } - energy -= lostEnergy; - return lostEnergy; + cnt -= lostEnergy; + counters.put(CounterType.ENERGY, cnt); + return cnt; } public final boolean payEnergy(final int energyPayment, final Card source) { if (energyPayment <= 0) return true; - // rule 118.8 - if (energy >= energyPayment) { - return (loseEnergy(energyPayment) > 0); - } - return false; + + return canPayEnergy(energyPayment) && loseEnergy(energyPayment) > -1; } // This function handles damage after replacement and prevention effects are applied diff --git a/forge-gui/src/main/java/forge/player/HumanCostDecision.java b/forge-gui/src/main/java/forge/player/HumanCostDecision.java index 5179e24188b..4a80a091903 100644 --- a/forge-gui/src/main/java/forge/player/HumanCostDecision.java +++ b/forge-gui/src/main/java/forge/player/HumanCostDecision.java @@ -566,15 +566,15 @@ public class HumanCostDecision extends CostDecisionMakerBase { @Override public PaymentDecision visit(final CostPayEnergy cost) { final String amount = cost.getAmount(); - final int life = player.getLife(); + final int energy = player.getCounters(CounterType.ENERGY); Integer c = cost.convertAmount(); if (c == null) { final String sVar = ability.getSVar(amount); // Generalize this if (sVar.startsWith("XChoice")) { - int limit = life; - final int maxLifePayment = limit < life ? limit : life; + int limit = energy; + final int maxLifePayment = limit < energy ? limit : energy; c = chooseXValue(maxLifePayment); } else { c = AbilityUtils.calculateAmount(source, amount, ability);