From 316e0dc1f3a645eee35967deb426d81fe885ffc5 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Wed, 13 Sep 2023 03:05:54 +0400 Subject: [PATCH] refactor: improved damaged batch events, added todo to fix (related to #10870) --- .../mage/cards/a/AlelaCunningConqueror.java | 2 +- Mage.Sets/src/mage/cards/b/BenSolo.java | 6 +-- .../src/mage/cards/b/BlazingSunsteel.java | 6 +-- .../mage/cards/b/BreechesBrazenPlunderer.java | 6 +-- .../src/mage/cards/c/ContaminantGrafter.java | 6 +-- Mage.Sets/src/mage/cards/f/Fiendlash.java | 6 +-- .../src/mage/cards/f/ForthEorlingas.java | 6 +-- .../src/mage/cards/h/HordewingSkaab.java | 6 +-- .../src/mage/cards/h/HowlpackAvenger.java | 3 +- .../mage/cards/i/ImodaneThePyrohammer.java | 6 +-- .../cards/m/MalcolmKeenEyedNavigator.java | 6 +-- .../src/mage/cards/o/OliviasAttendants.java | 4 +- .../mage/cards/r/RisonaAsariCommander.java | 2 +- .../src/mage/cards/z/ZurgoAndOjutai.java | 4 +- ...ombatDamageDealtToYouTriggeredAbility.java | 8 ++- ...ombatDamageControlledTriggeredAbility.java | 2 +- .../DealtDamageToSourceTriggeredAbility.java | 6 +-- .../java/mage/designations/Initiative.java | 6 +-- Mage/src/main/java/mage/game/GameState.java | 54 ++++++++----------- .../mage/game/events/DamagedBatchEvent.java | 27 +++++++++- .../events/DamagedBatchForOnePlayerEvent.java | 14 +++++ .../DamagedBatchForPermanentsEvent.java | 11 ++++ .../events/DamagedBatchForPlayersEvent.java | 11 ++++ .../events/DamagedPermanentBatchEvent.java | 11 ---- .../game/events/DamagedPlayerBatchEvent.java | 11 ---- .../DamagedPlayerBatchOnePlayerEvent.java | 14 ----- .../main/java/mage/game/events/GameEvent.java | 19 +++---- 27 files changed, 138 insertions(+), 125 deletions(-) create mode 100644 Mage/src/main/java/mage/game/events/DamagedBatchForOnePlayerEvent.java create mode 100644 Mage/src/main/java/mage/game/events/DamagedBatchForPermanentsEvent.java create mode 100644 Mage/src/main/java/mage/game/events/DamagedBatchForPlayersEvent.java delete mode 100644 Mage/src/main/java/mage/game/events/DamagedPermanentBatchEvent.java delete mode 100644 Mage/src/main/java/mage/game/events/DamagedPlayerBatchEvent.java delete mode 100644 Mage/src/main/java/mage/game/events/DamagedPlayerBatchOnePlayerEvent.java diff --git a/Mage.Sets/src/mage/cards/a/AlelaCunningConqueror.java b/Mage.Sets/src/mage/cards/a/AlelaCunningConqueror.java index 567ef54d6ef..ba8ec03702a 100644 --- a/Mage.Sets/src/mage/cards/a/AlelaCunningConqueror.java +++ b/Mage.Sets/src/mage/cards/a/AlelaCunningConqueror.java @@ -83,7 +83,7 @@ class AlelaCunningConquerorTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PLAYER_BATCH_ONE_PLAYER; + return event.getType() == GameEvent.EventType.DAMAGED_BATCH_FOR_ONE_PLAYER; } @Override diff --git a/Mage.Sets/src/mage/cards/b/BenSolo.java b/Mage.Sets/src/mage/cards/b/BenSolo.java index c388361d7f9..0cb1245c9fd 100644 --- a/Mage.Sets/src/mage/cards/b/BenSolo.java +++ b/Mage.Sets/src/mage/cards/b/BenSolo.java @@ -10,7 +10,7 @@ import mage.cards.CardSetInfo; import mage.constants.*; import mage.game.Game; import mage.game.events.DamagedEvent; -import mage.game.events.DamagedPermanentBatchEvent; +import mage.game.events.DamagedBatchForPermanentsEvent; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.players.Player; @@ -70,7 +70,7 @@ class BenSoloTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PERMANENT_BATCH; + return event.getType() == GameEvent.EventType.DAMAGED_BATCH_FOR_PERMANENTS; } @Override @@ -83,7 +83,7 @@ class BenSoloTriggeredAbility extends TriggeredAbilityImpl { } int damage = 0; - DamagedPermanentBatchEvent dEvent = (DamagedPermanentBatchEvent) event; + DamagedBatchForPermanentsEvent dEvent = (DamagedBatchForPermanentsEvent) event; Set set = dEvent.getEvents(); for (DamagedEvent damagedEvent : set) { UUID targetID = damagedEvent.getTargetId(); diff --git a/Mage.Sets/src/mage/cards/b/BlazingSunsteel.java b/Mage.Sets/src/mage/cards/b/BlazingSunsteel.java index 846aa11015a..39b2519aa44 100644 --- a/Mage.Sets/src/mage/cards/b/BlazingSunsteel.java +++ b/Mage.Sets/src/mage/cards/b/BlazingSunsteel.java @@ -16,7 +16,7 @@ import mage.constants.SubType; import mage.constants.Zone; import mage.game.Game; import mage.game.events.DamagedEvent; -import mage.game.events.DamagedPermanentBatchEvent; +import mage.game.events.DamagedBatchForPermanentsEvent; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.players.Player; @@ -76,7 +76,7 @@ class BlazingSunsteelTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PERMANENT_BATCH; + return event.getType() == GameEvent.EventType.DAMAGED_BATCH_FOR_PERMANENTS; } @Override @@ -92,7 +92,7 @@ class BlazingSunsteelTriggeredAbility extends TriggeredAbilityImpl { } int damage = 0; - DamagedPermanentBatchEvent dEvent = (DamagedPermanentBatchEvent) event; + DamagedBatchForPermanentsEvent dEvent = (DamagedBatchForPermanentsEvent) event; for (DamagedEvent damagedEvent : dEvent.getEvents()) { UUID targetID = damagedEvent.getTargetId(); if (targetID == null) { diff --git a/Mage.Sets/src/mage/cards/b/BreechesBrazenPlunderer.java b/Mage.Sets/src/mage/cards/b/BreechesBrazenPlunderer.java index e6ce35aa67f..d4a12de49d9 100644 --- a/Mage.Sets/src/mage/cards/b/BreechesBrazenPlunderer.java +++ b/Mage.Sets/src/mage/cards/b/BreechesBrazenPlunderer.java @@ -10,7 +10,7 @@ import mage.cards.*; import mage.constants.*; import mage.game.Game; import mage.game.events.DamagedEvent; -import mage.game.events.DamagedPlayerBatchEvent; +import mage.game.events.DamagedBatchForPlayersEvent; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.players.Player; @@ -67,12 +67,12 @@ class BreechesBrazenPlundererTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PLAYER_BATCH; + return event.getType() == GameEvent.EventType.DAMAGED_BATCH_FOR_PLAYERS; } @Override public boolean checkTrigger(GameEvent event, Game game) { - DamagedPlayerBatchEvent dEvent = (DamagedPlayerBatchEvent) event; + DamagedBatchForPlayersEvent dEvent = (DamagedBatchForPlayersEvent) event; Set opponents = new HashSet<>(); for (DamagedEvent damagedEvent : dEvent.getEvents()) { Permanent permanent = game.getPermanent(damagedEvent.getSourceId()); diff --git a/Mage.Sets/src/mage/cards/c/ContaminantGrafter.java b/Mage.Sets/src/mage/cards/c/ContaminantGrafter.java index a5754720e7e..0c0ec3d56c5 100644 --- a/Mage.Sets/src/mage/cards/c/ContaminantGrafter.java +++ b/Mage.Sets/src/mage/cards/c/ContaminantGrafter.java @@ -20,7 +20,7 @@ import mage.constants.Zone; import mage.filter.StaticFilters; import mage.game.Game; import mage.game.events.DamagedEvent; -import mage.game.events.DamagedPlayerBatchEvent; +import mage.game.events.DamagedBatchForPlayersEvent; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; @@ -82,12 +82,12 @@ class ContaminantGrafterTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PLAYER_BATCH; + return event.getType() == GameEvent.EventType.DAMAGED_BATCH_FOR_PLAYERS; } @Override public boolean checkTrigger(GameEvent event, Game game) { - DamagedPlayerBatchEvent dEvent = (DamagedPlayerBatchEvent) event; + DamagedBatchForPlayersEvent dEvent = (DamagedBatchForPlayersEvent) event; for (DamagedEvent damagedEvent : dEvent.getEvents()) { if (!damagedEvent.isCombatDamage()) { continue; diff --git a/Mage.Sets/src/mage/cards/f/Fiendlash.java b/Mage.Sets/src/mage/cards/f/Fiendlash.java index 3d611a1e03a..b7aa24b320e 100644 --- a/Mage.Sets/src/mage/cards/f/Fiendlash.java +++ b/Mage.Sets/src/mage/cards/f/Fiendlash.java @@ -20,7 +20,7 @@ import mage.constants.SubType; import mage.constants.Zone; import mage.game.Game; import mage.game.events.DamagedEvent; -import mage.game.events.DamagedPermanentBatchEvent; +import mage.game.events.DamagedBatchForPermanentsEvent; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.players.Player; @@ -80,7 +80,7 @@ class FiendlashTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PERMANENT_BATCH; + return event.getType() == GameEvent.EventType.DAMAGED_BATCH_FOR_PERMANENTS; } @Override @@ -97,7 +97,7 @@ class FiendlashTriggeredAbility extends TriggeredAbilityImpl { game.getState().setValue("Fiendlash" + equipment.getId(), attachedCreature); - DamagedPermanentBatchEvent dEvent = (DamagedPermanentBatchEvent) event; + DamagedBatchForPermanentsEvent dEvent = (DamagedBatchForPermanentsEvent) event; for (DamagedEvent damagedEvent : dEvent.getEvents()) { UUID targetID = damagedEvent.getTargetId(); if (targetID == null) { diff --git a/Mage.Sets/src/mage/cards/f/ForthEorlingas.java b/Mage.Sets/src/mage/cards/f/ForthEorlingas.java index 14ddf631e75..61a34339ce7 100644 --- a/Mage.Sets/src/mage/cards/f/ForthEorlingas.java +++ b/Mage.Sets/src/mage/cards/f/ForthEorlingas.java @@ -13,7 +13,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.game.Game; import mage.game.events.DamagedEvent; -import mage.game.events.DamagedPlayerBatchEvent; +import mage.game.events.DamagedBatchForPlayersEvent; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.game.permanent.token.HumanKnightToken; @@ -60,12 +60,12 @@ class ForthEorlingasTriggeredAbility extends DelayedTriggeredAbility { @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PLAYER_BATCH; + return event.getType() == GameEvent.EventType.DAMAGED_BATCH_FOR_PLAYERS; } @Override public boolean checkTrigger(GameEvent event, Game game) { - DamagedPlayerBatchEvent dEvent = (DamagedPlayerBatchEvent) event; + DamagedBatchForPlayersEvent dEvent = (DamagedBatchForPlayersEvent) event; for (DamagedEvent damagedEvent : dEvent.getEvents()) { if (!damagedEvent.isCombatDamage()) { continue; diff --git a/Mage.Sets/src/mage/cards/h/HordewingSkaab.java b/Mage.Sets/src/mage/cards/h/HordewingSkaab.java index ffca3d92a1c..1ba5aa99c69 100644 --- a/Mage.Sets/src/mage/cards/h/HordewingSkaab.java +++ b/Mage.Sets/src/mage/cards/h/HordewingSkaab.java @@ -16,7 +16,7 @@ import mage.filter.FilterPermanent; import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.events.DamagedEvent; -import mage.game.events.DamagedPlayerBatchEvent; +import mage.game.events.DamagedBatchForPlayersEvent; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; @@ -73,12 +73,12 @@ class HordewingSkaabTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PLAYER_BATCH; + return event.getType() == GameEvent.EventType.DAMAGED_BATCH_FOR_PLAYERS; } @Override public boolean checkTrigger(GameEvent event, Game game) { - DamagedPlayerBatchEvent dEvent = (DamagedPlayerBatchEvent) event; + DamagedBatchForPlayersEvent dEvent = (DamagedBatchForPlayersEvent) event; Set opponents = new HashSet<>(); for (DamagedEvent damagedEvent : dEvent.getEvents()) { if (!damagedEvent.isCombatDamage()) { diff --git a/Mage.Sets/src/mage/cards/h/HowlpackAvenger.java b/Mage.Sets/src/mage/cards/h/HowlpackAvenger.java index aae450a80c1..7e56790709b 100644 --- a/Mage.Sets/src/mage/cards/h/HowlpackAvenger.java +++ b/Mage.Sets/src/mage/cards/h/HowlpackAvenger.java @@ -16,7 +16,6 @@ import mage.constants.SubType; import mage.constants.Zone; import mage.game.Game; import mage.game.events.DamagedBatchEvent; -import mage.game.events.DamagedPermanentBatchEvent; import mage.game.events.GameEvent; import mage.target.common.TargetAnyTarget; @@ -77,7 +76,7 @@ class HowlpackAvengerTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PERMANENT_BATCH; + return event.getType() == GameEvent.EventType.DAMAGED_BATCH_FOR_PERMANENTS; } @Override diff --git a/Mage.Sets/src/mage/cards/i/ImodaneThePyrohammer.java b/Mage.Sets/src/mage/cards/i/ImodaneThePyrohammer.java index 6df5010624d..0916091b992 100644 --- a/Mage.Sets/src/mage/cards/i/ImodaneThePyrohammer.java +++ b/Mage.Sets/src/mage/cards/i/ImodaneThePyrohammer.java @@ -16,7 +16,7 @@ import mage.filter.FilterSpell; import mage.filter.StaticFilters; import mage.filter.predicate.other.HasOnlySingleTargetPermanentPredicate; import mage.game.Game; -import mage.game.events.DamagedPermanentBatchEvent; +import mage.game.events.DamagedBatchForPermanentsEvent; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.game.stack.StackObject; @@ -80,12 +80,12 @@ class ImodaneThePyrohammerTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PERMANENT_BATCH; + return event.getType() == GameEvent.EventType.DAMAGED_BATCH_FOR_PERMANENTS; } @Override public boolean checkTrigger(GameEvent event, Game game) { - DamagedPermanentBatchEvent dEvent = (DamagedPermanentBatchEvent) event; + DamagedBatchForPermanentsEvent dEvent = (DamagedBatchForPermanentsEvent) event; int damage = dEvent .getEvents() .stream() diff --git a/Mage.Sets/src/mage/cards/m/MalcolmKeenEyedNavigator.java b/Mage.Sets/src/mage/cards/m/MalcolmKeenEyedNavigator.java index a743240bac4..07944f8d4ca 100644 --- a/Mage.Sets/src/mage/cards/m/MalcolmKeenEyedNavigator.java +++ b/Mage.Sets/src/mage/cards/m/MalcolmKeenEyedNavigator.java @@ -13,7 +13,7 @@ import mage.constants.SuperType; import mage.constants.Zone; import mage.game.Game; import mage.game.events.DamagedEvent; -import mage.game.events.DamagedPlayerBatchEvent; +import mage.game.events.DamagedBatchForPlayersEvent; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.game.permanent.token.TreasureToken; @@ -68,12 +68,12 @@ class MalcolmKeenEyedNavigatorTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PLAYER_BATCH; + return event.getType() == GameEvent.EventType.DAMAGED_BATCH_FOR_PLAYERS; } @Override public boolean checkTrigger(GameEvent event, Game game) { - DamagedPlayerBatchEvent dEvent = (DamagedPlayerBatchEvent) event; + DamagedBatchForPlayersEvent dEvent = (DamagedBatchForPlayersEvent) event; Set opponents = new HashSet<>(); for (DamagedEvent damagedEvent : dEvent.getEvents()) { Permanent permanent = game.getPermanent(damagedEvent.getSourceId()); diff --git a/Mage.Sets/src/mage/cards/o/OliviasAttendants.java b/Mage.Sets/src/mage/cards/o/OliviasAttendants.java index dd184f88255..71fcee001dd 100644 --- a/Mage.Sets/src/mage/cards/o/OliviasAttendants.java +++ b/Mage.Sets/src/mage/cards/o/OliviasAttendants.java @@ -72,8 +72,8 @@ class OliviasAttendantsTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PLAYER_BATCH - || event.getType() == GameEvent.EventType.DAMAGED_PERMANENT_BATCH; + return event.getType() == GameEvent.EventType.DAMAGED_BATCH_FOR_PLAYERS + || event.getType() == GameEvent.EventType.DAMAGED_BATCH_FOR_PERMANENTS; } @Override diff --git a/Mage.Sets/src/mage/cards/r/RisonaAsariCommander.java b/Mage.Sets/src/mage/cards/r/RisonaAsariCommander.java index 2dae294c93d..f1b2debb6fb 100644 --- a/Mage.Sets/src/mage/cards/r/RisonaAsariCommander.java +++ b/Mage.Sets/src/mage/cards/r/RisonaAsariCommander.java @@ -80,7 +80,7 @@ class RisonaAsariCommanderTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PLAYER_BATCH; + return event.getType() == GameEvent.EventType.DAMAGED_BATCH_FOR_PLAYERS; } @Override diff --git a/Mage.Sets/src/mage/cards/z/ZurgoAndOjutai.java b/Mage.Sets/src/mage/cards/z/ZurgoAndOjutai.java index 16e08d415d3..d4ff98c2f06 100644 --- a/Mage.Sets/src/mage/cards/z/ZurgoAndOjutai.java +++ b/Mage.Sets/src/mage/cards/z/ZurgoAndOjutai.java @@ -91,8 +91,8 @@ class ZurgoAndOjutaiTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PLAYER_BATCH - || event.getType() == GameEvent.EventType.DAMAGED_PERMANENT_BATCH; + return event.getType() == GameEvent.EventType.DAMAGED_BATCH_FOR_PLAYERS + || event.getType() == GameEvent.EventType.DAMAGED_BATCH_FOR_PERMANENTS; } @Override diff --git a/Mage/src/main/java/mage/abilities/common/CombatDamageDealtToYouTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/CombatDamageDealtToYouTriggeredAbility.java index 96cf8c137f9..eeec956220f 100644 --- a/Mage/src/main/java/mage/abilities/common/CombatDamageDealtToYouTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/CombatDamageDealtToYouTriggeredAbility.java @@ -4,9 +4,7 @@ import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.Effect; import mage.constants.Zone; import mage.game.Game; -import mage.game.events.DamagedEvent; -import mage.game.events.DamagedPlayerBatchEvent; -import mage.game.events.DamagedPlayerEvent; +import mage.game.events.DamagedBatchForPlayersEvent; import mage.game.events.GameEvent; import mage.target.targetpointer.FixedTarget; @@ -65,12 +63,12 @@ public class CombatDamageDealtToYouTriggeredAbility extends TriggeredAbilityImpl @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PLAYER_BATCH; + return event.getType() == GameEvent.EventType.DAMAGED_BATCH_FOR_PLAYERS; } @Override public boolean checkTrigger(GameEvent event, Game game) { - DamagedPlayerBatchEvent damageEvent = (DamagedPlayerBatchEvent) event; + DamagedBatchForPlayersEvent damageEvent = (DamagedBatchForPlayersEvent) event; boolean check = damageEvent.getEvents() .stream() .anyMatch(c -> c.isCombatDamage() && c.getPlayerId() == this.controllerId); diff --git a/Mage/src/main/java/mage/abilities/common/DealCombatDamageControlledTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/DealCombatDamageControlledTriggeredAbility.java index fc9fa040414..bd16ecc6fc2 100644 --- a/Mage/src/main/java/mage/abilities/common/DealCombatDamageControlledTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/DealCombatDamageControlledTriggeredAbility.java @@ -55,7 +55,7 @@ public class DealCombatDamageControlledTriggeredAbility extends TriggeredAbility @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PLAYER_BATCH_ONE_PLAYER; + return event.getType() == GameEvent.EventType.DAMAGED_BATCH_FOR_ONE_PLAYER; } @Override diff --git a/Mage/src/main/java/mage/abilities/common/DealtDamageToSourceTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/DealtDamageToSourceTriggeredAbility.java index 6464c3a2810..6c4de202d82 100644 --- a/Mage/src/main/java/mage/abilities/common/DealtDamageToSourceTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/DealtDamageToSourceTriggeredAbility.java @@ -5,7 +5,7 @@ import mage.abilities.effects.Effect; import mage.constants.AbilityWord; import mage.constants.Zone; import mage.game.Game; -import mage.game.events.DamagedPermanentBatchEvent; +import mage.game.events.DamagedBatchForPermanentsEvent; import mage.game.events.GameEvent; /** @@ -36,12 +36,12 @@ public class DealtDamageToSourceTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PERMANENT_BATCH; + return event.getType() == GameEvent.EventType.DAMAGED_BATCH_FOR_PERMANENTS; } @Override public boolean checkTrigger(GameEvent event, Game game) { - DamagedPermanentBatchEvent dEvent = (DamagedPermanentBatchEvent) event; + DamagedBatchForPermanentsEvent dEvent = (DamagedBatchForPermanentsEvent) event; int damage = dEvent .getEvents() .stream() diff --git a/Mage/src/main/java/mage/designations/Initiative.java b/Mage/src/main/java/mage/designations/Initiative.java index 14fb8a26015..da72667065a 100644 --- a/Mage/src/main/java/mage/designations/Initiative.java +++ b/Mage/src/main/java/mage/designations/Initiative.java @@ -8,7 +8,7 @@ import mage.constants.Zone; import mage.game.Controllable; import mage.game.Game; import mage.game.events.DamagedEvent; -import mage.game.events.DamagedPlayerBatchEvent; +import mage.game.events.DamagedBatchForPlayersEvent; import mage.game.events.GameEvent; import mage.target.targetpointer.FixedTarget; @@ -57,12 +57,12 @@ class InitiativeDamageTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DAMAGED_PLAYER_BATCH; + return event.getType() == GameEvent.EventType.DAMAGED_BATCH_FOR_PLAYERS; } @Override public boolean checkTrigger(GameEvent event, Game game) { - DamagedPlayerBatchEvent dEvent = (DamagedPlayerBatchEvent) event; + DamagedBatchForPlayersEvent dEvent = (DamagedBatchForPlayersEvent) event; UUID playerId = dEvent .getEvents() .stream() diff --git a/Mage/src/main/java/mage/game/GameState.java b/Mage/src/main/java/mage/game/GameState.java index 470e608bce3..895594904c0 100644 --- a/Mage/src/main/java/mage/game/GameState.java +++ b/Mage/src/main/java/mage/game/GameState.java @@ -1,6 +1,5 @@ package mage.game; -import static java.util.Collections.emptyList; import mage.MageObject; import mage.MageObjectReference; import mage.abilities.*; @@ -45,6 +44,8 @@ import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; +import static java.util.Collections.emptyList; + /** * @author BetaSteward_at_googlemail.com *

@@ -816,53 +817,44 @@ public class GameState implements Serializable, Copyable { } public void addSimultaneousDamage(DamagedEvent damagedEvent, Game game) { - // This method does look for Batch Event in simultaneousEvents to batch - // damagedEvent with. For each kind of batch, either there is a batch - // of the proper class fitting the damagedEvent, or there is not. + // Combine multiple damage events in the single event (batch) + // * per damage type (see GameEvent.DAMAGED_BATCH_FOR_PERMANENTS, GameEvent.DAMAGED_BATCH_FOR_PLAYERS) + // * per player (see GameEvent.DAMAGED_BATCH_FOR_ONE_PLAYER) // - // If there is not one of the batched event (i.e. if the respective flag is - // at false after the loop), then a batched event is created for future - // events to be batched with. + // Warning, one event can be stored in multiple batches, + // example: DAMAGED_BATCH_FOR_PLAYERS + DAMAGED_BATCH_FOR_ONE_PLAYER - // All damage from any source to anything - // the batch is of class DamagedBatchEvent - boolean flagBatchAll = false; - - // All damage from any source to a specific player (damagedEvent.getPlayerId()) - // the batch is of class DamagedPlayerBatchOnePlayerEvent - boolean flagBatchForPlayer = false; + boolean isPlayerDamage = damagedEvent instanceof DamagedPlayerEvent; + // existing batch + boolean isDamageBatchUsed = false; + boolean isPlayerBatchUsed = false; for (GameEvent event : simultaneousEvents) { + // per damage type if ((event instanceof DamagedBatchEvent) && ((DamagedBatchEvent) event).getDamageClazz().isInstance(damagedEvent)) { - - // existing batch for damage of that damage class. ((DamagedBatchEvent) event).addEvent(damagedEvent); - flagBatchAll = true; + isDamageBatchUsed = true; } - if (event instanceof DamagedPlayerBatchOnePlayerEvent) { - DamagedPlayerBatchOnePlayerEvent eventForPlayer = (DamagedPlayerBatchOnePlayerEvent) event; - if (eventForPlayer.getDamageClazz().isInstance(damagedEvent) + // per player + if (isPlayerDamage && event instanceof DamagedBatchForOnePlayerEvent) { + DamagedBatchForOnePlayerEvent oldPlayerBatch = (DamagedBatchForOnePlayerEvent) event; + if (oldPlayerBatch.getDamageClazz().isInstance(damagedEvent) && event.getPlayerId().equals(damagedEvent.getTargetId())) { - - // existing batch for damage of that damage class to the same player - eventForPlayer.addEvent(damagedEvent); - flagBatchForPlayer = true; + oldPlayerBatch.addEvent(damagedEvent); + isPlayerBatchUsed = true; } } - } - if (!flagBatchAll) { - // new batch for any kind of damage, creating a fresh one with damagedEvent inside. + // new batch + if (!isDamageBatchUsed) { addSimultaneousEvent(DamagedBatchEvent.makeEvent(damagedEvent), game); } - if (!flagBatchForPlayer && damagedEvent.getPlayerId() != null && damagedEvent.getPlayerId().equals(damagedEvent.getTargetId())) { - // new batch for damage from any source to the specific damaged player, - // creating a fresh one with damagedEvent inside. - DamagedBatchEvent event = new DamagedPlayerBatchOnePlayerEvent(damagedEvent.getPlayerId()); + if (!isPlayerBatchUsed && isPlayerDamage) { + DamagedBatchEvent event = new DamagedBatchForOnePlayerEvent(damagedEvent.getTargetId()); event.addEvent(damagedEvent); addSimultaneousEvent(event, game); } diff --git a/Mage/src/main/java/mage/game/events/DamagedBatchEvent.java b/Mage/src/main/java/mage/game/events/DamagedBatchEvent.java index 5bfe78d2b75..c0904b8254d 100644 --- a/Mage/src/main/java/mage/game/events/DamagedBatchEvent.java +++ b/Mage/src/main/java/mage/game/events/DamagedBatchEvent.java @@ -4,6 +4,7 @@ import java.util.HashSet; import java.util.Objects; import java.util.Set; import java.util.UUID; +import java.util.stream.Collectors; /** * @author TheElk801 @@ -30,8 +31,19 @@ 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) @@ -40,8 +52,19 @@ public abstract class DamagedBatchEvent extends GameEvent { .orElse(null); } + public Set getSourceIds() { + return events + .stream() + .map(GameEvent::getSourceId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + } + @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) @@ -61,10 +84,10 @@ public abstract class DamagedBatchEvent extends GameEvent { public static DamagedBatchEvent makeEvent(DamagedEvent damagedEvent) { DamagedBatchEvent event; if (damagedEvent instanceof DamagedPlayerEvent) { - event = new DamagedPlayerBatchEvent(); + event = new DamagedBatchForPlayersEvent(); event.addEvent(damagedEvent); } else if (damagedEvent instanceof DamagedPermanentEvent) { - event = new DamagedPermanentBatchEvent(); + event = new DamagedBatchForPermanentsEvent(); event.addEvent(damagedEvent); } else { event = null; diff --git a/Mage/src/main/java/mage/game/events/DamagedBatchForOnePlayerEvent.java b/Mage/src/main/java/mage/game/events/DamagedBatchForOnePlayerEvent.java new file mode 100644 index 00000000000..01b632bddef --- /dev/null +++ b/Mage/src/main/java/mage/game/events/DamagedBatchForOnePlayerEvent.java @@ -0,0 +1,14 @@ +package mage.game.events; + +import java.util.UUID; + +/** + * @author Susucr + */ +public class DamagedBatchForOnePlayerEvent extends DamagedBatchEvent { + + public DamagedBatchForOnePlayerEvent(UUID playerId) { + super(EventType.DAMAGED_BATCH_FOR_ONE_PLAYER, DamagedPlayerEvent.class); + this.setPlayerId(playerId); + } +} diff --git a/Mage/src/main/java/mage/game/events/DamagedBatchForPermanentsEvent.java b/Mage/src/main/java/mage/game/events/DamagedBatchForPermanentsEvent.java new file mode 100644 index 00000000000..7af949f8d6f --- /dev/null +++ b/Mage/src/main/java/mage/game/events/DamagedBatchForPermanentsEvent.java @@ -0,0 +1,11 @@ +package mage.game.events; + +/** + * @author TheElk801 + */ +public class DamagedBatchForPermanentsEvent extends DamagedBatchEvent { + + public DamagedBatchForPermanentsEvent() { + super(EventType.DAMAGED_BATCH_FOR_PERMANENTS, DamagedPermanentEvent.class); + } +} diff --git a/Mage/src/main/java/mage/game/events/DamagedBatchForPlayersEvent.java b/Mage/src/main/java/mage/game/events/DamagedBatchForPlayersEvent.java new file mode 100644 index 00000000000..54e0835d11e --- /dev/null +++ b/Mage/src/main/java/mage/game/events/DamagedBatchForPlayersEvent.java @@ -0,0 +1,11 @@ +package mage.game.events; + +/** + * @author TheElk801 + */ +public class DamagedBatchForPlayersEvent extends DamagedBatchEvent { + + public DamagedBatchForPlayersEvent() { + super(GameEvent.EventType.DAMAGED_BATCH_FOR_PLAYERS, DamagedPlayerEvent.class); + } +} diff --git a/Mage/src/main/java/mage/game/events/DamagedPermanentBatchEvent.java b/Mage/src/main/java/mage/game/events/DamagedPermanentBatchEvent.java deleted file mode 100644 index 7ee26d5efdf..00000000000 --- a/Mage/src/main/java/mage/game/events/DamagedPermanentBatchEvent.java +++ /dev/null @@ -1,11 +0,0 @@ -package mage.game.events; - -/** - * @author TheElk801 - */ -public class DamagedPermanentBatchEvent extends DamagedBatchEvent { - - public DamagedPermanentBatchEvent() { - super(EventType.DAMAGED_PERMANENT_BATCH, DamagedPermanentEvent.class); - } -} diff --git a/Mage/src/main/java/mage/game/events/DamagedPlayerBatchEvent.java b/Mage/src/main/java/mage/game/events/DamagedPlayerBatchEvent.java deleted file mode 100644 index ccfd993e3cc..00000000000 --- a/Mage/src/main/java/mage/game/events/DamagedPlayerBatchEvent.java +++ /dev/null @@ -1,11 +0,0 @@ -package mage.game.events; - -/** - * @author TheElk801 - */ -public class DamagedPlayerBatchEvent extends DamagedBatchEvent { - - public DamagedPlayerBatchEvent() { - super(GameEvent.EventType.DAMAGED_PLAYER_BATCH, DamagedPlayerEvent.class); - } -} diff --git a/Mage/src/main/java/mage/game/events/DamagedPlayerBatchOnePlayerEvent.java b/Mage/src/main/java/mage/game/events/DamagedPlayerBatchOnePlayerEvent.java deleted file mode 100644 index 5df4a71e7a3..00000000000 --- a/Mage/src/main/java/mage/game/events/DamagedPlayerBatchOnePlayerEvent.java +++ /dev/null @@ -1,14 +0,0 @@ -package mage.game.events; - -import java.util.UUID; - -/** - * @author Susucr - */ -public class DamagedPlayerBatchOnePlayerEvent extends DamagedBatchEvent { - - public DamagedPlayerBatchOnePlayerEvent(UUID playerId) { - super(EventType.DAMAGED_PLAYER_BATCH_ONE_PLAYER, DamagedPlayerEvent.class); - this.setPlayerId(playerId); - } -} diff --git a/Mage/src/main/java/mage/game/events/GameEvent.java b/Mage/src/main/java/mage/game/events/GameEvent.java index bb51faeaba0..7b48453f409 100644 --- a/Mage/src/main/java/mage/game/events/GameEvent.java +++ b/Mage/src/main/java/mage/game/events/GameEvent.java @@ -118,15 +118,16 @@ public class GameEvent implements Serializable { */ DAMAGED_PLAYER, - /* DAMAGED_PLAYER_BATCH - combines all player damaged events in one single event + /* DAMAGED_BATCH_FOR_PLAYERS, + combines all player damage events to a single batch (event) */ - DAMAGED_PLAYER_BATCH, + DAMAGED_BATCH_FOR_PLAYERS, - /* DAMAGED_PLAYER_BATCH_ONE_PLAYER - combines all player damaged events for a single player in one single event + /* DAMAGED_BATCH_FOR_ONE_PLAYER + combines all player damage events to a single batch (event) and split it per damaged player + playerId the id of the damaged player */ - DAMAGED_PLAYER_BATCH_ONE_PLAYER, + DAMAGED_BATCH_FOR_ONE_PLAYER, /* DAMAGE_CAUSES_LIFE_LOSS, targetId the id of the damaged player @@ -406,10 +407,10 @@ public class GameEvent implements Serializable { DAMAGE_PERMANENT, DAMAGED_PERMANENT, - /* DAMAGED_PERMANENT_BATCH - combine all permanent damage events to single event + /* DAMAGED_BATCH_FOR_PERMANENTS + combine all permanent damage events to a single batch (event) */ - DAMAGED_PERMANENT_BATCH, + DAMAGED_BATCH_FOR_PERMANENTS, DESTROY_PERMANENT, /* DESTROY_PERMANENT_BY_LEGENDARY_RULE