diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java index 4c1c1c979..59389d030 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java @@ -26,7 +26,6 @@ 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; @@ -74,11 +73,8 @@ public final class Launcher extends Application { public static void main(String[] args) { Thread.setDefaultUncaughtExceptionHandler(CRASH_REPORTER); - if (!FileUtils.makeDirectory(LOG_DIRECTORY)) - System.out.println("Unable to create log directory " + LOG_DIRECTORY + ", log files cannot be generated."); - try { - Logging.start(LOG_DIRECTORY); + Logging.start(Metadata.HMCL_DIRECTORY.resolve("logs")); LOG.info("*** " + Metadata.TITLE + " ***"); LOG.info("Operating System: " + System.getProperty("os.name") + ' ' + OperatingSystem.SYSTEM_VERSION); @@ -86,7 +82,7 @@ public final class Launcher extends Application { LOG.info("Java VM Version: " + System.getProperty("java.vm.name") + " (" + System.getProperty("java.vm.info") + "), " + System.getProperty("java.vm.vendor")); LOG.info("Java Home: " + System.getProperty("java.home")); LOG.info("Current Directory: " + Paths.get("").toAbsolutePath()); - LOG.info("HMCL Directory: " + HMCL_DIRECTORY); + LOG.info("HMCL Directory: " + Metadata.HMCL_DIRECTORY); LOG.info("Memory: " + Runtime.getRuntime().maxMemory() / 1024 / 1024 + "MB"); ManagementFactory.getMemoryPoolMXBeans().stream().filter(bean -> bean.getName().equals("Metaspace")).findAny() .ifPresent(bean -> LOG.info("Metaspace: " + bean.getUsage().getUsed() / 1024 / 1024 + "MB")); @@ -143,9 +139,5 @@ public final class Launcher extends Application { return result; } - public static final File MINECRAFT_DIRECTORY = OperatingSystem.getWorkingDirectory("minecraft"); - public static final File HMCL_DIRECTORY = OperatingSystem.getWorkingDirectory("hmcl"); - public static final File LOG_DIRECTORY = new File(Launcher.HMCL_DIRECTORY, "logs"); - public static final CrashReporter CRASH_REPORTER = new CrashReporter(); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Metadata.java b/HMCL/src/main/java/org/jackhuang/hmcl/Metadata.java index 9f819bd48..ba20571e5 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/Metadata.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/Metadata.java @@ -17,7 +17,10 @@ */ package org.jackhuang.hmcl; +import java.nio.file.Path; + import org.jackhuang.hmcl.util.io.JarUtils; +import org.jackhuang.hmcl.util.platform.OperatingSystem; /** * Stores metadata about this application. @@ -33,4 +36,7 @@ public final class Metadata { public static final String CONTACT_URL = "https://hmcl.huangyuhui.net/contact"; public static final String HELP_URL = "https://hmcl.huangyuhui.net/help"; public static final String PUBLISH_URL = "http://www.mcbbs.net/thread-142335-1-1.html"; + + public static final Path MINECRAFT_DIRECTORY = OperatingSystem.getWorkingDirectory("minecraft"); + public static final Path HMCL_DIRECTORY = OperatingSystem.getWorkingDirectory("hmcl"); } 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 0f2934c38..f4913b264 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/AccountHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/AccountHelper.java @@ -19,7 +19,7 @@ package org.jackhuang.hmcl.game; import javafx.embed.swing.SwingFXUtils; import javafx.scene.image.Image; -import org.jackhuang.hmcl.Launcher; +import org.jackhuang.hmcl.Metadata; import org.jackhuang.hmcl.auth.Account; import org.jackhuang.hmcl.auth.yggdrasil.GameProfile; import org.jackhuang.hmcl.auth.yggdrasil.Texture; @@ -41,7 +41,7 @@ public final class AccountHelper { private AccountHelper() {} - public static final File SKIN_DIR = new File(Launcher.HMCL_DIRECTORY, "skins"); + public static final File SKIN_DIR = Metadata.HMCL_DIRECTORY.resolve("skins").toFile(); public static void loadSkins() { for (Account account : Accounts.getAccounts()) { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Accounts.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Accounts.java index 794c1da90..92fbb985b 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Accounts.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Accounts.java @@ -23,7 +23,7 @@ import javafx.beans.property.ReadOnlyListProperty; import javafx.beans.property.ReadOnlyListWrapper; import javafx.beans.property.SimpleObjectProperty; import javafx.collections.ObservableList; -import org.jackhuang.hmcl.Launcher; +import org.jackhuang.hmcl.Metadata; import org.jackhuang.hmcl.auth.Account; import org.jackhuang.hmcl.auth.AccountFactory; import org.jackhuang.hmcl.auth.AuthenticationException; @@ -61,7 +61,7 @@ public final class Accounts { public static final OfflineAccountFactory FACTORY_OFFLINE = OfflineAccountFactory.INSTANCE; public static final YggdrasilAccountFactory FACTORY_YGGDRASIL = new YggdrasilAccountFactory(MojangYggdrasilProvider.INSTANCE); public static final AuthlibInjectorAccountFactory FACTORY_AUTHLIB_INJECTOR = new AuthlibInjectorAccountFactory( - new AuthlibInjectorDownloader(Launcher.HMCL_DIRECTORY.toPath(), DownloadProviders::getDownloadProvider)::getArtifactInfo, + new AuthlibInjectorDownloader(Metadata.HMCL_DIRECTORY, DownloadProviders::getDownloadProvider)::getArtifactInfo, Accounts::getOrCreateAuthlibInjectorServer); private static final String TYPE_OFFLINE = "offline"; 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 94e02d81a..19598fb6c 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java @@ -32,7 +32,7 @@ import org.hildan.fxgson.creators.ObservableListCreator; import org.hildan.fxgson.creators.ObservableMapCreator; import org.hildan.fxgson.creators.ObservableSetCreator; import org.hildan.fxgson.factories.JavaFxPropertyTypeAdapterFactory; -import org.jackhuang.hmcl.Launcher; +import org.jackhuang.hmcl.Metadata; import org.jackhuang.hmcl.auth.authlibinjector.AuthlibInjectorServer; import org.jackhuang.hmcl.upgrade.UpdateChannel; import org.jackhuang.hmcl.util.gson.EnumOrdinalDeserializer; @@ -86,7 +86,7 @@ public final class Config implements Cloneable, Observable { private ObjectProperty commonDirType = new SimpleObjectProperty<>(EnumCommonDirectory.DEFAULT); @SerializedName("commonpath") - private StringProperty commonDirectory = new SimpleStringProperty(Launcher.MINECRAFT_DIRECTORY.getAbsolutePath()); + private StringProperty commonDirectory = new SimpleStringProperty(Metadata.MINECRAFT_DIRECTORY.toString()); @SerializedName("hasProxy") private BooleanProperty hasProxy = new SimpleBooleanProperty(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profiles.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profiles.java index 4d10e2d8f..62fb54f74 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profiles.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profiles.java @@ -22,7 +22,7 @@ import javafx.application.Platform; import javafx.beans.Observable; import javafx.beans.property.*; import javafx.collections.ObservableList; -import org.jackhuang.hmcl.Launcher; +import org.jackhuang.hmcl.Metadata; import org.jackhuang.hmcl.event.EventBus; import org.jackhuang.hmcl.event.RefreshedVersionsEvent; @@ -104,7 +104,7 @@ public final class Profiles { private static void checkProfiles() { if (profiles.isEmpty()) { Profile current = new Profile(Profiles.DEFAULT_PROFILE, new File(".minecraft"), new VersionSetting(), null, true); - Profile home = new Profile(Profiles.HOME_PROFILE, Launcher.MINECRAFT_DIRECTORY); + Profile home = new Profile(Profiles.HOME_PROFILE, Metadata.MINECRAFT_DIRECTORY.toFile()); Platform.runLater(() -> profiles.addAll(current, home)); } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java index 065c165df..1f46804ab 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java @@ -18,7 +18,7 @@ package org.jackhuang.hmcl.setting; import javafx.beans.binding.Bindings; -import org.jackhuang.hmcl.Launcher; +import org.jackhuang.hmcl.Metadata; import org.jackhuang.hmcl.game.HMCLCacheRepository; import org.jackhuang.hmcl.util.CacheRepository; @@ -64,7 +64,7 @@ public class Settings { } public static String getDefaultCommonDirectory() { - return Launcher.MINECRAFT_DIRECTORY.getAbsolutePath(); + return Metadata.MINECRAFT_DIRECTORY.toString(); } public String getCommonDirectory() { 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 44b0789e5..28b31a84c 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java @@ -28,7 +28,6 @@ import javafx.beans.property.*; import javafx.scene.control.ToggleGroup; import javafx.scene.paint.Color; import javafx.scene.text.Font; -import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.Metadata; import org.jackhuang.hmcl.setting.*; import org.jackhuang.hmcl.ui.construct.Validator; @@ -203,7 +202,7 @@ public final class SettingsPage extends SettingsView implements DecoratorPage { @Override protected void onOpenLogFolder() { - FXUtils.openFolder(Launcher.LOG_DIRECTORY); + FXUtils.openFolder(Metadata.HMCL_DIRECTORY.resolve("logs").toFile()); } @Override 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 92ac5e7ee..a3410fa41 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java @@ -21,7 +21,6 @@ import com.google.gson.Gson; import com.google.gson.JsonParseException; import javafx.application.Platform; import javafx.scene.layout.Region; -import org.jackhuang.hmcl.Launcher; import org.jackhuang.hmcl.Main; import org.jackhuang.hmcl.Metadata; import org.jackhuang.hmcl.task.Task; @@ -231,7 +230,7 @@ public final class UpdateHandler { private static boolean isFirstLaunchAfterUpgrade() { Optional currentPath = JarUtils.thisJar(); if (currentPath.isPresent()) { - Path updated = Launcher.HMCL_DIRECTORY.toPath().resolve("HMCL-" + Metadata.VERSION + ".jar"); + Path updated = Metadata.HMCL_DIRECTORY.resolve("HMCL-" + Metadata.VERSION + ".jar"); if (currentPath.get().toAbsolutePath().equals(updated.toAbsolutePath())) { return true; } @@ -240,7 +239,7 @@ public final class UpdateHandler { } private static void breakForceUpdateFeature() { - Path hmclVersionJson = Launcher.HMCL_DIRECTORY.toPath().resolve("hmclver.json"); + Path hmclVersionJson = Metadata.HMCL_DIRECTORY.resolve("hmclver.json"); if (Files.isRegularFile(hmclVersionJson)) { try { Map content = new Gson().fromJson(new String(Files.readAllBytes(hmclVersionJson), UTF_8), Map.class); 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 dc2414a0a..88df70611 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultCacheRepository.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultCacheRepository.java @@ -43,7 +43,7 @@ public class DefaultCacheRepository extends CacheRepository { private Index index = null; public DefaultCacheRepository() { - this(OperatingSystem.getWorkingDirectory("minecraft").toPath()); + this(OperatingSystem.getWorkingDirectory("minecraft")); } public DefaultCacheRepository(Path commonDirectory) { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Logging.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Logging.java index 48aaa276f..5cc77b22f 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Logging.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Logging.java @@ -18,9 +18,10 @@ package org.jackhuang.hmcl.util; import java.io.ByteArrayOutputStream; -import java.io.File; import java.io.IOException; import java.io.PrintWriter; +import java.nio.file.Files; +import java.nio.file.Path; import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.*; @@ -38,12 +39,13 @@ public final class Logging { LOG = Logger.getLogger("HMCL"); } - public static void start(File logFolder) { + public static void start(Path logFolder) { LOG.setLevel(Level.FINER); LOG.setUseParentHandlers(false); try { - FileHandler fileHandler = new FileHandler(new File(logFolder, "hmcl.log").getAbsolutePath()); + Files.createDirectories(logFolder); + FileHandler fileHandler = new FileHandler(logFolder.resolve("hmcl.log").toAbsolutePath().toString()); fileHandler.setLevel(Level.FINEST); fileHandler.setFormatter(DefaultFormatter.INSTANCE); LOG.addHandler(fileHandler); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java index 4621fe0b4..84f732e16 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java @@ -17,9 +17,6 @@ */ package org.jackhuang.hmcl.util.platform; -import javafx.scene.input.Clipboard; -import javafx.scene.input.ClipboardContent; - import javax.management.JMException; import javax.management.MBeanServer; import javax.management.ObjectName; @@ -29,6 +26,8 @@ import org.jackhuang.hmcl.util.Lang; import java.io.File; import java.lang.management.ManagementFactory; import java.nio.charset.Charset; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.Locale; import java.util.Optional; @@ -135,30 +134,24 @@ public enum OperatingSystem { return Optional.empty(); } - public static void setClipboard(String string) { - ClipboardContent c = new ClipboardContent(); - c.putString(string); - Clipboard.getSystemClipboard().setContent(c); - } - public static void forceGC() { System.gc(); System.runFinalization(); System.gc(); } - public static File getWorkingDirectory(String folder) { + public static Path getWorkingDirectory(String folder) { String home = System.getProperty("user.home", "."); switch (OperatingSystem.CURRENT_OS) { case LINUX: - return new File(home, "." + folder + "/"); + return Paths.get(home, "." + folder); case WINDOWS: String appdata = System.getenv("APPDATA"); - return new File(Lang.nonNull(appdata, home), "." + folder + "/"); + return Paths.get(Lang.nonNull(appdata, home), "." + folder); case OSX: - return new File(home, "Library/Application Support/" + folder); + return Paths.get(home, "Library", "Application Support", folder); default: - return new File(home, folder + "/"); + return Paths.get(home, folder); } } }