From 1d43b38a5f2457f4f540089e1612ededaa55282c Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Tue, 15 Jan 2019 20:48:21 +0400 Subject: [PATCH] Karn Liberated - fixed watchers errors on game restart ability --- Mage.Sets/src/mage/cards/k/KarnLiberated.java | 26 ++++++++----------- Mage/src/main/java/mage/game/GameImpl.java | 4 +-- .../main/java/mage/game/combat/Combat.java | 2 +- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/Mage.Sets/src/mage/cards/k/KarnLiberated.java b/Mage.Sets/src/mage/cards/k/KarnLiberated.java index 2cecf73c709..5d969273956 100644 --- a/Mage.Sets/src/mage/cards/k/KarnLiberated.java +++ b/Mage.Sets/src/mage/cards/k/KarnLiberated.java @@ -1,9 +1,5 @@ - package mage.cards.k; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.DelayedTriggeredAbility; @@ -11,18 +7,11 @@ import mage.abilities.LoyaltyAbility; import mage.abilities.common.PlaneswalkerEntersWithLoyaltyCountersAbility; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.ExileTargetForSourceEffect; -import mage.cards.Card; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.cards.Cards; -import mage.cards.CardsImpl; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Outcome; -import mage.constants.SuperType; -import mage.constants.Zone; +import mage.cards.*; +import mage.constants.*; import mage.game.ExileZone; import mage.game.Game; +import mage.game.GameImpl; import mage.game.command.Commander; import mage.game.events.GameEvent; import mage.game.events.GameEvent.EventType; @@ -34,8 +23,11 @@ import mage.target.TargetPlayer; import mage.target.common.TargetCardInHand; import mage.util.CardUtil; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** - * * @author bunchOfDevs */ public final class KarnLiberated extends CardImpl { @@ -102,6 +94,9 @@ class KarnLiberatedEffect extends OneShotEffect { } } game.getState().clear(); + // default watchers init, TODO: remove all restart/init code to game + ((GameImpl) game).initGameDefaultWatchers(); + for (Card card : game.getCards()) { game.getState().addCard(card); } @@ -122,6 +117,7 @@ class KarnLiberatedEffect extends OneShotEffect { } } } + ((GameImpl) game).initPlayerDefaultWatchers(player.getId()); player.init(game); } } diff --git a/Mage/src/main/java/mage/game/GameImpl.java b/Mage/src/main/java/mage/game/GameImpl.java index 7b17f8cdd11..25ec612248d 100644 --- a/Mage/src/main/java/mage/game/GameImpl.java +++ b/Mage/src/main/java/mage/game/GameImpl.java @@ -1063,7 +1063,7 @@ public abstract class GameImpl implements Game, Serializable { } - private void initGameDefaultWatchers() { + public void initGameDefaultWatchers() { getState().addWatcher(new MorbidWatcher()); getState().addWatcher(new CastSpellLastTurnWatcher()); getState().addWatcher(new CastSpellYourLastTurnWatcher()); @@ -1075,7 +1075,7 @@ public abstract class GameImpl implements Game, Serializable { getState().addWatcher(new PlayersAttackedThisTurnWatcher()); } - private void initPlayerDefaultWatchers(UUID playerId) { + public void initPlayerDefaultWatchers(UUID playerId) { getState().addWatcher(new PlayerDamagedBySourceWatcher(playerId)); getState().addWatcher(new BloodthirstWatcher(playerId)); } diff --git a/Mage/src/main/java/mage/game/combat/Combat.java b/Mage/src/main/java/mage/game/combat/Combat.java index 1f0e73e9509..c7ab29f73c8 100644 --- a/Mage/src/main/java/mage/game/combat/Combat.java +++ b/Mage/src/main/java/mage/game/combat/Combat.java @@ -463,7 +463,7 @@ public class Combat implements Serializable, Copyable { target.setRequired(true); target.setTargetName("planeswalker or player for " + creature.getLogName() + " to attack"); if (player.chooseTarget(Outcome.Damage, target, null, game)) { - System.out.println("The player " + player.getName() + " declares an attacker here. " + creature.getName()); + //System.out.println("The player " + player.getName() + " declares an attacker here. " + creature.getName()); player.declareAttacker(creature.getId(), target.getFirstTarget(), game, false); } }