Fixed a bug that effects forcing creatures to block an attacker forced also creatures of players not attacked (multiplayer games) to block, locking the game UI.

This commit is contained in:
LevelX2 2015-09-29 00:36:08 +02:00
parent 1efbe346b6
commit 707358f875

View file

@ -525,6 +525,10 @@ public class Combat implements Serializable, Copyable<Combat> {
// has cost to block to pay so remove this attacker // has cost to block to pay so remove this attacker
continue; continue;
} }
if (!getDefendingPlayerId(attackingCreatureId, game).equals(possibleBlocker.getControllerId())) {
// Creature can't block if not the controller or a planeswalker of the controller of the possible blocker is attacked
continue;
}
if (creatureMustBlockAttackers.containsKey(possibleBlocker.getId())) { if (creatureMustBlockAttackers.containsKey(possibleBlocker.getId())) {
creatureMustBlockAttackers.get(possibleBlocker.getId()).add(attackingCreatureId); creatureMustBlockAttackers.get(possibleBlocker.getId()).add(attackingCreatureId);
} else { } else {
@ -729,6 +733,10 @@ public class Combat implements Serializable, Copyable<Combat> {
if (creatureForcedToBlock == null) { if (creatureForcedToBlock == null) {
break; break;
} }
if (!creatureForcedToBlock.getControllerId().equals(player.getId())) {
// ignore creatures controlled by other players
continue;
}
// // check if creature has to pay a cost to block so it's not mandatory to block // // check if creature has to pay a cost to block so it's not mandatory to block
// boolean removedAttacker = false; // boolean removedAttacker = false;
@ -1133,10 +1141,10 @@ public class Combat implements Serializable, Copyable<Combat> {
return defenderId; return defenderId;
} }
public UUID getDefendingPlayerId(UUID attackerId, Game game) { public UUID getDefendingPlayerId(UUID attackingCreatureId, Game game) {
UUID defenderId = null; UUID defenderId = null;
for (CombatGroup group : groups) { for (CombatGroup group : groups) {
if (group.getAttackers().contains(attackerId)) { if (group.getAttackers().contains(attackingCreatureId)) {
defenderId = group.getDefenderId(); defenderId = group.getDefenderId();
if (group.defenderIsPlaneswalker) { if (group.defenderIsPlaneswalker) {
Permanent permanent = game.getPermanent(defenderId); Permanent permanent = game.getPermanent(defenderId);