diff --git a/Mage.Client/src/main/java/mage/client/tournament/TournamentPanel.form b/Mage.Client/src/main/java/mage/client/tournament/TournamentPanel.form
index b4ea2d18c9a..b6fb03d1ee1 100644
--- a/Mage.Client/src/main/java/mage/client/tournament/TournamentPanel.form
+++ b/Mage.Client/src/main/java/mage/client/tournament/TournamentPanel.form
@@ -30,7 +30,7 @@
-
+
diff --git a/Mage.Client/src/main/java/mage/client/tournament/TournamentPanel.java b/Mage.Client/src/main/java/mage/client/tournament/TournamentPanel.java
index 1aedff7c459..eb3ae5d8681 100644
--- a/Mage.Client/src/main/java/mage/client/tournament/TournamentPanel.java
+++ b/Mage.Client/src/main/java/mage/client/tournament/TournamentPanel.java
@@ -363,7 +363,7 @@ public class TournamentPanel extends javax.swing.JPanel {
}
class TournamentPlayersTableModel extends AbstractTableModel {
- private String[] columnNames = new String[]{"Player Name", "Points", "Results"};
+ private String[] columnNames = new String[]{"Player Name", "State", "Points", "Results"};
private TournamentPlayerView[] players = new TournamentPlayerView[0];
public void loadData(TournamentView tournament) {
@@ -387,8 +387,10 @@ class TournamentPlayersTableModel extends AbstractTableModel {
case 0:
return players[arg0].getName();
case 1:
- return Integer.toString(players[arg0].getPoints());
+ return players[arg0].getState();
case 2:
+ return Integer.toString(players[arg0].getPoints());
+ case 3:
return players[arg0].getResults();
}
return "";
diff --git a/Mage.Common/src/mage/view/TournamentPlayerView.java b/Mage.Common/src/mage/view/TournamentPlayerView.java
index f1088e4e000..a95c8d816c0 100644
--- a/Mage.Common/src/mage/view/TournamentPlayerView.java
+++ b/Mage.Common/src/mage/view/TournamentPlayerView.java
@@ -39,11 +39,17 @@ public class TournamentPlayerView implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
+ private String state;
private String results;
private int points;
TournamentPlayerView(TournamentPlayer player) {
this.name = player.getPlayer().getName();
+ StringBuilder sb = new StringBuilder(player.getState().toString());
+ if (!player.getStateInfo().isEmpty()) {
+ sb.append(" (").append(player.getStateInfo()).append(")");
+ }
+ this.state = sb.toString();
this.points = player.getPoints();
this.results = player.getResults();
}
@@ -52,6 +58,10 @@ public class TournamentPlayerView implements Serializable {
return this.name;
}
+ public String getState() {
+ return state;
+ }
+
public int getPoints() {
return this.points;
}
diff --git a/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/BoosterDraftEliminationTournament.java b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/BoosterDraftEliminationTournament.java
index d541f4537df..1cdd94fb028 100644
--- a/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/BoosterDraftEliminationTournament.java
+++ b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/BoosterDraftEliminationTournament.java
@@ -28,6 +28,7 @@
package mage.tournament;
+import mage.constants.TournamentPlayerState;
import mage.game.draft.BoosterDraft;
import mage.game.draft.Draft;
import mage.game.draft.DraftOptions;
@@ -57,6 +58,7 @@ public class BoosterDraftEliminationTournament extends TournamentSingleEliminati
Draft draft = new BoosterDraft((DraftOptions) options.getLimitedOptions(), getSets());
for (TournamentPlayer player: players.values()) {
draft.addPlayer(player.getPlayer());
+ player.setState(TournamentPlayerState.DRAFTING);
}
tableEventSource.fireTableEvent(EventType.START_DRAFT, null, draft);
}
diff --git a/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java b/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java
index a408913541e..762fabf8655 100644
--- a/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java
+++ b/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java
@@ -33,6 +33,7 @@ import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import mage.MageException;
import mage.cards.decks.Deck;
+import mage.constants.TournamentPlayerState;
import mage.game.GameException;
import mage.game.Table;
import mage.game.draft.Draft;
@@ -201,6 +202,8 @@ public class TournamentController {
tableManager.addPlayer(getPlayerSessionId(player2.getPlayer().getId()), table.getId(), player2.getPlayer(), player2.getPlayerType(), player2.getDeck());
tableManager.startMatch(null, table.getId());
pair.setMatch(tableManager.getMatch(table.getId()));
+ player1.setState(TournamentPlayerState.DUELING);
+ player2.setState(TournamentPlayerState.DUELING);
} catch (GameException ex) {
logger.fatal("TournamentController startMatch error", ex);
}
@@ -223,16 +226,18 @@ public class TournamentController {
TournamentSession tournamentSession = tournamentSessions.get(playerId);
tournamentSession.construct(timeout);
UserManager.getInstance().getUser(getPlayerSessionId(playerId)).addConstructing(playerId, tournamentSession);
+ TournamentPlayer player = tournament.getPlayer(playerId);
+ player.setState(TournamentPlayerState.CONSTRUCTING);
}
}
public void submitDeck(UUID playerId, Deck deck) {
if (tournamentSessions.containsKey(playerId)) {
- tournamentSessions.get(playerId).submitDeck(deck);
TournamentPlayer player = tournament.getPlayer(playerId);
if (player != null) {
- ChatManager.getInstance().broadcast(chatId, "", player.getPlayer().getName() + " has submitted the deck", MessageColor.BLACK);
+ ChatManager.getInstance().broadcast(chatId, "", player.getPlayer().getName() + " has submitted his tournament deck", MessageColor.BLACK);
}
+ tournamentSessions.get(playerId).submitDeck(deck);
}
}
diff --git a/Mage/src/mage/constants/TournamentPlayerState.java b/Mage/src/mage/constants/TournamentPlayerState.java
new file mode 100644
index 00000000000..4fe51dd3506
--- /dev/null
+++ b/Mage/src/mage/constants/TournamentPlayerState.java
@@ -0,0 +1,30 @@
+package mage.constants;
+
+/**
+ *
+ * @author LevelX2
+ */
+
+public enum TournamentPlayerState {
+ JOINED ("Joined"),
+ DRAFTING ("Drafting"),
+ CONSTRUCTING ("Constructing"),
+ DUELING ("Dueling"),
+ SIDEBOARDING ("Sideboarding"),
+ WAITING ("Waiting for next round"),
+ ELIMINATED ("Eliminated"),
+ CANCELED ("Canceled"),
+ FINISHED ("Finished"); // winner or player in swiss style
+
+ private String text;
+
+ TournamentPlayerState(String text) {
+ this.text = text;
+ }
+
+ @Override
+ public String toString() {
+ return text;
+ }
+
+}
diff --git a/Mage/src/mage/game/tournament/TournamentImpl.java b/Mage/src/mage/game/tournament/TournamentImpl.java
index 5f4aeb42c76..5b799504f34 100644
--- a/Mage/src/mage/game/tournament/TournamentImpl.java
+++ b/Mage/src/mage/game/tournament/TournamentImpl.java
@@ -33,6 +33,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
import mage.cards.Card;
import mage.cards.ExpansionSet;
import mage.cards.decks.Deck;
+import mage.constants.TournamentPlayerState;
import mage.game.events.*;
import mage.game.events.TableEvent.EventType;
import mage.game.match.Match;
@@ -146,6 +147,11 @@ public abstract class TournamentImpl implements Tournament {
Round round = new Round(rounds.size() + 1);
rounds.add(round);
List roundPlayers = getActivePlayers();
+ if (roundPlayers.size() == 1) {
+ TournamentPlayer winner = roundPlayers.get(0);
+ winner.setState(TournamentPlayerState.FINISHED);
+ winner.setStateInfo("Winner");
+ }
while (roundPlayers.size() > 1) {
int i = rnd.nextInt(roundPlayers.size());
TournamentPlayer player1 = roundPlayers.get(i);
diff --git a/Mage/src/mage/game/tournament/TournamentPlayer.java b/Mage/src/mage/game/tournament/TournamentPlayer.java
index 742169598cc..139d17ec3e0 100644
--- a/Mage/src/mage/game/tournament/TournamentPlayer.java
+++ b/Mage/src/mage/game/tournament/TournamentPlayer.java
@@ -30,6 +30,7 @@ package mage.game.tournament;
import mage.cards.Card;
import mage.cards.decks.Deck;
+import mage.constants.TournamentPlayerState;
import mage.players.Player;
/**
@@ -40,6 +41,8 @@ public class TournamentPlayer {
protected int points;
protected String playerType;
+ protected TournamentPlayerState state;
+ protected String stateInfo = "";
protected Player player;
protected Deck deck;
protected String results = "";
@@ -50,6 +53,7 @@ public class TournamentPlayer {
public TournamentPlayer(Player player, String playerType) {
this.player = player;
this.playerType = playerType;
+ this.state = TournamentPlayerState.JOINED;
}
public Player getPlayer() {
@@ -77,6 +81,7 @@ public class TournamentPlayer {
}
public void setEliminated() {
+ this.setState(TournamentPlayerState.ELIMINATED);
this.eliminated = true;
}
@@ -89,12 +94,14 @@ public class TournamentPlayer {
}
public void setConstructing() {
+ this.setState(TournamentPlayerState.CONSTRUCTING);
this.doneConstructing = false;
}
public void submitDeck(Deck deck) {
this.deck = deck;
this.doneConstructing = true;
+ this.setState(TournamentPlayerState.WAITING);
}
public void updateDeck(Deck deck) {
@@ -126,4 +133,21 @@ public class TournamentPlayer {
public void setResults(String results) {
this.results = results;
}
+
+ public TournamentPlayerState getState() {
+ return state;
+ }
+
+ public void setState(TournamentPlayerState state) {
+ this.state = state;
+ }
+
+ public String getStateInfo() {
+ return stateInfo;
+ }
+
+ public void setStateInfo(String stateInfo) {
+ this.stateInfo = stateInfo;
+ }
}
+