GPL v3, see http://www.gnu.org/licenses/gpl.html
Introduction
HMCL is a Minecraft launcher which supports Mod management, game customizing, auto installing(Forge, LiteLoader and OptiFine), modpack creating, UI customizing and so on.
Contribution
If you want to submit a pull request, there're some requirements:
- IDE: Intellij IDEA.
- Compiler: Java 1.8.
- Do NOT modify
gradlefiles.
HMCLCore
Now HMCLCore is independent and you can use HMCLCore as a library to launch your game.
GameRepository
Create a game repository repository to manage a minecraft installation. Like this.
DefaultGameRepository repository = new DefaultGameRepository(new File(".minecraft").getAbsoluteFile());
You should put where your minecraft installation is to the only argument of the constructor of DefaultGameRepository.
Launching
Now you can launch game by constructing a DefaultLauncher.
DefaultLauncher launcher = new DefaultLauncher( repository, // GameRepository "test", // Your minecraft version name new AccountBuilder.Builder() .setUsername("playerId") .setProxy(Proxy.NO_PROXY) // Optional .create(OfflineAccountFactory.INSTANCE) .logIn(), // account // or new AccountBuilder.Builder() // .setUsername("someone@xxx.com") // .setPassword("someone's password") // // for Mojang account // .create(new YggdrasilAccountFactory(MojangYggdrasilProvider.INSTANCE)) // // for Authlib Injector account // .create(new AuthlibInjectorAccountFactory( // new AuthlibInjectorDownloader(new File("path to save executables of authlib injector"), // () -> MojangYggdrasilProvider.INSTANCE)::getArtifactInfo, // () -> AuthlibInjectorServer.fetchServerInfo("Your authlib injector auth server"))) // .logIn() new LaunchOptions.Builder() .setGameDir(repository.getBaseDirectory()) // directory that the game saves settings to .setMaxMemory(...) .setJava(...) // executable of JVM .setJavaArgs(...) // additional Java VM arguments .setMinecraftArgs(...) // additional Minecraft arguments .setHeight(...) // height of game window .setWidth(...) // width of game window ... .create(), new ProcessListener() { // listening the process state. @Override public void onLog(String log, Log4jLevel level) { // new console log System.out.println(log); } @Override public void onExit(int exitCode, ExitType exitType) { // process exited System.out.println("Process exited then exit code " + exitCode); } }, false // true if launcher process exits, listening threads exit too. );
Now you can simply call launcher.launch() to launch the game.
If you want the command line, just call launcher.getRawCommandLine. Also, StringUtils.makeCommand might be useful.
Downloading
HMCLCore just owns a simple way to download a new game.
DefaultDependencyManager dependency = new DefaultDependencyManager(repository, new MojangDownloadProvider(), proxy);
repository is your GameRepository. MojangDownloadProvider.INSTANCE means that we download files from mojang servers. If you want BMCLAPI, BMCLAPIDownloadProvider.INSTANCE is just for you. proxy is java.net.Proxy, if you have a proxy, put it here, or Proxy.NO_PROXY.
Now GameBuilder can build a game.
Task gameBuildingTask = dependency.gameBuilder() .name("test") .gameVersion("1.12") // Minecraft version .version("forge", "14.21.1.2426") // Forge version .version("liteloader", "1.12-SNAPSHOT-4") // LiteLoader version .version("optifine", "HD_U_C4") // OptiFine version .buildAsync();
Nowadays HMCLCore only supports Forge, LiteLoader and OptiFine auto-installing.
buildAsync will return a Task, you can call Task.executor()::start or simply Task::start to start this task. If you want to monitor the execution of tasks, you should see TaskExecutor and Task::executor.
Modpack installing
HMCLCore supports Curse, MultiMC modpack.
// Installing curse modpack new CurseInstallTask(dependency, modpackZipFile, CurseManifest.readCurseForgeModpackManifest(modpackZipFile), "name of the new game"); // Installing MultiMC modpack new MultiMCModpackInstallTask(dependency, modpackZipFile, MultiMCInstanceConfiguration.readMultiMCModpackManifest(modpackZipFile), "name of the new game"); // ** IMPORTANT **: You should read game settings from MultiMCInstanceConfiguration
HMCL
No plugin API.
JVM Options (for debugging)
| Parameter | Description |
|---|---|
-Dhmcl.self_integrity_check.disable=true |
Bypass the self integrity check when checking for update. |
-Dhmcl.version.override=<version> |
Override the version number. |
-Dhmcl.update_source.override=<url> |
Override the update source. |
-Dhmcl.authlibinjector.location=<path> |
Use specified authlib-injector (instead of downloading one). |