diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java new file mode 100644 index 000000000..a3d064976 --- /dev/null +++ b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java @@ -0,0 +1,144 @@ +/* + * Hello Minecraft! Launcher. + * Copyright (C) 2017 huangyuhui + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see {http://www.gnu.org/licenses/}. + */ +package org.jackhuang.hmcl; + +import com.jfoenix.concurrency.JFXUtilities; +import javafx.application.Application; +import javafx.application.Platform; +import javafx.stage.Stage; +import org.jackhuang.hmcl.setting.Settings; +import org.jackhuang.hmcl.task.Schedulers; +import org.jackhuang.hmcl.task.Task; +import org.jackhuang.hmcl.ui.Controllers; +import org.jackhuang.hmcl.upgrade.AppDataUpgrader; +import org.jackhuang.hmcl.upgrade.IUpgrader; +import org.jackhuang.hmcl.upgrade.UpdateChecker; +import org.jackhuang.hmcl.util.*; + +import java.io.File; +import java.util.Arrays; +import java.util.ResourceBundle; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; + +public final class Launcher extends Application { + + @Override + public void start(Stage primaryStage) { + Thread.currentThread().setUncaughtExceptionHandler(CRASH_REPORTER); + + try { + // When launcher visibility is set to "hide and reopen" without Platform.implicitExit = false, + // Stage.show() cannot work again because JavaFX Toolkit have already shut down. + Platform.setImplicitExit(false); + Controllers.initialize(primaryStage); + primaryStage.setResizable(false); + primaryStage.setScene(Controllers.getScene()); + primaryStage.show(); + } catch (Throwable e) { + CRASH_REPORTER.uncaughtException(Thread.currentThread(), e); + } + } + + public static void main(String[] args) { + Thread.setDefaultUncaughtExceptionHandler(CRASH_REPORTER); + + try { + // NetworkUtils.setUserAgentSupplier(() -> "Hello Minecraft! Launcher"); + Constants.UI_THREAD_SCHEDULER = Constants.JAVAFX_UI_THREAD_SCHEDULER; + UPGRADER.parseArguments(VersionNumber.asVersion(VERSION), Arrays.asList(args)); + + Logging.LOG.info("*** " + TITLE + " ***"); + + UPDATE_CHECKER.process(false) + .then(Task.of(Schedulers.javafx(), () -> { + if (UPDATE_CHECKER.isOutOfDate()) + Controllers.showUpdate(); + })) + .start(); + + launch(args); + } catch (Throwable e) { // Fucking JavaFX will suppress the exception and will break our crash reporter. + CRASH_REPORTER.uncaughtException(Thread.currentThread(), e); + } + } + + public static void stopApplication() { + JFXUtilities.runInFX(() -> { + stopWithoutPlatform(); + Platform.exit(); + }); + } + + public static void stopWithoutPlatform() { + JFXUtilities.runInFX(() -> { + if (Controllers.getStage() == null) + return; + Controllers.getStage().close(); + + Logging.LOG.info("Shutting down executor services."); + Schedulers.shutdown(); + + Controllers.shutdown(); + + Lang.executeDelayed(OperatingSystem::forceGC, TimeUnit.SECONDS, 5, true); + }); + } + + public static File getWorkingDirectory(String folder) { + String home = System.getProperty("user.home", "."); + switch (OperatingSystem.CURRENT_OS) { + case LINUX: + return new File(home, "." + folder + "/"); + case WINDOWS: + String appdata = System.getenv("APPDATA"); + return new File(Lang.nonNull(appdata, home), "." + folder + "/"); + case OSX: + return new File(home, "Library/Application Support/" + folder); + default: + return new File(home, folder + "/"); + } + } + + public static String i18n(String key) { + try { + return RESOURCE_BUNDLE.getString(key); + } catch (Exception e) { + Logging.LOG.log(Level.SEVERE, "Cannot find key " + key + " in resource bundle", e); + return key; + } + } + + public static String i18n(String key, Object... formatArgs) { + return String.format(i18n(key), formatArgs); + } + + public static final File MINECRAFT_DIRECTORY = getWorkingDirectory("minecraft"); + public static final File HMCL_DIRECTORY = getWorkingDirectory("hmcl"); + + public static final String VERSION = "@HELLO_MINECRAFT_LAUNCHER_VERSION_FOR_GRADLE_REPLACING@"; + public static final String NAME = "HMCL"; + public static final String TITLE = NAME + " " + VERSION; + public static final ResourceBundle RESOURCE_BUNDLE = Settings.INSTANCE.getLocale().getResourceBundle(); + public static final UpdateChecker UPDATE_CHECKER = new UpdateChecker(VersionNumber.asVersion(VERSION)); + public static final IUpgrader UPGRADER = new AppDataUpgrader(); + public static final CrashReporter CRASH_REPORTER = new CrashReporter(); + + public static final String CONTACT = "http://huangyuhui.duapp.com/hmcl.php"; + public static final String PUBLISH = "http://www.mcbbs.net/thread-142335-1-1.html"; +} diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Main.java b/HMCL/src/main/java/org/jackhuang/hmcl/Main.java index ed16b143a..1bf1aef23 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/Main.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/Main.java @@ -17,128 +17,24 @@ */ package org.jackhuang.hmcl; -import com.jfoenix.concurrency.JFXUtilities; -import javafx.application.Application; -import javafx.application.Platform; -import javafx.stage.Stage; -import org.jackhuang.hmcl.setting.Settings; -import org.jackhuang.hmcl.task.Schedulers; -import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.ui.Controllers; -import org.jackhuang.hmcl.upgrade.AppDataUpgrader; -import org.jackhuang.hmcl.upgrade.IUpgrader; -import org.jackhuang.hmcl.upgrade.UpdateChecker; -import org.jackhuang.hmcl.util.*; - +import org.apache.commons.compress.utils.Charsets; +import org.jackhuang.hmcl.util.Logging; +import javax.swing.JOptionPane; import java.io.File; -import java.util.Arrays; -import java.util.ResourceBundle; -import java.util.concurrent.TimeUnit; -import java.util.logging.Level; -public final class Main extends Application { - - @Override - public void start(Stage primaryStage) { - Thread.currentThread().setUncaughtExceptionHandler(CRASH_REPORTER); - - try { - // When launcher visibility is set to "hide and reopen" without Platform.implicitExit = false, - // Stage.show() cannot work again because JavaFX Toolkit have already shut down. - Platform.setImplicitExit(false); - Controllers.initialize(primaryStage); - primaryStage.setResizable(false); - primaryStage.setScene(Controllers.getScene()); - primaryStage.show(); - } catch (Throwable e) { - CRASH_REPORTER.uncaughtException(Thread.currentThread(), e); - } - } +public final class Main { public static void main(String[] args) { - Thread.setDefaultUncaughtExceptionHandler(CRASH_REPORTER); + String currentDirectory = new File("").getAbsolutePath(); + Logging.LOG.info("Current directory: " + currentDirectory); + if (currentDirectory.contains("!")) { + Logging.LOG.severe("Exclamation mark(!) is not allowed in the path where HMCL is in. Forcibly exit."); - try { - // NetworkUtils.setUserAgentSupplier(() -> "Hello Minecraft! Launcher"); - Constants.UI_THREAD_SCHEDULER = Constants.JAVAFX_UI_THREAD_SCHEDULER; - UPGRADER.parseArguments(VersionNumber.asVersion(VERSION), Arrays.asList(args)); - - Logging.LOG.info("*** " + TITLE + " ***"); - - UPDATE_CHECKER.process(false) - .then(Task.of(Schedulers.javafx(), () -> { - if (UPDATE_CHECKER.isOutOfDate()) - Controllers.showUpdate(); - })) - .start(); - - launch(args); - } catch (Throwable e) { // Fucking JavaFX will suppress the exception and will break our crash reporter. - CRASH_REPORTER.uncaughtException(Thread.currentThread(), e); - } + // No Chinese translation because both Swing and JavaFX cannot render Chinese character properly when exclamation mark exists in the path. + String message = "Exclamation mark(!) is not allowed in the path where HMCL is in.\nThe path is " + currentDirectory; + JOptionPane.showMessageDialog(null, message, "Error", JOptionPane.ERROR_MESSAGE); + System.exit(1); + } else + Launcher.main(args); } - - public static void stopApplication() { - JFXUtilities.runInFX(() -> { - stopWithoutPlatform(); - Platform.exit(); - }); - } - - public static void stopWithoutPlatform() { - JFXUtilities.runInFX(() -> { - if (Controllers.getStage() == null) - return; - Controllers.getStage().close(); - - Logging.LOG.info("Shutting down executor services."); - Schedulers.shutdown(); - - Controllers.shutdown(); - - Lang.executeDelayed(OperatingSystem::forceGC, TimeUnit.SECONDS, 5, true); - }); - } - - public static String i18n(String key) { - try { - return RESOURCE_BUNDLE.getString(key); - } catch (Exception e) { - Logging.LOG.log(Level.SEVERE, "Cannot find key " + key + " in resource bundle", e); - return key; - } - } - - public static String i18n(String key, Object... formatArgs) { - return String.format(i18n(key), formatArgs); - } - - public static File getWorkingDirectory(String folder) { - String home = System.getProperty("user.home", "."); - switch (OperatingSystem.CURRENT_OS) { - case LINUX: - return new File(home, "." + folder + "/"); - case WINDOWS: - String appdata = System.getenv("APPDATA"); - return new File(Lang.nonNull(appdata, home), "." + folder + "/"); - case OSX: - return new File(home, "Library/Application Support/" + folder); - default: - return new File(home, folder + "/"); - } - } - - public static final File MINECRAFT_DIRECTORY = getWorkingDirectory("minecraft"); - public static final File HMCL_DIRECTORY = getWorkingDirectory("hmcl"); - - public static final String VERSION = "@HELLO_MINECRAFT_LAUNCHER_VERSION_FOR_GRADLE_REPLACING@"; - public static final String NAME = "HMCL"; - public static final String TITLE = NAME + " " + VERSION; - public static final ResourceBundle RESOURCE_BUNDLE = Settings.INSTANCE.getLocale().getResourceBundle(); - public static final UpdateChecker UPDATE_CHECKER = new UpdateChecker(VersionNumber.asVersion(VERSION)); - public static final IUpgrader UPGRADER = new AppDataUpgrader(); - public static final CrashReporter CRASH_REPORTER = new CrashReporter(); - - public static final String CONTACT = "http://huangyuhui.duapp.com/hmcl.php"; - public static final String PUBLISH = "http://www.mcbbs.net/thread-142335-1-1.html"; } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/AccountHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/AccountHelper.java index 2cfcbf058..a3e50cc26 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/AccountHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/AccountHelper.java @@ -19,7 +19,7 @@ package org.jackhuang.hmcl.game; import javafx.geometry.Rectangle2D; import javafx.scene.image.Image; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.auth.Account; import org.jackhuang.hmcl.auth.yggdrasil.GameProfile; import org.jackhuang.hmcl.auth.yggdrasil.Texture; @@ -43,7 +43,7 @@ public final class AccountHelper { public static final AccountHelper INSTANCE = new AccountHelper(); private AccountHelper() {} - public static final File SKIN_DIR = new File(Main.HMCL_DIRECTORY, "skins"); + public static final File SKIN_DIR = new File(Launcher.HMCL_DIRECTORY, "skins"); public static void loadSkins() { loadSkins(Proxy.NO_PROXY); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameLauncher.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameLauncher.java index a999a6e1a..6bef2d069 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameLauncher.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameLauncher.java @@ -17,7 +17,7 @@ */ package org.jackhuang.hmcl.game; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.auth.AuthInfo; import org.jackhuang.hmcl.launch.DefaultLauncher; import org.jackhuang.hmcl.launch.ProcessListener; @@ -45,7 +45,7 @@ public final class HMCLGameLauncher extends DefaultLauncher { protected void appendJvmArgs(List result) { super.appendJvmArgs(result); - result.add("-Dminecraft.launcher.version=" + Main.VERSION); - result.add("-Dminecraft.launcher.brand=" + Main.NAME); + result.add("-Dminecraft.launcher.version=" + Launcher.VERSION); + result.add("-Dminecraft.launcher.brand=" + Launcher.NAME); } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackManager.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackManager.java index 8791b578d..89544be28 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackManager.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackManager.java @@ -26,7 +26,6 @@ import org.jackhuang.hmcl.util.StringUtils; import java.io.File; import java.io.IOException; -import java.util.Arrays; import java.util.List; /** diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java index d5fc7cdc4..97d09da63 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java @@ -19,13 +19,12 @@ package org.jackhuang.hmcl.game; import com.jfoenix.concurrency.JFXUtilities; import javafx.application.Platform; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.auth.Account; import org.jackhuang.hmcl.auth.AuthInfo; import org.jackhuang.hmcl.auth.AuthenticationException; import org.jackhuang.hmcl.auth.ServerDisconnectException; import org.jackhuang.hmcl.download.DefaultDependencyManager; -import org.jackhuang.hmcl.download.MaintainTask; import org.jackhuang.hmcl.launch.*; import org.jackhuang.hmcl.mod.CurseCompletionTask; import org.jackhuang.hmcl.setting.LauncherVisibility; @@ -90,7 +89,7 @@ public final class LauncherHelper { .then(Task.of(Schedulers.javafx(), () -> emitStatus(LoadingState.MODS))) .then(new CurseCompletionTask(dependencyManager, selectedVersion)) .then(Task.of(Schedulers.javafx(), () -> emitStatus(LoadingState.LOGGING_IN))) - .then(Task.of(Main.i18n("account.methods"), variables -> { + .then(Task.of(Launcher.i18n("account.methods"), variables -> { try { try { variables.set("account", account.logIn()); @@ -114,12 +113,12 @@ public final class LauncherHelper { .then(variables -> { DefaultLauncher launcher = variables.get("launcher"); if (scriptFile == null) { - return new LaunchTask<>(launcher::launch).setName(Main.i18n("version.launch")); + return new LaunchTask<>(launcher::launch).setName(Launcher.i18n("version.launch")); } else { return new LaunchTask<>(() -> { launcher.makeLaunchScript(scriptFile); return null; - }).setName(Main.i18n("version.launch_script")); + }).setName(Launcher.i18n("version.launch_script")); } }) .then(Task.of(variables -> { @@ -127,7 +126,7 @@ public final class LauncherHelper { ManagedProcess process = variables.get(LaunchTask.LAUNCH_ID); PROCESSES.add(process); if (setting.getLauncherVisibility() == LauncherVisibility.CLOSE) - Main.stopApplication(); + Launcher.stopApplication(); else launchingStepsPane.setCancel(() -> { process.stop(); @@ -135,7 +134,7 @@ public final class LauncherHelper { }); } else Platform.runLater(() -> - Controllers.dialog(Main.i18n("version.launch_script.success", scriptFile.getAbsolutePath()))); + Controllers.dialog(Launcher.i18n("version.launch_script.success", scriptFile.getAbsolutePath()))); })) .executor(); @@ -157,7 +156,7 @@ public final class LauncherHelper { Platform.runLater(() -> { if (executor.getLastException() != null) Controllers.dialog(I18nException.getStackTrace(executor.getLastException()), - scriptFile == null ? Main.i18n("launch.failed") : Main.i18n("version.launch_script.failed"), + scriptFile == null ? Launcher.i18n("launch.failed") : Launcher.i18n("version.launch_script.failed"), MessageBox.ERROR_MESSAGE, Controllers::closeDialog); else Controllers.closeDialog(); @@ -177,35 +176,35 @@ public final class LauncherHelper { VersionNumber gameVersion = VersionNumber.asVersion(GameVersion.minecraftVersion(profile.getRepository().getVersionJar(version)).orElse("Unknown")); JavaVersion java = setting.getJavaVersion(); if (java == null) { - Controllers.dialog(Main.i18n("launch.wrong_javadir"), Main.i18n("message.error"), MessageBox.ERROR_MESSAGE, onAccept); + Controllers.dialog(Launcher.i18n("launch.wrong_javadir"), Launcher.i18n("message.error"), MessageBox.ERROR_MESSAGE, onAccept); setting.setJava(null); java = JavaVersion.fromCurrentEnvironment(); flag = true; } if (java.getParsedVersion() < JavaVersion.JAVA_8) { - Controllers.dialog(Main.i18n("launch.advice.newer_java"), Main.i18n("message.error"), MessageBox.ERROR_MESSAGE, onAccept); + Controllers.dialog(Launcher.i18n("launch.advice.newer_java"), Launcher.i18n("message.error"), MessageBox.ERROR_MESSAGE, onAccept); flag = true; } if (java.getParsedVersion() >= JavaVersion.JAVA_9 && gameVersion.compareTo(VersionNumber.asVersion("1.12.5")) < 0 && version.getMainClass().contains("launchwrapper")) { - Controllers.dialog(Main.i18n("launch.advice.java9"), Main.i18n("message.error"), MessageBox.ERROR_MESSAGE, null); + Controllers.dialog(Launcher.i18n("launch.advice.java9"), Launcher.i18n("message.error"), MessageBox.ERROR_MESSAGE, null); suggest = false; flag = true; } if (java.getPlatform() == org.jackhuang.hmcl.util.Platform.BIT_32 && org.jackhuang.hmcl.util.Platform.IS_64_BIT) { - Controllers.dialog(Main.i18n("launch.advice.different_platform"), Main.i18n("message.error"), MessageBox.ERROR_MESSAGE, onAccept); + Controllers.dialog(Launcher.i18n("launch.advice.different_platform"), Launcher.i18n("message.error"), MessageBox.ERROR_MESSAGE, onAccept); flag = true; } if (java.getPlatform() == org.jackhuang.hmcl.util.Platform.BIT_32 && setting.getMaxMemory() > 1.5 * 1024) { - Controllers.dialog(Main.i18n("launch.advice.too_large_memory_for_32bit"), Main.i18n("message.error"), MessageBox.ERROR_MESSAGE, onAccept); + Controllers.dialog(Launcher.i18n("launch.advice.too_large_memory_for_32bit"), Launcher.i18n("message.error"), MessageBox.ERROR_MESSAGE, onAccept); flag = true; } if (OperatingSystem.TOTAL_MEMORY > 0 && OperatingSystem.TOTAL_MEMORY < setting.getMaxMemory()) { - Controllers.dialog(Main.i18n("launch.advice.not_enough_space", OperatingSystem.TOTAL_MEMORY), Main.i18n("message.error"), MessageBox.ERROR_MESSAGE, onAccept); + Controllers.dialog(Launcher.i18n("launch.advice.not_enough_space", OperatingSystem.TOTAL_MEMORY), Launcher.i18n("message.error"), MessageBox.ERROR_MESSAGE, onAccept); flag = true; } @@ -242,8 +241,8 @@ public final class LauncherHelper { Platform.runLater(() -> { // Shut down the platform when user closed log window. Platform.setImplicitExit(true); - // If we use Main.stop(), log window will be halt immediately. - Main.stopWithoutPlatform(); + // If we use Launcher.stop(), log window will be halt immediately. + Launcher.stopWithoutPlatform(); }); break; } @@ -261,11 +260,11 @@ public final class LauncherHelper { try { setResult(supplier.get()); } catch (PermissionException e) { - throw new I18nException(Main.i18n("launch.failed.executable_permission"), e); + throw new I18nException(Launcher.i18n("launch.failed.executable_permission"), e); } catch (ProcessCreationException e) { - throw new I18nException(Main.i18n("launch.failed.creating_process") + e.getLocalizedMessage(), e); + throw new I18nException(Launcher.i18n("launch.failed.creating_process") + e.getLocalizedMessage(), e); } catch (NotDecompressingNativesException e) { - throw new I18nException(Main.i18n("launch.failed.decompressing_natives") + e.getLocalizedMessage(), e); + throw new I18nException(Launcher.i18n("launch.failed.decompressing_natives") + e.getLocalizedMessage(), e); } } @@ -382,10 +381,10 @@ public final class LauncherHelper { switch (exitType) { case JVM_ERROR: - logWindow.setTitle(Main.i18n("launch.failed.cannot_create_jvm")); + logWindow.setTitle(Launcher.i18n("launch.failed.cannot_create_jvm")); break; case APPLICATION_ERROR: - logWindow.setTitle(Main.i18n("launch.failed.exited_abnormally")); + logWindow.setTitle(Launcher.i18n("launch.failed.exited_abnormally")); break; } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LoadingState.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LoadingState.java index da1ab1c10..9f71f91d8 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LoadingState.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LoadingState.java @@ -17,7 +17,7 @@ */ package org.jackhuang.hmcl.game; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; public enum LoadingState { DEPENDENCIES("launch.state.dependencies"), @@ -33,6 +33,6 @@ public enum LoadingState { } public String getLocalizedMessage() { - return Main.i18n(key); + return Launcher.i18n(key); } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Accounts.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Accounts.java index ca15f364a..ddab99ef3 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Accounts.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Accounts.java @@ -17,8 +17,7 @@ */ package org.jackhuang.hmcl.setting; -import com.google.gson.JsonParseException; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.auth.Account; import org.jackhuang.hmcl.auth.AccountFactory; import org.jackhuang.hmcl.auth.authlibinjector.AuthlibInjectorAccount; @@ -74,8 +73,8 @@ public final class Accounts { private static String downloadAuthlibInjector() throws Exception { AuthlibInjectorBuildInfo buildInfo = AuthlibInjectorBuildInfo.requestBuildInfo(); - File jar = new File(Main.HMCL_DIRECTORY, "authlib-injector.jar"); - File local = new File(Main.HMCL_DIRECTORY, "authlib-injector.txt"); + File jar = new File(Launcher.HMCL_DIRECTORY, "authlib-injector.jar"); + File local = new File(Launcher.HMCL_DIRECTORY, "authlib-injector.txt"); int buildNumber = 0; try { buildNumber = Integer.parseInt(FileUtils.readText(local)); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java index be3ed382a..afd722a3c 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java @@ -18,7 +18,7 @@ package org.jackhuang.hmcl.setting; import com.google.gson.annotations.SerializedName; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.util.JavaVersion; import java.util.*; @@ -35,7 +35,7 @@ final class Config { private String backgroundImage = null; @SerializedName("commonpath") - private String commonDirectory = Main.MINECRAFT_DIRECTORY.getAbsolutePath(); + private String commonDirectory = Launcher.MINECRAFT_DIRECTORY.getAbsolutePath(); @SerializedName("hasProxy") private boolean hasProxy = false; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java index fe69bba78..8b38c133f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java @@ -23,7 +23,6 @@ import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.MojangDownloadProvider; import org.jackhuang.hmcl.util.Lang; -import java.util.Arrays; import java.util.List; public final class DownloadProviders { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Locales.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Locales.java index e5b625fed..f23274680 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Locales.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Locales.java @@ -20,7 +20,6 @@ package org.jackhuang.hmcl.setting; import org.jackhuang.hmcl.ui.construct.UTF8Control; import org.jackhuang.hmcl.util.Lang; -import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.ResourceBundle; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profiles.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profiles.java index 0f3158d7a..eb22f9607 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profiles.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profiles.java @@ -17,7 +17,7 @@ */ package org.jackhuang.hmcl.setting; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; public final class Profiles { private Profiles() { @@ -26,9 +26,9 @@ public final class Profiles { public static String getProfileDisplayName(Profile profile) { switch (profile.getName()) { case Settings.DEFAULT_PROFILE: - return Main.i18n("profile.default"); + return Launcher.i18n("profile.default"); case Settings.HOME_PROFILE: - return Main.i18n("profile.home"); + return Launcher.i18n("profile.home"); default: return profile.getName(); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Proxies.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Proxies.java index db174bff3..919351d30 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Proxies.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Proxies.java @@ -20,7 +20,6 @@ package org.jackhuang.hmcl.setting; import org.jackhuang.hmcl.util.Lang; import java.net.Proxy; -import java.util.Arrays; import java.util.List; /** diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java index ef22ca06b..fe6498d66 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java @@ -23,7 +23,7 @@ import javafx.beans.property.ObjectProperty; import javafx.beans.property.StringProperty; import javafx.beans.value.ObservableValue; import javafx.scene.text.Font; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.auth.Account; import org.jackhuang.hmcl.auth.AccountFactory; import org.jackhuang.hmcl.auth.authlibinjector.AuthlibInjectorAccount; @@ -525,7 +525,7 @@ public class Settings { private void checkProfileMap() { if (getProfileMap().isEmpty()) { getProfileMap().put(DEFAULT_PROFILE, new Profile(DEFAULT_PROFILE)); - getProfileMap().put(HOME_PROFILE, new Profile(HOME_PROFILE, Main.MINECRAFT_DIRECTORY)); + getProfileMap().put(HOME_PROFILE, new Profile(HOME_PROFILE, Launcher.MINECRAFT_DIRECTORY)); } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java index 6e3e3bf61..834ca4203 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java @@ -19,7 +19,7 @@ package org.jackhuang.hmcl.setting; import com.google.gson.*; import javafx.beans.InvalidationListener; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.game.LaunchOptions; import org.jackhuang.hmcl.util.*; @@ -482,8 +482,8 @@ public final class VersionSetting { return new LaunchOptions.Builder() .setGameDir(gameDir) .setJava(javaVersion) - .setVersionName(Main.TITLE) - .setProfileName(Main.TITLE) + .setVersionName(Launcher.TITLE) + .setProfileName(Launcher.TITLE) .setMinecraftArgs(getMinecraftArgs()) .setJavaArgs(getJavaArgs()) .setMaxMemory(getMaxMemory()) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/AccountsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/AccountsPage.java index bc5c020fb..7fc62cfcd 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/AccountsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/AccountsPage.java @@ -34,7 +34,7 @@ import javafx.scene.image.ImageView; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.layout.StackPane; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.auth.*; import org.jackhuang.hmcl.auth.authlibinjector.AuthlibInjectorAccount; import org.jackhuang.hmcl.auth.offline.OfflineAccount; @@ -61,7 +61,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; public final class AccountsPage extends StackPane implements DecoratorPage { - private final StringProperty title = new SimpleStringProperty(this, "title", Main.i18n("account")); + private final StringProperty title = new SimpleStringProperty(this, "title", Launcher.i18n("account")); @FXML private ScrollPane scrollPane; @@ -85,7 +85,7 @@ public final class AccountsPage extends StackPane implements DecoratorPage { FXUtils.smoothScrolling(scrollPane); - cboType.getItems().setAll(Main.i18n("account.methods.offline"), Main.i18n("account.methods.yggdrasil"), Main.i18n("account.methods.authlib_injector")); + cboType.getItems().setAll(Launcher.i18n("account.methods.offline"), Launcher.i18n("account.methods.yggdrasil"), Launcher.i18n("account.methods.authlib_injector")); cboType.getSelectionModel().selectedIndexProperty().addListener((a, b, newValue) -> { txtPassword.setVisible(newValue.intValue() != 0); lblPassword.setVisible(newValue.intValue() != 0); @@ -101,7 +101,7 @@ public final class AccountsPage extends StackPane implements DecoratorPage { txtPassword.setOnAction(e -> onCreationAccept()); txtUsername.setOnAction(e -> onCreationAccept()); - txtUsername.getValidators().add(new Validator(Main.i18n("input.email"), str -> !txtPassword.isVisible() || str.contains("@"))); + txtUsername.getValidators().add(new Validator(Launcher.i18n("input.email"), str -> !txtPassword.isVisible() || str.contains("@"))); FXUtils.onChangeAndOperate(Settings.INSTANCE.selectedAccountProperty(), account -> { for (Node node : masonryPane.getChildren()) @@ -227,25 +227,25 @@ public final class AccountsPage extends StackPane implements DecoratorPage { public static String accountException(Exception exception) { if (exception instanceof InvalidCredentialsException) { - return Main.i18n("account.failed.invalid_credentials"); + return Launcher.i18n("account.failed.invalid_credentials"); } else if (exception instanceof NoCharacterException) { - return Main.i18n("account.failed.no_charactor"); + return Launcher.i18n("account.failed.no_charactor"); } else if (exception instanceof ServerDisconnectException) { - return Main.i18n("account.failed.connect_authentication_server"); + return Launcher.i18n("account.failed.connect_authentication_server"); } else if (exception instanceof InvalidTokenException) { - return Main.i18n("account.failed.invalid_token"); + return Launcher.i18n("account.failed.invalid_token"); } else if (exception instanceof InvalidPasswordException) { - return Main.i18n("account.failed.invalid_password"); + return Launcher.i18n("account.failed.invalid_password"); } else { return exception.getClass() + ": " + exception.getLocalizedMessage(); } } public static String accountType(Account account) { - if (account instanceof OfflineAccount) return Main.i18n("account.methods.offline"); - else if (account instanceof AuthlibInjectorAccount) return Main.i18n("account.methods.authlib_injector"); - else if (account instanceof YggdrasilAccount) return Main.i18n("account.methods.yggdrasil"); - else throw new Error(Main.i18n("account.methods.no_method") + ": " + account); + if (account instanceof OfflineAccount) return Launcher.i18n("account.methods.offline"); + else if (account instanceof AuthlibInjectorAccount) return Launcher.i18n("account.methods.authlib_injector"); + else if (account instanceof YggdrasilAccount) return Launcher.i18n("account.methods.yggdrasil"); + else throw new Error(Launcher.i18n("account.methods.no_method") + ": " + account); } private static class Selector extends BorderPane implements CharacterSelector { @@ -258,11 +258,11 @@ public final class AccountsPage extends StackPane implements DecoratorPage { { setStyle("-fx-padding: 8px;"); - cancel.setText(Main.i18n("button.cancel")); + cancel.setText(Launcher.i18n("button.cancel")); StackPane.setAlignment(cancel, Pos.BOTTOM_RIGHT); cancel.setOnMouseClicked(e -> latch.countDown()); - listBox.startCategory(Main.i18n("account.choose")); + listBox.startCategory(Launcher.i18n("account.choose")); setCenter(listBox); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/AuthlibInjectorServersPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/AuthlibInjectorServersPage.java index b16eaf2f0..dd5e20352 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/AuthlibInjectorServersPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/AuthlibInjectorServersPage.java @@ -9,7 +9,7 @@ import javafx.scene.control.Label; import javafx.scene.control.ScrollPane; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.auth.authlibinjector.AuthlibInjectorServerInfo; import org.jackhuang.hmcl.setting.Accounts; import org.jackhuang.hmcl.setting.Settings; @@ -22,13 +22,12 @@ import org.jackhuang.hmcl.util.Logging; import org.jackhuang.hmcl.util.NetworkUtils; import java.util.Collection; -import java.util.Objects; import java.util.logging.Level; import java.util.stream.Collectors; import java.util.stream.Stream; public class AuthlibInjectorServersPage extends StackPane implements DecoratorPage { - private final StringProperty title = new SimpleStringProperty(this, "title", Main.i18n("account.injector.server")); + private final StringProperty title = new SimpleStringProperty(this, "title", Launcher.i18n("account.injector.server")); @FXML private ScrollPane scrollPane; @FXML private StackPane addServerContainer; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java index c734d4d83..8b855ec06 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java @@ -23,7 +23,7 @@ import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.scene.layout.Region; import javafx.stage.Stage; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.setting.Settings; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.task.TaskExecutor; @@ -93,7 +93,7 @@ public final class Controllers { public static void initialize(Stage stage) { Controllers.stage = stage; - decorator = new Decorator(stage, getMainPage(), Main.TITLE, false, true); + decorator = new Decorator(stage, getMainPage(), Launcher.TITLE, false, true); decorator.showPage(null); leftPaneController = new LeftPaneController(decorator.getLeftPane()); @@ -110,7 +110,7 @@ public final class Controllers { stage.setMaxHeight(521); stage.getIcons().add(new Image("/assets/img/icon.png")); - stage.setTitle(Main.TITLE); + stage.setTitle(Launcher.TITLE); } public static Region getDialogContent() { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/CrashWindow.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/CrashWindow.java index e9e4eb16c..285c6e640 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/CrashWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/CrashWindow.java @@ -27,7 +27,7 @@ import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.layout.StackPane; import javafx.stage.Stage; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; /** * @author huangyuhui @@ -36,10 +36,10 @@ public class CrashWindow extends Stage { public CrashWindow(String text) { Label lblCrash = new Label(); - if (Main.UPDATE_CHECKER.isOutOfDate()) - lblCrash.setText(Main.i18n("launcher.crash_out_dated")); + if (Launcher.UPDATE_CHECKER.isOutOfDate()) + lblCrash.setText(Launcher.i18n("launcher.crash_out_dated")); else - lblCrash.setText(Main.i18n("launcher.crash")); + lblCrash.setText(Launcher.i18n("launcher.crash")); lblCrash.setWrapText(true); TextArea textArea = new TextArea(); @@ -47,8 +47,8 @@ public class CrashWindow extends Stage { textArea.setEditable(false); Button btnContact = new Button(); - btnContact.setText(Main.i18n("launcher.contact")); - btnContact.setOnMouseClicked(event -> FXUtils.openLink(Main.CONTACT)); + btnContact.setText(Launcher.i18n("launcher.contact")); + btnContact.setOnMouseClicked(event -> FXUtils.openLink(Launcher.CONTACT)); HBox box = new HBox(); box.setStyle("-fx-padding: 8px;"); box.getChildren().add(btnContact); @@ -65,7 +65,7 @@ public class CrashWindow extends Stage { Scene scene = new Scene(pane, 800, 480); setScene(scene); getIcons().add(new Image("/assets/img/icon.png")); - setTitle(Main.i18n("message.error")); + setTitle(Launcher.i18n("message.error")); setOnCloseRequest(e -> System.exit(1)); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Decorator.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Decorator.java index 096a39c56..9c28cb87e 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Decorator.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Decorator.java @@ -45,7 +45,7 @@ import javafx.scene.shape.Rectangle; import javafx.stage.Screen; import javafx.stage.Stage; import javafx.stage.StageStyle; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.setting.EnumBackgroundImage; import org.jackhuang.hmcl.setting.Settings; import org.jackhuang.hmcl.setting.Theme; @@ -74,7 +74,7 @@ public final class Decorator extends StackPane implements TaskExecutorDialogWiza private static final SVGGlyph close = Lang.apply(new SVGGlyph(0, "CLOSE", "M810 274l-238 238 238 238-60 60-238-238-238 238-60-60 238-238-238-238 60-60 238 238 238-238z", Color.WHITE), glyph -> { glyph.setPrefSize(12, 12); glyph.setSize(12, 12); }); - private final ObjectProperty onCloseButtonAction = new SimpleObjectProperty<>(Main::stopApplication); + private final ObjectProperty onCloseButtonAction = new SimpleObjectProperty<>(Launcher::stopApplication); private final BooleanProperty customMaximize = new SimpleBooleanProperty(false); private final Stage primaryStage; @@ -144,7 +144,7 @@ public final class Decorator extends StackPane implements TaskExecutorDialogWiza FXUtils.loadFXML(this, "/assets/fxml/decorator.fxml"); updatePane.setCursor(Cursor.HAND); - updatePane.setOnMouseClicked(event -> Main.UPDATE_CHECKER.checkOutdate()); + updatePane.setOnMouseClicked(event -> Launcher.UPDATE_CHECKER.checkOutdate()); primaryStage.initStyle(StageStyle.UNDECORATED); btnClose.setGraphic(close); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java index b8ddba831..e09ed5c0e 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java @@ -41,7 +41,7 @@ import javafx.scene.input.ScrollEvent; import javafx.scene.layout.Region; import javafx.scene.shape.Rectangle; import javafx.util.Duration; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.util.*; import java.io.File; @@ -184,7 +184,7 @@ public final class FXUtils { } public static void loadFXML(Node node, String absolutePath) { - FXMLLoader loader = new FXMLLoader(node.getClass().getResource(absolutePath), Main.RESOURCE_BUNDLE); + FXMLLoader loader = new FXMLLoader(node.getClass().getResource(absolutePath), Launcher.RESOURCE_BUNDLE); loader.setRoot(node); loader.setController(node); Lang.invoke((ExceptionalSupplier) loader::load); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java index f227d90ca..225b8d8df 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java @@ -21,7 +21,7 @@ import com.jfoenix.effects.JFXDepthManager; import javafx.fxml.FXML; import javafx.scene.control.Label; import javafx.scene.layout.BorderPane; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import java.util.function.Consumer; @@ -44,7 +44,7 @@ public class InstallerItem extends BorderPane { setStyle("-fx-background-radius: 2; -fx-background-color: white; -fx-padding: 8;"); JFXDepthManager.setDepth(this, 1); lblInstallerArtifact.setText(artifact); - lblInstallerVersion.setText(Main.i18n("archive.version") + ": " + version); + lblInstallerVersion.setText(Launcher.i18n("archive.version") + ": " + version); } @FXML diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LeftPaneController.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LeftPaneController.java index b67caaf05..9b28546e3 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LeftPaneController.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LeftPaneController.java @@ -25,7 +25,7 @@ import javafx.scene.image.Image; import javafx.scene.layout.BorderPane; import javafx.scene.layout.VBox; import javafx.scene.text.Text; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.auth.yggdrasil.YggdrasilAccount; import org.jackhuang.hmcl.event.EventBus; import org.jackhuang.hmcl.event.ProfileChangedEvent; @@ -60,18 +60,18 @@ public final class LeftPaneController { public LeftPaneController(AdvancedListBox leftPane) { this.leftPane = leftPane; - leftPane.startCategory(Main.i18n("account").toUpperCase()) + leftPane.startCategory(Launcher.i18n("account").toUpperCase()) .add(Lang.apply(new RipplerContainer(accountItem), rippler -> { rippler.setOnMouseClicked(e -> Controllers.navigate(new AccountsPage())); accountItem.setOnSettingsButtonClicked(() -> Controllers.navigate(new AccountsPage())); })) - .startCategory(Main.i18n("launcher").toUpperCase()) - .add(Lang.apply(new IconedItem(SVG.gear(Theme.blackFillBinding(), 20, 20), Main.i18n("settings.launcher")), iconedItem -> { + .startCategory(Launcher.i18n("launcher").toUpperCase()) + .add(Lang.apply(new IconedItem(SVG.gear(Theme.blackFillBinding(), 20, 20), Launcher.i18n("settings.launcher")), iconedItem -> { iconedItem.prefWidthProperty().bind(leftPane.widthProperty()); iconedItem.setOnMouseClicked(e -> Controllers.navigate(Controllers.getSettingsPage())); })) .add(new ClassTitle(Lang.apply(new BorderPane(), borderPane -> { - borderPane.setLeft(Lang.apply(new VBox(), vBox -> vBox.getChildren().setAll(new Text(Main.i18n("profile.title").toUpperCase())))); + borderPane.setLeft(Lang.apply(new VBox(), vBox -> vBox.getChildren().setAll(new Text(Launcher.i18n("profile.title").toUpperCase())))); JFXButton addProfileButton = new JFXButton(); addProfileButton.setGraphic(SVG.plus(Theme.blackFillBinding(), 10, 10)); addProfileButton.getStyleClass().add("toggle-icon-tiny"); @@ -87,8 +87,8 @@ public final class LeftPaneController { FXUtils.onChangeAndOperate(Settings.INSTANCE.selectedAccountProperty(), it -> { if (it == null) { - accountItem.setVersionName(Main.i18n("account.missing")); - accountItem.setGameVersion(Main.i18n("message.unknown")); + accountItem.setVersionName(Launcher.i18n("account.missing")); + accountItem.setGameVersion(Launcher.i18n("message.unknown")); } else { accountItem.setVersionName(it.getCharacter()); accountItem.setGameVersion(AccountsPage.accountType(it)); @@ -110,7 +110,7 @@ public final class LeftPaneController { if (node instanceof RipplerContainer && node.getProperties().get("profile") instanceof String) { boolean current = Objects.equals(node.getProperties().get("profile"), profile.getName()); ((RipplerContainer) node).setSelected(current); - ((VersionListItem) ((RipplerContainer) node).getContainer()).setGameVersion(current ? Main.i18n("profile.selected") : ""); + ((VersionListItem) ((RipplerContainer) node).getContainer()).setGameVersion(current ? Launcher.i18n("profile.selected") : ""); } } }); @@ -149,7 +149,7 @@ public final class LeftPaneController { Controllers.closeDialog(); checkAccount(); })).executor(), - Main.i18n("modpack.installing"), "", null); + Launcher.i18n("modpack.installing"), "", null); flag = false; } catch (UnsupportedModpackException ignore) { } 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 1547b138e..7801ef900 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java @@ -30,7 +30,7 @@ import javafx.scene.layout.StackPane; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import javafx.stage.Stage; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.event.Event; import org.jackhuang.hmcl.event.EventManager; import org.jackhuang.hmcl.game.LauncherHelper; @@ -63,7 +63,7 @@ public final class LogWindow extends Stage { public LogWindow() { setScene(new Scene(impl, 800, 480)); getScene().getStylesheets().addAll(Settings.INSTANCE.getTheme().getStylesheets()); - setTitle(Main.i18n("logwindow.title")); + setTitle(Launcher.i18n("logwindow.title")); getIcons().add(new Image("/assets/img/icon.png")); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/MainPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/MainPage.java index fc83adff1..2c8642866 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/MainPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/MainPage.java @@ -27,10 +27,11 @@ import javafx.scene.image.Image; import javafx.scene.input.MouseButton; import javafx.scene.layout.StackPane; import javafx.stage.FileChooser; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.event.EventBus; import org.jackhuang.hmcl.event.ProfileChangedEvent; import org.jackhuang.hmcl.event.RefreshedVersionsEvent; +import org.jackhuang.hmcl.event.RefreshingVersionsEvent; import org.jackhuang.hmcl.game.*; import org.jackhuang.hmcl.mod.MismatchedModpackTypeException; import org.jackhuang.hmcl.mod.UnsupportedModpackException; @@ -54,7 +55,7 @@ import java.util.List; public final class MainPage extends StackPane implements DecoratorPage { - private final StringProperty title = new SimpleStringProperty(this, "title", Main.i18n("main_page")); + private final StringProperty title = new SimpleStringProperty(this, "title", Launcher.i18n("main_page")); private Profile profile; private String rightClickedVersion; @@ -84,18 +85,21 @@ public final class MainPage extends StackPane implements DecoratorPage { if (event.getSource() == profile.getRepository()) loadVersions((HMCLGameRepository) event.getSource()); }); + EventBus.EVENT_BUS.channel(RefreshingVersionsEvent.class).register(event -> { + if (event.getSource() == profile.getRepository()) + JFXUtilities.runInFXAndWait(this::loadingVersions); + }); EventBus.EVENT_BUS.channel(ProfileChangedEvent.class).register(event -> { - JFXUtilities.runInFXAndWait(this::loadingVersions); this.profile = event.getProfile(); }); versionPopup = new JFXPopup(versionList); getChildren().remove(versionList); - btnAdd.setOnMouseClicked(e -> Controllers.getDecorator().startWizard(new DownloadWizardProvider(), Main.i18n("install"))); - FXUtils.installTooltip(btnAdd, Main.i18n("install")); + btnAdd.setOnMouseClicked(e -> Controllers.getDecorator().startWizard(new DownloadWizardProvider(), Launcher.i18n("install"))); + FXUtils.installTooltip(btnAdd, Launcher.i18n("install")); btnRefresh.setOnMouseClicked(e -> Settings.INSTANCE.getSelectedProfile().getRepository().refreshVersionsAsync().start()); - FXUtils.installTooltip(btnRefresh, Main.i18n("button.refresh")); + FXUtils.installTooltip(btnRefresh, Launcher.i18n("button.refresh")); } private Node buildNode(HMCLGameRepository repository, Version version, String game) { @@ -109,33 +113,33 @@ public final class MainPage extends StackPane implements DecoratorPage { StringBuilder libraries = new StringBuilder(); for (Library library : version.getLibraries()) { if (library.getGroupId().equalsIgnoreCase("net.minecraftforge") && library.getArtifactId().equalsIgnoreCase("forge")) { - libraries.append(Main.i18n("install.installer.forge")).append(": ").append(StringUtils.removeSuffix(StringUtils.removePrefix(library.getVersion().replaceAll("(?i)forge", "").replace(game, "").trim(), "-"), "-")).append("\n"); + libraries.append(Launcher.i18n("install.installer.forge")).append(": ").append(StringUtils.removeSuffix(StringUtils.removePrefix(library.getVersion().replaceAll("(?i)forge", "").replace(game, "").trim(), "-"), "-")).append("\n"); } if (library.getGroupId().equalsIgnoreCase("com.mumfrey") && library.getArtifactId().equalsIgnoreCase("liteloader")) { - libraries.append(Main.i18n("install.installer.liteloader")).append(": ").append(StringUtils.removeSuffix(StringUtils.removePrefix(library.getVersion().replaceAll("(?i)liteloader", "").replace(game, "").trim(), "-"), "-")).append("\n"); + libraries.append(Launcher.i18n("install.installer.liteloader")).append(": ").append(StringUtils.removeSuffix(StringUtils.removePrefix(library.getVersion().replaceAll("(?i)liteloader", "").replace(game, "").trim(), "-"), "-")).append("\n"); } if (library.getGroupId().equalsIgnoreCase("net.optifine") && library.getArtifactId().equalsIgnoreCase("optifine")) { - libraries.append(Main.i18n("install.installer.optifine")).append(": ").append(StringUtils.removeSuffix(StringUtils.removePrefix(library.getVersion().replaceAll("(?i)optifine", "").replace(game, "").trim(), "-"), "-")).append("\n"); + libraries.append(Launcher.i18n("install.installer.optifine")).append(": ").append(StringUtils.removeSuffix(StringUtils.removePrefix(library.getVersion().replaceAll("(?i)optifine", "").replace(game, "").trim(), "-"), "-")).append("\n"); } } item.setLibraries(libraries.toString()); item.setOnLaunchButtonClicked(e -> { if (Settings.INSTANCE.getSelectedAccount() == null) - Controllers.dialog(Main.i18n("login.empty_username")); + Controllers.dialog(Launcher.i18n("login.empty_username")); else LauncherHelper.INSTANCE.launch(profile, Settings.INSTANCE.getSelectedAccount(), id, null); }); item.setOnScriptButtonClicked(e -> { if (Settings.INSTANCE.getSelectedAccount() == null) - Controllers.dialog(Main.i18n("login.empty_username")); + Controllers.dialog(Launcher.i18n("login.empty_username")); else { FileChooser chooser = new FileChooser(); chooser.setInitialDirectory(repository.getRunDirectory(id)); - chooser.setTitle(Main.i18n("version.launch_script.save")); + chooser.setTitle(Launcher.i18n("version.launch_script.save")); chooser.getExtensionFilters().add(OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS - ? new FileChooser.ExtensionFilter(Main.i18n("extension.bat"), "*.bat") - : new FileChooser.ExtensionFilter(Main.i18n("extension.sh"), "*.sh")); + ? new FileChooser.ExtensionFilter(Launcher.i18n("extension.bat"), "*.bat") + : new FileChooser.ExtensionFilter(Launcher.i18n("extension.sh"), "*.sh")); File file = chooser.showSaveDialog(Controllers.getStage()); if (file != null) LauncherHelper.INSTANCE.launch(profile, Settings.INSTANCE.getSelectedAccount(), id, file); @@ -147,8 +151,8 @@ public final class MainPage extends StackPane implements DecoratorPage { }); item.setOnUpdateButtonClicked(event -> { FileChooser chooser = new FileChooser(); - chooser.setTitle(Main.i18n("modpack.choose")); - chooser.getExtensionFilters().add(new FileChooser.ExtensionFilter(Main.i18n("modpack"), "*.zip")); + chooser.setTitle(Launcher.i18n("modpack.choose")); + chooser.getExtensionFilters().add(new FileChooser.ExtensionFilter(Launcher.i18n("modpack"), "*.zip")); File selectedFile = chooser.showOpenDialog(Controllers.getStage()); if (selectedFile != null) { TaskExecutorDialogPane pane = new TaskExecutorDialogPane(null); @@ -156,15 +160,15 @@ public final class MainPage extends StackPane implements DecoratorPage { TaskExecutor executor = ModpackHelper.getUpdateTask(profile, selectedFile, id, ModpackHelper.readModpackConfiguration(repository.getModpackConfiguration(id))) .then(Task.of(Schedulers.javafx(), Controllers::closeDialog)).executor(); pane.setExecutor(executor); - pane.setTitle(Main.i18n("modpack.update")); + pane.setTitle(Launcher.i18n("modpack.update")); executor.start(); Controllers.dialog(pane); } catch (UnsupportedModpackException e) { - Controllers.dialog(Main.i18n("modpack.unsupported"), Main.i18n("message.error"), MessageBox.ERROR_MESSAGE); + Controllers.dialog(Launcher.i18n("modpack.unsupported"), Launcher.i18n("message.error"), MessageBox.ERROR_MESSAGE); } catch (MismatchedModpackTypeException e) { - Controllers.dialog(Main.i18n("modpack.mismatched_type"), Main.i18n("message.error"), MessageBox.ERROR_MESSAGE); + Controllers.dialog(Launcher.i18n("modpack.mismatched_type"), Launcher.i18n("message.error"), MessageBox.ERROR_MESSAGE); } catch (IOException e) { - Controllers.dialog(Main.i18n("modpack.invalid"), Main.i18n("message.error"), MessageBox.ERROR_MESSAGE); + Controllers.dialog(Launcher.i18n("modpack.invalid"), Launcher.i18n("message.error"), MessageBox.ERROR_MESSAGE); } } }); @@ -176,7 +180,7 @@ public final class MainPage extends StackPane implements DecoratorPage { versionPopup.show(item, JFXPopup.PopupVPosition.TOP, JFXPopup.PopupHPosition.LEFT, event.getX(), event.getY()); } else if (event.getButton() == MouseButton.PRIMARY && event.getClickCount() == 2) { if (Settings.INSTANCE.getSelectedAccount() == null) - Controllers.dialog(Main.i18n("login.empty_username")); + Controllers.dialog(Launcher.i18n("login.empty_username")); else LauncherHelper.INSTANCE.launch(profile, Settings.INSTANCE.getSelectedAccount(), id, null); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/ModController.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/ModController.java index 6cea184f7..459e398f1 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/ModController.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/ModController.java @@ -17,16 +17,16 @@ */ package org.jackhuang.hmcl.ui; +import com.jfoenix.concurrency.JFXUtilities; import com.jfoenix.controls.JFXSpinner; import com.jfoenix.controls.JFXTabPane; -import javafx.application.Platform; import javafx.fxml.FXML; import javafx.scene.control.ScrollPane; import javafx.scene.input.TransferMode; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; import javafx.stage.FileChooser; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.mod.ModInfo; import org.jackhuang.hmcl.mod.ModManager; import org.jackhuang.hmcl.task.Schedulers; @@ -93,7 +93,7 @@ public final class ModController { this.versionId = versionId; Task.of(variables -> { synchronized (ModController.this) { - Platform.runLater(() -> { + JFXUtilities.runInFX(() -> { rootPane.getChildren().remove(contentPane); spinner.setVisible(true); }); @@ -121,25 +121,24 @@ public final class ModController { list.add(item); } - Platform.runLater(() -> { - rootPane.getChildren().add(contentPane); - spinner.setVisible(false); - }); variables.set("list", list); } - }).finalized(Schedulers.javafx(), variables -> { - FXUtils.onWeakChangeAndOperate(parentTab.getSelectionModel().selectedItemProperty(), newValue -> { - if (newValue != null && newValue.getUserData() == ModController.this) - modPane.getChildren().setAll(variables.>get("list")); - }); - }, null).start(); + }).finalized(Schedulers.javafx(), (variables, isDependentsSucceeded) -> { + rootPane.getChildren().add(contentPane); + spinner.setVisible(false); + if (isDependentsSucceeded) + FXUtils.onWeakChangeAndOperate(parentTab.getSelectionModel().selectedItemProperty(), newValue -> { + if (newValue != null && newValue.getUserData() == ModController.this) + modPane.getChildren().setAll(variables.>get("list")); + }); + }).start(); } @FXML private void onAdd() { FileChooser chooser = new FileChooser(); - chooser.setTitle(Main.i18n("mods.choose_mod")); - chooser.getExtensionFilters().setAll(new FileChooser.ExtensionFilter(Main.i18n("extension.mod"), "*.jar", "*.zip", "*.litemod")); + chooser.setTitle(Launcher.i18n("mods.choose_mod")); + chooser.getExtensionFilters().setAll(new FileChooser.ExtensionFilter(Launcher.i18n("extension.mod"), "*.jar", "*.zip", "*.litemod")); List res = chooser.showOpenMultipleDialog(Controllers.getStage()); // It's guaranteed that succeeded and failed are thread safe here. @@ -161,10 +160,10 @@ public final class ModController { }).with(Task.of(Schedulers.javafx(), variables -> { List prompt = new LinkedList<>(); if (!succeeded.isEmpty()) - prompt.add(Main.i18n("mods.add.success", String.join(", ", succeeded))); + prompt.add(Launcher.i18n("mods.add.success", String.join(", ", succeeded))); if (!failed.isEmpty()) - prompt.add(Main.i18n("mods.add.failed", String.join(", ", failed))); - Controllers.dialog(String.join("\n", prompt), Main.i18n("mods.add")); + prompt.add(Launcher.i18n("mods.add.failed", String.join(", ", failed))); + Controllers.dialog(String.join("\n", prompt), Launcher.i18n("mods.add")); loadMods(modManager, versionId); })).start(); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/ModItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/ModItem.java index 6c16b627b..7de389ad7 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/ModItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/ModItem.java @@ -22,7 +22,7 @@ import com.jfoenix.controls.JFXCheckBox; import com.jfoenix.effects.JFXDepthManager; import javafx.geometry.Pos; import javafx.scene.layout.BorderPane; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.mod.ModInfo; import org.jackhuang.hmcl.setting.Theme; @@ -40,7 +40,7 @@ public final class ModItem extends BorderPane { setCenter(modItem); JFXButton btnRemove = new JFXButton(); - FXUtils.installTooltip(btnRemove, Main.i18n("mods.remove")); + FXUtils.installTooltip(btnRemove, Launcher.i18n("mods.remove")); btnRemove.setOnMouseClicked(e -> deleteCallback.accept(this)); btnRemove.getStyleClass().add("toggle-icon4"); BorderPane.setAlignment(btnRemove, Pos.CENTER); @@ -50,7 +50,7 @@ public final class ModItem extends BorderPane { setStyle("-fx-background-radius: 2; -fx-background-color: white; -fx-padding: 8;"); JFXDepthManager.setDepth(this, 1); modItem.setTitle(info.getFileName()); - modItem.setSubtitle(info.getName() + ", " + Main.i18n("archive.version") + ": " + info.getVersion() + ", " + Main.i18n("archive.game_version") + ": " + info.getGameVersion() + ", " + Main.i18n("archive.author") + ": " + info.getAuthors()); + modItem.setSubtitle(info.getName() + ", " + Launcher.i18n("archive.version") + ": " + info.getVersion() + ", " + Launcher.i18n("archive.game_version") + ": " + info.getGameVersion() + ", " + Launcher.i18n("archive.author") + ": " + info.getAuthors()); chkEnabled.setSelected(info.isActive()); chkEnabled.selectedProperty().addListener((a, b, newValue) -> info.activeProperty().set(newValue)); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/ProfilePage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/ProfilePage.java index 1384c1df7..c579d135d 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/ProfilePage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/ProfilePage.java @@ -23,7 +23,7 @@ import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; import javafx.fxml.FXML; import javafx.scene.layout.StackPane; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.setting.Profiles; import org.jackhuang.hmcl.setting.Settings; @@ -54,7 +54,7 @@ public final class ProfilePage extends StackPane implements DecoratorPage { String profileDisplayName = Optional.ofNullable(profile).map(Profiles::getProfileDisplayName).orElse(""); title = new SimpleStringProperty(this, "title", - profile == null ? Main.i18n("profile.new") : Main.i18n("profile") + " - " + profileDisplayName); + profile == null ? Launcher.i18n("profile.new") : Launcher.i18n("profile") + " - " + profileDisplayName); location = new SimpleStringProperty(this, "location", Optional.ofNullable(profile).map(Profile::getGameDir).map(File::getAbsolutePath).orElse("")); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java index 3ae536068..16e28e2ab 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java @@ -34,9 +34,12 @@ import javafx.scene.layout.Pane; import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; import javafx.scene.text.Font; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.setting.*; -import org.jackhuang.hmcl.ui.construct.*; +import org.jackhuang.hmcl.ui.construct.FileItem; +import org.jackhuang.hmcl.ui.construct.FontComboBox; +import org.jackhuang.hmcl.ui.construct.MultiFileItem; +import org.jackhuang.hmcl.ui.construct.Validator; import org.jackhuang.hmcl.ui.wizard.DecoratorPage; import org.jackhuang.hmcl.util.Lang; @@ -46,7 +49,7 @@ import java.util.Collections; import java.util.stream.Collectors; public final class SettingsPage extends StackPane implements DecoratorPage { - private final StringProperty title = new SimpleStringProperty(this, "title", Main.i18n("settings.launcher")); + private final StringProperty title = new SimpleStringProperty(this, "title", Launcher.i18n("settings.launcher")); @FXML private JFXTextField txtProxyHost; @@ -174,12 +177,12 @@ public final class SettingsPage extends StackPane implements DecoratorPage { fileCommonLocation.setProperty(Settings.INSTANCE.commonPathProperty()); - FXUtils.installTooltip(btnUpdate, Main.i18n("update.tooltip")); + FXUtils.installTooltip(btnUpdate, Launcher.i18n("update.tooltip")); checkUpdate(); // background backgroundItem.loadChildren(Collections.singletonList( - backgroundItem.createChildren(Main.i18n("launcher.background.default"), EnumBackgroundImage.DEFAULT) + backgroundItem.createChildren(Launcher.i18n("launcher.background.default"), EnumBackgroundImage.DEFAULT) )); FXUtils.bindString(backgroundItem.getTxtCustom(), Settings.INSTANCE.backgroundImageProperty()); @@ -196,8 +199,8 @@ public final class SettingsPage extends StackPane implements DecoratorPage { // theme JFXColorPicker picker = new JFXColorPicker(Color.web(Settings.INSTANCE.getTheme().getColor()), null); - picker.setCustomColorText(Main.i18n("color.custom")); - picker.setRecentColorsText(Main.i18n("color.recent")); + picker.setCustomColorText(Launcher.i18n("color.custom")); + picker.setRecentColorsText(Launcher.i18n("color.recent")); picker.getCustomColors().setAll(Arrays.stream(Theme.VALUES).map(Theme::getColor).map(Color::web).collect(Collectors.toList())); picker.setOnAction(e -> { Theme theme = Theme.custom(Theme.getColorDisplayName(picker.getValue())); @@ -211,7 +214,7 @@ public final class SettingsPage extends StackPane implements DecoratorPage { private void initBackgroundItemSubtitle() { switch (Settings.INSTANCE.getBackgroundImageType()) { case DEFAULT: - backgroundItem.setSubtitle(Main.i18n("launcher.background.default")); + backgroundItem.setSubtitle(Launcher.i18n("launcher.background.default")); break; case CUSTOM: backgroundItem.setSubtitle(Settings.INSTANCE.getBackgroundImage()); @@ -233,25 +236,25 @@ public final class SettingsPage extends StackPane implements DecoratorPage { } public void checkUpdate() { - btnUpdate.setVisible(Main.UPDATE_CHECKER.isOutOfDate()); + btnUpdate.setVisible(Launcher.UPDATE_CHECKER.isOutOfDate()); - if (Main.UPDATE_CHECKER.isOutOfDate()) { - lblUpdateSub.setText(Main.i18n("update.newest_version", Main.UPDATE_CHECKER.getNewVersion().toString())); + if (Launcher.UPDATE_CHECKER.isOutOfDate()) { + lblUpdateSub.setText(Launcher.i18n("update.newest_version", Launcher.UPDATE_CHECKER.getNewVersion().toString())); lblUpdateSub.getStyleClass().setAll("update-label"); - lblUpdate.setText(Main.i18n("update.found")); + lblUpdate.setText(Launcher.i18n("update.found")); lblUpdate.getStyleClass().setAll("update-label"); } else { - lblUpdateSub.setText(Main.i18n("update.latest")); + lblUpdateSub.setText(Launcher.i18n("update.latest")); lblUpdateSub.getStyleClass().setAll("subtitle-label"); - lblUpdate.setText(Main.i18n("update")); + lblUpdate.setText(Launcher.i18n("update")); lblUpdate.getStyleClass().setAll(); } } @FXML private void onUpdate() { - Main.UPDATE_CHECKER.checkOutdate(); + Launcher.UPDATE_CHECKER.checkOutdate(); } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionItem.java index f18996d27..7843d3d7e 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionItem.java @@ -32,7 +32,7 @@ import javafx.scene.layout.Pane; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.setting.Theme; import java.util.Optional; @@ -73,10 +73,10 @@ public final class VersionItem extends StackPane { btnLaunch.setGraphic(SVG.launch(Theme.blackFillBinding(), 15, 15)); btnScript.setGraphic(SVG.script(Theme.blackFillBinding(), 15, 15)); - FXUtils.installTooltip(btnSettings, Main.i18n("version.settings")); - FXUtils.installTooltip(btnUpdate, Main.i18n("version.update")); - FXUtils.installTooltip(btnLaunch, Main.i18n("version.launch")); - FXUtils.installTooltip(btnScript, Main.i18n("version.launch_script")); + FXUtils.installTooltip(btnSettings, Launcher.i18n("version.settings")); + FXUtils.installTooltip(btnUpdate, Launcher.i18n("version.update")); + FXUtils.installTooltip(btnLaunch, Launcher.i18n("version.launch")); + FXUtils.installTooltip(btnScript, Launcher.i18n("version.launch_script")); icon.translateYProperty().bind(Bindings.createDoubleBinding(() -> header.getBoundsInParent().getHeight() - icon.getHeight() / 2 - 16, header.boundsInParentProperty(), icon.heightProperty())); FXUtils.limitSize(iconView, 32, 32); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionPage.java index a819a94a1..eb66d705f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionPage.java @@ -26,7 +26,7 @@ import javafx.beans.property.StringProperty; import javafx.fxml.FXML; import javafx.scene.control.Tab; import javafx.scene.layout.StackPane; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.download.game.GameAssetIndexDownloadTask; import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.ui.export.ExportWizardProvider; @@ -79,17 +79,17 @@ public final class VersionPage extends StackPane implements DecoratorPage { browsePopup = new JFXPopup(browseList); managementPopup = new JFXPopup(managementList); - FXUtils.installTooltip(btnDelete, Main.i18n("version.manage.remove")); - FXUtils.installTooltip(btnBrowseMenu, Main.i18n("settings.game.exploration")); - FXUtils.installTooltip(btnManagementMenu, Main.i18n("settings.game.management")); - FXUtils.installTooltip(btnExport, Main.i18n("modpack.export")); + FXUtils.installTooltip(btnDelete, Launcher.i18n("version.manage.remove")); + FXUtils.installTooltip(btnBrowseMenu, Launcher.i18n("settings.game.exploration")); + FXUtils.installTooltip(btnManagementMenu, Launcher.i18n("settings.game.management")); + FXUtils.installTooltip(btnExport, Launcher.i18n("modpack.export")); } public void load(String id, Profile profile) { this.version = id; this.profile = profile; - title.set(Main.i18n("settings.game") + " - " + id); + title.set(Launcher.i18n("settings.game") + " - " + id); versionSettingsController.loadVersionSetting(profile, id); modController.setParentTab(tabPane); @@ -185,7 +185,7 @@ public final class VersionPage extends StackPane implements DecoratorPage { } public static void deleteVersion(Profile profile, String version) { - Controllers.confirmDialog(Main.i18n("version.manage.remove.confirm", version), Main.i18n("message.confirm"), () -> { + Controllers.confirmDialog(Launcher.i18n("version.manage.remove.confirm", version), Launcher.i18n("message.confirm"), () -> { if (profile.getRepository().removeVersionFromDisk(version)) { profile.getRepository().refreshVersionsAsync().start(); Controllers.navigate(null); @@ -194,7 +194,7 @@ public final class VersionPage extends StackPane implements DecoratorPage { } public static void renameVersion(Profile profile, String version) { - Controllers.inputDialog(Main.i18n("version.manage.rename.message"), res -> { + Controllers.inputDialog(Launcher.i18n("version.manage.rename.message"), res -> { if (profile.getRepository().renameVersion(version, res)) { profile.getRepository().refreshVersionsAsync().start(); Controllers.navigate(null); @@ -203,6 +203,6 @@ public final class VersionPage extends StackPane implements DecoratorPage { } public static void exportVersion(Profile profile, String version) { - Controllers.getDecorator().startWizard(new ExportWizardProvider(profile, version), Main.i18n("modpack.wizard")); + Controllers.getDecorator().startWizard(new ExportWizardProvider(profile, version), Launcher.i18n("modpack.wizard")); } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionSettingsController.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionSettingsController.java index 13829715c..a62277b82 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionSettingsController.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionSettingsController.java @@ -17,7 +17,10 @@ */ package org.jackhuang.hmcl.ui; -import com.jfoenix.controls.*; +import com.jfoenix.controls.JFXCheckBox; +import com.jfoenix.controls.JFXComboBox; +import com.jfoenix.controls.JFXTextField; +import com.jfoenix.controls.JFXToggleButton; import javafx.application.Platform; import javafx.fxml.FXML; import javafx.scene.Node; @@ -27,7 +30,7 @@ import javafx.scene.control.Toggle; import javafx.scene.image.Image; import javafx.scene.layout.VBox; import javafx.stage.FileChooser; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.setting.EnumGameDirectory; import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.setting.VersionSetting; @@ -77,7 +80,7 @@ public final class VersionSettingsController { @FXML private void initialize() { - lblPhysicalMemory.setText(Main.i18n("settings.physical_memory") + ": " + OperatingSystem.TOTAL_MEMORY + "MB"); + lblPhysicalMemory.setText(Launcher.i18n("settings.physical_memory") + ": " + OperatingSystem.TOTAL_MEMORY + "MB"); FXUtils.smoothScrolling(scroll); @@ -91,13 +94,13 @@ public final class VersionSettingsController { javaItem.getExtensionFilters().add(new FileChooser.ExtensionFilter("Java", "java.exe", "javaw.exe")); gameDirItem.loadChildren(Arrays.asList( - gameDirItem.createChildren(Main.i18n("settings.advanced.game_dir.default"), EnumGameDirectory.ROOT_FOLDER), - gameDirItem.createChildren(Main.i18n("settings.advanced.game_dir.independent"), EnumGameDirectory.VERSION_FOLDER) + gameDirItem.createChildren(Launcher.i18n("settings.advanced.game_dir.default"), EnumGameDirectory.ROOT_FOLDER), + gameDirItem.createChildren(Launcher.i18n("settings.advanced.game_dir.independent"), EnumGameDirectory.VERSION_FOLDER) )); globalItem.loadChildren(Arrays.asList( - globalItem.createChildren(Main.i18n("settings.type.global"), true), - globalItem.createChildren(Main.i18n("settings.type.special"), false) + globalItem.createChildren(Launcher.i18n("settings.type.global"), true), + globalItem.createChildren(Launcher.i18n("settings.type.special"), false) )); } @@ -189,7 +192,7 @@ public final class VersionSettingsController { }); versionSetting.usesGlobalProperty().setChangedListenerAndOperate(it -> - globalItem.setSubtitle(Main.i18n(versionSetting.isUsesGlobal() ? "settings.type.global" : "settings.type.special"))); + globalItem.setSubtitle(Launcher.i18n(versionSetting.isUsesGlobal() ? "settings.type.global" : "settings.type.special"))); gameDirItem.getGroup().getToggles().stream() .filter(it -> it.getUserData() == versionSetting.getGameDirType()) @@ -229,7 +232,7 @@ public final class VersionSettingsController { @FXML private void onExploreIcon() { FileChooser chooser = new FileChooser(); - chooser.getExtensionFilters().add(new FileChooser.ExtensionFilter(Main.i18n("extension.png"), "*.png")); + chooser.getExtensionFilters().add(new FileChooser.ExtensionFilter(Launcher.i18n("extension.png"), "*.png")); File selectedFile = chooser.showOpenDialog(Controllers.getStage()); if (selectedFile != null) { File iconFile = profile.getRepository().getVersionIcon(versionId); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FileItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FileItem.java index 0bbfa6bb9..b80c23113 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FileItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FileItem.java @@ -26,7 +26,7 @@ import javafx.scene.control.Tooltip; import javafx.scene.layout.BorderPane; import javafx.scene.layout.VBox; import javafx.stage.DirectoryChooser; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.setting.Theme; import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.ui.FXUtils; @@ -54,7 +54,7 @@ public class FileItem extends BorderPane { right.setGraphic(SVG.pencil(Theme.blackFillBinding(), 15, 15)); right.getStyleClass().add("toggle-icon4"); right.setOnMouseClicked(e -> onExplore()); - FXUtils.installTooltip(right, Main.i18n("button.edit")); + FXUtils.installTooltip(right, Launcher.i18n("button.edit")); setRight(right); Tooltip tip = new Tooltip(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ImagePickerItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ImagePickerItem.java index ee6932e65..178d6b10a 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ImagePickerItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ImagePickerItem.java @@ -15,7 +15,7 @@ import javafx.scene.input.MouseEvent; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.setting.Theme; import org.jackhuang.hmcl.ui.FXUtils; import org.jackhuang.hmcl.ui.SVG; @@ -41,7 +41,7 @@ public final class ImagePickerItem extends BorderPane { selectButton.onMouseClickedProperty().bind(onSelectButtonClicked); selectButton.getStyleClass().add("toggle-icon4"); - FXUtils.installTooltip(selectButton, Main.i18n("button.edit")); + FXUtils.installTooltip(selectButton, Launcher.i18n("button.edit")); HBox hBox = new HBox(); hBox.getChildren().setAll(imageView, selectButton); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageBox.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageBox.java index 71402e1ad..4d10f1a64 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageBox.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageBox.java @@ -20,7 +20,7 @@ package org.jackhuang.hmcl.ui.construct; import javafx.scene.control.Alert; import javafx.scene.control.ButtonType; import javafx.scene.control.TextInputDialog; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import javax.swing.*; import java.util.Optional; @@ -29,7 +29,7 @@ public final class MessageBox { private MessageBox() { } - private static final String TITLE = Main.i18n("message.info"); + private static final String TITLE = Launcher.i18n("message.info"); /** * User Operation: Yes diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageDialogPane.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageDialogPane.java index 340b4e6ea..ca9d30dec 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageDialogPane.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageDialogPane.java @@ -23,7 +23,7 @@ import javafx.fxml.FXML; import javafx.scene.control.Label; import javafx.scene.layout.HBox; import javafx.scene.layout.StackPane; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.setting.Theme; import org.jackhuang.hmcl.ui.FXUtils; import org.jackhuang.hmcl.ui.SVG; @@ -92,8 +92,8 @@ public final class MessageDialogPane extends StackPane { Optional.ofNullable(onCancel).ifPresent(Runnable::run); }); - acceptButton.setText(Main.i18n("button.yes")); - cancelButton.setText(Main.i18n("button.no")); + acceptButton.setText(Launcher.i18n("button.yes")); + cancelButton.setText(Launcher.i18n("button.no")); actions.getChildren().add(cancelButton); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MultiColorItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MultiColorItem.java index 42285ea61..8e7ec20e3 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MultiColorItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MultiColorItem.java @@ -5,17 +5,15 @@ import com.jfoenix.controls.JFXRadioButton; import javafx.beans.NamedArg; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; -import javafx.geometry.Pos; import javafx.scene.Node; import javafx.scene.control.Label; import javafx.scene.control.Toggle; import javafx.scene.control.ToggleGroup; -import javafx.scene.control.Tooltip; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.ui.FXUtils; import java.util.Collection; @@ -23,8 +21,8 @@ import java.util.Optional; import java.util.function.Consumer; public class MultiColorItem extends ComponentList { - private final StringProperty customTitle = new SimpleStringProperty(this, "customTitle", Main.i18n("selector.custom")); - private final StringProperty chooserTitle = new SimpleStringProperty(this, "chooserTitle", Main.i18n("selector.choose_file")); + private final StringProperty customTitle = new SimpleStringProperty(this, "customTitle", Launcher.i18n("selector.custom")); + private final StringProperty chooserTitle = new SimpleStringProperty(this, "chooserTitle", Launcher.i18n("selector.choose_file")); private final ToggleGroup group = new ToggleGroup(); private final JFXColorPicker colorPicker = new JFXColorPicker(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MultiFileItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MultiFileItem.java index c37fdc6ac..b0d1aa76e 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MultiFileItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MultiFileItem.java @@ -38,7 +38,7 @@ import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.stage.DirectoryChooser; import javafx.stage.FileChooser; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.setting.Theme; import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.ui.FXUtils; @@ -49,8 +49,8 @@ import java.util.Collection; import java.util.function.Consumer; public class MultiFileItem extends ComponentList { - private final StringProperty customTitle = new SimpleStringProperty(this, "customTitle", Main.i18n("selector.custom")); - private final StringProperty chooserTitle = new SimpleStringProperty(this, "chooserTitle", Main.i18n("selector.choose_file")); + private final StringProperty customTitle = new SimpleStringProperty(this, "customTitle", Launcher.i18n("selector.custom")); + private final StringProperty chooserTitle = new SimpleStringProperty(this, "chooserTitle", Launcher.i18n("selector.choose_file")); private final BooleanProperty directory = new SimpleBooleanProperty(this, "directory", false); private final SimpleStringProperty tooltip = new SimpleStringProperty(this, "tooltip"); private final ObservableList extensionFilters = FXCollections.observableArrayList(); @@ -153,7 +153,7 @@ public class MultiFileItem extends ComponentList { public void onExploreJavaDir() { DirectoryChooser chooser = new DirectoryChooser(); - chooser.setTitle(Main.i18n(getChooserTitle())); + chooser.setTitle(Launcher.i18n(getChooserTitle())); File selectedDir = chooser.showDialog(Controllers.getStage()); if (selectedDir != null) txtCustom.setText(selectedDir.getAbsolutePath()); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TaskExecutorDialogWizardDisplayer.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TaskExecutorDialogWizardDisplayer.java index f79b14805..6394fb4a9 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TaskExecutorDialogWizardDisplayer.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TaskExecutorDialogWizardDisplayer.java @@ -19,7 +19,7 @@ package org.jackhuang.hmcl.ui.construct; import com.jfoenix.concurrency.JFXUtilities; import javafx.beans.property.StringProperty; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.task.TaskExecutor; import org.jackhuang.hmcl.task.TaskListener; @@ -38,7 +38,7 @@ public interface TaskExecutorDialogWizardDisplayer extends AbstractWizardDisplay Controllers.navigate(null); }); - pane.setTitle(Main.i18n("message.doing")); + pane.setTitle(Launcher.i18n("message.doing")); pane.setProgress(Double.MAX_VALUE); if (settings.containsKey("title")) { Object title = settings.get("title"); @@ -64,7 +64,7 @@ public interface TaskExecutorDialogWizardDisplayer extends AbstractWizardDisplay if (settings.containsKey("success_message") && settings.get("success_message") instanceof String) JFXUtilities.runInFX(() -> Controllers.dialog((String) settings.get("success_message"), null, MessageBox.FINE_MESSAGE, () -> Controllers.navigate(null))); else if (!settings.containsKey("forbid_success_message")) - JFXUtilities.runInFX(() -> Controllers.dialog(Main.i18n("message.success"), null, MessageBox.FINE_MESSAGE, () -> Controllers.navigate(null))); + JFXUtilities.runInFX(() -> Controllers.dialog(Launcher.i18n("message.success"), null, MessageBox.FINE_MESSAGE, () -> Controllers.navigate(null))); } else { if (executor.getLastException() == null) return; @@ -72,7 +72,7 @@ public interface TaskExecutorDialogWizardDisplayer extends AbstractWizardDisplay if (settings.containsKey("failure_message") && settings.get("failure_message") instanceof String) JFXUtilities.runInFX(() -> Controllers.dialog(appendix, (String) settings.get("failure_message"), MessageBox.ERROR_MESSAGE, () -> Controllers.navigate(null))); else if (!settings.containsKey("forbid_failure_message")) - JFXUtilities.runInFX(() -> Controllers.dialog(appendix, Main.i18n("wizard.failed"), MessageBox.ERROR_MESSAGE, () -> Controllers.navigate(null))); + JFXUtilities.runInFX(() -> Controllers.dialog(appendix, Launcher.i18n("wizard.failed"), MessageBox.ERROR_MESSAGE, () -> Controllers.navigate(null))); } } }); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TaskListPane.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TaskListPane.java index 9d5c7c2a6..40bdbb3bd 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TaskListPane.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TaskListPane.java @@ -23,7 +23,7 @@ import javafx.scene.control.Label; import javafx.scene.layout.BorderPane; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.download.forge.ForgeInstallTask; import org.jackhuang.hmcl.download.game.GameAssetDownloadTask; import org.jackhuang.hmcl.download.game.GameAssetRefreshTask; @@ -62,29 +62,29 @@ public final class TaskListPane extends StackPane { return; if (task instanceof GameAssetRefreshTask) { - task.setName(Main.i18n("assets.download")); + task.setName(Launcher.i18n("assets.download")); } else if (task instanceof GameAssetDownloadTask) { - task.setName(Main.i18n("assets.download_all")); + task.setName(Launcher.i18n("assets.download_all")); } else if (task instanceof ForgeInstallTask) { - task.setName(Main.i18n("install.installer.install", Main.i18n("install.installer.forge"))); + task.setName(Launcher.i18n("install.installer.install", Launcher.i18n("install.installer.forge"))); } else if (task instanceof LiteLoaderInstallTask) { - task.setName(Main.i18n("install.installer.install", Main.i18n("install.installer.liteloader"))); + task.setName(Launcher.i18n("install.installer.install", Launcher.i18n("install.installer.liteloader"))); } else if (task instanceof OptiFineInstallTask) { - task.setName(Main.i18n("install.installer.install", Main.i18n("install.installer.optifine"))); + task.setName(Launcher.i18n("install.installer.install", Launcher.i18n("install.installer.optifine"))); } else if (task instanceof CurseCompletionTask) { - task.setName(Main.i18n("modpack.type.curse.completion")); + task.setName(Launcher.i18n("modpack.type.curse.completion")); } else if (task instanceof ModpackInstallTask) { - task.setName(Main.i18n("modpack.installing")); + task.setName(Launcher.i18n("modpack.installing")); } else if (task instanceof CurseInstallTask) { - task.setName(Main.i18n("modpack.install", Main.i18n("modpack.type.curse"))); + task.setName(Launcher.i18n("modpack.install", Launcher.i18n("modpack.type.curse"))); } else if (task instanceof MultiMCModpackInstallTask) { - task.setName(Main.i18n("modpack.install", Main.i18n("modpack.type.multimc"))); + task.setName(Launcher.i18n("modpack.install", Launcher.i18n("modpack.type.multimc"))); } else if (task instanceof HMCLModpackInstallTask) { - task.setName(Main.i18n("modpack.install", Main.i18n("modpack.type.hmcl"))); + task.setName(Launcher.i18n("modpack.install", Launcher.i18n("modpack.type.hmcl"))); } else if (task instanceof HMCLModpackExportTask) { - task.setName(Main.i18n("modpack.export")); + task.setName(Launcher.i18n("modpack.export")); } else if (task instanceof MinecraftInstanceTask) { - task.setName(Main.i18n("modpack.scan")); + task.setName(Launcher.i18n("modpack.scan")); } ProgressListNode node = new ProgressListNode(task); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AdditionalInstallersPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AdditionalInstallersPage.java index 597a9f2a9..71d2c9f28 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AdditionalInstallersPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AdditionalInstallersPage.java @@ -22,7 +22,7 @@ import javafx.fxml.FXML; import javafx.scene.control.Label; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.RemoteVersion; import org.jackhuang.hmcl.game.GameRepository; @@ -34,7 +34,7 @@ import org.jackhuang.hmcl.util.Lang; import java.util.Map; import java.util.Optional; -import static org.jackhuang.hmcl.Main.i18n; +import static org.jackhuang.hmcl.Launcher.i18n; class AdditionalInstallersPage extends StackPane implements WizardPage { private final InstallerWizardProvider provider; @@ -100,7 +100,7 @@ class AdditionalInstallersPage extends StackPane implements WizardPage { @Override public String getTitle() { - return Main.i18n("settings.tabs.installers"); + return Launcher.i18n("settings.tabs.installers"); } private String getVersion(String id) { @@ -109,24 +109,24 @@ class AdditionalInstallersPage extends StackPane implements WizardPage { @Override public void onNavigate(Map settings) { - lblGameVersion.setText(Main.i18n("install.new_game.current_game_version") + ": " + provider.getGameVersion()); + lblGameVersion.setText(Launcher.i18n("install.new_game.current_game_version") + ": " + provider.getGameVersion()); btnForge.setDisable(provider.getForge() != null); if (provider.getForge() != null || controller.getSettings().containsKey("forge")) - lblForge.setText(Main.i18n("install.installer.version", Main.i18n("install.installer.forge")) + ": " + Lang.nonNull(provider.getForge(), getVersion("forge"))); + lblForge.setText(Launcher.i18n("install.installer.version", Launcher.i18n("install.installer.forge")) + ": " + Lang.nonNull(provider.getForge(), getVersion("forge"))); else - lblForge.setText(Main.i18n("install.installer.not_installed", Main.i18n("install.installer.forge"))); + lblForge.setText(Launcher.i18n("install.installer.not_installed", Launcher.i18n("install.installer.forge"))); btnLiteLoader.setDisable(provider.getLiteLoader() != null); if (provider.getLiteLoader() != null || controller.getSettings().containsKey("liteloader")) - lblLiteLoader.setText(Main.i18n("install.installer.version", Main.i18n("install.installer.liteloader")) + ": " + Lang.nonNull(provider.getLiteLoader(), getVersion("liteloader"))); + lblLiteLoader.setText(Launcher.i18n("install.installer.version", Launcher.i18n("install.installer.liteloader")) + ": " + Lang.nonNull(provider.getLiteLoader(), getVersion("liteloader"))); else - lblLiteLoader.setText(Main.i18n("install.installer.not_installed", Main.i18n("install.installer.liteloader"))); + lblLiteLoader.setText(Launcher.i18n("install.installer.not_installed", Launcher.i18n("install.installer.liteloader"))); btnOptiFine.setDisable(provider.getOptiFine() != null); if (provider.getOptiFine() != null || controller.getSettings().containsKey("optifine")) - lblOptiFine.setText(Main.i18n("install.installer.version", Main.i18n("install.installer.optifine")) + ": " + Lang.nonNull(provider.getOptiFine(), getVersion("optifine"))); + lblOptiFine.setText(Launcher.i18n("install.installer.version", Launcher.i18n("install.installer.optifine")) + ": " + Lang.nonNull(provider.getOptiFine(), getVersion("optifine"))); else - lblOptiFine.setText(Main.i18n("install.installer.not_installed", Main.i18n("install.installer.optifine"))); + lblOptiFine.setText(Launcher.i18n("install.installer.not_installed", Launcher.i18n("install.installer.optifine"))); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadWizardProvider.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadWizardProvider.java index 2c3787c8d..b4f0ea869 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadWizardProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadWizardProvider.java @@ -18,7 +18,7 @@ package org.jackhuang.hmcl.ui.download; import javafx.scene.Node; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.GameBuilder; import org.jackhuang.hmcl.download.RemoteVersion; @@ -34,7 +34,7 @@ import org.jackhuang.hmcl.util.Lang; import java.io.File; import java.util.Map; -import static org.jackhuang.hmcl.Main.i18n; +import static org.jackhuang.hmcl.Launcher.i18n; public final class DownloadWizardProvider implements WizardProvider { private Profile profile; @@ -77,8 +77,8 @@ public final class DownloadWizardProvider implements WizardProvider { @Override public Object finish(Map settings) { - settings.put("success_message", Main.i18n("install.success")); - settings.put("failure_message", Main.i18n("install.failed")); + settings.put("success_message", Launcher.i18n("install.success")); + settings.put("failure_message", Launcher.i18n("install.failed")); switch (Lang.parseInt(settings.get(InstallTypePage.INSTALL_TYPE), -1)) { case 0: return finishVersionDownloadingAsync(settings); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallTypePage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallTypePage.java index 2445e59a2..43c3a1379 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallTypePage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallTypePage.java @@ -20,7 +20,7 @@ package org.jackhuang.hmcl.ui.download; import com.jfoenix.controls.JFXListView; import javafx.fxml.FXML; import javafx.scene.layout.StackPane; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.ui.FXUtils; import org.jackhuang.hmcl.ui.wizard.WizardController; import org.jackhuang.hmcl.ui.wizard.WizardPage; @@ -51,7 +51,7 @@ public final class InstallTypePage extends StackPane implements WizardPage { @Override public String getTitle() { - return Main.i18n("install.select"); + return Launcher.i18n("install.select"); } public static final String INSTALL_TYPE = "INSTALL_TYPE"; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallerWizardProvider.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallerWizardProvider.java index 9272dc7e3..d8e77a3b7 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallerWizardProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallerWizardProvider.java @@ -18,7 +18,7 @@ package org.jackhuang.hmcl.ui.download; import javafx.scene.Node; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.download.BMCLAPIDownloadProvider; import org.jackhuang.hmcl.download.RemoteVersion; import org.jackhuang.hmcl.game.Version; @@ -80,8 +80,8 @@ public final class InstallerWizardProvider implements WizardProvider { @Override public Object finish(Map settings) { - settings.put("success_message", Main.i18n("install.success")); - settings.put("failure_message", Main.i18n("install.failed")); + settings.put("success_message", Launcher.i18n("install.success")); + settings.put("failure_message", Launcher.i18n("install.failed")); Task ret = Task.empty(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallersPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallersPage.java index 6f81fc2bb..32a07ebcc 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallersPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallersPage.java @@ -23,7 +23,7 @@ import javafx.fxml.FXML; import javafx.scene.control.Label; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.RemoteVersion; import org.jackhuang.hmcl.game.GameRepository; @@ -34,7 +34,6 @@ import org.jackhuang.hmcl.ui.wizard.WizardPage; import org.jackhuang.hmcl.util.StringUtils; import java.util.Map; -import java.util.Optional; public class InstallersPage extends StackPane implements WizardPage { private final WizardController controller; @@ -80,30 +79,30 @@ public class InstallersPage extends StackPane implements WizardPage { String gameVersion = ((RemoteVersion) controller.getSettings().get("game")).getGameVersion(); Validator hasVersion = new Validator(s -> !repository.hasVersion(s) && StringUtils.isNotBlank(s)); - hasVersion.setMessage(Main.i18n("install.new_game.already_exists")); + hasVersion.setMessage(Launcher.i18n("install.new_game.already_exists")); txtName.getValidators().add(hasVersion); txtName.textProperty().addListener(e -> btnInstall.setDisable(!txtName.validate())); txtName.setText(gameVersion); btnForge.setOnMouseClicked(e -> { controller.getSettings().put(INSTALLER_TYPE, 0); - controller.onNext(new VersionsPage(controller, Main.i18n("install.installer.choose", Main.i18n("install.installer.forge")), gameVersion, downloadProvider, "forge", () -> controller.onPrev(false))); + controller.onNext(new VersionsPage(controller, Launcher.i18n("install.installer.choose", Launcher.i18n("install.installer.forge")), gameVersion, downloadProvider, "forge", () -> controller.onPrev(false))); }); btnLiteLoader.setOnMouseClicked(e -> { controller.getSettings().put(INSTALLER_TYPE, 1); - controller.onNext(new VersionsPage(controller, Main.i18n("install.installer.choose", Main.i18n("install.installer.liteloader")), gameVersion, downloadProvider, "liteloader", () -> controller.onPrev(false))); + controller.onNext(new VersionsPage(controller, Launcher.i18n("install.installer.choose", Launcher.i18n("install.installer.liteloader")), gameVersion, downloadProvider, "liteloader", () -> controller.onPrev(false))); }); btnOptiFine.setOnMouseClicked(e -> { controller.getSettings().put(INSTALLER_TYPE, 2); - controller.onNext(new VersionsPage(controller, Main.i18n("install.installer.choose", Main.i18n("install.installer.optifine")), gameVersion, downloadProvider, "optifine", () -> controller.onPrev(false))); + controller.onNext(new VersionsPage(controller, Launcher.i18n("install.installer.choose", Launcher.i18n("install.installer.optifine")), gameVersion, downloadProvider, "optifine", () -> controller.onPrev(false))); }); } @Override public String getTitle() { - return Main.i18n("install.new_game"); + return Launcher.i18n("install.new_game"); } private String getVersion(String id) { @@ -112,21 +111,21 @@ public class InstallersPage extends StackPane implements WizardPage { @Override public void onNavigate(Map settings) { - lblGameVersion.setText(Main.i18n("install.new_game.current_game_version") + ": " + getVersion("game")); + lblGameVersion.setText(Launcher.i18n("install.new_game.current_game_version") + ": " + getVersion("game")); if (controller.getSettings().containsKey("forge")) - lblForge.setText(Main.i18n("install.installer.version", Main.i18n("install.installer.forge")) + ": " + getVersion("forge")); + lblForge.setText(Launcher.i18n("install.installer.version", Launcher.i18n("install.installer.forge")) + ": " + getVersion("forge")); else - lblForge.setText(Main.i18n("install.installer.not_installed", Main.i18n("install.installer.forge"))); + lblForge.setText(Launcher.i18n("install.installer.not_installed", Launcher.i18n("install.installer.forge"))); if (controller.getSettings().containsKey("liteloader")) - lblLiteLoader.setText(Main.i18n("install.installer.version", Main.i18n("install.installer.liteloader")) + ": " + getVersion("liteloader")); + lblLiteLoader.setText(Launcher.i18n("install.installer.version", Launcher.i18n("install.installer.liteloader")) + ": " + getVersion("liteloader")); else - lblLiteLoader.setText(Main.i18n("install.installer.not_installed", Main.i18n("install.installer.liteloader"))); + lblLiteLoader.setText(Launcher.i18n("install.installer.not_installed", Launcher.i18n("install.installer.liteloader"))); if (controller.getSettings().containsKey("optifine")) - lblOptiFine.setText(Main.i18n("install.installer.version", Main.i18n("install.installer.optifine")) + ": " + getVersion("optifine")); + lblOptiFine.setText(Launcher.i18n("install.installer.version", Launcher.i18n("install.installer.optifine")) + ": " + getVersion("optifine")); else - lblOptiFine.setText(Main.i18n("install.installer.not_installed", Main.i18n("install.installer.optifine"))); + lblOptiFine.setText(Launcher.i18n("install.installer.not_installed", Launcher.i18n("install.installer.optifine"))); } @Override diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackPage.java index 072f55ff5..28853e893 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackPage.java @@ -25,7 +25,7 @@ import javafx.scene.control.Label; import javafx.scene.layout.Region; import javafx.scene.layout.StackPane; import javafx.stage.FileChooser; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.game.ModpackHelper; import org.jackhuang.hmcl.mod.Modpack; import org.jackhuang.hmcl.mod.UnsupportedModpackException; @@ -75,16 +75,16 @@ public final class ModpackPage extends StackPane implements WizardPage { Profile profile = (Profile) controller.getSettings().get("PROFILE"); FileChooser chooser = new FileChooser(); - chooser.setTitle(Main.i18n("modpack.choose")); - chooser.getExtensionFilters().add(new FileChooser.ExtensionFilter(Main.i18n("modpack"), "*.zip")); + chooser.setTitle(Launcher.i18n("modpack.choose")); + chooser.getExtensionFilters().add(new FileChooser.ExtensionFilter(Launcher.i18n("modpack"), "*.zip")); File selectedFile = chooser.showOpenDialog(Controllers.getStage()); if (selectedFile == null) Platform.runLater(() -> Controllers.navigate(null)); else { controller.getSettings().put(MODPACK_FILE, selectedFile); lblModpackLocation.setText(selectedFile.getAbsolutePath()); txtModpackName.getValidators().addAll( - new Validator(Main.i18n("install.new_game.already_exists"), str -> !profile.getRepository().hasVersion(str) && StringUtils.isNotBlank(str)), - new Validator(Main.i18n("version.forbidden_name"), str -> !profile.getRepository().forbidsVersion(str)) + new Validator(Launcher.i18n("install.new_game.already_exists"), str -> !profile.getRepository().hasVersion(str) && StringUtils.isNotBlank(str)), + new Validator(Launcher.i18n("version.forbidden_name"), str -> !profile.getRepository().forbidsVersion(str)) ); txtModpackName.textProperty().addListener(e -> btnInstall.setDisable(!txtModpackName.validate())); @@ -96,7 +96,7 @@ public final class ModpackPage extends StackPane implements WizardPage { lblAuthor.setText(manifest.getAuthor()); txtModpackName.setText(manifest.getName() + (StringUtils.isBlank(manifest.getVersion()) ? "" : "-" + manifest.getVersion())); } catch (UnsupportedModpackException e) { - txtModpackName.setText(Main.i18n("modpack.task.install.error")); + txtModpackName.setText(Launcher.i18n("modpack.task.install.error")); } } } @@ -118,14 +118,14 @@ public final class ModpackPage extends StackPane implements WizardPage { if (manifest != null) { WebStage stage = new WebStage(); stage.getWebView().getEngine().loadContent(manifest.getDescription()); - stage.setTitle(Main.i18n("modpack.wizard.step.3")); + stage.setTitle(Launcher.i18n("modpack.wizard.step.3")); stage.showAndWait(); } } @Override public String getTitle() { - return Main.i18n("modpack.task.install"); + return Launcher.i18n("modpack.task.install"); } public static final String MODPACK_FILE = "MODPACK_FILE"; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VersionsPageItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VersionsPageItem.java index 99ecf5571..79f2633fc 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VersionsPageItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VersionsPageItem.java @@ -23,7 +23,7 @@ import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.HBox; import javafx.scene.layout.StackPane; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.download.RemoteVersion; import org.jackhuang.hmcl.download.game.GameRemoteVersionTag; import org.jackhuang.hmcl.download.liteloader.LiteLoaderRemoteVersionTag; @@ -57,15 +57,15 @@ public final class VersionsPageItem extends StackPane { if (remoteVersion.getTag() instanceof GameRemoteVersionTag) { switch (((GameRemoteVersionTag) remoteVersion.getTag()).getType()) { case RELEASE: - lblGameVersion.setText(Main.i18n("version.game.release")); + lblGameVersion.setText(Launcher.i18n("version.game.release")); imageView.setImage(new Image("/assets/img/icon.png", 32, 32, false, true)); break; case SNAPSHOT: - lblGameVersion.setText(Main.i18n("version.game.snapshot")); + lblGameVersion.setText(Launcher.i18n("version.game.snapshot")); imageView.setImage(new Image("/assets/img/command.png", 32, 32, false, true)); break; default: - lblGameVersion.setText(Main.i18n("version.game.old")); + lblGameVersion.setText(Launcher.i18n("version.game.old")); imageView.setImage(new Image("/assets/img/grass.png", 32, 32, false, true)); break; } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ModpackFileSelectionPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ModpackFileSelectionPage.java index 82cb9f1b4..3c46bf7c9 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ModpackFileSelectionPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ModpackFileSelectionPage.java @@ -25,7 +25,7 @@ import javafx.scene.control.Label; import javafx.scene.control.TreeItem; import javafx.scene.layout.HBox; import javafx.scene.layout.StackPane; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.game.ModAdviser; import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.ui.FXUtils; @@ -147,23 +147,23 @@ public final class ModpackFileSelectionPage extends StackPane implements WizardP @Override public String getTitle() { - return Main.i18n("modpack.wizard.step.2.title"); + return Launcher.i18n("modpack.wizard.step.2.title"); } public static final String MODPACK_FILE_SELECTION = "modpack.accepted"; private static final Map TRANSLATION = Lang.mapOf( - new Pair<>("minecraft/servers.dat", Main.i18n("modpack.files.servers_dat")), - new Pair<>("minecraft/saves", Main.i18n("modpack.files.saves")), - new Pair<>("minecraft/mods", Main.i18n("modpack.files.mods")), - new Pair<>("minecraft/config", Main.i18n("modpack.files.config")), - new Pair<>("minecraft/liteconfig", Main.i18n("modpack.files.liteconfig")), - new Pair<>("minecraft/resourcepacks", Main.i18n("modpack.files.resourcepacks")), - new Pair<>("minecraft/resources", Main.i18n("modpack.files.resourcepacks")), - new Pair<>("minecraft/options.txt", Main.i18n("modpack.files.options_txt")), - new Pair<>("minecraft/optionsshaders.txt", Main.i18n("modpack.files.optionsshaders_txt")), - new Pair<>("minecraft/mods/VoxelMods", Main.i18n("modpack.files.mods.voxelmods")), - new Pair<>("minecraft/dumps", Main.i18n("modpack.files.dumps")), - new Pair<>("minecraft/blueprints", Main.i18n("modpack.files.blueprints")), - new Pair<>("minecraft/scripts", Main.i18n("modpack.files.scripts")) + new Pair<>("minecraft/servers.dat", Launcher.i18n("modpack.files.servers_dat")), + new Pair<>("minecraft/saves", Launcher.i18n("modpack.files.saves")), + new Pair<>("minecraft/mods", Launcher.i18n("modpack.files.mods")), + new Pair<>("minecraft/config", Launcher.i18n("modpack.files.config")), + new Pair<>("minecraft/liteconfig", Launcher.i18n("modpack.files.liteconfig")), + new Pair<>("minecraft/resourcepacks", Launcher.i18n("modpack.files.resourcepacks")), + new Pair<>("minecraft/resources", Launcher.i18n("modpack.files.resourcepacks")), + new Pair<>("minecraft/options.txt", Launcher.i18n("modpack.files.options_txt")), + new Pair<>("minecraft/optionsshaders.txt", Launcher.i18n("modpack.files.optionsshaders_txt")), + new Pair<>("minecraft/mods/VoxelMods", Launcher.i18n("modpack.files.mods.voxelmods")), + new Pair<>("minecraft/dumps", Launcher.i18n("modpack.files.dumps")), + new Pair<>("minecraft/blueprints", Launcher.i18n("modpack.files.blueprints")), + new Pair<>("minecraft/scripts", Launcher.i18n("modpack.files.scripts")) ); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ModpackInfoPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ModpackInfoPage.java index 3911c154e..e903d6f5d 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ModpackInfoPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ModpackInfoPage.java @@ -26,7 +26,7 @@ import javafx.scene.control.Label; import javafx.scene.control.ScrollPane; import javafx.scene.layout.StackPane; import javafx.stage.FileChooser; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.auth.Account; import org.jackhuang.hmcl.setting.Settings; import org.jackhuang.hmcl.ui.Controllers; @@ -72,8 +72,8 @@ public final class ModpackInfoPage extends StackPane implements WizardPage { @FXML private void onNext() { FileChooser fileChooser = new FileChooser(); - fileChooser.setTitle(Main.i18n("modpack.wizard.step.initialization.save")); - fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter(Main.i18n("modpack"), "*.zip")); + fileChooser.setTitle(Launcher.i18n("modpack.wizard.step.initialization.save")); + fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter(Launcher.i18n("modpack"), "*.zip")); File file = fileChooser.showSaveDialog(Controllers.getStage()); if (file == null) { Controllers.navigate(null); @@ -100,7 +100,7 @@ public final class ModpackInfoPage extends StackPane implements WizardPage { @Override public String getTitle() { - return Main.i18n("modpack.wizard.step.1.title"); + return Launcher.i18n("modpack.wizard.step.1.title"); } public static final String MODPACK_NAME = "modpack.name"; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/AppDataUpgrader.java b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/AppDataUpgrader.java index 12df8ecb2..c92185bd1 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/AppDataUpgrader.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/AppDataUpgrader.java @@ -18,9 +18,8 @@ package org.jackhuang.hmcl.upgrade; import com.google.gson.JsonParseException; -import com.google.gson.JsonSyntaxException; import com.google.gson.reflect.TypeToken; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.task.FileDownloadTask; import org.jackhuang.hmcl.task.Schedulers; import org.jackhuang.hmcl.task.Task; @@ -100,15 +99,15 @@ public class AppDataUpgrader extends IUpgrader { checker.requestDownloadLink().then(Task.of(Schedulers.javafx(), variables -> { Map map = variables.get(UpdateChecker.REQUEST_DOWNLOAD_LINK_ID); - if (MessageBox.confirm(Main.i18n("update.newest_version") + version.toString() + "\n" - + Main.i18n("update.should_open_link"), + if (MessageBox.confirm(Launcher.i18n("update.newest_version") + version.toString() + "\n" + + Launcher.i18n("update.should_open_link"), MessageBox.YES_NO_OPTION) == MessageBox.YES_OPTION) if (map != null && map.containsKey("jar") && !StringUtils.isBlank(map.get("jar"))) try { String hash = null; if (map.containsKey("jarsha1")) hash = map.get("jarsha1"); - Controllers.dialog(Main.i18n("message.downloading")); + Controllers.dialog(Launcher.i18n("message.downloading")); if (new AppDataUpgraderJarTask(NetworkUtils.toURL(map.get("jar")), version.toString(), hash).test()) { new ProcessBuilder(JavaVersion.fromCurrentEnvironment().getBinary().getAbsolutePath(), "-jar", AppDataUpgraderJarTask.getSelf(version.toString()).getAbsolutePath()) .directory(new File("").getAbsoluteFile()).start(); @@ -123,7 +122,7 @@ public class AppDataUpgrader extends IUpgrader { String hash = null; if (map.containsKey("packsha1")) hash = map.get("packsha1"); - Controllers.dialog(Main.i18n("message.downloading")); + Controllers.dialog(Launcher.i18n("message.downloading")); if (new AppDataUpgraderPackGzTask(NetworkUtils.toURL(map.get("pack")), version.toString(), hash).test()) { new ProcessBuilder(JavaVersion.fromCurrentEnvironment().getBinary().getAbsolutePath(), "-jar", AppDataUpgraderPackGzTask.getSelf(version.toString()).getAbsolutePath()) .directory(new File("").getAbsoluteFile()).start(); @@ -134,20 +133,20 @@ public class AppDataUpgrader extends IUpgrader { Logging.LOG.log(Level.SEVERE, "Failed to create upgrader", ex); } else { - String url = Main.PUBLISH; + String url = Launcher.PUBLISH; if (map != null) if (map.containsKey(OperatingSystem.CURRENT_OS.getCheckedName())) url = map.get(OperatingSystem.CURRENT_OS.getCheckedName()); else if (map.containsKey(OperatingSystem.UNKNOWN.getCheckedName())) url = map.get(OperatingSystem.UNKNOWN.getCheckedName()); if (url == null) - url = Main.PUBLISH; + url = Launcher.PUBLISH; try { java.awt.Desktop.getDesktop().browse(new URI(url)); } catch (URISyntaxException | IOException e) { Logging.LOG.log(Level.SEVERE, "Failed to browse uri: " + url, e); OperatingSystem.setClipboard(url); - MessageBox.show(Main.i18n("update.no_browser")); + MessageBox.show(Launcher.i18n("update.no_browser")); } } })).start(); @@ -155,7 +154,7 @@ public class AppDataUpgrader extends IUpgrader { public static class AppDataUpgraderPackGzTask extends Task { - public static final File BASE_FOLDER = Main.HMCL_DIRECTORY; + public static final File BASE_FOLDER = Launcher.HMCL_DIRECTORY; public static final File HMCL_VER_FILE = new File(BASE_FOLDER, "hmclver.json"); public static File getSelf(String ver) { @@ -205,7 +204,7 @@ public class AppDataUpgrader extends IUpgrader { public static class AppDataUpgraderJarTask extends Task { - public static final File BASE_FOLDER = Main.getWorkingDirectory("hmcl"); + public static final File BASE_FOLDER = Launcher.getWorkingDirectory("hmcl"); public static final File HMCL_VER_FILE = new File(BASE_FOLDER, "hmclver.json"); public static File getSelf(String ver) { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/NewFileUpgrader.java b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/NewFileUpgrader.java index 728626a0a..5437a0c01 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/NewFileUpgrader.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/NewFileUpgrader.java @@ -17,7 +17,7 @@ */ package org.jackhuang.hmcl.upgrade; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.task.FileDownloadTask; import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.util.Charsets; @@ -51,7 +51,7 @@ public class NewFileUpgrader extends IUpgrader { URL url = requestDownloadLink(); if (url == null) return; File newf = new File(url.getFile()); - Controllers.dialog(Main.i18n("message.downloading")); + Controllers.dialog(Launcher.i18n("message.downloading")); if (new FileDownloadTask(url, newf).test()) { try { new ProcessBuilder(newf.getCanonicalPath(), "--removeOldLauncher", getRealPath()) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateChecker.java b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateChecker.java index 9e209b655..ff860ffdf 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateChecker.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateChecker.java @@ -18,7 +18,7 @@ package org.jackhuang.hmcl.upgrade; import com.google.gson.JsonSyntaxException; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.event.Event; import org.jackhuang.hmcl.event.EventBus; import org.jackhuang.hmcl.event.OutOfDateEvent; @@ -67,18 +67,18 @@ public final class UpdateChecker { return new TaskResult() { @Override public void execute() throws Exception { - if (Main.VERSION.contains("@")) + if (Launcher.VERSION.contains("@")) return; if (value == null) { - versionString = NetworkUtils.doGet(NetworkUtils.toURL("http://huangyuhui.duapp.com/hmcl/update.php?version=" + Main.VERSION)); + versionString = NetworkUtils.doGet(NetworkUtils.toURL("http://huangyuhui.duapp.com/hmcl/update.php?version=" + Launcher.VERSION)); value = VersionNumber.asVersion(versionString); } if (value == null) { Logging.LOG.warning("Unable to check update..."); if (showMessage) - MessageBox.show(Main.i18n("update.failed")); + MessageBox.show(Launcher.i18n("update.failed")); } else if (base.compareTo(value) < 0) outOfDate = true; if (outOfDate) @@ -134,7 +134,7 @@ public final class UpdateChecker { public void checkOutdate() { if (outOfDate) if (EventBus.EVENT_BUS.fireEvent(new OutOfDateEvent(this, getNewVersion())) != Event.Result.DENY) { - Main.UPGRADER.download(this, getNewVersion()); + Launcher.UPGRADER.download(this, getNewVersion()); } } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/CrashReporter.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/CrashReporter.java index b927743f8..a42ddce13 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/CrashReporter.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/CrashReporter.java @@ -18,7 +18,7 @@ package org.jackhuang.hmcl.util; import javafx.application.Platform; -import org.jackhuang.hmcl.Main; +import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.ui.CrashWindow; import org.jackhuang.hmcl.ui.construct.MessageBox; @@ -36,15 +36,15 @@ public class CrashReporter implements Thread.UncaughtExceptionHandler { private static final HashMap SOURCE = new HashMap() { { - put("javafx.fxml.LoadException", Main.i18n("crash.NoClassDefFound")); - put("UnsatisfiedLinkError", Main.i18n("crash.user_fault")); - put("java.lang.NoClassDefFoundError", Main.i18n("crash.NoClassDefFound")); - put("java.lang.VerifyError", Main.i18n("crash.NoClassDefFound")); - put("java.lang.NoSuchMethodError", Main.i18n("crash.NoClassDefFound")); - put("java.lang.IncompatibleClassChangeError", Main.i18n("crash.NoClassDefFound")); - put("java.lang.ClassFormatError", Main.i18n("crash.NoClassDefFound")); + put("javafx.fxml.LoadException", Launcher.i18n("crash.NoClassDefFound")); + put("UnsatisfiedLinkError", Launcher.i18n("crash.user_fault")); + put("java.lang.NoClassDefFoundError", Launcher.i18n("crash.NoClassDefFound")); + put("java.lang.VerifyError", Launcher.i18n("crash.NoClassDefFound")); + put("java.lang.NoSuchMethodError", Launcher.i18n("crash.NoClassDefFound")); + put("java.lang.IncompatibleClassChangeError", Launcher.i18n("crash.NoClassDefFound")); + put("java.lang.ClassFormatError", Launcher.i18n("crash.NoClassDefFound")); put("java.lang.OutOfMemoryError", "FUCKING MEMORY LIMIT!"); - put("Trampoline", Main.i18n("launcher.update_java")); + put("Trampoline", Launcher.i18n("launcher.update_java")); put("NoSuchAlgorithmException", "Has your operating system been installed completely or is a ghost system?"); } }; @@ -80,7 +80,7 @@ public class CrashReporter implements Thread.UncaughtExceptionHandler { try { StringBuilder builder = new StringBuilder(); builder.append("---- Hello Minecraft! Crash Report ----\n"); - builder.append(" Version: " + Main.VERSION + "\n"); + builder.append(" Version: " + Launcher.VERSION + "\n"); builder.append(" Time: ").append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())).append("\n"); builder.append(" Thread: ").append(t.toString()).append("\n"); builder.append("\n Content: \n "); @@ -95,7 +95,7 @@ public class CrashReporter implements Thread.UncaughtExceptionHandler { if (checkThrowable(e) && !text.contains("OpenJDK")) { Platform.runLater(() -> new CrashWindow(text).show()); - if (!Main.UPDATE_CHECKER.isOutOfDate()) + if (!Launcher.UPDATE_CHECKER.isOutOfDate()) reportToServer(text); } } catch (Throwable ex) { @@ -110,7 +110,7 @@ public class CrashReporter implements Thread.UncaughtExceptionHandler { Thread t = new Thread(() -> { HashMap map = new HashMap<>(); map.put("crash_report", text); - map.put("version", Main.VERSION); + map.put("version", Launcher.VERSION); try { String response = NetworkUtils.doPost(NetworkUtils.toURL("http://huangyuhui.duapp.com/hmcl/crash.php"), map); if (StringUtils.isNotBlank(response)) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilAccount.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilAccount.java index 5af8b4524..f6dcbb7ca 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilAccount.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilAccount.java @@ -17,7 +17,6 @@ */ package org.jackhuang.hmcl.auth.yggdrasil; -import com.google.gson.Gson; import com.google.gson.GsonBuilder; import org.jackhuang.hmcl.auth.*; import org.jackhuang.hmcl.util.StringUtils; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultGameBuilder.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultGameBuilder.java index 811fc972f..b3f838b47 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultGameBuilder.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultGameBuilder.java @@ -18,7 +18,6 @@ package org.jackhuang.hmcl.download; import org.jackhuang.hmcl.download.game.*; -import org.jackhuang.hmcl.game.SimpleVersionProvider; import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.ParallelTask; import org.jackhuang.hmcl.task.Task; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MaintainTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MaintainTask.java index 709cb38b0..bad83a75f 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MaintainTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MaintainTask.java @@ -17,7 +17,6 @@ */ package org.jackhuang.hmcl.download; -import org.jackhuang.hmcl.game.GameRepository; import org.jackhuang.hmcl.game.Library; import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.TaskResult; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java index c87a57a0a..e7645ad85 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java @@ -18,7 +18,6 @@ package org.jackhuang.hmcl.download.forge; import org.jackhuang.hmcl.download.DownloadProvider; -import org.jackhuang.hmcl.download.RemoteVersion; import org.jackhuang.hmcl.download.VersionList; import org.jackhuang.hmcl.task.GetTask; import org.jackhuang.hmcl.task.Task; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameLibrariesTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameLibrariesTask.java index eabd1b2f8..46baf515c 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameLibrariesTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameLibrariesTask.java @@ -20,9 +20,7 @@ package org.jackhuang.hmcl.download.game; import org.jackhuang.hmcl.download.AbstractDependencyManager; import org.jackhuang.hmcl.game.Library; import org.jackhuang.hmcl.game.Version; -import org.jackhuang.hmcl.task.FileDownloadTask; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.NetworkUtils; import java.io.File; import java.util.LinkedList; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibraryDownloadTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibraryDownloadTask.java index 4648b5c6c..401ef63cb 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibraryDownloadTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibraryDownloadTask.java @@ -4,8 +4,6 @@ import org.apache.commons.compress.compressors.xz.XZCompressorInputStream; import org.jackhuang.hmcl.download.AbstractDependencyManager; import org.jackhuang.hmcl.game.Library; import org.jackhuang.hmcl.task.FileDownloadTask; -import org.jackhuang.hmcl.task.Scheduler; -import org.jackhuang.hmcl.task.Schedulers; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.util.*; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderVersionList.java index 4e48e1be4..d3b243e46 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderVersionList.java @@ -18,7 +18,6 @@ package org.jackhuang.hmcl.download.liteloader; import org.jackhuang.hmcl.download.DownloadProvider; -import org.jackhuang.hmcl.download.RemoteVersion; import org.jackhuang.hmcl.download.VersionList; import org.jackhuang.hmcl.task.GetTask; import org.jackhuang.hmcl.task.Task; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineBMCLVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineBMCLVersionList.java index 55d03006b..65b25a352 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineBMCLVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineBMCLVersionList.java @@ -19,7 +19,6 @@ package org.jackhuang.hmcl.download.optifine; import com.google.gson.reflect.TypeToken; import org.jackhuang.hmcl.download.DownloadProvider; -import org.jackhuang.hmcl.download.RemoteVersion; import org.jackhuang.hmcl.download.VersionList; import org.jackhuang.hmcl.task.GetTask; import org.jackhuang.hmcl.task.Task; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameVersion.java index 0f6d31303..ff1629a31 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameVersion.java @@ -116,7 +116,7 @@ public final class GameVersion { .getEntry("net/minecraft/client/Minecraft.class"); if (minecraft != null) return getVersionOfOldMinecraft(f, minecraft); - ZipArchiveEntry main = f.getEntry("net/minecraft/client/main/Main.class"); + ZipArchiveEntry main = f.getEntry("net/minecraft/client/main/Launcher.class"); ZipArchiveEntry minecraftServer = f.getEntry("net/minecraft/server/MinecraftServer.class"); if ((main != null) && (minecraftServer != null)) return getVersionOfNewMinecraft(f, minecraftServer); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Constants.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Constants.java index 00c5708f2..52f9a121e 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Constants.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Constants.java @@ -28,7 +28,6 @@ import org.jackhuang.hmcl.task.Schedulers; import java.awt.*; import java.io.File; import java.nio.charset.Charset; -import java.text.SimpleDateFormat; import java.util.Date; import java.util.UUID; import java.util.function.Consumer;