From bb237031ab210ef462935b7420741b0d70fda77b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szab=C3=B3=20Gergely?= Date: Sat, 13 Sep 2014 17:32:13 +0200 Subject: [PATCH 1/3] Update README.md --- README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/README.md b/README.md index a9f296b..6840d97 100644 --- a/README.md +++ b/README.md @@ -20,3 +20,23 @@ You can grab downloads of current and past versions from our [Jenkins server](ht TODO ---- * Simple and easy to use GUI. + +SpigotPatcherGUI +============= + +GUI for the SpigotPatcher app! + +##Features## + * Version checker + * Multi Language (EN, HU, ...) + * Automatically check the checksum + * File browser GUI + * File downloader (The list updates every launch) + +##With or without GUI:## + * If you start the application with **--nogui** argument, you can use the original console based patcher. + +##JVM arguments:## + * If you start the application with **-Dlanguage=** JVM argument, your patcher will start with the selected language. + +![ScreenShot](http://content.screencast.com/users/Gerviba/folders/Jing/media/e1c68032-b4fb-49ab-bea7-d6289f738a8e/2014-09-13_1550.png) From 5721901c509288ae253a2d4d28ea9ad9c928beec Mon Sep 17 00:00:00 2001 From: Gerviba Date: Sat, 13 Sep 2014 17:40:50 +0200 Subject: [PATCH 2/3] Added a better GUI --- README.md | 25 +- pom.xml | 13 +- resources/spigot_icon.png | Bin 0 -> 6809 bytes resources/spigot_upperbar.png | Bin 0 -> 113647 bytes .../wb/swing/FocusTraversalOnArray.java | 92 +++ .../java/org/spigotmc/patcher/GuiPatcher.java | 532 ++++++++++++++++++ .../org/spigotmc/patcher/LanguageHelper.java | 202 +++++++ src/main/java/org/spigotmc/patcher/Main.java | 69 +-- .../org/spigotmc/patcher/UserInterface.form | 204 ------- .../org/spigotmc/patcher/UserInterface.java | 280 --------- 10 files changed, 864 insertions(+), 553 deletions(-) create mode 100644 resources/spigot_icon.png create mode 100644 resources/spigot_upperbar.png create mode 100644 src/main/java/org/eclipse/wb/swing/FocusTraversalOnArray.java create mode 100644 src/main/java/org/spigotmc/patcher/GuiPatcher.java create mode 100644 src/main/java/org/spigotmc/patcher/LanguageHelper.java delete mode 100644 src/main/java/org/spigotmc/patcher/UserInterface.form delete mode 100644 src/main/java/org/spigotmc/patcher/UserInterface.java diff --git a/README.md b/README.md index 6840d97..8334b0e 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,3 @@ -SpigotPatcher -============= - -**Binary patcher for distribution of Spigot and related updates.** - -Usage ------ -See the [initial release announcement](http://www.spigotmc.org/threads/29091/) or [this wiki page](http://www.spigotmc.org/wiki/spigot-patcher/) for detailed usage instructions on how to use SpigotPatcher. For command line invocation, simply run the program without any arguments. - -Changelog ---------- - -* **1.0.1**: Check file read and write permissions before beginning patch process. -* **1.0.0**: Initial Release - -Download --------- -You can grab downloads of current and past versions from our [Jenkins server](http://ci.md-5.net/job/SpigotPatcher/). - -TODO ----- -* Simple and easy to use GUI. - SpigotPatcherGUI ============= @@ -37,6 +14,6 @@ GUI for the SpigotPatcher app! * If you start the application with **--nogui** argument, you can use the original console based patcher. ##JVM arguments:## - * If you start the application with **-Dlanguage=** JVM argument, your patcher will start with the selected language. + * If you start the application with **-Dlanguage=en** JVM argument, your patcher will start with the selected language. ![ScreenShot](http://content.screencast.com/users/Gerviba/folders/Jing/media/e1c68032-b4fb-49ab-bea7-d6289f738a8e/2014-09-13_1550.png) diff --git a/pom.xml b/pom.xml index 0ecf772..a5f4a3d 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.spigotmc patcher - 1.0.1-SNAPSHOT + 1.0.6-SNAPSHOT jar SpigotPatcher @@ -38,6 +38,17 @@ ${project.name} + + + + ${project.basedir} + . + + **/*.png + + + + org.apache.maven.plugins diff --git a/resources/spigot_icon.png b/resources/spigot_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e75dc854efb184d28978d05e38968f2bfe3a2f06 GIT binary patch literal 6809 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 DM?TrG literal 0 HcmV?d00001 diff --git a/src/main/java/org/eclipse/wb/swing/FocusTraversalOnArray.java b/src/main/java/org/eclipse/wb/swing/FocusTraversalOnArray.java new file mode 100644 index 0000000..b0b4feb --- /dev/null +++ b/src/main/java/org/eclipse/wb/swing/FocusTraversalOnArray.java @@ -0,0 +1,92 @@ +/******************************************************************************* + * Copyright (c) 2011 Google, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Google, Inc. - initial API and implementation + *******************************************************************************/ +package org.eclipse.wb.swing; + +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; + +/** + * Cyclic focus traversal policy based on array of components. + *

+ * This class may be freely distributed as part of any application or plugin. + * + * @author scheglov_ke + */ +public class FocusTraversalOnArray extends FocusTraversalPolicy { + private final Component m_Components[]; + //////////////////////////////////////////////////////////////////////////// + // + // Constructor + // + //////////////////////////////////////////////////////////////////////////// + public FocusTraversalOnArray(Component components[]) { + m_Components = components; + } + //////////////////////////////////////////////////////////////////////////// + // + // Utilities + // + //////////////////////////////////////////////////////////////////////////// + private int indexCycle(int index, int delta) { + int size = m_Components.length; + int next = (index + delta + size) % size; + return next; + } + private Component cycle(Component currentComponent, int delta) { + int index = -1; + loop : for (int i = 0; i < m_Components.length; i++) { + Component component = m_Components[i]; + for (Component c = currentComponent; c != null; c = c.getParent()) { + if (component == c) { + index = i; + break loop; + } + } + } + // try to find enabled component in "delta" direction + int initialIndex = index; + while (true) { + int newIndex = indexCycle(index, delta); + if (newIndex == initialIndex) { + break; + } + index = newIndex; + // + Component component = m_Components[newIndex]; + if (component.isEnabled() && component.isVisible() && component.isFocusable()) { + return component; + } + } + // not found + return currentComponent; + } + //////////////////////////////////////////////////////////////////////////// + // + // FocusTraversalPolicy + // + //////////////////////////////////////////////////////////////////////////// + public Component getComponentAfter(Container container, Component component) { + return cycle(component, 1); + } + public Component getComponentBefore(Container container, Component component) { + return cycle(component, -1); + } + public Component getFirstComponent(Container container) { + return m_Components[0]; + } + public Component getLastComponent(Container container) { + return m_Components[m_Components.length - 1]; + } + public Component getDefaultComponent(Container container) { + return getFirstComponent(container); + } +} \ No newline at end of file diff --git a/src/main/java/org/spigotmc/patcher/GuiPatcher.java b/src/main/java/org/spigotmc/patcher/GuiPatcher.java new file mode 100644 index 0000000..5910514 --- /dev/null +++ b/src/main/java/org/spigotmc/patcher/GuiPatcher.java @@ -0,0 +1,532 @@ +package org.spigotmc.patcher; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Desktop; +import java.awt.Toolkit; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import javax.swing.AbstractListModel; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JFileChooser; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextField; +import javax.swing.SwingConstants; +import javax.swing.UIManager; +import javax.swing.UIManager.LookAndFeelInfo; +import javax.swing.border.LineBorder; + +import net.md_5.jbeat.Patcher; + +import com.google.common.hash.Hashing; +import com.google.common.io.Files; + +/** + * GuiPatcher Class + * @author Gerviba + */ +public class GuiPatcher extends JFrame { + + //Default URL-s: + private static final String DOWNLOAD_URL = "https://raw.githubusercontent.com/Gerviba/SpigotPatcherGUI/master/DOWNLOADS.txt"; + private static final String VERSION_URL = "https://raw.githubusercontent.com/Gerviba/SpigotPatcherGUI/master/VERSION.txt"; + private static final String SPIGOT_URL = "http://spigotmc.org/"; + private static final String BUG_REPORT = "http://bug.url.org/"; + + //Downloadable File's map: + private static final HashMap DownloadableItems = new HashMap(); + //Downloadable File's key list: (DownloadableItems.keySet() is too random) + private static List sortedNames = new ArrayList(); + //Files: + private static File original = null, bps = null, result = null; + //Version Strings: + private static String newest_version = "N/A", version = "1.0.7"; + //The instance: + private static GuiPatcher instance; + + + JFileChooser fc; + + private static final long serialVersionUID = 1525215042060278658L; + private JPanel contentPane; + private JTextField OriginalBrowseText; + private JTextField BpsBrowseText; + private JTextField ResultBrowseText; + private JTextField HashText; + + /** + * Init the application + */ + protected static void init() { + try { + + BufferedReader bufferedreader = null; + try { + bufferedreader = new BufferedReader(new InputStreamReader(new URL(DOWNLOAD_URL).openStream())); + String output; + + while((output = bufferedreader.readLine()) != null) { + if(output.split("[;]").length == 2) { + DownloadableItems.put(output.split("[;]")[0], output.split("[;]")[1]); + sortedNames.add(output.split("[;]")[0]); + System.out.println("> "+output.split("[;]")[0]+" -> "+output.split("[;]")[1]); + } else { + System.out.println(output); + } + } + + bufferedreader.close(); + bufferedreader = new BufferedReader(new InputStreamReader(new URL(VERSION_URL).openStream())); + + if((output = bufferedreader.readLine()) != null) { + newest_version = "v"+output; + if(!newest_version.equals("v"+version)) + JOptionPane.showMessageDialog(null, LanguageHelper.getLang().INFO_NEW_VERSION, "Spigot Patcher", JOptionPane.WARNING_MESSAGE); + } + } catch(Exception e) { + e.printStackTrace(); + } finally { + if(bufferedreader != null) bufferedreader.close(); + } + + GuiPatcher frame = new GuiPatcher(); + frame.setVisible(true); + + } catch (Exception e) { + JOptionPane.showMessageDialog(null, "Failed to launch!\nError:\n"+e.getMessage(), "Spigot Patcher", JOptionPane.WARNING_MESSAGE); + e.printStackTrace(); + } + } + + /** + * Setting up the screen + */ + @SuppressWarnings("serial") + private GuiPatcher() { + instance = this; + + //Setup Look'n'Feel + + setIconImage(Toolkit.getDefaultToolkit().getImage(GuiPatcher.class.getResource("/resources/spigot_icon.png"))); + setTitle("Spigot Patcher v"+version); + setType(Type.POPUP); + setResizable(false); + try { + for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { + if ("Nimbus".equals(info.getName())) { + UIManager.setLookAndFeel(info.getClassName()); + UIManager.put("nimbusBase", new Color(0xEEEEEE)); + UIManager.put("nimbusBlueGrey", new Color(0xDDDDDD)); + UIManager.put("control", new Color(0xDDDDDD)); + UIManager.put("nimbusSelection", new Color(0xDDDDDD)); + UIManager.put("nimbusSelectionBackground", new Color(0xff9c2b)); + UIManager.put("nimbusOrange", new Color(0xff9c2b)); + UIManager.put("nimbusFocus", new Color(0xe58f2d)); + System.out.println("Look'n'Feel set!"); + fc = new JFileChooser(); + break; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + //Setup the GUI + + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setBounds((int) ((Toolkit.getDefaultToolkit().getScreenSize().getWidth() - 600) / 2), (int) ((Toolkit.getDefaultToolkit().getScreenSize().getHeight() - 438) / 2), 600, 438); + contentPane = new JPanel(); + contentPane.setBackground(Color.WHITE); + contentPane.setForeground(Color.BLACK); + contentPane.setBorder(UIManager.getBorder("TextField.border")); + setContentPane(contentPane); + contentPane.setLayout(null); + + JLabel VersionTitle = new JLabel(LanguageHelper.getLang().LABEL_VERSION); + VersionTitle.setHorizontalAlignment(SwingConstants.LEFT); + VersionTitle.setBounds(437, 11, 89, 14); + contentPane.add(VersionTitle); + + JLabel VersionLabel = new JLabel("v"+version); + VersionLabel.setForeground(Color.WHITE); + VersionLabel.setHorizontalAlignment(SwingConstants.RIGHT); + VersionLabel.setBounds(493, 11, 89, 14); + contentPane.add(VersionLabel); + + JLabel NewestVersionTitle = new JLabel(LanguageHelper.getLang().LABEL_NEWEST_VERSION); + NewestVersionTitle.setHorizontalAlignment(SwingConstants.LEFT); + NewestVersionTitle.setBounds(437, 27, 89, 14); + contentPane.add(NewestVersionTitle); + + JLabel NewestVersionLable = new JLabel(newest_version); + NewestVersionLable.setForeground(Color.WHITE); + NewestVersionLable.setHorizontalAlignment(SwingConstants.RIGHT); + NewestVersionLable.setBounds(493, 27, 89, 14); + contentPane.add(NewestVersionLable); + + JLabel LanguageTitle = new JLabel(LanguageHelper.getLang().LABEL_LANGUAGE); + LanguageTitle.setBounds(437, 59, 89, 14); + contentPane.add(LanguageTitle); + + JLabel LanguageLabel = new JLabel(LanguageHelper.getLang().THIS_LANG); + LanguageLabel.setForeground(Color.WHITE); + LanguageLabel.setHorizontalAlignment(SwingConstants.RIGHT); + LanguageLabel.setBounds(493, 59, 89, 14); + contentPane.add(LanguageLabel); + + JLabel OriginalTitle = new JLabel(LanguageHelper.getLang().LABEL_ORIGINAL_FILE); + OriginalTitle.setBounds(10, 111, 288, 14); + contentPane.add(OriginalTitle); + + final JLabel OriginalChecksum = new JLabel(LanguageHelper.getLang().LABEL_CHECKSUM+(original != null ? hash(original) : "")); + OriginalChecksum.setForeground(Color.DARK_GRAY); + OriginalChecksum.setBounds(20, 155, 370, 14); + contentPane.add(OriginalChecksum); + + OriginalBrowseText = new JTextField(); + OriginalBrowseText.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent arg0) { + if(fc.showOpenDialog(GuiPatcher.this) == JFileChooser.APPROVE_OPTION && fc.getSelectedFile() != null && fc.getSelectedFile().exists() && fc.getSelectedFile().canRead()) { + original = fc.getSelectedFile(); + OriginalBrowseText.setText(fc.getSelectedFile().getAbsolutePath()); + OriginalChecksum.setText(LanguageHelper.getLang().LABEL_CHECKSUM+(original != null ? hash(original) : "")); + } else { + JOptionPane.showMessageDialog(null, LanguageHelper.getLang().INFO_INVALID_FILE, LanguageHelper.getLang().TITLE_OPEN_FAILED, JOptionPane.ERROR_MESSAGE); + } + } + }); + OriginalBrowseText.setText("C:/"); + OriginalBrowseText.setEditable(false); + OriginalBrowseText.setForeground(Color.LIGHT_GRAY); + OriginalBrowseText.setBounds(10, 125, 288, 26); + contentPane.add(OriginalBrowseText); + OriginalBrowseText.setColumns(10); + + JButton OriginalBrowseButton = new JButton(LanguageHelper.getLang().BUTTON_BROWSE); + OriginalBrowseButton.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent arg0) { + if(fc.showOpenDialog(GuiPatcher.this) == JFileChooser.APPROVE_OPTION && fc.getSelectedFile() != null && fc.getSelectedFile().exists() && fc.getSelectedFile().canRead()) { + original = fc.getSelectedFile(); + OriginalBrowseText.setText(fc.getSelectedFile().getAbsolutePath()); + OriginalChecksum.setText(LanguageHelper.getLang().LABEL_CHECKSUM+(original != null ? hash(original) : "")); + } else { + JOptionPane.showMessageDialog(null, LanguageHelper.getLang().INFO_INVALID_FILE, LanguageHelper.getLang().TITLE_OPEN_FAILED, JOptionPane.ERROR_MESSAGE); + } + } + }); + OriginalBrowseButton.setBounds(308, 127, 82, 23); + OriginalBrowseButton.setBackground(new Color(0xCCCCCC)); + contentPane.add(OriginalBrowseButton); + + JLabel BpsTitle = new JLabel(LanguageHelper.getLang().LABEL_BPS_FILE); + BpsTitle.setBounds(10, 180, 288, 14); + contentPane.add(BpsTitle); + + final JLabel BpsChecksum = new JLabel(LanguageHelper.getLang().LABEL_CHECKSUM+(bps != null ? hash(bps) : "")); + BpsChecksum.setForeground(Color.DARK_GRAY); + BpsChecksum.setBounds(20, 224, 370, 14); + contentPane.add(BpsChecksum); + + BpsBrowseText = new JTextField(); + BpsBrowseText.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if(fc.showOpenDialog(GuiPatcher.this) == JFileChooser.APPROVE_OPTION && fc.getSelectedFile() != null && fc.getSelectedFile().exists() && fc.getSelectedFile().canRead()) { + bps = fc.getSelectedFile(); + BpsBrowseText.setText(fc.getSelectedFile().getAbsolutePath()); + BpsChecksum.setText(LanguageHelper.getLang().LABEL_CHECKSUM+(bps != null ? hash(bps) : "")); + } else { + JOptionPane.showMessageDialog(null, LanguageHelper.getLang().INFO_INVALID_FILE, LanguageHelper.getLang().TITLE_OPEN_FAILED, JOptionPane.ERROR_MESSAGE); + } + } + }); + BpsBrowseText.setText("C:/"); + BpsBrowseText.setEditable(false); + BpsBrowseText.setForeground(Color.LIGHT_GRAY); + BpsBrowseText.setColumns(10); + BpsBrowseText.setBounds(10, 194, 288, 26); + contentPane.add(BpsBrowseText); + + JButton BpsBrowseButton = new JButton(LanguageHelper.getLang().BUTTON_BROWSE); + BpsBrowseButton.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if(fc.showOpenDialog(GuiPatcher.this) == JFileChooser.APPROVE_OPTION && fc.getSelectedFile() != null && fc.getSelectedFile().exists() && fc.getSelectedFile().canRead()) { + bps = fc.getSelectedFile(); + BpsBrowseText.setText(fc.getSelectedFile().getAbsolutePath()); + BpsChecksum.setText(LanguageHelper.getLang().LABEL_CHECKSUM+(bps != null ? hash(bps) : "")); + } else { + JOptionPane.showMessageDialog(null, LanguageHelper.getLang().INFO_INVALID_FILE, LanguageHelper.getLang().TITLE_OPEN_FAILED, JOptionPane.ERROR_MESSAGE); + } + } + }); + BpsBrowseButton.setBounds(308, 196, 82, 23); + BpsBrowseButton.setBackground(new Color(0xCCCCCC)); + contentPane.add(BpsBrowseButton); + + final JLabel ResultTitle = new JLabel(LanguageHelper.getLang().LABEL_RESULT_FILE); + ResultTitle.setBounds(10, 249, 288, 14); + contentPane.add(ResultTitle); + + ResultBrowseText = new JTextField(); + ResultBrowseText.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if(fc.showSaveDialog(GuiPatcher.this) == JFileChooser.APPROVE_OPTION) { + result = fc.getSelectedFile(); + ResultTitle.setText(fc.getSelectedFile().getAbsolutePath()); + } + } + }); + ResultBrowseText.setText("C:/Spigot/Spigot.jar"); + ResultBrowseText.setEditable(false); + ResultBrowseText.setForeground(Color.LIGHT_GRAY); + ResultBrowseText.setColumns(10); + ResultBrowseText.setBounds(10, 263, 288, 26); + contentPane.add(ResultBrowseText); + + JButton ResultBrowseButton = new JButton(LanguageHelper.getLang().BUTTON_BROWSE); + ResultBrowseButton.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if(fc.showSaveDialog(GuiPatcher.this) == JFileChooser.APPROVE_OPTION) { + result = fc.getSelectedFile(); + ResultTitle.setText(fc.getSelectedFile().getAbsolutePath()); + } + } + }); + ResultBrowseButton.setBounds(308, 265, 82, 23); + ResultBrowseButton.setBackground(new Color(0xCCCCCC)); + contentPane.add(ResultBrowseButton); + + final JCheckBox CheckingEnabled = new JCheckBox(LanguageHelper.getLang().LABEL_CHECK_CHECKSUM); + CheckingEnabled.setBackground(Color.WHITE); + CheckingEnabled.setBounds(10, 296, 292, 23); + contentPane.add(CheckingEnabled); + + HashText = new JTextField(); + HashText.setForeground(Color.GRAY); + HashText.setText(LanguageHelper.getLang().LABEL_ENTER_HASH); + HashText.setColumns(10); + HashText.setBounds(10, 314, 288, 26); + contentPane.add(HashText); + + JButton OpenWebsite = new JButton(LanguageHelper.getLang().BUTTON_OPEN_SITE); + OpenWebsite.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + try { + if(Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(java.awt.Desktop.Action.BROWSE)) + Desktop.getDesktop().browse(new URL(SPIGOT_URL).toURI()); + } catch(Exception e1) { + e1.printStackTrace(); + } + } + }); + OpenWebsite.setBackground(new Color(0xBBBBBB)); + OpenWebsite.setBounds(170, 351, 220, 23); + contentPane.add(OpenWebsite); + + JButton ReportBUG = new JButton(LanguageHelper.getLang().BUTTON_REPORT); + ReportBUG.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + try { + if(Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(java.awt.Desktop.Action.BROWSE)) + Desktop.getDesktop().browse(new URL(BUG_REPORT).toURI()); + } catch(Exception e1) { + e1.printStackTrace(); + } + } + }); + ReportBUG.setBackground(new Color(0xBBBBBB)); + ReportBUG.setBounds(170, 377, 129, 23); + contentPane.add(ReportBUG); + + JButton InfoButton = new JButton(LanguageHelper.getLang().LABEL_INFO); + InfoButton.setBackground(new Color(0xBBBBBB)); + InfoButton.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent arg0) { + JOptionPane.showMessageDialog(null, "The Spigot Patcher GUI is created by: Gerviba\n\nThe Spigot Patcher is created by the Spigot Dev Team.\nCheck out their site: http://spigotmc.org/", "Spigot Patcher", JOptionPane.INFORMATION_MESSAGE); + } + }); + + InfoButton.setBounds(301, 377, 89, 23); + contentPane.add(InfoButton); + + final JButton PATCH = new JButton(LanguageHelper.getLang().BUTTON_PATCH); + PATCH.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + PATCH.setText(LanguageHelper.getLang().BUTTON_PATCHING); + PATCH.setEnabled(false); + + if(original == null || bps == null || result == null) { + JOptionPane.showMessageDialog(null, LanguageHelper.getLang().INFO_INCORRECT_INPUT, "Spigot Patcher", JOptionPane.ERROR_MESSAGE); + PATCH.setEnabled(true); + PATCH.setText(LanguageHelper.getLang().BUTTON_PATCH); + return; + } + + try { + if(!result.createNewFile()) { + JOptionPane.showMessageDialog(null, LanguageHelper.getLang().INFO_CANNOT_CREATE, "Spigot Patcher", JOptionPane.ERROR_MESSAGE); + PATCH.setEnabled(true); + PATCH.setText(LanguageHelper.getLang().BUTTON_PATCH); + return; + } + + new Patcher(bps, original, result).patch(); + System.out.println("Success!"); + + if(CheckingEnabled.isSelected()) { + JOptionPane.showMessageDialog(null, LanguageHelper.getLang().INFO_SUCCESS+"\r"+hash(result)+" <=["+(hash(result).equalsIgnoreCase(HashText.getText()) ? "OK" : LanguageHelper.getLang().DIFFERENT)+"]=> "+HashText.getText(), "Spigot Patcher", JOptionPane.ERROR_MESSAGE); + } else { + JOptionPane.showMessageDialog(null, LanguageHelper.getLang().INFO_SUCCESS, "Spigot Patcher", JOptionPane.ERROR_MESSAGE); + } + + } catch ( Exception ex ) { + JOptionPane.showMessageDialog(null, LanguageHelper.getLang().INFO_ERROR+ex.getMessage(), "Spigot Patcher", JOptionPane.ERROR_MESSAGE); + ex.printStackTrace(); + result.delete(); + return; + } + + PATCH.setEnabled(true); + PATCH.setText(LanguageHelper.getLang().BUTTON_PATCH); + } + }); + PATCH.setBackground(new Color(0xd88934)); + PATCH.setBounds(10, 351, 150, 49); + contentPane.add(PATCH); + + JLabel LOGO = new JLabel(""); + LOGO.setBounds(0, 0, 600, 105); + contentPane.add(LOGO); + LOGO.setIcon(new ImageIcon(GuiPatcher.class.getResource("/resources/spigot_upperbar.png"))); + + JPanel DownloadPanel = new JPanel(); + DownloadPanel.setBorder(new LineBorder(new Color(0, 0, 0))); + DownloadPanel.setBounds(402, 103, 193, 308); + contentPane.add(DownloadPanel); + DownloadPanel.setLayout(new BorderLayout(0, 0)); + + JPanel NorthPanel = new JPanel(); + DownloadPanel.add(NorthPanel, BorderLayout.NORTH); + + JLabel DownloadLabel = new JLabel(LanguageHelper.getLang().LABEL_DOWNLOADS); + NorthPanel.add(DownloadLabel); + + JPanel ContentPanel = new JPanel(); + DownloadPanel.add(ContentPanel, BorderLayout.CENTER); + ContentPanel.setLayout(new BorderLayout(0, 0)); + + JScrollPane Scrolling = new JScrollPane(); + ContentPanel.add(Scrolling, BorderLayout.CENTER); + + final JList DownloadList = new JList(); + DownloadList.setModel(new AbstractListModel() { + //String[] values = (String[]) DownloadableItems.keySet().toArray(new String[DownloadableItems.keySet().size()]); + String[] values = (String[]) sortedNames.toArray(new String[sortedNames.size()]); + public int getSize() { + return values.length; + } + public String getElementAt(int index) { + return values[index]; + } + }); + Scrolling.setViewportView(DownloadList); + + JButton DownloadButton = new JButton(LanguageHelper.getLang().LABEL_DOWNLOAD); + DownloadButton.addMouseListener(new MouseAdapter() { + @Override + public synchronized void mouseClicked(MouseEvent arg0) { + if(DownloadList.getSelectedValue() == null || DownloadableItems.get(DownloadList.getSelectedValue()) == null) { + JOptionPane.showMessageDialog(null, LanguageHelper.getLang().INFO_SELECT_AN_ITEM, LanguageHelper.getLang().TITLE_DOWNLOAD_FAILED, JOptionPane.ERROR_MESSAGE); + return; + } + BufferedInputStream in = null; + ByteArrayOutputStream out = null; + try { + in = new BufferedInputStream(new URL(DownloadableItems.get(DownloadList.getSelectedValue())).openStream()); + if (fc.showSaveDialog(GuiPatcher.this) == JFileChooser.APPROVE_OPTION) { + out = new ByteArrayOutputStream(); + byte[] buf = new byte[1024]; + int n = 0, total = 0; + + while(-1!=(n=in.read(buf))) { + out.write(buf, 0, n); + total += n; + } + byte[] response = out.toByteArray(); + + FileOutputStream fos = new FileOutputStream(fc.getSelectedFile().getAbsolutePath()); + fos.write(response); + fos.close(); + System.out.println("Download success!"); + JOptionPane.showMessageDialog(null, LanguageHelper.getLang().INFO_DOWNLOAD.replace("", fc.getSelectedFile().getName()).replace("", ""+total), "Spigot Patcher", JOptionPane.INFORMATION_MESSAGE); + } + } catch(Exception e) { + JOptionPane.showMessageDialog(null, LanguageHelper.getLang().INFO_ERROR+e.getMessage(), LanguageHelper.getLang().TITLE_DOWNLOAD_FAILED, JOptionPane.ERROR_MESSAGE); + e.printStackTrace(); + } finally { + if (in != null) { + try { in.close(); } catch (IOException e) {} + } + if (out != null) { + try { out.close(); } catch (IOException e) {} + } + } + } + }); + + ContentPanel.setBackground(new Color(0xBBBBBB)); + ContentPanel.add(DownloadButton, BorderLayout.SOUTH); + System.out.println("Rendering GUI is completed!"); + } + + /** + * Hash the file + * @param file + * @return The md5 hash of the file + */ + private static String hash(File file) { + try { + return Files.hash( file, Hashing.md5() ).toString(); + } catch (IOException e) { + e.printStackTrace(); + } + return ""; + } + + /** + * Instance getter + * @return + */ + public static GuiPatcher getInstance() { + return instance; + } + +} diff --git a/src/main/java/org/spigotmc/patcher/LanguageHelper.java b/src/main/java/org/spigotmc/patcher/LanguageHelper.java new file mode 100644 index 0000000..fd4d5a6 --- /dev/null +++ b/src/main/java/org/spigotmc/patcher/LanguageHelper.java @@ -0,0 +1,202 @@ +package org.spigotmc.patcher; + +import java.util.ArrayList; +import java.util.List; + +/** + * Language Helper Class + * @author Gerviba + */ +public class LanguageHelper { + + //Installed Languages: + public static List Langs = new ArrayList(); + //Selected Language: + private static LanguageHelper instance; + + //Auto-Init: (in first use) + static { + Langs.add(instance = new LanguageHelper()); + Langs.add(new LanguageHelper("hu", + "Magyar", + "Tallózás", + "Csomagold", + "Csomagolás", + "Megnyit: http://spigotmc.org/", + "Hiba bejelentése", + "Letöltés", + "Az eredeti jar fájl: (original jar)", + "A .bps fájl:", + "Készítendő fájl:", + "Ellenőrizze az elkészült jart", + "Checksum: ", + "Letöltés", + "Letöltések", + "Jelenlegi verzió:", + "Legújabb verzió:", + "Nyelv:", + "Írd be az elkészült fájl checksumját", + "Infó", + "A fájl nem megfelelő, vagy bezártad a párbeszédablakot!", + "Kérlek válassz ki egy sort a \"Letöltések\" panelről.", + "Egy hiba történt!\nHiba: ", + "Új verzió elérhető!\nTöltsd le a weblapról!", + "Be kell állítsad mind a három fájlt!", + "Nem lehet elkészíteni a fájlt! Kérlek ellenőrizd!", + "A fájl sikeresen létrejött!", + "Letöltés sikeres!\nFájl neve: \nMérete: byte", + "Megnyitás sikertelen!", + "Letöltés sikertelen!", + "Különböző")); + //TODO: Insert another languages here... + + //Detect computer's language: + if(!System.getProperty("language", "_").equals("en")) { + for(LanguageHelper lh : Langs) + if(System.getProperty("user.language").equalsIgnoreCase(lh.LANG_ID)) { + instance = lh; + System.out.println("Computer language is detected! ("+lh.THIS_LANG+")"); + break; + } + for(LanguageHelper lh : Langs) + if(System.getProperty("language", "_").equalsIgnoreCase(lh.LANG_ID)) { + instance = lh; + System.out.println("Language set (using forced JVM arguments)! ("+lh.THIS_LANG+")"); + break; + } + } else { + System.out.println("Language set (using JVM arguments)! (English)"); + } + } + + // + public String LANG_ID = "en"; + public String THIS_LANG = "English"; + + public String BUTTON_BROWSE = "Browse"; + public String BUTTON_PATCH = "Patch it"; + public String BUTTON_PATCHING = "Patching..."; + public String BUTTON_OPEN_SITE = "Open: http://spigotmc.org/"; + public String BUTTON_REPORT = "Report a BUG"; + public String BUTTON_DOWNLOAD = "Download selected"; + + public String LABEL_ORIGINAL_FILE = "The original jar file:"; + public String LABEL_BPS_FILE = "The .bps file:"; + public String LABEL_RESULT_FILE = "The output file:"; + public String LABEL_CHECK_CHECKSUM = "Check the resultant jar"; + public String LABEL_CHECKSUM = "Checksum: "; + public String LABEL_DOWNLOAD = "Download"; + public String LABEL_DOWNLOADS = "Downloads"; + public String LABEL_VERSION = "Current version:"; + public String LABEL_NEWEST_VERSION = "Newest version:"; + public String LABEL_LANGUAGE = "Language:"; + public String LABEL_ENTER_HASH = "Enter the resultant jar's checksum"; + public String LABEL_INFO = "Info"; + + public String INFO_INVALID_FILE = "The file is incorrect or the dialog closed!"; + public String INFO_SELECT_AN_ITEM = "Please, select a line from the 'Downloads' panel."; + public String INFO_ERROR = "An error occurred!\nError: "; + public String INFO_NEW_VERSION = "New version is available!\nYou can download it from the website!"; + public String INFO_INCORRECT_INPUT = "You must set the three files!"; + public String INFO_CANNOT_CREATE = "Could not create specified output file.\nPlease ensure that it is in a valid directory which can be written to."; + public String INFO_SUCCESS = "The file was successfully created!"; + public String INFO_DOWNLOAD = "Download success!\nFile name: \nFile size: byte"; + + public String TITLE_OPEN_FAILED = "Failed to open!"; + public String TITLE_DOWNLOAD_FAILED = "Failed to download!"; + public String DIFFERENT = "DIFFERENT"; + + /** + * Default Language constructor + */ + private LanguageHelper() { + System.out.println("An empty language initialized! (with default values)"); + } + + /** + * Custom Language constructor + * @param LANG_ID + * @param THIS_LANG + * @param BUTTON_BROWSE + * @param BUTTON_PATCH + * @param BUTTON_PATCHING + * @param BUTTON_OPEN_SITE + * @param BUTTON_REPORT + * @param BUTTON_DOWNLOAD + * @param LABEL_ORIGINAL_FILE + * @param LABEL_BPS_FILE + * @param LABEL_RESULT_FILE + * @param LABEL_CHECK_CHECKSUM + * @param LABEL_CHECKSUM + * @param LABEL_DOWNLOAD + * @param LABEL_DOWNLOADS + * @param LABEL_VERSION + * @param LABEL_NEWEST_VERSION + * @param LABEL_LANGUAGE + * @param LABEL_ENTER_HASH + * @param LABEL_INFO + * @param INFO_INVALID_FILE + * @param INFO_SELECT_AN_ITEM + * @param INFO_ERROR + * @param INFO_NEW_VERSION + * @param INFO_INCORRECT_INPUT + * @param INFO_CANNOT_CREATE + * @param INFO_SUCCESS + * @param INFO_DOWNLOAD + * @param TITLE_OPEN_FAILED + * @param TITLE_DOWNLOAD_FAILED + * @param DIFFERENT + */ + private LanguageHelper(String LANG_ID, String THIS_LANG, String BUTTON_BROWSE, String BUTTON_PATCH, String BUTTON_PATCHING, String BUTTON_OPEN_SITE, + String BUTTON_REPORT, String BUTTON_DOWNLOAD, String LABEL_ORIGINAL_FILE, String LABEL_BPS_FILE, String LABEL_RESULT_FILE, + String LABEL_CHECK_CHECKSUM, String LABEL_CHECKSUM, String LABEL_DOWNLOAD, String LABEL_DOWNLOADS, String LABEL_VERSION, + String LABEL_NEWEST_VERSION, String LABEL_LANGUAGE, String LABEL_ENTER_HASH, String LABEL_INFO, String INFO_INVALID_FILE, String INFO_SELECT_AN_ITEM, + String INFO_ERROR, String INFO_NEW_VERSION, String INFO_INCORRECT_INPUT, String INFO_CANNOT_CREATE, String INFO_SUCCESS, String INFO_DOWNLOAD, String TITLE_OPEN_FAILED, + String TITLE_DOWNLOAD_FAILED, String DIFFERENT) { + this.LANG_ID = LANG_ID; + this.THIS_LANG = THIS_LANG; + + this.BUTTON_BROWSE = BUTTON_BROWSE; + this.BUTTON_PATCH = BUTTON_PATCH; + this.BUTTON_PATCHING = BUTTON_PATCHING; + this.BUTTON_OPEN_SITE = BUTTON_OPEN_SITE; + this.BUTTON_REPORT = BUTTON_REPORT; + this.BUTTON_DOWNLOAD = BUTTON_DOWNLOAD; + + this.LABEL_ORIGINAL_FILE = LABEL_ORIGINAL_FILE; + this.LABEL_BPS_FILE = LABEL_BPS_FILE; + this.LABEL_RESULT_FILE = LABEL_RESULT_FILE; + this.LABEL_CHECK_CHECKSUM = LABEL_CHECK_CHECKSUM; + this.LABEL_CHECKSUM = LABEL_CHECKSUM; + this.LABEL_DOWNLOAD = LABEL_DOWNLOAD; + this.LABEL_DOWNLOADS = LABEL_DOWNLOADS; + this.LABEL_VERSION = LABEL_VERSION; + this.LABEL_NEWEST_VERSION = LABEL_NEWEST_VERSION; + this.LABEL_LANGUAGE = LABEL_LANGUAGE; + this.LABEL_ENTER_HASH = LABEL_ENTER_HASH; + this.LABEL_INFO = LABEL_INFO; + + this.INFO_INVALID_FILE = INFO_INVALID_FILE; + this.INFO_SELECT_AN_ITEM = INFO_SELECT_AN_ITEM; + this.INFO_ERROR = INFO_ERROR; + this.INFO_NEW_VERSION = INFO_NEW_VERSION; + this.INFO_INCORRECT_INPUT = INFO_INCORRECT_INPUT; + this.INFO_CANNOT_CREATE = INFO_CANNOT_CREATE; + this.INFO_SUCCESS = INFO_SUCCESS; + this.INFO_DOWNLOAD = INFO_DOWNLOAD; + + this.TITLE_OPEN_FAILED = TITLE_OPEN_FAILED; + this.TITLE_DOWNLOAD_FAILED = TITLE_DOWNLOAD_FAILED; + this.DIFFERENT = DIFFERENT; + System.out.println("Language '"+THIS_LANG+"' initialized!"); + } + + /** + * Language Getter + * @return The selected or auto-selected language + */ + public static LanguageHelper getLang() { + return instance; + } + +} diff --git a/src/main/java/org/spigotmc/patcher/Main.java b/src/main/java/org/spigotmc/patcher/Main.java index dbd2c00..bdb92fb 100644 --- a/src/main/java/org/spigotmc/patcher/Main.java +++ b/src/main/java/org/spigotmc/patcher/Main.java @@ -2,91 +2,72 @@ import com.google.common.hash.Hashing; import com.google.common.io.Files; -import java.awt.GraphicsEnvironment; import java.io.File; -import java.io.IOException; -import java.io.PrintStream; -import java.io.PrintWriter; import net.md_5.jbeat.Patcher; public class Main { - public static void main(String[] args) + public static void main(String[] args) throws Exception { - if ( !GraphicsEnvironment.isHeadless() && args.length == 0 ) - { - UserInterface.main( args ); - return; - } - - if ( args.length != 3 ) + if((args.length > 0 && !args[0].equalsIgnoreCase("--nogui")) || args.length == 0) { + System.out.println( "Init GUI" ); + GuiPatcher.init(); + return; + } + + if ( args.length != 4 ) { System.out.println( "Welcome to the Spigot patch applicator." ); - System.out.println( "In order to use this tool you will need to specify three command line arguments as follows:" ); - System.out.println( "\tjava -jar SpigotPatcher.jar original.jar patch.bps output.jar" ); + System.out.println( "In order to use this tool you will need to specify four command line arguments as follows:" ); + System.out.println( "\tjava -jar SpigotPatcher.jar --nogui original.jar patch.bps output.jar" ); System.out.println( "This will apply the specified patch to the original jar and save it to the output jar" ); System.out.println( "Please ensure that you save your original jar for later use." ); System.out.println( "If you have any queries, please direct them to http://www.spigotmc.org/" ); return; } - patchSafe( new PrintWriter( System.out ), new File( args[0] ), new File( args[1] ), new File( args[2] ) ); - } - - @SuppressWarnings("TooBroadCatch") - public static void patchSafe(PrintWriter console, File originalFile, File patchFile, File outputFile) - { - try - { - patch( console, originalFile, patchFile, outputFile ); - } catch ( Exception ex ) - { - console.println( "***** Unknown error occured during patch process:" ); - ex.printStackTrace( console ); - } - } + File originalFile = new File( args[1] ); + File patchFile = new File( args[2] ); + File outputFile = new File( args[3] ); - @SuppressWarnings("TooBroadCatch") - public static void patch(PrintWriter console, File originalFile, File patchFile, File outputFile) throws IOException - { if ( !originalFile.canRead() ) { - console.println( "Specified original file " + originalFile + " does not exist or cannot be read!" ); + System.err.println( "Specified original file " + originalFile + " does not exist or cannot be read!" ); return; } if ( !patchFile.canRead() ) { - console.println( "Specified patch file " + patchFile + " does not exist or cannot be read!!" ); + System.err.println( "Specified patch file " + patchFile + " does not exist or cannot be read!!" ); return; } if ( outputFile.exists() ) { - console.println( "Specified output file " + outputFile + " exists, please remove it before running this program!" ); + System.err.println( "Specified output file " + outputFile + " exists, please remove it before running this program!" ); return; } if ( !outputFile.createNewFile() ) { - console.println( "Could not create specified output file " + outputFile + " please ensure that it is in a valid directory which can be written to." ); + System.out.println( "Could not create specified output file " + outputFile + " please ensure that it is in a valid directory which can be written to." ); return; } - console.println( "***** Starting patching process, please wait." ); - console.println( "\tInput md5 Checksum: " + Files.hash( originalFile, Hashing.md5() ) ); - console.println( "\tPatch md5 Checksum: " + Files.hash( patchFile, Hashing.md5() ) ); + System.out.println( "***** Starting patching process, please wait." ); + System.out.println( "\tInput md5 Checksum: " + Files.hash( originalFile, Hashing.md5() ) ); + System.out.println( "\tPatch md5 Checksum: " + Files.hash( patchFile, Hashing.md5() ) ); try { new Patcher( patchFile, originalFile, outputFile ).patch(); } catch ( Exception ex ) { - console.println( "***** Exception occured whilst patching file!" ); - ex.printStackTrace( console ); + System.err.println( "***** Exception occured whilst patching file!" ); + ex.printStackTrace(); outputFile.delete(); return; } - console.println( "***** Your file has been patched and verified! We hope you enjoy using Spigot!" ); - console.println( "\tOutput md5 Checksum: " + Files.hash( outputFile, Hashing.md5() ) ); + System.out.println( "***** Your file has been patched and verified! We hope you enjoy using Spigot!" ); + System.out.println( "\tOutput md5 Checksum: " + Files.hash( outputFile, Hashing.md5() ) ); } -} +} \ No newline at end of file diff --git a/src/main/java/org/spigotmc/patcher/UserInterface.form b/src/main/java/org/spigotmc/patcher/UserInterface.form deleted file mode 100644 index 2d9ab89..0000000 --- a/src/main/java/org/spigotmc/patcher/UserInterface.form +++ /dev/null @@ -1,204 +0,0 @@ - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/java/org/spigotmc/patcher/UserInterface.java b/src/main/java/org/spigotmc/patcher/UserInterface.java deleted file mode 100644 index aa1bca8..0000000 --- a/src/main/java/org/spigotmc/patcher/UserInterface.java +++ /dev/null @@ -1,280 +0,0 @@ -package org.spigotmc.patcher; - -import java.awt.EventQueue; -import java.io.File; -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintStream; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.util.logging.Logger; -import javax.swing.JFileChooser; -import javax.swing.JFrame; -import javax.swing.JOptionPane; -import javax.swing.JTextField; -import javax.swing.UIManager; -import javax.swing.filechooser.FileNameExtensionFilter; - -public class UserInterface extends JFrame -{ - - private final PrintWriter consoleStream; - private File lastDir = new File( "." ); - - public UserInterface() - { - consoleStream = new PrintWriter( new StringWriter() - { - - @Override - public void flush() - { - consoleBox.append( getBuffer().toString() ); - getBuffer().setLength( 0 ); - } - }, true ); - initComponents(); - } - - /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() - { - - originalLabel = new javax.swing.JLabel(); - originalBox = new javax.swing.JTextField(); - originalBrowse = new javax.swing.JButton(); - patchLabel = new javax.swing.JLabel(); - outputLabel = new javax.swing.JLabel(); - patchBox = new javax.swing.JTextField(); - patchBrowse = new javax.swing.JButton(); - outputBox = new javax.swing.JTextField(); - outputBrowse = new javax.swing.JButton(); - jScrollPane1 = new javax.swing.JScrollPane(); - consoleBox = new javax.swing.JTextArea(); - patchButton = new javax.swing.JButton(); - copyLabel = new javax.swing.JLabel(); - updateLabel = new javax.swing.JLabel(); - - setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); - setTitle("SpigotPatcher"); - - originalLabel.setText("Original Jar (Spigot #1649):"); - - originalBrowse.setText("Browse"); - originalBrowse.addMouseListener(new java.awt.event.MouseAdapter() - { - public void mouseClicked(java.awt.event.MouseEvent evt) - { - originalBrowseMouseClicked(evt); - } - }); - - patchLabel.setText("Patch File (bps):"); - - outputLabel.setText("Output Jar:"); - - patchBrowse.setText("Browse"); - patchBrowse.addMouseListener(new java.awt.event.MouseAdapter() - { - public void mouseClicked(java.awt.event.MouseEvent evt) - { - patchBrowseMouseClicked(evt); - } - }); - - outputBrowse.setText("Browse"); - outputBrowse.addMouseListener(new java.awt.event.MouseAdapter() - { - public void mouseClicked(java.awt.event.MouseEvent evt) - { - outputBrowseMouseClicked(evt); - } - }); - - consoleBox.setEditable(false); - consoleBox.setColumns(20); - consoleBox.setLineWrap(true); - consoleBox.setRows(5); - consoleBox.setWrapStyleWord(true); - consoleBox.setAutoscrolls(false); - jScrollPane1.setViewportView(consoleBox); - - patchButton.setText("Patch!"); - patchButton.addMouseListener(new java.awt.event.MouseAdapter() - { - public void mouseClicked(java.awt.event.MouseEvent evt) - { - patchButtonMouseClicked(evt); - } - }); - - copyLabel.setFont(new java.awt.Font("Ubuntu", 0, 12)); // NOI18N - copyLabel.setText("SpigotPatcher (c) SpigotMC 2014"); - - updateLabel.setFont(new java.awt.Font("Ubuntu", 0, 12)); // NOI18N - updateLabel.setText("Download updates at http://www.spigotmc.org/"); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); - getContentPane().setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jScrollPane1) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(originalLabel) - .addGap(6, 6, 6)) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(outputLabel) - .addComponent(patchLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(originalBox, javax.swing.GroupLayout.PREFERRED_SIZE, 383, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(originalBrowse)) - .addGroup(layout.createSequentialGroup() - .addComponent(patchBox, javax.swing.GroupLayout.PREFERRED_SIZE, 383, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(patchBrowse)) - .addGroup(layout.createSequentialGroup() - .addComponent(outputBox, javax.swing.GroupLayout.PREFERRED_SIZE, 383, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(outputBrowse))) - .addGap(0, 0, Short.MAX_VALUE)) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(copyLabel) - .addComponent(updateLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(patchButton, javax.swing.GroupLayout.PREFERRED_SIZE, 66, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addContainerGap()) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(originalLabel) - .addComponent(originalBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(originalBrowse)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(patchBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(patchLabel) - .addComponent(patchBrowse)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(outputBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(outputLabel) - .addComponent(outputBrowse)) - .addGap(18, 18, 18) - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 280, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addGroup(layout.createSequentialGroup() - .addComponent(copyLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(updateLabel)) - .addComponent(patchButton)) - .addContainerGap(23, Short.MAX_VALUE)) - ); - - pack(); - }// //GEN-END:initComponents - - private void patchButtonMouseClicked(java.awt.event.MouseEvent evt)//GEN-FIRST:event_patchButtonMouseClicked - {//GEN-HEADEREND:event_patchButtonMouseClicked - if ( originalBox.getText().isEmpty() || patchBox.getText().isEmpty() || outputBox.getText().isEmpty() ) - { - JOptionPane.showMessageDialog( this, "Please browse for all input / output files.", "Please select required files.", JOptionPane.ERROR_MESSAGE ); - return; - } - Main.patchSafe( consoleStream, new File( originalBox.getText() ), new File( patchBox.getText() ), new File( outputBox.getText() ) ); - }//GEN-LAST:event_patchButtonMouseClicked - - private void originalBrowseMouseClicked(java.awt.event.MouseEvent evt)//GEN-FIRST:event_originalBrowseMouseClicked - {//GEN-HEADEREND:event_originalBrowseMouseClicked - choose( originalBox, "Jar Files", "jar" ); - }//GEN-LAST:event_originalBrowseMouseClicked - - private void patchBrowseMouseClicked(java.awt.event.MouseEvent evt)//GEN-FIRST:event_patchBrowseMouseClicked - {//GEN-HEADEREND:event_patchBrowseMouseClicked - choose( patchBox, "Patch Files", "bps" ); - }//GEN-LAST:event_patchBrowseMouseClicked - - private void outputBrowseMouseClicked(java.awt.event.MouseEvent evt)//GEN-FIRST:event_outputBrowseMouseClicked - {//GEN-HEADEREND:event_outputBrowseMouseClicked - choose( outputBox, "Jar Files", "jar" ); - }//GEN-LAST:event_outputBrowseMouseClicked - - private void choose(JTextField box, String description, String extension) - { - JFileChooser chooser = new JFileChooser( lastDir ); - chooser.setFileFilter( new FileNameExtensionFilter( description, extension ) ); - chooser.setFileSelectionMode( JFileChooser.FILES_ONLY ); - chooser.showOpenDialog( this ); - - if ( chooser.getSelectedFile() != null ) - { - box.setText( chooser.getSelectedFile().getPath() ); - lastDir = chooser.getCurrentDirectory(); - } - } - - public static void main(String args[]) - { - try - { - UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() ); - } catch ( ClassNotFoundException ex ) - { - Logger.getLogger( UserInterface.class.getName() ).log( java.util.logging.Level.SEVERE, null, ex ); - } catch ( InstantiationException ex ) - { - Logger.getLogger( UserInterface.class.getName() ).log( java.util.logging.Level.SEVERE, null, ex ); - } catch ( IllegalAccessException ex ) - { - Logger.getLogger( UserInterface.class.getName() ).log( java.util.logging.Level.SEVERE, null, ex ); - } catch ( javax.swing.UnsupportedLookAndFeelException ex ) - { - Logger.getLogger( UserInterface.class.getName() ).log( java.util.logging.Level.SEVERE, null, ex ); - } - - EventQueue.invokeLater( new Runnable() - { - @Override - public void run() - { - new UserInterface().setVisible( true ); - } - } ); - } - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JTextArea consoleBox; - private javax.swing.JLabel copyLabel; - private javax.swing.JScrollPane jScrollPane1; - private javax.swing.JTextField originalBox; - private javax.swing.JButton originalBrowse; - private javax.swing.JLabel originalLabel; - private javax.swing.JTextField outputBox; - private javax.swing.JButton outputBrowse; - private javax.swing.JLabel outputLabel; - private javax.swing.JTextField patchBox; - private javax.swing.JButton patchBrowse; - private javax.swing.JButton patchButton; - private javax.swing.JLabel patchLabel; - private javax.swing.JLabel updateLabel; - // End of variables declaration//GEN-END:variables -} From 99368e4e00d1339395e7bb7b8e26515189b93586 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szab=C3=B3=20Gergely?= Date: Sat, 13 Sep 2014 17:44:51 +0200 Subject: [PATCH 3/3] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8334b0e..d618853 100644 --- a/README.md +++ b/README.md @@ -16,4 +16,4 @@ GUI for the SpigotPatcher app! ##JVM arguments:## * If you start the application with **-Dlanguage=en** JVM argument, your patcher will start with the selected language. -![ScreenShot](http://content.screencast.com/users/Gerviba/folders/Jing/media/e1c68032-b4fb-49ab-bea7-d6289f738a8e/2014-09-13_1550.png) +![ScreenShot](http://content.screencast.com/users/Gerviba/folders/Jing/media/139d0738-9668-45cb-9ee3-da8685f663ac/2014-09-13_1743.png)