diff --git a/forge-ai/src/main/java/forge/ai/GameState.java b/forge-ai/src/main/java/forge/ai/GameState.java index a5a3ece3c51..4f42e2b7579 100644 --- a/forge-ai/src/main/java/forge/ai/GameState.java +++ b/forge-ai/src/main/java/forge/ai/GameState.java @@ -758,30 +758,10 @@ public abstract class GameState { } game.fireEvent(new GameEventAttackersDeclared(attackingPlayer, attackersMap)); - if (!combat.getAttackers().isEmpty()) { - List attackedTarget = new ArrayList<>(); - for (GameEntity ge : combat.getDefenders()) { - if (!combat.getAttackersOf(ge).isEmpty()) { - final Map runParams = AbilityKey.newMap(); - runParams.put(AbilityKey.Attackers, combat.getAttackersOf(ge)); - runParams.put(AbilityKey.AttackingPlayer, combat.getAttackingPlayer()); - runParams.put(AbilityKey.AttackedTarget, ge); - attackedTarget.add(ge); - game.getTriggerHandler().runTrigger(TriggerType.AttackersDeclaredOneTarget, runParams, false); - } - } - final Map runParams = AbilityKey.newMap(); - runParams.put(AbilityKey.Attackers, combat.getAttackers()); - runParams.put(AbilityKey.AttackingPlayer, combat.getAttackingPlayer()); - runParams.put(AbilityKey.AttackedTarget, attackedTarget); - game.getTriggerHandler().runTrigger(TriggerType.AttackersDeclared, runParams, false); - } - for (final Card c : combat.getAttackers()) { - CombatUtil.checkDeclaredAttacker(game, c, combat); + CombatUtil.checkDeclaredAttacker(game, c, combat, false); } - game.getTriggerHandler().resetActiveTriggers(); game.updateCombatForView(); game.fireEvent(new GameEventCombatChanged()); diff --git a/forge-game/src/main/java/forge/game/combat/CombatUtil.java b/forge-game/src/main/java/forge/game/combat/CombatUtil.java index 75583a7bfeb..5ae96a0cc7c 100644 --- a/forge-game/src/main/java/forge/game/combat/CombatUtil.java +++ b/forge-game/src/main/java/forge/game/combat/CombatUtil.java @@ -352,17 +352,19 @@ public class CombatUtil { * @param c * a {@link forge.game.card.Card} object. */ - public static void checkDeclaredAttacker(final Game game, final Card c, final Combat combat) { + public static void checkDeclaredAttacker(final Game game, final Card c, final Combat combat, boolean triggers) { // Run triggers - final Map runParams = AbilityKey.newMap(); - runParams.put(AbilityKey.Attacker, c); - final List otherAttackers = combat.getAttackers(); - otherAttackers.remove(c); - runParams.put(AbilityKey.OtherAttackers, otherAttackers); - runParams.put(AbilityKey.Attacked, combat.getDefenderByAttacker(c)); - runParams.put(AbilityKey.DefendingPlayer, combat.getDefenderPlayerByAttacker(c)); - runParams.put(AbilityKey.Defenders, combat.getDefenders()); - game.getTriggerHandler().runTrigger(TriggerType.Attacks, runParams, false); + if (triggers) { + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Attacker, c); + final List otherAttackers = combat.getAttackers(); + otherAttackers.remove(c); + runParams.put(AbilityKey.OtherAttackers, otherAttackers); + runParams.put(AbilityKey.Attacked, combat.getDefenderByAttacker(c)); + runParams.put(AbilityKey.DefendingPlayer, combat.getDefenderPlayerByAttacker(c)); + runParams.put(AbilityKey.Defenders, combat.getDefenders()); + game.getTriggerHandler().runTrigger(TriggerType.Attacks, runParams, false); + } c.getDamageHistory().setCreatureAttackedThisCombat(true); c.getDamageHistory().clearNotAttackedSinceLastUpkeepOf(); diff --git a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java index 3c1b38e17ef..72c509580c3 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java @@ -632,7 +632,7 @@ public class PhaseHandler implements java.io.Serializable { } for (final Card c : combat.getAttackers()) { - CombatUtil.checkDeclaredAttacker(game, c, combat); + CombatUtil.checkDeclaredAttacker(game, c, combat, true); } game.getTriggerHandler().resetActiveTriggers();