public Main() {
        frame = new JFrame("CommandsEX Builder");

        if (tempDir.exists()){
            if (!tempDir.isDirectory()){
                JOptionPane.showMessageDialog(frame, "The file " + tempDir.getPath() + " is not a directory", "Error", JOptionPane.ERROR_MESSAGE);
                System.exit(1);
            }
        } else {
            tempDir.mkdir();
        }

        Version version = showVersionDialogue();

        switch (version) {
            case BUKKIT_DEV: {
                try {
                    new DownloadProgressMonitor("Latest BukkitDev Release", new URL("http://api.bukget.org/3/plugins/bukkit/commandsex/latest/download"));
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                }

                break;
            }

            case JENKINS: {
                new DownloadProgressMonitor("Latest Development Build", Utils.getLatestJenkinsDownload());
                break;
            }

            case OWN_JAR: {
                JFileChooser jFileChooser = new JFileChooser();
                jFileChooser.setAcceptAllFileFilterUsed(false);
                jFileChooser.addChoosableFileFilter(new FileFilter() {

                    @Override
                    public boolean accept(File f) {
                        return f.isDirectory() || f.getName().toLowerCase().endsWith(".jar");
                    }

                    @Override
                    public String getDescription() {
                        return "CommandsEX JAR Files";
                    }
                });

                int returnVal = jFileChooser.showOpenDialog(frame);

                if (returnVal != JFileChooser.APPROVE_OPTION){
                    System.exit(0);
                }

                FeatureSelection.jar = jFileChooser.getSelectedFile();
            }
        }

        frame.setContentPane(new FeatureSelection().jPanel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setSize(new Dimension(500, 500));
        frame.setVisible(true);
    }