More gui buttons work in theory
This commit is contained in:
parent
0267961eff
commit
1c00ae9bab
@ -4,6 +4,9 @@ import net.knarcraft.serverlauncher.userinterface.GUI;
|
|||||||
|
|
||||||
import javax.naming.ConfigurationException;
|
import javax.naming.ConfigurationException;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
//Java 8 required.
|
//Java 8 required.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -21,6 +24,12 @@ class Main {
|
|||||||
setup();
|
setup();
|
||||||
new GUI();
|
new GUI();
|
||||||
Profile.addProfile("Default");
|
Profile.addProfile("Default");
|
||||||
|
//TODO: replace with profiles loading generating a default profile if empty.
|
||||||
|
|
||||||
|
ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
|
||||||
|
exec.scheduleAtFixedRate(() -> {
|
||||||
|
//TODO: Read from consoles and insert into gui not added yet.
|
||||||
|
}, 0, 5, TimeUnit.SECONDS);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,8 @@ package net.knarcraft.serverlauncher.profile;
|
|||||||
import net.knarcraft.serverlauncher.server.Server;
|
import net.knarcraft.serverlauncher.server.Server;
|
||||||
import net.knarcraft.serverlauncher.userinterface.GUI;
|
import net.knarcraft.serverlauncher.userinterface.GUI;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -13,13 +15,17 @@ import java.util.ArrayList;
|
|||||||
* @since 0.0.0.1
|
* @since 0.0.0.1
|
||||||
*/
|
*/
|
||||||
public class Profile {
|
public class Profile {
|
||||||
private static final GUI gui = Server.getGUI();
|
|
||||||
private static final ArrayList<Profile> profiles = new ArrayList<>();
|
private static final ArrayList<Profile> profiles = new ArrayList<>();
|
||||||
|
|
||||||
private final ArrayList<Server> servers;
|
private final ArrayList<Server> servers;
|
||||||
private final String name;
|
private final String name;
|
||||||
private boolean runInBackground;
|
private boolean runInBackground;
|
||||||
private int delayStartup;
|
private int delayStartup;
|
||||||
private boolean downloadJars;
|
private boolean downloadJars;
|
||||||
|
private String vanillaVersion;
|
||||||
|
private String snapshotVersion;
|
||||||
|
private String spongeVanillaVersion;
|
||||||
|
private String bungeeVersion;
|
||||||
|
|
||||||
private Profile(String name) {
|
private Profile(String name) {
|
||||||
this.servers = new ArrayList<>();
|
this.servers = new ArrayList<>();
|
||||||
@ -35,7 +41,25 @@ public class Profile {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void removeServer(int i) {
|
public void removeServer(int i) {
|
||||||
servers.remove(i);
|
this.servers.remove(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Server getServer(String name) {
|
||||||
|
for (Server server : this.servers) {
|
||||||
|
if (server.getName().equals(name)) {
|
||||||
|
return server;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean serverExists(String name) {
|
||||||
|
for (Server server : this.servers) {
|
||||||
|
if (server.getName().equals(name)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<Server> getServers() {
|
public ArrayList<Server> getServers() {
|
||||||
@ -43,16 +67,21 @@ public class Profile {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void addProfile(String name) {
|
public static void addProfile(String name) {
|
||||||
|
if (name == null) { //If a user cancels or crosses out window
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (name.equals("")) {
|
if (name.equals("")) {
|
||||||
|
JOptionPane.showMessageDialog(null, "Profile name can't be blank.", "Error", JOptionPane.ERROR_MESSAGE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (Profile profile : profiles) {
|
for (Profile profile : profiles) {
|
||||||
if (profile.name.equals(name)) {
|
if (profile.name.equals(name)) {
|
||||||
|
JOptionPane.showMessageDialog(null, "There is already a profile with this name.", "Error", JOptionPane.ERROR_MESSAGE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
new Profile(name);
|
new Profile(name);
|
||||||
gui.addProfile(name);
|
GUI.getGUI().addProfile(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Profile getProfile(String name) {
|
public static Profile getProfile(String name) {
|
||||||
@ -69,7 +98,7 @@ public class Profile {
|
|||||||
for (int i = 0; i < profiles.size(); i++) {
|
for (int i = 0; i < profiles.size(); i++) {
|
||||||
if (profiles.get(i).name.equals((name))) {
|
if (profiles.get(i).name.equals((name))) {
|
||||||
profiles.remove(i);
|
profiles.remove(i);
|
||||||
gui.removeProfile(i);
|
GUI.getGUI().removeProfile(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -88,4 +117,27 @@ public class Profile {
|
|||||||
public void setDownloadJars(boolean value) {
|
public void setDownloadJars(boolean value) {
|
||||||
this.downloadJars = value;
|
this.downloadJars = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void sendCommand(String serverName, String command) {
|
||||||
|
if (serverName.equals("All")) {
|
||||||
|
for (Server server : this.servers) {
|
||||||
|
try {
|
||||||
|
server.sendCommand(command);
|
||||||
|
} catch (IOException e) {
|
||||||
|
JOptionPane.showMessageDialog(null, "Server " + server.getName() + " caused an exception.", "Error", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Server target = getServer(serverName);
|
||||||
|
if (target != null) {
|
||||||
|
try {
|
||||||
|
target.sendCommand(command);
|
||||||
|
} catch (IOException e) {
|
||||||
|
JOptionPane.showMessageDialog(null, "Server " + target.getName() + " caused an exception.", "Error", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
JOptionPane.showMessageDialog(null, "Server " + serverName + " is invalid.", "Error", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,6 @@ import java.util.ArrayList;
|
|||||||
public class Server {
|
public class Server {
|
||||||
/** Available ram sizes. For GUI dropdown */
|
/** Available ram sizes. For GUI dropdown */
|
||||||
private static final String[] ramList = {"512M", "1G", "2G", "3G", "4G", "5G", "6G", "7G", "8G", "9G", "10G", "11G", "12G", "13G", "14G", "15G", "16G"};
|
private static final String[] ramList = {"512M", "1G", "2G", "3G", "4G", "5G", "6G", "7G", "8G", "9G", "10G", "11G", "12G", "13G", "14G", "15G", "16G"};
|
||||||
private static GUI gui;
|
|
||||||
|
|
||||||
private final String name;
|
private final String name;
|
||||||
private String path;
|
private String path;
|
||||||
@ -40,7 +39,7 @@ public class Server {
|
|||||||
this.serverVersion = null;
|
this.serverVersion = null;
|
||||||
this.maxRam = ramList[0];
|
this.maxRam = ramList[0];
|
||||||
this.process = null;
|
this.process = null;
|
||||||
gui.currentProfile().addServer(this);
|
GUI.getGUI().currentProfile().addServer(this);
|
||||||
window.addServer(name);
|
window.addServer(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,14 +56,6 @@ public class Server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setGui(GUI _gui) {
|
|
||||||
gui = _gui;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static GUI getGUI() {
|
|
||||||
return gui;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return A representation of the name of a jarfile.
|
* @return A representation of the name of a jarfile.
|
||||||
*/
|
*/
|
||||||
@ -104,8 +95,12 @@ public class Server {
|
|||||||
return this.enabled;
|
return this.enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setMaxRam(String ram) {
|
||||||
|
this.maxRam = ram;
|
||||||
|
}
|
||||||
|
|
||||||
public static void stop() throws IOException {
|
public static void stop() throws IOException {
|
||||||
for (Server server : gui.currentProfile().getServers()) {
|
for (Server server : GUI.getGUI().currentProfile().getServers()) {
|
||||||
if (server.writer != null) {
|
if (server.writer != null) {
|
||||||
if (server.type.getName().equals("Bungee")) {
|
if (server.type.getName().equals("Bungee")) {
|
||||||
server.writer.write("end\n");
|
server.writer.write("end\n");
|
||||||
@ -134,18 +129,14 @@ public class Server {
|
|||||||
throw new IllegalArgumentException("Invalid server version.");
|
throw new IllegalArgumentException("Invalid server version.");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMaxRam(String ram) {
|
|
||||||
this.maxRam = ram;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Runs all enabled servers with their settings.
|
* Runs all enabled servers with their settings.
|
||||||
*/
|
*/
|
||||||
public static void startServers() {
|
public static void startServers() {
|
||||||
System.out.println("Starting servers.");
|
System.out.println("Starting servers.");
|
||||||
for (Server server : gui.currentProfile().getServers()) {
|
for (Server server : GUI.getGUI().currentProfile().getServers()) {
|
||||||
if (!server.run()) {
|
if (!server.run()) {
|
||||||
gui.setStatus("An error occurred. Start aborted");
|
GUI.getGUI().setStatus("An error occurred. Start aborted");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -156,11 +147,11 @@ public class Server {
|
|||||||
private boolean run() {
|
private boolean run() {
|
||||||
if (this.enabled) {
|
if (this.enabled) {
|
||||||
try {
|
try {
|
||||||
gui.setStatus("Downloading jar...");
|
GUI.getGUI().setStatus("Downloading jar...");
|
||||||
this.downloadJar();
|
this.downloadJar();
|
||||||
gui.setStatus("File downloaded");
|
GUI.getGUI().setStatus("File downloaded");
|
||||||
} catch (FileNotFoundException e) {
|
} catch (FileNotFoundException e) {
|
||||||
gui.setStatus("Error: Jar file not found");
|
GUI.getGUI().setStatus("Error: Jar file not found");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
@ -170,10 +161,10 @@ public class Server {
|
|||||||
this.process = builder.start();
|
this.process = builder.start();
|
||||||
OutputStream stdin = this.process.getOutputStream ();
|
OutputStream stdin = this.process.getOutputStream ();
|
||||||
this.writer = new BufferedWriter(new OutputStreamWriter(stdin));
|
this.writer = new BufferedWriter(new OutputStreamWriter(stdin));
|
||||||
gui.setStatus("Servers are running");
|
GUI.getGUI().setStatus("Servers are running");
|
||||||
return true;
|
return true;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
gui.setStatus("Could not start server");
|
GUI.getGUI().setStatus("Could not start server");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -308,4 +299,12 @@ public class Server {
|
|||||||
int startPos = string.indexOf(start) + start.length();
|
int startPos = string.indexOf(start) + start.length();
|
||||||
return string.substring(startPos, string.indexOf(end, startPos));
|
return string.substring(startPos, string.indexOf(end, startPos));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void sendCommand(String command) throws IOException {
|
||||||
|
if (this.writer != null) {
|
||||||
|
this.writer.write(command);
|
||||||
|
this.writer.flush();
|
||||||
|
this.writer = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,7 +1,6 @@
|
|||||||
package net.knarcraft.serverlauncher.userinterface;
|
package net.knarcraft.serverlauncher.userinterface;
|
||||||
|
|
||||||
import net.knarcraft.serverlauncher.server.Server;
|
import net.knarcraft.serverlauncher.server.Server;
|
||||||
import net.knarcraft.serverlauncher.server.ServerType;
|
|
||||||
import net.knarcraft.serverlauncher.profile.Profile;
|
import net.knarcraft.serverlauncher.profile.Profile;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
@ -25,6 +24,8 @@ import java.util.Scanner;
|
|||||||
*/
|
*/
|
||||||
public class GUI implements ActionListener {
|
public class GUI implements ActionListener {
|
||||||
|
|
||||||
|
private static GUI gui;
|
||||||
|
|
||||||
private JFrame frame;
|
private JFrame frame;
|
||||||
|
|
||||||
//Menu
|
//Menu
|
||||||
@ -50,7 +51,7 @@ public class GUI implements ActionListener {
|
|||||||
|
|
||||||
private JTabbedPane serversPane;
|
private JTabbedPane serversPane;
|
||||||
|
|
||||||
private ArrayList<ServerTab> serverTabs = new ArrayList<>();
|
private final ArrayList<ServerTab> serverTabs = new ArrayList<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create the application.
|
* Create the application.
|
||||||
@ -58,7 +59,7 @@ public class GUI implements ActionListener {
|
|||||||
public GUI() {
|
public GUI() {
|
||||||
initialize();
|
initialize();
|
||||||
loadMessages();
|
loadMessages();
|
||||||
Server.setGui(this);
|
gui = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public JFrame getFrame() {
|
public JFrame getFrame() {
|
||||||
@ -89,6 +90,10 @@ public class GUI implements ActionListener {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static GUI getGUI() {
|
||||||
|
return gui;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes a server's tab, removes it from the list of tabs, and removes the server from Profile.java
|
* Removes a server's tab, removes it from the list of tabs, and removes the server from Profile.java
|
||||||
*
|
*
|
||||||
@ -377,6 +382,16 @@ public class GUI implements ActionListener {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
String selectedServerValue = null, selectedPlayerValue = null;
|
||||||
|
Object selectedServer = targetServer.getSelectedItem();
|
||||||
|
if (selectedServer != null) {
|
||||||
|
selectedServerValue = selectedServer.toString();
|
||||||
|
}
|
||||||
|
Object selectedPlayer = targetPlayer.getSelectedItem();
|
||||||
|
if (selectedPlayer != null) {
|
||||||
|
selectedPlayerValue = selectedPlayer.toString();
|
||||||
|
}
|
||||||
|
|
||||||
if (e.getSource() == chckbxmntmRunInBackground) {
|
if (e.getSource() == chckbxmntmRunInBackground) {
|
||||||
background();
|
background();
|
||||||
} else if (e.getSource() == chckbxmntmDelayStartup) {
|
} else if (e.getSource() == chckbxmntmDelayStartup) {
|
||||||
@ -406,7 +421,11 @@ public class GUI implements ActionListener {
|
|||||||
stop();
|
stop();
|
||||||
} else if (e.getSource() == addServer) {
|
} else if (e.getSource() == addServer) {
|
||||||
String serverName = JOptionPane.showInputDialog("Name of server: ");
|
String serverName = JOptionPane.showInputDialog("Name of server: ");
|
||||||
new Server(serverName, this);
|
if (!serverName.equals("") && !currentProfile().serverExists(serverName)) {
|
||||||
|
new Server(serverName, this);
|
||||||
|
} else {
|
||||||
|
JOptionPane.showMessageDialog(null, "A servername must my unique and not empty.", "Error", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
} else if (e.getSource() == backup) {
|
} else if (e.getSource() == backup) {
|
||||||
backup();
|
backup();
|
||||||
} else if (e.getSource() == addProfile) {
|
} else if (e.getSource() == addProfile) {
|
||||||
@ -416,13 +435,37 @@ public class GUI implements ActionListener {
|
|||||||
if (selected != null) {
|
if (selected != null) {
|
||||||
Profile.deleteProfile(selected.toString());
|
Profile.deleteProfile(selected.toString());
|
||||||
}
|
}
|
||||||
|
} else if (e.getSource() == btnKick) {
|
||||||
|
if (selectedServerValue != null && selectedPlayerValue != null) {
|
||||||
|
currentProfile().sendCommand(selectedServerValue, "kick " + selectedPlayerValue);
|
||||||
|
}
|
||||||
|
} else if (e.getSource() == btnBan) {
|
||||||
|
if (selectedServerValue != null && selectedPlayerValue != null) {
|
||||||
|
currentProfile().sendCommand(selectedServerValue, "ban " + selectedPlayerValue);
|
||||||
|
}
|
||||||
|
} else if (e.getSource() == btnOp) {
|
||||||
|
if (selectedServerValue != null && selectedPlayerValue != null) {
|
||||||
|
currentProfile().sendCommand(selectedServerValue, "op " + selectedPlayerValue);
|
||||||
|
}
|
||||||
|
} else if (e.getSource() == btnDeop) {
|
||||||
|
if (selectedServerValue != null && selectedPlayerValue != null) {
|
||||||
|
currentProfile().sendCommand(selectedServerValue, "deop " + selectedPlayerValue);
|
||||||
|
}
|
||||||
|
} else if (e.getSource() == btnCustomCommand) {
|
||||||
|
if (selectedServerValue != null) {
|
||||||
|
currentProfile().sendCommand(selectedServerValue, customCommand.getSelectedText());
|
||||||
|
}
|
||||||
|
} else if (e.getSource() == btnSaveserver) {
|
||||||
|
if (selectedServerValue != null) {
|
||||||
|
currentProfile().sendCommand(selectedServerValue, "save-all");
|
||||||
|
}
|
||||||
|
} else if (e.getSource() == btnReload) {
|
||||||
|
if (selectedServerValue != null) {
|
||||||
|
currentProfile().sendCommand(selectedServerValue, "reload");
|
||||||
|
}
|
||||||
|
} else if (e.getSource() == btnServerConsoles) {
|
||||||
|
//TODO: Make server consoles window, and toggle visibility on this action.
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
//Server controls
|
|
||||||
private JComboBox targetServer, targetPlayer;
|
|
||||||
private JButton btnKick, btnBan, btnOp, btnDeop, btnCustomCommand, btnSaveserver, btnReload, btnServerConsoles;
|
|
||||||
private JTextField customCommand;*/
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -441,7 +484,7 @@ public class GUI implements ActionListener {
|
|||||||
Server.stop();
|
Server.stop();
|
||||||
setStatus("Servers are stopped");
|
setStatus("Servers are stopped");
|
||||||
} catch (IOException e1) {
|
} catch (IOException e1) {
|
||||||
JOptionPane.showMessageDialog(null, "Could not stop server", "Error", JOptionPane.ERROR_MESSAGE);
|
JOptionPane.showMessageDialog(null, "Could not stop server.", "Error", JOptionPane.ERROR_MESSAGE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,16 +7,19 @@ import javax.swing.*;
|
|||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
|
|
||||||
public class ServerTab implements ActionListener {
|
class ServerTab implements ActionListener {
|
||||||
private JComboBox<String> serverTypes, serverVersions, maxRam;
|
private final JComboBox<String> serverTypes;
|
||||||
private JCheckBox chckbxEnabled;
|
private final JComboBox<String> serverVersions;
|
||||||
private JButton btnRemoveServer, btnBrowse;
|
private final JComboBox<String> maxRam;
|
||||||
private JTextField directory;
|
private final JCheckBox chckbxEnabled;
|
||||||
|
private final JButton btnRemoveServer;
|
||||||
|
private final JButton btnBrowse;
|
||||||
|
private final JTextField directory;
|
||||||
|
|
||||||
|
|
||||||
public ServerTab(String name) {
|
public ServerTab(String name) {
|
||||||
JPanel panel = new JPanel();
|
JPanel panel = new JPanel();
|
||||||
Server.getGUI().getPane().addTab(name, null, panel, null);
|
GUI.getGUI().getPane().addTab(name, null, panel, null);
|
||||||
SpringLayout sl_panel_3 = new SpringLayout();
|
SpringLayout sl_panel_3 = new SpringLayout();
|
||||||
panel.setLayout(sl_panel_3);
|
panel.setLayout(sl_panel_3);
|
||||||
|
|
||||||
@ -100,9 +103,16 @@ public class ServerTab implements ActionListener {
|
|||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
if (e.getSource() == btnRemoveServer) {
|
if (e.getSource() == btnRemoveServer) {
|
||||||
Server.getGUI().removeServer(this);
|
GUI.getGUI().removeServer(this);
|
||||||
} else if (e.getSource() == btnBrowse) {
|
} else if (e.getSource() == btnBrowse) {
|
||||||
|
JFileChooser chooser = new JFileChooser();
|
||||||
|
chooser.setCurrentDirectory(new java.io.File("/"));
|
||||||
|
chooser.setDialogTitle("Backup folder");
|
||||||
|
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
|
||||||
|
chooser.setAcceptAllFileFilterUsed(false);
|
||||||
|
if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
|
||||||
|
directory.setText(chooser.getSelectedFile().toString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user