Fix the counter removal code so it doesn't throw events when it's removing nonexistent counters.

This commit is contained in:
Dilnu 2016-11-21 07:39:47 -05:00
parent 5e12a141cb
commit 9ff3e2c670
3 changed files with 15 additions and 7 deletions

View file

@ -656,7 +656,9 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
@Override
public void removeCounters(String name, int amount, Game game) {
for (int i = 0; i < amount; i++) {
getCounters(game).removeCounter(name, 1);
if (!getCounters(game).removeCounter(name, 1)) {
break;
}
GameEvent event = GameEvent.getEvent(GameEvent.EventType.COUNTER_REMOVED, objectId, getControllerOrOwner());
event.setData(name);
game.fireEvent(event);

View file

@ -74,26 +74,30 @@ public class Counters extends HashMap<String, Counter> implements Serializable {
}
}
public void removeCounter(String name) {
removeCounter(name, 1);
public boolean removeCounter(String name) {
return removeCounter(name, 1);
}
public void removeCounter(CounterType counterType, int amount) {
public boolean removeCounter(CounterType counterType, int amount) {
if (this.containsKey(counterType.getName())) {
get(counterType.getName()).remove(amount);
if (get(counterType.getName()).count == 0) {
this.remove(counterType.getName());
}
return true;
}
return false;
}
public void removeCounter(String name, int amount) {
public boolean removeCounter(String name, int amount) {
if (this.containsKey(name)) {
this.get(name).remove(amount);
if (this.get(name).getCount() == 0) {
this.remove(name);
}
return true;
}
return false;
}
public void removeAllCounters(CounterType counterType){

View file

@ -1877,7 +1877,9 @@ public abstract class PlayerImpl implements Player, Serializable {
@Override
public void removeCounters(String name, int amount, Ability source, Game game) {
for (int i = 0; i < amount; i++) {
counters.removeCounter(name, 1);
if (!counters.removeCounter(name, 1)) {
break;
}
GameEvent event = GameEvent.getEvent(GameEvent.EventType.COUNTER_REMOVED,
getId(), (source == null ? null : source.getSourceId()), (source == null ? null : source.getControllerId()));
event.setData(name);