Skip to content

Commit

Permalink
Add: clientid and auth_xuid
Browse files Browse the repository at this point in the history
  • Loading branch information
xfl03 committed Feb 1, 2023
1 parent 745de34 commit a802200
Show file tree
Hide file tree
Showing 14 changed files with 187 additions and 174 deletions.
14 changes: 13 additions & 1 deletion jmccc-cli/src/main/java/jmccc/cli/Main.java
Expand Up @@ -5,6 +5,7 @@
import jmccc.cli.launch.CliAuthenticator;
import jmccc.cli.launch.CliConfig;
import jmccc.cli.launch.CliLauncher;
import jmccc.microsoft.MicrosoftAuthenticator;
import joptsimple.OptionParser;
import joptsimple.OptionSet;
import joptsimple.OptionSpec;
Expand All @@ -20,7 +21,9 @@ public class Main {

/**
* Arguments:
* [--offline player_name] [--dir minecraft_directory] [version]
* Microsoft Account: [--microsoft] [--clientId client_id]
* Offline: [--offline player_name]
* [--bmclapi] [--dir minecraft_directory] [version]
*/
public static void main(String... args) {
try {
Expand All @@ -36,9 +39,12 @@ private static void internal(String... args) throws Exception {
//Parse args
OptionParser parser = new OptionParser();
parser.accepts("microsoft");
parser.accepts("bmclapi");
OptionSpec<String> offlineOption = parser.accepts("offline")
.availableUnless("microsoft").withOptionalArg().defaultsTo("Player");
OptionSpec<String> dirOption = parser.accepts("dir").withOptionalArg().defaultsTo(".minecraft");
OptionSpec<String> clientIdOption = parser.accepts("clientId")
.availableIf("microsoft").withOptionalArg();
OptionSpec<String> versionOption = parser.nonOptions();

OptionSet options = parser.parse(args);
Expand All @@ -47,9 +53,15 @@ private static void internal(String... args) throws Exception {
String version = versionOption.value(options);
MinecraftDirectory minecraftDirectory = new MinecraftDirectory(dir);
boolean isMicrosoftAccount = options.has("microsoft");
boolean isBmclApi = options.has("bmclapi");
String clientId = clientIdOption.value(options);

//Init config
CliConfig.initConfig(minecraftDirectory);
if (clientId != null) {
MicrosoftAuthenticator.setClientId(clientId);
}
CliDownloader.init(isBmclApi);

//Check special version
version = parseVersion(version);
Expand Down
38 changes: 23 additions & 15 deletions jmccc-cli/src/main/java/jmccc/cli/download/CliDownloader.java
Expand Up @@ -4,6 +4,7 @@
import org.to2mbn.jmccc.mcdownloader.MinecraftDownloaderBuilder;
import org.to2mbn.jmccc.mcdownloader.download.combine.CombinedDownloadTask;
import org.to2mbn.jmccc.mcdownloader.provider.DownloadProviderChain;
import org.to2mbn.jmccc.mcdownloader.provider.MojangDownloadProvider;
import org.to2mbn.jmccc.mcdownloader.provider.fabric.FabricDownloadProvider;
import org.to2mbn.jmccc.mcdownloader.provider.forge.ForgeDownloadProvider;
import org.to2mbn.jmccc.mcdownloader.provider.liteloader.LiteloaderDownloadProvider;
Expand All @@ -15,21 +16,28 @@
import java.util.concurrent.ExecutionException;

public class CliDownloader {
public static BmclApiProvider bmclApiProvider = new BmclApiProvider();
public static ForgeDownloadProvider forgeProvider = new ForgeDownloadProvider(bmclApiProvider);
public static LiteloaderDownloadProvider liteloaderProvider = new LiteloaderDownloadProvider(bmclApiProvider);
public static FabricDownloadProvider fabricProvider = new FabricDownloadProvider();
public static FabricDownloadProvider quiltProvider = new QuiltDownloadProvider();

public static MinecraftDownloader downloader = MinecraftDownloaderBuilder.create()
.providerChain(DownloadProviderChain.create()
.baseProvider(bmclApiProvider)
.addProvider(forgeProvider)
.addProvider(liteloaderProvider)
.addProvider(fabricProvider)
.addProvider(quiltProvider)
)
.build();
public static ForgeDownloadProvider forgeProvider;
public static LiteloaderDownloadProvider liteloaderProvider;
public static FabricDownloadProvider fabricProvider;
public static FabricDownloadProvider quiltProvider;
public static MinecraftDownloader downloader;

public static void init(boolean isBmclApi) {
BmclApiProvider bmclApiProvider = isBmclApi ? new BmclApiProvider() : null;
forgeProvider = new ForgeDownloadProvider(bmclApiProvider);
liteloaderProvider = new LiteloaderDownloadProvider(bmclApiProvider);
fabricProvider = new FabricDownloadProvider();
quiltProvider = new QuiltDownloadProvider();
downloader = MinecraftDownloaderBuilder.create()
.providerChain(DownloadProviderChain.create()
.baseProvider(bmclApiProvider == null ? new MojangDownloadProvider() : bmclApiProvider)
.addProvider(forgeProvider)
.addProvider(liteloaderProvider)
.addProvider(fabricProvider)
.addProvider(quiltProvider)
)
.build();
}

public static String getLatestRelease() throws ExecutionException, InterruptedException {
return downloader.fetchRemoteVersionList(null).get().getLatestRelease();
Expand Down
@@ -1,7 +1,7 @@
package jmccc.cli.launch;

import jmccc.microsoft.MicrosoftAuthenticator;
import jmccc.microsoft.entity.AuthenticationToken;
import jmccc.microsoft.entity.MicrosoftSession;
import org.to2mbn.jmccc.auth.AuthenticationException;
import org.to2mbn.jmccc.auth.Authenticator;

Expand All @@ -10,16 +10,16 @@
public class CliAuthenticator {
public static Authenticator getMicrosoftAuthenticator() throws AuthenticationException, IOException {
CliConfig config = CliConfig.getConfig();
AuthenticationToken token = config.token;
MicrosoftSession token = config.token;
MicrosoftAuthenticator ma;
if (token == null) {
System.out.println("Minecraft and Microsoft token not found.");
ma = MicrosoftAuthenticator.login(it -> System.out.println(it.message));
} else {
System.out.println("Existing Minecraft and Microsoft token found.");
ma = MicrosoftAuthenticator.token(token, it -> System.out.println(it.message));
ma = MicrosoftAuthenticator.session(token, it -> System.out.println(it.message));
}
config.token = ma.getAuthenticationToken();
config.token = ma.getSession();
config.writeToFile();
return ma;
}
Expand Down
6 changes: 4 additions & 2 deletions jmccc-cli/src/main/java/jmccc/cli/launch/CliConfig.java
Expand Up @@ -2,16 +2,18 @@

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import jmccc.microsoft.entity.AuthenticationToken;
import jmccc.microsoft.entity.MicrosoftSession;
import org.to2mbn.jmccc.option.MinecraftDirectory;
import org.to2mbn.jmccc.util.UUIDUtils;

import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class CliConfig {
public AuthenticationToken token;
public MicrosoftSession token;
public String clientId = UUIDUtils.randomUnsignedUuidBase64();

private static CliConfig instance;
private static Path configFile;
Expand Down
1 change: 1 addition & 0 deletions jmccc-cli/src/main/java/jmccc/cli/launch/CliLauncher.java
Expand Up @@ -15,6 +15,7 @@ public static void launch(LaunchOption option) throws Exception {
Launcher launcher = LauncherBuilder.create().printDebugCommandline(true).build();
//Change Minecraft main menu bottom left text
option.commandlineVariables().put("version_type", "JMCCC 3.0");
option.commandlineVariables().put("clientid", CliConfig.getConfig().clientId);
//Set memory to 2048MB
option.setMaxMemory(2048);
ProcessListener listener = new CliListener();
Expand Down

0 comments on commit a802200

Please sign in to comment.