{"id":17722334,"url":"https://github.com/xfl03/jmccc","last_synced_at":"2025-04-15T01:28:52.957Z","repository":{"id":33362566,"uuid":"37007417","full_name":"xfl03/JMCCC","owner":"xfl03","description":"A powerful open-source library for launching and downloading Minecraft.","archived":false,"fork":false,"pushed_at":"2023-03-19T17:21:23.000Z","size":9138,"stargazers_count":144,"open_issues_count":3,"forks_count":31,"subscribers_count":12,"default_branch":"master","last_synced_at":"2024-09-30T09:18:36.215Z","etag":null,"topics":["minecraft","minecraft-downloader","minecraft-launcher"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xfl03.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-06-07T06:52:13.000Z","updated_at":"2024-09-29T17:51:19.000Z","dependencies_parsed_at":"2024-10-25T19:58:00.332Z","dependency_job_id":"e3915af1-d136-4e3c-83c1-e1754cc9c45d","html_url":"https://github.com/xfl03/JMCCC","commit_stats":null,"previous_names":["to2mbn/jmccc"],"tags_count":21,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xfl03%2FJMCCC","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xfl03%2FJMCCC/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xfl03%2FJMCCC/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xfl03%2FJMCCC/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xfl03","download_url":"https://codeload.github.com/xfl03/JMCCC/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248988426,"owners_count":21194417,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["minecraft","minecraft-downloader","minecraft-launcher"],"created_at":"2024-10-25T15:37:56.117Z","updated_at":"2025-04-15T01:28:52.939Z","avatar_url":"https://github.com/xfl03.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# JMCCC\n[![Maven Central](https://img.shields.io/maven-central/v/dev.3-3/jmccc)](https://central.sonatype.com/search?q=jmccc\u0026namespace=dev.3-3)\n[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/Southern-InfinityStudio/JMCCC?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge)\n\nA powerful open-source library for launching and downloading Minecraft.\n\n## License\nJMCCC is licensed under [the MIT license](https://github.com/xfl03/JMCCC/LICENSE).\n\n## Features\n * Launches all versions of Minecraft\n * Scalable authentication\n   * Supports Microsoft Account/Mojang Account/Offline, and can be extended\n * Downloads all versions of Minecraft\n   * Supports Forge/Liteloader/Fabric/Quilt\n     * Supports Liteloader snapshots\n     * Supports Fabric/Quilt in Minecraft snapshots\n   * Customizable download source\n   * Asynchronous task system\n   * Supports BIO/NIO\n     * Can work on top of [Apache HttpAsyncClient](http://hc.apache.org/httpcomponents-asyncclient-dev/) or JDK\n   * Supports caching\n     * Can work on top of Ehcache or javax.cache\n     * Different strategies for different files\n * Mojang API supports\n   * Game profiles lookup\n   * Fetches/Uploads textures\n   * Fetches account information\n   * Fetches name history\n   * Blocked servers checking\n\n## Quick Start\n### Dependencies\n| Dependency                              | Description                               |\n|-----------------------------------------|-------------------------------------------|\n| `dev.3-3:jmccc`                         | Minecraft launching feature.              |\n| `dev.3-3:jmccc-mcdownloader`            | Minecraft downloading feature.            |\n| `dev.3-3:jmccc-microsoft-authenticator` | Microsoft Account authentication feature. |\n| `dev.3-3:jmccc-mojang-api`              | Mojang API client.                        |\n| `dev.3-3:jmccc-yggdrasil-authenticator` | Mojang Account authentication feature.    |\n\nJMCCC **RELEASE** version has been uploaded to **MAVEN CENTRAL**:\n```\nhttps://repo1.maven.org/maven2/\n```\n\nIf you do need the snapshot repository:\n```\nhttps://s01.oss.sonatype.org/content/repositories/snapshots/\n```\n\n### Launching Minecraft\n```java\nMinecraftDirectory dir = new MinecraftDirectory(\"/home/user/.minecraft\");\nLauncher launcher = LauncherBuilder.buildDefault();\nlauncher.launch(new LaunchOption(\"1.19.3\", MicrosoftAuthenticator.login(it -\u003e System.out.println(it.message)), dir));\n```\nYou can use Microsoft Account with `MicrosoftAuthenticator.login(it -\u003e System.out.println(it.message))`, also you can use `YggdrasilAuthenticator.password(\"\u003cemail\u003e\", \"\u003cpassword\u003e\")` with Mojang Account or `new OfflineAuthenticator(\"\u003cusername\u003e\")` if you want to use offline authentication.\n\n### Downloading Minecraft\n```java\nMinecraftDirectory dir = new MinecraftDirectory(\"/home/user/.minecraft\");\nMinecraftDownloader downloader = MinecraftDownloaderBuilder.buildDefault();\ndownloader.downloadIncrementally(dir, \"1.19.3\", new CallbackAdapter\u003cVersion\u003e() {\n\t\n\t@Override\n\tpublic void failed(Throwable e) {\n\t\t// when the task fails\n\t}\n\t\n\t@Override\n\tpublic void done(Version result) {\n\t\t// when the task finishes\n\t}\n\t\n\t@Override\n\tpublic void cancelled() {\n\t\t// when the task cancels\n\t}\n\t\n\t@Override\n\tpublic \u003cR\u003e DownloadCallback\u003cR\u003e taskStart(DownloadTask\u003cR\u003e task) {\n\t\t// when a new sub download task starts\n\t\t// return a DownloadCallback to listen the status of the task\n\t\treturn new CallbackAdapter\u003cR\u003e() {\n\n\t\t\t@Override\n\t\t\tpublic void done(R result) {\n\t\t\t\t// when the sub download task finishes\n\t\t\t}\n\n\t\t\t@Override\n\t\t\tpublic void failed(Throwable e) {\n\t\t\t\t// when the sub download task fails\n\t\t\t}\n\n\t\t\t@Override\n\t\t\tpublic void cancelled() {\n\t\t\t\t// when the sub download task cancels\n\t\t\t}\n\n\t\t\t@Override\n\t\t\tpublic void updateProgress(long done, long total) {\n\t\t\t\t// when the progress of the sub download task has updated\n\t\t\t}\n\n\t\t\t@Override\n\t\t\tpublic void retry(Throwable e, int current, int max) {\n\t\t\t\t// when the sub download task fails, and the downloader decides to retry the task\n\t\t\t\t// in this case, failed() won't be called\n\t\t\t}\n\t\t};\n\t}\n});\n```\n\nYou can pass a `null` callback if you don't want to monitor the whole task.\nYou can also return `null` in `taskStart()` if you don't want to monitor sub tasks.\n\nDon't forget to shutdown the downloader when you are no longer going to use it.\n```java\ndownloader.shutdown();\n```\n\n### Downloading Forge/Liteloader/Fabric/Quilt\n```java\nMinecraftDirectory dir = new MinecraftDirectory(\"/home/user/.minecraft\");\nForgeDownloadProvider forgeProvider = new ForgeDownloadProvider();\nLiteloaderDownloadProvider liteloaderProvider = new LiteloaderDownloadProvider();\nMinecraftDownloader downloader = MinecraftDownloaderBuilder.create()\n\t.providerChain(DownloadProviderChain.create()\n\t\t.addProvider(forgeProvider)\n\t\t.addProvider(liteloaderProvider))\n\t.build();\n\ndownloader.downloadIncrementally(dir, \"1.19.3-forge-44.1.7\", new CallbackAdapter\u003cVersion\u003e() {...});\ndownloader.downloadIncrementally(dir, \"1.12.2-LiteLoader1.12.2\", new CallbackAdapter\u003cVersion\u003e() {...});\ndownloader.downloadIncrementally(dir, \"fabric-loader-0.14.13-1.19.3\", new CallbackAdapter\u003cVersion\u003e() {...});\ndownloader.downloadIncrementally(dir, \"quilt-loader-0.17.11-1.19.3\", new CallbackAdapter\u003cVersion\u003e() {...});\ndownloader.download(forgeProvider.forgeVersionList(), new CallbackAdapter\u003cForgeVersionList\u003e() {...});\ndownloader.download(liteloaderProvider.liteloaderVersionList(), new CallbackAdapter\u003cLiteloaderVersionList\u003e() {...});\n```\n\n### FML options\nJMCCC won't add fml options (such as `-Dfml.ignoreInvalidMinecraftCertificates=true` and `-Dfml.ignorePatchDiscrepancies=true`) to the command line automatically.\nIf you have problems launching forge, you may need to add these arguments manually.\nThese arguments are already defined in class `ExtraArgumentsTemplates`.\n```java\noption.extraJvmArguments().add(ExtraArgumentsTemplates.FML_IGNORE_INVALID_MINECRAFT_CERTIFICATES);\noption.extraJvmArguments().add(ExtraArgumentsTemplates.FML_IGNORE_PATCH_DISCREPANCISE);\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxfl03%2Fjmccc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxfl03%2Fjmccc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxfl03%2Fjmccc/lists"}