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 a3e50cc26..fdca46992 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/AccountHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/AccountHelper.java @@ -38,9 +38,10 @@ import java.util.Collection; import java.util.LinkedList; import java.util.List; import java.util.Optional; +import java.util.UUID; public final class AccountHelper { - public static final AccountHelper INSTANCE = new AccountHelper(); + private AccountHelper() {} public static final File SKIN_DIR = new File(Launcher.HMCL_DIRECTORY, "skins"); @@ -73,8 +74,8 @@ public final class AccountHelper { return new SkinLoadTask(account, proxy, true); } - private static File getSkinFile(String name) { - return new File(SKIN_DIR, name + ".png"); + private static File getSkinFile(UUID uuid) { + return new File(SKIN_DIR, uuid + ".png"); } public static Image getSkin(YggdrasilAccount account) { @@ -82,9 +83,11 @@ public final class AccountHelper { } public static Image getSkin(YggdrasilAccount account, double scaleRatio) { - if (account.getCharacter() == null) - return getDefaultSkin(account, scaleRatio); - File file = getSkinFile(account.getCharacter()); + UUID uuid = account.getUUID(); + if (uuid == null) + return getSteveSkin(scaleRatio); + + File file = getSkinFile(uuid); if (file.exists()) { Image original = new Image("file:" + file.getAbsolutePath()); return new Image("file:" + file.getAbsolutePath(), @@ -92,15 +95,14 @@ public final class AccountHelper { original.getHeight() * scaleRatio, false, false); } - return getDefaultSkin(account, scaleRatio); + return getDefaultSkin(uuid, scaleRatio); } public static Image getSkinImmediately(YggdrasilAccount account, GameProfile profile, double scaleRatio, Proxy proxy) throws Exception { - String name = profile.getName(); - File file = getSkinFile(name); + File file = getSkinFile(profile.getId()); downloadSkin(account, profile, true, proxy); if (!file.exists()) - return getDefaultSkin(account, scaleRatio); + return getDefaultSkin(profile.getId(), scaleRatio); String url = "file:" + file.getAbsolutePath(); return scale(url, scaleRatio); @@ -152,7 +154,7 @@ public final class AccountHelper { Optional texture = account.getSkin(profile); if (!texture.isPresent()) return; String url = texture.get().getUrl(); - File file = getSkinFile(profile.getName()); + File file = getSkinFile(profile.getId()); if (!refresh && file.exists()) return; new FileDownloadTask(NetworkUtils.toURL(url), file, proxy).run(); @@ -165,7 +167,7 @@ public final class AccountHelper { Optional texture = account.getSkin(); if (!texture.isPresent()) return; String url = texture.get().getUrl(); - File file = getSkinFile(account.getCharacter()); + File file = getSkinFile(account.getUUID()); if (!refresh && file.exists()) return; new FileDownloadTask(NetworkUtils.toURL(url), file, proxy).run(); @@ -187,11 +189,8 @@ public final class AccountHelper { return scale("/assets/img/alex.png", 4); } - public static Image getDefaultSkin(Account account, double scaleRatio) { - if (account == null) - return getSteveSkin(scaleRatio); - - int type = account.getUUID().hashCode() & 1; + public static Image getDefaultSkin(UUID uuid, double scaleRatio) { + int type = uuid.hashCode() & 1; if (type == 1) return getAlexSkin(scaleRatio); else 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 679ec8f85..937ab255b 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java @@ -42,6 +42,7 @@ import java.net.InetSocketAddress; import java.net.PasswordAuthentication; import java.net.Proxy; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level; import java.util.stream.Collectors; @@ -62,13 +63,11 @@ public class Settings { public static final Settings INSTANCE = new Settings(); - private Settings() {} - private final Config SETTINGS = initSettings(); - private final Map accounts = new HashMap<>(); + private final Map accounts = new ConcurrentHashMap<>(); - { + private Settings() { loadProxy(); for (Iterator> iterator = SETTINGS.getAccounts().iterator(); iterator.hasNext(); ) { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/AddAccountPane.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/AddAccountPane.java index 782606e0f..d384855a1 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/AddAccountPane.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/AddAccountPane.java @@ -64,8 +64,8 @@ public class AddAccountPane extends StackPane { @FXML private JFXComboBox cboType; @FXML private JFXComboBox cboServers; @FXML private JFXProgressBar progressBar; - @FXML private Label lblAddInjectorServer; - @FXML private Hyperlink linkAddInjectorServer; + @FXML private Label lblInjectorServer; + @FXML private Hyperlink linkManageInjectorServers; @FXML private JFXDialogLayout layout; @FXML private JFXButton btnAccept; private final Consumer finalization; @@ -82,8 +82,8 @@ public class AddAccountPane extends StackPane { txtPassword.setVisible(newValue.intValue() != 0); lblPassword.setVisible(newValue.intValue() != 0); cboServers.setVisible(newValue.intValue() == 2); - linkAddInjectorServer.setVisible(newValue.intValue() == 2); - lblAddInjectorServer.setVisible(newValue.intValue() == 2); + linkManageInjectorServers.setVisible(newValue.intValue() == 2); + lblInjectorServer.setVisible(newValue.intValue() == 2); validateAcceptButton(); }); cboType.getSelectionModel().select(0); @@ -160,7 +160,7 @@ public class AddAccountPane extends StackPane { } @FXML - private void onAddInjecterServer() { + private void onManageInjecterServers() { finalization.accept(this); Controllers.navigate(Controllers.getServersPage()); } @@ -208,6 +208,7 @@ public class AddAccountPane extends StackPane { try { image = AccountHelper.getSkinImmediately(yggdrasilAccount, profile, 4, Settings.INSTANCE.getProxy()); } catch (Exception e) { + Logging.LOG.log(Level.WARNING, "Failed to get skin for " + profile.getName(), e); image = FXUtils.DEFAULT_ICON; } ImageView portraitView = new ImageView(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LeftPaneController.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LeftPaneController.java index 51f38a3b6..3fda2d12c 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LeftPaneController.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LeftPaneController.java @@ -167,7 +167,7 @@ public final class LeftPaneController { Image image = AccountHelper.getSkin((YggdrasilAccount) account, 4); item.setImage(image, AccountHelper.getViewport(4)); } else - item.setImage(AccountHelper.getDefaultSkin(account, 4), AccountHelper.getViewport(4)); + item.setImage(AccountHelper.getDefaultSkin(account.getUUID(), 4), AccountHelper.getViewport(4)); if (account instanceof AuthlibInjectorAccount) Accounts.getAuthlibInjectorServerNameAsync((AuthlibInjectorAccount) account) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/TransitionHandler.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/TransitionHandler.java index 1dba20f34..81edd0a42 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/TransitionHandler.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/animation/TransitionHandler.java @@ -22,6 +22,7 @@ import javafx.animation.Timeline; import javafx.scene.Node; import javafx.scene.Parent; import javafx.scene.layout.StackPane; +import javafx.scene.shape.Rectangle; import javafx.util.Duration; public final class TransitionHandler implements AnimationHandler { @@ -36,6 +37,12 @@ public final class TransitionHandler implements AnimationHandler { public TransitionHandler(StackPane view) { this.view = view; currentNode = view.getChildren().stream().findFirst().orElse(null); + + // prevent content overflow + Rectangle clip = new Rectangle(); + clip.widthProperty().bind(view.widthProperty()); + clip.heightProperty().bind(view.heightProperty()); + view.setClip(clip); } @Override diff --git a/HMCL/src/main/resources/assets/fxml/account-add.fxml b/HMCL/src/main/resources/assets/fxml/account-add.fxml index 4361683f8..c08f1b2c8 100644 --- a/HMCL/src/main/resources/assets/fxml/account-add.fxml +++ b/HMCL/src/main/resources/assets/fxml/account-add.fxml @@ -25,13 +25,13 @@ -