From fe3230f489eded6d39797ef6371573f869535889 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 25 Nov 2023 17:43:18 +0400 Subject: [PATCH] game: fixed game error with Berserker's Frenzy and other cards (miss copyable class in watcher); --- .../common/ControlCombatRedundancyWatcher.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/Mage/src/main/java/mage/watchers/common/ControlCombatRedundancyWatcher.java b/Mage/src/main/java/mage/watchers/common/ControlCombatRedundancyWatcher.java index 2d4e163c657..45fa9438867 100644 --- a/Mage/src/main/java/mage/watchers/common/ControlCombatRedundancyWatcher.java +++ b/Mage/src/main/java/mage/watchers/common/ControlCombatRedundancyWatcher.java @@ -4,8 +4,10 @@ import mage.constants.Duration; import mage.constants.WatcherScope; import mage.game.Game; import mage.game.events.GameEvent; +import mage.util.Copyable; import mage.watchers.Watcher; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.UUID; @@ -13,9 +15,10 @@ import java.util.UUID; /** * @author L_J */ -public class ControlCombatRedundancyWatcher extends Watcher { // workaround for solving timestamp issues regarding "you choose which creatures block and how those creatures block" effects +public class ControlCombatRedundancyWatcher extends Watcher { - private static final class PlayerDuration implements java.io.Serializable { // class must be serilizable Bug #8497 + // workaround for solving timestamp issues regarding "you choose which creatures block and how those creatures block" effects + private static final class PlayerDuration implements Serializable, Copyable { private final Duration duration; private final UUID playerId; @@ -25,6 +28,11 @@ public class ControlCombatRedundancyWatcher extends Watcher { // workaround for this.playerId = playerId; } + private PlayerDuration(final PlayerDuration playerDuration) { + this.duration = playerDuration.duration; + this.playerId = playerDuration.playerId; + } + private boolean isCombat() { return duration == Duration.EndOfCombat; } @@ -32,6 +40,11 @@ public class ControlCombatRedundancyWatcher extends Watcher { // workaround for private boolean isPlayer(UUID playerId) { return playerId.equals(this.playerId); } + + @Override + public PlayerDuration copy() { + return new PlayerDuration(this); + } } private final List attackingControllers = new ArrayList<>();