From 4f51e377ae37d94057ea26db398ee70cd3fa71e3 Mon Sep 17 00:00:00 2001 From: yushijinhun Date: Fri, 8 Jun 2018 19:26:05 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4canPlayOffline()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/jackhuang/hmcl/game/LauncherHelper.java | 6 ++---- .../main/java/org/jackhuang/hmcl/auth/Account.java | 5 ++--- .../jackhuang/hmcl/auth/offline/OfflineAccount.java | 10 +++------- .../hmcl/auth/yggdrasil/YggdrasilAccount.java | 13 ++++--------- 4 files changed, 11 insertions(+), 23 deletions(-) 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 ef1ac22bb..7fff98200 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java @@ -97,10 +97,8 @@ public final class LauncherHelper { try { variables.set("account", account.logIn()); } catch (ServerDisconnectException e) { - if (account.canPlayOffline()) - variables.set("account", account.playOffline()); - else - throw e; + variables.set("account", + account.playOffline().orElseThrow(() -> e)); } } catch (AuthenticationException e) { variables.set("account", DialogController.logIn(account)); 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 49391eb6c..2fd2c7818 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/Account.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/Account.java @@ -20,6 +20,7 @@ package org.jackhuang.hmcl.auth; import org.jackhuang.hmcl.util.ToStringBuilder; import java.util.Map; +import java.util.Optional; import java.util.UUID; /** @@ -56,13 +57,11 @@ public abstract class Account { */ public abstract AuthInfo logInWithPassword(String password) throws AuthenticationException; - public abstract boolean canPlayOffline(); - /** * Play offline. * @return the specific offline player's info. */ - public abstract AuthInfo playOffline(); + public abstract Optional playOffline(); public abstract Map toStorage(); 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 aee8c60ed..f4925d9d5 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 @@ -26,6 +26,7 @@ import org.jackhuang.hmcl.util.UUIDTypeAdapter; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.UUID; import static org.jackhuang.hmcl.util.Lang.mapOf; @@ -80,13 +81,8 @@ public class OfflineAccount extends Account { } @Override - public boolean canPlayOffline() { - return false; - } - - @Override - public AuthInfo playOffline() { - throw new IllegalStateException(); + public Optional playOffline() { + return Optional.empty(); } @Override 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 4b7fd3135..cb6d88022 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 @@ -103,16 +103,11 @@ public class YggdrasilAccount extends Account { } @Override - public boolean canPlayOffline() { - return isLoggedIn() && session.getSelectedProfile() != null && !canPlayOnline(); - } + public Optional playOffline() { + if (isLoggedIn() && session.getSelectedProfile() != null && !canPlayOnline()) + return Optional.of(session.toAuthInfo()); - @Override - public AuthInfo playOffline() { - if (!canPlayOffline()) - throw new IllegalStateException("Current account " + this + " cannot play offline."); - - return session.toAuthInfo(); + return Optional.empty(); } @Override