package net.knarcraft.minecraftserverlauncher.userinterface; import net.knarcraft.minecraftserverlauncher.Main; import net.knarcraft.minecraftserverlauncher.server.ServerHandler; import net.knarcraft.minecraftserverlauncher.server.ServerTypeHandler; import net.knarcraft.minecraftserverlauncher.server.servertypes.ServerType; import javax.naming.ConfigurationException; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; /** * Represents a visual server tab used to configure a server * * @author Kristian Knarvik * @version 1.0.0 * @since 1.0.0 */ public class ServerTab implements ActionListener { private final JComboBox serverTypes; private final JComboBox serverVersions; private final JComboBox maxRam; private final JCheckBox enabledCheckbox; private final JButton removeServerButton; private final JButton browseButton; private final JTextField directory; private final JPanel panel; private final String name; /** * Initializes a new server tab with the given name * * @param name

The name of the new server tab

* @throws ConfigurationException

If unable to create the new tab

*/ public ServerTab(String name) throws ConfigurationException { this.name = name; panel = new JPanel(); Main.getController().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.WEST, lblServerType, 10, SpringLayout.WEST, panel); panel.add(lblServerType); 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); serverTypes = new JComboBox<>(ServerTypeHandler.getTypeNames()); sl_panel_3.putConstraint(SpringLayout.NORTH, serverTypes, 10, SpringLayout.NORTH, panel); sl_panel_3.putConstraint(SpringLayout.WEST, serverTypes, 5, SpringLayout.EAST, lblServerVersion); sl_panel_3.putConstraint(SpringLayout.EAST, serverTypes, 154, SpringLayout.WEST, serverTypes); sl_panel_3.putConstraint(SpringLayout.NORTH, lblServerType, 0, SpringLayout.NORTH, serverTypes); sl_panel_3.putConstraint(SpringLayout.SOUTH, lblServerType, 0, SpringLayout.SOUTH, serverTypes); panel.add(serverTypes); serverTypes.addActionListener(this); serverVersions = new JComboBox<>(ServerTypeHandler.getServerTypes().get(0).getVersions()); sl_panel_3.putConstraint(SpringLayout.NORTH, serverVersions, 6, SpringLayout.SOUTH, serverTypes); sl_panel_3.putConstraint(SpringLayout.EAST, serverVersions, 0, SpringLayout.EAST, serverTypes); sl_panel_3.putConstraint(SpringLayout.WEST, serverVersions, 6, SpringLayout.EAST, lblServerVersion); sl_panel_3.putConstraint(SpringLayout.NORTH, lblServerVersion, 0, SpringLayout.NORTH, serverVersions); sl_panel_3.putConstraint(SpringLayout.SOUTH, lblServerVersion, 0, SpringLayout.SOUTH, serverVersions); panel.add(serverVersions); serverVersions.addActionListener(this); JLabel lblMaxRam = new JLabel("Max ram"); sl_panel_3.putConstraint(SpringLayout.NORTH, lblMaxRam, 0, SpringLayout.NORTH, serverTypes); sl_panel_3.putConstraint(SpringLayout.SOUTH, lblMaxRam, 0, SpringLayout.SOUTH, serverTypes); sl_panel_3.putConstraint(SpringLayout.WEST, lblMaxRam, 6, SpringLayout.EAST, serverTypes); panel.add(lblMaxRam); maxRam = new JComboBox<>(ServerHandler.getRamList()); sl_panel_3.putConstraint(SpringLayout.NORTH, maxRam, 0, SpringLayout.NORTH, serverTypes); sl_panel_3.putConstraint(SpringLayout.WEST, maxRam, 6, SpringLayout.EAST, lblMaxRam); sl_panel_3.putConstraint(SpringLayout.EAST, maxRam, -10, SpringLayout.EAST, panel); panel.add(maxRam); maxRam.addActionListener(this); enabledCheckbox = new JCheckBox("Enabled"); sl_panel_3.putConstraint(SpringLayout.WEST, enabledCheckbox, 10, SpringLayout.WEST, panel); panel.add(enabledCheckbox); enabledCheckbox.addActionListener(this); removeServerButton = new JButton("Remove server"); sl_panel_3.putConstraint(SpringLayout.NORTH, removeServerButton, 0, SpringLayout.NORTH, serverVersions); sl_panel_3.putConstraint(SpringLayout.SOUTH, removeServerButton, 0, SpringLayout.SOUTH, serverVersions); sl_panel_3.putConstraint(SpringLayout.WEST, removeServerButton, 6, SpringLayout.EAST, serverVersions); sl_panel_3.putConstraint(SpringLayout.EAST, removeServerButton, -10, SpringLayout.EAST, panel); panel.add(removeServerButton); removeServerButton.addActionListener(this); JLabel lblDirectory = new JLabel("Directory"); sl_panel_3.putConstraint(SpringLayout.WEST, lblDirectory, 6, SpringLayout.EAST, enabledCheckbox); panel.add(lblDirectory); directory = new JTextField(); sl_panel_3.putConstraint(SpringLayout.WEST, directory, 6, SpringLayout.EAST, lblDirectory); sl_panel_3.putConstraint(SpringLayout.SOUTH, lblDirectory, 0, SpringLayout.SOUTH, directory); sl_panel_3.putConstraint(SpringLayout.NORTH, lblDirectory, 0, SpringLayout.NORTH, directory); sl_panel_3.putConstraint(SpringLayout.NORTH, enabledCheckbox, 0, SpringLayout.NORTH, directory); sl_panel_3.putConstraint(SpringLayout.SOUTH, enabledCheckbox, 0, SpringLayout.SOUTH, directory); panel.add(directory); directory.setColumns(10); directory.addActionListener(this); browseButton = new JButton("Browse"); sl_panel_3.putConstraint(SpringLayout.EAST, directory, -6, SpringLayout.WEST, browseButton); sl_panel_3.putConstraint(SpringLayout.NORTH, browseButton, 3, SpringLayout.SOUTH, removeServerButton); sl_panel_3.putConstraint(SpringLayout.EAST, browseButton, -10, SpringLayout.EAST, panel); sl_panel_3.putConstraint(SpringLayout.SOUTH, directory, 0, SpringLayout.SOUTH, browseButton); sl_panel_3.putConstraint(SpringLayout.NORTH, directory, 0, SpringLayout.NORTH, browseButton); panel.add(browseButton); browseButton.addActionListener(this); } /** * Updates the server tab components according to the received parameters * * @param path

The new path of the server tab

* @param isEnabled

Whether to mark the server as enabled

* @param typeName

The name of the selected server type

* @param serverVersion

The version of the server

* @param maxRam

The maximum usable ram for the server

*/ public void setData(String path, boolean isEnabled, String typeName, String serverVersion, String maxRam) throws ConfigurationException { this.directory.setText(path); this.enabledCheckbox.setSelected(isEnabled); this.serverTypes.setSelectedItem(typeName); this.updateServerVersion(); this.serverVersions.setSelectedItem(serverVersion); this.maxRam.setSelectedItem(maxRam); } /** * Gets the JPanel containing the server tab's elements * * @return

The JPanel containing the server tab's elements

*/ public JPanel getPanel() { return this.panel; } /** * Gets the file path selected by the user * * @return

The file path selected by the user

*/ public String getPath() { return this.directory.getText(); } /** * Gets the maximum RAM selected by the user * * @return

The maximum RAM selected by the user

*/ public String getMaxRam() { Object selected = this.maxRam.getSelectedItem(); if (selected != null) { return selected.toString(); } else { return "512M"; } } /** * Gets the server type selected by the user * * @return

The server type selected by the user

*/ public String getType() { Object selected = this.serverTypes.getSelectedItem(); if (selected != null) { return selected.toString(); } else { return "Vanilla"; } } /** * Gets the server version selected by the user * * @return

The server version selected by the user

*/ public String getVersion() { Object selected = this.serverVersions.getSelectedItem(); if (selected != null) { return selected.toString(); } else { return "Latest"; } } /** * Checks whether this server is enabled * * @return

True if this server is enabled

*/ public boolean isEnabled() { return this.enabledCheckbox.isSelected(); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == removeServerButton) { remove(); } else if (e.getSource() == browseButton) { browse(); } else if (e.getSource() == serverTypes) { try { updateServerVersion(); } catch (ConfigurationException e1) { e1.printStackTrace(); } } } /** * Removes the collection containing this ServerTab, and updates everything necessary */ private void remove() { Main.getController().getCurrentProfile().removeCollection(this.name); Main.getController().getGUI().updateWithSavedProfileData(); Main.getController().getCurrentProfile().updateConsoles(); } /** * Asks the user for server location and updates the GUI if given a valid value */ private void browse() { File chosenFolder = Main.getController().getGUI().askForDirectory("Server folder"); if (chosenFolder != null) { directory.setText(chosenFolder.toString()); } } /** * Updates server version choices according to the server type */ private void updateServerVersion() throws ConfigurationException { serverVersions.removeAllItems(); String selectedServerTypes = null; Object selectedType = serverTypes.getSelectedItem(); if (selectedType != null) { selectedServerTypes = selectedType.toString(); } if (selectedServerTypes == null) { return; } if (selectedServerTypes.equals("Custom")) { serverVersions.setEditable(true); } else { serverVersions.setEditable(false); ServerType current = null; for (ServerType servertype : ServerTypeHandler.getServerTypes()) { if (servertype.getName().equals(selectedServerTypes)) { current = servertype; } } if (current != null) { for (String version : current.getVersions()) { serverVersions.addItem(version); } } } } }