From 34b7e1d5829e237baffda9dcb4dc6c67fe4dd7e1 Mon Sep 17 00:00:00 2001 From: yushijinhun Date: Fri, 23 Nov 2018 22:01:52 +0800 Subject: [PATCH] Support use authlib-injector offline --- .../AuthlibInjectorAccount.java | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) 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 f8fff41de..c8c15e281 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 @@ -55,6 +55,19 @@ public class AuthlibInjectorAccount extends YggdrasilAccount { return inject(() -> super.logInWithPassword(password, selector)); } + @Override + public Optional playOffline() { + Optional auth = super.playOffline(); + Optional artifact = downloader.getArtifactInfoImmediately(); + Optional prefetchedMeta = server.getMetadataResponse(); + + if (auth.isPresent() && artifact.isPresent() && prefetchedMeta.isPresent()) { + return Optional.of(auth.get().withArguments(generateArguments(artifact.get(), server, prefetchedMeta.get()))); + } else { + return Optional.empty(); + } + } + private AuthInfo inject(ExceptionalSupplier loginAction) throws AuthenticationException { CompletableFuture prefetchedMetaTask = CompletableFuture.supplyAsync(() -> { try { @@ -90,10 +103,14 @@ public class AuthlibInjectorAccount extends YggdrasilAccount { } } - return auth.withArguments(new Arguments().addJVMArguments( + return auth.withArguments(generateArguments(artifact, server, prefetchedMeta)); + } + + private static Arguments generateArguments(AuthlibInjectorArtifactInfo artifact, AuthlibInjectorServer server, String prefetchedMeta) { + return new Arguments().addJVMArguments( "-javaagent:" + artifact.getLocation().toString() + "=" + server.getUrl(), "-Dauthlibinjector.side=client", - "-Dorg.to2mbn.authlibinjector.config.prefetched=" + Base64.getEncoder().encodeToString(prefetchedMeta.getBytes(UTF_8)))); + "-Dorg.to2mbn.authlibinjector.config.prefetched=" + Base64.getEncoder().encodeToString(prefetchedMeta.getBytes(UTF_8))); } @Override