From 12c30f0227e264c71019cd24045c966efa0a3fef Mon Sep 17 00:00:00 2001 From: L_J Date: Mon, 4 Jun 2018 21:15:00 +0000 Subject: [PATCH] Fixed an issue with mustBlockAttackerIfElseUnblocked if more than one mustBlockAttackerIfElseUnblocked attacker is attacking and both have different minNumberOfBlockers values --- Mage/src/main/java/mage/game/combat/Combat.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Mage/src/main/java/mage/game/combat/Combat.java b/Mage/src/main/java/mage/game/combat/Combat.java index bdc10db7f10..65dad771621 100644 --- a/Mage/src/main/java/mage/game/combat/Combat.java +++ b/Mage/src/main/java/mage/game/combat/Combat.java @@ -695,7 +695,7 @@ public class Combat implements Serializable, Copyable { //20101001 - 509.1c // map with attackers (UUID) that must be blocked by at least one blocker and a set of all creatures that can block it and don't block yet Map> mustBeBlockedByAtLeastOne = new HashMap<>(); - int minNumberOfBlockers = 0; + Map minNumberOfBlockersMap = new HashMap<>(); // check mustBlock requirements of creatures from opponents of attacking player for (Permanent creature : game.getBattlefield().getActivePermanents(StaticFilters.FILTER_PERMANENT_CREATURES_CONTROLLED, player.getId(), game)) { @@ -711,7 +711,7 @@ public class Combat implements Serializable, Copyable { for (Ability ability : entry.getValue()) { UUID toBeBlockedCreature = effect.mustBlockAttackerIfElseUnblocked(ability, game); if (toBeBlockedCreature != null) { - minNumberOfBlockers = effect.getMinNumberOfBlockers(); + minNumberOfBlockersMap.put(toBeBlockedCreature, effect.getMinNumberOfBlockers()); Set potentialBlockers; if (mustBeBlockedByAtLeastOne.containsKey(toBeBlockedCreature)) { potentialBlockers = mustBeBlockedByAtLeastOne.get(toBeBlockedCreature); @@ -806,7 +806,7 @@ public class Combat implements Serializable, Copyable { for (Ability ability : entry.getValue()) { UUID toBeBlockedCreature = effect.mustBlockAttackerIfElseUnblocked(ability, game); if (toBeBlockedCreature != null) { - minNumberOfBlockers = effect.getMinNumberOfBlockers(); + minNumberOfBlockersMap.put(toBeBlockedCreature, effect.getMinNumberOfBlockers()); Set potentialBlockers; if (mustBeBlockedByAtLeastOne.containsKey(toBeBlockedCreature)) { potentialBlockers = mustBeBlockedByAtLeastOne.get(toBeBlockedCreature); @@ -901,7 +901,7 @@ public class Combat implements Serializable, Copyable { break; } } - requirementFulfilled &= (combatGroup.getBlockers().size() >= Math.min(minNumberOfBlockers, mustBeBlockedByAtLeastOne.get(toBeBlockedCreatureId).size())); + requirementFulfilled &= (combatGroup.getBlockers().size() >= Math.min(minNumberOfBlockersMap.get(toBeBlockedCreatureId), mustBeBlockedByAtLeastOne.get(toBeBlockedCreatureId).size())); if (!requirementFulfilled) { // creature is not blocked but has possible blockers if (controller.isHuman()) { @@ -938,7 +938,7 @@ public class Combat implements Serializable, Copyable { } defender.declareBlocker(defender.getId(), possibleBlockerId, toBeBlockedCreatureId, game); } - if (combatGroup.getBlockers().size() >= minNumberOfBlockers) { + if (combatGroup.getBlockers().size() >= minNumberOfBlockersMap.get(toBeBlockedCreatureId)) { break; } }