diff --git a/Mage.Client/src/main/java/mage/client/chat/ChatPanel.java b/Mage.Client/src/main/java/mage/client/chat/ChatPanel.java
index aaf2a916297..695db98429f 100644
--- a/Mage.Client/src/main/java/mage/client/chat/ChatPanel.java
+++ b/Mage.Client/src/main/java/mage/client/chat/ChatPanel.java
@@ -283,8 +283,8 @@ public class ChatPanel extends javax.swing.JPanel {
// this.txtConversation.setBackground(new Color(0, 0, 0, 0));
// this.txtConversation.setForeground(new Color(255, 255, 255));
this.txtConversation.setSelectionColor(Color.LIGHT_GRAY);
- this.jScrollPaneTxt.setOpaque(false);
- this.jScrollPaneTxt.getViewport().setOpaque(false);
+ this.jScrollPaneTxt.setOpaque(!chatType.equals(ChatType.TABLES));
+ this.jScrollPaneTxt.getViewport().setOpaque(!chatType.equals(ChatType.TABLES));
}
public void setSplitDividerLocation(int location) {
@@ -310,8 +310,11 @@ public class ChatPanel extends javax.swing.JPanel {
this.players = roomUserInfo.getUsersView().toArray(new UsersView[0]);
JTableHeader th = jTablePlayers.getTableHeader();
TableColumnModel tcm = th.getColumnModel();
- tcm.getColumn(0).setHeaderValue(new StringBuilder("Players").append(" (").append(this.players.length).append(")").toString());
- tcm.getColumn(2).setHeaderValue(new StringBuilder("Games").append(" (").append(roomUserInfo.getNumberActiveGames()).append(")").toString());
+ tcm.getColumn(0).setHeaderValue("Players (" + this.players.length + ")");
+ tcm.getColumn(2).setHeaderValue(
+ "Games (" + roomUserInfo.getNumberActiveGames() +
+ (roomUserInfo.getNumberActiveGames() != roomUserInfo.getNumberGameThreads() ? " T:" + roomUserInfo.getNumberGameThreads():"") +
+ " max: " + roomUserInfo.getNumberMaxGames() + ")");
th.repaint();
this.fireTableDataChanged();
}
diff --git a/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.form b/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.form
index 2b2ea027583..2f7ffaa1d29 100644
--- a/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.form
+++ b/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.form
@@ -212,21 +212,26 @@
+
+
+
+
+
-
+
@@ -284,6 +289,9 @@
+
+
+
@@ -311,9 +319,13 @@
+
+
+
+
@@ -403,6 +415,7 @@
+
diff --git a/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java b/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java
index 89e6ae1619d..b4397b1d5de 100644
--- a/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java
+++ b/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java
@@ -170,13 +170,17 @@ public class NewTournamentDialog extends MageDialog {
lblName.setText("Name:");
lbTimeLimit.setText("Time Limit:");
+ lbTimeLimit.setToolTipText("The time a player has for the whole match. If a player runs out of time during a game, he loses the complete match. ");
org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, cbTimeLimit, org.jdesktop.beansbinding.ObjectProperty.create(), lbTimeLimit, org.jdesktop.beansbinding.BeanProperty.create("labelFor"));
bindingGroup.addBinding(binding);
- lblPassword.setText("Password:");
+ cbTimeLimit.setToolTipText("The time a player has for the whole match. If a player runs out of time during a game, he loses the complete match. ");
- txtPassword.setToolTipText("Players have to enter this password to be able to enter the created table.");
+ lblPassword.setText("Password:");
+ lblPassword.setToolTipText("Players have to enter the password to be able to join this table.");
+
+ txtPassword.setToolTipText("Players have to enter the password to be able to join this table.");
lblTournamentType.setText("Tournament Type:");
@@ -205,6 +209,7 @@ public class NewTournamentDialog extends MageDialog {
lblNumWins.setText("Wins:");
+ spnNumWins.setToolTipText("To win a match a player has to win this number of games.");
spnNumWins.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
spnNumWinsnumPlayersChanged(evt);
@@ -221,7 +226,9 @@ public class NewTournamentDialog extends MageDialog {
});
lblNumRounds.setText("Number of Swiss Rounds:");
+ lblNumRounds.setToolTipText("The number of rounds the swiss tournament has in total.
\nThe tournaments ends after that number of rounds or
\nif there are less than two players left in the tournament.");
+ spnNumRounds.setToolTipText("The number of rounds the swiss tournament has in total.
\nThe tournaments ends after that number of rounds or
\nif there are less than two players left in the tournament.");
spnNumRounds.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
spnNumRoundsnumPlayersChanged(evt);
@@ -272,6 +279,7 @@ public class NewTournamentDialog extends MageDialog {
);
cbAllowSpectators.setText("Allow spectators");
+ cbAllowSpectators.setToolTipText("Allow other players to watch the games of this table.");
lblPlayer1.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
lblPlayer1.setText("Player 1 (You)");
diff --git a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java
index 5c46245c291..82623154538 100644
--- a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java
+++ b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java
@@ -83,7 +83,6 @@ import mage.remote.Session;
import mage.view.MatchView;
import mage.view.RoomUsersView;
import mage.view.TableView;
-import mage.view.UsersView;
import org.apache.log4j.Logger;
/**
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 4da305ff202..cbb5465c023 100644
--- a/Mage.Client/src/main/java/mage/client/tournament/TournamentPanel.java
+++ b/Mage.Client/src/main/java/mage/client/tournament/TournamentPanel.java
@@ -213,18 +213,19 @@ public class TournamentPanel extends javax.swing.JPanel {
}
switch (tournament.getTournamentState()) {
case "Constructing":
- String constructionTime = "";
+ String timeLeft = "";
if (tournament.getStepStartTime() != null) {
- constructionTime = Format.getDuration(tournament.getConstructionTime() - (tournament.getServerTime().getTime() - tournament.getStepStartTime().getTime())/1000);
+ timeLeft = Format.getDuration(tournament.getConstructionTime() - (tournament.getServerTime().getTime() - tournament.getStepStartTime().getTime())/1000);
}
- txtTournamentState.setText(new StringBuilder(tournament.getTournamentState()).append(" (").append(constructionTime).append(")").toString());
+ txtTournamentState.setText(new StringBuilder(tournament.getTournamentState()).append(" (").append(timeLeft).append(")").toString());
break;
case "Dueling":
- String duelingTime = "";
+ case "Drafting":
+ String usedTime = "";
if (tournament.getStepStartTime() != null) {
- duelingTime = Format.getDuration((tournament.getServerTime().getTime() - tournament.getStepStartTime().getTime())/1000);
+ usedTime = Format.getDuration((tournament.getServerTime().getTime() - tournament.getStepStartTime().getTime())/1000);
}
- txtTournamentState.setText(new StringBuilder(tournament.getTournamentState()).append(" (").append(duelingTime).append(")").toString());
+ txtTournamentState.setText(tournament.getTournamentState() + " (" + usedTime + ") " + tournament.getRunningInfo());
break;
default:
txtTournamentState.setText(tournament.getTournamentState());
diff --git a/Mage.Common/src/mage/view/RoomUsersView.java b/Mage.Common/src/mage/view/RoomUsersView.java
index d9385b31636..1b69f77f35a 100644
--- a/Mage.Common/src/mage/view/RoomUsersView.java
+++ b/Mage.Common/src/mage/view/RoomUsersView.java
@@ -39,12 +39,16 @@ public class RoomUsersView implements Serializable {
private static final long serialVersionUID = 1L;
private final int numberActiveGames;
+ private final int numberGameThreads;
+ private final int numberMaxGames;
private final List usersView;
- public RoomUsersView(List usersView, int numberActiveGames) {
+ public RoomUsersView(List usersView, int numberActiveGames, int numberGameThreads, int numberMaxGames) {
this.numberActiveGames = numberActiveGames;
+ this.numberGameThreads = numberGameThreads;
+ this.numberMaxGames = numberMaxGames;
this.usersView = usersView;
}
@@ -53,6 +57,14 @@ public class RoomUsersView implements Serializable {
return numberActiveGames;
}
+ public int getNumberGameThreads() {
+ return numberGameThreads;
+ }
+
+ public int getNumberMaxGames() {
+ return numberMaxGames;
+ }
+
public List getUsersView() {
return usersView;
}
diff --git a/Mage.Common/src/mage/view/TournamentView.java b/Mage.Common/src/mage/view/TournamentView.java
index ad07273a02c..ae6ca94a64a 100644
--- a/Mage.Common/src/mage/view/TournamentView.java
+++ b/Mage.Common/src/mage/view/TournamentView.java
@@ -57,6 +57,7 @@ public class TournamentView implements Serializable {
private final List rounds = new ArrayList<>();
private final List players = new ArrayList<>();
+ private final String runningInfo;
public TournamentView(Tournament tournament) {
@@ -77,6 +78,11 @@ public class TournamentView implements Serializable {
serverTime = new Date();
tournamentState = tournament.getTournamentState();
+ if (tournament.getTournamentState().equals("Drafting") && tournament.getDraft() != null) {
+ runningInfo = "booster/card: " + tournament.getDraft().getBoosterNum() +"/" + (tournament.getDraft().getCardNum() -1);
+ } else {
+ runningInfo = "";
+ }
for (TournamentPlayer player: tournament.getPlayers()) {
players.add(new TournamentPlayerView(player));
}
@@ -132,5 +138,9 @@ public class TournamentView implements Serializable {
public Date getServerTime() {
return serverTime;
}
+
+ public String getRunningInfo() {
+ return runningInfo;
+ }
}
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 f375a816eb6..dd833badda2 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
@@ -55,7 +55,7 @@ public class BoosterDraftEliminationTournament extends TournamentSingleEliminati
}
protected void draft() {
- Draft draft = new BoosterDraft((DraftOptions) options.getLimitedOptions(), getSets());
+ draft = new BoosterDraft((DraftOptions) options.getLimitedOptions(), getSets());
for (TournamentPlayer player: players.values()) {
draft.addPlayer(player.getPlayer());
player.setState(TournamentPlayerState.DRAFTING);
diff --git a/Mage.Server/src/main/java/mage/server/TableController.java b/Mage.Server/src/main/java/mage/server/TableController.java
index 3e993a826ba..f987b539c89 100644
--- a/Mage.Server/src/main/java/mage/server/TableController.java
+++ b/Mage.Server/src/main/java/mage/server/TableController.java
@@ -249,7 +249,7 @@ public class TableController {
return false;
}
// check password
- if (!table.getMatch().getOptions().getPassword().isEmpty()) {
+ if (!table.getMatch().getOptions().getPassword().isEmpty() && playerType.equals("Human")) {
if (!table.getMatch().getOptions().getPassword().equals(password)) {
user.showUserMessage("Join Table", "Wrong password.");
return false;
diff --git a/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java b/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java
index de9495f36a6..9c669e6af5f 100644
--- a/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java
+++ b/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java
@@ -129,7 +129,11 @@ public class GamesRoomImpl extends RoomImpl implements GamesRoom, Serializable {
Collections.sort(users, new UserNameSorter());
List roomUserInfo = new ArrayList<>();
- roomUserInfo.add(new RoomUsersView(users, GameManager.getInstance().getNumberActiveGames()));
+ roomUserInfo.add(new RoomUsersView(users,
+ GameManager.getInstance().getNumberActiveGames(),
+ ThreadExecutor.getInstance().getActiveThreads(ThreadExecutor.getInstance().getGameExecutor()),
+ ConfigSettings.getInstance().getMaxGameThreads()
+ ));
roomUsersView = roomUserInfo;
}
diff --git a/Mage/src/mage/game/tournament/Tournament.java b/Mage/src/mage/game/tournament/Tournament.java
index 046afbe0a93..9f4abe7a861 100644
--- a/Mage/src/mage/game/tournament/Tournament.java
+++ b/Mage/src/mage/game/tournament/Tournament.java
@@ -34,6 +34,7 @@ import java.util.List;
import java.util.UUID;
import mage.cards.ExpansionSet;
import mage.cards.decks.Deck;
+import mage.game.draft.Draft;
import mage.game.events.Listener;
import mage.game.events.PlayerQueryEvent;
import mage.game.events.TableEvent;
@@ -93,4 +94,5 @@ public interface Tournament {
void cleanUpOnTournamentEnd();
boolean isAbort();
void setAbort(boolean abort);
+ Draft getDraft();
}
diff --git a/Mage/src/mage/game/tournament/TournamentImpl.java b/Mage/src/mage/game/tournament/TournamentImpl.java
index 7dd636b8d62..e92f50ee41c 100644
--- a/Mage/src/mage/game/tournament/TournamentImpl.java
+++ b/Mage/src/mage/game/tournament/TournamentImpl.java
@@ -41,6 +41,7 @@ import mage.cards.Card;
import mage.cards.ExpansionSet;
import mage.cards.decks.Deck;
import mage.constants.TournamentPlayerState;
+import mage.game.draft.Draft;
import mage.game.draft.DraftCube;
import mage.game.events.Listener;
import mage.game.events.PlayerQueryEvent;
@@ -77,9 +78,11 @@ public abstract class TournamentImpl implements Tournament {
protected Date stepStartTime;
protected boolean abort;
protected String tournamentState;
-
+ protected Draft draft;
+
public TournamentImpl(TournamentOptions options) {
this.options = options;
+ draft = null;
startTime = new Date();
abort = false;
}
@@ -501,5 +504,9 @@ public abstract class TournamentImpl implements Tournament {
this.stepStartTime = stepStartTime;
}
+ @Override
+ public Draft getDraft() {
+ return draft;
+ }
}