Search in sources :

Example 1 with IJavaVersion

use of net.technicpack.launchercore.launch.java.IJavaVersion in project LauncherV3 by TechnicPack.

the class Installer method internalInstallAndRun.

protected void internalInstallAndRun(final ResourceLoader resources, final ModpackModel pack, final String build, final boolean doFullInstall, final LauncherFrame frame, final DownloadListener listener, final boolean doLaunch) {
    runningThread = new Thread(new Runnable() {

        @Override
        public void run() {
            boolean everythingWorked = false;
            try {
                MojangVersion version = null;
                InstallTasksQueue<MojangVersion> tasksQueue = new InstallTasksQueue<MojangVersion>(listener);
                MojangVersionBuilder versionBuilder = createVersionBuilder(pack, tasksQueue);
                if (!pack.isLocalOnly() && build != null && !build.isEmpty()) {
                    buildTasksQueue(tasksQueue, resources, pack, build, doFullInstall, versionBuilder);
                    version = installer.installPack(tasksQueue, pack, build);
                } else {
                    version = versionBuilder.buildVersionFromKey(null);
                    if (version != null)
                        pack.initDirectories();
                }
                if (doLaunch) {
                    if (version == null) {
                        throw new PackNotAvailableOfflineException(pack.getDisplayName());
                    }
                    boolean usingMojangJava = version.getJavaVersion() != null && settings.shouldUseMojangJava();
                    JavaVersionRepository javaVersions = launcher.getJavaVersions();
                    Memory memoryObj = Memory.getClosestAvailableMemory(Memory.getMemoryFromId(settings.getMemory()), javaVersions.getSelectedVersion().is64Bit());
                    long memory = memoryObj.getMemoryMB();
                    String versionNumber = javaVersions.getSelectedVersion().getVersionNumber();
                    RunData data = pack.getRunData();
                    if (data != null && !data.isRunDataValid(memory, versionNumber, usingMojangJava)) {
                        FixRunDataDialog dialog = new FixRunDataDialog(frame, resources, data, javaVersions, memoryObj, !settings.shouldAutoAcceptModpackRequirements(), usingMojangJava);
                        dialog.setVisible(true);
                        if (dialog.getResult() == FixRunDataDialog.Result.ACCEPT) {
                            memoryObj = dialog.getRecommendedMemory();
                            memory = memoryObj.getMemoryMB();
                            IJavaVersion recommendedJavaVersion = dialog.getRecommendedJavaVersion();
                            javaVersions.selectVersion(recommendedJavaVersion.getVersionNumber(), recommendedJavaVersion.is64Bit());
                            if (dialog.shouldRemember()) {
                                settings.setAutoAcceptModpackRequirements(true);
                            }
                        } else
                            return;
                    }
                    if (!usingMojangJava && RunData.isJavaVersionAtLeast(versionNumber, "1.9")) {
                        int result = JOptionPane.showConfirmDialog(frame, resources.getString("launcher.jverwarning", versionNumber), resources.getString("launcher.jverwarning.title"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
                        if (result != JOptionPane.YES_OPTION)
                            return;
                    }
                    LaunchAction launchAction = settings.getLaunchAction();
                    if (launchAction == null || launchAction == LaunchAction.HIDE) {
                        launcherUnhider = new LauncherUnhider(settings, frame);
                    } else
                        launcherUnhider = null;
                    LaunchOptions options = new LaunchOptions(pack.getDisplayName(), packIconMapper.getImageLocation(pack).getAbsolutePath(), settings);
                    launcher.launch(pack, memory, options, launcherUnhider, version);
                    if (launchAction == null || launchAction == LaunchAction.HIDE) {
                        frame.setVisible(false);
                    } else if (launchAction == LaunchAction.NOTHING) {
                        EventQueue.invokeLater(new Runnable() {

                            @Override
                            public void run() {
                                frame.launchCompleted();
                            }
                        });
                    } else if (launchAction == LaunchAction.CLOSE) {
                        System.exit(0);
                    }
                }
                everythingWorked = true;
            } catch (InterruptedException e) {
                boolean cancelledByUser = false;
                synchronized (cancelLock) {
                    if (isCancelledByUser) {
                        cancelledByUser = true;
                        isCancelledByUser = false;
                    }
                }
                // Canceled by user
                if (!cancelledByUser) {
                    if (e.getCause() != null)
                        Utils.getLogger().info("Cancelled by exception.");
                    else
                        Utils.getLogger().info("Cancelled by code.");
                    e.printStackTrace();
                } else
                    Utils.getLogger().info("Cancelled by user.");
            } catch (PackNotAvailableOfflineException e) {
                JOptionPane.showMessageDialog(frame, e.getMessage(), resources.getString("launcher.installerror.unavailable"), JOptionPane.WARNING_MESSAGE);
            } catch (DownloadException e) {
                JOptionPane.showMessageDialog(frame, resources.getString("launcher.installerror.download", pack.getDisplayName(), e.getMessage()), resources.getString("launcher.installerror.title"), JOptionPane.WARNING_MESSAGE);
            } catch (ZipException e) {
                JOptionPane.showMessageDialog(frame, resources.getString("launcher.installerror.unzip", pack.getDisplayName(), e.getMessage()), resources.getString("launcher.installerror.title"), JOptionPane.WARNING_MESSAGE);
            } catch (CacheDeleteException e) {
                JOptionPane.showMessageDialog(frame, resources.getString("launcher.installerror.cache", pack.getDisplayName(), e.getMessage()), resources.getString("launcher.installerror.title"), JOptionPane.WARNING_MESSAGE);
            } catch (BuildInaccessibleException e) {
                e.printStackTrace();
                JOptionPane.showMessageDialog(frame, e.getMessage(), resources.getString("launcher.installerror.title"), JOptionPane.WARNING_MESSAGE);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (!everythingWorked || !doLaunch) {
                    EventQueue.invokeLater(new Runnable() {

                        @Override
                        public void run() {
                            frame.launchCompleted();
                        }
                    });
                }
            }
        }
    }) {

        // /Interrupt is being called from a mysterious source, so unless this is a user-initiated cancel
        // /Let's print the stack trace of the interruptor.
        @Override
        public void interrupt() {
            boolean userCancelled = false;
            synchronized (cancelLock) {
                if (isCancelledByUser)
                    userCancelled = true;
            }
            if (!userCancelled) {
                Utils.getLogger().info("Mysterious interruption source.");
                try {
                    // I am a charlatan and a hack.
                    throw new Exception("Grabbing stack trace- this isn't necessarily an error.");
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
            super.interrupt();
        }
    };
    runningThread.start();
}
Also used : Memory(net.technicpack.utilslib.Memory) CacheDeleteException(net.technicpack.launchercore.exception.CacheDeleteException) JavaVersionRepository(net.technicpack.launchercore.launch.java.JavaVersionRepository) DownloadException(net.technicpack.launchercore.exception.DownloadException) RunData(net.technicpack.launchercore.modpacks.RunData) PackNotAvailableOfflineException(net.technicpack.launchercore.exception.PackNotAvailableOfflineException) MojangVersion(net.technicpack.minecraftcore.mojang.version.MojangVersion) LaunchAction(net.technicpack.launchercore.util.LaunchAction) MojangVersionBuilder(net.technicpack.minecraftcore.mojang.version.MojangVersionBuilder) BuildInaccessibleException(net.technicpack.launchercore.exception.BuildInaccessibleException) ZipException(java.util.zip.ZipException) IOException(java.io.IOException) InstallTasksQueue(net.technicpack.launchercore.install.InstallTasksQueue) BuildInaccessibleException(net.technicpack.launchercore.exception.BuildInaccessibleException) DownloadException(net.technicpack.launchercore.exception.DownloadException) ZipException(java.util.zip.ZipException) PackNotAvailableOfflineException(net.technicpack.launchercore.exception.PackNotAvailableOfflineException) CacheDeleteException(net.technicpack.launchercore.exception.CacheDeleteException) IOException(java.io.IOException) IJavaVersion(net.technicpack.launchercore.launch.java.IJavaVersion) FixRunDataDialog(net.technicpack.launcher.ui.components.FixRunDataDialog) LaunchOptions(net.technicpack.minecraftcore.launch.LaunchOptions)

Example 2 with IJavaVersion

use of net.technicpack.launchercore.launch.java.IJavaVersion in project LauncherV3 by TechnicPack.

the class OptionsDialog method selectOtherVersion.

protected void selectOtherVersion() {
    JFileChooser chooser = new JFileChooser();
    chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    final String osJavaName = new File(OperatingSystem.getJavaDir()).getName();
    chooser.setFileFilter(new FileFilter() {

        @Override
        public boolean accept(File f) {
            if (f.isDirectory())
                return true;
            return (f.getName().equals(osJavaName));
        }

        @Override
        public String getDescription() {
            return resources.getString("launcheroptions.java.filter", osJavaName);
        }
    });
    int result = chooser.showOpenDialog(this);
    if (result == JFileChooser.APPROVE_OPTION) {
        if (chooser.getSelectedFile() == null || !chooser.getSelectedFile().exists() || !chooser.getSelectedFile().canExecute()) {
            JOptionPane.showMessageDialog(this, resources.getString("launcheroptions.java.badfile"));
            return;
        }
        FileBasedJavaVersion chosenJava = new FileBasedJavaVersion(chooser.getSelectedFile());
        if (!chosenJava.verify()) {
            JOptionPane.showMessageDialog(this, resources.getString("launcheroptions.java.badfile"));
            return;
        }
        IJavaVersion existingVersion = javaVersions.getVersion(chosenJava.getVersionNumber(), chosenJava.is64Bit());
        if (existingVersion.getJavaPath() != null) {
            JOptionPane.showMessageDialog(this, resources.getString("launcheroptions.java.versionexists"));
            return;
        }
        fileJavaSource.addVersion(chosenJava);
        javaVersions.addVersion(chosenJava);
        javaVersions.selectVersion(chosenJava.getVersionNumber(), chosenJava.is64Bit());
        JavaVersionItem item = new JavaVersionItem(chosenJava, resources);
        versionSelect.addItem(item);
        versionSelect.setSelectedItem(item);
        settings.setJavaVersion(chosenJava.getVersionNumber());
        settings.setJavaBitness(chosenJava.is64Bit());
        settings.save();
    }
}
Also used : JavaVersionItem(net.technicpack.ui.listitems.javaversion.JavaVersionItem) FileFilter(javax.swing.filechooser.FileFilter) FileBasedJavaVersion(net.technicpack.launchercore.launch.java.version.FileBasedJavaVersion) File(java.io.File) IJavaVersion(net.technicpack.launchercore.launch.java.IJavaVersion)

Example 3 with IJavaVersion

use of net.technicpack.launchercore.launch.java.IJavaVersion in project LauncherV3 by TechnicPack.

the class OptionsDialog method initControlValues.

private void initControlValues() {
    javaArgs.getDocument().removeDocumentListener(javaArgsListener);
    javaArgs.setText(settings.getJavaArgs());
    javaArgs.getDocument().addDocumentListener(javaArgsListener);
    wrapperCommand.getDocument().removeDocumentListener(wrapperCommandListener);
    wrapperCommand.setText(settings.getWrapperCommand());
    wrapperCommand.getDocument().addDocumentListener(wrapperCommandListener);
    installField.setText(settings.getTechnicRoot().getAbsolutePath());
    clientId.setText(settings.getClientId());
    for (ActionListener listener : showConsole.getActionListeners()) showConsole.removeActionListener(listener);
    showConsole.setSelected(settings.getShowConsole());
    showConsole.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            changeShowConsole();
        }
    });
    for (ActionListener listener : askFirstBox.getActionListeners()) askFirstBox.removeActionListener(listener);
    askFirstBox.setSelected(!settings.shouldAutoAcceptModpackRequirements());
    askFirstBox.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            changeAskFirst();
        }
    });
    for (ActionListener listener : useMojangJava.getActionListeners()) useMojangJava.removeActionListener(listener);
    useMojangJava.setSelected(settings.shouldUseMojangJava());
    useMojangJava.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            changeUseMojangJava();
        }
    });
    for (ActionListener listener : launchToModpacks.getActionListeners()) launchToModpacks.removeActionListener(listener);
    launchToModpacks.setSelected(settings.getLaunchToModpacks());
    launchToModpacks.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            changeLaunchToModpacks();
        }
    });
    for (ActionListener listener : versionSelect.getActionListeners()) versionSelect.removeActionListener(listener);
    versionSelect.removeAllItems();
    versionSelect.addItem(new DefaultVersionItem(javaVersions.getVersion(null, true), resources));
    IJavaVersion best64Bit = javaVersions.getBest64BitVersion();
    if (best64Bit != null)
        versionSelect.addItem(new Best64BitVersionItem(javaVersions.getVersion("64bit", true), resources));
    for (IJavaVersion version : javaVersions.getVersions()) {
        versionSelect.addItem(new JavaVersionItem(version, resources));
    }
    String settingsVersion = settings.getJavaVersion();
    boolean settingsBitness = settings.getJavaBitness();
    if (settingsVersion == null || settingsVersion.isEmpty() || settingsVersion.equals("default"))
        versionSelect.setSelectedIndex(0);
    else if (settingsVersion.equals("64bit"))
        versionSelect.setSelectedIndex(1);
    else {
        for (int i = 2; i < versionSelect.getItemCount(); i++) {
            if (((JavaVersionItem) versionSelect.getItemAt(i)).getVersionNumber().equals(settingsVersion) && ((JavaVersionItem) versionSelect.getItemAt(i)).is64Bit() == settingsBitness) {
                versionSelect.setSelectedIndex(i);
                break;
            }
        }
    }
    versionSelect.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            changeJavaVersion();
        }
    });
    rebuildMemoryList();
    for (ActionListener listener : streamSelect.getActionListeners()) {
        streamSelect.removeActionListener(listener);
    }
    streamSelect.removeAllItems();
    streamSelect.addItem(new StreamItem(resources.getString("launcheroptions.build.stable"), "stable"));
    streamSelect.addItem(new StreamItem(resources.getString("launcheroptions.build.beta"), "beta"));
    streamSelect.setSelectedIndex((settings.getBuildStream().equals("beta")) ? 1 : 0);
    streamSelect.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            changeStream();
        }
    });
    for (ActionListener listener : launchSelect.getActionListeners()) launchSelect.removeActionListener(listener);
    launchSelect.removeAllItems();
    launchSelect.addItem(new OnLaunchItem(resources.getString("launcheroptions.packlaunch.hide"), LaunchAction.HIDE));
    launchSelect.addItem(new OnLaunchItem(resources.getString("launcheroptions.packlaunch.close"), LaunchAction.CLOSE));
    launchSelect.addItem(new OnLaunchItem(resources.getString("launcheroptions.packlaunch.nothing"), LaunchAction.NOTHING));
    switch(settings.getLaunchAction()) {
        case HIDE:
            launchSelect.setSelectedIndex(0);
            break;
        case CLOSE:
            launchSelect.setSelectedIndex(1);
            break;
        case NOTHING:
            launchSelect.setSelectedIndex(2);
            break;
        default:
            launchSelect.setSelectedIndex(0);
    }
    launchSelect.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            changeLaunchAction();
        }
    });
    for (ActionListener listener : langSelect.getActionListeners()) langSelect.removeActionListener(listener);
    langSelect.removeAllItems();
    String defaultLocaleText = resources.getString("launcheroptions.language.default");
    if (!resources.isDefaultLocaleSupported()) {
        defaultLocaleText = defaultLocaleText.concat(" (" + resources.getString("launcheroptions.language.unavailable") + ")");
    }
    langSelect.setRenderer(new LanguageCellRenderer(resources, null, langSelect.getBackground(), langSelect.getForeground()));
    langSelect.addItem(new LanguageItem(ResourceLoader.DEFAULT_LOCALE, defaultLocaleText, resources));
    for (int i = 0; i < LauncherMain.supportedLanguages.length; i++) {
        langSelect.addItem(new LanguageItem(resources.getCodeFromLocale(LauncherMain.supportedLanguages[i]), LauncherMain.supportedLanguages[i].getDisplayName(LauncherMain.supportedLanguages[i]), resources.getVariant(LauncherMain.supportedLanguages[i])));
    }
    if (!settings.getLanguageCode().equalsIgnoreCase(ResourceLoader.DEFAULT_LOCALE)) {
        Locale loc = resources.getLocaleFromCode(settings.getLanguageCode());
        for (int i = 0; i < LauncherMain.supportedLanguages.length; i++) {
            if (loc.equals(LauncherMain.supportedLanguages[i])) {
                langSelect.setSelectedIndex(i + 1);
                break;
            }
        }
    }
    langSelect.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            changeLanguage();
        }
    });
    widthInput.getDocument().removeDocumentListener(dimensionListener);
    heightInput.getDocument().removeDocumentListener(dimensionListener);
    int width = settings.getCustomWidth();
    int height = settings.getCustomHeight();
    width = (width < 1) ? 800 : width;
    height = (height < 1) ? 600 : height;
    widthInput.setText(Integer.toString(width));
    heightInput.setText(Integer.toString(height));
    widthInput.getDocument().addDocumentListener(dimensionListener);
    heightInput.getDocument().addDocumentListener(dimensionListener);
    for (ActionListener listener : windowSelect.getActionListeners()) {
        windowSelect.removeActionListener(listener);
    }
    windowSelect.removeAllItems();
    windowSelect.addItem(resources.getString("launcheroptions.video.windowSize.default"));
    windowSelect.addItem(resources.getString("launcheroptions.video.windowSize.fullscreen"));
    windowSelect.addItem(resources.getString("launcheroptions.video.windowSize.custom"));
    switch(settings.getLaunchWindowType()) {
        case DEFAULT:
            windowSelect.setSelectedIndex(0);
            break;
        case FULLSCREEN:
            windowSelect.setSelectedIndex(1);
            break;
        case CUSTOM:
            windowSelect.setSelectedIndex(2);
            break;
    }
    windowSelect.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            changeWindowType();
        }
    });
    updateDimensionsEnabled();
    for (ActionListener listener : useStencil.getActionListeners()) {
        useStencil.removeActionListener(listener);
    }
    useStencil.removeAllItems();
    useStencil.addItem(resources.getString("launcheroptions.video.stencil.enabled"));
    useStencil.addItem(resources.getString("launcheroptions.video.stencil.disabled"));
    if (settings.shouldUseStencilBuffer())
        useStencil.setSelectedIndex(0);
    else
        useStencil.setSelectedIndex(1);
    useStencil.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            changeEnableStencil();
        }
    });
}
Also used : Locale(java.util.Locale) StreamItem(net.technicpack.launcher.ui.listitems.StreamItem) ActionEvent(java.awt.event.ActionEvent) DefaultVersionItem(net.technicpack.ui.listitems.javaversion.DefaultVersionItem) Best64BitVersionItem(net.technicpack.ui.listitems.javaversion.Best64BitVersionItem) JavaVersionItem(net.technicpack.ui.listitems.javaversion.JavaVersionItem) IJavaVersion(net.technicpack.launchercore.launch.java.IJavaVersion) OnLaunchItem(net.technicpack.launcher.ui.listitems.OnLaunchItem) LanguageCellRenderer(net.technicpack.ui.controls.lang.LanguageCellRenderer) ActionListener(java.awt.event.ActionListener) LanguageItem(net.technicpack.ui.listitems.LanguageItem)

Example 4 with IJavaVersion

use of net.technicpack.launchercore.launch.java.IJavaVersion in project LauncherV3 by TechnicPack.

the class RunData method getValidJavaVersion.

public IJavaVersion getValidJavaVersion(JavaVersionRepository repository) {
    boolean requires64Bit = getMemory() > Memory.MAX_32_BIT_MEMORY;
    IJavaVersion best64Bit = repository.getBest64BitVersion();
    if (best64Bit != null && isJavaValid(best64Bit.getVersionNumber()))
        return best64Bit;
    else if (best64Bit == null && requires64Bit)
        return null;
    IJavaVersion bestVersion = null;
    for (IJavaVersion version : repository.getVersions()) {
        if (isJavaValid(version.getVersionNumber()) && (!requires64Bit || version.is64Bit()))
            bestVersion = version;
    }
    return bestVersion;
}
Also used : IJavaVersion(net.technicpack.launchercore.launch.java.IJavaVersion)

Aggregations

IJavaVersion (net.technicpack.launchercore.launch.java.IJavaVersion)4 JavaVersionItem (net.technicpack.ui.listitems.javaversion.JavaVersionItem)2 ActionEvent (java.awt.event.ActionEvent)1 ActionListener (java.awt.event.ActionListener)1 File (java.io.File)1 IOException (java.io.IOException)1 Locale (java.util.Locale)1 ZipException (java.util.zip.ZipException)1 FileFilter (javax.swing.filechooser.FileFilter)1 FixRunDataDialog (net.technicpack.launcher.ui.components.FixRunDataDialog)1 OnLaunchItem (net.technicpack.launcher.ui.listitems.OnLaunchItem)1 StreamItem (net.technicpack.launcher.ui.listitems.StreamItem)1 BuildInaccessibleException (net.technicpack.launchercore.exception.BuildInaccessibleException)1 CacheDeleteException (net.technicpack.launchercore.exception.CacheDeleteException)1 DownloadException (net.technicpack.launchercore.exception.DownloadException)1 PackNotAvailableOfflineException (net.technicpack.launchercore.exception.PackNotAvailableOfflineException)1 InstallTasksQueue (net.technicpack.launchercore.install.InstallTasksQueue)1 JavaVersionRepository (net.technicpack.launchercore.launch.java.JavaVersionRepository)1 FileBasedJavaVersion (net.technicpack.launchercore.launch.java.version.FileBasedJavaVersion)1 RunData (net.technicpack.launchercore.modpacks.RunData)1