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 296e9e942fa..9adc11f172a 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -1442,20 +1442,24 @@ public class Player extends GameEntity implements Comparable { }*/ final Card source = sa != null ? sa.getHostCard() : null; - // Replacement effects - final HashMap repRunParams = new HashMap(); - repRunParams.put("Event", "Discard"); - repRunParams.put("Card", c); - repRunParams.put("Source", source); - repRunParams.put("Affected", this); - - if (game.getReplacementHandler().run(repRunParams) != ReplacementResult.NotReplaced) { - return null; - } - boolean discardToTopOfLibrary = null != sa && sa.hasParam("DiscardToTopOfLibrary"); boolean discardMadness = sa != null && sa.hasParam("Madness"); + // DiscardToTopOfLibrary and Madness are replacement discards, + // that should not trigger other Replacement again + if (!discardToTopOfLibrary && !discardMadness) { + // Replacement effects + final HashMap repRunParams = new HashMap(); + repRunParams.put("Event", "Discard"); + repRunParams.put("Card", c); + repRunParams.put("Source", source); + repRunParams.put("Affected", this); + + if (game.getReplacementHandler().run(repRunParams) != ReplacementResult.NotReplaced) { + return null; + } + } + StringBuilder sb = new StringBuilder(); sb.append(this).append(" discards ").append(c); final Card newCard; @@ -1482,8 +1486,8 @@ public class Player extends GameEntity implements Comparable { if (sa.hasParam("Cause")) { final CardCollection col = AbilityUtils.getDefinedCards(cause, sa.getParam("Cause"), sa); if (!col.isEmpty()) { - cause = col.getFirst(); - } + cause = col.getFirst(); + } } } final HashMap runParams = new HashMap();