From d33bf20bf04462b0dd8458096307be71cb5b59c7 Mon Sep 17 00:00:00 2001 From: magenoxx Date: Tue, 2 Aug 2011 21:32:05 +0400 Subject: [PATCH] Attackers sorting, Blocking groups - rule 509.3. Fixed Issue 195. --- .../java/mage/player/ai/ComputerPlayer.java | 6 + .../src/mage/player/human/HumanPlayer.java | 16 +++ Mage.Server/plugins/mage-player-ai-ma.jar | Bin 43036 -> 43035 bytes Mage.Server/plugins/mage-player-ai.jar | Bin 43619 -> 51923 bytes Mage.Server/plugins/mage-player-aiminimax.jar | Bin 40168 -> 40167 bytes Mage.Server/plugins/mage-player-human.jar | Bin 12992 -> 13060 bytes Mage/src/mage/game/combat/Combat.java | 107 ++++++++++------ Mage/src/mage/game/combat/CombatGroup.java | 118 +++++++++++++++++- Mage/src/mage/game/turn/CombatDamageStep.java | 3 + Mage/src/mage/players/Player.java | 1 + Mage/src/mage/players/PlayerImpl.java | 1 + 11 files changed, 209 insertions(+), 43 deletions(-) diff --git a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java index 1c0b181e819..a3c6e9f9e80 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java @@ -892,6 +892,12 @@ public class ComputerPlayer> extends PlayerImpl i return min; } + @Override + public UUID chooseAttackerOrder(List attackers, Game game) { + //TODO: improve this + return attackers.iterator().next().getId(); + } + @Override public UUID chooseBlockerOrder(List blockers, Game game) { //TODO: improve this diff --git a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java index 561a05fdda4..d5b5ccad711 100644 --- a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java @@ -469,6 +469,22 @@ public class HumanPlayer extends PlayerImpl { } } + @Override + public UUID chooseAttackerOrder(List attackers, Game game) { + while (!abort) { + game.fireSelectTargetEvent(playerId, "Pick attacker", attackers, true); + waitForResponse(); + if (response.getUUID() != null) { + for (Permanent perm: attackers) { + if (perm.getId().equals(response.getUUID())) + return perm.getId(); + } + } + } + return null; + } + + @Override public UUID chooseBlockerOrder(List blockers, Game game) { while (!abort) { diff --git a/Mage.Server/plugins/mage-player-ai-ma.jar b/Mage.Server/plugins/mage-player-ai-ma.jar index fb7ec1859bd7795b55f13bda7a5d99f59f1d8531..1e83097c7fc7e2acddc040102f97687988f88389 100644 GIT binary patch delta 1282 zcmbPpfob*yCcXe~W)?065XfJ}WIvHlnI#WIo6b}R@xc;Mf)z;TCZ?zAqiOl7#sX40 zS)Nf7!ti0#0W&t&Fg{`81Ie-Vh6%SbF)(PcPQEx(bh5rZ-{y%dvzQ>N^x2)5A*@oa zEJLt*ebcy?FM;aAVCwlN%P!{FENSx@sz<<*Ovod`d(%PU$LAr`@y|^_FJ--CYM}avibAO18UzYStbk3Zjy0K+SzsObTOkw z^FK9(dCT=(%rE+RZ`buWnNvUK!corY+E0eeqbKSqXXN_s< z{GDu!EBjYoG&z`j;quh%i-D{7WSf|m&q~ZtKi|91YU{5h@yX}!ED4I#ifhPy_aU|Z zHQTqdiB->q`$}E3j!t{Nb=&)sKkLpf{lZpjGqbocLU8WpQ-Zhu7rXx9_nfhp(^%iS z=Gmk)J;&m?zSl$ebyYS$GyL)KuXoAx2YG+@FJ(<$k*m?4zfV7T!2K)uC@H7kOpPAG_Yu`QhN=fKvTUJI@kU3K`kuk!Khyg898 zK6UjoE5Ds1TH>9|qr33yi@Oi>n%^6q3;%M>lGXZjzINr7W#(aylP>MMY$fLT%(+u^ z!j-qK=d03eobTT++3>>PrG&^I#sF_dCJ|Og%YofgL0vZ&;uYVLV=7 z24To9w1hCC7TQ19Mv8gQp2?GFrD;2E( delta 1270 zcmbPzfoaYKCcXe~W)?065D2QiWjB#enI#ZJo6b}R@xc;Mf)z;TCZ?zAqiOl7#sX40 zS)Nf7!ti0#0W&t&Fg{`81Ie-Vh6%SbF)(PcPQEx(bh5rZ-{y%dvzQ>N^x2)5A*@oa zEJLt*ebcy?FM;aAVCwlN%Pi*DENSx@sz<3%xW%{v^oC-YtHA zaqp)^PAApfy#G%~cdDOhJ1uqN5es!w;SP}&J0q3QuI=__6^%|J=X8oIFYHNu|Gj$4 z|AdOq273@w0xq1RKYzqs~7B7B%~& z8G0Oe{yR`lc-r42uV$B=MJ^Q$ThBCUsGYi@!!toEQuMV78|#$GQ(S+vl*lad+NZpQ zrGRkp$IX5A?C#yJy|8`8?}F)HmOqNzzk16Wk<|E| zOpGi0HinrTO5U(oe4DHL%BT_!zByTK2Yu(s9)5J?)#SQf+s%``QsX}Go3&Fa{m*@`);ntc;_=Bj+(#y@m@;+Ri+|@uKXOkps1{C(EBkRq z^=MAhFRR(>R?0>6(*Ayj!p-l`N;B^TXdFGm{m{`* z=}zu0zx>&^Y}35Nc)HT0%xn3T${Ld1+Xo0jGYzDs>@ng3aDT`wI^ z-$0L5As>8oyw5&<8pNk}HuwWmlCm+YbFj9uv39aB>-_|AR%K>q=eTv7t}J?V=8sJ@ zvu&}haNN2ti~d|lcHs zU!ORgn<2oPkx7IZmW`Q!nbB;4F*qYn&Rt*!NxbV9=tCHf7MMX8G7BvsjL3yH5XQ`f zo)E^fg#i$T)gmaPZ;>BFcZk62t#d2B!tnt1gib|5~yO$rT!49 z8W`jJQmB;TGN@vig;JCIm&rraZCd68Vf)|yP1aj3H2M2-IX3kLAYlL(gBr2` diff --git a/Mage.Server/plugins/mage-player-ai.jar b/Mage.Server/plugins/mage-player-ai.jar index 3872e13ae24a116689f7edefbc80c5c18a02b6fc..25e0686986165e236fc1b406f49ccdfffc9788fe 100644 GIT binary patch delta 34353 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

p$G$(mCw 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 P1qY#$x@?ArK*j+8!S1M# delta 26003 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 diff --git a/Mage.Server/plugins/mage-player-human.jar b/Mage.Server/plugins/mage-player-human.jar index 27e0ec6212e5c2a3dc350a98e7b8a7e439e2b510..215a15622fa2011c29db04767d51b65365e1c2b7 100644 GIT binary patch delta 10326 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 b { @@ -60,32 +56,41 @@ public class Combat implements Serializable, Copyable { private static FilterCreatureForCombat filterBlockers = new FilterCreatureForCombat(); protected List groups = new ArrayList(); + protected Map blockingGroups = new HashMap(); protected Set defenders = new HashSet(); protected UUID attackerId; //the player that is attacking - public Combat() {} + public Combat() { + } public Combat(final Combat combat) { this.attackerId = combat.attackerId; - for (CombatGroup group: combat.groups) { + for (CombatGroup group : combat.groups) { groups.add(group.copy()); } - for (UUID defenderId: combat.defenders) { + for (UUID defenderId : combat.defenders) { defenders.add(defenderId); } + for (Map.Entry group : combat.blockingGroups.entrySet()) { + blockingGroups.put(group.getKey(), group.getValue()); + } } public List getGroups() { return groups; } + public Collection getBlockingGroups() { + return blockingGroups.values(); + } + public Set getDefenders() { return defenders; } public List getAttackers() { List attackers = new ArrayList(); - for (CombatGroup group: groups) { + for (CombatGroup group : groups) { attackers.addAll(group.attackers); } return attackers; @@ -93,7 +98,7 @@ public class Combat implements Serializable, Copyable { public List getBlockers() { List blockers = new ArrayList(); - for (CombatGroup group: groups) { + for (CombatGroup group : groups) { blockers.addAll(group.blockers); } return blockers; @@ -101,6 +106,7 @@ public class Combat implements Serializable, Copyable { public void clear() { groups.clear(); + blockingGroups.clear(); defenders.clear(); attackerId = null; } @@ -108,7 +114,7 @@ public class Combat implements Serializable, Copyable { public int getValue(Game game) { StringBuilder sb = new StringBuilder(); sb.append(attackerId).append(defenders); - for (CombatGroup group: groups) { + for (CombatGroup group : groups) { sb.append(group.getValue(game)); } return sb.toString().hashCode(); @@ -131,23 +137,21 @@ public class Combat implements Serializable, Copyable { protected void checkAttackRequirements(Player player, Game game) { //20101001 - 508.1d - for (Permanent creature: game.getBattlefield().getAllActivePermanents(filterAttackers, player.getId())) { - for (RequirementEffect effect: game.getContinuousEffects().getApplicableRequirementEffects(creature, game)) { + for (Permanent creature : game.getBattlefield().getAllActivePermanents(filterAttackers, player.getId())) { + for (RequirementEffect effect : game.getContinuousEffects().getApplicableRequirementEffects(creature, game)) { if (effect.mustAttack(game)) { UUID defenderId = effect.mustAttackDefender(game.getContinuousEffects().getAbility(effect.getId()), game); if (defenderId == null) { if (defenders.size() == 1) { player.declareAttacker(creature.getId(), defenders.iterator().next(), game); - } - else { + } else { TargetDefender target = new TargetDefender(defenders, creature.getId()); target.setRequired(true); if (player.chooseTarget(Outcome.Damage, target, null, game)) { player.declareAttacker(creature.getId(), target.getFirstTarget(), game); } } - } - else { + } else { player.declareAttacker(creature.getId(), defenderId, game); } } @@ -160,7 +164,7 @@ public class Combat implements Serializable, Copyable { Player player = game.getPlayer(attackerId); //20101001 - 509.1c checkBlockRequirements(player, game); - for (UUID defenderId: getPlayerDefenders(game)) { + for (UUID defenderId : getPlayerDefenders(game)) { game.getPlayer(defenderId).selectBlockers(game); game.fireEvent(GameEvent.getEvent(GameEvent.EventType.DECLARED_BLOCKERS, defenderId, defenderId)); } @@ -170,9 +174,9 @@ public class Combat implements Serializable, Copyable { protected void checkBlockRequirements(Player player, Game game) { //20101001 - 509.1c //TODO: handle case where more than one attacker must be blocked - for (Permanent creature: game.getBattlefield().getActivePermanents(filterBlockers, player.getId(), game)) { + for (Permanent creature : game.getBattlefield().getActivePermanents(filterBlockers, player.getId(), game)) { if (game.getOpponents(attackerId).contains(creature.getControllerId())) { - for (RequirementEffect effect: game.getContinuousEffects().getApplicableRequirementEffects(creature, game)) { + for (RequirementEffect effect : game.getContinuousEffects().getApplicableRequirementEffects(creature, game)) { if (effect.mustBlock(game)) { UUID attackId = effect.mustBlockAttacker(game.getContinuousEffects().getAbility(effect.getId()), game); Player defender = game.getPlayer(creature.getControllerId()); @@ -210,7 +214,7 @@ public class Combat implements Serializable, Copyable { } break; case MULITPLE: - for (UUID opponentId: game.getOpponents(attackerId)) { + for (UUID opponentId : game.getOpponents(attackerId)) { addDefender(opponentId, game); } break; @@ -219,7 +223,7 @@ public class Combat implements Serializable, Copyable { private void addDefender(UUID defenderId, Game game) { defenders.add(defenderId); - for (Permanent permanent: game.getBattlefield().getAllActivePermanents(filterPlaneswalker, defenderId)) { + for (Permanent permanent : game.getBattlefield().getAllActivePermanents(filterPlaneswalker, defenderId)) { defenders.add(permanent.getId()); } } @@ -238,12 +242,36 @@ public class Combat implements Serializable, Copyable { groups.add(newGroup); } + // add blocking group for creatures that block more than one creature + public void addBlockingGroup(UUID blockerId, UUID attackerId, UUID playerId, Game game) { + Permanent blocker = game.getPermanent(blockerId); + if (blockerId != null && blocker != null && blocker.getBlocking() > 1) { + if (!blockingGroups.containsKey(blockerId)) { + CombatGroup newGroup = new CombatGroup(playerId, playerId != null); + newGroup.blockers.add(blockerId); + // add all blocked attackers + for (CombatGroup group : groups) { + if (group.getBlockers().contains(blockerId)) { + // take into account banding + for (UUID attacker : group.attackers) { + newGroup.attackers.add(attacker); + } + } + } + blockingGroups.put(blockerId, newGroup); + } else { + //TODO: handle banding + blockingGroups.get(blockerId).attackers.add(attackerId); + } + } + } + public void removeFromCombat(UUID creatureId, Game game) { Permanent creature = game.getPermanent(creatureId); if (creature != null) { creature.setAttacking(false); creature.setBlocking(0); - for (CombatGroup group: groups) { + for (CombatGroup group : groups) { group.remove(creatureId); } } @@ -251,15 +279,15 @@ public class Combat implements Serializable, Copyable { public void endCombat(Game game) { Permanent creature; - for (CombatGroup group: groups) { - for (UUID attacker: group.attackers) { + for (CombatGroup group : groups) { + for (UUID attacker : group.attackers) { creature = game.getPermanent(attacker); if (creature != null) { creature.setAttacking(false); creature.setBlocking(0); } } - for (UUID blocker: group.blockers) { + for (UUID blocker : group.blockers) { creature = game.getPermanent(blocker); if (creature != null) { creature.setAttacking(false); @@ -271,7 +299,7 @@ public class Combat implements Serializable, Copyable { } public boolean hasFirstOrDoubleStrike(Game game) { - for (CombatGroup group: groups) { + for (CombatGroup group : groups) { if (group.hasFirstOrDoubleStrike(game)) return true; } @@ -279,7 +307,7 @@ public class Combat implements Serializable, Copyable { } public CombatGroup findGroup(UUID attackerId) { - for (CombatGroup group: groups) { + for (CombatGroup group : groups) { if (group.getAttackers().contains(attackerId)) return group; } @@ -288,7 +316,7 @@ public class Combat implements Serializable, Copyable { public int totalUnblockedDamage(Game game) { int total = 0; - for (CombatGroup group: groups) { + for (CombatGroup group : groups) { if (group.getBlockers().isEmpty()) { total += group.totalAttackerDamage(game); } @@ -307,7 +335,7 @@ public class Combat implements Serializable, Copyable { } public boolean isAttacked(UUID defenderId, Game game) { - for (CombatGroup group: groups) { + for (CombatGroup group : groups) { if (group.getDefenderId().equals(defenderId)) return true; if (group.defenderIsPlaneswalker) { @@ -321,7 +349,7 @@ public class Combat implements Serializable, Copyable { public UUID getDefendingPlayer(UUID attackerId) { UUID defenderId = null; - for (CombatGroup group: groups) { + for (CombatGroup group : groups) { if (group.getAttackers().contains(attackerId)) { defenderId = group.getDefenderId(); break; @@ -332,13 +360,12 @@ public class Combat implements Serializable, Copyable { private Set getPlayerDefenders(Game game) { Set playerDefenders = new HashSet(); - for (CombatGroup group: groups) { + for (CombatGroup group : groups) { if (group.defenderIsPlaneswalker) { Permanent permanent = game.getPermanent(group.getDefenderId()); if (permanent != null) playerDefenders.add(permanent.getControllerId()); - } - else { + } else { playerDefenders.add(group.getDefenderId()); } } @@ -346,9 +373,15 @@ public class Combat implements Serializable, Copyable { } public void damageAssignmentOrder(Game game) { - for (CombatGroup group: groups) { + for (CombatGroup group : groups) { group.pickBlockerOrder(attackerId, game); } + for (Map.Entry blockingGroup : blockingGroups.entrySet()) { + Permanent blocker = game.getPermanent(blockingGroup.getKey()); + if (blocker != null) { + blockingGroup.getValue().pickAttackerOrder(blocker.getControllerId(), game); + } + } } @Override diff --git a/Mage/src/mage/game/combat/CombatGroup.java b/Mage/src/mage/game/combat/CombatGroup.java index 178d08cd295..4ae91f6b6b1 100644 --- a/Mage/src/mage/game/combat/CombatGroup.java +++ b/Mage/src/mage/game/combat/CombatGroup.java @@ -52,6 +52,7 @@ public class CombatGroup implements Serializable, Copyable { protected List attackers = new ArrayList(); protected List blockers = new ArrayList(); protected List blockerOrder = new ArrayList(); + protected List attackerOrder = new ArrayList(); protected boolean blocked; protected UUID defenderId; protected boolean defenderIsPlaneswalker; @@ -74,6 +75,9 @@ public class CombatGroup implements Serializable, Copyable { for (UUID orderId: group.blockerOrder) { this.blockerOrder.add(orderId); } + for (UUID orderId: group.attackerOrder) { + this.attackerOrder.add(orderId); + } } protected String getValue(Game game) { @@ -148,6 +152,17 @@ public class CombatGroup implements Serializable, Copyable { } } + public void assignDamageToAttackers(boolean first, Game game) { + if (blockers.size() > 0 && (!first || hasFirstOrDoubleStrike(game))) { + if (attackers.size() == 1) { + singleAttackerDamage(first, game); + } + else { + multiAttackerDamage(first, game); + } + } + } + private boolean canDamage(Permanent perm, boolean first) { return (first && hasFirstOrDoubleStrike(perm)) || (!first && !hasFirstStrike(perm)); } @@ -168,7 +183,6 @@ public class CombatGroup implements Serializable, Copyable { Permanent blocker = game.getPermanent(blockers.get(0)); Permanent attacker = game.getPermanent(attackers.get(0)); if (blocker != null && attacker != null) { - int blockerDamage = blocker.getPower().getValue(); if (canDamage(attacker, first)) { int damage = attacker.getPower().getValue(); if (hasTrample(attacker)) { @@ -190,7 +204,10 @@ public class CombatGroup implements Serializable, Copyable { } } if (canDamage(blocker, first)) { - attacker.damage(blockerDamage, blocker.getId(), game, true, true); + if (blocker.getBlocking() == 1) { // blocking several creatures handled separately + int blockerDamage = blocker.getPower().getValue(); + attacker.damage(blockerDamage, blocker.getId(), game, true, true); + } } } } @@ -198,10 +215,11 @@ public class CombatGroup implements Serializable, Copyable { private void multiBlockerDamage(boolean first, Game game) { //TODO: handle banding Permanent attacker = game.getPermanent(attackers.get(0)); + if (attacker == null) { + return; + } Player player = game.getPlayer(attacker.getControllerId()); int damage = attacker.getPower().getValue(); - if (attacker == null) - return; if (canDamage(attacker, first)) { Map assigned = new HashMap(); for (UUID blockerId: blockerOrder) { @@ -230,7 +248,9 @@ public class CombatGroup implements Serializable, Copyable { for (UUID blockerId: blockerOrder) { Permanent blocker = game.getPermanent(blockerId); if (canDamage(blocker, first)) { - attacker.damage(blocker.getPower().getValue(), blocker.getId(), game, true, true); + if (blocker.getBlocking() == 1) { // blocking several creatures handled separately + attacker.damage(blocker.getPower().getValue(), blocker.getId(), game, true, true); + } } } // Issue#73 @@ -249,6 +269,69 @@ public class CombatGroup implements Serializable, Copyable { } } + /** + * Damages attacking creatures by a creature that blocked several ones + * Damages only attackers as blocker was damage in {@link #singleBlockerDamage}. + * + * Handles abilities like "{this} an block any number of creatures.". + * + * @param first + * @param game + */ + private void singleAttackerDamage(boolean first, Game game) { + Permanent blocker = game.getPermanent(blockers.get(0)); + Permanent attacker = game.getPermanent(attackers.get(0)); + if (blocker != null && attacker != null) { + if (canDamage(blocker, first)) { + int damage = blocker.getPower().getValue(); + attacker.damage(damage, blocker.getId(), game, true, true); + } + } + } + + /** + * Damages attacking creatures by a creature that blocked several ones + * Damages only attackers as blocker was damage in either {@link #singleBlockerDamage} or {@link #multiBlockerDamage}. + * + * Handles abilities like "{this} an block any number of creatures.". + * + * @param first + * @param game + */ + private void multiAttackerDamage(boolean first, Game game) { + Permanent blocker = game.getPermanent(blockers.get(0)); + Player player = game.getPlayer(blocker.getControllerId()); + if (blocker == null) { + return; + } + int damage = blocker.getPower().getValue(); + + if (canDamage(blocker, first)) { + Map assigned = new HashMap(); + for (UUID attackerId: attackerOrder) { + Permanent attacker = game.getPermanent(attackerId); + int lethalDamage; + if (blocker.getAbilities().containsKey(DeathtouchAbility.getInstance().getId())) + lethalDamage = 1; + else + lethalDamage = attacker.getToughness().getValue() - attacker.getDamage(); + if (lethalDamage >= damage) { + assigned.put(attackerId, damage); + damage = 0; + break; + } + int damageAssigned = player.getAmount(lethalDamage, damage, "Assign damage to " + attacker.getName(), game); + assigned.put(attackerId, damageAssigned); + damage -= damageAssigned; + } + + for (Map.Entry entry : assigned.entrySet()) { + Permanent attacker = game.getPermanent(entry.getKey()); + attacker.damage(entry.getValue(), blocker.getId(), game, true, true); + } + } + } + private void defenderDamage(Permanent attacker, int amount, Game game) { if (this.defenderIsPlaneswalker) { Permanent defender = game.getPermanent(defenderId); @@ -277,7 +360,7 @@ public class CombatGroup implements Serializable, Copyable { } } Permanent blocker = game.getPermanent(blockerId); - if (blockerId != null) { + if (blockerId != null && blocker != null) { blocker.setBlocking(blocker.getBlocking() + 1); blockers.add(blockerId); blockerOrder.add(blockerId); @@ -310,6 +393,29 @@ public class CombatGroup implements Serializable, Copyable { } } } + + public void pickAttackerOrder(UUID playerId, Game game) { + if (attackers.isEmpty()) + return; + Player player = game.getPlayer(playerId); + List attackerList = new ArrayList(attackers); + attackerOrder.clear(); + while (true) { + if (attackerList.size() == 1) { + attackerOrder.add(attackerList.get(0)); + break; + } + else { + List attackerPerms = new ArrayList(); + for (UUID attackerId: attackerList) { + attackerPerms.add(game.getPermanent(attackerId)); + } + UUID attackerId = player.chooseAttackerOrder(attackerPerms, game); + attackerOrder.add(attackerId); + attackerList.remove(attackerId); + } + } + } public int totalAttackerDamage(Game game) { int total = 0; diff --git a/Mage/src/mage/game/turn/CombatDamageStep.java b/Mage/src/mage/game/turn/CombatDamageStep.java index fea9274efb6..7a72be55968 100644 --- a/Mage/src/mage/game/turn/CombatDamageStep.java +++ b/Mage/src/mage/game/turn/CombatDamageStep.java @@ -70,6 +70,9 @@ public class CombatDamageStep extends Step { for (CombatGroup group: game.getCombat().getGroups()) { group.assignDamage(first, game); } + for (CombatGroup group : game.getCombat().getBlockingGroups()) { + group.assignDamageToAttackers(first, game); + } } public boolean getFirst() { diff --git a/Mage/src/mage/players/Player.java b/Mage/src/mage/players/Player.java index 491d660ee36..5fef0679a5c 100644 --- a/Mage/src/mage/players/Player.java +++ b/Mage/src/mage/players/Player.java @@ -165,6 +165,7 @@ public interface Player extends MageItem, Copyable { public abstract Mode chooseMode(Modes modes, Ability source, Game game); public abstract void selectAttackers(Game game); public abstract void selectBlockers(Game game); + public abstract UUID chooseAttackerOrder(List attacker, Game game); public abstract UUID chooseBlockerOrder(List blockers, Game game); public abstract void assignDamage(int damage, List targets, String singleTargetName, UUID sourceId, Game game); public abstract int getAmount(int min, int max, String message, Game game); diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java index 11e0ad2146b..ae22dfff243 100644 --- a/Mage/src/mage/players/PlayerImpl.java +++ b/Mage/src/mage/players/PlayerImpl.java @@ -849,6 +849,7 @@ public abstract class PlayerImpl> implements Player, Ser CombatGroup group = game.getCombat().findGroup(attackerId); if (blocker != null && group != null && group.canBlock(blocker, game)) { group.addBlocker(blockerId, playerId, game); + game.getCombat().addBlockingGroup(blockerId, attackerId, playerId, game); } }