diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java index cc5dff852..5aa66fc8e 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java @@ -26,6 +26,8 @@ import org.jackhuang.hmcl.task.Schedulers; import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.upgrade.UpdateChecker; import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.io.FileUtils; +import org.jackhuang.hmcl.util.platform.OperatingSystem; import java.io.File; import java.io.IOException; @@ -78,9 +80,6 @@ public final class Launcher extends Application { try { Logging.start(LOG_DIRECTORY); - // NetworkUtils.setUserAgentSupplier(() -> "Hello Minecraft! Launcher"); - Constants.UI_THREAD_SCHEDULER = Constants.JAVAFX_UI_THREAD_SCHEDULER; - LOG.info("*** " + Metadata.TITLE + " ***"); LOG.info("Operating System: " + System.getProperty("os.name") + ' ' + OperatingSystem.SYSTEM_VERSION); LOG.info("Java Version: " + System.getProperty("java.version") + ", " + System.getProperty("java.vendor")); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Main.java b/HMCL/src/main/java/org/jackhuang/hmcl/Main.java index f76d74c01..de4f9d48f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/Main.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/Main.java @@ -17,16 +17,12 @@ */ package org.jackhuang.hmcl; -import org.jackhuang.hmcl.setting.ConfigHolder; import org.jackhuang.hmcl.upgrade.UpdateHandler; - import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactory; import javax.net.ssl.X509TrustManager; import javax.swing.*; import java.io.File; -import java.io.IOException; -import java.nio.file.Paths; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; @@ -40,6 +36,7 @@ public final class Main { public static void main(String[] args) { System.setProperty("java.net.useSystemProxies", "true"); + System.setProperty("http.agent", "HMCL/" + Metadata.VERSION); checkJavaFX(); checkDirectoryPath(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Metadata.java b/HMCL/src/main/java/org/jackhuang/hmcl/Metadata.java index 902cca129..9f819bd48 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/Metadata.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/Metadata.java @@ -17,7 +17,7 @@ */ package org.jackhuang.hmcl; -import org.jackhuang.hmcl.util.JarUtils; +import org.jackhuang.hmcl.util.io.JarUtils; /** * Stores metadata about this application. 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 b576f0978..0a137e70f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/AccountHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/AccountHelper.java @@ -30,7 +30,7 @@ import org.jackhuang.hmcl.task.Scheduler; import org.jackhuang.hmcl.task.Schedulers; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.ui.DialogController; -import org.jackhuang.hmcl.util.NetworkUtils; +import org.jackhuang.hmcl.util.io.NetworkUtils; import java.io.File; import java.util.*; @@ -159,11 +159,11 @@ public final class AccountHelper { } public static Image getSteveSkin(double scaleRatio) { - return scale("/assets/img/steve.png", 4); + return scale("/assets/img/steve.png", scaleRatio); } public static Image getAlexSkin(double scaleRatio) { - return scale("/assets/img/alex.png", 4); + return scale("/assets/img/alex.png", scaleRatio); } public static Image getDefaultSkin(UUID uuid, double scaleRatio) { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameRepository.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameRepository.java index c49c18f19..42762829b 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameRepository.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameRepository.java @@ -27,8 +27,8 @@ import org.jackhuang.hmcl.setting.EnumGameDirectory; import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.setting.Settings; import org.jackhuang.hmcl.setting.VersionSetting; -import org.jackhuang.hmcl.util.FileUtils; import org.jackhuang.hmcl.util.Logging; +import org.jackhuang.hmcl.util.io.FileUtils; import java.io.File; import java.io.IOException; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackExportTask.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackExportTask.java index 347861c4c..89fe178de 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackExportTask.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackExportTask.java @@ -19,9 +19,9 @@ package org.jackhuang.hmcl.game; import org.jackhuang.hmcl.mod.Modpack; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.Constants; import org.jackhuang.hmcl.util.Logging; -import org.jackhuang.hmcl.util.Zipper; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.Zipper; import java.io.File; import java.util.ArrayList; @@ -73,8 +73,8 @@ public class HMCLModpackExportTask extends Task { Version mv = repository.getResolvedVersion(version); String gameVersion = GameVersion.minecraftVersion(repository.getVersionJar(version)) .orElseThrow(() -> new IllegalStateException("Cannot parse the version of " + version)); - zip.putTextFile(Constants.GSON.toJson(mv.setJar(gameVersion)), "minecraft/pack.json"); // Making "jar" to gameVersion is to be compatible with old HMCL. - zip.putTextFile(Constants.GSON.toJson(modpack.setGameVersion(gameVersion)), "modpack.json"); // Newer HMCL only reads 'gameVersion' field. + zip.putTextFile(JsonUtils.GSON.toJson(mv.setJar(gameVersion)), "minecraft/pack.json"); // Making "jar" to gameVersion is to be compatible with old HMCL. + zip.putTextFile(JsonUtils.GSON.toJson(modpack.setGameVersion(gameVersion)), "modpack.json"); // Newer HMCL only reads 'gameVersion' field. } } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackInstallTask.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackInstallTask.java index f3a223794..f01d7847c 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackInstallTask.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackInstallTask.java @@ -27,9 +27,9 @@ import org.jackhuang.hmcl.mod.ModpackConfiguration; import org.jackhuang.hmcl.mod.ModpackInstallTask; import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.CompressingUtils; -import org.jackhuang.hmcl.util.Constants; -import org.jackhuang.hmcl.util.FileUtils; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.CompressingUtils; +import org.jackhuang.hmcl.util.io.FileUtils; import java.io.File; import java.io.IOException; @@ -65,7 +65,7 @@ public final class HMCLModpackInstallTask extends Task { ModpackConfiguration config = null; try { if (json.exists()) { - config = Constants.GSON.fromJson(FileUtils.readText(json), new TypeToken>() { + config = JsonUtils.GSON.fromJson(FileUtils.readText(json), new TypeToken>() { }.getType()); if (!MODPACK_TYPE.equals(config.getType())) @@ -89,7 +89,7 @@ public final class HMCLModpackInstallTask extends Task { @Override public void execute() throws Exception { String json = CompressingUtils.readTextZipEntry(zipFile, "minecraft/pack.json"); - Version version = Constants.GSON.fromJson(json, Version.class).setId(name).setJar(null); + Version version = JsonUtils.GSON.fromJson(json, Version.class).setId(name).setJar(null); dependencies.add(new VersionJsonSaveTask(repository, version)); dependencies.add(new MinecraftInstanceTask<>(zipFile, "/minecraft", modpack, MODPACK_TYPE, repository.getModpackConfiguration(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 3aad7431e..2d4ba4aaf 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackManager.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackManager.java @@ -19,10 +19,10 @@ package org.jackhuang.hmcl.game; import com.google.gson.JsonParseException; import org.jackhuang.hmcl.mod.Modpack; -import org.jackhuang.hmcl.util.CompressingUtils; -import org.jackhuang.hmcl.util.JsonUtils; import org.jackhuang.hmcl.util.Lang; import org.jackhuang.hmcl.util.StringUtils; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.CompressingUtils; import java.io.File; import java.io.IOException; 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 a4206e683..9aabc428b 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java @@ -41,6 +41,13 @@ import org.jackhuang.hmcl.ui.construct.DialogCloseEvent; import org.jackhuang.hmcl.ui.construct.MessageBox; import org.jackhuang.hmcl.ui.construct.TaskExecutorDialogPane; import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.function.ExceptionalSupplier; +import org.jackhuang.hmcl.util.gson.UUIDTypeAdapter; +import org.jackhuang.hmcl.util.platform.CommandBuilder; +import org.jackhuang.hmcl.util.platform.JavaVersion; +import org.jackhuang.hmcl.util.platform.ManagedProcess; +import org.jackhuang.hmcl.util.platform.OperatingSystem; +import org.jackhuang.hmcl.util.versioning.VersionNumber; import java.io.File; import java.io.IOException; @@ -281,13 +288,13 @@ public final class LauncherHelper { } } - if (!flag && java.getPlatform() == org.jackhuang.hmcl.util.Platform.BIT_32 && - org.jackhuang.hmcl.util.Platform.IS_64_BIT) { + if (!flag && java.getPlatform() == org.jackhuang.hmcl.util.platform.Platform.BIT_32 && + org.jackhuang.hmcl.util.platform.Platform.IS_64_BIT) { final JavaVersion java32 = java; // First find if same java version but whose platform is 64-bit installed. Optional java64 = JavaVersion.getJREs().stream() - .filter(javaVersion -> javaVersion.getPlatform() == org.jackhuang.hmcl.util.Platform.PLATFORM) + .filter(javaVersion -> javaVersion.getPlatform() == org.jackhuang.hmcl.util.platform.Platform.PLATFORM) .filter(javaVersion -> javaVersion.getParsedVersion() == java32.getParsedVersion()) .max(Comparator.comparing(JavaVersion::getVersionNumber)); @@ -296,7 +303,7 @@ public final class LauncherHelper { // Then find if other java version which satisfies requirements installed. java64 = JavaVersion.getJREs().stream() - .filter(javaVersion -> javaVersion.getPlatform() == org.jackhuang.hmcl.util.Platform.PLATFORM) + .filter(javaVersion -> javaVersion.getPlatform() == org.jackhuang.hmcl.util.platform.Platform.PLATFORM) .filter(javaVersion -> { if (java8requiredFinal) return javaVersion.getParsedVersion() == JavaVersion.JAVA_8; if (newJavaRequiredFinal) return javaVersion.getParsedVersion() >= JavaVersion.JAVA_8; @@ -313,7 +320,7 @@ public final class LauncherHelper { } } - if (!flag && java.getPlatform() == org.jackhuang.hmcl.util.Platform.BIT_32 && + if (!flag && java.getPlatform() == org.jackhuang.hmcl.util.platform.Platform.BIT_32 && setting.getMaxMemory() > 1.5 * 1024) { // 1.5 * 1024 is an inaccurate number. // Actual memory limit depends on operating system and memory. diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java index f399a21d3..fa2202cb2 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java @@ -25,9 +25,9 @@ import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.setting.VersionSetting; import org.jackhuang.hmcl.task.FinalizedCallback; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.Constants; -import org.jackhuang.hmcl.util.FileUtils; import org.jackhuang.hmcl.util.Lang; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.FileUtils; import java.io.File; import java.io.FileNotFoundException; @@ -64,7 +64,7 @@ public final class ModpackHelper { throw new FileNotFoundException(file.getPath()); else try { - return Constants.GSON.fromJson(FileUtils.readText(file), new TypeToken>() { + return JsonUtils.GSON.fromJson(FileUtils.readText(file), new TypeToken>() { }.getType()); } catch (JsonParseException e) { throw new IOException("Malformed modpack configuration"); 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 02def50ee..29ddac609 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java @@ -35,11 +35,11 @@ import org.hildan.fxgson.factories.JavaFxPropertyTypeAdapterFactory; import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.auth.authlibinjector.AuthlibInjectorServer; import org.jackhuang.hmcl.upgrade.UpdateChannel; -import org.jackhuang.hmcl.util.EnumOrdinalDeserializer; -import org.jackhuang.hmcl.util.FileTypeAdapter; -import org.jackhuang.hmcl.util.ObservableHelper; +import org.jackhuang.hmcl.util.gson.EnumOrdinalDeserializer; +import org.jackhuang.hmcl.util.gson.FileTypeAdapter; import org.jackhuang.hmcl.util.i18n.Locales; import org.jackhuang.hmcl.util.i18n.Locales.SupportedLocale; +import org.jackhuang.hmcl.util.javafx.ObservableHelper; import java.io.File; import java.lang.reflect.Modifier; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigHolder.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigHolder.java index 41130ec76..92c3e164c 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigHolder.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigHolder.java @@ -19,7 +19,6 @@ package org.jackhuang.hmcl.setting; import com.google.gson.Gson; import com.google.gson.JsonParseException; -import org.jackhuang.hmcl.util.OperatingSystem; import java.io.IOException; import java.nio.file.Files; @@ -28,6 +27,10 @@ import java.nio.file.Paths; import java.util.Map; import java.util.logging.Level; +import org.jackhuang.hmcl.util.InvocationDispatcher; +import org.jackhuang.hmcl.util.Lang; +import org.jackhuang.hmcl.util.platform.OperatingSystem; + import static java.nio.charset.StandardCharsets.UTF_8; import static org.jackhuang.hmcl.util.Logging.LOG; @@ -68,7 +71,7 @@ public final class ConfigHolder { Settings.init(); if (newlyCreated) { - saveConfig(); + saveConfigSync(); // hide the config file on windows if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) { @@ -122,22 +125,26 @@ public final class ConfigHolder { return new Config(); } - private static void saveConfig() throws IOException { - LOG.info("Saving config"); + private static InvocationDispatcher configWriter = InvocationDispatcher.runOn(Lang::thread, content -> { try { - Files.write(configLocation, configInstance.toJson().getBytes(UTF_8)); + writeToConfig(content); } catch (IOException e) { LOG.log(Level.SEVERE, "Failed to save config", e); - throw e; + } + }); + + private static void writeToConfig(String content) throws IOException { + LOG.info("Saving config"); + synchronized (configLocation) { + Files.write(configLocation, content.getBytes(UTF_8)); } } static void markConfigDirty() { - // TODO: change this to async - try { - saveConfig(); - } catch (IOException ignored) { - // ignore it as it has been logged - } + configWriter.accept(configInstance.toJson()); + } + + private static void saveConfigSync() throws IOException { + writeToConfig(configInstance.toJson()); } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigUpgrader.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigUpgrader.java index f89408111..c220e73dc 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigUpgrader.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigUpgrader.java @@ -20,7 +20,7 @@ package org.jackhuang.hmcl.setting; import org.jackhuang.hmcl.auth.offline.OfflineAccount; import org.jackhuang.hmcl.auth.offline.OfflineAccountFactory; import org.jackhuang.hmcl.util.StringUtils; -import org.jackhuang.hmcl.util.UUIDTypeAdapter; +import org.jackhuang.hmcl.util.gson.UUIDTypeAdapter; import java.util.LinkedList; import java.util.List; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java index a5b58e64e..b1f130694 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java @@ -31,6 +31,9 @@ import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.mod.ModManager; import org.jackhuang.hmcl.ui.WeakListenerHolder; import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.javafx.ImmediateObjectProperty; +import org.jackhuang.hmcl.util.javafx.ImmediateStringProperty; +import org.jackhuang.hmcl.util.javafx.ObservableHelper; import java.io.File; import java.lang.reflect.Type; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java index d143eacdf..9b9fa0569 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java @@ -22,9 +22,10 @@ import com.google.gson.stream.JsonWriter; import javafx.beans.binding.Bindings; import javafx.beans.binding.ObjectBinding; import javafx.scene.paint.Color; -import org.jackhuang.hmcl.util.FileUtils; -import org.jackhuang.hmcl.util.IOUtils; + import org.jackhuang.hmcl.util.Logging; +import org.jackhuang.hmcl.util.io.FileUtils; +import org.jackhuang.hmcl.util.io.IOUtils; import java.io.File; import java.io.IOException; 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 43af5831c..2017ff97a 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java @@ -22,6 +22,12 @@ import javafx.beans.InvalidationListener; import org.jackhuang.hmcl.Metadata; import org.jackhuang.hmcl.game.LaunchOptions; import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.javafx.ImmediateBooleanProperty; +import org.jackhuang.hmcl.util.javafx.ImmediateIntegerProperty; +import org.jackhuang.hmcl.util.javafx.ImmediateObjectProperty; +import org.jackhuang.hmcl.util.javafx.ImmediateStringProperty; +import org.jackhuang.hmcl.util.platform.JavaVersion; +import org.jackhuang.hmcl.util.platform.OperatingSystem; import java.io.File; import java.io.IOException; 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 73d29c4a0..8c08326de 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java @@ -39,7 +39,7 @@ import org.jackhuang.hmcl.ui.profile.ProfileList; import org.jackhuang.hmcl.ui.versions.GameList; import org.jackhuang.hmcl.ui.versions.VersionPage; import org.jackhuang.hmcl.util.FutureCallback; -import org.jackhuang.hmcl.util.JavaVersion; +import org.jackhuang.hmcl.util.platform.JavaVersion; import java.util.function.Consumer; 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 08c907bbe..bad63bbf7 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java @@ -44,7 +44,11 @@ import javafx.util.Callback; import javafx.util.Duration; import javafx.util.StringConverter; import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.function.ExceptionalSupplier; import org.jackhuang.hmcl.util.i18n.I18n; +import org.jackhuang.hmcl.util.io.FileUtils; +import org.jackhuang.hmcl.util.javafx.SelectionModelSelectedItemProperty; +import org.jackhuang.hmcl.util.platform.OperatingSystem; import java.io.File; import java.io.IOException; 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 437a336b9..42b9cf3d1 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java @@ -34,10 +34,10 @@ import org.jackhuang.hmcl.event.Event; import org.jackhuang.hmcl.event.EventManager; import org.jackhuang.hmcl.game.LauncherHelper; import org.jackhuang.hmcl.setting.Settings; -import org.jackhuang.hmcl.util.IOUtils; import org.jackhuang.hmcl.util.Lang; import org.jackhuang.hmcl.util.Log4jLevel; import org.jackhuang.hmcl.util.StringUtils; +import org.jackhuang.hmcl.util.io.IOUtils; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; 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 e9be8246b..1993664e6 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/MainPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/MainPage.java @@ -40,7 +40,7 @@ import org.jackhuang.hmcl.ui.construct.RipplerContainer; import org.jackhuang.hmcl.ui.decorator.DecoratorPage; import org.jackhuang.hmcl.ui.versions.GameItem; import org.jackhuang.hmcl.ui.versions.Versions; -import org.jackhuang.hmcl.util.VersionNumber; +import org.jackhuang.hmcl.util.versioning.VersionNumber; import java.util.List; import java.util.stream.Collectors; 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 f7a935e91..c6cb464af 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java @@ -46,8 +46,8 @@ import java.util.Objects; import java.util.Optional; import static org.jackhuang.hmcl.setting.ConfigHolder.config; -import static org.jackhuang.hmcl.util.SelectionModelSelectedItemProperty.selectedItemPropertyFor; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; +import static org.jackhuang.hmcl.util.javafx.SelectionModelSelectedItemProperty.selectedItemPropertyFor; public final class SettingsPage extends SettingsView implements DecoratorPage { private final ReadOnlyStringWrapper title = new ReadOnlyStringWrapper(this, "title", i18n("settings.launcher")); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountList.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountList.java index 946018a1d..9515a5883 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountList.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountList.java @@ -25,7 +25,7 @@ import org.jackhuang.hmcl.auth.Account; import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.ui.ListPage; import org.jackhuang.hmcl.ui.decorator.DecoratorPage; -import org.jackhuang.hmcl.util.MappedObservableList; +import org.jackhuang.hmcl.util.javafx.MappedObservableList; import static org.jackhuang.hmcl.ui.FXUtils.onInvalidating; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AddAccountPane.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AddAccountPane.java index 5d2e9f54f..aaf04f7ce 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AddAccountPane.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AddAccountPane.java @@ -42,7 +42,6 @@ import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.ui.FXUtils; import org.jackhuang.hmcl.ui.construct.*; -import org.jackhuang.hmcl.util.Constants; import org.jackhuang.hmcl.util.Logging; import java.util.List; @@ -190,6 +189,7 @@ public class AddAccountPane extends StackPane { } private class Selector extends BorderPane implements CharacterSelector { + private final AdvancedListBox listBox = new AdvancedListBox(); private final JFXButton cancel = new JFXButton(); @@ -225,16 +225,13 @@ public class AddAccountPane extends StackPane { image = AccountHelper.getSkinImmediately(yggdrasilAccount, profile, 4); } catch (Exception e) { Logging.LOG.log(Level.WARNING, "Failed to get skin for " + profile.getName(), e); - image = null; + image = AccountHelper.getDefaultSkin(profile.getId(), 4); } + ImageView portraitView = new ImageView(); portraitView.setSmooth(false); - if (image == null) { - portraitView.setImage(Constants.DEFAULT_ICON.get()); - } else { - portraitView.setImage(image); - portraitView.setViewport(AccountHelper.getViewport(4)); - } + portraitView.setImage(image); + portraitView.setViewport(AccountHelper.getViewport(4)); FXUtils.limitSize(portraitView, 32, 32); IconedItem accountItem = new IconedItem(portraitView, profile.getName()); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AddAuthlibInjectorServerPane.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AddAuthlibInjectorServerPane.java index d7d567069..d5a3cdca5 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AddAuthlibInjectorServerPane.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AddAuthlibInjectorServerPane.java @@ -31,7 +31,7 @@ import org.jackhuang.hmcl.ui.animation.ContainerAnimations; import org.jackhuang.hmcl.ui.animation.TransitionHandler; import org.jackhuang.hmcl.ui.construct.DialogCloseEvent; import org.jackhuang.hmcl.ui.construct.SpinnerPane; -import org.jackhuang.hmcl.util.NetworkUtils; +import org.jackhuang.hmcl.util.io.NetworkUtils; import java.io.IOException; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AuthlibInjectorServersPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AuthlibInjectorServersPage.java index 33715e060..22eb3f5dc 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AuthlibInjectorServersPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AuthlibInjectorServersPage.java @@ -28,7 +28,7 @@ import javafx.scene.layout.VBox; import org.jackhuang.hmcl.auth.authlibinjector.AuthlibInjectorServer; import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.ui.decorator.DecoratorPage; -import org.jackhuang.hmcl.util.MappedObservableList; +import org.jackhuang.hmcl.util.javafx.MappedObservableList; import static org.jackhuang.hmcl.setting.ConfigHolder.config; import static org.jackhuang.hmcl.ui.FXUtils.loadFXML; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentList.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentList.java index 1bff3babf..40e364d61 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentList.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentList.java @@ -17,6 +17,8 @@ */ package org.jackhuang.hmcl.ui.construct; +import org.jackhuang.hmcl.util.javafx.MappedObservableList; + import javafx.beans.DefaultProperty; import javafx.beans.binding.Bindings; import javafx.beans.property.IntegerProperty; @@ -32,7 +34,6 @@ import javafx.scene.control.Skin; import javafx.scene.control.SkinBase; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; -import org.jackhuang.hmcl.util.MappedObservableList; @DefaultProperty("content") public class ComponentList extends Control { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ExportWizardProvider.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ExportWizardProvider.java index 93469c1e4..933ec854a 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ExportWizardProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ExportWizardProvider.java @@ -28,7 +28,7 @@ import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.ui.wizard.WizardController; import org.jackhuang.hmcl.ui.wizard.WizardProvider; -import org.jackhuang.hmcl.util.Zipper; +import org.jackhuang.hmcl.util.io.Zipper; import java.io.File; import java.nio.file.Files; 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 92c8306d2..e492a9ad9 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 @@ -31,8 +31,8 @@ import org.jackhuang.hmcl.ui.FXUtils; import org.jackhuang.hmcl.ui.construct.NoneMultipleSelectionModel; import org.jackhuang.hmcl.ui.wizard.WizardController; import org.jackhuang.hmcl.ui.wizard.WizardPage; -import org.jackhuang.hmcl.util.FileUtils; import org.jackhuang.hmcl.util.StringUtils; +import org.jackhuang.hmcl.util.io.FileUtils; import java.io.File; import java.util.LinkedList; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/profile/ProfileList.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/profile/ProfileList.java index 5fdabd4bd..d7a7e551c 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/profile/ProfileList.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/profile/ProfileList.java @@ -25,7 +25,7 @@ import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.ui.ListPage; import org.jackhuang.hmcl.ui.decorator.DecoratorPage; -import org.jackhuang.hmcl.util.MappedObservableList; +import org.jackhuang.hmcl.util.javafx.MappedObservableList; import static org.jackhuang.hmcl.ui.FXUtils.onInvalidating; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/DatapackListPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/DatapackListPage.java index 14d34f7a2..947f83277 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/DatapackListPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/DatapackListPage.java @@ -9,9 +9,9 @@ import org.jackhuang.hmcl.mod.Datapack; import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.ui.ListPage; import org.jackhuang.hmcl.ui.decorator.DecoratorPage; -import org.jackhuang.hmcl.util.FileUtils; import org.jackhuang.hmcl.util.Logging; -import org.jackhuang.hmcl.util.MappedObservableList; +import org.jackhuang.hmcl.util.io.FileUtils; +import org.jackhuang.hmcl.util.javafx.MappedObservableList; import java.io.File; import java.io.IOException; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/GameList.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/GameList.java index 1b116a549..f28f66cf0 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/GameList.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/GameList.java @@ -34,8 +34,8 @@ import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.ui.WeakListenerHolder; import org.jackhuang.hmcl.ui.decorator.DecoratorPage; import org.jackhuang.hmcl.ui.download.DownloadWizardProvider; -import org.jackhuang.hmcl.util.VersionNumber; import org.jackhuang.hmcl.util.i18n.I18n; +import org.jackhuang.hmcl.util.versioning.VersionNumber; import java.util.List; import java.util.stream.Collectors; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPage.java index 0b7628f2a..3ae2ea3a2 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPage.java @@ -28,8 +28,8 @@ import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.ui.FXUtils; import org.jackhuang.hmcl.ui.ListPage; -import org.jackhuang.hmcl.util.FileUtils; import org.jackhuang.hmcl.util.Logging; +import org.jackhuang.hmcl.util.io.FileUtils; import java.io.File; import java.io.IOException; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionPage.java index e1daed4a3..d9a1189fe 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionPage.java @@ -32,7 +32,7 @@ import org.jackhuang.hmcl.ui.FXUtils; import org.jackhuang.hmcl.ui.construct.IconedMenuItem; import org.jackhuang.hmcl.ui.construct.PopupMenu; import org.jackhuang.hmcl.ui.decorator.DecoratorPage; -import org.jackhuang.hmcl.util.FileUtils; +import org.jackhuang.hmcl.util.io.FileUtils; import java.io.File; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java index f06abb7c7..324350a98 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java @@ -46,10 +46,10 @@ import org.jackhuang.hmcl.ui.construct.ComponentList; import org.jackhuang.hmcl.ui.construct.ImagePickerItem; import org.jackhuang.hmcl.ui.construct.MultiFileItem; import org.jackhuang.hmcl.ui.decorator.DecoratorPage; -import org.jackhuang.hmcl.util.FileUtils; -import org.jackhuang.hmcl.util.JavaVersion; import org.jackhuang.hmcl.util.Logging; -import org.jackhuang.hmcl.util.OperatingSystem; +import org.jackhuang.hmcl.util.io.FileUtils; +import org.jackhuang.hmcl.util.platform.JavaVersion; +import org.jackhuang.hmcl.util.platform.OperatingSystem; import java.io.File; import java.io.IOException; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/Versions.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/Versions.java index 0ea9890ee..f5cc25694 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/Versions.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/Versions.java @@ -36,8 +36,8 @@ import org.jackhuang.hmcl.ui.FXUtils; import org.jackhuang.hmcl.ui.construct.DialogCloseEvent; import org.jackhuang.hmcl.ui.construct.MessageBox; import org.jackhuang.hmcl.ui.export.ExportWizardProvider; -import org.jackhuang.hmcl.util.FileUtils; -import org.jackhuang.hmcl.util.OperatingSystem; +import org.jackhuang.hmcl.util.io.FileUtils; +import org.jackhuang.hmcl.util.platform.OperatingSystem; import java.io.File; import java.io.IOException; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/WorldListItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/WorldListItem.java index 1273aef45..7854b52df 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/WorldListItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/WorldListItem.java @@ -11,8 +11,8 @@ import javafx.stage.FileChooser; import org.jackhuang.hmcl.game.World; import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.ui.wizard.SinglePageWizardProvider; -import org.jackhuang.hmcl.util.IntVersionNumber; -import org.jackhuang.hmcl.util.VersionNumber; +import org.jackhuang.hmcl.util.versioning.IntVersionNumber; +import org.jackhuang.hmcl.util.versioning.VersionNumber; import java.io.File; import java.text.SimpleDateFormat; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/ExecutableHeaderHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/ExecutableHeaderHelper.java index bd9179f5a..4d60c0600 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/ExecutableHeaderHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/ExecutableHeaderHelper.java @@ -17,8 +17,6 @@ */ package org.jackhuang.hmcl.upgrade; -import org.jackhuang.hmcl.util.IOUtils; - import java.io.IOException; import java.io.InputStream; import java.nio.ByteBuffer; @@ -30,6 +28,8 @@ import java.util.Optional; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; +import org.jackhuang.hmcl.util.io.IOUtils; + import static java.nio.file.StandardOpenOption.*; import static org.jackhuang.hmcl.util.Lang.mapOf; import static org.jackhuang.hmcl.util.Pair.pair; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/HMCLDownloadTask.java b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/HMCLDownloadTask.java index 9e11f0062..517120e01 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/HMCLDownloadTask.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/HMCLDownloadTask.java @@ -18,7 +18,7 @@ package org.jackhuang.hmcl.upgrade; import org.jackhuang.hmcl.task.FileDownloadTask; -import org.jackhuang.hmcl.util.NetworkUtils; +import org.jackhuang.hmcl.util.io.NetworkUtils; import org.tukaani.xz.XZInputStream; import java.io.ByteArrayInputStream; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/IntegrityChecker.java b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/IntegrityChecker.java index 7079b4cf4..c2ed66dd1 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/IntegrityChecker.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/IntegrityChecker.java @@ -18,8 +18,8 @@ package org.jackhuang.hmcl.upgrade; import org.jackhuang.hmcl.util.DigestUtils; -import org.jackhuang.hmcl.util.IOUtils; -import org.jackhuang.hmcl.util.JarUtils; +import org.jackhuang.hmcl.util.io.IOUtils; +import org.jackhuang.hmcl.util.io.JarUtils; import java.io.IOException; import java.io.InputStream; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/RemoteVersion.java b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/RemoteVersion.java index fbfcdcd94..febcf48a2 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/RemoteVersion.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/RemoteVersion.java @@ -21,8 +21,8 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; import org.jackhuang.hmcl.task.FileDownloadTask.IntegrityCheck; -import org.jackhuang.hmcl.util.JsonUtils; -import org.jackhuang.hmcl.util.NetworkUtils; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.NetworkUtils; import java.io.IOException; import java.util.Optional; 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 7e04dc6c2..3c466ef70 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateChecker.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateChecker.java @@ -24,7 +24,7 @@ import javafx.beans.property.*; import javafx.beans.value.ObservableBooleanValue; import org.jackhuang.hmcl.Metadata; import org.jackhuang.hmcl.setting.ConfigHolder; -import org.jackhuang.hmcl.util.NetworkUtils; +import org.jackhuang.hmcl.util.io.NetworkUtils; import java.io.IOException; import java.util.logging.Level; @@ -35,7 +35,7 @@ import static org.jackhuang.hmcl.util.Lang.mapOf; import static org.jackhuang.hmcl.util.Lang.thread; import static org.jackhuang.hmcl.util.Logging.LOG; import static org.jackhuang.hmcl.util.Pair.pair; -import static org.jackhuang.hmcl.util.VersionNumber.asVersion; +import static org.jackhuang.hmcl.util.versioning.VersionNumber.asVersion; public final class UpdateChecker { private UpdateChecker() {} @@ -83,7 +83,7 @@ public final class UpdateChecker { } private static RemoteVersion checkUpdate(UpdateChannel channel) throws IOException { - if (!IntegrityChecker.isSelfVerified()) { + if (!IntegrityChecker.isSelfVerified() && !"true".equals(System.getProperty("hmcl.self_integrity_check.disable"))) { throw new IOException("Self verification failed"); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java index 0a0ce70be..0508081aa 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java @@ -28,9 +28,9 @@ import org.jackhuang.hmcl.task.TaskExecutor; import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.ui.construct.DialogCloseEvent; import org.jackhuang.hmcl.ui.construct.MessageBox; -import org.jackhuang.hmcl.util.JarUtils; -import org.jackhuang.hmcl.util.JavaVersion; import org.jackhuang.hmcl.util.StringUtils; +import org.jackhuang.hmcl.util.io.JarUtils; +import org.jackhuang.hmcl.util.platform.JavaVersion; import javax.swing.*; import java.io.IOException; 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 f2488daed..392eafa0d 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/CrashReporter.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/CrashReporter.java @@ -23,6 +23,8 @@ import org.jackhuang.hmcl.ui.CrashWindow; import org.jackhuang.hmcl.ui.construct.MessageBox; import org.jackhuang.hmcl.upgrade.IntegrityChecker; import org.jackhuang.hmcl.upgrade.UpdateChecker; +import org.jackhuang.hmcl.util.io.NetworkUtils; +import org.jackhuang.hmcl.util.platform.OperatingSystem; import java.io.IOException; import java.text.SimpleDateFormat; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/Account.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/Account.java index ab0274492..7215b36b7 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/Account.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/Account.java @@ -20,8 +20,9 @@ package org.jackhuang.hmcl.auth; import javafx.application.Platform; import javafx.beans.InvalidationListener; import javafx.beans.Observable; -import org.jackhuang.hmcl.util.ObservableHelper; + import org.jackhuang.hmcl.util.ToStringBuilder; +import org.jackhuang.hmcl.util.javafx.ObservableHelper; import java.util.Map; import java.util.Optional; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorAccount.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorAccount.java index a96ec83a7..39ba2f071 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorAccount.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorAccount.java @@ -25,9 +25,9 @@ import org.jackhuang.hmcl.auth.yggdrasil.YggdrasilService; import org.jackhuang.hmcl.auth.yggdrasil.YggdrasilSession; import org.jackhuang.hmcl.game.Arguments; import org.jackhuang.hmcl.task.GetTask; -import org.jackhuang.hmcl.util.ExceptionalSupplier; import org.jackhuang.hmcl.util.Lang; -import org.jackhuang.hmcl.util.NetworkUtils; +import org.jackhuang.hmcl.util.function.ExceptionalSupplier; +import org.jackhuang.hmcl.util.io.NetworkUtils; import java.io.IOException; import java.util.*; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorAccountFactory.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorAccountFactory.java index d664d861b..3c5c91611 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorAccountFactory.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorAccountFactory.java @@ -22,7 +22,7 @@ import org.jackhuang.hmcl.auth.AuthenticationException; import org.jackhuang.hmcl.auth.CharacterSelector; import org.jackhuang.hmcl.auth.yggdrasil.YggdrasilService; import org.jackhuang.hmcl.auth.yggdrasil.YggdrasilSession; -import org.jackhuang.hmcl.util.ExceptionalSupplier; +import org.jackhuang.hmcl.util.function.ExceptionalSupplier; import java.io.IOException; import java.util.Map; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorDownloader.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorDownloader.java index 77a4df615..f2f0c539e 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorDownloader.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorDownloader.java @@ -22,8 +22,8 @@ import com.google.gson.annotations.SerializedName; import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.task.FileDownloadTask; import org.jackhuang.hmcl.task.FileDownloadTask.IntegrityCheck; -import org.jackhuang.hmcl.util.JsonUtils; -import org.jackhuang.hmcl.util.NetworkUtils; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.NetworkUtils; import java.io.IOException; import java.net.URL; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorProvider.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorProvider.java index 6276a705b..0715d3bde 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorProvider.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorProvider.java @@ -18,8 +18,8 @@ package org.jackhuang.hmcl.auth.authlibinjector; import org.jackhuang.hmcl.auth.yggdrasil.YggdrasilProvider; -import org.jackhuang.hmcl.util.NetworkUtils; -import org.jackhuang.hmcl.util.UUIDTypeAdapter; +import org.jackhuang.hmcl.util.gson.UUIDTypeAdapter; +import org.jackhuang.hmcl.util.io.NetworkUtils; import java.net.URL; import java.util.UUID; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorServer.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorServer.java index b331e9c86..015c4b00b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorServer.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorServer.java @@ -20,8 +20,9 @@ package org.jackhuang.hmcl.auth.authlibinjector; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; import com.google.gson.JsonPrimitive; -import org.jackhuang.hmcl.util.JsonUtils; -import org.jackhuang.hmcl.util.NetworkUtils; + +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.NetworkUtils; import java.io.IOException; import java.util.Optional; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/offline/OfflineAccount.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/offline/OfflineAccount.java index 8b294fd83..a1008f4d8 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/offline/OfflineAccount.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/offline/OfflineAccount.java @@ -22,7 +22,7 @@ import org.jackhuang.hmcl.auth.AuthInfo; import org.jackhuang.hmcl.auth.AuthenticationException; import org.jackhuang.hmcl.util.StringUtils; import org.jackhuang.hmcl.util.ToStringBuilder; -import org.jackhuang.hmcl.util.UUIDTypeAdapter; +import org.jackhuang.hmcl.util.gson.UUIDTypeAdapter; import java.util.Map; import java.util.Objects; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/offline/OfflineAccountFactory.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/offline/OfflineAccountFactory.java index cd9a42971..ea5b7c08d 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/offline/OfflineAccountFactory.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/offline/OfflineAccountFactory.java @@ -19,7 +19,7 @@ package org.jackhuang.hmcl.auth.offline; import org.jackhuang.hmcl.auth.AccountFactory; import org.jackhuang.hmcl.auth.CharacterSelector; -import org.jackhuang.hmcl.util.UUIDTypeAdapter; +import org.jackhuang.hmcl.util.gson.UUIDTypeAdapter; import java.util.Map; import java.util.UUID; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/MojangYggdrasilProvider.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/MojangYggdrasilProvider.java index 20e351fc3..dd8a3bf1f 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/MojangYggdrasilProvider.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/MojangYggdrasilProvider.java @@ -1,7 +1,7 @@ package org.jackhuang.hmcl.auth.yggdrasil; -import org.jackhuang.hmcl.util.NetworkUtils; -import org.jackhuang.hmcl.util.UUIDTypeAdapter; +import org.jackhuang.hmcl.util.gson.UUIDTypeAdapter; +import org.jackhuang.hmcl.util.io.NetworkUtils; import java.net.URL; import java.util.UUID; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/User.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/User.java index f7f664bbb..780f91c15 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/User.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/User.java @@ -19,7 +19,7 @@ package org.jackhuang.hmcl.auth.yggdrasil; import com.google.gson.JsonParseException; import org.jackhuang.hmcl.util.StringUtils; -import org.jackhuang.hmcl.util.Validation; +import org.jackhuang.hmcl.util.gson.Validation; /** * 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 b55d5b9c0..654ca8452 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 @@ -19,7 +19,7 @@ package org.jackhuang.hmcl.auth.yggdrasil; import org.jackhuang.hmcl.auth.*; import org.jackhuang.hmcl.util.StringUtils; -import org.jackhuang.hmcl.util.UUIDTypeAdapter; +import org.jackhuang.hmcl.util.gson.UUIDTypeAdapter; import java.util.*; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilAccountFactory.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilAccountFactory.java index 77c557670..a5806f1f1 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilAccountFactory.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilAccountFactory.java @@ -20,7 +20,7 @@ package org.jackhuang.hmcl.auth.yggdrasil; import org.jackhuang.hmcl.auth.AccountFactory; import org.jackhuang.hmcl.auth.AuthenticationException; import org.jackhuang.hmcl.auth.CharacterSelector; -import org.jackhuang.hmcl.util.UUIDTypeAdapter; +import org.jackhuang.hmcl.util.gson.UUIDTypeAdapter; import java.util.Map; import java.util.Objects; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilService.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilService.java index 6e6282099..272be3b36 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilService.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilService.java @@ -6,9 +6,9 @@ import com.google.gson.JsonParseException; import org.jackhuang.hmcl.auth.AuthenticationException; import org.jackhuang.hmcl.auth.ServerDisconnectException; import org.jackhuang.hmcl.auth.ServerResponseMalformedException; -import org.jackhuang.hmcl.util.NetworkUtils; import org.jackhuang.hmcl.util.StringUtils; -import org.jackhuang.hmcl.util.UUIDTypeAdapter; +import org.jackhuang.hmcl.util.gson.UUIDTypeAdapter; +import org.jackhuang.hmcl.util.io.NetworkUtils; import java.io.IOException; import java.net.URL; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilSession.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilSession.java index fce330102..34215fd0b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilSession.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/yggdrasil/YggdrasilSession.java @@ -3,7 +3,7 @@ package org.jackhuang.hmcl.auth.yggdrasil; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import org.jackhuang.hmcl.auth.AuthInfo; -import org.jackhuang.hmcl.util.UUIDTypeAdapter; +import org.jackhuang.hmcl.util.gson.UUIDTypeAdapter; import java.util.Map; import java.util.Optional; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultCacheRepository.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultCacheRepository.java index f58bde8e9..aa1bf958c 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultCacheRepository.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultCacheRepository.java @@ -21,6 +21,9 @@ import org.jackhuang.hmcl.download.game.LibraryDownloadTask; import org.jackhuang.hmcl.game.Library; import org.jackhuang.hmcl.game.LibraryDownloadInfo; import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.FileUtils; +import org.jackhuang.hmcl.util.platform.OperatingSystem; import java.io.IOException; import java.nio.file.Files; @@ -56,7 +59,7 @@ public class DefaultCacheRepository extends CacheRepository { lock.writeLock().lock(); try { if (Files.isRegularFile(indexFile)) - index = Constants.GSON.fromJson(FileUtils.readText(indexFile.toFile()), Index.class); + index = JsonUtils.GSON.fromJson(FileUtils.readText(indexFile.toFile()), Index.class); else index = new Index(); } catch (IOException e) { @@ -191,7 +194,7 @@ public class DefaultCacheRepository extends CacheRepository { private void saveIndex() { if (indexFile == null || index == null) return; try { - FileUtils.writeText(indexFile.toFile(), Constants.GSON.toJson(index)); + FileUtils.writeText(indexFile.toFile(), JsonUtils.GSON.toJson(index)); } catch (IOException e) { Logging.LOG.log(Level.SEVERE, "Unable to save index.json", e); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultDependencyManager.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultDependencyManager.java index 21af2e93c..e3800b0c2 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultDependencyManager.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultDependencyManager.java @@ -32,7 +32,7 @@ import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.ParallelTask; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.util.AutoTypingMap; -import org.jackhuang.hmcl.util.ExceptionalFunction; +import org.jackhuang.hmcl.util.function.ExceptionalFunction; /** * Note: This class has no state. 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 4786a16d3..dd613e59d 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultGameBuilder.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultGameBuilder.java @@ -22,8 +22,8 @@ import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.ParallelTask; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.util.AutoTypingMap; -import org.jackhuang.hmcl.util.Constants; -import org.jackhuang.hmcl.util.ExceptionalFunction; +import org.jackhuang.hmcl.util.function.ExceptionalFunction; +import org.jackhuang.hmcl.util.gson.JsonUtils; /** * @@ -50,7 +50,7 @@ public class DefaultGameBuilder extends GameBuilder { @Override public Task buildAsync() { return new VersionJsonDownloadTask(gameVersion, dependencyManager).then(variables -> { - Version version = Constants.GSON.fromJson(variables.get(VersionJsonDownloadTask.ID), Version.class); + Version version = JsonUtils.GSON.fromJson(variables.get(VersionJsonDownloadTask.ID), Version.class); version = version.setId(name).setJar(null); variables.set("version", version); Task result = downloadGameAsync(gameVersion, version).then(new ParallelTask( 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 e9727bd34..d5b4e53f5 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MaintainTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MaintainTask.java @@ -22,8 +22,8 @@ import org.jackhuang.hmcl.game.Arguments; import org.jackhuang.hmcl.game.StringArgument; import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.TaskResult; -import org.jackhuang.hmcl.util.CommandBuilder; import org.jackhuang.hmcl.util.StringUtils; +import org.jackhuang.hmcl.util.platform.CommandBuilder; import java.util.ArrayList; import java.util.Arrays; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/RemoteVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/RemoteVersion.java index bee1b8dd7..4d76b252d 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/RemoteVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/RemoteVersion.java @@ -18,7 +18,7 @@ package org.jackhuang.hmcl.download; import org.jackhuang.hmcl.util.ToStringBuilder; -import org.jackhuang.hmcl.util.VersionNumber; +import org.jackhuang.hmcl.util.versioning.VersionNumber; import java.util.Objects; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeInstallProfile.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeInstallProfile.java index c856f8ff4..190277ff7 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeInstallProfile.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeInstallProfile.java @@ -21,7 +21,7 @@ import com.google.gson.JsonParseException; import com.google.gson.annotations.SerializedName; import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.util.Immutable; -import org.jackhuang.hmcl.util.Validation; +import org.jackhuang.hmcl.util.gson.Validation; /** * diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeInstallTask.java index 596d1ced1..2b0d6ebef 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeInstallTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeInstallTask.java @@ -24,10 +24,10 @@ import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.FileDownloadTask; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.task.TaskResult; -import org.jackhuang.hmcl.util.Constants; -import org.jackhuang.hmcl.util.FileUtils; -import org.jackhuang.hmcl.util.IOUtils; -import org.jackhuang.hmcl.util.NetworkUtils; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.FileUtils; +import org.jackhuang.hmcl.util.io.IOUtils; +import org.jackhuang.hmcl.util.io.NetworkUtils; import java.io.*; import java.util.Collection; @@ -89,7 +89,7 @@ public final class ForgeInstallTask extends TaskResult { if (stream == null) throw new IOException("Malformed forge installer file, install_profile.json does not exist."); String json = IOUtils.readFullyAsString(stream); - ForgeInstallProfile installProfile = Constants.GSON.fromJson(json, ForgeInstallProfile.class); + ForgeInstallProfile installProfile = JsonUtils.GSON.fromJson(json, ForgeInstallProfile.class); if (installProfile == null) throw new IOException("Malformed forge installer file, install_profile.json does not exist."); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersion.java index d1b7e9bb2..b3b17f5d2 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersion.java @@ -19,7 +19,7 @@ package org.jackhuang.hmcl.download.forge; import com.google.gson.JsonParseException; import org.jackhuang.hmcl.util.Immutable; -import org.jackhuang.hmcl.util.Validation; +import org.jackhuang.hmcl.util.gson.Validation; /** * 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 c5c6f18df..8f691dd63 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 @@ -21,10 +21,10 @@ import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.VersionList; import org.jackhuang.hmcl.task.GetTask; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.Constants; -import org.jackhuang.hmcl.util.NetworkUtils; import org.jackhuang.hmcl.util.StringUtils; -import org.jackhuang.hmcl.util.VersionNumber; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.NetworkUtils; +import org.jackhuang.hmcl.util.versioning.VersionNumber; import java.util.*; @@ -60,7 +60,7 @@ public final class ForgeVersionList extends VersionList { lock.writeLock().lock(); try { - ForgeVersionRoot root = Constants.GSON.fromJson(task.getResult(), ForgeVersionRoot.class); + ForgeVersionRoot root = JsonUtils.GSON.fromJson(task.getResult(), ForgeVersionRoot.class); if (root == null) return; versions.clear(); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionRoot.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionRoot.java index a64985f4d..17c7e488a 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionRoot.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionRoot.java @@ -19,7 +19,7 @@ package org.jackhuang.hmcl.download.forge; import com.google.gson.JsonParseException; import org.jackhuang.hmcl.util.Immutable; -import org.jackhuang.hmcl.util.Validation; +import org.jackhuang.hmcl.util.gson.Validation; import java.util.Map; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetDownloadTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetDownloadTask.java index 3be70de6b..5a30ba6f8 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetDownloadTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetDownloadTask.java @@ -24,10 +24,10 @@ import org.jackhuang.hmcl.game.AssetObject; import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.FileDownloadTask; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.Constants; -import org.jackhuang.hmcl.util.FileUtils; +import org.jackhuang.hmcl.util.io.FileUtils; +import org.jackhuang.hmcl.util.io.NetworkUtils; import org.jackhuang.hmcl.util.CacheRepository; -import org.jackhuang.hmcl.util.NetworkUtils; +import org.jackhuang.hmcl.util.gson.JsonUtils; import java.io.File; import java.util.Collection; @@ -75,7 +75,7 @@ public final class GameAssetDownloadTask extends Task { @Override public void execute() throws Exception { - AssetIndex index = Constants.GSON.fromJson(FileUtils.readText(assetIndexFile), AssetIndex.class); + AssetIndex index = JsonUtils.GSON.fromJson(FileUtils.readText(assetIndexFile), AssetIndex.class); int progress = 0; if (index != null) for (AssetObject assetObject : index.getObjects().values()) { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetIndexDownloadTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetIndexDownloadTask.java index d6f7e00dc..82effb52b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetIndexDownloadTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetIndexDownloadTask.java @@ -23,7 +23,7 @@ import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.FileDownloadTask; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.util.CacheRepository; -import org.jackhuang.hmcl.util.NetworkUtils; +import org.jackhuang.hmcl.util.io.NetworkUtils; import java.io.File; import java.util.LinkedList; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameDownloadTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameDownloadTask.java index 458c32bfc..856c5bd2d 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameDownloadTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameDownloadTask.java @@ -23,7 +23,7 @@ import org.jackhuang.hmcl.task.FileDownloadTask; import org.jackhuang.hmcl.task.FileDownloadTask.IntegrityCheck; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.util.CacheRepository; -import org.jackhuang.hmcl.util.NetworkUtils; +import org.jackhuang.hmcl.util.io.NetworkUtils; import java.io.File; import java.util.LinkedList; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameRemoteVersionInfo.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameRemoteVersionInfo.java index 23056d855..c4454396e 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameRemoteVersionInfo.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameRemoteVersionInfo.java @@ -22,7 +22,7 @@ import com.google.gson.annotations.SerializedName; import org.jackhuang.hmcl.game.ReleaseType; import org.jackhuang.hmcl.util.Constants; import org.jackhuang.hmcl.util.StringUtils; -import org.jackhuang.hmcl.util.Validation; +import org.jackhuang.hmcl.util.gson.Validation; import java.util.Date; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameVersionList.java index 97c4b51f5..8214bc1c3 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameVersionList.java @@ -21,9 +21,9 @@ import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.VersionList; import org.jackhuang.hmcl.task.GetTask; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.Constants; -import org.jackhuang.hmcl.util.NetworkUtils; import org.jackhuang.hmcl.util.StringUtils; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.NetworkUtils; import java.util.Collection; import java.util.Collections; @@ -70,7 +70,7 @@ public final class GameVersionList extends VersionList { try { versions.clear(); - GameRemoteVersions root = Constants.GSON.fromJson(task.getResult(), GameRemoteVersions.class); + GameRemoteVersions root = JsonUtils.GSON.fromJson(task.getResult(), GameRemoteVersions.class); for (GameRemoteVersionInfo remoteVersion : root.getVersions()) { versions.put(remoteVersion.getGameVersion(), new GameRemoteVersion( remoteVersion.getGameVersion(), diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibrariesUniqueTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibrariesUniqueTask.java index 51c320afa..1e664d8bf 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibrariesUniqueTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibrariesUniqueTask.java @@ -21,9 +21,9 @@ import org.jackhuang.hmcl.game.CompatibilityRule; import org.jackhuang.hmcl.game.Library; import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.TaskResult; -import org.jackhuang.hmcl.util.Constants; import org.jackhuang.hmcl.util.SimpleMultimap; -import org.jackhuang.hmcl.util.VersionNumber; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.versioning.VersionNumber; import java.util.ArrayList; import java.util.HashMap; @@ -53,7 +53,7 @@ public class LibrariesUniqueTask extends TaskResult { for (Library library : libraries) { String id = library.getGroupId() + ":" + library.getArtifactId(); VersionNumber number = VersionNumber.asVersion(library.getVersion()); - String serialized = Constants.GSON.toJson(library); + String serialized = JsonUtils.GSON.toJson(library); if (multimap.containsKey(id)) { boolean duplicate = false; @@ -68,7 +68,7 @@ public class LibrariesUniqueTask extends TaskResult { } else if (number.compareTo(otherNumber) == 0) { // same library id. // prevent from duplicated libraries if (library.equals(otherLibrary)) { - String otherSerialized = Constants.GSON.toJson(otherLibrary); + String otherSerialized = JsonUtils.GSON.toJson(otherLibrary); // A trick, the library that has more information is better, which can be // considered whose serialized JSON text will be longer. if (serialized.length() > otherSerialized.length()) { 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 aee197075..1f9faa43e 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 @@ -6,10 +6,10 @@ import org.jackhuang.hmcl.game.Library; import org.jackhuang.hmcl.task.FileDownloadTask; import org.jackhuang.hmcl.task.FileDownloadTask.IntegrityCheck; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.FileUtils; -import org.jackhuang.hmcl.util.IOUtils; import org.jackhuang.hmcl.util.Logging; -import org.jackhuang.hmcl.util.NetworkUtils; +import org.jackhuang.hmcl.util.io.FileUtils; +import org.jackhuang.hmcl.util.io.IOUtils; +import org.jackhuang.hmcl.util.io.NetworkUtils; import org.tukaani.xz.XZInputStream; import java.io.*; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/VersionJsonDownloadTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/VersionJsonDownloadTask.java index bd27c53b9..18a440d05 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/VersionJsonDownloadTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/VersionJsonDownloadTask.java @@ -22,7 +22,7 @@ import org.jackhuang.hmcl.download.RemoteVersion; import org.jackhuang.hmcl.download.VersionList; import org.jackhuang.hmcl.task.GetTask; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.NetworkUtils; +import org.jackhuang.hmcl.util.io.NetworkUtils; import java.util.Collection; import java.util.LinkedList; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/VersionJsonSaveTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/VersionJsonSaveTask.java index 13bd180c3..b0e14f863 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/VersionJsonSaveTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/VersionJsonSaveTask.java @@ -20,8 +20,8 @@ package org.jackhuang.hmcl.download.game; import org.jackhuang.hmcl.game.DefaultGameRepository; import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.Constants; -import org.jackhuang.hmcl.util.FileUtils; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.FileUtils; import java.io.File; import java.io.IOException; @@ -54,6 +54,6 @@ public final class VersionJsonSaveTask extends Task { File json = repository.getVersionJson(version.getId()).getAbsoluteFile(); if (!FileUtils.makeFile(json)) throw new IOException("Cannot create file " + json); - FileUtils.writeText(json, Constants.GSON.toJson(version)); + FileUtils.writeText(json, JsonUtils.GSON.toJson(version)); } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderBMCLVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderBMCLVersionList.java index e599bae28..f42e0645c 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderBMCLVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderBMCLVersionList.java @@ -21,9 +21,9 @@ import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.VersionList; import org.jackhuang.hmcl.task.GetTask; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.Constants; -import org.jackhuang.hmcl.util.NetworkUtils; -import org.jackhuang.hmcl.util.VersionNumber; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.NetworkUtils; +import org.jackhuang.hmcl.util.versioning.VersionNumber; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -65,7 +65,7 @@ public final class LiteLoaderBMCLVersionList extends VersionList entry : root.getVersions().entrySet()) { 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 d5dd66534..391cf87ac 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 @@ -21,9 +21,9 @@ import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.VersionList; import org.jackhuang.hmcl.task.GetTask; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.Constants; -import org.jackhuang.hmcl.util.NetworkUtils; -import org.jackhuang.hmcl.util.VersionNumber; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.NetworkUtils; +import org.jackhuang.hmcl.util.versioning.VersionNumber; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -65,7 +65,7 @@ public final class LiteLoaderVersionList extends VersionList entry : root.getVersions().entrySet()) { 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 7602e2022..1b02e6827 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 @@ -22,10 +22,10 @@ import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.VersionList; import org.jackhuang.hmcl.task.GetTask; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.Constants; -import org.jackhuang.hmcl.util.NetworkUtils; import org.jackhuang.hmcl.util.StringUtils; -import org.jackhuang.hmcl.util.VersionNumber; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.NetworkUtils; +import org.jackhuang.hmcl.util.versioning.VersionNumber; import java.util.*; @@ -58,7 +58,7 @@ public final class OptiFineBMCLVersionList extends VersionList duplicates = new HashSet<>(); - List root = Constants.GSON.fromJson(task.getResult(), new TypeToken>() { + List root = JsonUtils.GSON.fromJson(task.getResult(), new TypeToken>() { }.getType()); for (OptiFineVersion element : root) { String version = element.getType() + "_" + element.getPatch(); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/event/JVMLaunchFailedEvent.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/event/JVMLaunchFailedEvent.java index 4bf6ff40d..38a9d6d81 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/event/JVMLaunchFailedEvent.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/event/JVMLaunchFailedEvent.java @@ -17,8 +17,8 @@ */ package org.jackhuang.hmcl.event; -import org.jackhuang.hmcl.util.ManagedProcess; import org.jackhuang.hmcl.util.ToStringBuilder; +import org.jackhuang.hmcl.util.platform.ManagedProcess; /** * This event gets fired when we launch the JVM and it got crashed. diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/event/ProcessExitedAbnormallyEvent.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/event/ProcessExitedAbnormallyEvent.java index e8e5b0d82..1487a8617 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/event/ProcessExitedAbnormallyEvent.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/event/ProcessExitedAbnormallyEvent.java @@ -17,8 +17,8 @@ */ package org.jackhuang.hmcl.event; -import org.jackhuang.hmcl.util.ManagedProcess; import org.jackhuang.hmcl.util.ToStringBuilder; +import org.jackhuang.hmcl.util.platform.ManagedProcess; /** * This event gets fired when a JavaProcess exited abnormally and the exit code is not zero. diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/event/ProcessStoppedEvent.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/event/ProcessStoppedEvent.java index 7786c13d5..10b127249 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/event/ProcessStoppedEvent.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/event/ProcessStoppedEvent.java @@ -17,7 +17,7 @@ */ package org.jackhuang.hmcl.event; -import org.jackhuang.hmcl.util.ManagedProcess; +import org.jackhuang.hmcl.util.platform.ManagedProcess; /** * This event gets fired when minecraft process exited successfully and the exit code is 0. diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Arguments.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Arguments.java index e59ae9fa7..48f53723b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Arguments.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Arguments.java @@ -20,7 +20,7 @@ package org.jackhuang.hmcl.game; import com.google.gson.annotations.SerializedName; import org.jackhuang.hmcl.util.Immutable; import org.jackhuang.hmcl.util.Lang; -import org.jackhuang.hmcl.util.OperatingSystem; +import org.jackhuang.hmcl.util.platform.OperatingSystem; import java.util.*; import java.util.stream.Collectors; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/AssetObject.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/AssetObject.java index a09bd44ec..139748066 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/AssetObject.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/AssetObject.java @@ -19,7 +19,7 @@ package org.jackhuang.hmcl.game; import com.google.gson.JsonParseException; import org.jackhuang.hmcl.util.StringUtils; -import org.jackhuang.hmcl.util.Validation; +import org.jackhuang.hmcl.util.gson.Validation; /** * diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DefaultGameRepository.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DefaultGameRepository.java index ccce0adf2..96933ce4e 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DefaultGameRepository.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DefaultGameRepository.java @@ -21,10 +21,10 @@ import com.google.gson.JsonParseException; import com.google.gson.JsonSyntaxException; import org.jackhuang.hmcl.event.*; import org.jackhuang.hmcl.task.Schedulers; -import org.jackhuang.hmcl.util.Constants; -import org.jackhuang.hmcl.util.FileUtils; import org.jackhuang.hmcl.util.Logging; import org.jackhuang.hmcl.util.ToStringBuilder; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.FileUtils; import java.io.File; import java.io.IOException; @@ -113,7 +113,7 @@ public class DefaultGameRepository implements GameRepository { } public Version readVersionJson(File file) throws IOException, JsonSyntaxException { - return Constants.GSON.fromJson(FileUtils.readText(file), Version.class); + return JsonUtils.GSON.fromJson(FileUtils.readText(file), Version.class); } @Override @@ -142,7 +142,7 @@ public class DefaultGameRepository implements GameRepository { if (fromVersion.getId().equals(fromVersion.getJar())) fromVersion = fromVersion.setJar(to); - FileUtils.writeText(toJson, Constants.GSON.toJson(fromVersion.setId(to))); + FileUtils.writeText(toJson, JsonUtils.GSON.toJson(fromVersion.setId(to))); return true; } catch (IOException | JsonParseException | VersionNotFoundException e) { return false; @@ -229,7 +229,7 @@ public class DefaultGameRepository implements GameRepository { if (!id.equals(version.getId())) { version = version.setId(id); try { - FileUtils.writeText(json, Constants.GSON.toJson(version)); + FileUtils.writeText(json, JsonUtils.GSON.toJson(version)); } catch (Exception e) { Logging.LOG.log(Level.WARNING, "Ignoring version " + id + " because wrong id " + version.getId() + " is set and cannot correct it."); return Stream.empty(); @@ -269,7 +269,7 @@ public class DefaultGameRepository implements GameRepository { @Override public AssetIndex getAssetIndex(String version, String assetId) throws IOException { try { - return Objects.requireNonNull(Constants.GSON.fromJson(FileUtils.readText(getIndexFile(version, assetId)), AssetIndex.class)); + return Objects.requireNonNull(JsonUtils.GSON.fromJson(FileUtils.readText(getIndexFile(version, assetId)), AssetIndex.class)); } catch (JsonParseException | NullPointerException e) { throw new IOException("Asset index file malformed", e); } @@ -329,7 +329,7 @@ public class DefaultGameRepository implements GameRepository { return assetsDir; String assetIndexContent = FileUtils.readText(indexFile); - AssetIndex index = Constants.GSON.fromJson(assetIndexContent, AssetIndex.class); + AssetIndex index = JsonUtils.GSON.fromJson(assetIndexContent, AssetIndex.class); if (index == null) return assetsDir; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DownloadInfo.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DownloadInfo.java index 08fdd4f64..dd6c383a0 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DownloadInfo.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DownloadInfo.java @@ -22,7 +22,7 @@ import com.google.gson.annotations.SerializedName; import org.jackhuang.hmcl.util.Immutable; import org.jackhuang.hmcl.util.StringUtils; import org.jackhuang.hmcl.util.ToStringBuilder; -import org.jackhuang.hmcl.util.Validation; +import org.jackhuang.hmcl.util.gson.Validation; /** * 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 3329e67d3..f4671051f 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameVersion.java @@ -17,7 +17,7 @@ */ package org.jackhuang.hmcl.game; -import org.jackhuang.hmcl.util.CompressingUtils; +import org.jackhuang.hmcl.util.io.CompressingUtils; import org.jenkinsci.constant_pool_scanner.ConstantPool; import org.jenkinsci.constant_pool_scanner.ConstantPoolScanner; import org.jenkinsci.constant_pool_scanner.ConstantType; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/LaunchOptions.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/LaunchOptions.java index 6be33dd9e..9927ad454 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/LaunchOptions.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/LaunchOptions.java @@ -17,11 +17,11 @@ */ package org.jackhuang.hmcl.game; -import org.jackhuang.hmcl.util.JavaVersion; - import java.io.File; import java.io.Serializable; +import org.jackhuang.hmcl.util.platform.JavaVersion; + /** * * @author huangyuhui diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Library.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Library.java index b0e08406d..8514a5f93 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Library.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Library.java @@ -20,9 +20,9 @@ package org.jackhuang.hmcl.game; import com.google.gson.*; import com.google.gson.reflect.TypeToken; import org.jackhuang.hmcl.util.Constants; -import org.jackhuang.hmcl.util.OperatingSystem; -import org.jackhuang.hmcl.util.Platform; import org.jackhuang.hmcl.util.ToStringBuilder; +import org.jackhuang.hmcl.util.platform.OperatingSystem; +import org.jackhuang.hmcl.util.platform.Platform; import java.lang.reflect.Type; import java.util.List; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/LoggingInfo.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/LoggingInfo.java index 809f10897..561279636 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/LoggingInfo.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/LoggingInfo.java @@ -20,7 +20,7 @@ package org.jackhuang.hmcl.game; import com.google.gson.JsonParseException; import com.google.gson.annotations.SerializedName; import org.jackhuang.hmcl.util.StringUtils; -import org.jackhuang.hmcl.util.Validation; +import org.jackhuang.hmcl.util.gson.Validation; /** * diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java index 24a055110..1551cc99b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/OSRestriction.java @@ -18,7 +18,7 @@ package org.jackhuang.hmcl.game; import org.jackhuang.hmcl.util.Lang; -import org.jackhuang.hmcl.util.OperatingSystem; +import org.jackhuang.hmcl.util.platform.OperatingSystem; import java.util.regex.Pattern; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Version.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Version.java index cd62e2978..c543f9b2b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Version.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Version.java @@ -19,6 +19,7 @@ package org.jackhuang.hmcl.game; import com.google.gson.JsonParseException; import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.gson.Validation; import java.util.*; import java.util.logging.Level; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/World.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/World.java index c00e9dae4..006fab290 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/World.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/World.java @@ -6,6 +6,10 @@ import com.github.steveice10.opennbt.tag.builtin.LongTag; import com.github.steveice10.opennbt.tag.builtin.StringTag; import com.github.steveice10.opennbt.tag.builtin.Tag; import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.io.CompressingUtils; +import org.jackhuang.hmcl.util.io.FileUtils; +import org.jackhuang.hmcl.util.io.Unzipper; +import org.jackhuang.hmcl.util.io.Zipper; import java.io.IOException; import java.io.InputStream; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java index e061ecb0d..b2d57b7ba 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java @@ -20,6 +20,14 @@ package org.jackhuang.hmcl.launch; import org.jackhuang.hmcl.auth.AuthInfo; import org.jackhuang.hmcl.game.*; import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.gson.UUIDTypeAdapter; +import org.jackhuang.hmcl.util.io.FileUtils; +import org.jackhuang.hmcl.util.io.Unzipper; +import org.jackhuang.hmcl.util.platform.CommandBuilder; +import org.jackhuang.hmcl.util.platform.JavaVersion; +import org.jackhuang.hmcl.util.platform.ManagedProcess; +import org.jackhuang.hmcl.util.platform.OperatingSystem; +import org.jackhuang.hmcl.util.platform.Platform; import java.io.*; import java.nio.file.Files; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/ExitWaiter.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/ExitWaiter.java index beeb8478e..ffb042878 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/ExitWaiter.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/ExitWaiter.java @@ -22,8 +22,8 @@ import org.jackhuang.hmcl.event.JVMLaunchFailedEvent; import org.jackhuang.hmcl.event.ProcessExitedAbnormallyEvent; import org.jackhuang.hmcl.event.ProcessStoppedEvent; import org.jackhuang.hmcl.util.Log4jLevel; -import org.jackhuang.hmcl.util.ManagedProcess; import org.jackhuang.hmcl.util.StringUtils; +import org.jackhuang.hmcl.util.platform.ManagedProcess; import java.util.Collection; import java.util.List; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/Launcher.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/Launcher.java index cacd87892..5abf27bb6 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/Launcher.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/Launcher.java @@ -21,7 +21,7 @@ import org.jackhuang.hmcl.auth.AuthInfo; import org.jackhuang.hmcl.game.GameRepository; import org.jackhuang.hmcl.game.LaunchOptions; import org.jackhuang.hmcl.game.Version; -import org.jackhuang.hmcl.util.ManagedProcess; +import org.jackhuang.hmcl.util.platform.ManagedProcess; import java.io.File; import java.io.IOException; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/ProcessListener.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/ProcessListener.java index 63e52d605..c2d2aeb20 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/ProcessListener.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/ProcessListener.java @@ -18,7 +18,7 @@ package org.jackhuang.hmcl.launch; import org.jackhuang.hmcl.util.Log4jLevel; -import org.jackhuang.hmcl.util.ManagedProcess; +import org.jackhuang.hmcl.util.platform.ManagedProcess; /** * diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/StreamPump.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/StreamPump.java index be692dca1..651db6e76 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/StreamPump.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/StreamPump.java @@ -17,13 +17,13 @@ */ package org.jackhuang.hmcl.launch; -import org.jackhuang.hmcl.util.Constants; import org.jackhuang.hmcl.util.Logging; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.nio.charset.Charset; import java.util.function.Consumer; import java.util.logging.Level; @@ -49,7 +49,7 @@ final class StreamPump implements Runnable { @Override public void run() { - try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, Constants.SYSTEM_CHARSET))) { + try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, Charset.defaultCharset()))) { String line; while ((line = bufferedReader.readLine()) != null) { if (Thread.currentThread().isInterrupted()) { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseCompletionTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseCompletionTask.java index b915d83bd..987c34326 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseCompletionTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseCompletionTask.java @@ -22,6 +22,9 @@ import org.jackhuang.hmcl.game.GameRepository; import org.jackhuang.hmcl.task.FileDownloadTask; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.FileUtils; +import org.jackhuang.hmcl.util.io.NetworkUtils; import java.io.File; import java.io.IOException; @@ -74,7 +77,7 @@ public final class CurseCompletionTask extends Task { try { File manifestFile = new File(repository.getVersionRoot(version), "manifest.json"); if (manifestFile.exists()) - this.manifest = Constants.GSON.fromJson(FileUtils.readText(manifestFile), CurseManifest.class); + this.manifest = JsonUtils.GSON.fromJson(FileUtils.readText(manifestFile), CurseManifest.class); } catch (Exception e) { Logging.LOG.log(Level.WARNING, "Unable to read CurseForge modpack manifest.json", e); } @@ -119,7 +122,7 @@ public final class CurseCompletionTask extends Task { return file; }) .collect(Collectors.toList())); - FileUtils.writeText(new File(root, "manifest.json"), Constants.GSON.toJson(newManifest)); + FileUtils.writeText(new File(root, "manifest.json"), JsonUtils.GSON.toJson(newManifest)); for (CurseManifestFile file : newManifest.getFiles()) if (StringUtils.isNotBlank(file.getFileName())) { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseInstallTask.java index 3bcc53eea..e9ffcd6e0 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseInstallTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseInstallTask.java @@ -23,8 +23,8 @@ import org.jackhuang.hmcl.download.DefaultDependencyManager; import org.jackhuang.hmcl.download.GameBuilder; import org.jackhuang.hmcl.game.DefaultGameRepository; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.Constants; -import org.jackhuang.hmcl.util.FileUtils; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.FileUtils; import java.io.File; import java.io.IOException; @@ -83,7 +83,7 @@ public final class CurseInstallTask extends Task { ModpackConfiguration config = null; try { if (json.exists()) { - config = Constants.GSON.fromJson(FileUtils.readText(json), new TypeToken>() { + config = JsonUtils.GSON.fromJson(FileUtils.readText(json), new TypeToken>() { }.getType()); if (!MODPACK_TYPE.equals(config.getType())) @@ -92,7 +92,7 @@ public final class CurseInstallTask extends Task { } catch (JsonParseException | IOException ignore) { } this.config = config; - dependents.add(new ModpackInstallTask<>(zipFile, run, manifest.getOverrides(), Constants.truePredicate(), config)); + dependents.add(new ModpackInstallTask<>(zipFile, run, manifest.getOverrides(), any -> true, config)); } @Override @@ -118,7 +118,7 @@ public final class CurseInstallTask extends Task { } File root = repository.getVersionRoot(name); - FileUtils.writeText(new File(root, "manifest.json"), Constants.GSON.toJson(manifest)); + FileUtils.writeText(new File(root, "manifest.json"), JsonUtils.GSON.toJson(manifest)); dependencies.add(new CurseCompletionTask(dependencyManager, name, manifest)); dependencies.add(new MinecraftInstanceTask<>(zipFile, manifest.getOverrides(), manifest, MODPACK_TYPE, repository.getModpackConfiguration(name))); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifest.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifest.java index fbb900f1b..96414a306 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifest.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifest.java @@ -19,9 +19,10 @@ package org.jackhuang.hmcl.mod; import com.google.gson.JsonParseException; import com.google.gson.annotations.SerializedName; -import org.jackhuang.hmcl.util.CompressingUtils; + import org.jackhuang.hmcl.util.Immutable; -import org.jackhuang.hmcl.util.JsonUtils; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.CompressingUtils; import java.io.File; import java.io.IOException; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifestFile.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifestFile.java index 738eddebb..c9a3962bf 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifestFile.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifestFile.java @@ -20,8 +20,8 @@ package org.jackhuang.hmcl.mod; import com.google.gson.JsonParseException; import com.google.gson.annotations.SerializedName; import org.jackhuang.hmcl.util.Immutable; -import org.jackhuang.hmcl.util.NetworkUtils; -import org.jackhuang.hmcl.util.Validation; +import org.jackhuang.hmcl.util.gson.Validation; +import org.jackhuang.hmcl.util.io.NetworkUtils; import java.net.URL; import java.util.Objects; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifestMinecraft.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifestMinecraft.java index 9a47144ec..104d817bc 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifestMinecraft.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifestMinecraft.java @@ -21,7 +21,7 @@ import com.google.gson.JsonParseException; import com.google.gson.annotations.SerializedName; import org.jackhuang.hmcl.util.Immutable; import org.jackhuang.hmcl.util.StringUtils; -import org.jackhuang.hmcl.util.Validation; +import org.jackhuang.hmcl.util.gson.Validation; import java.util.Collections; import java.util.LinkedList; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifestModLoader.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifestModLoader.java index 026c8614a..86546f0d8 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifestModLoader.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifestModLoader.java @@ -21,7 +21,7 @@ import com.google.gson.JsonParseException; import com.google.gson.annotations.SerializedName; import org.jackhuang.hmcl.util.Immutable; import org.jackhuang.hmcl.util.StringUtils; -import org.jackhuang.hmcl.util.Validation; +import org.jackhuang.hmcl.util.gson.Validation; /** * diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/Datapack.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/Datapack.java index beb058876..9f7d4a33f 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/Datapack.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/Datapack.java @@ -8,6 +8,11 @@ import javafx.beans.property.SimpleBooleanProperty; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.gson.Validation; +import org.jackhuang.hmcl.util.io.CompressingUtils; +import org.jackhuang.hmcl.util.io.FileUtils; +import org.jackhuang.hmcl.util.io.Unzipper; import java.io.IOException; import java.nio.file.*; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ForgeModMetadata.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ForgeModMetadata.java index 1836fa68c..6c6b84b65 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ForgeModMetadata.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ForgeModMetadata.java @@ -21,6 +21,9 @@ import com.google.gson.JsonParseException; import com.google.gson.annotations.SerializedName; import com.google.gson.reflect.TypeToken; import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.CompressingUtils; +import org.jackhuang.hmcl.util.io.IOUtils; import java.io.File; import java.io.IOException; @@ -116,7 +119,7 @@ public final class ForgeModMetadata { Path mcmod = fs.getPath("mcmod.info"); if (Files.notExists(mcmod)) throw new IOException("File " + modFile + " is not a Forge mod."); - List modList = Constants.GSON.fromJson(IOUtils.readFullyAsString(Files.newInputStream(mcmod)), + List modList = JsonUtils.GSON.fromJson(IOUtils.readFullyAsString(Files.newInputStream(mcmod)), new TypeToken>() { }.getType()); if (modList == null || modList.isEmpty()) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/LiteModMetadata.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/LiteModMetadata.java index 49343125c..3b63ba3d0 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/LiteModMetadata.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/LiteModMetadata.java @@ -18,9 +18,10 @@ package org.jackhuang.hmcl.mod; import com.google.gson.JsonParseException; -import org.jackhuang.hmcl.util.Constants; -import org.jackhuang.hmcl.util.IOUtils; + import org.jackhuang.hmcl.util.Immutable; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.IOUtils; import java.io.File; import java.io.IOException; @@ -112,7 +113,7 @@ public final class LiteModMetadata { ZipEntry entry = zipFile.getEntry("litemod.json"); if (entry == null) throw new IOException("File " + modFile + "is not a LiteLoader mod."); - LiteModMetadata metadata = Constants.GSON.fromJson(IOUtils.readFullyAsString(zipFile.getInputStream(entry)), LiteModMetadata.class); + LiteModMetadata metadata = JsonUtils.GSON.fromJson(IOUtils.readFullyAsString(zipFile.getInputStream(entry)), LiteModMetadata.class); if (metadata == null) throw new IOException("Mod " + modFile + " `litemod.json` is malformed."); return new ModInfo(modFile, metadata.getName(), metadata.getDescription(), metadata.getAuthor(), metadata.getVersion(), metadata.getGameVersion(), metadata.getUpdateURI()); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MinecraftInstanceTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MinecraftInstanceTask.java index 83523bebc..d3e91574c 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MinecraftInstanceTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MinecraftInstanceTask.java @@ -18,9 +18,9 @@ package org.jackhuang.hmcl.mod; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.CompressingUtils; -import org.jackhuang.hmcl.util.Constants; -import org.jackhuang.hmcl.util.FileUtils; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.CompressingUtils; +import org.jackhuang.hmcl.util.io.FileUtils; import java.io.File; import java.io.IOException; @@ -69,6 +69,6 @@ public final class MinecraftInstanceTask extends Task { }); } - FileUtils.writeText(jsonFile, Constants.GSON.toJson(new ModpackConfiguration<>(manifest, type, overrides))); + FileUtils.writeText(jsonFile, JsonUtils.GSON.toJson(new ModpackConfiguration<>(manifest, type, overrides))); } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModInfo.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModInfo.java index ff8c9fb20..7d5a50991 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModInfo.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModInfo.java @@ -17,10 +17,10 @@ */ package org.jackhuang.hmcl.mod; -import org.jackhuang.hmcl.util.FileUtils; -import org.jackhuang.hmcl.util.ImmediateBooleanProperty; import org.jackhuang.hmcl.util.Logging; import org.jackhuang.hmcl.util.StringUtils; +import org.jackhuang.hmcl.util.io.FileUtils; +import org.jackhuang.hmcl.util.javafx.ImmediateBooleanProperty; import java.io.File; import java.util.Objects; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModManager.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModManager.java index 2d3da4a30..dedaf50b8 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModManager.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModManager.java @@ -18,10 +18,10 @@ package org.jackhuang.hmcl.mod; import org.jackhuang.hmcl.game.GameRepository; -import org.jackhuang.hmcl.util.FileUtils; import org.jackhuang.hmcl.util.Lang; import org.jackhuang.hmcl.util.SimpleMultimap; -import org.jackhuang.hmcl.util.VersionNumber; +import org.jackhuang.hmcl.util.io.FileUtils; +import org.jackhuang.hmcl.util.versioning.VersionNumber; import java.io.File; import java.io.IOException; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModpackConfiguration.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModpackConfiguration.java index 35e8da716..c14f1041e 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModpackConfiguration.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModpackConfiguration.java @@ -19,7 +19,7 @@ package org.jackhuang.hmcl.mod; import com.google.gson.JsonParseException; import org.jackhuang.hmcl.util.Immutable; -import org.jackhuang.hmcl.util.Validation; +import org.jackhuang.hmcl.util.gson.Validation; import java.util.ArrayList; import java.util.Collections; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModpackInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModpackInstallTask.java index ab3e4f8e6..37d5b80d7 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModpackInstallTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModpackInstallTask.java @@ -18,8 +18,8 @@ package org.jackhuang.hmcl.mod; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.FileUtils; -import org.jackhuang.hmcl.util.Unzipper; +import org.jackhuang.hmcl.util.io.FileUtils; +import org.jackhuang.hmcl.util.io.Unzipper; import java.io.File; import java.io.IOException; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCInstanceConfiguration.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCInstanceConfiguration.java index 1cc52adf8..d4fefa8b2 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCInstanceConfiguration.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCInstanceConfiguration.java @@ -17,9 +17,9 @@ */ package org.jackhuang.hmcl.mod; -import org.jackhuang.hmcl.util.CompressingUtils; import org.jackhuang.hmcl.util.Lang; import org.jackhuang.hmcl.util.StringUtils; +import org.jackhuang.hmcl.util.io.CompressingUtils; import java.io.File; import java.io.IOException; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCManifest.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCManifest.java index 7908027fd..156b8cd4b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCManifest.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCManifest.java @@ -18,10 +18,11 @@ package org.jackhuang.hmcl.mod; import com.google.gson.annotations.SerializedName; -import org.jackhuang.hmcl.util.CompressingUtils; -import org.jackhuang.hmcl.util.IOUtils; + import org.jackhuang.hmcl.util.Immutable; -import org.jackhuang.hmcl.util.JsonUtils; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.CompressingUtils; +import org.jackhuang.hmcl.util.io.IOUtils; import java.io.File; import java.io.IOException; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCModpackInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCModpackInstallTask.java index d53a18a09..be2e3447f 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCModpackInstallTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCModpackInstallTask.java @@ -27,6 +27,10 @@ import org.jackhuang.hmcl.game.DefaultGameRepository; import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.CompressingUtils; +import org.jackhuang.hmcl.util.io.FileUtils; +import org.jackhuang.hmcl.util.io.IOUtils; import java.io.File; import java.io.IOException; @@ -87,7 +91,7 @@ public final class MultiMCModpackInstallTask extends Task { ModpackConfiguration config = null; try { if (json.exists()) { - config = Constants.GSON.fromJson(FileUtils.readText(json), new TypeToken>() { + config = JsonUtils.GSON.fromJson(FileUtils.readText(json), new TypeToken>() { }.getType()); if (!MODPACK_TYPE.equals(config.getType())) @@ -96,7 +100,7 @@ public final class MultiMCModpackInstallTask extends Task { } catch (JsonParseException | IOException ignore) { } - dependents.add(new ModpackInstallTask<>(zipFile, run, "/" + manifest.getName() + "/minecraft", Constants.truePredicate(), config)); + dependents.add(new ModpackInstallTask<>(zipFile, run, "/" + manifest.getName() + "/minecraft", any -> true, config)); } @Override @@ -121,7 +125,7 @@ public final class MultiMCModpackInstallTask extends Task { if (Files.exists(patches)) for (Path patchJson : Files.newDirectoryStream(patches)) { if (patchJson.toString().endsWith(".json")) { - MultiMCInstancePatch patch = Constants.GSON.fromJson(IOUtils.readFullyAsString(Files.newInputStream(patchJson)), MultiMCInstancePatch.class); + MultiMCInstancePatch patch = JsonUtils.GSON.fromJson(IOUtils.readFullyAsString(Files.newInputStream(patchJson)), MultiMCInstancePatch.class); List newArguments = new LinkedList<>(); for (String arg : patch.getTweakers()) { newArguments.add("--tweakClass"); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/RiftModMetadata.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/RiftModMetadata.java index bf324364c..d17fc72cd 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/RiftModMetadata.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/RiftModMetadata.java @@ -18,10 +18,11 @@ package org.jackhuang.hmcl.mod; import com.google.gson.JsonParseException; -import org.jackhuang.hmcl.util.CompressingUtils; -import org.jackhuang.hmcl.util.IOUtils; + import org.jackhuang.hmcl.util.Immutable; -import org.jackhuang.hmcl.util.JsonUtils; +import org.jackhuang.hmcl.util.gson.JsonUtils; +import org.jackhuang.hmcl.util.io.CompressingUtils; +import org.jackhuang.hmcl.util.io.IOUtils; import java.io.File; import java.io.IOException; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/CoupleTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/CoupleTask.java index 7b1dec3b9..03fa46054 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/CoupleTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/CoupleTask.java @@ -18,7 +18,7 @@ package org.jackhuang.hmcl.task; import org.jackhuang.hmcl.util.AutoTypingMap; -import org.jackhuang.hmcl.util.ExceptionalFunction; +import org.jackhuang.hmcl.util.function.ExceptionalFunction; import java.util.Collection; import java.util.Collections; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FileDownloadTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FileDownloadTask.java index 43b9c0d8a..76d1452d7 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FileDownloadTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FileDownloadTask.java @@ -20,6 +20,10 @@ package org.jackhuang.hmcl.task; import org.jackhuang.hmcl.event.EventManager; import org.jackhuang.hmcl.event.FailedEvent; import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.io.ChecksumMismatchException; +import org.jackhuang.hmcl.util.io.FileUtils; +import org.jackhuang.hmcl.util.io.IOUtils; +import org.jackhuang.hmcl.util.io.NetworkUtils; import java.io.File; import java.io.IOException; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/GetTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/GetTask.java index c74b2fbf7..151dce699 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/GetTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/GetTask.java @@ -17,9 +17,9 @@ */ package org.jackhuang.hmcl.task; -import org.jackhuang.hmcl.util.IOUtils; import org.jackhuang.hmcl.util.Logging; -import org.jackhuang.hmcl.util.NetworkUtils; +import org.jackhuang.hmcl.util.io.IOUtils; +import org.jackhuang.hmcl.util.io.NetworkUtils; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Scheduler.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Scheduler.java index b8c970a7f..2af05082b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Scheduler.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Scheduler.java @@ -17,10 +17,10 @@ */ package org.jackhuang.hmcl.task; -import org.jackhuang.hmcl.util.ExceptionalRunnable; - import java.util.concurrent.Future; +import org.jackhuang.hmcl.util.function.ExceptionalRunnable; + /** * Determines how a task is executed. * diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SchedulerExecutorService.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SchedulerExecutorService.java index fb6ab5351..e07929ca4 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SchedulerExecutorService.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SchedulerExecutorService.java @@ -17,11 +17,11 @@ */ package org.jackhuang.hmcl.task; -import org.jackhuang.hmcl.util.ExceptionalRunnable; - import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; +import org.jackhuang.hmcl.util.function.ExceptionalRunnable; + /** * * @author huangyuhui diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SchedulerImpl.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SchedulerImpl.java index 989b892ba..6ca73266b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SchedulerImpl.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SchedulerImpl.java @@ -17,12 +17,12 @@ */ package org.jackhuang.hmcl.task; -import org.jackhuang.hmcl.util.ExceptionalRunnable; - import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; +import org.jackhuang.hmcl.util.function.ExceptionalRunnable; + /** * * @author huangyuhui diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Schedulers.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Schedulers.java index 8a1d53b00..324369906 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Schedulers.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Schedulers.java @@ -17,7 +17,6 @@ */ package org.jackhuang.hmcl.task; -import org.jackhuang.hmcl.util.Constants; import org.jackhuang.hmcl.util.Logging; import java.util.concurrent.*; @@ -113,7 +112,7 @@ public final class Schedulers { return newThread(); } - static final Scheduler NONE = new SchedulerImpl(Constants.emptyConsumer()); + static final Scheduler NONE = new SchedulerImpl(any -> {}); public static synchronized void shutdown() { Logging.LOG.info("Shutting down executor services."); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SimpleTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SimpleTask.java index 9b078179c..b5086aeb4 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SimpleTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SimpleTask.java @@ -18,7 +18,7 @@ package org.jackhuang.hmcl.task; import org.jackhuang.hmcl.util.AutoTypingMap; -import org.jackhuang.hmcl.util.ExceptionalConsumer; +import org.jackhuang.hmcl.util.function.ExceptionalConsumer; /** * diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SimpleTaskResult.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SimpleTaskResult.java index a8b293e4d..5fc60108a 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SimpleTaskResult.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SimpleTaskResult.java @@ -17,7 +17,7 @@ */ package org.jackhuang.hmcl.task; -import org.jackhuang.hmcl.util.ExceptionalSupplier; +import org.jackhuang.hmcl.util.function.ExceptionalSupplier; public final class SimpleTaskResult extends TaskResult { private final String id; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Task.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Task.java index f827da418..5ad4639fe 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Task.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Task.java @@ -17,17 +17,20 @@ */ package org.jackhuang.hmcl.task; +import javafx.application.Platform; import javafx.beans.property.ReadOnlyDoubleProperty; import javafx.beans.property.ReadOnlyDoubleWrapper; import javafx.beans.property.ReadOnlyStringProperty; import javafx.beans.property.ReadOnlyStringWrapper; import org.jackhuang.hmcl.event.EventManager; import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.function.ExceptionalConsumer; +import org.jackhuang.hmcl.util.function.ExceptionalFunction; +import org.jackhuang.hmcl.util.function.ExceptionalRunnable; import java.util.Collection; import java.util.Collections; import java.util.concurrent.Callable; -import java.util.concurrent.atomic.AtomicReference; import java.util.function.Function; import java.util.logging.Level; @@ -172,8 +175,8 @@ public abstract class Task { } private long lastTime = Long.MIN_VALUE; - private final AtomicReference progressUpdate = new AtomicReference<>(); private final ReadOnlyDoubleWrapper progress = new ReadOnlyDoubleWrapper(this, "progress", -1); + private final InvocationDispatcher progressUpdate = InvocationDispatcher.runOn(Platform::runLater, progress::set); public ReadOnlyDoubleProperty progressProperty() { return progress.getReadOnlyProperty(); @@ -194,18 +197,18 @@ public abstract class Task { } protected void updateProgressImmediately(double progress) { - Properties.updateAsync(this.progress, progress, progressUpdate); + progressUpdate.accept(progress); } - private final AtomicReference messageUpdate = new AtomicReference<>(); private final ReadOnlyStringWrapper message = new ReadOnlyStringWrapper(this, "message", null); + private final InvocationDispatcher messageUpdate = InvocationDispatcher.runOn(Platform::runLater, message::set); public final ReadOnlyStringProperty messageProperty() { return message.getReadOnlyProperty(); } protected final void updateMessage(String newMessage) { - Properties.updateAsync(message, newMessage, messageUpdate); + messageUpdate.accept(newMessage); } public final void run() throws Exception { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/TaskExecutor.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/TaskExecutor.java index fcbd2925e..4bbb986bc 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/TaskExecutor.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/TaskExecutor.java @@ -18,6 +18,8 @@ package org.jackhuang.hmcl.task; import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.function.ExceptionalRunnable; +import org.jackhuang.hmcl.util.function.ExceptionalSupplier; import java.util.*; import java.util.concurrent.*; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/CacheRepository.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/CacheRepository.java index d4aa492c3..a2844aa64 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/CacheRepository.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/CacheRepository.java @@ -22,6 +22,9 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.Optional; +import org.jackhuang.hmcl.util.function.ExceptionalSupplier; +import org.jackhuang.hmcl.util.io.FileUtils; + public class CacheRepository { private Path commonDirectory; private Path cacheDirectory; 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 7324b0495..1948ab633 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Constants.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Constants.java @@ -17,25 +17,6 @@ */ package org.jackhuang.hmcl.util; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import javafx.beans.binding.Bindings; -import javafx.beans.binding.ObjectBinding; -import javafx.scene.image.Image; -import org.jackhuang.hmcl.game.Argument; -import org.jackhuang.hmcl.game.Library; -import org.jackhuang.hmcl.game.RuledArgument; -import org.jackhuang.hmcl.game.StringArgument; -import org.jackhuang.hmcl.task.Schedulers; - -import java.awt.*; -import java.io.File; -import java.nio.charset.Charset; -import java.util.Date; -import java.util.UUID; -import java.util.function.Consumer; -import java.util.function.Predicate; - /** * Constants. * @@ -46,55 +27,7 @@ public final class Constants { private Constants() { } - public static final Charset SYSTEM_CHARSET = Charset.forName(OperatingSystem.ENCODING); - public static final String DEFAULT_LIBRARY_URL = "https://libraries.minecraft.net/"; public static final String DEFAULT_VERSION_DOWNLOAD_URL = "https://s3.amazonaws.com/Minecraft.Download/versions/"; public static final String DEFAULT_INDEX_URL = "https://s3.amazonaws.com/Minecraft.Download/indexes/"; - - public static Consumer UI_THREAD_SCHEDULER = s -> Schedulers.computation().schedule(s::run); - - public static final Consumer SWING_UI_THREAD_SCHEDULER = s -> { - if (EventQueue.isDispatchThread()) - s.run(); - else - EventQueue.invokeLater(s); - }; - - public static final Consumer JAVAFX_UI_THREAD_SCHEDULER = s -> { - if (javafx.application.Platform.isFxApplicationThread()) - s.run(); - else - javafx.application.Platform.runLater(s); - }; - - // lazy loading - public static final ObjectBinding DEFAULT_ICON = Bindings.createObjectBinding(() -> new Image("/assets/img/icon.png")); - - public static final Gson GSON = new GsonBuilder() - .enableComplexMapKeySerialization() - .setPrettyPrinting() - .registerTypeAdapter(Library.class, Library.Serializer.INSTANCE) - .registerTypeAdapter(Argument.class, Argument.Serializer.INSTANCE) - .registerTypeAdapter(StringArgument.class, Argument.Serializer.INSTANCE) - .registerTypeAdapter(RuledArgument.class, RuledArgument.Serializer.INSTANCE) - .registerTypeAdapter(Date.class, DateTypeAdapter.INSTANCE) - .registerTypeAdapter(UUID.class, UUIDTypeAdapter.INSTANCE) - .registerTypeAdapter(Platform.class, Platform.Serializer.INSTANCE) - .registerTypeAdapter(File.class, FileTypeAdapter.INSTANCE) - .registerTypeAdapterFactory(ValidationTypeAdapterFactory.INSTANCE) - .registerTypeAdapterFactory(LowerCaseEnumTypeAdapterFactory.INSTANCE) - .create(); - - public static Predicate truePredicate() { - return s -> true; - } - - public static Predicate falsePredicate() { - return s -> false; - } - - public static Consumer emptyConsumer() { - return x -> {}; - } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/InvocationDispatcher.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/InvocationDispatcher.java new file mode 100644 index 000000000..f80dfbf02 --- /dev/null +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/InvocationDispatcher.java @@ -0,0 +1,55 @@ +/* + * Hello Minecraft! Launcher. + * Copyright (C) 2018 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.util; + +import java.util.Optional; +import java.util.concurrent.atomic.AtomicReference; +import java.util.function.Consumer; +import java.util.function.Supplier; + +/** + * When {@link #accept(ARG)} is called, this class invokes the handler on another thread. + * If {@link #accept(ARG)} is called more than one time before the handler starts processing, + * the handler will only be invoked once, taking the latest argument as its input. + * + * @author yushijinhun + */ +public class InvocationDispatcher implements Consumer { + + public static InvocationDispatcher runOn(Consumer executor, Consumer action) { + return new InvocationDispatcher<>(arg -> executor.accept(() -> { + action.accept(arg.get()); + })); + } + + private Consumer> handler; + + private AtomicReference> pendingArg = new AtomicReference<>(); + + public InvocationDispatcher(Consumer> handler) { + this.handler = handler; + } + + @Override + public void accept(ARG arg) { + if (pendingArg.getAndSet(Optional.ofNullable(arg)) == null) { + handler.accept(() -> pendingArg.getAndSet(null).orElse(null)); + } + } +} diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/JsonUtils.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/JsonUtils.java deleted file mode 100644 index 9ff421ddc..000000000 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/JsonUtils.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Hello Minecraft! Launcher. - * Copyright (C) 2018 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.util; - -import com.google.gson.JsonParseException; - -/** - * @author yushijinhun - */ -public final class JsonUtils { - - private JsonUtils() {} - - public static T fromNonNullJson(String json, Class classOfT) throws JsonParseException { - T parsed = Constants.GSON.fromJson(json, classOfT); - if (parsed == null) - throw new JsonParseException("Json object cannot be null."); - return parsed; - } -} diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Lang.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Lang.java index ab9b97345..aab860d70 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Lang.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Lang.java @@ -23,6 +23,11 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; +import org.jackhuang.hmcl.util.function.ExceptionalConsumer; +import org.jackhuang.hmcl.util.function.ExceptionalFunction; +import org.jackhuang.hmcl.util.function.ExceptionalRunnable; +import org.jackhuang.hmcl.util.function.ExceptionalSupplier; + /** * * @author huangyuhui diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Properties.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Properties.java deleted file mode 100644 index 44bc547bc..000000000 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Properties.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Hello Minecraft! Launcher. - * Copyright (C) 2018 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.util; - -import javafx.beans.property.Property; - -import java.util.concurrent.atomic.AtomicReference; - -/** - * - * @author huangyuhui - */ -public final class Properties { - - private Properties() { - } - - public static void updateAsync(Property property, T newValue, AtomicReference update) { - if (update.getAndSet(newValue) == null) - Constants.UI_THREAD_SCHEDULER.accept(() -> - property.setValue(update.getAndSet(null))); - } -} diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringUtils.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringUtils.java index bcb61076b..80132bc66 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringUtils.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringUtils.java @@ -24,6 +24,8 @@ import java.util.LinkedList; import java.util.List; import java.util.StringTokenizer; +import org.jackhuang.hmcl.util.platform.OperatingSystem; + /** * * @author huangyuhui diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ExceptionalConsumer.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/function/ExceptionalConsumer.java similarity index 97% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/ExceptionalConsumer.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/function/ExceptionalConsumer.java index 8b8ea3643..70ace889c 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ExceptionalConsumer.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/function/ExceptionalConsumer.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.function; /** * @author huangyuhui diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ExceptionalFunction.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/function/ExceptionalFunction.java similarity index 95% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/ExceptionalFunction.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/function/ExceptionalFunction.java index 2aef6f7cd..632cb8ce1 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ExceptionalFunction.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/function/ExceptionalFunction.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.function; /** * diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ExceptionalRunnable.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/function/ExceptionalRunnable.java similarity index 96% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/ExceptionalRunnable.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/function/ExceptionalRunnable.java index ed693979a..05915c5b2 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ExceptionalRunnable.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/function/ExceptionalRunnable.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.function; import java.util.concurrent.Callable; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ExceptionalSupplier.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/function/ExceptionalSupplier.java similarity index 95% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/ExceptionalSupplier.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/function/ExceptionalSupplier.java index 96be114c3..95713c565 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ExceptionalSupplier.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/function/ExceptionalSupplier.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.function; import java.util.concurrent.Callable; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/DateTypeAdapter.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/DateTypeAdapter.java similarity index 98% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/DateTypeAdapter.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/DateTypeAdapter.java index 61c876edd..470d12184 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/DateTypeAdapter.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/DateTypeAdapter.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.gson; import com.google.gson.*; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/EnumOrdinalDeserializer.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/EnumOrdinalDeserializer.java similarity index 98% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/EnumOrdinalDeserializer.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/EnumOrdinalDeserializer.java index b5c1e91d4..38d49cc71 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/EnumOrdinalDeserializer.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/EnumOrdinalDeserializer.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.gson; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileTypeAdapter.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/FileTypeAdapter.java similarity index 97% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileTypeAdapter.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/FileTypeAdapter.java index 503ead9b2..acdf7f3c0 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileTypeAdapter.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/FileTypeAdapter.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.gson; import com.google.gson.*; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/JsonUtils.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/JsonUtils.java new file mode 100644 index 000000000..a41932dc4 --- /dev/null +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/JsonUtils.java @@ -0,0 +1,63 @@ +/* + * Hello Minecraft! Launcher. + * Copyright (C) 2018 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.util.gson; + +import java.io.File; +import java.util.Date; +import java.util.UUID; + +import org.jackhuang.hmcl.game.Argument; +import org.jackhuang.hmcl.game.Library; +import org.jackhuang.hmcl.game.RuledArgument; +import org.jackhuang.hmcl.game.StringArgument; +import org.jackhuang.hmcl.util.platform.Platform; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonParseException; + +/** + * @author yushijinhun + */ +public final class JsonUtils { + + public static final Gson GSON = new GsonBuilder() + .enableComplexMapKeySerialization() + .setPrettyPrinting() + .registerTypeAdapter(Library.class, Library.Serializer.INSTANCE) + .registerTypeAdapter(Argument.class, Argument.Serializer.INSTANCE) + .registerTypeAdapter(StringArgument.class, Argument.Serializer.INSTANCE) + .registerTypeAdapter(RuledArgument.class, RuledArgument.Serializer.INSTANCE) + .registerTypeAdapter(Date.class, DateTypeAdapter.INSTANCE) + .registerTypeAdapter(UUID.class, UUIDTypeAdapter.INSTANCE) + .registerTypeAdapter(Platform.class, Platform.Serializer.INSTANCE) + .registerTypeAdapter(File.class, FileTypeAdapter.INSTANCE) + .registerTypeAdapterFactory(ValidationTypeAdapterFactory.INSTANCE) + .registerTypeAdapterFactory(LowerCaseEnumTypeAdapterFactory.INSTANCE) + .create(); + + private JsonUtils() { + } + + public static T fromNonNullJson(String json, Class classOfT) throws JsonParseException { + T parsed = GSON.fromJson(json, classOfT); + if (parsed == null) + throw new JsonParseException("Json object cannot be null."); + return parsed; + } +} diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/LowerCaseEnumTypeAdapterFactory.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/LowerCaseEnumTypeAdapterFactory.java similarity index 98% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/LowerCaseEnumTypeAdapterFactory.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/LowerCaseEnumTypeAdapterFactory.java index e5a1626be..f2c8819d6 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/LowerCaseEnumTypeAdapterFactory.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/LowerCaseEnumTypeAdapterFactory.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.gson; import com.google.gson.Gson; import com.google.gson.TypeAdapter; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/UUIDTypeAdapter.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/UUIDTypeAdapter.java similarity index 97% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/UUIDTypeAdapter.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/UUIDTypeAdapter.java index 1fc14a1d8..09bc336d0 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/UUIDTypeAdapter.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/UUIDTypeAdapter.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.gson; import com.google.gson.TypeAdapter; import com.google.gson.stream.JsonReader; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Validation.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/Validation.java similarity index 97% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/Validation.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/Validation.java index 3bc9bbc91..1271be90b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Validation.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/Validation.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.gson; import com.google.gson.JsonParseException; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ValidationTypeAdapterFactory.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/ValidationTypeAdapterFactory.java similarity index 98% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/ValidationTypeAdapterFactory.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/ValidationTypeAdapterFactory.java index 856b8552d..f5fd731b3 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ValidationTypeAdapterFactory.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/ValidationTypeAdapterFactory.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.gson; import com.google.gson.Gson; import com.google.gson.TypeAdapter; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ChecksumMismatchException.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/ChecksumMismatchException.java similarity index 97% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/ChecksumMismatchException.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/ChecksumMismatchException.java index 419ec9ee0..7a74b3401 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ChecksumMismatchException.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/ChecksumMismatchException.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.io; import java.io.IOException; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/CompressingUtils.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/CompressingUtils.java similarity index 99% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/CompressingUtils.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/CompressingUtils.java index 85f2ace76..b08e9d808 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/CompressingUtils.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/CompressingUtils.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.io; import java.io.File; import java.io.IOException; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileUtils.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/FileUtils.java similarity index 98% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileUtils.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/FileUtils.java index 2b2274c6f..0936fa6d4 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/FileUtils.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/FileUtils.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.io; import java.io.File; import java.io.FileNotFoundException; @@ -28,6 +28,9 @@ import java.util.LinkedList; import java.util.List; import java.util.Objects; +import org.jackhuang.hmcl.util.Lang; +import org.jackhuang.hmcl.util.StringUtils; + import static java.nio.charset.StandardCharsets.UTF_8; /** diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/IOUtils.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/IOUtils.java similarity index 98% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/IOUtils.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/IOUtils.java index 9e7dc3f06..17293a0a2 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/IOUtils.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/IOUtils.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.io; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/JarUtils.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/JarUtils.java similarity index 98% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/JarUtils.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/JarUtils.java index f26f8f75f..912d0896f 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/JarUtils.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/JarUtils.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.io; import java.io.IOException; import java.net.URISyntaxException; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/NetworkUtils.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/NetworkUtils.java similarity index 91% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/NetworkUtils.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/NetworkUtils.java index 265b244e2..0f250a8dc 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/NetworkUtils.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/NetworkUtils.java @@ -15,15 +15,15 @@ * 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.util; +package org.jackhuang.hmcl.util.io; import java.io.*; import java.net.*; import java.nio.charset.StandardCharsets; import java.util.Map; import java.util.Map.Entry; -import java.util.Objects; -import java.util.function.Supplier; + +import org.jackhuang.hmcl.util.Lang; import static java.nio.charset.StandardCharsets.UTF_8; import static org.jackhuang.hmcl.util.StringUtils.*; @@ -37,16 +37,6 @@ public final class NetworkUtils { private NetworkUtils() { } - private static Supplier userAgentSupplier = () -> "HMCLCore"; - - public static String getUserAgent() { - return userAgentSupplier.get(); - } - - public static void setUserAgentSupplier(Supplier userAgentSupplier) { - NetworkUtils.userAgentSupplier = Objects.requireNonNull(userAgentSupplier); - } - public static String withQuery(String baseUrl, Map params) { try { StringBuilder sb = new StringBuilder(baseUrl); @@ -74,7 +64,6 @@ public final class NetworkUtils { connection.setUseCaches(false); connection.setConnectTimeout(15000); connection.setReadTimeout(15000); - connection.setRequestProperty("User-Agent", getUserAgent()); return connection; } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Unzipper.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/Unzipper.java similarity index 99% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/Unzipper.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/Unzipper.java index 34b602822..f26ecea0f 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Unzipper.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/Unzipper.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.io; import java.io.File; import java.io.IOException; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Zipper.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/Zipper.java similarity index 99% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/Zipper.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/Zipper.java index ac3c4b695..fd6e8332b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Zipper.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/Zipper.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.io; import java.io.Closeable; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ImmediateBooleanProperty.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/ImmediateBooleanProperty.java similarity index 97% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/ImmediateBooleanProperty.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/ImmediateBooleanProperty.java index 8425bb875..c3be3ecfc 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ImmediateBooleanProperty.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/ImmediateBooleanProperty.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.javafx; import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.value.ChangeListener; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ImmediateIntegerProperty.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/ImmediateIntegerProperty.java similarity index 97% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/ImmediateIntegerProperty.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/ImmediateIntegerProperty.java index 80ee92023..229246cc1 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ImmediateIntegerProperty.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/ImmediateIntegerProperty.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.javafx; import javafx.beans.property.SimpleIntegerProperty; import javafx.beans.value.ChangeListener; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ImmediateObjectProperty.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/ImmediateObjectProperty.java similarity index 97% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/ImmediateObjectProperty.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/ImmediateObjectProperty.java index 7cfba0cca..15ad870ec 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ImmediateObjectProperty.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/ImmediateObjectProperty.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.javafx; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.value.ChangeListener; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ImmediateStringProperty.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/ImmediateStringProperty.java similarity index 98% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/ImmediateStringProperty.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/ImmediateStringProperty.java index 988db96c5..38c0535f7 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ImmediateStringProperty.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/ImmediateStringProperty.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.javafx; import javafx.beans.property.SimpleStringProperty; import javafx.beans.value.ChangeListener; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/MappedObservableList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/MappedObservableList.java similarity index 99% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/MappedObservableList.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/MappedObservableList.java index 92683231c..4aad5a869 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/MappedObservableList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/MappedObservableList.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.javafx; import javafx.beans.InvalidationListener; import javafx.beans.Observable; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ObservableHelper.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/ObservableHelper.java similarity index 98% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/ObservableHelper.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/ObservableHelper.java index 796e1c29f..0b1d45d2e 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ObservableHelper.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/ObservableHelper.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.javafx; import javafx.beans.InvalidationListener; import javafx.beans.Observable; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/SelectionModelSelectedItemProperty.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/SelectionModelSelectedItemProperty.java similarity index 97% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/SelectionModelSelectedItemProperty.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/SelectionModelSelectedItemProperty.java index e6b3ff6fd..cea558dd0 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/SelectionModelSelectedItemProperty.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/SelectionModelSelectedItemProperty.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.javafx; import javafx.beans.property.SimpleObjectProperty; import javafx.scene.control.ComboBox; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/CommandBuilder.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/CommandBuilder.java similarity index 97% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/CommandBuilder.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/CommandBuilder.java index c4cb08194..e877ecd72 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/CommandBuilder.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/CommandBuilder.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.platform; import java.util.Collection; import java.util.LinkedList; @@ -23,6 +23,8 @@ import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; +import org.jackhuang.hmcl.util.StringUtils; + public final class CommandBuilder { private final OperatingSystem os; private List raw = new LinkedList<>(); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/JavaVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/JavaVersion.java similarity index 94% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/JavaVersion.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/JavaVersion.java index 51518363d..6f926b721 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/JavaVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/JavaVersion.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.platform; import java.io.BufferedReader; import java.io.File; @@ -35,6 +35,11 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; +import org.jackhuang.hmcl.util.Lang; +import org.jackhuang.hmcl.util.Logging; +import org.jackhuang.hmcl.util.StringUtils; +import org.jackhuang.hmcl.util.versioning.VersionNumber; + /** * Represents a Java installation. * @@ -73,12 +78,12 @@ public final class JavaVersion { /** * The major version of Java installation. * - * @see org.jackhuang.hmcl.util.JavaVersion#JAVA_11 - * @see org.jackhuang.hmcl.util.JavaVersion#JAVA_10 - * @see org.jackhuang.hmcl.util.JavaVersion#JAVA_9 - * @see org.jackhuang.hmcl.util.JavaVersion#JAVA_8 - * @see org.jackhuang.hmcl.util.JavaVersion#JAVA_7 - * @see org.jackhuang.hmcl.util.JavaVersion#UNKNOWN + * @see org.jackhuang.hmcl.util.platform.JavaVersion#JAVA_11 + * @see org.jackhuang.hmcl.util.platform.JavaVersion#JAVA_10 + * @see org.jackhuang.hmcl.util.platform.JavaVersion#JAVA_9 + * @see org.jackhuang.hmcl.util.platform.JavaVersion#JAVA_8 + * @see org.jackhuang.hmcl.util.platform.JavaVersion#JAVA_7 + * @see org.jackhuang.hmcl.util.platform.JavaVersion#UNKNOWN */ public int getParsedVersion() { return version; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ManagedProcess.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/ManagedProcess.java similarity index 98% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/ManagedProcess.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/ManagedProcess.java index 564fdc808..9d35aacda 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ManagedProcess.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/ManagedProcess.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.platform; import java.util.*; import java.util.concurrent.ConcurrentLinkedQueue; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/OperatingSystem.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java similarity index 98% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/OperatingSystem.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java index 2d048f3e3..4621fe0b4 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/OperatingSystem.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.platform; import javafx.scene.input.Clipboard; import javafx.scene.input.ClipboardContent; @@ -23,6 +23,9 @@ import javafx.scene.input.ClipboardContent; import javax.management.JMException; import javax.management.MBeanServer; import javax.management.ObjectName; + +import org.jackhuang.hmcl.util.Lang; + import java.io.File; import java.lang.management.ManagementFactory; import java.nio.charset.Charset; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Platform.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Platform.java similarity index 98% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/Platform.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Platform.java index d0eed274d..1a648ece5 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Platform.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Platform.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.platform; import com.google.gson.*; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ComposedVersionNumber.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/ComposedVersionNumber.java similarity index 97% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/ComposedVersionNumber.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/ComposedVersionNumber.java index ffae2f218..099760cd7 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/ComposedVersionNumber.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/ComposedVersionNumber.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.versioning; import java.util.Arrays; import java.util.List; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/IntVersionNumber.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/IntVersionNumber.java similarity index 96% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/IntVersionNumber.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/IntVersionNumber.java index d8b23d69a..a9b5a2a81 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/IntVersionNumber.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/IntVersionNumber.java @@ -15,13 +15,15 @@ * 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.util; +package org.jackhuang.hmcl.util.versioning; import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; +import org.jackhuang.hmcl.util.StringUtils; + /** * If a version string formats x.x.x.x, a {@code IntVersionNumber} * will be generated. diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringVersionNumber.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/StringVersionNumber.java similarity index 96% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringVersionNumber.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/StringVersionNumber.java index 10c50939f..e97c32e97 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringVersionNumber.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/StringVersionNumber.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.versioning; import java.util.Objects; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/VersionNumber.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/VersionNumber.java similarity index 98% rename from HMCLCore/src/main/java/org/jackhuang/hmcl/util/VersionNumber.java rename to HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/VersionNumber.java index 6e09503c8..91e23e48c 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/VersionNumber.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/VersionNumber.java @@ -15,7 +15,7 @@ * 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.util; +package org.jackhuang.hmcl.util.versioning; import java.util.Comparator; import java.util.List; diff --git a/README.md b/README.md index 1895c601f..042afaf2c 100644 --- a/README.md +++ b/README.md @@ -116,4 +116,11 @@ new MultiMCModpackInstallTask(dependency, modpackZipFile, MultiMCInstanceConfigu ## HMCL -No plugin API. \ No newline at end of file +No plugin API. + +## JVM Options (for debugging) +|Parameter|Description| +|---------|-----------| +|`-Dhmcl.self_integrity_check.disable=true`|Bypass the self integrity check when checking for update.| +|`-Dhmcl.version.override=`|Override the version number.| +|`-Dhmcl.update_source.override=`|Override the update source.|