Servers can now be removed
This commit is contained in:
parent
b0979c6e0f
commit
0267961eff
@ -1,10 +1,10 @@
|
||||
import net.knarcraft.serverlauncher.profile.Profile;
|
||||
import net.knarcraft.serverlauncher.server.*;
|
||||
import net.knarcraft.serverlauncher.server.ServerType;
|
||||
import net.knarcraft.serverlauncher.userinterface.GUI;
|
||||
|
||||
import javax.naming.ConfigurationException;
|
||||
import java.awt.*;
|
||||
//Java 9 required.
|
||||
//Java 8 required.
|
||||
|
||||
/**
|
||||
* A software for managing Minecraft servers.
|
||||
@ -35,5 +35,4 @@ class Main {
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
// TODO: Add gui functionality
|
||||
}
|
@ -5,6 +5,13 @@ import net.knarcraft.serverlauncher.userinterface.GUI;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Contains all user settings
|
||||
*
|
||||
* @author Kristian Knarvik <kristian.knarvik@knett.no>
|
||||
* @version 0.0.0.1
|
||||
* @since 0.0.0.1
|
||||
*/
|
||||
public class Profile {
|
||||
private static final GUI gui = Server.getGUI();
|
||||
private static final ArrayList<Profile> profiles = new ArrayList<>();
|
||||
@ -27,6 +34,10 @@ public class Profile {
|
||||
this.servers.add(server);
|
||||
}
|
||||
|
||||
public void removeServer(int i) {
|
||||
servers.remove(i);
|
||||
}
|
||||
|
||||
public ArrayList<Server> getServers() {
|
||||
return this.servers;
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ public class Server {
|
||||
this.maxRam = ramList[0];
|
||||
this.process = null;
|
||||
gui.currentProfile().addServer(this);
|
||||
window.addServer(name, this);
|
||||
window.addServer(name);
|
||||
}
|
||||
|
||||
public void addPlayer(String name) {
|
||||
|
@ -7,12 +7,22 @@ import net.knarcraft.serverlauncher.profile.Profile;
|
||||
import javax.swing.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.WindowAdapter;
|
||||
import java.awt.event.WindowEvent;
|
||||
import java.io.*;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Objects;
|
||||
import java.util.Scanner;
|
||||
|
||||
/**
|
||||
* Generates a GUI
|
||||
*
|
||||
* @author Kristian Knarvik <kristian.knarvik@knett.no>
|
||||
* @version 0.0.0.1
|
||||
* @since 0.0.0.1
|
||||
*/
|
||||
public class GUI implements ActionListener {
|
||||
|
||||
private JFrame frame;
|
||||
@ -40,6 +50,8 @@ public class GUI implements ActionListener {
|
||||
|
||||
private JTabbedPane serversPane;
|
||||
|
||||
private ArrayList<ServerTab> serverTabs = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* Create the application.
|
||||
*/
|
||||
@ -77,6 +89,24 @@ public class GUI implements ActionListener {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a server's tab, removes it from the list of tabs, and removes the server from Profile.java
|
||||
*
|
||||
* @param tab The current tab object
|
||||
*/
|
||||
public void removeServer(ServerTab tab) {
|
||||
for (int i = 0; i < this.serverTabs.size(); i++) {
|
||||
System.out.println(this.serverTabs.get(i));
|
||||
if(this.serverTabs.get(i) == tab) {
|
||||
serversPane.remove(i);
|
||||
currentProfile().removeServer(i);
|
||||
this.serverTabs.remove(i);
|
||||
i = serverTabs.size();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the contents of the frame.
|
||||
*/
|
||||
@ -89,9 +119,16 @@ public class GUI implements ActionListener {
|
||||
|
||||
frame = new JFrame();
|
||||
frame.setBounds(100, 100, 398, 219);
|
||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
|
||||
frame.setResizable(false);
|
||||
|
||||
frame.addWindowListener(new WindowAdapter() {
|
||||
public void windowClosing(WindowEvent e) {
|
||||
save();
|
||||
stop();
|
||||
}
|
||||
});
|
||||
|
||||
JMenuBar menuBar = new JMenuBar();
|
||||
frame.setJMenuBar(menuBar);
|
||||
|
||||
@ -334,80 +371,8 @@ public class GUI implements ActionListener {
|
||||
frame.setVisible(true);
|
||||
}
|
||||
|
||||
public void addServer(String name, Server server) {
|
||||
JPanel panel = new JPanel();
|
||||
this.serversPane.addTab(name, null, panel, null);
|
||||
SpringLayout sl_panel_3 = new SpringLayout();
|
||||
panel.setLayout(sl_panel_3);
|
||||
|
||||
JLabel lblServerType = new JLabel("Server type");
|
||||
sl_panel_3.putConstraint(SpringLayout.NORTH, lblServerType, 10, SpringLayout.NORTH, panel);
|
||||
sl_panel_3.putConstraint(SpringLayout.WEST, lblServerType, 10, SpringLayout.WEST, panel);
|
||||
sl_panel_3.putConstraint(SpringLayout.SOUTH, lblServerType, 30, SpringLayout.NORTH, panel);
|
||||
panel.add(lblServerType);
|
||||
|
||||
JComboBox<String> comboBox_3 = new JComboBox<>(ServerType.getTypeNames());
|
||||
sl_panel_3.putConstraint(SpringLayout.NORTH, comboBox_3, 10, SpringLayout.NORTH, panel);
|
||||
sl_panel_3.putConstraint(SpringLayout.WEST, comboBox_3, 16, SpringLayout.EAST, lblServerType);
|
||||
panel.add(comboBox_3);
|
||||
|
||||
JLabel lblServerVersion = new JLabel("Server version");
|
||||
sl_panel_3.putConstraint(SpringLayout.NORTH, lblServerVersion, 6, SpringLayout.SOUTH, lblServerType);
|
||||
sl_panel_3.putConstraint(SpringLayout.WEST, lblServerVersion, 10, SpringLayout.WEST, panel);
|
||||
sl_panel_3.putConstraint(SpringLayout.SOUTH, lblServerVersion, 26, SpringLayout.SOUTH, lblServerType);
|
||||
panel.add(lblServerVersion);
|
||||
|
||||
JComboBox<String> comboBox_4 = new JComboBox<>(ServerType.getServerTypes().get(0).getVersions());
|
||||
sl_panel_3.putConstraint(SpringLayout.NORTH, comboBox_4, 6, SpringLayout.SOUTH, comboBox_3);
|
||||
sl_panel_3.putConstraint(SpringLayout.WEST, comboBox_4, 0, SpringLayout.WEST, comboBox_3);
|
||||
panel.add(comboBox_4);
|
||||
|
||||
JLabel lblMaxRam = new JLabel("Max ram");
|
||||
sl_panel_3.putConstraint(SpringLayout.EAST, comboBox_3, -13, SpringLayout.WEST, lblMaxRam);
|
||||
sl_panel_3.putConstraint(SpringLayout.NORTH, lblMaxRam, 10, SpringLayout.NORTH, panel);
|
||||
sl_panel_3.putConstraint(SpringLayout.SOUTH, lblMaxRam, -92, SpringLayout.SOUTH, panel);
|
||||
sl_panel_3.putConstraint(SpringLayout.EAST, lblMaxRam, -111, SpringLayout.EAST, panel);
|
||||
panel.add(lblMaxRam);
|
||||
|
||||
JComboBox<String> comboBox_5 = new JComboBox<>(Server.getRamList());
|
||||
sl_panel_3.putConstraint(SpringLayout.NORTH, comboBox_5, 10, SpringLayout.NORTH, panel);
|
||||
sl_panel_3.putConstraint(SpringLayout.WEST, comboBox_5, 6, SpringLayout.EAST, lblMaxRam);
|
||||
sl_panel_3.putConstraint(SpringLayout.EAST, comboBox_5, 86, SpringLayout.EAST, lblMaxRam);
|
||||
panel.add(comboBox_5);
|
||||
|
||||
JCheckBox chckbxEnabled = new JCheckBox("Enabled");
|
||||
sl_panel_3.putConstraint(SpringLayout.NORTH, chckbxEnabled, 6, SpringLayout.SOUTH, lblServerVersion);
|
||||
sl_panel_3.putConstraint(SpringLayout.EAST, chckbxEnabled, 0, SpringLayout.EAST, lblServerType);
|
||||
panel.add(chckbxEnabled);
|
||||
|
||||
JButton btnRemoveServer = new JButton("Remove server");
|
||||
sl_panel_3.putConstraint(SpringLayout.NORTH, btnRemoveServer, 5, SpringLayout.SOUTH, lblMaxRam);
|
||||
sl_panel_3.putConstraint(SpringLayout.SOUTH, btnRemoveServer, -64, SpringLayout.SOUTH, panel);
|
||||
sl_panel_3.putConstraint(SpringLayout.SOUTH, comboBox_5, -5, SpringLayout.NORTH, btnRemoveServer);
|
||||
sl_panel_3.putConstraint(SpringLayout.EAST, comboBox_4, -13, SpringLayout.WEST, btnRemoveServer);
|
||||
sl_panel_3.putConstraint(SpringLayout.WEST, btnRemoveServer, 239, SpringLayout.WEST, panel);
|
||||
sl_panel_3.putConstraint(SpringLayout.EAST, btnRemoveServer, 0, SpringLayout.EAST, comboBox_5);
|
||||
panel.add(btnRemoveServer);
|
||||
|
||||
JLabel lblDirectory = new JLabel("Directory");
|
||||
sl_panel_3.putConstraint(SpringLayout.NORTH, lblDirectory, 1, SpringLayout.NORTH, chckbxEnabled);
|
||||
sl_panel_3.putConstraint(SpringLayout.SOUTH, lblDirectory, 0, SpringLayout.SOUTH, chckbxEnabled);
|
||||
panel.add(lblDirectory);
|
||||
|
||||
JTextField textField_1 = new JTextField();
|
||||
sl_panel_3.putConstraint(SpringLayout.NORTH, textField_1, 4, SpringLayout.SOUTH, btnRemoveServer);
|
||||
sl_panel_3.putConstraint(SpringLayout.SOUTH, textField_1, -37, SpringLayout.SOUTH, panel);
|
||||
sl_panel_3.putConstraint(SpringLayout.EAST, lblDirectory, -6, SpringLayout.WEST, textField_1);
|
||||
sl_panel_3.putConstraint(SpringLayout.WEST, textField_1, 130, SpringLayout.WEST, panel);
|
||||
panel.add(textField_1);
|
||||
textField_1.setColumns(10);
|
||||
|
||||
JButton btnBrowse = new JButton("Browse");
|
||||
sl_panel_3.putConstraint(SpringLayout.EAST, textField_1, -6, SpringLayout.WEST, btnBrowse);
|
||||
sl_panel_3.putConstraint(SpringLayout.NORTH, btnBrowse, 3, SpringLayout.SOUTH, btnRemoveServer);
|
||||
sl_panel_3.putConstraint(SpringLayout.WEST, btnBrowse, 293, SpringLayout.WEST, panel);
|
||||
sl_panel_3.putConstraint(SpringLayout.EAST, btnBrowse, 0, SpringLayout.EAST, comboBox_5);
|
||||
panel.add(btnBrowse);
|
||||
public void addServer(String name) {
|
||||
serverTabs.add(new ServerTab(name));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -435,6 +400,7 @@ public class GUI implements ActionListener {
|
||||
} else if (e.getSource() == mntmStory) {
|
||||
goToURL("https://knarcraft.net/Bungeeminecraftserverlauncher/Story/");
|
||||
} else if (e.getSource() == btnStartServer) {
|
||||
save();
|
||||
Server.startServers();
|
||||
} else if (e.getSource() == btnStopServer) {
|
||||
stop();
|
||||
@ -456,8 +422,19 @@ public class GUI implements ActionListener {
|
||||
private JComboBox targetServer, targetPlayer;
|
||||
private JButton btnKick, btnBan, btnOp, btnDeop, btnCustomCommand, btnSaveserver, btnReload, btnServerConsoles;
|
||||
private JTextField customCommand;*/
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads all combo boxes, updates variables and saves to disk
|
||||
*/
|
||||
private void save() {
|
||||
//TODO: Finish save
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops all servers
|
||||
*/
|
||||
private void stop() {
|
||||
try {
|
||||
setStatus("Servers are stopping");
|
||||
@ -485,6 +462,9 @@ public class GUI implements ActionListener {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the runInBackground setting to the current profile
|
||||
*/
|
||||
private void background() {
|
||||
Object selected = profiles.getSelectedItem();
|
||||
if (selected != null) {
|
||||
@ -493,8 +473,16 @@ public class GUI implements ActionListener {
|
||||
} else {
|
||||
JOptionPane.showMessageDialog(null, "No profile selected", "Error", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
if (chckbxmntmRunInBackground.isSelected()) {
|
||||
frame.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
|
||||
} else {
|
||||
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the downloadJars setting to the current profile
|
||||
*/
|
||||
private void downloadJars() {
|
||||
Object selected = profiles.getSelectedItem();
|
||||
if (selected != null) {
|
||||
@ -505,6 +493,9 @@ public class GUI implements ActionListener {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies all server directories to a folder specified by the user
|
||||
*/
|
||||
private void backup() {
|
||||
JFileChooser chooser = new JFileChooser();
|
||||
chooser.setCurrentDirectory(new java.io.File("."));
|
||||
@ -536,6 +527,11 @@ public class GUI implements ActionListener {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Opens an url in the user's default application
|
||||
*
|
||||
* @param url URL to open
|
||||
*/
|
||||
private static void goToURL(String url) {
|
||||
java.awt.Desktop desktop = java.awt.Desktop.getDesktop();
|
||||
try {
|
||||
@ -545,6 +541,9 @@ public class GUI implements ActionListener {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads popup messages from a text file
|
||||
*/
|
||||
private void loadMessages() {
|
||||
try (Scanner in = new Scanner(new File("config/menumsg.csv"))) {
|
||||
while (in.hasNextLine()) {
|
||||
@ -572,6 +571,13 @@ public class GUI implements ActionListener {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Recursivly copies a folder to another location
|
||||
*
|
||||
* @param src The folder to copy
|
||||
* @param dest Target destination
|
||||
* @throws IOException If we can't start a file stream
|
||||
*/
|
||||
private void copyFolder(File src, File dest) throws IOException{
|
||||
if (!src.isDirectory()) {
|
||||
InputStream in = new FileInputStream(src);
|
||||
|
108
src/net/knarcraft/serverlauncher/userinterface/ServerTab.java
Normal file
108
src/net/knarcraft/serverlauncher/userinterface/ServerTab.java
Normal file
@ -0,0 +1,108 @@
|
||||
package net.knarcraft.serverlauncher.userinterface;
|
||||
|
||||
import net.knarcraft.serverlauncher.server.Server;
|
||||
import net.knarcraft.serverlauncher.server.ServerType;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
public class ServerTab implements ActionListener {
|
||||
private JComboBox<String> serverTypes, serverVersions, maxRam;
|
||||
private JCheckBox chckbxEnabled;
|
||||
private JButton btnRemoveServer, btnBrowse;
|
||||
private JTextField directory;
|
||||
|
||||
|
||||
public ServerTab(String name) {
|
||||
JPanel panel = new JPanel();
|
||||
Server.getGUI().getPane().addTab(name, null, panel, null);
|
||||
SpringLayout sl_panel_3 = new SpringLayout();
|
||||
panel.setLayout(sl_panel_3);
|
||||
|
||||
JLabel lblServerType = new JLabel("Server type");
|
||||
sl_panel_3.putConstraint(SpringLayout.NORTH, lblServerType, 10, SpringLayout.NORTH, panel);
|
||||
sl_panel_3.putConstraint(SpringLayout.WEST, lblServerType, 10, SpringLayout.WEST, panel);
|
||||
sl_panel_3.putConstraint(SpringLayout.SOUTH, lblServerType, 30, SpringLayout.NORTH, panel);
|
||||
panel.add(lblServerType);
|
||||
|
||||
serverTypes = new JComboBox<>(ServerType.getTypeNames());
|
||||
sl_panel_3.putConstraint(SpringLayout.NORTH, serverTypes, 10, SpringLayout.NORTH, panel);
|
||||
sl_panel_3.putConstraint(SpringLayout.WEST, serverTypes, 16, SpringLayout.EAST, lblServerType);
|
||||
panel.add(serverTypes);
|
||||
serverTypes.addActionListener(this);
|
||||
|
||||
JLabel lblServerVersion = new JLabel("Server version");
|
||||
sl_panel_3.putConstraint(SpringLayout.NORTH, lblServerVersion, 6, SpringLayout.SOUTH, lblServerType);
|
||||
sl_panel_3.putConstraint(SpringLayout.WEST, lblServerVersion, 10, SpringLayout.WEST, panel);
|
||||
sl_panel_3.putConstraint(SpringLayout.SOUTH, lblServerVersion, 26, SpringLayout.SOUTH, lblServerType);
|
||||
panel.add(lblServerVersion);
|
||||
|
||||
serverVersions = new JComboBox<>(ServerType.getServerTypes().get(0).getVersions());
|
||||
sl_panel_3.putConstraint(SpringLayout.NORTH, serverVersions, 6, SpringLayout.SOUTH, serverTypes);
|
||||
sl_panel_3.putConstraint(SpringLayout.WEST, serverVersions, 0, SpringLayout.WEST, serverTypes);
|
||||
panel.add(serverVersions);
|
||||
serverVersions.addActionListener(this);
|
||||
|
||||
JLabel lblMaxRam = new JLabel("Max ram");
|
||||
sl_panel_3.putConstraint(SpringLayout.EAST, serverTypes, -13, SpringLayout.WEST, lblMaxRam);
|
||||
sl_panel_3.putConstraint(SpringLayout.NORTH, lblMaxRam, 10, SpringLayout.NORTH, panel);
|
||||
sl_panel_3.putConstraint(SpringLayout.SOUTH, lblMaxRam, -92, SpringLayout.SOUTH, panel);
|
||||
sl_panel_3.putConstraint(SpringLayout.EAST, lblMaxRam, -111, SpringLayout.EAST, panel);
|
||||
panel.add(lblMaxRam);
|
||||
|
||||
maxRam = new JComboBox<>(Server.getRamList());
|
||||
sl_panel_3.putConstraint(SpringLayout.NORTH, maxRam, 10, SpringLayout.NORTH, panel);
|
||||
sl_panel_3.putConstraint(SpringLayout.WEST, maxRam, 6, SpringLayout.EAST, lblMaxRam);
|
||||
sl_panel_3.putConstraint(SpringLayout.EAST, maxRam, 86, SpringLayout.EAST, lblMaxRam);
|
||||
panel.add(maxRam);
|
||||
maxRam.addActionListener(this);
|
||||
|
||||
chckbxEnabled = new JCheckBox("Enabled");
|
||||
sl_panel_3.putConstraint(SpringLayout.NORTH, chckbxEnabled, 6, SpringLayout.SOUTH, lblServerVersion);
|
||||
sl_panel_3.putConstraint(SpringLayout.EAST, chckbxEnabled, 0, SpringLayout.EAST, lblServerType);
|
||||
panel.add(chckbxEnabled);
|
||||
chckbxEnabled.addActionListener(this);
|
||||
|
||||
btnRemoveServer = new JButton("Remove server");
|
||||
sl_panel_3.putConstraint(SpringLayout.NORTH, btnRemoveServer, 5, SpringLayout.SOUTH, lblMaxRam);
|
||||
sl_panel_3.putConstraint(SpringLayout.SOUTH, btnRemoveServer, -64, SpringLayout.SOUTH, panel);
|
||||
sl_panel_3.putConstraint(SpringLayout.SOUTH, maxRam, -5, SpringLayout.NORTH, btnRemoveServer);
|
||||
sl_panel_3.putConstraint(SpringLayout.EAST, serverVersions, -13, SpringLayout.WEST, btnRemoveServer);
|
||||
sl_panel_3.putConstraint(SpringLayout.WEST, btnRemoveServer, 239, SpringLayout.WEST, panel);
|
||||
sl_panel_3.putConstraint(SpringLayout.EAST, btnRemoveServer, 0, SpringLayout.EAST, maxRam);
|
||||
panel.add(btnRemoveServer);
|
||||
btnRemoveServer.addActionListener(this);
|
||||
|
||||
JLabel lblDirectory = new JLabel("Directory");
|
||||
sl_panel_3.putConstraint(SpringLayout.NORTH, lblDirectory, 1, SpringLayout.NORTH, chckbxEnabled);
|
||||
sl_panel_3.putConstraint(SpringLayout.SOUTH, lblDirectory, 0, SpringLayout.SOUTH, chckbxEnabled);
|
||||
panel.add(lblDirectory);
|
||||
|
||||
directory = new JTextField();
|
||||
sl_panel_3.putConstraint(SpringLayout.NORTH, directory, 4, SpringLayout.SOUTH, btnRemoveServer);
|
||||
sl_panel_3.putConstraint(SpringLayout.SOUTH, directory, -37, SpringLayout.SOUTH, panel);
|
||||
sl_panel_3.putConstraint(SpringLayout.EAST, lblDirectory, -6, SpringLayout.WEST, directory);
|
||||
sl_panel_3.putConstraint(SpringLayout.WEST, directory, 130, SpringLayout.WEST, panel);
|
||||
panel.add(directory);
|
||||
directory.setColumns(10);
|
||||
directory.addActionListener(this);
|
||||
|
||||
btnBrowse = new JButton("Browse");
|
||||
sl_panel_3.putConstraint(SpringLayout.EAST, directory, -6, SpringLayout.WEST, btnBrowse);
|
||||
sl_panel_3.putConstraint(SpringLayout.NORTH, btnBrowse, 3, SpringLayout.SOUTH, btnRemoveServer);
|
||||
sl_panel_3.putConstraint(SpringLayout.WEST, btnBrowse, 293, SpringLayout.WEST, panel);
|
||||
sl_panel_3.putConstraint(SpringLayout.EAST, btnBrowse, 0, SpringLayout.EAST, maxRam);
|
||||
panel.add(btnBrowse);
|
||||
btnBrowse.addActionListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if (e.getSource() == btnRemoveServer) {
|
||||
Server.getGUI().removeServer(this);
|
||||
} else if (e.getSource() == btnBrowse) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user