From ba3b0e4cb7f37f0d77d705b73213f3b4c3b27fc0 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Wed, 13 Sep 2023 03:49:59 +0400 Subject: [PATCH] Merge fix --- ...ombatDamageDealtToYouTriggeredAbility.java | 36 ++++++++++++------ .../mage/game/events/DamagedBatchEvent.java | 38 ++----------------- 2 files changed, 28 insertions(+), 46 deletions(-) diff --git a/Mage/src/main/java/mage/abilities/common/CombatDamageDealtToYouTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/CombatDamageDealtToYouTriggeredAbility.java index eeec956220f..c2e3b4128b9 100644 --- a/Mage/src/main/java/mage/abilities/common/CombatDamageDealtToYouTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/CombatDamageDealtToYouTriggeredAbility.java @@ -5,19 +5,23 @@ import mage.abilities.effects.Effect; import mage.constants.Zone; import mage.game.Game; import mage.game.events.DamagedBatchForPlayersEvent; +import mage.game.events.DamagedEvent; import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** * A triggered ability for whenever one or more creatures deal combat damage to * you. Has an optional component for setting the target pointer to the opponent * whose creatures dealt combat damage to you. - * + * * @author alexander-novo */ public class CombatDamageDealtToYouTriggeredAbility extends TriggeredAbilityImpl { - // Whether or not the ability should set a target targetting the opponent who + // Whether the ability should set a target targetting the opponent who // controls the creatures who dealt damage to you private final boolean setTarget; @@ -47,7 +51,7 @@ public class CombatDamageDealtToYouTriggeredAbility extends TriggeredAbilityImpl * @param optional Whether or not the ability is optional */ public CombatDamageDealtToYouTriggeredAbility(Zone zone, Effect effect, boolean setTarget, - boolean optional) { + boolean optional) { super(zone, effect, optional); this.setTarget = setTarget; @@ -68,19 +72,29 @@ public class CombatDamageDealtToYouTriggeredAbility extends TriggeredAbilityImpl @Override public boolean checkTrigger(GameEvent event, Game game) { - DamagedBatchForPlayersEvent damageEvent = (DamagedBatchForPlayersEvent) event; - boolean check = damageEvent.getEvents() - .stream() - .anyMatch(c -> c.isCombatDamage() && c.getPlayerId() == this.controllerId); + DamagedBatchForPlayersEvent dEvent = (DamagedBatchForPlayersEvent) event; - if (check) { - if (this.setTarget) { - this.getEffects().setTargetPointer( - new FixedTarget(game.getPermanent(damageEvent.getSourceId()).getControllerId())); + boolean isDamaged = false; + UUID damageSourceControllerID = null; + for (DamagedEvent damagedEvent : dEvent.getEvents()) { + if (damagedEvent.isCombatDamage() && damagedEvent.getPlayerId() == this.controllerId) { + isDamaged = true; + // TODO: current code support only one controller + // (it's can be potentially bugged in team mode with multiple attack players) + Permanent damageSource = game.getPermanent(damagedEvent.getSourceId()); + if (damageSource != null) { + damageSourceControllerID = damageSource.getControllerId(); + } } + } + if (isDamaged) { + if (this.setTarget && damageSourceControllerID != null) { + this.getEffects().setTargetPointer(new FixedTarget(damageSourceControllerID)); + } return true; } + return false; } diff --git a/Mage/src/main/java/mage/game/events/DamagedBatchEvent.java b/Mage/src/main/java/mage/game/events/DamagedBatchEvent.java index c0904b8254d..355f9fbc423 100644 --- a/Mage/src/main/java/mage/game/events/DamagedBatchEvent.java +++ b/Mage/src/main/java/mage/game/events/DamagedBatchEvent.java @@ -1,10 +1,8 @@ package mage.game.events; import java.util.HashSet; -import java.util.Objects; import java.util.Set; import java.util.UUID; -import java.util.stream.Collectors; /** * @author TheElk801 @@ -31,46 +29,16 @@ public abstract class DamagedBatchEvent extends GameEvent { .sum(); } - public Set getTargetIds() { - return events - .stream() - .map(GameEvent::getTargetId) - .filter(Objects::nonNull) - .collect(Collectors.toSet()); - } - @Override @Deprecated // events can store a diff value, so search it from events list instead public UUID getTargetId() { - // TODO: replace it by getTargetIds or seearch in getEvents, enable exception - //throw new IllegalStateException("Wrong code usage. Must search batch value from a list"); - return events - .stream() - .map(GameEvent::getTargetId) - .filter(Objects::nonNull) - .findFirst() - .orElse(null); - } - - public Set getSourceIds() { - return events - .stream() - .map(GameEvent::getSourceId) - .filter(Objects::nonNull) - .collect(Collectors.toSet()); + throw new IllegalStateException("Wrong code usage. Must search value from a getEvents list."); } @Override @Deprecated // events can store a diff value, so search it from events list instead public UUID getSourceId() { - // TODO: replace it by getSourceIds or seearch in getEvents, enable exception - //throw new IllegalStateException("Wrong code usage. Must search batch value from a list"); - return events - .stream() - .map(GameEvent::getSourceId) - .filter(Objects::nonNull) - .findFirst() - .orElse(null); + throw new IllegalStateException("Wrong code usage. Must search value from a getEvents list."); } public void addEvent(DamagedEvent event) { @@ -90,7 +58,7 @@ public abstract class DamagedBatchEvent extends GameEvent { event = new DamagedBatchForPermanentsEvent(); event.addEvent(damagedEvent); } else { - event = null; + throw new IllegalArgumentException("Wrong code usage. Unknown damage event for a new batch: " + damagedEvent.getClass().getName()); } return event; }