From 6c15a05c8eb23fe709d2759dfc8bf133baf7ef9c Mon Sep 17 00:00:00 2001 From: Adam Pantel <> Date: Sun, 16 Jun 2019 14:28:05 -0400 Subject: [PATCH] Fix defender selection on "enters attacking" effects --- .../ability/effects/ChangeZoneEffect.java | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index 04b2e5b66da..52f2dfa00dd 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -543,13 +543,27 @@ public class ChangeZoneEffect extends SpellAbilityEffect { movedCard.turnFaceDown(true); } if (sa.hasParam("Attacking")) { - // What should they attack? - FCollectionView defenders = game.getCombat().getDefenders(); - if (!defenders.isEmpty()) { - // Blockeres are already declared, set this to unblocked - game.getCombat().addAttacker(tgtC, defenders.getFirst()); - game.getCombat().getBandOfAttacker(tgtC).setBlocked(false); - game.fireEvent(new GameEventCombatChanged()); + final Combat combat = game.getCombat(); + if ( null != combat ) { + final FCollectionView e = combat.getDefenders(); + + GameEntity defender = null; + if (sa.hasParam("DefinedDefender")) { + FCollection objs = AbilityUtils.getDefinedObjects(sa.getHostCard(), sa.getParam("DefinedDefender"), sa); + for(GameObject obj : objs) { + if (obj instanceof GameEntity) { + defender = (GameEntity)obj; + break; + } + } + } else { + defender = player.getController().chooseSingleEntityForEffect(e, sa, "Declare a defender for " + movedCard ); + } + if (defender != null) { + combat.addAttacker(movedCard, defender); + game.getCombat().getBandOfAttacker(movedCard).setBlocked(false); + game.fireEvent(new GameEventCombatChanged()); + } } } if (sa.hasParam("Ninjutsu")) { @@ -1028,6 +1042,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect { } if (defender != null) { combat.addAttacker(c, defender); + game.getCombat().getBandOfAttacker(c).setBlocked(false); game.fireEvent(new GameEventCombatChanged()); } }