diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 5d791604fab..7bd0a948602 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -1225,17 +1225,7 @@ public class GameAction { return null; } - // Play the Sacrifice sound - game.fireEvent(new GameEventCardSacrificed()); - - // Run triggers - final HashMap runParams = new HashMap(); - // use a copy that preserves last known information about the card (e.g. for Savra, Queen of the Golgari + Painter's Servant) - runParams.put("Card", CardFactory.copyCardWithChangedStats(c, false)); - runParams.put("Cause", source); - runParams.put("CostStack", game.costPaymentStack); - runParams.put("IndividualCostPaymentInstance", game.costPaymentStack.peek()); - game.getTriggerHandler().runTrigger(TriggerType.Sacrificed, runParams, false); + c.getController().addSacrificedThisTurn(c, source); return sacrificeDestroy(c); } 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 9adc11f172a..8152910d96e 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -104,6 +104,8 @@ public class Player extends GameEntity implements Comparable { private int numDiscardedThisTurn = 0; private int numCardsInHandStartedThisTurnWith = 0; + private CardCollection sacrificedThisTurn = new CardCollection(); + /** A list of tokens not in play, but on their way. * This list is kept in order to not break ETB-replacement * on tokens. */ @@ -2239,6 +2241,31 @@ public class Player extends GameEntity implements Comparable { investigatedThisTurn = 0; } + public final CardCollectionView getSacrificedThisTurn() { + return sacrificedThisTurn; + } + + public final void addSacrificedThisTurn(final Card c, final SpellAbility source) { + // Play the Sacrifice sound + game.fireEvent(new GameEventCardSacrificed()); + + final Card cpy = CardFactory.copyCardWithChangedStats(c, false); + sacrificedThisTurn.add(cpy); + + // Run triggers + final HashMap runParams = new HashMap(); + // use a copy that preserves last known information about the card (e.g. for Savra, Queen of the Golgari + Painter's Servant) + runParams.put("Card", cpy); + runParams.put("Cause", source); + runParams.put("CostStack", game.costPaymentStack); + runParams.put("IndividualCostPaymentInstance", game.costPaymentStack.peek()); + game.getTriggerHandler().runTrigger(TriggerType.Sacrificed, runParams, false); + } + + public final void resetSacrificedThisTurn() { + sacrificedThisTurn.clear(); + } + public final int getSpellsCastThisTurn() { return spellsCastThisTurn; } @@ -2436,6 +2463,7 @@ public class Player extends GameEntity implements Comparable { setTappedLandForManaThisTurn(false); resetLandsPlayedThisTurn(); resetInvestigatedThisTurn(); + resetSacrificedThisTurn(); clearAssignedDamage(); resetAttackersDeclaredThisTurn(); }