From 20fa6c35c44e49b0268ca0529d3961a549a26756 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Wed, 5 Jun 2024 11:36:52 +0200 Subject: [PATCH] Player counters removed this turn (#5377) --- forge-game/src/main/java/forge/game/Game.java | 12 ++++++++---- .../src/main/java/forge/game/player/Player.java | 13 +++++++------ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/forge-game/src/main/java/forge/game/Game.java b/forge-game/src/main/java/forge/game/Game.java index 17f101a4aae..5a657c6149a 100644 --- a/forge-game/src/main/java/forge/game/Game.java +++ b/forge-game/src/main/java/forge/game/Game.java @@ -102,7 +102,7 @@ public class Game { private CardZoneTable untilHostLeavesPlayTriggerList = new CardZoneTable(); private Table>> countersAddedThisTurn = HashBasedTable.create(); - private Multimap> countersRemovedThisTurn = ArrayListMultimap.create(); + private Multimap> countersRemovedThisTurn = ArrayListMultimap.create(); private List leftBattlefieldThisTurn = Lists.newArrayList(); private List leftGraveyardThisTurn = Lists.newArrayList(); @@ -1228,10 +1228,14 @@ public class Game { countersRemovedThisTurn.put(cType, Pair.of(CardCopyService.getLKICopy(card), value)); } - public int getCounterRemovedThisTurn(CounterType cType, String validCard, Card source, Player sourceController, CardTraitBase ctb) { + public void addCounterRemovedThisTurn(CounterType cType, Player player, Integer value) { + countersRemovedThisTurn.put(cType, Pair.of(player, value)); + } + + public int getCounterRemovedThisTurn(CounterType cType, String valid, Card source, Player sourceController, CardTraitBase ctb) { int result = 0; - for (Pair p : countersRemovedThisTurn.get(cType)) { - if (p.getKey().isValid(validCard.split(","), sourceController, source, ctb)) { + for (Pair p : countersRemovedThisTurn.get(cType)) { + if (p.getKey().isValid(valid.split(","), sourceController, source, ctb)) { result += p.getValue(); } } 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 d00793f0c76..63301767915 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -635,21 +635,20 @@ public class Player extends GameEntity implements Comparable { return cnt >= energyPayment; } - public final int loseEnergy(int lostEnergy) { + public final boolean loseEnergy(int lostEnergy) { int cnt = getCounters(CounterEnumType.ENERGY); if (lostEnergy > cnt) { - return -1; + return false; } - cnt -= lostEnergy; - this.setCounters(CounterEnumType.ENERGY, cnt, null, true); - return cnt; + subtractCounter(CounterEnumType.ENERGY, lostEnergy, this); + return true; } public final boolean payEnergy(final int energyPayment, final Card source) { if (energyPayment <= 0) return true; - return canPayEnergy(energyPayment) && loseEnergy(energyPayment) > -1; + return canPayEnergy(energyPayment) && loseEnergy(energyPayment); } public final boolean canPayShards(final int shardPayment) { @@ -904,6 +903,8 @@ public class Player extends GameEntity implements Comparable { setCounters(counterName, newValue, null, true); + getGame().addCounterRemovedThisTurn(counterName, this, delta); + /* TODO Run triggers when something cares int curCounters = oldValue; for (int i = 0; i < delta && curCounters != 0; i++) {