diff --git a/Mage.Sets/src/mage/cards/b/BattleMammoth.java b/Mage.Sets/src/mage/cards/b/BattleMammoth.java index e2e1297b70b1..868a36c2bc6d 100644 --- a/Mage.Sets/src/mage/cards/b/BattleMammoth.java +++ b/Mage.Sets/src/mage/cards/b/BattleMammoth.java @@ -13,9 +13,10 @@ import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; +import mage.game.stack.StackObject; import mage.players.Player; -import java.util.UUID; +import java.util.*; /** * @author TheElk801 @@ -71,13 +72,38 @@ public boolean checkEventType(GameEvent event, Game game) { @Override public boolean checkTrigger(GameEvent event, Game game) { + StackObject sourceObject = game.getStack().getStackObject(event.getSourceId()); + if (sourceObject == null) { + return false; + } + Player targetter = game.getPlayer(event.getPlayerId()); + if (targetter == null || !targetter.hasOpponent(this.controllerId, game)) { + return false; + } Permanent permanent = game.getPermanentOrLKIBattlefield(event.getTargetId()); if (permanent == null || !permanent.isControlledBy(this.getControllerId())) { return false; } - Player targetter = game.getPlayer(event.getPlayerId()); - Object object = game.getObject(event.getSourceId()); - return object != null && targetter != null && targetter.hasOpponent(this.getControllerId(), game); + // If a spell or ability an opponent controls targets a single permanent you control more than once, + // Battle Mammoth’s triggered ability will trigger only once. + // However, if a spell or ability an opponent controls targets multiple permanents you control, + // Battle Mammoth’s triggered ability will trigger once for each of those permanents. + + // targetMap - key - targetId, value - Set of stackObject Ids + Map> targetMap = (Map>) game.getState().getValue("targetMap" + this.id); + if (targetMap == null) { + targetMap = new HashMap<>(); + } + Set sourceObjects = targetMap.get(event.getTargetId()); + if (sourceObjects == null) { + sourceObjects = new HashSet<>(); + } + if (!sourceObjects.add(sourceObject.getId())) { + return false; + } + targetMap.put(event.getTargetId(), sourceObjects); + game.getState().setValue("targetMap" + this.id, targetMap); + return true; } @Override diff --git a/Mage.Sets/src/mage/cards/l/LeylineOfCombustion.java b/Mage.Sets/src/mage/cards/l/LeylineOfCombustion.java index d01e767e3147..cc442623c376 100644 --- a/Mage.Sets/src/mage/cards/l/LeylineOfCombustion.java +++ b/Mage.Sets/src/mage/cards/l/LeylineOfCombustion.java @@ -87,10 +87,9 @@ public boolean checkTrigger(GameEvent event, Game game) { if (sourceObjects == null) { sourceObjects = new HashSet<>(); } - if (sourceObjects.contains(sourceObject.getId())) { + if (!sourceObjects.add(sourceObject.getId())) { return false; } - sourceObjects.add(sourceObject.getId()); game.getState().setValue("sourceObjects" + this.id, sourceObjects); this.getEffects().clear(); Effect effect = new DamageTargetEffect(2);