Splits the GUI into more components to increase maintainability
This commit is contained in:
parent
52946c9aec
commit
5b15fea7b3
@ -106,10 +106,10 @@ public class Main {
|
|||||||
}
|
}
|
||||||
boolean runningNew = serversRunning();
|
boolean runningNew = serversRunning();
|
||||||
if (!runningNew && serversAreRunning) {
|
if (!runningNew && serversAreRunning) {
|
||||||
gui.updateRunning(false);
|
gui.updateGUIElementsWhenServersStartOrStop(false);
|
||||||
gui.setStatus("Servers are stopped");
|
gui.setStatus("Servers are stopped");
|
||||||
} else if (runningNew && !serversAreRunning) {
|
} else if (runningNew && !serversAreRunning) {
|
||||||
gui.updateRunning(true);
|
gui.updateGUIElementsWhenServersStartOrStop(true);
|
||||||
}
|
}
|
||||||
serversAreRunning = runningNew;
|
serversAreRunning = runningNew;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -230,7 +230,7 @@ public class Controller {
|
|||||||
*/
|
*/
|
||||||
private void executeGUILoadingTasks() {
|
private void executeGUILoadingTasks() {
|
||||||
this.serverLauncherGUI.updateProfiles();
|
this.serverLauncherGUI.updateProfiles();
|
||||||
this.serverLauncherGUI.update();
|
this.serverLauncherGUI.updateWithSavedProfileData();
|
||||||
this.currentProfile.updateConsoles();
|
this.currentProfile.updateConsoles();
|
||||||
if (this.downloadAllJars) {
|
if (this.downloadAllJars) {
|
||||||
Executors.newSingleThreadExecutor().execute(() -> {
|
Executors.newSingleThreadExecutor().execute(() -> {
|
||||||
@ -244,7 +244,7 @@ public class Controller {
|
|||||||
}
|
}
|
||||||
if (this.currentProfile.getRunInBackground()) {
|
if (this.currentProfile.getRunInBackground()) {
|
||||||
Executors.newSingleThreadExecutor().execute(Server::startServers);
|
Executors.newSingleThreadExecutor().execute(Server::startServers);
|
||||||
this.serverLauncherGUI.hide();
|
this.serverLauncherGUI.hideToTray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,7 +159,7 @@ public class Profile {
|
|||||||
for (int i = 0; i < collections.size(); i++) {
|
for (int i = 0; i < collections.size(); i++) {
|
||||||
if (collections.get(i).getName().equals(name)) {
|
if (collections.get(i).getName().equals(name)) {
|
||||||
this.collections.remove(i);
|
this.collections.remove(i);
|
||||||
serverLauncherGui.update();
|
serverLauncherGui.updateWithSavedProfileData();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -137,7 +137,7 @@ public class Server {
|
|||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
controller.getGUI().updateRunning(false);
|
controller.getGUI().updateGUIElementsWhenServersStartOrStop(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -323,7 +323,7 @@ public class Server {
|
|||||||
*/
|
*/
|
||||||
public void addPlayer(String name) {
|
public void addPlayer(String name) {
|
||||||
this.playerList.add(name);
|
this.playerList.add(name);
|
||||||
Main.getController().getGUI().addPlayer(name);
|
Main.getController().getGUI().getServerControlTab().addPlayer(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -333,7 +333,7 @@ public class Server {
|
|||||||
*/
|
*/
|
||||||
public void removePlayer(String name) {
|
public void removePlayer(String name) {
|
||||||
playerList.removeIf(player -> player.equals(name));
|
playerList.removeIf(player -> player.equals(name));
|
||||||
Main.getController().getGUI().removePlayer(name);
|
Main.getController().getGUI().getServerControlTab().removePlayer(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -0,0 +1,273 @@
|
|||||||
|
package net.knarcraft.minecraftserverlauncher.userinterface;
|
||||||
|
|
||||||
|
import net.knarcraft.minecraftserverlauncher.profile.Collection;
|
||||||
|
import net.knarcraft.minecraftserverlauncher.profile.Controller;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class takes care of all server controls on the server control tab
|
||||||
|
*/
|
||||||
|
public class ServerControlTab implements ActionListener {
|
||||||
|
|
||||||
|
private JComboBox<String> targetServerCombo;
|
||||||
|
private JComboBox<String> targetPlayerCombo;
|
||||||
|
private JButton kickButton;
|
||||||
|
private JButton banButton;
|
||||||
|
private JButton opButton;
|
||||||
|
private JButton deopButton;
|
||||||
|
private JButton customCommandButton;
|
||||||
|
private JButton saveServerButton;
|
||||||
|
private JButton reloadButton;
|
||||||
|
private JButton showConsolesButton;
|
||||||
|
private JTextField customCommandTextField;
|
||||||
|
|
||||||
|
private Controller controller = Controller.getInstance();
|
||||||
|
private final ArrayList<String> globalPlayers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiates a new server control tab
|
||||||
|
*
|
||||||
|
* @param mainFrame <p>The main frame of the GUI</p>
|
||||||
|
* @param controlServers <p>The JPanel to attach the server controls to</p>
|
||||||
|
*/
|
||||||
|
public ServerControlTab(JFrame mainFrame, JPanel controlServers) {
|
||||||
|
this.globalPlayers = new ArrayList<>();
|
||||||
|
initialize(mainFrame, controlServers);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes GUI elements for the server control tab
|
||||||
|
*
|
||||||
|
* @param mainFrame <p>The main frame of the GUI</p>
|
||||||
|
* @param controlServers <p>The JPanel to attach the server controls to</p>
|
||||||
|
*/
|
||||||
|
private void initialize(JFrame mainFrame, JPanel controlServers) {
|
||||||
|
SpringLayout springLayout = new SpringLayout();
|
||||||
|
controlServers.setLayout(springLayout);
|
||||||
|
targetServerCombo = new JComboBox<>();
|
||||||
|
springLayout.putConstraint(SpringLayout.NORTH, targetServerCombo, 10, SpringLayout.NORTH, controlServers);
|
||||||
|
controlServers.add(targetServerCombo);
|
||||||
|
targetServerCombo.addActionListener(this);
|
||||||
|
|
||||||
|
targetPlayerCombo = new JComboBox<>();
|
||||||
|
springLayout.putConstraint(SpringLayout.NORTH, targetPlayerCombo, 6, SpringLayout.SOUTH, targetServerCombo);
|
||||||
|
targetPlayerCombo.setEditable(true);
|
||||||
|
controlServers.add(targetPlayerCombo);
|
||||||
|
|
||||||
|
kickButton = new JButton("Kick");
|
||||||
|
springLayout.putConstraint(SpringLayout.NORTH, kickButton, 10, SpringLayout.NORTH, controlServers);
|
||||||
|
springLayout.putConstraint(SpringLayout.WEST, kickButton, 6, SpringLayout.EAST, targetServerCombo);
|
||||||
|
springLayout.putConstraint(SpringLayout.EAST, kickButton, 104, SpringLayout.WEST, kickButton);
|
||||||
|
springLayout.putConstraint(SpringLayout.SOUTH, targetServerCombo, 0, SpringLayout.SOUTH, kickButton);
|
||||||
|
controlServers.add(kickButton);
|
||||||
|
kickButton.addActionListener(this);
|
||||||
|
|
||||||
|
banButton = new JButton("Ban");
|
||||||
|
springLayout.putConstraint(SpringLayout.NORTH, banButton, 6, SpringLayout.SOUTH, kickButton);
|
||||||
|
springLayout.putConstraint(SpringLayout.WEST, banButton, 6, SpringLayout.EAST, targetPlayerCombo);
|
||||||
|
springLayout.putConstraint(SpringLayout.EAST, banButton, 104, SpringLayout.WEST, banButton);
|
||||||
|
springLayout.putConstraint(SpringLayout.SOUTH, targetPlayerCombo, 0, SpringLayout.SOUTH, banButton);
|
||||||
|
controlServers.add(banButton);
|
||||||
|
banButton.addActionListener(this);
|
||||||
|
|
||||||
|
opButton = new JButton("OP");
|
||||||
|
springLayout.putConstraint(SpringLayout.NORTH, opButton, 10, SpringLayout.NORTH, controlServers);
|
||||||
|
springLayout.putConstraint(SpringLayout.WEST, opButton, 6, SpringLayout.EAST, kickButton);
|
||||||
|
springLayout.putConstraint(SpringLayout.EAST, opButton, -10, SpringLayout.EAST, controlServers);
|
||||||
|
controlServers.add(opButton);
|
||||||
|
opButton.addActionListener(this);
|
||||||
|
|
||||||
|
deopButton = new JButton("DEOP");
|
||||||
|
springLayout.putConstraint(SpringLayout.WEST, deopButton, 6, SpringLayout.EAST, banButton);
|
||||||
|
springLayout.putConstraint(SpringLayout.NORTH, deopButton, 5, SpringLayout.SOUTH, opButton);
|
||||||
|
springLayout.putConstraint(SpringLayout.EAST, deopButton, -10, SpringLayout.EAST, controlServers);
|
||||||
|
controlServers.add(deopButton);
|
||||||
|
deopButton.addActionListener(this);
|
||||||
|
|
||||||
|
JLabel lblTargetServer = new JLabel("Target server");
|
||||||
|
springLayout.putConstraint(SpringLayout.WEST, targetServerCombo, 6, SpringLayout.EAST, lblTargetServer);
|
||||||
|
springLayout.putConstraint(SpringLayout.EAST, targetServerCombo, 121, SpringLayout.EAST, lblTargetServer);
|
||||||
|
springLayout.putConstraint(SpringLayout.NORTH, lblTargetServer, 10, SpringLayout.NORTH, controlServers);
|
||||||
|
springLayout.putConstraint(SpringLayout.SOUTH, lblTargetServer, 0, SpringLayout.SOUTH, targetServerCombo);
|
||||||
|
springLayout.putConstraint(SpringLayout.WEST, lblTargetServer, 10, SpringLayout.WEST, controlServers);
|
||||||
|
controlServers.add(lblTargetServer);
|
||||||
|
|
||||||
|
JLabel lblTargetPlayer = new JLabel("Target player");
|
||||||
|
springLayout.putConstraint(SpringLayout.WEST, targetPlayerCombo, 7, SpringLayout.EAST, lblTargetPlayer);
|
||||||
|
springLayout.putConstraint(SpringLayout.EAST, targetPlayerCombo, 122, SpringLayout.EAST, lblTargetPlayer);
|
||||||
|
springLayout.putConstraint(SpringLayout.NORTH, lblTargetPlayer, 6, SpringLayout.SOUTH, lblTargetServer);
|
||||||
|
springLayout.putConstraint(SpringLayout.SOUTH, lblTargetPlayer, 0, SpringLayout.SOUTH, targetPlayerCombo);
|
||||||
|
springLayout.putConstraint(SpringLayout.WEST, lblTargetPlayer, 0, SpringLayout.WEST, lblTargetServer);
|
||||||
|
controlServers.add(lblTargetPlayer);
|
||||||
|
|
||||||
|
customCommandButton = new JButton("Custom command");
|
||||||
|
springLayout.putConstraint(SpringLayout.WEST, customCommandButton, 250, SpringLayout.WEST, controlServers);
|
||||||
|
springLayout.putConstraint(SpringLayout.EAST, customCommandButton, 0, SpringLayout.EAST, opButton);
|
||||||
|
controlServers.add(customCommandButton);
|
||||||
|
customCommandButton.addActionListener(this);
|
||||||
|
mainFrame.getRootPane().setDefaultButton(customCommandButton);
|
||||||
|
|
||||||
|
customCommandTextField = new JTextField();
|
||||||
|
springLayout.putConstraint(SpringLayout.WEST, customCommandTextField, 10, SpringLayout.WEST, controlServers);
|
||||||
|
springLayout.putConstraint(SpringLayout.EAST, customCommandTextField, -6, SpringLayout.WEST, customCommandButton);
|
||||||
|
springLayout.putConstraint(SpringLayout.NORTH, customCommandButton, 0, SpringLayout.NORTH, customCommandTextField);
|
||||||
|
springLayout.putConstraint(SpringLayout.SOUTH, customCommandTextField, 0, SpringLayout.SOUTH, customCommandButton);
|
||||||
|
controlServers.add(customCommandTextField);
|
||||||
|
customCommandTextField.setColumns(10);
|
||||||
|
|
||||||
|
saveServerButton = new JButton("Save server");
|
||||||
|
springLayout.putConstraint(SpringLayout.NORTH, customCommandTextField, 6, SpringLayout.SOUTH, saveServerButton);
|
||||||
|
springLayout.putConstraint(SpringLayout.NORTH, saveServerButton, 6, SpringLayout.SOUTH, banButton);
|
||||||
|
springLayout.putConstraint(SpringLayout.WEST, saveServerButton, 0, SpringLayout.WEST, kickButton);
|
||||||
|
springLayout.putConstraint(SpringLayout.EAST, saveServerButton, 104, SpringLayout.WEST, kickButton);
|
||||||
|
springLayout.putConstraint(SpringLayout.EAST, saveServerButton, 104, SpringLayout.WEST, kickButton);
|
||||||
|
controlServers.add(saveServerButton);
|
||||||
|
saveServerButton.addActionListener(this);
|
||||||
|
|
||||||
|
reloadButton = new JButton("Reload");
|
||||||
|
springLayout.putConstraint(SpringLayout.NORTH, reloadButton, 6, SpringLayout.SOUTH, deopButton);
|
||||||
|
springLayout.putConstraint(SpringLayout.WEST, reloadButton, 0, SpringLayout.WEST, deopButton);
|
||||||
|
springLayout.putConstraint(SpringLayout.EAST, reloadButton, 0, SpringLayout.EAST, opButton);
|
||||||
|
controlServers.add(reloadButton);
|
||||||
|
reloadButton.addActionListener(this);
|
||||||
|
|
||||||
|
showConsolesButton = new JButton("View server consoles");
|
||||||
|
springLayout.putConstraint(SpringLayout.NORTH, showConsolesButton, 0, SpringLayout.NORTH, saveServerButton);
|
||||||
|
springLayout.putConstraint(SpringLayout.WEST, showConsolesButton, 0, SpringLayout.WEST, lblTargetServer);
|
||||||
|
springLayout.putConstraint(SpringLayout.EAST, showConsolesButton, 0, SpringLayout.EAST, targetServerCombo);
|
||||||
|
controlServers.add(showConsolesButton);
|
||||||
|
showConsolesButton.addActionListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates available servers according to existing collections
|
||||||
|
*/
|
||||||
|
public void update() {
|
||||||
|
this.targetServerCombo.removeAllItems();
|
||||||
|
this.targetServerCombo.addItem("All");
|
||||||
|
for (Collection collection : Controller.getInstance().getCurrentProfile().getCollections()) {
|
||||||
|
this.targetServerCombo.addItem(collection.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent actionEvent) {
|
||||||
|
//Registers actions on the server control tab
|
||||||
|
handleServerControlTabButtons(actionEvent.getSource());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles buttons and combos on the server control tab
|
||||||
|
*
|
||||||
|
* @param actionSource <p>The object being interacted with</p>
|
||||||
|
*/
|
||||||
|
private void handleServerControlTabButtons(Object actionSource) {
|
||||||
|
String selectedServerValue = null;
|
||||||
|
String selectedPlayerValue = null;
|
||||||
|
Object selectedServer = targetServerCombo.getSelectedItem();
|
||||||
|
if (selectedServer != null) {
|
||||||
|
selectedServerValue = selectedServer.toString();
|
||||||
|
}
|
||||||
|
Object selectedPlayer = targetPlayerCombo.getSelectedItem();
|
||||||
|
if (selectedPlayer != null) {
|
||||||
|
selectedPlayerValue = selectedPlayer.toString();
|
||||||
|
}
|
||||||
|
//Register actions on all commands executed on a specific player
|
||||||
|
handlePlayerCommands(actionSource, selectedServerValue, selectedPlayerValue);
|
||||||
|
//Registers actions on all commands executed on a specific server
|
||||||
|
handleServerCommands(actionSource, selectedServerValue);
|
||||||
|
|
||||||
|
if (actionSource == showConsolesButton) {
|
||||||
|
ServerConsoles.setAsVisible();
|
||||||
|
} else if (actionSource == targetServerCombo) {
|
||||||
|
updatePlayers();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the list of players currently online on the selected server
|
||||||
|
*/
|
||||||
|
private void updatePlayers() {
|
||||||
|
String selectedServerValue;
|
||||||
|
Object selectedServer = targetServerCombo.getSelectedItem();
|
||||||
|
if (selectedServer != null) {
|
||||||
|
targetPlayerCombo.removeAllItems();
|
||||||
|
selectedServerValue = selectedServer.toString();
|
||||||
|
if (selectedServerValue.equals("All")) {
|
||||||
|
for (String player : this.globalPlayers) {
|
||||||
|
targetPlayerCombo.addItem(player);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (String player : controller.getCurrentProfile().getCollection(selectedServerValue).getServer().getPlayers()) {
|
||||||
|
targetPlayerCombo.addItem(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a player to the global player list, and updates the players combo
|
||||||
|
*
|
||||||
|
* @param name <p>The name of the player to add</p>
|
||||||
|
*/
|
||||||
|
public void addPlayer(String name) {
|
||||||
|
this.globalPlayers.add(name);
|
||||||
|
this.updatePlayers();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a player from the global list of players
|
||||||
|
*
|
||||||
|
* @param name <p>The name of the player to remove</p>
|
||||||
|
*/
|
||||||
|
public void removePlayer(String name) {
|
||||||
|
globalPlayers.removeIf(playerName -> playerName.equals(name));
|
||||||
|
this.updatePlayers();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles command buttons acting on a specific server
|
||||||
|
*
|
||||||
|
* @param actionSource <p>The object being interacted with</p>
|
||||||
|
* @param selectedServerValue <p>The server currently selected</p>
|
||||||
|
*/
|
||||||
|
private void handleServerCommands(Object actionSource, String selectedServerValue) {
|
||||||
|
if (selectedServerValue == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (actionSource == customCommandButton) {
|
||||||
|
controller.getCurrentProfile().sendCommand(selectedServerValue, customCommandTextField.getText());
|
||||||
|
customCommandTextField.setText("");
|
||||||
|
} else if (actionSource == saveServerButton) {
|
||||||
|
controller.getCurrentProfile().sendCommand(selectedServerValue, "save-all");
|
||||||
|
} else if (actionSource == reloadButton) {
|
||||||
|
controller.getCurrentProfile().sendCommand(selectedServerValue, "reload");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles command buttons which act on a player
|
||||||
|
*
|
||||||
|
* @param actionSource <p>The clicked object</p>
|
||||||
|
* @param selectedServerValue <p>The server currently selected</p>
|
||||||
|
* @param selectedPlayerValue <p>The player currently selected</p>
|
||||||
|
*/
|
||||||
|
private void handlePlayerCommands(Object actionSource, String selectedServerValue, String selectedPlayerValue) {
|
||||||
|
if (selectedServerValue == null || selectedPlayerValue == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (actionSource == kickButton) {
|
||||||
|
controller.getCurrentProfile().sendCommand(selectedServerValue, "kick " + selectedPlayerValue);
|
||||||
|
} else if (actionSource == banButton) {
|
||||||
|
controller.getCurrentProfile().sendCommand(selectedServerValue, "ban " + selectedPlayerValue);
|
||||||
|
} else if (actionSource == opButton) {
|
||||||
|
controller.getCurrentProfile().sendCommand(selectedServerValue, "op " + selectedPlayerValue);
|
||||||
|
} else if (actionSource == deopButton) {
|
||||||
|
controller.getCurrentProfile().sendCommand(selectedServerValue, "deop " + selectedPlayerValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -3,7 +3,6 @@ package net.knarcraft.minecraftserverlauncher.userinterface;
|
|||||||
import net.knarcraft.minecraftserverlauncher.Main;
|
import net.knarcraft.minecraftserverlauncher.Main;
|
||||||
import net.knarcraft.minecraftserverlauncher.profile.Collection;
|
import net.knarcraft.minecraftserverlauncher.profile.Collection;
|
||||||
import net.knarcraft.minecraftserverlauncher.profile.Controller;
|
import net.knarcraft.minecraftserverlauncher.profile.Controller;
|
||||||
import net.knarcraft.minecraftserverlauncher.profile.Profile;
|
|
||||||
import net.knarcraft.minecraftserverlauncher.server.Server;
|
import net.knarcraft.minecraftserverlauncher.server.Server;
|
||||||
import net.knarcraft.minecraftserverlauncher.utility.CommonFunctions;
|
import net.knarcraft.minecraftserverlauncher.utility.CommonFunctions;
|
||||||
|
|
||||||
@ -36,31 +35,16 @@ import static net.knarcraft.minecraftserverlauncher.utility.CommonFunctions.getR
|
|||||||
public class ServerLauncherGUI extends MessageHandler implements ActionListener, GUI {
|
public class ServerLauncherGUI extends MessageHandler implements ActionListener, GUI {
|
||||||
|
|
||||||
private final JLabel lblStatuslabel = new JLabel("Servers are stopped");
|
private final JLabel lblStatuslabel = new JLabel("Servers are stopped");
|
||||||
private final ArrayList<String> globalPlayers;
|
|
||||||
private Controller controller;
|
private Controller controller;
|
||||||
private Map<String, String> textStrings;
|
private Map<String, String> textStrings;
|
||||||
|
private Tray applicationTray;
|
||||||
|
|
||||||
private JFrame frame;
|
private JFrame frame;
|
||||||
private JTabbedPane tabbedPane;
|
private JTabbedPane tabbedPane;
|
||||||
private JTabbedPane serversPane;
|
private JTabbedPane serversPane;
|
||||||
/*******
|
private ServerControlTab serverControlTab;
|
||||||
* Menu
|
private ServerLauncherMenu serverLauncherMenu;
|
||||||
********/
|
|
||||||
//Options
|
|
||||||
private JCheckBoxMenuItem runInBackgroundCheckBoxMenuItem;
|
|
||||||
private JCheckBoxMenuItem delayStartupCheckBoxMenuItem;
|
|
||||||
private JCheckBoxMenuItem downloadJarsCheckBoxMenuItem;
|
|
||||||
//Help
|
|
||||||
private JMenuItem errorsMenuItem;
|
|
||||||
private JMenuItem setupMenuItem;
|
|
||||||
private JMenuItem manualUpdateMenuItem;
|
|
||||||
//Info/options
|
|
||||||
private JMenuItem runInBackgroundMenuItem;
|
|
||||||
private JMenuItem delayStartupMenuItem;
|
|
||||||
private JMenuItem downloadJarsMenuItem;
|
|
||||||
//Info/about
|
|
||||||
private JMenuItem aboutMenuItem;
|
|
||||||
private JMenuItem storyMenuItem;
|
|
||||||
//Basic controls
|
//Basic controls
|
||||||
private JButton startServerButton;
|
private JButton startServerButton;
|
||||||
private JButton stopServerButton;
|
private JButton stopServerButton;
|
||||||
@ -69,21 +53,6 @@ public class ServerLauncherGUI extends MessageHandler implements ActionListener,
|
|||||||
private JButton addProfileButton;
|
private JButton addProfileButton;
|
||||||
private JButton deleteProfileButton;
|
private JButton deleteProfileButton;
|
||||||
private JComboBox<String> profiles;
|
private JComboBox<String> profiles;
|
||||||
//Server controls
|
|
||||||
private JComboBox<String> targetServerCombo;
|
|
||||||
private JComboBox<String> targetPlayerCombo;
|
|
||||||
private JButton kickButton;
|
|
||||||
private JButton banButton;
|
|
||||||
private JButton opButton;
|
|
||||||
private JButton deopButton;
|
|
||||||
private JButton customCommandButton;
|
|
||||||
private JButton saveServerButton;
|
|
||||||
private JButton reloadButton;
|
|
||||||
private JButton showConsolesButton;
|
|
||||||
private JTextField customCommandTextField;
|
|
||||||
//Tray
|
|
||||||
private SystemTray tray;
|
|
||||||
private TrayIcon trayIcon;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the application window
|
* Creates the application window
|
||||||
@ -93,7 +62,6 @@ public class ServerLauncherGUI extends MessageHandler implements ActionListener,
|
|||||||
initialize(440, 170);
|
initialize(440, 170);
|
||||||
loadMessages();
|
loadMessages();
|
||||||
this.controller = Main.getController();
|
this.controller = Main.getController();
|
||||||
this.globalPlayers = new ArrayList<>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -107,7 +75,6 @@ public class ServerLauncherGUI extends MessageHandler implements ActionListener,
|
|||||||
initialize(width, height);
|
initialize(width, height);
|
||||||
loadMessages();
|
loadMessages();
|
||||||
this.controller = Main.getController();
|
this.controller = Main.getController();
|
||||||
this.globalPlayers = new ArrayList<>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -122,7 +89,8 @@ public class ServerLauncherGUI extends MessageHandler implements ActionListener,
|
|||||||
@Override
|
@Override
|
||||||
public void setStatus(String text) {
|
public void setStatus(String text) {
|
||||||
this.lblStatuslabel.setText(text);
|
this.lblStatuslabel.setText(text);
|
||||||
try (PrintWriter file = new PrintWriter(new FileWriter(Main.getApplicationWorkDirectory() + File.separator + "latestrun.log", true))) {
|
try (PrintWriter file = new PrintWriter(new FileWriter(Main.getApplicationWorkDirectory() +
|
||||||
|
File.separator + "latestrun.log", true))) {
|
||||||
file.println(text);
|
file.println(text);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -144,26 +112,6 @@ public class ServerLauncherGUI extends MessageHandler implements ActionListener,
|
|||||||
return chooser.getSelectedFile();
|
return chooser.getSelectedFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds a player to the global player list, and updates the players combo
|
|
||||||
*
|
|
||||||
* @param name <p>The name of the player to add</p>
|
|
||||||
*/
|
|
||||||
public void addPlayer(String name) {
|
|
||||||
this.globalPlayers.add(name);
|
|
||||||
this.updatePlayers();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes a player from the global list of players
|
|
||||||
*
|
|
||||||
* @param name <p>The name of the player to remove</p>
|
|
||||||
*/
|
|
||||||
public void removePlayer(String name) {
|
|
||||||
globalPlayers.removeIf(playerName -> playerName.equals(name));
|
|
||||||
this.updatePlayers();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the profiles combo
|
* Updates the profiles combo
|
||||||
*/
|
*/
|
||||||
@ -176,6 +124,15 @@ public class ServerLauncherGUI extends MessageHandler implements ActionListener,
|
|||||||
this.profiles.setSelectedItem(selectedProfile);
|
this.profiles.setSelectedItem(selectedProfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the server control tab used by this GUI
|
||||||
|
*
|
||||||
|
* @return <p>The server control tab used by this GUI</p>
|
||||||
|
*/
|
||||||
|
public ServerControlTab getServerControlTab() {
|
||||||
|
return this.serverControlTab;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the size of the main JFrame
|
* Gets the size of the main JFrame
|
||||||
*
|
*
|
||||||
@ -188,22 +145,22 @@ public class ServerLauncherGUI extends MessageHandler implements ActionListener,
|
|||||||
/**
|
/**
|
||||||
* Updates ServerLauncherGUI according to current profile settings
|
* Updates ServerLauncherGUI according to current profile settings
|
||||||
*/
|
*/
|
||||||
public void update() {
|
public void updateWithSavedProfileData() {
|
||||||
Controller controller = Main.getController();
|
Controller controller = Main.getController();
|
||||||
serversPane.removeAll();
|
serversPane.removeAll();
|
||||||
runInBackgroundCheckBoxMenuItem.setState(controller.getRunInBackground());
|
serverLauncherMenu.update();
|
||||||
delayStartupCheckBoxMenuItem.setState(controller.getDelayStartup() > 0);
|
serverControlTab.update();
|
||||||
downloadJarsCheckBoxMenuItem.setState(controller.getDownloadAllJars());
|
|
||||||
this.targetServerCombo.removeAllItems();
|
|
||||||
this.targetServerCombo.addItem("All");
|
|
||||||
for (Collection collection : controller.getCurrentProfile().getCollections()) {
|
for (Collection collection : controller.getCurrentProfile().getCollections()) {
|
||||||
serversPane.addTab(collection.getName(), collection.getServerTab().getPanel());
|
serversPane.addTab(collection.getName(), collection.getServerTab().getPanel());
|
||||||
this.targetServerCombo.addItem(collection.getName());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the ServerLauncherGUI
|
* Initializes the server launcher GUI
|
||||||
|
*
|
||||||
|
* @param width <p>The width of the GUI</p>
|
||||||
|
* @param height <p>The height of the GUI</p>
|
||||||
|
* @throws IOException <p>If unable to load the GUI icon</p>
|
||||||
*/
|
*/
|
||||||
private void initialize(int width, int height) throws IOException {
|
private void initialize(int width, int height) throws IOException {
|
||||||
try {
|
try {
|
||||||
@ -227,64 +184,7 @@ public class ServerLauncherGUI extends MessageHandler implements ActionListener,
|
|||||||
JMenuBar menuBar = new JMenuBar();
|
JMenuBar menuBar = new JMenuBar();
|
||||||
frame.setJMenuBar(menuBar);
|
frame.setJMenuBar(menuBar);
|
||||||
|
|
||||||
JMenu mnOptions = new JMenu("Options");
|
this.serverLauncherMenu = new ServerLauncherMenu(menuBar, this);
|
||||||
menuBar.add(mnOptions);
|
|
||||||
|
|
||||||
runInBackgroundCheckBoxMenuItem = new JCheckBoxMenuItem("Run in background on exit");
|
|
||||||
mnOptions.add(runInBackgroundCheckBoxMenuItem);
|
|
||||||
runInBackgroundCheckBoxMenuItem.addActionListener(this);
|
|
||||||
|
|
||||||
delayStartupCheckBoxMenuItem = new JCheckBoxMenuItem("Delay Startup");
|
|
||||||
mnOptions.add(delayStartupCheckBoxMenuItem);
|
|
||||||
delayStartupCheckBoxMenuItem.addActionListener(this);
|
|
||||||
|
|
||||||
downloadJarsCheckBoxMenuItem = new JCheckBoxMenuItem("Download jars");
|
|
||||||
mnOptions.add(downloadJarsCheckBoxMenuItem);
|
|
||||||
downloadJarsCheckBoxMenuItem.addActionListener(this);
|
|
||||||
|
|
||||||
JMenu mnHelp = new JMenu("Help");
|
|
||||||
menuBar.add(mnHelp);
|
|
||||||
|
|
||||||
errorsMenuItem = new JMenuItem("Errors");
|
|
||||||
mnHelp.add(errorsMenuItem);
|
|
||||||
errorsMenuItem.addActionListener(this);
|
|
||||||
|
|
||||||
setupMenuItem = new JMenuItem("Setup");
|
|
||||||
mnHelp.add(setupMenuItem);
|
|
||||||
setupMenuItem.addActionListener(this);
|
|
||||||
|
|
||||||
manualUpdateMenuItem = new JMenuItem("Manual update");
|
|
||||||
mnHelp.add(manualUpdateMenuItem);
|
|
||||||
manualUpdateMenuItem.addActionListener(this);
|
|
||||||
|
|
||||||
JMenu mnInfo = new JMenu("Info");
|
|
||||||
menuBar.add(mnInfo);
|
|
||||||
|
|
||||||
JMenu mnOptionsInfo = new JMenu("Options");
|
|
||||||
mnInfo.add(mnOptionsInfo);
|
|
||||||
|
|
||||||
runInBackgroundMenuItem = new JMenuItem("Run in background on exit");
|
|
||||||
mnOptionsInfo.add(runInBackgroundMenuItem);
|
|
||||||
runInBackgroundMenuItem.addActionListener(this);
|
|
||||||
|
|
||||||
delayStartupMenuItem = new JMenuItem("Delay Startup");
|
|
||||||
mnOptionsInfo.add(delayStartupMenuItem);
|
|
||||||
delayStartupMenuItem.addActionListener(this);
|
|
||||||
|
|
||||||
downloadJarsMenuItem = new JMenuItem("Download jars");
|
|
||||||
mnOptionsInfo.add(downloadJarsMenuItem);
|
|
||||||
downloadJarsMenuItem.addActionListener(this);
|
|
||||||
|
|
||||||
JMenu mnAbout = new JMenu("About");
|
|
||||||
mnInfo.add(mnAbout);
|
|
||||||
|
|
||||||
aboutMenuItem = new JMenuItem("About");
|
|
||||||
mnAbout.add(aboutMenuItem);
|
|
||||||
aboutMenuItem.addActionListener(this);
|
|
||||||
|
|
||||||
storyMenuItem = new JMenuItem("Story");
|
|
||||||
mnAbout.add(storyMenuItem);
|
|
||||||
storyMenuItem.addActionListener(this);
|
|
||||||
|
|
||||||
tabbedPane = new JTabbedPane(JTabbedPane.TOP);
|
tabbedPane = new JTabbedPane(JTabbedPane.TOP);
|
||||||
frame.getContentPane().add(tabbedPane);
|
frame.getContentPane().add(tabbedPane);
|
||||||
@ -355,102 +255,9 @@ public class ServerLauncherGUI extends MessageHandler implements ActionListener,
|
|||||||
|
|
||||||
JPanel controlServers = new JPanel();
|
JPanel controlServers = new JPanel();
|
||||||
tabbedPane.addTab("Control servers", null, controlServers, null);
|
tabbedPane.addTab("Control servers", null, controlServers, null);
|
||||||
SpringLayout sl_panel_1 = new SpringLayout();
|
|
||||||
controlServers.setLayout(sl_panel_1);
|
|
||||||
|
|
||||||
targetServerCombo = new JComboBox<>();
|
serverControlTab = new ServerControlTab(frame, controlServers);
|
||||||
sl_panel_1.putConstraint(SpringLayout.NORTH, targetServerCombo, 10, SpringLayout.NORTH, controlServers);
|
|
||||||
controlServers.add(targetServerCombo);
|
|
||||||
targetServerCombo.addActionListener(this);
|
|
||||||
|
|
||||||
targetPlayerCombo = new JComboBox<>();
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.NORTH, targetPlayerCombo, 6, SpringLayout.SOUTH, targetServerCombo);
|
|
||||||
targetPlayerCombo.setEditable(true);
|
|
||||||
controlServers.add(targetPlayerCombo);
|
|
||||||
|
|
||||||
kickButton = new JButton("Kick");
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.NORTH, kickButton, 10, SpringLayout.NORTH, controlServers);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.WEST, kickButton, 6, SpringLayout.EAST, targetServerCombo);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.EAST, kickButton, 104, SpringLayout.WEST, kickButton);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.SOUTH, targetServerCombo, 0, SpringLayout.SOUTH, kickButton);
|
|
||||||
controlServers.add(kickButton);
|
|
||||||
kickButton.addActionListener(this);
|
|
||||||
|
|
||||||
banButton = new JButton("Ban");
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.NORTH, banButton, 6, SpringLayout.SOUTH, kickButton);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.WEST, banButton, 6, SpringLayout.EAST, targetPlayerCombo);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.EAST, banButton, 104, SpringLayout.WEST, banButton);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.SOUTH, targetPlayerCombo, 0, SpringLayout.SOUTH, banButton);
|
|
||||||
controlServers.add(banButton);
|
|
||||||
banButton.addActionListener(this);
|
|
||||||
|
|
||||||
opButton = new JButton("OP");
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.NORTH, opButton, 10, SpringLayout.NORTH, controlServers);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.WEST, opButton, 6, SpringLayout.EAST, kickButton);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.EAST, opButton, -10, SpringLayout.EAST, controlServers);
|
|
||||||
controlServers.add(opButton);
|
|
||||||
opButton.addActionListener(this);
|
|
||||||
|
|
||||||
deopButton = new JButton("DEOP");
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.WEST, deopButton, 6, SpringLayout.EAST, banButton);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.NORTH, deopButton, 5, SpringLayout.SOUTH, opButton);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.EAST, deopButton, -10, SpringLayout.EAST, controlServers);
|
|
||||||
controlServers.add(deopButton);
|
|
||||||
deopButton.addActionListener(this);
|
|
||||||
|
|
||||||
JLabel lblTargetServer = new JLabel("Target server");
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.WEST, targetServerCombo, 6, SpringLayout.EAST, lblTargetServer);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.EAST, targetServerCombo, 121, SpringLayout.EAST, lblTargetServer);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.NORTH, lblTargetServer, 10, SpringLayout.NORTH, controlServers);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.SOUTH, lblTargetServer, 0, SpringLayout.SOUTH, targetServerCombo);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.WEST, lblTargetServer, 10, SpringLayout.WEST, controlServers);
|
|
||||||
controlServers.add(lblTargetServer);
|
|
||||||
|
|
||||||
JLabel lblTargetPlayer = new JLabel("Target player");
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.WEST, targetPlayerCombo, 7, SpringLayout.EAST, lblTargetPlayer);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.EAST, targetPlayerCombo, 122, SpringLayout.EAST, lblTargetPlayer);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.NORTH, lblTargetPlayer, 6, SpringLayout.SOUTH, lblTargetServer);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.SOUTH, lblTargetPlayer, 0, SpringLayout.SOUTH, targetPlayerCombo);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.WEST, lblTargetPlayer, 0, SpringLayout.WEST, lblTargetServer);
|
|
||||||
controlServers.add(lblTargetPlayer);
|
|
||||||
|
|
||||||
customCommandButton = new JButton("Custom command");
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.WEST, customCommandButton, 250, SpringLayout.WEST, controlServers);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.EAST, customCommandButton, 0, SpringLayout.EAST, opButton);
|
|
||||||
controlServers.add(customCommandButton);
|
|
||||||
customCommandButton.addActionListener(this);
|
|
||||||
frame.getRootPane().setDefaultButton(customCommandButton);
|
|
||||||
|
|
||||||
customCommandTextField = new JTextField();
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.WEST, customCommandTextField, 10, SpringLayout.WEST, controlServers);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.EAST, customCommandTextField, -6, SpringLayout.WEST, customCommandButton);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.NORTH, customCommandButton, 0, SpringLayout.NORTH, customCommandTextField);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.SOUTH, customCommandTextField, 0, SpringLayout.SOUTH, customCommandButton);
|
|
||||||
controlServers.add(customCommandTextField);
|
|
||||||
customCommandTextField.setColumns(10);
|
|
||||||
|
|
||||||
saveServerButton = new JButton("Save server");
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.NORTH, customCommandTextField, 6, SpringLayout.SOUTH, saveServerButton);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.NORTH, saveServerButton, 6, SpringLayout.SOUTH, banButton);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.WEST, saveServerButton, 0, SpringLayout.WEST, kickButton);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.EAST, saveServerButton, 104, SpringLayout.WEST, kickButton);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.EAST, saveServerButton, 104, SpringLayout.WEST, kickButton);
|
|
||||||
controlServers.add(saveServerButton);
|
|
||||||
saveServerButton.addActionListener(this);
|
|
||||||
|
|
||||||
reloadButton = new JButton("Reload");
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.NORTH, reloadButton, 6, SpringLayout.SOUTH, deopButton);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.WEST, reloadButton, 0, SpringLayout.WEST, deopButton);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.EAST, reloadButton, 0, SpringLayout.EAST, opButton);
|
|
||||||
controlServers.add(reloadButton);
|
|
||||||
reloadButton.addActionListener(this);
|
|
||||||
|
|
||||||
showConsolesButton = new JButton("View server consoles");
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.NORTH, showConsolesButton, 0, SpringLayout.NORTH, saveServerButton);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.WEST, showConsolesButton, 0, SpringLayout.WEST, lblTargetServer);
|
|
||||||
sl_panel_1.putConstraint(SpringLayout.EAST, showConsolesButton, 0, SpringLayout.EAST, targetServerCombo);
|
|
||||||
controlServers.add(showConsolesButton);
|
|
||||||
showConsolesButton.addActionListener(this);
|
|
||||||
|
|
||||||
JPanel panel_2 = new JPanel();
|
JPanel panel_2 = new JPanel();
|
||||||
tabbedPane.addTab("Servers", null, panel_2, null);
|
tabbedPane.addTab("Servers", null, panel_2, null);
|
||||||
@ -470,204 +277,97 @@ public class ServerLauncherGUI extends MessageHandler implements ActionListener,
|
|||||||
frame.validate();
|
frame.validate();
|
||||||
frame.pack();
|
frame.pack();
|
||||||
frame.setVisible(true);
|
frame.setVisible(true);
|
||||||
tray();
|
applicationTray = new Tray(frame, this);
|
||||||
updateRunning(false);
|
updateGUIElementsWhenServersStartOrStop(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepares the system tray if available
|
* Hides the GUI to the system tray
|
||||||
*/
|
*/
|
||||||
private void tray() {
|
public void hideToTray() {
|
||||||
if (SystemTray.isSupported()) {
|
applicationTray.hideToTray();
|
||||||
tray = SystemTray.getSystemTray();
|
}
|
||||||
InputStream imageStream = CommonFunctions.getResourceAsStream("GUIIcon.png");
|
|
||||||
Image trayImage;
|
|
||||||
try {
|
|
||||||
trayImage = ImageIO.read(imageStream);
|
|
||||||
} catch (IOException e) {
|
|
||||||
trayImage = Toolkit.getDefaultToolkit().getImage("resources/GUIIcon.png");
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
PopupMenu popup = new PopupMenu();
|
|
||||||
trayIcon = new TrayIcon(trayImage, "Minecraft Server Launcher", popup);
|
|
||||||
trayIcon.setImageAutoSize(true);
|
|
||||||
ActionListener exitListener = e -> {
|
|
||||||
stop();
|
|
||||||
controller.saveState();
|
|
||||||
System.exit(0);
|
|
||||||
};
|
|
||||||
|
|
||||||
MenuItem restoreItem = new MenuItem("Restore");
|
/**
|
||||||
popup.add(restoreItem);
|
* Gets the currently selected profile
|
||||||
restoreItem.addActionListener(e -> {
|
*
|
||||||
frame.setExtendedState(NORMAL);
|
* @return <p>The currently selected profile or null</p>
|
||||||
tray.remove(trayIcon);
|
*/
|
||||||
frame.setVisible(true);
|
public String getSelectedProfile() {
|
||||||
});
|
Object selectedProfile = profiles.getSelectedItem();
|
||||||
MenuItem exitItem = new MenuItem("Exit");
|
if (selectedProfile != null) {
|
||||||
exitItem.addActionListener(exitListener);
|
return selectedProfile.toString();
|
||||||
popup.add(exitItem);
|
|
||||||
frame.addWindowStateListener(e -> {
|
|
||||||
if (e.getNewState() == NORMAL) {
|
|
||||||
tray.remove(trayIcon);
|
|
||||||
frame.setVisible(true);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
frame.addWindowListener(new WindowAdapter() {
|
|
||||||
@Override
|
|
||||||
public void windowClosing(WindowEvent e) {
|
|
||||||
if (controller.getRunInBackground() && SystemTray.isSupported()) {
|
|
||||||
try {
|
|
||||||
tray.add(trayIcon);
|
|
||||||
frame.setVisible(false);
|
|
||||||
} catch (AWTException e1) {
|
|
||||||
e1.printStackTrace();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
stop();
|
|
||||||
controller.saveState();
|
|
||||||
System.exit(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
trayIcon.addMouseListener(new MouseAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mousePressed(MouseEvent e) {
|
|
||||||
if (e.getClickCount() >= 1 && e.getButton() == MouseEvent.BUTTON1) {
|
|
||||||
frame.setExtendedState(NORMAL);
|
|
||||||
tray.remove(trayIcon);
|
|
||||||
frame.setVisible(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
frame.addWindowListener(new WindowAdapter() {
|
return null;
|
||||||
@Override
|
|
||||||
public void windowClosing(WindowEvent e) {
|
|
||||||
controller.saveState();
|
|
||||||
stop();
|
|
||||||
System.exit(0);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hides the gui to the tray
|
|
||||||
*/
|
|
||||||
public void hide() {
|
|
||||||
frame.setVisible(false);
|
|
||||||
try {
|
|
||||||
tray.add(trayIcon);
|
|
||||||
} catch (AWTException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
String selectedServerValue = null, selectedPlayerValue = null;
|
Object actionSource = e.getSource();
|
||||||
Object selectedServer = targetServerCombo.getSelectedItem();
|
//Registers actions on the main tab
|
||||||
if (selectedServer != null) {
|
handleMainTabButtons(actionSource);
|
||||||
selectedServerValue = selectedServer.toString();
|
}
|
||||||
}
|
|
||||||
Object selectedPlayer = targetPlayerCombo.getSelectedItem();
|
|
||||||
if (selectedPlayer != null) {
|
|
||||||
selectedPlayerValue = selectedPlayer.toString();
|
/**
|
||||||
}
|
* Handles buttons and the combo on the main tab
|
||||||
if (e.getSource() == runInBackgroundCheckBoxMenuItem) {
|
*
|
||||||
background();
|
* @param actionSource <p>The object being interacted with</p>
|
||||||
} else if (e.getSource() == delayStartupCheckBoxMenuItem) {
|
*/
|
||||||
delay();
|
private void handleMainTabButtons(Object actionSource) {
|
||||||
} else if (e.getSource() == downloadJarsCheckBoxMenuItem) {
|
if (actionSource == startServerButton) {
|
||||||
downloadJars();
|
|
||||||
} else if (e.getSource() == errorsMenuItem) {
|
|
||||||
CommonFunctions.goToURL(textStrings.get("infoURL"));
|
|
||||||
} else if (e.getSource() == setupMenuItem) {
|
|
||||||
showMessage("Setup", textStrings.get("setupText"));
|
|
||||||
} else if (e.getSource() == manualUpdateMenuItem) {
|
|
||||||
CommonFunctions.goToURL(textStrings.get("manualUpdateURL"));
|
|
||||||
} else if (e.getSource() == runInBackgroundMenuItem) {
|
|
||||||
showMessage("Run in background", textStrings.get("runInBackgroundText"));
|
|
||||||
} else if (e.getSource() == delayStartupMenuItem) {
|
|
||||||
showMessage("Delay startup", textStrings.get("delayStartupText"));
|
|
||||||
} else if (e.getSource() == downloadJarsMenuItem) {
|
|
||||||
showMessage("Download jars", textStrings.get("downloadJarsText"));
|
|
||||||
} else if (e.getSource() == aboutMenuItem) {
|
|
||||||
showMessage("About", textStrings.get("aboutText"));
|
|
||||||
} else if (e.getSource() == storyMenuItem) {
|
|
||||||
CommonFunctions.goToURL(textStrings.get("storyURL"));
|
|
||||||
} else if (e.getSource() == startServerButton) {
|
|
||||||
controller.saveState();
|
controller.saveState();
|
||||||
Executors.newSingleThreadExecutor().execute(Server::startServers);
|
Executors.newSingleThreadExecutor().execute(Server::startServers);
|
||||||
} else if (e.getSource() == stopServerButton) {
|
} else if (actionSource == stopServerButton) {
|
||||||
stop();
|
stopServers();
|
||||||
} else if (e.getSource() == addServerButton) {
|
} else if (actionSource == addServerButton) {
|
||||||
String serverName = JOptionPane.showInputDialog("Name of server: ");
|
addServer();
|
||||||
try {
|
} else if (actionSource == backupButton) {
|
||||||
controller.getCurrentProfile().addCollection(serverName);
|
|
||||||
} catch (ConfigurationException e1) {
|
|
||||||
e1.printStackTrace();
|
|
||||||
}
|
|
||||||
this.update();
|
|
||||||
controller.getCurrentProfile().updateConsoles();
|
|
||||||
} else if (e.getSource() == backupButton) {
|
|
||||||
CommonFunctions.backup(this);
|
CommonFunctions.backup(this);
|
||||||
} else if (e.getSource() == addProfileButton) {
|
} else if (actionSource == addProfileButton) {
|
||||||
controller.addProfile(JOptionPane.showInputDialog("Profile name: "));
|
controller.addProfile(JOptionPane.showInputDialog("Profile name: "));
|
||||||
updateProfiles();
|
updateProfiles();
|
||||||
} else if (e.getSource() == deleteProfileButton) {
|
} else if (actionSource == deleteProfileButton) {
|
||||||
Object selected = profiles.getSelectedItem();
|
deleteProfile();
|
||||||
if (selected != null) {
|
} else if (actionSource == profiles) {
|
||||||
controller.removeProfile(selected.toString());
|
|
||||||
updateProfiles();
|
|
||||||
}
|
|
||||||
} else if (e.getSource() == profiles) {
|
|
||||||
changeProfile();
|
changeProfile();
|
||||||
} else if (e.getSource() == kickButton) {
|
|
||||||
if (selectedServerValue != null && selectedPlayerValue != null) {
|
|
||||||
controller.getCurrentProfile().sendCommand(selectedServerValue, "kick " + selectedPlayerValue);
|
|
||||||
}
|
|
||||||
} else if (e.getSource() == banButton) {
|
|
||||||
if (selectedServerValue != null && selectedPlayerValue != null) {
|
|
||||||
controller.getCurrentProfile().sendCommand(selectedServerValue, "ban " + selectedPlayerValue);
|
|
||||||
}
|
|
||||||
} else if (e.getSource() == opButton) {
|
|
||||||
if (selectedServerValue != null && selectedPlayerValue != null) {
|
|
||||||
controller.getCurrentProfile().sendCommand(selectedServerValue, "op " + selectedPlayerValue);
|
|
||||||
}
|
|
||||||
} else if (e.getSource() == deopButton) {
|
|
||||||
if (selectedServerValue != null && selectedPlayerValue != null) {
|
|
||||||
controller.getCurrentProfile().sendCommand(selectedServerValue, "deop " + selectedPlayerValue);
|
|
||||||
}
|
|
||||||
} else if (e.getSource() == customCommandButton) {
|
|
||||||
if (selectedServerValue != null) {
|
|
||||||
controller.getCurrentProfile().sendCommand(selectedServerValue, customCommandTextField.getText());
|
|
||||||
customCommandTextField.setText("");
|
|
||||||
}
|
|
||||||
} else if (e.getSource() == saveServerButton) {
|
|
||||||
if (selectedServerValue != null) {
|
|
||||||
controller.getCurrentProfile().sendCommand(selectedServerValue, "save-all");
|
|
||||||
}
|
|
||||||
} else if (e.getSource() == reloadButton) {
|
|
||||||
if (selectedServerValue != null) {
|
|
||||||
controller.getCurrentProfile().sendCommand(selectedServerValue, "reload");
|
|
||||||
}
|
|
||||||
} else if (e.getSource() == showConsolesButton) {
|
|
||||||
ServerConsoles.setAsVisible();
|
|
||||||
} else if (e.getSource() == targetServerCombo) {
|
|
||||||
updatePlayers();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes the selected profile
|
||||||
|
*/
|
||||||
|
private void deleteProfile() {
|
||||||
|
Object selected = profiles.getSelectedItem();
|
||||||
|
if (selected != null) {
|
||||||
|
controller.removeProfile(selected.toString());
|
||||||
|
updateProfiles();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a new server with a server tab
|
||||||
|
*/
|
||||||
|
private void addServer() {
|
||||||
|
String serverName = JOptionPane.showInputDialog("Name of server: ");
|
||||||
|
try {
|
||||||
|
controller.getCurrentProfile().addCollection(serverName);
|
||||||
|
} catch (ConfigurationException e1) {
|
||||||
|
e1.printStackTrace();
|
||||||
|
}
|
||||||
|
this.updateWithSavedProfileData();
|
||||||
|
controller.getCurrentProfile().updateConsoles();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the ServerLauncherGUI components to block a user from doing illegal actions
|
* Updates the ServerLauncherGUI components to block a user from doing illegal actions
|
||||||
*
|
*
|
||||||
* @param running <p>Whether the servers are currently running</p>
|
* @param running <p>Whether the servers are currently running</p>
|
||||||
*/
|
*/
|
||||||
public void updateRunning(boolean running) {
|
public void updateGUIElementsWhenServersStartOrStop(boolean running) {
|
||||||
boolean stopped = !running; //Most gui is only enabled when the server is stopped rather than running.
|
boolean stopped = !running; //Most gui is only enabled when the server is stopped rather than running.
|
||||||
profiles.setEnabled(stopped);
|
profiles.setEnabled(stopped);
|
||||||
addProfileButton.setEnabled(stopped);
|
addProfileButton.setEnabled(stopped);
|
||||||
@ -687,14 +387,14 @@ public class ServerLauncherGUI extends MessageHandler implements ActionListener,
|
|||||||
if (current != null) {
|
if (current != null) {
|
||||||
controller.setCurrentProfile(current.toString());
|
controller.setCurrentProfile(current.toString());
|
||||||
}
|
}
|
||||||
this.update();
|
this.updateWithSavedProfileData();
|
||||||
controller.getCurrentProfile().updateConsoles();
|
controller.getCurrentProfile().updateConsoles();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stops all servers
|
* Stops all servers
|
||||||
*/
|
*/
|
||||||
private void stop() {
|
public void stopServers() {
|
||||||
try {
|
try {
|
||||||
setStatus("Servers are stopping...");
|
setStatus("Servers are stopping...");
|
||||||
Server.stop();
|
Server.stop();
|
||||||
@ -705,72 +405,13 @@ public class ServerLauncherGUI extends MessageHandler implements ActionListener,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Asks the user for a delay if checked, and sets the value to the current profile
|
* Gets a specific message from its key
|
||||||
|
*
|
||||||
|
* @param stringKey <p>The key for the string to get</p>
|
||||||
|
* @return <p>The corresponding string</p>
|
||||||
*/
|
*/
|
||||||
private void delay() {
|
public String getMessage(String stringKey) {
|
||||||
Object selected = profiles.getSelectedItem();
|
return textStrings.get(stringKey);
|
||||||
if (selected != null) {
|
|
||||||
Profile profile = controller.getProfileByName(selected.toString());
|
|
||||||
if (delayStartupCheckBoxMenuItem.isSelected()) {
|
|
||||||
String response = JOptionPane.showInputDialog("Seconds to delay: ");
|
|
||||||
if (response == null) {
|
|
||||||
delayStartupCheckBoxMenuItem.setState(false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
int parsed = Integer.parseInt(response);
|
|
||||||
Objects.requireNonNull(profile).setDelayStartup(parsed);
|
|
||||||
} else {
|
|
||||||
Objects.requireNonNull(profile).setDelayStartup(0);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
showError("No profile selected");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Saves the runInBackground setting to the current profile
|
|
||||||
*/
|
|
||||||
private void background() {
|
|
||||||
Object selected = profiles.getSelectedItem();
|
|
||||||
if (selected != null) {
|
|
||||||
Profile profile = controller.getProfileByName(selected.toString());
|
|
||||||
Objects.requireNonNull(profile).setRunInBackground(runInBackgroundCheckBoxMenuItem.isSelected());
|
|
||||||
} else {
|
|
||||||
showError("No profile selected");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Saves the downloadJars setting to the current profile
|
|
||||||
*/
|
|
||||||
private void downloadJars() {
|
|
||||||
Object selected = profiles.getSelectedItem();
|
|
||||||
if (selected != null) {
|
|
||||||
controller.setDownloadAllJars(downloadJarsCheckBoxMenuItem.isSelected());
|
|
||||||
} else {
|
|
||||||
showError("No profile selected");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Updates the list of players currently online on the selected server
|
|
||||||
*/
|
|
||||||
private void updatePlayers() {
|
|
||||||
String selectedServerValue;
|
|
||||||
Object selectedServer = targetServerCombo.getSelectedItem();
|
|
||||||
if (selectedServer != null) {
|
|
||||||
targetPlayerCombo.removeAllItems();
|
|
||||||
selectedServerValue = selectedServer.toString();
|
|
||||||
if (selectedServerValue.equals("All")) {
|
|
||||||
for (String player : this.globalPlayers) {
|
|
||||||
targetPlayerCombo.addItem(player);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (String player : controller.getCurrentProfile().getCollection(selectedServerValue).getServer().getPlayers()) {
|
|
||||||
targetPlayerCombo.addItem(player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -0,0 +1,195 @@
|
|||||||
|
package net.knarcraft.minecraftserverlauncher.userinterface;
|
||||||
|
|
||||||
|
import net.knarcraft.minecraftserverlauncher.profile.Controller;
|
||||||
|
import net.knarcraft.minecraftserverlauncher.profile.Profile;
|
||||||
|
import net.knarcraft.minecraftserverlauncher.utility.CommonFunctions;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class takes care of the GUI's top menu
|
||||||
|
*/
|
||||||
|
public class ServerLauncherMenu implements ActionListener {
|
||||||
|
|
||||||
|
private JMenuBar menuBar;
|
||||||
|
//Options
|
||||||
|
private JCheckBoxMenuItem runInBackgroundCheckBoxMenuItem;
|
||||||
|
private JCheckBoxMenuItem delayStartupCheckBoxMenuItem;
|
||||||
|
private JCheckBoxMenuItem downloadJarsCheckBoxMenuItem;
|
||||||
|
//Help
|
||||||
|
private JMenuItem errorsMenuItem;
|
||||||
|
private JMenuItem setupMenuItem;
|
||||||
|
private JMenuItem manualUpdateMenuItem;
|
||||||
|
//Info/options
|
||||||
|
private JMenuItem runInBackgroundMenuItem;
|
||||||
|
private JMenuItem delayStartupMenuItem;
|
||||||
|
private JMenuItem downloadJarsMenuItem;
|
||||||
|
//Info/about
|
||||||
|
private JMenuItem aboutMenuItem;
|
||||||
|
private JMenuItem storyMenuItem;
|
||||||
|
|
||||||
|
private Controller controller;
|
||||||
|
private ServerLauncherGUI serverLauncherGUI;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes a new server launcher menu
|
||||||
|
*
|
||||||
|
* @param menuBar <p>The menu bar to attach items to</p>
|
||||||
|
* @param serverLauncherGUI <p>The server launcher GUI to use</p>
|
||||||
|
*/
|
||||||
|
public ServerLauncherMenu(JMenuBar menuBar, ServerLauncherGUI serverLauncherGUI) {
|
||||||
|
this.controller = Controller.getInstance();
|
||||||
|
this.menuBar = menuBar;
|
||||||
|
this.serverLauncherGUI = serverLauncherGUI;
|
||||||
|
initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes all GUI elements
|
||||||
|
*/
|
||||||
|
public void initialize() {
|
||||||
|
JMenu mnOptions = new JMenu("Options");
|
||||||
|
menuBar.add(mnOptions);
|
||||||
|
|
||||||
|
runInBackgroundCheckBoxMenuItem = new JCheckBoxMenuItem("Run in background on exit");
|
||||||
|
mnOptions.add(runInBackgroundCheckBoxMenuItem);
|
||||||
|
runInBackgroundCheckBoxMenuItem.addActionListener(this);
|
||||||
|
|
||||||
|
delayStartupCheckBoxMenuItem = new JCheckBoxMenuItem("Delay Startup");
|
||||||
|
mnOptions.add(delayStartupCheckBoxMenuItem);
|
||||||
|
delayStartupCheckBoxMenuItem.addActionListener(this);
|
||||||
|
|
||||||
|
downloadJarsCheckBoxMenuItem = new JCheckBoxMenuItem("Download jars");
|
||||||
|
mnOptions.add(downloadJarsCheckBoxMenuItem);
|
||||||
|
downloadJarsCheckBoxMenuItem.addActionListener(this);
|
||||||
|
|
||||||
|
JMenu mnHelp = new JMenu("Help");
|
||||||
|
menuBar.add(mnHelp);
|
||||||
|
|
||||||
|
errorsMenuItem = new JMenuItem("Errors");
|
||||||
|
mnHelp.add(errorsMenuItem);
|
||||||
|
errorsMenuItem.addActionListener(this);
|
||||||
|
|
||||||
|
setupMenuItem = new JMenuItem("Setup");
|
||||||
|
mnHelp.add(setupMenuItem);
|
||||||
|
setupMenuItem.addActionListener(this);
|
||||||
|
|
||||||
|
manualUpdateMenuItem = new JMenuItem("Manual update");
|
||||||
|
mnHelp.add(manualUpdateMenuItem);
|
||||||
|
manualUpdateMenuItem.addActionListener(this);
|
||||||
|
|
||||||
|
JMenu mnInfo = new JMenu("Info");
|
||||||
|
menuBar.add(mnInfo);
|
||||||
|
|
||||||
|
JMenu mnOptionsInfo = new JMenu("Options");
|
||||||
|
mnInfo.add(mnOptionsInfo);
|
||||||
|
|
||||||
|
runInBackgroundMenuItem = new JMenuItem("Run in background on exit");
|
||||||
|
mnOptionsInfo.add(runInBackgroundMenuItem);
|
||||||
|
runInBackgroundMenuItem.addActionListener(this);
|
||||||
|
|
||||||
|
delayStartupMenuItem = new JMenuItem("Delay Startup");
|
||||||
|
mnOptionsInfo.add(delayStartupMenuItem);
|
||||||
|
delayStartupMenuItem.addActionListener(this);
|
||||||
|
|
||||||
|
downloadJarsMenuItem = new JMenuItem("Download jars");
|
||||||
|
mnOptionsInfo.add(downloadJarsMenuItem);
|
||||||
|
downloadJarsMenuItem.addActionListener(this);
|
||||||
|
|
||||||
|
JMenu mnAbout = new JMenu("About");
|
||||||
|
mnInfo.add(mnAbout);
|
||||||
|
|
||||||
|
aboutMenuItem = new JMenuItem("About");
|
||||||
|
mnAbout.add(aboutMenuItem);
|
||||||
|
aboutMenuItem.addActionListener(this);
|
||||||
|
|
||||||
|
storyMenuItem = new JMenuItem("Story");
|
||||||
|
mnAbout.add(storyMenuItem);
|
||||||
|
storyMenuItem.addActionListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update() {
|
||||||
|
runInBackgroundCheckBoxMenuItem.setState(controller.getRunInBackground());
|
||||||
|
delayStartupCheckBoxMenuItem.setState(controller.getDelayStartup() > 0);
|
||||||
|
downloadJarsCheckBoxMenuItem.setState(controller.getDownloadAllJars());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent actionEvent) {
|
||||||
|
Object actionSource = actionEvent.getSource();
|
||||||
|
if (actionSource == runInBackgroundCheckBoxMenuItem) {
|
||||||
|
background();
|
||||||
|
} else if (actionSource == delayStartupCheckBoxMenuItem) {
|
||||||
|
delay();
|
||||||
|
} else if (actionSource == downloadJarsCheckBoxMenuItem) {
|
||||||
|
downloadJars();
|
||||||
|
} else if (actionSource == errorsMenuItem) {
|
||||||
|
CommonFunctions.goToURL(serverLauncherGUI.getMessage("infoURL"));
|
||||||
|
} else if (actionSource == setupMenuItem) {
|
||||||
|
serverLauncherGUI.showMessage("Setup", serverLauncherGUI.getMessage("setupText"));
|
||||||
|
} else if (actionSource == manualUpdateMenuItem) {
|
||||||
|
CommonFunctions.goToURL(serverLauncherGUI.getMessage("manualUpdateURL"));
|
||||||
|
} else if (actionSource == runInBackgroundMenuItem) {
|
||||||
|
serverLauncherGUI.showMessage("Run in background", serverLauncherGUI.getMessage("runInBackgroundText"));
|
||||||
|
} else if (actionSource == delayStartupMenuItem) {
|
||||||
|
serverLauncherGUI.showMessage("Delay startup", serverLauncherGUI.getMessage("delayStartupText"));
|
||||||
|
} else if (actionSource == downloadJarsMenuItem) {
|
||||||
|
serverLauncherGUI.showMessage("Download jars", serverLauncherGUI.getMessage("downloadJarsText"));
|
||||||
|
} else if (actionSource == aboutMenuItem) {
|
||||||
|
serverLauncherGUI.showMessage("About", serverLauncherGUI.getMessage("aboutText"));
|
||||||
|
} else if (actionSource == storyMenuItem) {
|
||||||
|
CommonFunctions.goToURL(serverLauncherGUI.getMessage("storyURL"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Asks the user for a delay if checked, and sets the value to the current profile
|
||||||
|
*/
|
||||||
|
private void delay() {
|
||||||
|
String selectedProfile = serverLauncherGUI.getSelectedProfile();
|
||||||
|
if (selectedProfile != null) {
|
||||||
|
Profile profile = controller.getProfileByName(selectedProfile);
|
||||||
|
if (delayStartupCheckBoxMenuItem.isSelected()) {
|
||||||
|
String response = JOptionPane.showInputDialog("Seconds to delay: ");
|
||||||
|
if (response == null) {
|
||||||
|
delayStartupCheckBoxMenuItem.setState(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int parsed = Integer.parseInt(response);
|
||||||
|
Objects.requireNonNull(profile).setDelayStartup(parsed);
|
||||||
|
} else {
|
||||||
|
Objects.requireNonNull(profile).setDelayStartup(0);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
serverLauncherGUI.showError("No profile selected");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves the runInBackground setting to the current profile
|
||||||
|
*/
|
||||||
|
private void background() {
|
||||||
|
String selectedProfile = serverLauncherGUI.getSelectedProfile();
|
||||||
|
if (selectedProfile != null) {
|
||||||
|
Profile profile = controller.getProfileByName(selectedProfile);
|
||||||
|
Objects.requireNonNull(profile).setRunInBackground(runInBackgroundCheckBoxMenuItem.isSelected());
|
||||||
|
} else {
|
||||||
|
serverLauncherGUI.showError("No profile selected");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves the downloadJars setting to the current profile
|
||||||
|
*/
|
||||||
|
private void downloadJars() {
|
||||||
|
String selectedProfile = serverLauncherGUI.getSelectedProfile();
|
||||||
|
if (selectedProfile != null) {
|
||||||
|
controller.setDownloadAllJars(downloadJarsCheckBoxMenuItem.isSelected());
|
||||||
|
} else {
|
||||||
|
serverLauncherGUI.showError("No profile selected");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -227,7 +227,7 @@ public class ServerTab implements ActionListener {
|
|||||||
*/
|
*/
|
||||||
private void remove() {
|
private void remove() {
|
||||||
Main.getController().getCurrentProfile().removeCollection(this.name);
|
Main.getController().getCurrentProfile().removeCollection(this.name);
|
||||||
Main.getController().getGUI().update();
|
Main.getController().getGUI().updateWithSavedProfileData();
|
||||||
Main.getController().getCurrentProfile().updateConsoles();
|
Main.getController().getCurrentProfile().updateConsoles();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,132 @@
|
|||||||
|
package net.knarcraft.minecraftserverlauncher.userinterface;
|
||||||
|
|
||||||
|
import net.knarcraft.minecraftserverlauncher.Main;
|
||||||
|
import net.knarcraft.minecraftserverlauncher.profile.Controller;
|
||||||
|
import net.knarcraft.minecraftserverlauncher.utility.CommonFunctions;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
import static java.awt.Frame.NORMAL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class adds a tray to the GUI
|
||||||
|
*/
|
||||||
|
public class Tray {
|
||||||
|
|
||||||
|
private SystemTray tray;
|
||||||
|
private TrayIcon trayIcon;
|
||||||
|
private Controller controller;
|
||||||
|
private ServerLauncherGUI serverLauncherGUI;
|
||||||
|
private JFrame mainFrame;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiates a new tray
|
||||||
|
*
|
||||||
|
* @param mainFrame <p>The main frame of the GUI</p>
|
||||||
|
* @param serverLauncherGUI <p>The server launcher GUI to use</p>
|
||||||
|
*/
|
||||||
|
public Tray(JFrame mainFrame, ServerLauncherGUI serverLauncherGUI) {
|
||||||
|
this.controller = Main.getController();
|
||||||
|
this.mainFrame = mainFrame;
|
||||||
|
this.serverLauncherGUI = serverLauncherGUI;
|
||||||
|
initializeTray();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepares the system tray if available
|
||||||
|
*/
|
||||||
|
private void initializeTray() {
|
||||||
|
if (SystemTray.isSupported()) {
|
||||||
|
tray = SystemTray.getSystemTray();
|
||||||
|
InputStream imageStream = CommonFunctions.getResourceAsStream("GUIIcon.png");
|
||||||
|
Image trayImage;
|
||||||
|
try {
|
||||||
|
trayImage = ImageIO.read(imageStream);
|
||||||
|
} catch (IOException e) {
|
||||||
|
trayImage = Toolkit.getDefaultToolkit().getImage("resources/GUIIcon.png");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
PopupMenu popup = new PopupMenu();
|
||||||
|
trayIcon = new TrayIcon(trayImage, "Minecraft Server Launcher", popup);
|
||||||
|
trayIcon.setImageAutoSize(true);
|
||||||
|
ActionListener exitListener = e -> {
|
||||||
|
serverLauncherGUI.stopServers();
|
||||||
|
controller.saveState();
|
||||||
|
System.exit(0);
|
||||||
|
};
|
||||||
|
|
||||||
|
MenuItem restoreItem = new MenuItem("Restore");
|
||||||
|
popup.add(restoreItem);
|
||||||
|
restoreItem.addActionListener(e -> {
|
||||||
|
mainFrame.setExtendedState(NORMAL);
|
||||||
|
tray.remove(trayIcon);
|
||||||
|
mainFrame.setVisible(true);
|
||||||
|
});
|
||||||
|
MenuItem exitItem = new MenuItem("Exit");
|
||||||
|
exitItem.addActionListener(exitListener);
|
||||||
|
popup.add(exitItem);
|
||||||
|
mainFrame.addWindowStateListener(e -> {
|
||||||
|
if (e.getNewState() == NORMAL) {
|
||||||
|
tray.remove(trayIcon);
|
||||||
|
mainFrame.setVisible(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
mainFrame.addWindowListener(new WindowAdapter() {
|
||||||
|
@Override
|
||||||
|
public void windowClosing(WindowEvent e) {
|
||||||
|
if (controller.getRunInBackground()) {
|
||||||
|
try {
|
||||||
|
tray.add(trayIcon);
|
||||||
|
mainFrame.setVisible(false);
|
||||||
|
} catch (AWTException e1) {
|
||||||
|
e1.printStackTrace();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
serverLauncherGUI.stopServers();
|
||||||
|
controller.saveState();
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
trayIcon.addMouseListener(new MouseAdapter() {
|
||||||
|
@Override
|
||||||
|
public void mousePressed(MouseEvent e) {
|
||||||
|
if (e.getClickCount() >= 1 && e.getButton() == MouseEvent.BUTTON1) {
|
||||||
|
mainFrame.setExtendedState(NORMAL);
|
||||||
|
tray.remove(trayIcon);
|
||||||
|
mainFrame.setVisible(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
mainFrame.addWindowListener(new WindowAdapter() {
|
||||||
|
@Override
|
||||||
|
public void windowClosing(WindowEvent e) {
|
||||||
|
controller.saveState();
|
||||||
|
serverLauncherGUI.stopServers();
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hides the gui to the tray
|
||||||
|
*/
|
||||||
|
public void hideToTray() {
|
||||||
|
mainFrame.setVisible(false);
|
||||||
|
try {
|
||||||
|
tray.add(trayIcon);
|
||||||
|
} catch (AWTException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user