From 678118c79da3db37cf5aa26df9083453fe77c6a4 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sun, 20 Jan 2019 19:40:38 +0100 Subject: [PATCH] * Fixed a problem with commander game resatrt from Karn Liberated. --- .../java/mage/game/GameCommanderImpl.java | 38 ++++++++++++------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/Mage/src/main/java/mage/game/GameCommanderImpl.java b/Mage/src/main/java/mage/game/GameCommanderImpl.java index e5f06d560a1..265dda7dc0d 100644 --- a/Mage/src/main/java/mage/game/GameCommanderImpl.java +++ b/Mage/src/main/java/mage/game/GameCommanderImpl.java @@ -1,4 +1,3 @@ - package mage.game; import java.util.Map; @@ -44,18 +43,20 @@ public abstract class GameCommanderImpl extends GameImpl { for (UUID playerId : state.getPlayerList(startingPlayerId)) { Player player = getPlayer(playerId); if (player != null) { - while (!player.getSideboard().isEmpty()) { - Card commander = this.getCard(player.getSideboard().iterator().next()); - if (commander != null) { - player.addCommanderId(commander.getId()); - commander.moveToZone(Zone.COMMAND, null, this, true); - commander.getAbilities().setControllerId(player.getId()); - ability.addEffect(new CommanderReplacementEffect(commander.getId(), alsoHand, alsoLibrary)); - ability.addEffect(new CommanderCostModification(commander.getId())); - getState().setValue(commander.getId() + "_castCount", 0); - CommanderInfoWatcher watcher = new CommanderInfoWatcher(commander.getId(), checkCommanderDamage); - getState().addWatcher(watcher); - watcher.addCardInfoToCommander(this); + if (player.getSideboard().isEmpty()) { // needed for restart game of e.g. Karn Liberated + for (UUID commanderId : player.getCommandersIds()) { + Card commander = this.getCard(commanderId); + if (commander != null) { + initCommander(commander, ability, player); + } + } + } else { + while (!player.getSideboard().isEmpty()) { + Card commander = this.getCard(player.getSideboard().iterator().next()); + if (commander != null) { + player.addCommanderId(commander.getId()); + initCommander(commander, ability, player); + } } } } @@ -67,6 +68,17 @@ public abstract class GameCommanderImpl extends GameImpl { } } + private void initCommander(Card commander, Ability ability, Player player) { + commander.moveToZone(Zone.COMMAND, null, this, true); + commander.getAbilities().setControllerId(player.getId()); + ability.addEffect(new CommanderReplacementEffect(commander.getId(), alsoHand, alsoLibrary)); + ability.addEffect(new CommanderCostModification(commander.getId())); + getState().setValue(commander.getId() + "_castCount", 0); + CommanderInfoWatcher watcher = new CommanderInfoWatcher(commander.getId(), checkCommanderDamage); + getState().addWatcher(watcher); + watcher.addCardInfoToCommander(this); + } + //20130711 /*903.8. The Commander variant uses an alternate mulligan rule. * Each time a player takes a mulligan, rather than shuffling their entire hand of cards into their library, that player exiles any number of cards from their hand face down.