diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index 9e56cfca700..a6c6168480a 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -7939,10 +7939,40 @@ public class Card extends GameEntity implements Comparable { if (Singletons.getModel().getGame().getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noPrevention)) { return damage; } + + for (final Card ca : Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield)) { + for (final ReplacementEffect re : ca.getReplacementEffects()) { + HashMap params = re.getMapParams(); + if (!"DamageDone".equals(params.get("Event")) || !params.containsKey("PreventionEffect")) { + continue; + } + if (params.containsKey("ValidSource") + && !source.isValid(params.get("ValidSource"), ca.getController(), ca)) { + continue; + } + if (params.containsKey("ValidTarget") + && !this.isValid(params.get("ValidTarget"), ca.getController(), ca)) { + continue; + } + if (params.containsKey("IsCombat")) { + if (params.get("IsCombat").equals("True")) { + if (!isCombat) { + continue; + } + } else { + if (isCombat) { + continue; + } + } + + } + return 0; + } + } int restDamage = damage - possiblePrvenetion; - restDamage = this.staticDamagePrevention(restDamage, source, isCombat, true); + restDamage = this.staticDamagePrevention(restDamage, source, isCombat); return restDamage; } @@ -7963,7 +7993,7 @@ public class Card extends GameEntity implements Comparable { * @return a int. */ @Override - public final int staticDamagePrevention(final int damageIn, final Card source, final boolean isCombat, boolean predict) { + public final int staticDamagePrevention(final int damageIn, final Card source, final boolean isCombat) { if (Singletons.getModel().getGame().getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noPrevention)) { return damageIn; @@ -8033,36 +8063,6 @@ public class Card extends GameEntity implements Comparable { for (final StaticAbility stAb : staticAbilities) { restDamage = stAb.applyAbility("PreventDamage", source, this, restDamage, isCombat); } - if (!predict) { - continue; - } - for (final ReplacementEffect re : ca.getReplacementEffects()) { - HashMap params = re.getMapParams(); - if (!"DamageDone".equals(params.get("Event")) || !params.containsKey("PreventionEffect")) { - continue; - } - if (params.containsKey("ValidSource") - && !source.isValid(params.get("ValidSource"), ca.getController(), ca)) { - continue; - } - if (params.containsKey("ValidTarget") - && !this.isValid(params.get("ValidTarget"), ca.getController(), ca)) { - continue; - } - if (params.containsKey("IsCombat")) { - if (params.get("IsCombat").equals("True")) { - if (!isCombat) { - continue; - } - } else { - if (isCombat) { - continue; - } - } - - } - return 0; - } } // specific Cards @@ -8120,7 +8120,7 @@ public class Card extends GameEntity implements Comparable { return 0; } - restDamage = this.staticDamagePrevention(restDamage, source, isCombat, false); + restDamage = this.staticDamagePrevention(restDamage, source, isCombat); if (restDamage == 0) { return 0; diff --git a/src/main/java/forge/GameEntity.java b/src/main/java/forge/GameEntity.java index 20a2f853c73..ded2d27bd8d 100644 --- a/src/main/java/forge/GameEntity.java +++ b/src/main/java/forge/GameEntity.java @@ -143,7 +143,7 @@ public abstract class GameEntity extends MyObservable { int restDamage = damage; restDamage = this.staticReplaceDamage(restDamage, source, isCombat); - restDamage = this.staticDamagePrevention(restDamage, source, isCombat, true); + restDamage = this.staticDamagePrevention(restDamage, source, isCombat); return restDamage; } @@ -163,7 +163,7 @@ public abstract class GameEntity extends MyObservable { * a boolean. * @return a int. */ - public int staticDamagePrevention(final int damage, final Card source, final boolean isCombat, boolean predict) { + public int staticDamagePrevention(final int damage, final Card source, final boolean isCombat) { return 0; } diff --git a/src/main/java/forge/game/player/Player.java b/src/main/java/forge/game/player/Player.java index 7a9c7b5f119..f6bc113b4c4 100644 --- a/src/main/java/forge/game/player/Player.java +++ b/src/main/java/forge/game/player/Player.java @@ -581,7 +581,39 @@ public abstract class Player extends GameEntity implements Comparable { int restDamage = damage; restDamage = this.staticReplaceDamage(restDamage, source, isCombat); - restDamage = this.staticDamagePrevention(restDamage, source, isCombat, true); + + // Predict replacement effects + for (final Card ca : game.getCardsIn(ZoneType.Battlefield)) { + for (final ReplacementEffect re : ca.getReplacementEffects()) { + HashMap params = re.getMapParams(); + if (!"DamageDone".equals(params.get("Event")) || !params.containsKey("PreventionEffect")) { + continue; + } + if (params.containsKey("ValidSource") + && !source.isValid(params.get("ValidSource"), ca.getController(), ca)) { + continue; + } + if (params.containsKey("ValidTarget") + && !this.isValid(params.get("ValidTarget"), ca.getController(), ca)) { + continue; + } + if (params.containsKey("IsCombat")) { + if (params.get("IsCombat").equals("True")) { + if (!isCombat) { + continue; + } + } else { + if (isCombat) { + continue; + } + } + + } + return 0; + } + } + + restDamage = this.staticDamagePrevention(restDamage, source, isCombat); return restDamage; } @@ -602,7 +634,7 @@ public abstract class Player extends GameEntity implements Comparable { * @return a int. */ @Override - public final int staticDamagePrevention(final int damage, final Card source, final boolean isCombat, boolean predict) { + public final int staticDamagePrevention(final int damage, final Card source, final boolean isCombat) { if (Singletons.getModel().getGame().getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noPrevention)) { return damage; @@ -641,36 +673,6 @@ public abstract class Player extends GameEntity implements Comparable { for (final StaticAbility stAb : staticAbilities) { restDamage = stAb.applyAbility("PreventDamage", source, this, restDamage, isCombat); } - if (!predict) { - continue; - } - for (final ReplacementEffect re : ca.getReplacementEffects()) { - HashMap params = re.getMapParams(); - if (!"DamageDone".equals(params.get("Event")) || !params.containsKey("PreventionEffect")) { - continue; - } - if (params.containsKey("ValidSource") - && !source.isValid(params.get("ValidSource"), ca.getController(), ca)) { - continue; - } - if (params.containsKey("ValidTarget") - && !this.isValid(params.get("ValidTarget"), ca.getController(), ca)) { - continue; - } - if (params.containsKey("IsCombat")) { - if (params.get("IsCombat").equals("True")) { - if (!isCombat) { - continue; - } - } else { - if (isCombat) { - continue; - } - } - - } - return 0; - } } @@ -851,7 +853,7 @@ public abstract class Player extends GameEntity implements Comparable { return 0; } - restDamage = this.staticDamagePrevention(restDamage, source, isCombat, false); + restDamage = this.staticDamagePrevention(restDamage, source, isCombat); if (restDamage >= this.getPreventNextDamage()) { restDamage = restDamage - this.getPreventNextDamage();