diff --git a/Mage.Client/src/main/java/mage/client/game/GamePane.java b/Mage.Client/src/main/java/mage/client/game/GamePane.java index 909ef4d92e4..f6045f3aa08 100644 --- a/Mage.Client/src/main/java/mage/client/game/GamePane.java +++ b/Mage.Client/src/main/java/mage/client/game/GamePane.java @@ -79,14 +79,17 @@ public class GamePane extends MagePane { public void showGame(UUID gameId, UUID playerId) { gamePanel.showGame(gameId, playerId); + this.toFront(); } public void watchGame(UUID gameId) { gamePanel.watchGame(gameId); + this.toFront(); } public void replayGame() { gamePanel.replayGame(); + this.toFront(); } /** This method is called from within the constructor to diff --git a/Mage.Server.Plugins/Mage.Player.AI/src/mage/player/ai/ComputerPlayer.java b/Mage.Server.Plugins/Mage.Player.AI/src/mage/player/ai/ComputerPlayer.java index 8ade76a07b6..fb432c9fe13 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/src/mage/player/ai/ComputerPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AI/src/mage/player/ai/ComputerPlayer.java @@ -117,8 +117,8 @@ public class ComputerPlayer> extends PlayerImpl i private transient List playableInstant = new ArrayList(); private transient List playableAbilities = new ArrayList(); - public ComputerPlayer(String name, Deck deck, RangeOfInfluence range) { - super(name, deck, range); + public ComputerPlayer(String name, RangeOfInfluence range) { + super(name, range); human = false; } @@ -768,7 +768,7 @@ public class ComputerPlayer> extends PlayerImpl i } @Override - public void sideboard(Table table) { + public void sideboard(Table table, Deck deck) { //TODO: improve this table.fireSubmitDeckEvent(playerId, deck); } diff --git a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer2.java b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer2.java index 058a1f708e0..a3c3008bb02 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer2.java +++ b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer2.java @@ -99,8 +99,8 @@ public class ComputerPlayer2 extends ComputerPlayer implements protected int currentScore; protected SimulationNode root; - public ComputerPlayer2(String name, Deck deck, RangeOfInfluence range) { - super(name, deck, range); + public ComputerPlayer2(String name, RangeOfInfluence range) { + super(name, range); maxDepth = Config.maxDepth; maxNodes = Config.maxNodes; } diff --git a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer3.java b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer3.java index 23191d1c8e2..b3f41345278 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer3.java +++ b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer3.java @@ -83,8 +83,8 @@ public class ComputerPlayer3 extends ComputerPlayer2 implements Player { } - public ComputerPlayer3(String name, Deck deck, RangeOfInfluence range) { - super(name, deck, range); + public ComputerPlayer3(String name, RangeOfInfluence range) { + super(name, range); maxDepth = Config.maxDepth; maxNodes = Config.maxNodes; } diff --git a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java index 70e2fadfb06..68a04966eb2 100644 --- a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java @@ -81,8 +81,8 @@ public class HumanPlayer extends PlayerImpl { } protected transient TargetCreaturePermanent targetCombat = new TargetCreaturePermanent(filter); - public HumanPlayer(String name, Deck deck, RangeOfInfluence range) { - super(name, deck, range); + public HumanPlayer(String name, RangeOfInfluence range) { + super(name, range); human = true; } @@ -473,8 +473,8 @@ public class HumanPlayer extends PlayerImpl { } @Override - public void sideboard(Table table) { - table.fireSideboardEvent(playerId); + public void sideboard(Table table, Deck deck) { + table.fireSideboardEvent(playerId, deck); } protected void specialAction(Game game) { diff --git a/Mage.Server/plugins/mage-player-ai.jar b/Mage.Server/plugins/mage-player-ai.jar index ad99bdf7176..f3f37a9fbca 100644 Binary files a/Mage.Server/plugins/mage-player-ai.jar and b/Mage.Server/plugins/mage-player-ai.jar differ diff --git a/Mage.Server/plugins/mage-player-aiminimax.jar b/Mage.Server/plugins/mage-player-aiminimax.jar index 9117b83ecc5..d5d7a694cb2 100644 Binary files a/Mage.Server/plugins/mage-player-aiminimax.jar and b/Mage.Server/plugins/mage-player-aiminimax.jar differ diff --git a/Mage.Server/plugins/mage-player-human.jar b/Mage.Server/plugins/mage-player-human.jar index 1cb91fb2ffb..6050acc5de2 100644 Binary files a/Mage.Server/plugins/mage-player-human.jar and b/Mage.Server/plugins/mage-player-human.jar differ diff --git a/Mage.Server/src/main/java/mage/server/game/PlayerFactory.java b/Mage.Server/src/main/java/mage/server/game/PlayerFactory.java index 4242ccec1a3..4a2850c4b61 100644 --- a/Mage.Server/src/main/java/mage/server/game/PlayerFactory.java +++ b/Mage.Server/src/main/java/mage/server/game/PlayerFactory.java @@ -57,12 +57,12 @@ public class PlayerFactory { private PlayerFactory() {} - public Player createPlayer(String playerType, String name, Deck deck, RangeOfInfluence range) { + public Player createPlayer(String playerType, String name, RangeOfInfluence range) { Player player; Constructor con; try { - con = playerTypes.get(playerType).getConstructor(new Class[]{String.class, Deck.class, RangeOfInfluence.class}); - player = (Player)con.newInstance(new Object[] {name, deck, range}); + con = playerTypes.get(playerType).getConstructor(new Class[]{String.class, RangeOfInfluence.class}); + player = (Player)con.newInstance(new Object[] {name, range}); } catch (Exception ex) { logger.log(Level.SEVERE, null, ex); return null; diff --git a/Mage.Server/src/main/java/mage/server/game/TableController.java b/Mage.Server/src/main/java/mage/server/game/TableController.java index 579b59c2e67..25b9875e280 100644 --- a/Mage.Server/src/main/java/mage/server/game/TableController.java +++ b/Mage.Server/src/main/java/mage/server/game/TableController.java @@ -96,7 +96,7 @@ public class TableController { public void event(TableEvent event) { switch (event.getEventType()) { case SIDEBOARD: - sideboard(event.getPlayerId()); + sideboard(event.getPlayerId(), event.getDeck()); break; case SUBMIT_DECK: submitDeck(event.getPlayerId(), event.getDeck()); @@ -120,7 +120,7 @@ public class TableController { throw new GameException(name + " has an invalid deck for this format"); } - Player player = createPlayer(name, deck, seat.getPlayerType()); + Player player = createPlayer(name, seat.getPlayerType()); match.addPlayer(player, deck); table.joinTable(player, seat); logger.info("player joined " + player.getId()); @@ -178,8 +178,8 @@ public class TableController { return table.getValidator().validate(deck); } - private Player createPlayer(String name, Deck deck, String playerType) { - Player player = PlayerFactory.getInstance().createPlayer(playerType, name, deck, options.getRange()); + private Player createPlayer(String name, String playerType) { + Player player = PlayerFactory.getInstance().createPlayer(playerType, name, options.getRange()); logger.info("Player created " + player.getId()); return player; } @@ -214,17 +214,16 @@ public class TableController { table.sideboard(); for (MatchPlayer player: match.getPlayers()) { player.setSideboarding(); - player.getPlayer().sideboard(table); + player.getPlayer().sideboard(table, player.getDeck()); } while (!match.isDoneSideboarding()){} } - private void sideboard(UUID playerId) { + private void sideboard(UUID playerId, Deck deck) { SessionManager sessionManager = SessionManager.getInstance(); for (Entry entry: sessionPlayerMap.entrySet()) { if (entry.getValue().equals(playerId)) { - MatchPlayer player = match.getPlayer(entry.getValue()); - sessionManager.getSession(entry.getKey()).sideboard(player.getDeck(), table.getId()); + sessionManager.getSession(entry.getKey()).sideboard(deck, table.getId()); break; } } @@ -244,11 +243,6 @@ public class TableController { } catch (GameException ex) { logger.log(Level.SEVERE, null, ex); } - endMatch(); - } - - public void endMatch() { - match = null; } public void swapSeats(int seatNum1, int seatNum2) { diff --git a/Mage/src/mage/game/Game.java b/Mage/src/mage/game/Game.java index 71fadddf838..20bab07f05f 100644 --- a/Mage/src/mage/game/Game.java +++ b/Mage/src/mage/game/Game.java @@ -48,6 +48,7 @@ import mage.abilities.TriggeredAbility; import mage.abilities.effects.ContinuousEffect; import mage.abilities.effects.ContinuousEffects; import mage.cards.Cards; +import mage.cards.decks.Deck; import mage.choices.Choice; import mage.game.combat.Combat; import mage.game.events.GameEvent; @@ -81,7 +82,7 @@ public interface Game extends MageItem, Serializable { public Card getCard(UUID cardId); public Zone getZone(UUID objectId); public void setZone(UUID objectId, Zone zone); - public void addPlayer(Player player) throws GameException; + public void addPlayer(Player player, Deck deck) throws GameException; public Player getPlayer(UUID playerId); public Players getPlayers(); public PlayerList getPlayerList(); diff --git a/Mage/src/mage/game/GameImpl.java b/Mage/src/mage/game/GameImpl.java index f34f000181f..12e7ca05ebf 100644 --- a/Mage/src/mage/game/GameImpl.java +++ b/Mage/src/mage/game/GameImpl.java @@ -59,6 +59,7 @@ import mage.abilities.effects.ContinuousEffects; import mage.abilities.keyword.LeylineAbility; import mage.cards.Card; import mage.cards.Cards; +import mage.cards.decks.Deck; import mage.choices.Choice; import mage.filter.Filter; import mage.filter.Filter.ComparisonScope; @@ -110,7 +111,6 @@ public abstract class GameImpl> implements Game, Serializa protected Map gameCards = new HashMap(); protected GameState state; protected UUID startingPlayerId; -// protected UUID choosingPlayerId; protected UUID winnerId; protected transient GameStates gameStates = new GameStates(); @@ -131,7 +131,6 @@ public abstract class GameImpl> implements Game, Serializa this.id = game.id; this.ready = game.ready; this.startingPlayerId = game.startingPlayerId; -// this.choosingPlayerId = game.choosingPlayerId; this.winnerId = game.winnerId; this.range = game.range; this.attackOption = game.attackOption; @@ -161,6 +160,7 @@ public abstract class GameImpl> implements Game, Serializa for (Card card: cards) { card.setOwnerId(ownerId); gameCards.put(card.getId(), card); + state.setZone(card.getId(), Zone.OUTSIDE); for (Watcher watcher: card.getWatchers()) { watcher.setControllerId(ownerId); state.getWatchers().add(watcher); @@ -174,7 +174,8 @@ public abstract class GameImpl> implements Game, Serializa } @Override - public void addPlayer(Player player) throws GameException { + public void addPlayer(Player player, Deck deck) throws GameException { + player.useDeck(deck, this); state.addPlayer(player); } diff --git a/Mage/src/mage/game/Table.java b/Mage/src/mage/game/Table.java index 0cfe414008d..302060bece3 100644 --- a/Mage/src/mage/game/Table.java +++ b/Mage/src/mage/game/Table.java @@ -147,8 +147,8 @@ public class Table implements Serializable { return this.name; } - public void fireSideboardEvent(UUID playerId) { - tableEventSource.fireTableEvent(EventType.SIDEBOARD, playerId, null); + public void fireSideboardEvent(UUID playerId, Deck deck) { + tableEventSource.fireTableEvent(EventType.SIDEBOARD, playerId, deck); } public void fireSubmitDeckEvent(UUID playerId, Deck deck) { diff --git a/Mage/src/mage/game/match/MatchImpl.java b/Mage/src/mage/game/match/MatchImpl.java index 2ce1488afb7..3d780f0c394 100644 --- a/Mage/src/mage/game/match/MatchImpl.java +++ b/Mage/src/mage/game/match/MatchImpl.java @@ -103,9 +103,9 @@ public abstract class MatchImpl implements Match { protected void initGame(Game game) throws GameException { for (MatchPlayer matchPlayer: this.players) { - game.addPlayer(matchPlayer.getPlayer()); game.loadCards(matchPlayer.getDeck().getCards(), matchPlayer.getPlayer().getId()); game.loadCards(matchPlayer.getDeck().getSideboard(), matchPlayer.getPlayer().getId()); + game.addPlayer(matchPlayer.getPlayer(), matchPlayer.getDeck()); } } diff --git a/Mage/src/mage/players/Library.java b/Mage/src/mage/players/Library.java index d0c92ca2b8e..09d653827a7 100644 --- a/Mage/src/mage/players/Library.java +++ b/Mage/src/mage/players/Library.java @@ -94,7 +94,8 @@ public class Library implements Serializable { * @see Card */ public Card removeFromTop(Game game) { - Card card = game.getCard(library.pollFirst()); + UUID cardId = library.pollFirst(); + Card card = game.getCard(cardId); if (card == null) { emptyDraw = true; } diff --git a/Mage/src/mage/players/Player.java b/Mage/src/mage/players/Player.java index 16bc4ecdf35..1423bc9c540 100644 --- a/Mage/src/mage/players/Player.java +++ b/Mage/src/mage/players/Player.java @@ -90,6 +90,7 @@ public interface Player extends MageItem, Copyable { public Set getInRange(); public void init(Game game); + public void useDeck(Deck deck, Game game); public void reset(); public void shuffleLibrary(Game game); public int drawCards(int num, Game game); @@ -146,7 +147,7 @@ public interface Player extends MageItem, Copyable { public abstract void selectBlockers(Game game); public abstract void assignDamage(int damage, List targets, UUID sourceId, Game game); public abstract int getAmount(int min, int max, String message, Game game); - public abstract void sideboard(Table table); + public abstract void sideboard(Table table, Deck deck); public void declareAttacker(UUID attackerId, UUID defenderId, Game game); public void declareBlocker(UUID blockerId, UUID attackerId, Game game); diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java index bd381ef8bf9..91d268ce616 100644 --- a/Mage/src/mage/players/PlayerImpl.java +++ b/Mage/src/mage/players/PlayerImpl.java @@ -98,16 +98,16 @@ public abstract class PlayerImpl> implements Player, Ser protected boolean left; protected RangeOfInfluence range; protected Set inRange = new HashSet(); - protected Deck deck; +// protected Deck deck; @Override public abstract T copy(); - public PlayerImpl(String name, Deck deck, RangeOfInfluence range) { + public PlayerImpl(String name, RangeOfInfluence range) { this(UUID.randomUUID()); this.name = name; this.range = range; - this.deck = deck; +// this.deck = deck; hand = new CardsImpl(Zone.HAND); graveyard = new CardsImpl(Zone.GRAVEYARD); abilities = new AbilitiesImpl(); @@ -146,10 +146,15 @@ public abstract class PlayerImpl> implements Player, Ser } } + @Override + public void useDeck(Deck deck, Game game) { + library.clear(); + library.addAll(deck.getCards(), game); + } + @Override public void init(Game game) { this.abort = false; - library.addAll(deck.getCards(), game); this.hand.clear(); this.graveyard.clear(); this.abilities.clear();