diff --git a/forge-game/src/main/java/forge/game/GameEntity.java b/forge-game/src/main/java/forge/game/GameEntity.java index ad1f8f4e6a3..251d106f55d 100644 --- a/forge-game/src/main/java/forge/game/GameEntity.java +++ b/forge-game/src/main/java/forge/game/GameEntity.java @@ -336,7 +336,11 @@ public abstract class GameEntity extends GameObject implements IIdentifiable { } public void setCounters(final CounterType counterType, final Integer num) { - counters.put(counterType, num); + if (num <= 0) { + counters.remove(counterType); + } else { + counters.put(counterType, num); + } } abstract public void setCounters(final Map allCounters); diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index bb1eaec5db1..2d95b9b0c6d 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -1023,7 +1023,7 @@ public class Card extends GameEntity implements Comparable { final int toughnessBonusBefore = getToughnessBonusFromCounters(); final int loyaltyBefore = getCurrentLoyalty(); - counters.put(counterType, newValue); + setCounters(counterType, newValue); getController().addCounterToPermThisTurn(counterType, addAmount); view.updateCounters(this); @@ -1093,12 +1093,7 @@ public class Card extends GameEntity implements Comparable { int toughnessBonusBefore = getToughnessBonusFromCounters(); int loyaltyBefore = getCurrentLoyalty(); - if (newValue > 0) { - counters.put(counterName, newValue); - } - else { - counters.remove(counterName); - } + setCounters(counterName, newValue); view.updateCounters(this); //fire card stats changed event if p/t bonuses or loyalty changed from subtracted counters 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 f2010af7afa..c974e3db367 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -511,7 +511,7 @@ public class Player extends GameEntity implements Comparable { return -1; } cnt -= lostEnergy; - this.setCounters(CounterType.ENERGY, cnt); + this.setCounters(CounterType.ENERGY, cnt, true); return cnt; } @@ -896,12 +896,7 @@ public class Player extends GameEntity implements Comparable { final int oldValue = getCounters(counterType); final int newValue = addAmount + oldValue; - counters.put(counterType, newValue); - view.updateCounters(this); - - if (fireEvents) { - getGame().fireEvent(new GameEventPlayerCounters(this, counterType, oldValue, newValue)); - } + this.setCounters(counterType, newValue, fireEvents); final Map runParams = Maps.newHashMap(); runParams.put("Player", this); @@ -922,16 +917,7 @@ public class Player extends GameEntity implements Comparable { final int delta = oldValue - newValue; if (delta == 0) { return; } - - if (newValue > 0) { - counters.put(counterName, newValue); - } - else { - counters.remove(counterName); - } - view.updateCounters(this); - - getGame().fireEvent(new GameEventPlayerCounters(this, counterName, oldValue, newValue)); + setCounters(counterName, newValue, true); /* TODO Run triggers when something cares int curCounters = oldValue; @@ -952,10 +938,13 @@ public class Player extends GameEntity implements Comparable { getGame().fireEvent(new GameEventPlayerCounters(this, null, 0, 0)); } - public void setCounters(final CounterType counterType, final Integer num) { + public void setCounters(final CounterType counterType, final Integer num, boolean fireEvents) { + Integer old = getCounters(counterType); counters.put(counterType, num); view.updateCounters(this); - getGame().fireEvent(new GameEventPlayerCounters(this, counterType, 0, 0)); + if (fireEvents) { + getGame().fireEvent(new GameEventPlayerCounters(this, counterType, old, num)); + } } @Override @@ -971,7 +960,7 @@ public class Player extends GameEntity implements Comparable { } public final void setPoisonCounters(final int num, Card source) { int oldPoison = getCounters(CounterType.POISON); - setCounters(CounterType.POISON, num); + setCounters(CounterType.POISON, num, true); game.fireEvent(new GameEventPlayerPoisoned(this, source, oldPoison, num)); } public final void addPoisonCounters(final int num, final Card source) {