From a34875e8042e5cc5d8d0550e0cb4a7ab9b152b4c Mon Sep 17 00:00:00 2001 From: huangyuhui Date: Sun, 26 Feb 2017 21:19:21 +0800 Subject: [PATCH] New launcher visibility mode: hide and reopen later --- .../jackhuang/hmcl/ui/GameDownloadPanel.java | 2 +- .../jackhuang/hmcl/ui/GameSettingsPanel.form | 2 +- .../jackhuang/hmcl/ui/GameSettingsPanel.java | 4 ++-- .../hmcl/ui/LauncherSettingsPanel.form | 9 ++++--- .../hmcl/ui/LauncherSettingsPanel.java | 14 ++++++----- .../jackhuang/hmcl/ui/LaunchingUIDaemon.java | 24 ++++++++++++++++--- .../java/org/jackhuang/hmcl/ui/LogWindow.java | 1 - .../hmcl/util/LauncherVisibility.java | 6 ++++- .../hmcl/api/event/launch/LaunchingState.java | 1 + .../download/MinecraftRemoteVersions.java | 10 ++++---- .../hmcl/util/AbstractSwingWorker.java | 2 +- .../hmcl/util/net/FileDownloadTask.java | 2 +- .../hmcl/util/sys/ProcessMonitor.java | 18 ++++++++++---- .../hmcl/util/sys/ProcessThread.java | 13 +++++----- .../hmcl/util/task/DeleteFileTask.java | 2 +- .../jackhuang/hmcl/util/task/DoubleTask.java | 2 +- .../org/jackhuang/hmcl/util/task/Task.java | 6 ++--- .../org/jackhuang/hmcl/lang/I18N.lang | 2 ++ .../org/jackhuang/hmcl/lang/I18N.properties | 2 ++ .../org/jackhuang/hmcl/lang/I18N_vi.lang | 2 ++ .../jackhuang/hmcl/lang/I18N_vi.properties | 2 ++ .../org/jackhuang/hmcl/lang/I18N_zh.lang | 2 ++ .../jackhuang/hmcl/lang/I18N_zh.properties | 2 ++ .../org/jackhuang/hmcl/lang/I18N_zh_CN.lang | 2 ++ .../jackhuang/hmcl/lang/I18N_zh_CN.properties | 2 ++ 25 files changed, 93 insertions(+), 41 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameDownloadPanel.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameDownloadPanel.java index fb35ba573..00c3d31df 100755 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameDownloadPanel.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameDownloadPanel.java @@ -117,7 +117,7 @@ public class GameDownloadPanel extends Page { lstDownloads.requestFocus(); if (model.getRowCount() > 0) model.removeRow(0); - })).execute(); + })).runAsync(); } void downloadMinecraft() { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameSettingsPanel.form b/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameSettingsPanel.form index 2dd45d4af..ab998cefd 100755 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameSettingsPanel.form +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameSettingsPanel.form @@ -297,7 +297,7 @@ - + diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameSettingsPanel.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameSettingsPanel.java index cf1c6c7cc..867275d3a 100755 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameSettingsPanel.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameSettingsPanel.java @@ -405,7 +405,7 @@ public final class GameSettingsPanel extends RepaintPage implements DropTargetLi } }); - cboLauncherVisibility.setModel(new javax.swing.DefaultComboBoxModel(new String[] { C.i18n("advancedsettings.launcher_visibility.close"), C.i18n("advancedsettings.launcher_visibility.hide"), C.i18n("advancedsettings.launcher_visibility.keep") })); + cboLauncherVisibility.setModel(new javax.swing.DefaultComboBoxModel(new String[] { C.i18n("advancedsettings.launcher_visibility.close"), C.i18n("advancedsettings.launcher_visibility.hide"), C.i18n("advancedsettings.launcher_visibility.keep"),C.i18n("advancedsettings.launcher_visibility.hide_reopen") })); cboLauncherVisibility.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { cboLauncherVisibilityItemStateChanged(evt); @@ -950,7 +950,7 @@ public final class GameSettingsPanel extends RepaintPage implements DropTargetLi .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(tabVersionEdit, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 766, Short.MAX_VALUE) + .addComponent(tabVersionEdit, javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE) .addComponent(btnMakeLaunchScript) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LauncherSettingsPanel.form b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LauncherSettingsPanel.form index dcb9b8076..3bec9d2fc 100755 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LauncherSettingsPanel.form +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LauncherSettingsPanel.form @@ -140,9 +140,12 @@ - - - + + + + + + diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LauncherSettingsPanel.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LauncherSettingsPanel.java index 53a1c42a4..cad2a5c9a 100755 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LauncherSettingsPanel.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LauncherSettingsPanel.java @@ -308,12 +308,12 @@ public class LauncherSettingsPanel extends RepaintPage { .addComponent(chkEnableBlur) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(chkEnableAnimation)) - .addComponent(lblAbout) + .addComponent(lblAbout, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(layout.createSequentialGroup() .addComponent(btnCheckUpdate) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btnMCBBS)) - .addComponent(lblModpack) + .addComponent(lblModpack, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lblRestart)) .addGap(0, 0, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() @@ -382,15 +382,17 @@ public class LauncherSettingsPanel extends RepaintPage { .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(chkDecorated) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(btnCheckUpdate, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(btnMCBBS, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addComponent(btnMCBBS, javax.swing.GroupLayout.DEFAULT_SIZE, 26, Short.MAX_VALUE) + .addGap(1, 1, 1))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(lblRestart) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(lblModpack) + .addComponent(lblModpack, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(lblAbout) + .addComponent(lblAbout, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) ); }// //GEN-END:initComponents diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LaunchingUIDaemon.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LaunchingUIDaemon.java index 78ae7d26d..ac9456cdc 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LaunchingUIDaemon.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LaunchingUIDaemon.java @@ -38,6 +38,8 @@ import org.jackhuang.hmcl.util.C; import org.jackhuang.hmcl.util.MessageBox; import org.jackhuang.hmcl.api.func.Consumer; import org.jackhuang.hmcl.api.HMCLog; +import org.jackhuang.hmcl.api.event.SimpleEvent; +import org.jackhuang.hmcl.api.event.launch.LaunchingState; import org.jackhuang.hmcl.util.DefaultPlugin; import org.jackhuang.hmcl.util.sys.FileUtils; import org.jackhuang.hmcl.util.sys.ProcessMonitor; @@ -61,11 +63,12 @@ public class LaunchingUIDaemon { else { if (LogWindow.INSTANCE.isVisible()) LogWindow.INSTANCE.setExit(() -> true); - MainFrame.INSTANCE.dispose(); + HMCLApi.EVENT_BUS.fireChannel(new LaunchingStateChangedEvent(obj, LaunchingState.WaitingForGameLaunching)); } // We promise that JavaProcessMonitor.tag is LauncherVisibility // See events below. ProcessMonitor monitor = new ProcessMonitor(p.getValue()); + monitor.registerPrintlnEvent(PRINTLN); monitor.setTag(tag.launcherVisibility); monitor.start(); }); @@ -103,7 +106,7 @@ public class LaunchingUIDaemon { noExitThisTime = true; }); } - + boolean noExitThisTime = false; void runGame(Profile profile) { @@ -131,6 +134,15 @@ public class LaunchingUIDaemon { }, MainFrame.INSTANCE::failed, Settings.getInstance().getAuthenticator().getPassword()); } + private static final Consumer> PRINTLN = t -> { + LauncherVisibility l = ((LauncherVisibility) ((ProcessMonitor) t.getSource()).getTag()); + if (t.getValue().contains("LWJGL Version: ") && l != LauncherVisibility.KEEP) + if (l != LauncherVisibility.HIDE_AND_REOPEN) + MainFrame.INSTANCE.dispose(); + else + MainFrame.INSTANCE.setVisible(false); + }; + private static final Consumer LAUNCHING_STATE_CHANGED = t -> { String message = null; switch (t.getValue()) { @@ -146,6 +158,9 @@ public class LaunchingUIDaemon { case DecompressingNatives: message = "launch.state.decompressing_natives"; break; + case WaitingForGameLaunching: + message = "launch.state.waiting_launching"; + break; case Done: return; } @@ -162,7 +177,10 @@ public class LaunchingUIDaemon { }; private void checkExit(LauncherVisibility v) { - if (v != LauncherVisibility.KEEP && !LogWindow.INSTANCE.isVisible() && !noExitThisTime) { + if (v == LauncherVisibility.HIDE_AND_REOPEN) { + HMCLog.log("Launcher will not exit now."); + MainFrame.INSTANCE.setVisible(true); + } else if (v != LauncherVisibility.KEEP && !LogWindow.INSTANCE.isVisible() && !noExitThisTime) { HMCLog.log("Launcher will exit now."); System.exit(0); } else { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java index 6a6b9bdee..593ac9f3e 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java @@ -18,7 +18,6 @@ package org.jackhuang.hmcl.ui; import java.io.PrintStream; -import javax.swing.JScrollBar; import javax.swing.SwingUtilities; import javax.swing.text.Document; import javax.swing.text.SimpleAttributeSet; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/LauncherVisibility.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/LauncherVisibility.java index 136fceee3..0ca1cfea9 100755 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/LauncherVisibility.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/LauncherVisibility.java @@ -36,5 +36,9 @@ public enum LauncherVisibility { /** * Keep the launcher visible even if the game launched successfully. */ - KEEP; + KEEP, + /** + * Hide the launcher and reopen it when game closes. + */ + HIDE_AND_REOPEN } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hmcl/api/event/launch/LaunchingState.java b/HMCLAPI/src/main/java/org/jackhuang/hmcl/api/event/launch/LaunchingState.java index 9d2759e97..416cddd2d 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hmcl/api/event/launch/LaunchingState.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hmcl/api/event/launch/LaunchingState.java @@ -27,5 +27,6 @@ public enum LaunchingState { GeneratingLaunchingCodes, DownloadingLibraries, DecompressingNatives, + WaitingForGameLaunching, Done } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/core/download/MinecraftRemoteVersions.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/core/download/MinecraftRemoteVersions.java index 3cb999830..34135b71c 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/core/download/MinecraftRemoteVersions.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/core/download/MinecraftRemoteVersions.java @@ -21,7 +21,7 @@ import com.google.gson.annotations.SerializedName; import java.util.ArrayList; import org.jackhuang.hmcl.util.C; import org.jackhuang.hmcl.util.net.NetUtils; -import org.jackhuang.hmcl.util.AbstractSwingWorker; +import org.jackhuang.hmcl.util.task.TaskWorker; /** * @@ -40,12 +40,12 @@ public class MinecraftRemoteVersions { public static RemoteVersionsTask getRemoteVersions(DownloadType type) { return new RemoteVersionsTask(type) { @Override - public void work() throws Exception { + public void executeTask(boolean b) throws Exception { synchronized (INSTANCE_LOCK) { if (INSTANCE != null) send(INSTANCE.versions.toArray(new MinecraftRemoteVersion[INSTANCE.versions.size()])); else - super.work(); + super.executeTask(b); } } }; @@ -55,7 +55,7 @@ public class MinecraftRemoteVersions { return new RemoteVersionsTask(type); } - public static class RemoteVersionsTask extends AbstractSwingWorker { + public static class RemoteVersionsTask extends TaskWorker { DownloadType type; @@ -64,7 +64,7 @@ public class MinecraftRemoteVersions { } @Override - public void work() throws Exception { + public void executeTask(boolean b) throws Exception { MinecraftRemoteVersions r = C.GSON.fromJson(NetUtils.get(type.getProvider().getVersionsListDownloadURL()), MinecraftRemoteVersions.class); if (r != null && r.versions != null) { INSTANCE = r; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/AbstractSwingWorker.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/AbstractSwingWorker.java index f3a12082b..fbabebe59 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/AbstractSwingWorker.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/AbstractSwingWorker.java @@ -66,7 +66,7 @@ public abstract class AbstractSwingWorker extends SwingWorker { final List lastChunks = new ArrayList<>(); - protected void send(T... t) { + public void send(T... t) { lastChunks.addAll(Arrays.asList(t)); publish(t); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/net/FileDownloadTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/net/FileDownloadTask.java index 1c39734ba..a88e90f67 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/net/FileDownloadTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/net/FileDownloadTask.java @@ -98,7 +98,7 @@ public class FileDownloadTask extends Task implements PreviousResult, Prev // Download file. @Override - public void executeTask(boolean areDependTasksSucceeded) throws Throwable { + public void executeTask(boolean areDependTasksSucceeded) throws Exception { for (PreviousResult p : al) this.url = IOUtils.parseURL(p.getResult()); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/sys/ProcessMonitor.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/sys/ProcessMonitor.java index 55626d4b4..06bc3245f 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/sys/ProcessMonitor.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/sys/ProcessMonitor.java @@ -28,6 +28,8 @@ import org.jackhuang.hmcl.util.StrUtils; import org.jackhuang.hmcl.api.HMCLog; import org.jackhuang.hmcl.util.log.Level; import org.jackhuang.hmcl.api.IProcess; +import org.jackhuang.hmcl.api.event.SimpleEvent; +import org.jackhuang.hmcl.api.func.Consumer; /** * @@ -42,6 +44,11 @@ public class ProcessMonitor { public ProcessMonitor(IProcess p) { this.p = p; + inputThread = new ProcessThread(this, false); + errorThread = new ProcessThread(this, true); + inputThread.stopEvent.register(this::threadStopped); + inputThread.stopEvent.register(event -> processThreadStopped((ProcessThread) event.getSource())); + errorThread.stopEvent.register(this::threadStopped); } public IProcess getProcess() { @@ -57,16 +64,17 @@ public class ProcessMonitor { public void setTag(Object tag) { this.tag = tag; } + + public void registerPrintlnEvent(Consumer> c) { + inputThread.printlnEvent.register(c); + errorThread.printlnEvent.register(c); + } public void start() { MONITORS.add(this); HMCLApi.EVENT_BUS.fireChannel(new JavaProcessStartingEvent(this, p)); - inputThread = new ProcessThread(p, false); - errorThread = new ProcessThread(p, true); - inputThread.stopEvent.register(this::threadStopped); - inputThread.stopEvent.register(event -> processThreadStopped((ProcessThread) event.getSource())); - errorThread.stopEvent.register(this::threadStopped); inputThread.start(); + errorThread.start(); } private void threadStopped() { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/sys/ProcessThread.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/sys/ProcessThread.java index 04df2767a..6595405c1 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/sys/ProcessThread.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/sys/ProcessThread.java @@ -33,25 +33,26 @@ import org.jackhuang.hmcl.api.IProcess; */ public class ProcessThread extends Thread { - IProcess p; + ProcessMonitor monitor; boolean readError; public final EventHandler> printlnEvent = new EventHandler<>(); public final EventHandler> stopEvent = new EventHandler<>(); - public ProcessThread(IProcess process, boolean readError) { - p = process; + public ProcessThread(ProcessMonitor monitor, boolean readError) { + this.monitor = monitor; this.readError = readError; setDaemon(readError); } public IProcess getProcess() { - return p; + return monitor.getProcess(); } @Override public void run() { setName("ProcessMonitor"); BufferedReader br = null; + IProcess p = monitor.getProcess(); try { InputStream in = readError ? p.getRawProcess().getErrorStream() : p.getRawProcess().getInputStream(); br = new BufferedReader(new InputStreamReader(in, Charsets.toCharset())); @@ -59,12 +60,12 @@ public class ProcessThread extends Thread { String line; while (p.isRunning()) while ((line = br.readLine()) != null) { - printlnEvent.fire(new SimpleEvent<>(this, line)); + printlnEvent.fire(new SimpleEvent<>(monitor, line)); System.out.println("MC: " + line); p.getStdOutLines().add(line); } while ((line = br.readLine()) != null) { - printlnEvent.fire(new SimpleEvent<>(this, line)); + printlnEvent.fire(new SimpleEvent<>(monitor, line)); System.out.println("MC: " + line); p.getStdOutLines().add(line); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/task/DeleteFileTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/task/DeleteFileTask.java index 89085f263..256325c02 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/task/DeleteFileTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/task/DeleteFileTask.java @@ -33,7 +33,7 @@ public class DeleteFileTask extends Task { } @Override - public void executeTask(boolean areDependTasksSucceeded) throws Throwable { + public void executeTask(boolean areDependTasksSucceeded) throws IOException { if (!f.delete()) throw new IOException("Failed to delete" + f); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/task/DoubleTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/task/DoubleTask.java index ba4bed374..da75f1dce 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/task/DoubleTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/task/DoubleTask.java @@ -50,7 +50,7 @@ public class DoubleTask extends TaskInfo { } @Override - public void executeTask(boolean areDependTasksSucceeded) throws Throwable { + public void executeTask(boolean areDependTasksSucceeded) throws IllegalStateException { if (!areDependTasksSucceeded) throw new IllegalStateException("Depend tasks failed."); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/task/Task.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/task/Task.java index 0cf427d75..67650dc3e 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/task/Task.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/task/Task.java @@ -31,7 +31,7 @@ public abstract class Task { * @param areDependTasksSucceeded Would be true if all of tasks which this task depends on have succeed. * @throws java.lang.Throwable If a task throws an exception, this task will be marked as `failed`. */ - public abstract void executeTask(boolean areDependTasksSucceeded) throws Throwable; + public abstract void executeTask(boolean areDependTasksSucceeded) throws Exception; /** * if this func returns false, TaskList will force abort the thread. run in @@ -56,10 +56,10 @@ public abstract class Task { return hidden; } - public Throwable getFailReason() { + public Exception getFailReason() { return failReason; } - protected Throwable failReason = null; + protected Exception failReason = null; /** * This method can be only invoked by TaskList. diff --git a/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N.lang b/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N.lang index bc51336f0..7309f2858 100644 --- a/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N.lang +++ b/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N.lang @@ -33,6 +33,7 @@ launch.state.logging_in=Logging In launch.state.generating_launching_codes=Generating Launching Codes launch.state.downloading_libraries=Downloading dependencies launch.state.decompressing_natives=Decompressing natives +launch.state.waiting_launching=Waiting for game launching install.no_version=The version is not found. install.no_version_if_intall=The required version is not found, do you wish to install the version automatically? @@ -288,6 +289,7 @@ advancedsettings.Minecraft_arguments=Minecraft Arguments advancedsettings.launcher_visibility.close=Close the launcher when the game launched. advancedsettings.launcher_visibility.hide=Hide the launcher when the game launched. advancedsettings.launcher_visibility.keep=Keep the launcher visible. +advancedsettings.launcher_visibility.hide_reopen=Hide the launcher and re-open when game closes. advancedsettings.game_dir.default=Default (.minecraft/) advancedsettings.game_dir.independent=Independent (.minecraft/versions//, except assets,libraries) advancedsettings.no_jvm_args=No Default JVM Args diff --git a/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N.properties b/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N.properties index 4ffbd0e5d..f9f247003 100644 --- a/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N.properties +++ b/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N.properties @@ -33,6 +33,7 @@ launch.state.logging_in=Logging In launch.state.generating_launching_codes=Generating Launching Codes launch.state.downloading_libraries=Downloading dependencies launch.state.decompressing_natives=Decompressing natives +launch.state.waiting_launching=Waiting for game launching install.no_version=The version is not found. install.no_version_if_intall=The required version is not found, do you wish to install the version automatically? @@ -288,6 +289,7 @@ advancedsettings.Minecraft_arguments=Minecraft Arguments advancedsettings.launcher_visibility.close=Close the launcher when the game launched. advancedsettings.launcher_visibility.hide=Hide the launcher when the game launched. advancedsettings.launcher_visibility.keep=Keep the launcher visible. +advancedsettings.launcher_visibility.hide_reopen=Hide the launcher and re-open when game closes. advancedsettings.game_dir.default=Default (.minecraft/) advancedsettings.game_dir.independent=Independent (.minecraft/versions//, except assets,libraries) advancedsettings.no_jvm_args=No Default JVM Args diff --git a/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_vi.lang b/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_vi.lang index 90d269aba..6fecc6b5f 100644 --- a/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_vi.lang +++ b/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_vi.lang @@ -33,6 +33,7 @@ launch.state.logging_in=Đang đăng nhập... launch.state.generating_launching_codes=Đang tạo code chạy minecraft launch.state.downloading_libraries=Downloading... launch.state.decompressing_natives=Giải nén... +launch.state.waiting_launching=Waiting for game launching install.no_version=Không tìm thấy phiên bản minecraft. install.no_version_if_intall=Phiên bản cần thiết không thấy, có nên cài đặt phiên bản tự động không? @@ -286,6 +287,7 @@ advancedsettings.Minecraft_arguments=Arguments của minecraft advancedsettings.launcher_visibility.close=Đóng launcher sau khi minecraft được mở. advancedsettings.launcher_visibility.hide=Ẩn launcher sau khi minecraft được mở. advancedsettings.launcher_visibility.keep=Để cho launcher hiển thị. +advancedsettings.launcher_visibility.hide_reopen=Hide the launcher and re-open when game closes. advancedsettings.game_dir.default=Mặc định (.minecraft/) advancedsettings.game_dir.independent=Independent (.minecraft/versions//, trừ thư mục assets,libraries) advancedsettings.no_jvm_args=Không có arguments mặc định cho máy ảo java diff --git a/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_vi.properties b/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_vi.properties index cc3fd5f4b..6d9bdbd03 100644 --- a/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_vi.properties +++ b/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_vi.properties @@ -33,6 +33,7 @@ launch.state.logging_in=\u0110ang \u0111\u0103ng nh\u1eadp... launch.state.generating_launching_codes=\u0110ang t\u1ea1o code ch\u1ea1y minecraft launch.state.downloading_libraries=Downloading... launch.state.decompressing_natives=Gi\u1ea3i n\u00e9n... +launch.state.waiting_launching=Waiting for game launching install.no_version=Kh\u00f4ng t\u00ecm th\u1ea5y phi\u00ean b\u1ea3n minecraft. install.no_version_if_intall=Phi\u00ean b\u1ea3n c\u1ea7n thi\u1ebft kh\u00f4ng th\u1ea5y, c\u00f3 n\u00ean c\u00e0i \u0111\u1eb7t phi\u00ean b\u1ea3n t\u1ef1 \u0111\u1ed9ng kh\u00f4ng? @@ -286,6 +287,7 @@ advancedsettings.Minecraft_arguments=Arguments c\u1ee7a minecraft advancedsettings.launcher_visibility.close=\u0110\u00f3ng launcher sau khi minecraft \u0111\u01b0\u1ee3c m\u1edf. advancedsettings.launcher_visibility.hide=\u1ea8n launcher sau khi minecraft \u0111\u01b0\u1ee3c m\u1edf. advancedsettings.launcher_visibility.keep=\u0110\u1ec3 cho launcher hi\u1ec3n th\u1ecb. +advancedsettings.launcher_visibility.hide_reopen=Hide the launcher and re-open when game closes. advancedsettings.game_dir.default=M\u1eb7c \u0111\u1ecbnh (.minecraft/) advancedsettings.game_dir.independent=Independent (.minecraft/versions//, tr\u1eeb th\u01b0 m\u1ee5c assets,libraries) advancedsettings.no_jvm_args=Kh\u00f4ng c\u00f3 arguments m\u1eb7c \u0111\u1ecbnh cho m\u00e1y \u1ea3o java diff --git a/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_zh.lang b/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_zh.lang index dbd0292ba..d8d767526 100644 --- a/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_zh.lang +++ b/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_zh.lang @@ -33,6 +33,7 @@ launch.state.logging_in=登錄中 launch.state.generating_launching_codes=正在生成啟動代碼 launch.state.downloading_libraries=正在下載必要文件 launch.state.decompressing_natives=正在釋放執行庫 +launch.state.waiting_launching=等待遊戲啟動 install.no_version=未找到要安裝的對應MC版本 install.no_version_if_intall=未找到要安裝的對應MC版本,是否自動安裝需要的MC版本? @@ -288,6 +289,7 @@ advancedsettings.Minecraft_arguments=Minecraft額外參數(不必填寫) advancedsettings.launcher_visibility.close=遊戲啟動後結束啟動器 advancedsettings.launcher_visibility.hide=遊戲啟動後隱藏啟動器 advancedsettings.launcher_visibility.keep=保持啟動器可見 +advancedsettings.launcher_visibility.hide_reopen=隱藏啟動器並在遊戲結束後重新打開 advancedsettings.game_dir.default=預設(.minecraft/) advancedsettings.game_dir.independent=各版本獨立(.minecraft/versions/<版本名>/,除assets,libraries) advancedsettings.no_jvm_args=不添加預設的JVM參數(使用Java9時必勾) diff --git a/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_zh.properties b/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_zh.properties index 79c868943..e38e9c44b 100644 --- a/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_zh.properties +++ b/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_zh.properties @@ -33,6 +33,7 @@ launch.state.logging_in=\u767b\u9304\u4e2d launch.state.generating_launching_codes=\u6b63\u5728\u751f\u6210\u555f\u52d5\u4ee3\u78bc launch.state.downloading_libraries=\u6b63\u5728\u4e0b\u8f09\u5fc5\u8981\u6587\u4ef6 launch.state.decompressing_natives=\u6b63\u5728\u91cb\u653e\u57f7\u884c\u5eab +launch.state.waiting_launching=\u7b49\u5f85\u904a\u6232\u555f\u52d5 install.no_version=\u672a\u627e\u5230\u8981\u5b89\u88dd\u7684\u5c0d\u61c9MC\u7248\u672c install.no_version_if_intall=\u672a\u627e\u5230\u8981\u5b89\u88dd\u7684\u5c0d\u61c9MC\u7248\u672c\uff0c\u662f\u5426\u81ea\u52d5\u5b89\u88dd\u9700\u8981\u7684MC\u7248\u672c\uff1f @@ -288,6 +289,7 @@ advancedsettings.Minecraft_arguments=Minecraft\u984d\u5916\u53c3\u6578(\u4e0d\u5 advancedsettings.launcher_visibility.close=\u904a\u6232\u555f\u52d5\u5f8c\u7d50\u675f\u555f\u52d5\u5668 advancedsettings.launcher_visibility.hide=\u904a\u6232\u555f\u52d5\u5f8c\u96b1\u85cf\u555f\u52d5\u5668 advancedsettings.launcher_visibility.keep=\u4fdd\u6301\u555f\u52d5\u5668\u53ef\u898b +advancedsettings.launcher_visibility.hide_reopen=\u96b1\u85cf\u555f\u52d5\u5668\u4e26\u5728\u904a\u6232\u7d50\u675f\u5f8c\u91cd\u65b0\u6253\u958b advancedsettings.game_dir.default=\u9810\u8a2d(.minecraft/) advancedsettings.game_dir.independent=\u5404\u7248\u672c\u7368\u7acb(.minecraft/versions/<\u7248\u672c\u540d>/,\u9664assets,libraries) advancedsettings.no_jvm_args=\u4e0d\u6dfb\u52a0\u9810\u8a2d\u7684JVM\u53c3\u6578(\u4f7f\u7528Java9\u6642\u5fc5\u52fe) diff --git a/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_zh_CN.lang b/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_zh_CN.lang index e0a290202..b1b014059 100644 --- a/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_zh_CN.lang +++ b/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_zh_CN.lang @@ -33,6 +33,7 @@ launch.state.logging_in=登录中 launch.state.generating_launching_codes=正在生成启动代码 launch.state.downloading_libraries=正在下载必要文件 launch.state.decompressing_natives=正在释放本地文件 +launch.state.waiting_launching=等待游戏启动 install.no_version=未找到要安装的对应MC版本 install.no_version_if_intall=未找到要安装的对应MC版本,是否自动安装需要的MC版本? @@ -288,6 +289,7 @@ advancedsettings.Minecraft_arguments=Minecraft额外参数(不必填写) advancedsettings.launcher_visibility.close=游戏启动后结束启动器 advancedsettings.launcher_visibility.hide=游戏启动后隐藏启动器 advancedsettings.launcher_visibility.keep=保持启动器可见 +advancedsettings.launcher_visibility.hide_reopen=隐藏启动器并在游戏结束后重新打开 advancedsettings.game_dir.default=默认(.minecraft/) advancedsettings.game_dir.independent=各版本独立(.minecraft/versions/<版本名>/,除assets,libraries) advancedsettings.no_jvm_args=不添加默认的JVM参数(使用Java9时必勾) diff --git a/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_zh_CN.properties b/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_zh_CN.properties index 0912bd1df..bbdb2adf3 100644 --- a/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_zh_CN.properties +++ b/HMCLCore/src/main/resources/org/jackhuang/hmcl/lang/I18N_zh_CN.properties @@ -33,6 +33,7 @@ launch.state.logging_in=\u767b\u5f55\u4e2d launch.state.generating_launching_codes=\u6b63\u5728\u751f\u6210\u542f\u52a8\u4ee3\u7801 launch.state.downloading_libraries=\u6b63\u5728\u4e0b\u8f7d\u5fc5\u8981\u6587\u4ef6 launch.state.decompressing_natives=\u6b63\u5728\u91ca\u653e\u672c\u5730\u6587\u4ef6 +launch.state.waiting_launching=\u7b49\u5f85\u6e38\u620f\u542f\u52a8 install.no_version=\u672a\u627e\u5230\u8981\u5b89\u88c5\u7684\u5bf9\u5e94MC\u7248\u672c install.no_version_if_intall=\u672a\u627e\u5230\u8981\u5b89\u88c5\u7684\u5bf9\u5e94MC\u7248\u672c\uff0c\u662f\u5426\u81ea\u52a8\u5b89\u88c5\u9700\u8981\u7684MC\u7248\u672c\uff1f @@ -288,6 +289,7 @@ advancedsettings.Minecraft_arguments=Minecraft\u989d\u5916\u53c2\u6570(\u4e0d\u5 advancedsettings.launcher_visibility.close=\u6e38\u620f\u542f\u52a8\u540e\u7ed3\u675f\u542f\u52a8\u5668 advancedsettings.launcher_visibility.hide=\u6e38\u620f\u542f\u52a8\u540e\u9690\u85cf\u542f\u52a8\u5668 advancedsettings.launcher_visibility.keep=\u4fdd\u6301\u542f\u52a8\u5668\u53ef\u89c1 +advancedsettings.launcher_visibility.hide_reopen=\u9690\u85cf\u542f\u52a8\u5668\u5e76\u5728\u6e38\u620f\u7ed3\u675f\u540e\u91cd\u65b0\u6253\u5f00 advancedsettings.game_dir.default=\u9ed8\u8ba4(.minecraft/) advancedsettings.game_dir.independent=\u5404\u7248\u672c\u72ec\u7acb(.minecraft/versions/<\u7248\u672c\u540d>/,\u9664assets,libraries) advancedsettings.no_jvm_args=\u4e0d\u6dfb\u52a0\u9ed8\u8ba4\u7684JVM\u53c2\u6570(\u4f7f\u7528Java9\u65f6\u5fc5\u52fe)