From 8969e1a5de1bc6414d4f2c3ab9f061a39fd90ba8 Mon Sep 17 00:00:00 2001 From: xenohedron Date: Sat, 9 Mar 2024 21:29:29 -0500 Subject: [PATCH] fix #11921 (Norn's Decree) and similar fix Iron Mastiff fix Tahngarth, First Mate --- Mage.Sets/src/mage/cards/i/IronMastiff.java | 6 +++++- .../src/mage/cards/t/TahngarthFirstMate.java | 18 +++++++++++++++--- .../AttackedPlayersPoisonedCondition.java | 19 +++++++++++++------ 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/Mage.Sets/src/mage/cards/i/IronMastiff.java b/Mage.Sets/src/mage/cards/i/IronMastiff.java index 79145d0241c..75a41b5ac77 100644 --- a/Mage.Sets/src/mage/cards/i/IronMastiff.java +++ b/Mage.Sets/src/mage/cards/i/IronMastiff.java @@ -13,6 +13,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.game.Game; +import mage.game.combat.CombatGroup; import mage.players.Player; import java.util.Objects; @@ -81,8 +82,11 @@ class IronMastiffEffect extends RollDieWithResultTableEffect { } int toRoll = game .getCombat() - .getDefenders() + .getGroups() .stream() + .map(CombatGroup::getDefenderId) + .filter(Objects::nonNull) + .distinct() .map(game::getPlayer) .filter(Objects::nonNull) .mapToInt(x -> 1) diff --git a/Mage.Sets/src/mage/cards/t/TahngarthFirstMate.java b/Mage.Sets/src/mage/cards/t/TahngarthFirstMate.java index aaff03f92f0..2f4ba15cb0e 100644 --- a/Mage.Sets/src/mage/cards/t/TahngarthFirstMate.java +++ b/Mage.Sets/src/mage/cards/t/TahngarthFirstMate.java @@ -14,12 +14,14 @@ import mage.constants.*; import mage.filter.common.FilterPlayerOrPlaneswalker; import mage.filter.predicate.Predicate; import mage.game.Game; +import mage.game.combat.CombatGroup; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.common.TargetPlayerOrPlaneswalker; import mage.target.targetpointer.FixedTarget; +import java.util.Objects; import java.util.UUID; /** @@ -143,7 +145,12 @@ enum TahngarthFirstMatePlayerPredicate implements Predicate { @Override public boolean apply(Player input, Game game) { - return game.getCombat().getDefenders().contains(input.getId()); + return game.getCombat() + .getGroups() + .stream() + .map(CombatGroup::getDefenderId) + .filter(Objects::nonNull) + .anyMatch(id -> id.equals(input.getId())); } } @@ -152,6 +159,11 @@ enum TahngarthFirstMatePermanentPredicate implements Predicate { @Override public boolean apply(Permanent input, Game game) { - return game.getCombat().getDefenders().contains(input.getId()); + return game.getCombat() + .getGroups() + .stream() + .map(CombatGroup::getDefenderId) + .filter(Objects::nonNull) + .anyMatch(id -> id.equals(input.getId())); } -} \ No newline at end of file +} diff --git a/Mage/src/main/java/mage/abilities/condition/common/AttackedPlayersPoisonedCondition.java b/Mage/src/main/java/mage/abilities/condition/common/AttackedPlayersPoisonedCondition.java index f0659ff46fc..2ab5bbf468e 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/AttackedPlayersPoisonedCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/AttackedPlayersPoisonedCondition.java @@ -1,11 +1,12 @@ - package mage.abilities.condition.common; import mage.abilities.Ability; import mage.abilities.condition.Condition; import mage.counters.CounterType; import mage.game.Game; -import mage.watchers.common.PlayerAttackedStepWatcher; +import mage.game.combat.CombatGroup; + +import java.util.Objects; /** * A condition which checks whether any players being attacked are poisoned @@ -14,17 +15,23 @@ import mage.watchers.common.PlayerAttackedStepWatcher; * @author alexander-novo */ public enum AttackedPlayersPoisonedCondition implements Condition { - instance; @Override public boolean apply(Game game, Ability source) { - return game.getCombat().getDefenders().stream().map(defender -> game.getPlayer(defender)) - .anyMatch(player -> player != null && player.getCounters().containsKey(CounterType.POISON)); + return game.getCombat() + .getGroups() + .stream() + .map(CombatGroup::getDefenderId) + .filter(Objects::nonNull) + .distinct() + .map(game::getPlayer) + .filter(Objects::nonNull) + .anyMatch(player -> player.getCounters().containsKey(CounterType.POISON)); } @Override public String toString() { return "one or more players being attacked are poisoned"; } -} \ No newline at end of file +}