├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── config.yml │ └── suggestion.yml └── workflows │ └── dispatch.yml ├── .gitignore ├── .gitmodules ├── BUILD.md ├── CMakeLists.txt ├── COPYING.md ├── README.md ├── branding ├── MultiMC.icns ├── MultiMC.ico ├── MultiMC.manifest ├── genicons.sh ├── logo-discord.svg ├── logo-macos.svg ├── logo.qrc ├── logo.svg └── multimc.rc ├── buildconfig ├── BuildConfig.cpp.in ├── BuildConfig.h └── CMakeLists.txt ├── changelog.md ├── cmake ├── BundleUtilities.cmake ├── GetGitRevisionDescription.cmake ├── GetGitRevisionDescription.cmake.in ├── GetPrerequisites.cmake ├── GitFunctions.cmake ├── MacOSXBundleInfo.plist.in ├── QMakeQuery.cmake ├── UnitTest.cmake ├── UnitTest │ ├── TestUtil.h │ ├── generate_test_data.cmake │ ├── test.manifest │ └── test.rc ├── UseJava.cmake ├── UseJavaClassFilelist.cmake └── UseJavaSymlinks.cmake ├── doc └── multimc.1.txt ├── launcher ├── Application.cpp ├── Application.h ├── ApplicationMessage.cpp ├── ApplicationMessage.h ├── BaseInstaller.cpp ├── BaseInstaller.h ├── BaseInstance.cpp ├── BaseInstance.h ├── BaseVersion.h ├── BaseVersionList.cpp ├── BaseVersionList.h ├── CMakeLists.txt ├── Commandline.cpp ├── Commandline.h ├── DefaultVariable.h ├── DesktopServices.cpp ├── DesktopServices.h ├── Exception.h ├── ExponentialSeries.h ├── FileSystem.cpp ├── FileSystem.h ├── FileSystem_test.cpp ├── Filter.cpp ├── Filter.h ├── GZip.cpp ├── GZip.h ├── GZip_test.cpp ├── HoeDown.h ├── InstanceCopyTask.cpp ├── InstanceCopyTask.h ├── InstanceCreationTask.cpp ├── InstanceCreationTask.h ├── InstanceImportTask.cpp ├── InstanceImportTask.h ├── InstanceList.cpp ├── InstanceList.h ├── InstancePageProvider.h ├── InstanceTask.cpp ├── InstanceTask.h ├── JavaCommon.cpp ├── JavaCommon.h ├── Json.cpp ├── Json.h ├── KonamiCode.cpp ├── KonamiCode.h ├── LaunchController.cpp ├── LaunchController.h ├── Launcher.in ├── LoggedProcess.cpp ├── LoggedProcess.h ├── MMCStrings.cpp ├── MMCStrings.h ├── MMCTime.cpp ├── MMCTime.h ├── MMCZip.cpp ├── MMCZip.h ├── MessageLevel.cpp ├── MessageLevel.h ├── NullInstance.h ├── ProblemProvider.h ├── QObjectPtr.h ├── RWStorage.h ├── RecursiveFileSystemWatcher.cpp ├── RecursiveFileSystemWatcher.h ├── SeparatorPrefixTree.h ├── UpdateController.cpp ├── UpdateController.h ├── Usable.h ├── Version.cpp ├── Version.h ├── VersionProxyModel.cpp ├── VersionProxyModel.h ├── Version_test.cpp ├── WatchLock.h ├── icons │ ├── IconList.cpp │ ├── IconList.h │ ├── IconUtils.cpp │ ├── IconUtils.h │ ├── MMCIcon.cpp │ └── MMCIcon.h ├── install_prereqs.cmake.in ├── java │ ├── JavaChecker.cpp │ ├── JavaChecker.h │ ├── JavaCheckerJob.cpp │ ├── JavaCheckerJob.h │ ├── JavaInstall.cpp │ ├── JavaInstall.h │ ├── JavaInstallList.cpp │ ├── JavaInstallList.h │ ├── JavaUtils.cpp │ ├── JavaUtils.h │ ├── JavaVersion.cpp │ ├── JavaVersion.h │ └── JavaVersion_test.cpp ├── launch │ ├── LaunchStep.cpp │ ├── LaunchStep.h │ ├── LaunchTask.cpp │ ├── LaunchTask.h │ ├── LogModel.cpp │ ├── LogModel.h │ └── steps │ │ ├── CheckJava.cpp │ │ ├── CheckJava.h │ │ ├── LookupServerAddress.cpp │ │ ├── LookupServerAddress.h │ │ ├── PostLaunchCommand.cpp │ │ ├── PostLaunchCommand.h │ │ ├── PreLaunchCommand.cpp │ │ ├── PreLaunchCommand.h │ │ ├── TextPrint.cpp │ │ ├── TextPrint.h │ │ ├── Update.cpp │ │ └── Update.h ├── main.cpp ├── meta │ ├── BaseEntity.cpp │ ├── BaseEntity.h │ ├── Index.cpp │ ├── Index.h │ ├── Index_test.cpp │ ├── JsonFormat.cpp │ ├── JsonFormat.h │ ├── Version.cpp │ ├── Version.h │ ├── VersionList.cpp │ └── VersionList.h ├── minecraft │ ├── AssetsUtils.cpp │ ├── AssetsUtils.h │ ├── Component.cpp │ ├── Component.h │ ├── ComponentUpdateTask.cpp │ ├── ComponentUpdateTask.h │ ├── ComponentUpdateTask_p.h │ ├── GradleSpecifier.h │ ├── GradleSpecifier_test.cpp │ ├── LaunchProfile.cpp │ ├── LaunchProfile.h │ ├── Library.cpp │ ├── Library.h │ ├── Library_test.cpp │ ├── MinecraftInstance.cpp │ ├── MinecraftInstance.h │ ├── MinecraftLoadAndCheck.cpp │ ├── MinecraftLoadAndCheck.h │ ├── MinecraftUpdate.cpp │ ├── MinecraftUpdate.h │ ├── MojangDownloadInfo.h │ ├── MojangVersionFormat.cpp │ ├── MojangVersionFormat.h │ ├── MojangVersionFormat_test.cpp │ ├── OneSixVersionFormat.cpp │ ├── OneSixVersionFormat.h │ ├── OpSys.cpp │ ├── OpSys.h │ ├── PackProfile.cpp │ ├── PackProfile.h │ ├── PackProfile_p.h │ ├── ParseUtils.cpp │ ├── ParseUtils.h │ ├── ParseUtils_test.cpp │ ├── ProfileUtils.cpp │ ├── ProfileUtils.h │ ├── Rule.cpp │ ├── Rule.h │ ├── VersionFile.cpp │ ├── VersionFile.h │ ├── VersionFilterData.cpp │ ├── VersionFilterData.h │ ├── World.cpp │ ├── World.h │ ├── WorldList.cpp │ ├── WorldList.h │ ├── auth │ │ ├── AccountData.cpp │ │ ├── AccountData.h │ │ ├── AccountList.cpp │ │ ├── AccountList.h │ │ ├── AccountTask.cpp │ │ ├── AccountTask.h │ │ ├── AuthRequest.cpp │ │ ├── AuthRequest.h │ │ ├── AuthSession.cpp │ │ ├── AuthSession.h │ │ ├── AuthStep.cpp │ │ ├── AuthStep.h │ │ ├── MinecraftAccount.cpp │ │ ├── MinecraftAccount.h │ │ ├── Parsers.cpp │ │ ├── Parsers.h │ │ ├── flows │ │ │ ├── AuthFlow.cpp │ │ │ ├── AuthFlow.h │ │ │ ├── MSA.cpp │ │ │ └── MSA.h │ │ └── steps │ │ │ ├── EntitlementsStep.cpp │ │ │ ├── EntitlementsStep.h │ │ │ ├── GetSkinStep.cpp │ │ │ ├── GetSkinStep.h │ │ │ ├── LauncherLoginStep.cpp │ │ │ ├── LauncherLoginStep.h │ │ │ ├── MSAStep.cpp │ │ │ ├── MSAStep.h │ │ │ ├── MinecraftProfileCreateStep.cpp │ │ │ ├── MinecraftProfileCreateStep.h │ │ │ ├── MinecraftProfileStep.cpp │ │ │ ├── MinecraftProfileStep.h │ │ │ ├── SetCapeStep.cpp │ │ │ ├── SetCapeStep.h │ │ │ ├── SetSkinStep.cpp │ │ │ ├── SetSkinStep.h │ │ │ ├── XboxAuthorizationStep.cpp │ │ │ ├── XboxAuthorizationStep.h │ │ │ ├── XboxProfileStep.cpp │ │ │ ├── XboxProfileStep.h │ │ │ ├── XboxUserStep.cpp │ │ │ └── XboxUserStep.h │ ├── gameoptions │ │ ├── GameOptions.cpp │ │ └── GameOptions.h │ ├── launch │ │ ├── ClaimAccount.cpp │ │ ├── ClaimAccount.h │ │ ├── CreateGameFolders.cpp │ │ ├── CreateGameFolders.h │ │ ├── DirectJavaLaunch.cpp │ │ ├── DirectJavaLaunch.h │ │ ├── ExtractNatives.cpp │ │ ├── ExtractNatives.h │ │ ├── LauncherPartLaunch.cpp │ │ ├── LauncherPartLaunch.h │ │ ├── ModMinecraftJar.cpp │ │ ├── ModMinecraftJar.h │ │ ├── PrintInstanceInfo.cpp │ │ ├── PrintInstanceInfo.h │ │ ├── QuickPlayTarget.cpp │ │ ├── QuickPlayTarget.h │ │ ├── ReconstructAssets.cpp │ │ ├── ReconstructAssets.h │ │ ├── ScanModFolders.cpp │ │ ├── ScanModFolders.h │ │ ├── VerifyJavaInstall.cpp │ │ └── VerifyJavaInstall.h │ ├── legacy │ │ ├── LegacyInstance.cpp │ │ ├── LegacyInstance.h │ │ ├── LegacyModList.cpp │ │ ├── LegacyModList.h │ │ ├── LegacyUpgradeTask.cpp │ │ └── LegacyUpgradeTask.h │ ├── mod │ │ ├── LocalModParseTask.cpp │ │ ├── LocalModParseTask.h │ │ ├── Mod.cpp │ │ ├── Mod.h │ │ ├── ModDetails.h │ │ ├── ModFolderLoadTask.cpp │ │ ├── ModFolderLoadTask.h │ │ ├── ModFolderModel.cpp │ │ ├── ModFolderModel.h │ │ ├── ModFolderModel_test.cpp │ │ ├── ResourcePackFolderModel.cpp │ │ ├── ResourcePackFolderModel.h │ │ ├── TexturePackFolderModel.cpp │ │ └── TexturePackFolderModel.h │ ├── testdata │ │ ├── 1.9-simple.json │ │ ├── 1.9.json │ │ ├── codecwav-20101023.jar │ │ ├── lib-native-arch.json │ │ ├── lib-native.json │ │ ├── lib-simple.json │ │ └── testname-testversion-linux-32.jar │ └── update │ │ ├── AssetUpdateTask.cpp │ │ ├── AssetUpdateTask.h │ │ ├── FMLLibrariesTask.cpp │ │ ├── FMLLibrariesTask.h │ │ ├── FoldersTask.cpp │ │ ├── FoldersTask.h │ │ ├── LibrariesTask.cpp │ │ └── LibrariesTask.h ├── modplatform │ ├── atlauncher │ │ ├── ATLPackIndex.cpp │ │ ├── ATLPackIndex.h │ │ ├── ATLPackInstallTask.cpp │ │ ├── ATLPackInstallTask.h │ │ ├── ATLPackManifest.cpp │ │ └── ATLPackManifest.h │ ├── legacy_ftb │ │ ├── PackFetchTask.cpp │ │ ├── PackFetchTask.h │ │ ├── PackHelpers.h │ │ ├── PackInstallTask.cpp │ │ ├── PackInstallTask.h │ │ ├── PrivatePackManager.cpp │ │ └── PrivatePackManager.h │ ├── modrinth │ │ ├── ModrinthHashLookupRequest.cpp │ │ ├── ModrinthHashLookupRequest.h │ │ ├── ModrinthInstanceExportTask.cpp │ │ ├── ModrinthInstanceExportTask.h │ │ ├── ModrinthPackManifest.cpp │ │ └── ModrinthPackManifest.h │ └── technic │ │ ├── SingleZipPackInstallTask.cpp │ │ ├── SingleZipPackInstallTask.h │ │ ├── SolderPackInstallTask.cpp │ │ ├── SolderPackInstallTask.h │ │ ├── SolderPackManifest.cpp │ │ ├── SolderPackManifest.h │ │ ├── TechnicPackProcessor.cpp │ │ └── TechnicPackProcessor.h ├── mojang │ ├── PackageManifest.cpp │ ├── PackageManifest.h │ ├── PackageManifest_test.cpp │ └── testdata │ │ ├── 1.8.0_202-x64.json │ │ ├── inspect │ │ └── a │ │ │ ├── b.txt │ │ │ └── b │ │ │ └── b.txt │ │ └── inspect_win │ │ └── a │ │ ├── b.txt │ │ └── b │ │ └── b.txt ├── net │ ├── ByteArraySink.h │ ├── ChecksumValidator.h │ ├── Download.cpp │ ├── Download.h │ ├── FileSink.cpp │ ├── FileSink.h │ ├── HttpMetaCache.cpp │ ├── HttpMetaCache.h │ ├── MetaCacheSink.cpp │ ├── MetaCacheSink.h │ ├── Mode.h │ ├── NetAction.h │ ├── NetJob.cpp │ ├── NetJob.h │ ├── PasteUpload.cpp │ ├── PasteUpload.h │ ├── Sink.h │ └── Validator.h ├── news │ ├── NewsChecker.cpp │ ├── NewsChecker.h │ ├── NewsEntry.cpp │ └── NewsEntry.h ├── notifications │ ├── NotificationChecker.cpp │ └── NotificationChecker.h ├── package │ ├── rpm │ │ ├── MultiMC5.spec │ │ └── README.md │ └── ubuntu │ │ ├── README.md │ │ └── multimc │ │ ├── DEBIAN │ │ ├── control │ │ └── postrm │ │ ├── opt │ │ └── multimc │ │ │ ├── icon.svg │ │ │ └── run.sh │ │ └── usr │ │ └── share │ │ ├── applications │ │ └── multimc.desktop │ │ ├── man │ │ └── man1 │ │ │ └── multimc.1 │ │ └── metainfo │ │ └── multimc.metainfo.xml ├── pathmatcher │ ├── FSTreeMatcher.h │ ├── IPathMatcher.h │ ├── MultiMatcher.h │ └── RegexpMatcher.h ├── resources │ ├── OSX │ │ ├── OSX.qrc │ │ ├── index.theme │ │ └── scalable │ │ │ ├── about.svg │ │ │ ├── accounts.svg │ │ │ ├── bug.svg │ │ │ ├── centralmods.svg │ │ │ ├── checkupdate.svg │ │ │ ├── copy.svg │ │ │ ├── coremods.svg │ │ │ ├── custom-commands.svg │ │ │ ├── externaltools.svg │ │ │ ├── help.svg │ │ │ ├── instance-settings.svg │ │ │ ├── jarmods.svg │ │ │ ├── java.svg │ │ │ ├── language.svg │ │ │ ├── launcher.svg │ │ │ ├── loadermods.svg │ │ │ ├── log.svg │ │ │ ├── minecraft.svg │ │ │ ├── new.svg │ │ │ ├── news.svg │ │ │ ├── notes.svg │ │ │ ├── patreon.svg │ │ │ ├── proxy.svg │ │ │ ├── refresh.svg │ │ │ ├── resourcepacks.svg │ │ │ ├── screenshots.svg │ │ │ ├── settings.svg │ │ │ ├── shaderpacks.svg │ │ │ ├── status-bad.svg │ │ │ ├── status-good.svg │ │ │ ├── status-yellow.svg │ │ │ ├── viewfolder.svg │ │ │ └── worlds.svg │ ├── assets │ │ └── underconstruction.png │ ├── backgrounds │ │ ├── backgrounds.qrc │ │ ├── catbgrnd2.png │ │ ├── catmas.png │ │ └── cattiversary.png │ ├── documents │ │ └── documents.qrc │ ├── flat │ │ ├── flat.qrc │ │ ├── index.theme │ │ └── scalable │ │ │ ├── about.svg │ │ │ ├── accounts.svg │ │ │ ├── bug.svg │ │ │ ├── cat.svg │ │ │ ├── centralmods.svg │ │ │ ├── checkupdate.svg │ │ │ ├── copy.svg │ │ │ ├── coremods.svg │ │ │ ├── custom-commands.svg │ │ │ ├── discord.svg │ │ │ ├── externaltools.svg │ │ │ ├── help.svg │ │ │ ├── instance-settings.svg │ │ │ ├── jarmods.svg │ │ │ ├── java.svg │ │ │ ├── language.svg │ │ │ ├── launcher.svg │ │ │ ├── loadermods.svg │ │ │ ├── log.svg │ │ │ ├── minecraft.svg │ │ │ ├── multimc.svg │ │ │ ├── new.svg │ │ │ ├── news.svg │ │ │ ├── notes.svg │ │ │ ├── packages.svg │ │ │ ├── patreon.svg │ │ │ ├── proxy.svg │ │ │ ├── quickmods.svg │ │ │ ├── reddit-alien.svg │ │ │ ├── refresh.svg │ │ │ ├── resourcepacks.svg │ │ │ ├── screenshot-placeholder.svg │ │ │ ├── screenshots.svg │ │ │ ├── settings.svg │ │ │ ├── shaderpacks.svg │ │ │ ├── star.svg │ │ │ ├── status-bad.svg │ │ │ ├── status-good.svg │ │ │ ├── status-running.svg │ │ │ ├── status-yellow.svg │ │ │ ├── viewfolder.svg │ │ │ └── worlds.svg │ ├── iOS │ │ ├── iOS.qrc │ │ ├── index.theme │ │ └── scalable │ │ │ ├── about.svg │ │ │ ├── accounts.svg │ │ │ ├── bug.svg │ │ │ ├── centralmods.svg │ │ │ ├── checkupdate.svg │ │ │ ├── copy.svg │ │ │ ├── coremods.svg │ │ │ ├── custom-commands.svg │ │ │ ├── externaltools.svg │ │ │ ├── help.svg │ │ │ ├── instance-settings.svg │ │ │ ├── jarmods.svg │ │ │ ├── java.svg │ │ │ ├── language.svg │ │ │ ├── launcher.svg │ │ │ ├── loadermods.svg │ │ │ ├── log.svg │ │ │ ├── minecraft.svg │ │ │ ├── multimc.svg │ │ │ ├── new.svg │ │ │ ├── news.svg │ │ │ ├── notes.svg │ │ │ ├── patreon.svg │ │ │ ├── proxy.svg │ │ │ ├── refresh.svg │ │ │ ├── resourcepacks.svg │ │ │ ├── screenshots.svg │ │ │ ├── settings.svg │ │ │ ├── shaderpacks.svg │ │ │ ├── status-bad.svg │ │ │ ├── status-good.svg │ │ │ ├── status-yellow.svg │ │ │ ├── viewfolder.svg │ │ │ └── worlds.svg │ ├── multimc │ │ ├── 128x128 │ │ │ ├── instances │ │ │ │ ├── chicken.png │ │ │ │ ├── creeper.png │ │ │ │ ├── enderpearl.png │ │ │ │ ├── flame.png │ │ │ │ ├── ftb_glow.png │ │ │ │ ├── ftb_logo.png │ │ │ │ ├── gear.png │ │ │ │ ├── herobrine.png │ │ │ │ ├── infinity.png │ │ │ │ ├── magitech.png │ │ │ │ ├── meat.png │ │ │ │ ├── netherstar.png │ │ │ │ ├── skeleton.png │ │ │ │ ├── squarecreeper.png │ │ │ │ └── steve.png │ │ │ ├── shaderpacks.png │ │ │ └── unknown_server.png │ │ ├── 16x16 │ │ │ ├── about.png │ │ │ ├── bug.png │ │ │ ├── cat.png │ │ │ ├── centralmods.png │ │ │ ├── checkupdate.png │ │ │ ├── copy.png │ │ │ ├── coremods.png │ │ │ ├── help.png │ │ │ ├── instance-settings.png │ │ │ ├── jarmods.png │ │ │ ├── loadermods.png │ │ │ ├── log.png │ │ │ ├── minecraft.png │ │ │ ├── new.png │ │ │ ├── news.png │ │ │ ├── noaccount.png │ │ │ ├── patreon.png │ │ │ ├── refresh.png │ │ │ ├── resourcepacks.png │ │ │ ├── screenshots.png │ │ │ ├── settings.png │ │ │ ├── star.png │ │ │ ├── status-bad.png │ │ │ ├── status-good.png │ │ │ ├── status-running.png │ │ │ ├── status-yellow.png │ │ │ ├── viewfolder.png │ │ │ └── worlds.png │ │ ├── 22x22 │ │ │ ├── about.png │ │ │ ├── bug.png │ │ │ ├── cat.png │ │ │ ├── centralmods.png │ │ │ ├── checkupdate.png │ │ │ ├── copy.png │ │ │ ├── help.png │ │ │ ├── instance-settings.png │ │ │ ├── new.png │ │ │ ├── news.png │ │ │ ├── patreon.png │ │ │ ├── refresh.png │ │ │ ├── screenshots.png │ │ │ ├── settings.png │ │ │ ├── status-bad.png │ │ │ ├── status-good.png │ │ │ ├── status-running.png │ │ │ ├── status-yellow.png │ │ │ ├── viewfolder.png │ │ │ └── worlds.png │ │ ├── 24x24 │ │ │ ├── cat.png │ │ │ ├── coremods.png │ │ │ ├── jarmods.png │ │ │ ├── loadermods.png │ │ │ ├── log.png │ │ │ ├── minecraft.png │ │ │ ├── noaccount.png │ │ │ ├── patreon.png │ │ │ ├── resourcepacks.png │ │ │ ├── star.png │ │ │ ├── status-bad.png │ │ │ ├── status-good.png │ │ │ ├── status-running.png │ │ │ └── status-yellow.png │ │ ├── 256x256 │ │ │ └── minecraft.png │ │ ├── 32x32 │ │ │ ├── about.png │ │ │ ├── bug.png │ │ │ ├── cat.png │ │ │ ├── centralmods.png │ │ │ ├── checkupdate.png │ │ │ ├── copy.png │ │ │ ├── coremods.png │ │ │ ├── help.png │ │ │ ├── instance-settings.png │ │ │ ├── instances │ │ │ │ ├── brick.png │ │ │ │ ├── chicken.png │ │ │ │ ├── creeper.png │ │ │ │ ├── diamond.png │ │ │ │ ├── dirt.png │ │ │ │ ├── enderpearl.png │ │ │ │ ├── flame.png │ │ │ │ ├── ftb_glow.png │ │ │ │ ├── ftb_logo.png │ │ │ │ ├── gear.png │ │ │ │ ├── gold.png │ │ │ │ ├── grass.png │ │ │ │ ├── herobrine.png │ │ │ │ ├── infinity.png │ │ │ │ ├── iron.png │ │ │ │ ├── magitech.png │ │ │ │ ├── meat.png │ │ │ │ ├── netherstar.png │ │ │ │ ├── planks.png │ │ │ │ ├── skeleton.png │ │ │ │ ├── squarecreeper.png │ │ │ │ ├── steve.png │ │ │ │ ├── stone.png │ │ │ │ └── tnt.png │ │ │ ├── jarmods.png │ │ │ ├── loadermods.png │ │ │ ├── log.png │ │ │ ├── minecraft.png │ │ │ ├── new.png │ │ │ ├── news.png │ │ │ ├── noaccount.png │ │ │ ├── patreon.png │ │ │ ├── refresh.png │ │ │ ├── resourcepacks.png │ │ │ ├── screenshots.png │ │ │ ├── settings.png │ │ │ ├── star.png │ │ │ ├── status-bad.png │ │ │ ├── status-good.png │ │ │ ├── status-running.png │ │ │ ├── status-yellow.png │ │ │ ├── viewfolder.png │ │ │ └── worlds.png │ │ ├── 48x48 │ │ │ ├── about.png │ │ │ ├── bug.png │ │ │ ├── cat.png │ │ │ ├── centralmods.png │ │ │ ├── checkupdate.png │ │ │ ├── copy.png │ │ │ ├── help.png │ │ │ ├── instance-settings.png │ │ │ ├── log.png │ │ │ ├── minecraft.png │ │ │ ├── new.png │ │ │ ├── news.png │ │ │ ├── noaccount.png │ │ │ ├── patreon.png │ │ │ ├── refresh.png │ │ │ ├── screenshots.png │ │ │ ├── settings.png │ │ │ ├── star.png │ │ │ ├── status-bad.png │ │ │ ├── status-good.png │ │ │ ├── status-running.png │ │ │ ├── status-yellow.png │ │ │ ├── viewfolder.png │ │ │ └── worlds.png │ │ ├── 50x50 │ │ │ └── instances │ │ │ │ └── enderman.png │ │ ├── 64x64 │ │ │ ├── about.png │ │ │ ├── bug.png │ │ │ ├── cat.png │ │ │ ├── centralmods.png │ │ │ ├── checkupdate.png │ │ │ ├── copy.png │ │ │ ├── coremods.png │ │ │ ├── help.png │ │ │ ├── instance-settings.png │ │ │ ├── jarmods.png │ │ │ ├── loadermods.png │ │ │ ├── log.png │ │ │ ├── new.png │ │ │ ├── news.png │ │ │ ├── patreon.png │ │ │ ├── refresh.png │ │ │ ├── resourcepacks.png │ │ │ ├── screenshots.png │ │ │ ├── settings.png │ │ │ ├── star.png │ │ │ ├── status-bad.png │ │ │ ├── status-good.png │ │ │ ├── status-running.png │ │ │ ├── status-yellow.png │ │ │ ├── viewfolder.png │ │ │ └── worlds.png │ │ ├── 8x8 │ │ │ └── noaccount.png │ │ ├── index.theme │ │ ├── multimc.qrc │ │ └── scalable │ │ │ ├── atlauncher-placeholder.png │ │ │ ├── atlauncher.svg │ │ │ ├── bug.svg │ │ │ ├── centralmods.svg │ │ │ ├── checkupdate.svg │ │ │ ├── custom-commands.svg │ │ │ ├── discord.svg │ │ │ ├── instances │ │ │ ├── bee.svg │ │ │ └── fox.svg │ │ │ ├── java.svg │ │ │ ├── language.svg │ │ │ ├── launcher.svg │ │ │ ├── modrinth.svg │ │ │ ├── new.svg │ │ │ ├── news.svg │ │ │ ├── proxy.svg │ │ │ ├── reddit-alien.svg │ │ │ ├── screenshot-placeholder.svg │ │ │ ├── screenshots.svg │ │ │ ├── status-bad.svg │ │ │ ├── status-good.svg │ │ │ ├── status-running.svg │ │ │ ├── status-yellow.svg │ │ │ ├── technic.svg │ │ │ └── viewfolder.svg │ ├── pe_blue │ │ ├── index.theme │ │ ├── pe_blue.qrc │ │ └── scalable │ │ │ ├── about.svg │ │ │ ├── accounts.svg │ │ │ ├── bug.svg │ │ │ ├── centralmods.svg │ │ │ ├── checkupdate.svg │ │ │ ├── copy.svg │ │ │ ├── coremods.svg │ │ │ ├── custom-commands.svg │ │ │ ├── externaltools.svg │ │ │ ├── help.svg │ │ │ ├── instance-settings.svg │ │ │ ├── jarmods.svg │ │ │ ├── java.svg │ │ │ ├── language.svg │ │ │ ├── launcher.svg │ │ │ ├── loadermods.svg │ │ │ ├── log.svg │ │ │ ├── minecraft.svg │ │ │ ├── new.svg │ │ │ ├── news.svg │ │ │ ├── notes.svg │ │ │ ├── patreon.svg │ │ │ ├── proxy.svg │ │ │ ├── refresh.svg │ │ │ ├── resourcepacks.svg │ │ │ ├── screenshots.svg │ │ │ ├── settings.svg │ │ │ ├── shaderpacks.svg │ │ │ ├── status-bad.svg │ │ │ ├── status-good.svg │ │ │ ├── status-yellow.svg │ │ │ ├── viewfolder.svg │ │ │ └── worlds.svg │ ├── pe_colored │ │ ├── index.theme │ │ ├── pe_colored.qrc │ │ └── scalable │ │ │ ├── about.svg │ │ │ ├── accounts.svg │ │ │ ├── bug.svg │ │ │ ├── centralmods.svg │ │ │ ├── checkupdate.svg │ │ │ ├── copy.svg │ │ │ ├── coremods.svg │ │ │ ├── custom-commands.svg │ │ │ ├── externaltools.svg │ │ │ ├── help.svg │ │ │ ├── instance-settings.svg │ │ │ ├── jarmods.svg │ │ │ ├── java.svg │ │ │ ├── language.svg │ │ │ ├── launcher.svg │ │ │ ├── loadermods.svg │ │ │ ├── log.svg │ │ │ ├── minecraft.svg │ │ │ ├── new.svg │ │ │ ├── news.svg │ │ │ ├── notes.svg │ │ │ ├── patreon.svg │ │ │ ├── proxy.svg │ │ │ ├── refresh.svg │ │ │ ├── resourcepacks.svg │ │ │ ├── screenshots.svg │ │ │ ├── settings.svg │ │ │ ├── shaderpacks.svg │ │ │ ├── status-bad.svg │ │ │ ├── status-good.svg │ │ │ ├── status-yellow.svg │ │ │ ├── viewfolder.svg │ │ │ └── worlds.svg │ ├── pe_dark │ │ ├── index.theme │ │ ├── pe_dark.qrc │ │ └── scalable │ │ │ ├── about.svg │ │ │ ├── accounts.svg │ │ │ ├── bug.svg │ │ │ ├── centralmods.svg │ │ │ ├── checkupdate.svg │ │ │ ├── copy.svg │ │ │ ├── coremods.svg │ │ │ ├── custom-commands.svg │ │ │ ├── externaltools.svg │ │ │ ├── help.svg │ │ │ ├── instance-settings.svg │ │ │ ├── jarmods.svg │ │ │ ├── java.svg │ │ │ ├── language.svg │ │ │ ├── launcher.svg │ │ │ ├── loadermods.svg │ │ │ ├── log.svg │ │ │ ├── minecraft.svg │ │ │ ├── new.svg │ │ │ ├── news.svg │ │ │ ├── notes.svg │ │ │ ├── patreon.svg │ │ │ ├── proxy.svg │ │ │ ├── refresh.svg │ │ │ ├── resourcepacks.svg │ │ │ ├── screenshots.svg │ │ │ ├── settings.svg │ │ │ ├── shaderpacks.svg │ │ │ ├── status-bad.svg │ │ │ ├── status-good.svg │ │ │ ├── status-yellow.svg │ │ │ ├── viewfolder.svg │ │ │ └── worlds.svg │ ├── pe_light │ │ ├── index.theme │ │ ├── pe_light.qrc │ │ └── scalable │ │ │ ├── about.svg │ │ │ ├── accounts.svg │ │ │ ├── bug.svg │ │ │ ├── centralmods.svg │ │ │ ├── checkupdate.svg │ │ │ ├── copy.svg │ │ │ ├── coremods.svg │ │ │ ├── custom-commands.svg │ │ │ ├── externaltools.svg │ │ │ ├── help.svg │ │ │ ├── instance-settings.svg │ │ │ ├── jarmods.svg │ │ │ ├── java.svg │ │ │ ├── language.svg │ │ │ ├── launcher.svg │ │ │ ├── loadermods.svg │ │ │ ├── log.svg │ │ │ ├── minecraft.svg │ │ │ ├── new.svg │ │ │ ├── news.svg │ │ │ ├── notes.svg │ │ │ ├── patreon.svg │ │ │ ├── proxy.svg │ │ │ ├── refresh.svg │ │ │ ├── resourcepacks.svg │ │ │ ├── screenshots.svg │ │ │ ├── settings.svg │ │ │ ├── shaderpacks.svg │ │ │ ├── status-bad.svg │ │ │ ├── status-good.svg │ │ │ ├── status-yellow.svg │ │ │ ├── viewfolder.svg │ │ │ └── worlds.svg │ ├── skins │ │ ├── shaders │ │ │ ├── bg.frag │ │ │ ├── bg.vert │ │ │ ├── skin.frag │ │ │ └── skin.vert │ │ ├── skins.qrc │ │ └── textures │ │ │ ├── Alex_Classic.png │ │ │ ├── Alex_Slim.png │ │ │ ├── Ari_Classic.png │ │ │ ├── Ari_Slim.png │ │ │ ├── Efe_Classic.png │ │ │ ├── Efe_Slim.png │ │ │ ├── Kai_Classic.png │ │ │ ├── Kai_Slim.png │ │ │ ├── Makena_Classic.png │ │ │ ├── Makena_Slim.png │ │ │ ├── Noor_Classic.png │ │ │ ├── Noor_Slim.png │ │ │ ├── Steve_Classic.png │ │ │ ├── Steve_Slim.png │ │ │ ├── Sunny_Classic.png │ │ │ ├── Sunny_Slim.png │ │ │ ├── Zuri_Classic.png │ │ │ ├── Zuri_Slim.png │ │ │ ├── no_cape.png │ │ │ ├── placeholder_cape.png │ │ │ └── placeholder_skin.png │ └── sources │ │ ├── burfcat_hat.png │ │ ├── cattiversary.xcf │ │ ├── clucker.svg │ │ ├── creeper.svg │ │ ├── enderpearl.svg │ │ ├── flame.svg │ │ ├── ftb-glow.svg │ │ ├── ftb-logo.svg │ │ ├── gear.svg │ │ ├── herobrine.svg │ │ ├── magitech.svg │ │ ├── meat.svg │ │ ├── netherstar.svg │ │ ├── pskeleton.svg │ │ ├── skeleton.svg │ │ ├── squarecreeper.svg │ │ └── steve.svg ├── screenshots │ ├── ImgurAlbumCreation.cpp │ ├── ImgurAlbumCreation.h │ ├── ImgurUpload.cpp │ ├── ImgurUpload.h │ └── Screenshot.h ├── settings │ ├── INIFile.cpp │ ├── INIFile.h │ ├── INIFile_test.cpp │ ├── INISettingsObject.cpp │ ├── INISettingsObject.h │ ├── OverrideSetting.cpp │ ├── OverrideSetting.h │ ├── PassthroughSetting.cpp │ ├── PassthroughSetting.h │ ├── Setting.cpp │ ├── Setting.h │ ├── SettingsObject.cpp │ └── SettingsObject.h ├── skins │ ├── CapeCache.cpp │ ├── CapeCache.h │ ├── CapesModel.cpp │ ├── CapesModel.h │ ├── SkinRenderer.cpp │ ├── SkinRenderer.h │ ├── SkinTypes.cpp │ ├── SkinTypes.h │ ├── SkinUtils.cpp │ ├── SkinUtils.h │ ├── SkinWidget.cpp │ ├── SkinWidget.h │ ├── SkinsModel.cpp │ ├── SkinsModel.h │ ├── TextureMappings.cpp │ └── TextureMappings.h ├── tasks │ ├── SequentialTask.cpp │ ├── SequentialTask.h │ ├── Task.cpp │ └── Task.h ├── testdata │ ├── FileSystem-test_createShortcut-unix │ └── test_folder │ │ ├── assets │ │ └── minecraft │ │ │ └── textures │ │ │ └── blah.txt │ │ ├── pack.mcmeta │ │ └── pack.nfo ├── tools │ ├── BaseExternalTool.cpp │ ├── BaseExternalTool.h │ ├── BaseProfiler.cpp │ ├── BaseProfiler.h │ ├── JProfiler.cpp │ ├── JProfiler.h │ ├── JVisualVM.cpp │ ├── JVisualVM.h │ ├── MCEditTool.cpp │ └── MCEditTool.h ├── translations │ ├── POTranslator.cpp │ ├── POTranslator.h │ ├── TranslationsModel.cpp │ └── TranslationsModel.h ├── ui │ ├── ColorCache.cpp │ ├── ColorCache.h │ ├── GuiUtil.cpp │ ├── GuiUtil.h │ ├── InstanceWindow.cpp │ ├── InstanceWindow.h │ ├── MainWindow.cpp │ ├── MainWindow.h │ ├── dialogs │ │ ├── AboutDialog.cpp │ │ ├── AboutDialog.h │ │ ├── AboutDialog.ui │ │ ├── AccountsDialog.cpp │ │ ├── AccountsDialog.h │ │ ├── AccountsDialog.ui │ │ ├── CopyInstanceDialog.cpp │ │ ├── CopyInstanceDialog.h │ │ ├── CopyInstanceDialog.ui │ │ ├── CreateShortcutDialog.cpp │ │ ├── CreateShortcutDialog.h │ │ ├── CreateShortcutDialog.ui │ │ ├── CustomMessageBox.cpp │ │ ├── CustomMessageBox.h │ │ ├── ExportInstanceDialog.cpp │ │ ├── ExportInstanceDialog.h │ │ ├── ExportInstanceDialog.ui │ │ ├── IconPickerDialog.cpp │ │ ├── IconPickerDialog.h │ │ ├── IconPickerDialog.ui │ │ ├── ModrinthExportDialog.cpp │ │ ├── ModrinthExportDialog.h │ │ ├── ModrinthExportDialog.ui │ │ ├── NewComponentDialog.cpp │ │ ├── NewComponentDialog.h │ │ ├── NewComponentDialog.ui │ │ ├── NewInstanceDialog.cpp │ │ ├── NewInstanceDialog.h │ │ ├── NewInstanceDialog.ui │ │ ├── NotificationDialog.cpp │ │ ├── NotificationDialog.h │ │ ├── NotificationDialog.ui │ │ ├── OfflineNameDialog.cpp │ │ ├── OfflineNameDialog.h │ │ ├── ProfileSelectDialog.cpp │ │ ├── ProfileSelectDialog.h │ │ ├── ProfileSelectDialog.ui │ │ ├── ProgressDialog.cpp │ │ ├── ProgressDialog.h │ │ ├── ProgressDialog.ui │ │ ├── UpdateDialog.cpp │ │ ├── UpdateDialog.h │ │ ├── UpdateDialog.ui │ │ ├── VersionSelectDialog.cpp │ │ └── VersionSelectDialog.h │ ├── instanceview │ │ ├── AccessibleInstanceView.cpp │ │ ├── AccessibleInstanceView.h │ │ ├── AccessibleInstanceView_p.h │ │ ├── InstanceDelegate.cpp │ │ ├── InstanceDelegate.h │ │ ├── InstanceProxyModel.cpp │ │ ├── InstanceProxyModel.h │ │ ├── InstanceView.cpp │ │ ├── InstanceView.h │ │ ├── VisualGroup.cpp │ │ └── VisualGroup.h │ ├── pagedialog │ │ ├── PageDialog.cpp │ │ └── PageDialog.h │ ├── pages │ │ ├── BasePage.h │ │ ├── BasePageContainer.h │ │ ├── BasePageProvider.h │ │ ├── global │ │ │ ├── CustomCommandsPage.cpp │ │ │ ├── CustomCommandsPage.h │ │ │ ├── ExternalToolsPage.cpp │ │ │ ├── ExternalToolsPage.h │ │ │ ├── ExternalToolsPage.ui │ │ │ ├── JavaPage.cpp │ │ │ ├── JavaPage.h │ │ │ ├── JavaPage.ui │ │ │ ├── LanguagePage.cpp │ │ │ ├── LanguagePage.h │ │ │ ├── LauncherPage.cpp │ │ │ ├── LauncherPage.h │ │ │ ├── LauncherPage.ui │ │ │ ├── MinecraftPage.cpp │ │ │ ├── MinecraftPage.h │ │ │ ├── MinecraftPage.ui │ │ │ ├── PasteEEPage.cpp │ │ │ ├── PasteEEPage.h │ │ │ ├── PasteEEPage.ui │ │ │ ├── ProxyPage.cpp │ │ │ ├── ProxyPage.h │ │ │ └── ProxyPage.ui │ │ ├── instance │ │ │ ├── GameOptionsPage.cpp │ │ │ ├── GameOptionsPage.h │ │ │ ├── GameOptionsPage.ui │ │ │ ├── InstanceSettingsPage.cpp │ │ │ ├── InstanceSettingsPage.h │ │ │ ├── InstanceSettingsPage.ui │ │ │ ├── LegacyUpgradePage.cpp │ │ │ ├── LegacyUpgradePage.h │ │ │ ├── LegacyUpgradePage.ui │ │ │ ├── LogPage.cpp │ │ │ ├── LogPage.h │ │ │ ├── LogPage.ui │ │ │ ├── ModFolderPage.cpp │ │ │ ├── ModFolderPage.h │ │ │ ├── ModFolderPage.ui │ │ │ ├── NotesPage.cpp │ │ │ ├── NotesPage.h │ │ │ ├── NotesPage.ui │ │ │ ├── OtherLogsPage.cpp │ │ │ ├── OtherLogsPage.h │ │ │ ├── OtherLogsPage.ui │ │ │ ├── ResourcePackPage.h │ │ │ ├── ScreenshotsPage.cpp │ │ │ ├── ScreenshotsPage.h │ │ │ ├── ScreenshotsPage.ui │ │ │ ├── ServersPage.cpp │ │ │ ├── ServersPage.h │ │ │ ├── ServersPage.ui │ │ │ ├── ShaderPackPage.h │ │ │ ├── TexturePackPage.h │ │ │ ├── VersionPage.cpp │ │ │ ├── VersionPage.h │ │ │ ├── VersionPage.ui │ │ │ ├── WorldListPage.cpp │ │ │ ├── WorldListPage.h │ │ │ └── WorldListPage.ui │ │ └── modplatform │ │ │ ├── ImportPage.cpp │ │ │ ├── ImportPage.h │ │ │ ├── ImportPage.ui │ │ │ ├── VanillaPage.cpp │ │ │ ├── VanillaPage.h │ │ │ ├── VanillaPage.ui │ │ │ ├── atlauncher │ │ │ ├── AtlFilterModel.cpp │ │ │ ├── AtlFilterModel.h │ │ │ ├── AtlListModel.cpp │ │ │ ├── AtlListModel.h │ │ │ ├── AtlOptionalModDialog.cpp │ │ │ ├── AtlOptionalModDialog.h │ │ │ ├── AtlOptionalModDialog.ui │ │ │ ├── AtlPage.cpp │ │ │ ├── AtlPage.h │ │ │ └── AtlPage.ui │ │ │ ├── import_ftb │ │ │ ├── FTBAPage.cpp │ │ │ ├── FTBAPage.h │ │ │ ├── FTBAPage.ui │ │ │ ├── Model.cpp │ │ │ ├── Model.h │ │ │ ├── PackInstallTask.cpp │ │ │ └── PackInstallTask.h │ │ │ ├── legacy_ftb │ │ │ ├── ListModel.cpp │ │ │ ├── ListModel.h │ │ │ ├── Page.cpp │ │ │ ├── Page.h │ │ │ └── Page.ui │ │ │ ├── modrinth │ │ │ ├── ModrinthData.h │ │ │ ├── ModrinthDocument.cpp │ │ │ ├── ModrinthDocument.h │ │ │ ├── ModrinthModel.cpp │ │ │ ├── ModrinthModel.h │ │ │ ├── ModrinthPage.cpp │ │ │ ├── ModrinthPage.h │ │ │ └── ModrinthPage.ui │ │ │ └── technic │ │ │ ├── TechnicData.h │ │ │ ├── TechnicModel.cpp │ │ │ ├── TechnicModel.h │ │ │ ├── TechnicPage.cpp │ │ │ ├── TechnicPage.h │ │ │ └── TechnicPage.ui │ ├── setupwizard │ │ ├── BaseWizardPage.h │ │ ├── JavaWizardPage.cpp │ │ ├── JavaWizardPage.h │ │ ├── LanguageWizardPage.cpp │ │ ├── LanguageWizardPage.h │ │ ├── SetupWizard.cpp │ │ └── SetupWizard.h │ ├── themes │ │ ├── BrightTheme.cpp │ │ ├── BrightTheme.h │ │ ├── CustomTheme.cpp │ │ ├── CustomTheme.h │ │ ├── DarkTheme.cpp │ │ ├── DarkTheme.h │ │ ├── FusionTheme.cpp │ │ ├── FusionTheme.h │ │ ├── ITheme.cpp │ │ ├── ITheme.h │ │ ├── SystemTheme.cpp │ │ └── SystemTheme.h │ └── widgets │ │ ├── Common.cpp │ │ ├── Common.h │ │ ├── CustomCommands.cpp │ │ ├── CustomCommands.h │ │ ├── CustomCommands.ui │ │ ├── DropLabel.cpp │ │ ├── DropLabel.h │ │ ├── ErrorFrame.cpp │ │ ├── ErrorFrame.h │ │ ├── ErrorFrame.ui │ │ ├── FocusLineEdit.cpp │ │ ├── FocusLineEdit.h │ │ ├── IconLabel.cpp │ │ ├── IconLabel.h │ │ ├── InstanceCardWidget.ui │ │ ├── JavaSettingsWidget.cpp │ │ ├── JavaSettingsWidget.h │ │ ├── LabeledToolButton.cpp │ │ ├── LabeledToolButton.h │ │ ├── LanguageSelectionWidget.cpp │ │ ├── LanguageSelectionWidget.h │ │ ├── LineSeparator.cpp │ │ ├── LineSeparator.h │ │ ├── LogView.cpp │ │ ├── LogView.h │ │ ├── MCModInfoFrame.cpp │ │ ├── MCModInfoFrame.h │ │ ├── MCModInfoFrame.ui │ │ ├── ModListView.cpp │ │ ├── ModListView.h │ │ ├── PageContainer.cpp │ │ ├── PageContainer.h │ │ ├── PageContainer_p.h │ │ ├── ProgressWidget.cpp │ │ ├── ProgressWidget.h │ │ ├── VersionListView.cpp │ │ ├── VersionListView.h │ │ ├── VersionSelectWidget.cpp │ │ ├── VersionSelectWidget.h │ │ ├── WideBar.cpp │ │ ├── WideBar.h │ │ ├── WrapLabel.cpp │ │ └── WrapLabel.h └── updater │ ├── DownloadTask.cpp │ ├── DownloadTask.h │ ├── DownloadTask_test.cpp │ ├── GoUpdate.cpp │ ├── GoUpdate.h │ ├── UpdateChecker.cpp │ ├── UpdateChecker.h │ ├── UpdateChecker_test.cpp │ └── testdata │ ├── 1.json │ ├── 2.json │ ├── channels.json │ ├── errorChannels.json │ ├── fileOneA │ ├── fileOneB │ ├── fileThree │ ├── fileTwo │ ├── garbageChannels.json │ ├── index.json │ ├── noChannels.json │ ├── oneChannel.json │ └── tst_DownloadTask-test_writeInstallScript.xml └── libraries ├── LocalPeer ├── CMakeLists.txt ├── include │ └── LocalPeer.h └── src │ ├── LocalPeer.cpp │ ├── LockedFile.cpp │ ├── LockedFile.h │ ├── LockedFile_unix.cpp │ └── LockedFile_win.cpp ├── README.md ├── classparser ├── CMakeLists.txt ├── include │ ├── classparser.h │ └── classparser_config.h └── src │ ├── annotations.cpp │ ├── annotations.h │ ├── classfile.h │ ├── classparser.cpp │ ├── constants.h │ ├── errors.h │ ├── javaendian.h │ └── membuffer.h ├── hoedown ├── CMakeLists.txt ├── LICENSE ├── README.md ├── include │ └── hoedown │ │ ├── autolink.h │ │ ├── buffer.h │ │ ├── document.h │ │ ├── escape.h │ │ ├── html.h │ │ ├── stack.h │ │ └── version.h └── src │ ├── autolink.c │ ├── buffer.c │ ├── document.c │ ├── escape.c │ ├── html.c │ ├── html_blocks.c │ ├── html_smartypants.c │ ├── stack.c │ └── version.c ├── iconfix ├── CMakeLists.txt ├── internal │ ├── qhexstring_p.h │ ├── qiconloader.cpp │ └── qiconloader_p.h ├── xdgicon.cpp └── xdgicon.h ├── javacheck ├── .gitignore ├── CMakeLists.txt └── JavaCheck.java ├── katabasis ├── .gitignore ├── CMakeLists.txt ├── LICENSE ├── README.md ├── acknowledgements.md ├── include │ └── katabasis │ │ ├── Bits.h │ │ ├── DeviceFlow.h │ │ ├── Globals.h │ │ ├── PollServer.h │ │ ├── Reply.h │ │ └── RequestParameter.h └── src │ ├── DeviceFlow.cpp │ ├── JsonResponse.cpp │ ├── JsonResponse.h │ ├── PollServer.cpp │ └── Reply.cpp ├── launcher ├── .gitignore ├── CMakeLists.txt ├── net │ └── minecraft │ │ └── Launcher.java └── org │ └── multimc │ ├── EntryPoint.java │ ├── Launcher.java │ ├── LegacyFrame.java │ ├── NotFoundException.java │ ├── ParamBucket.java │ ├── ParseException.java │ ├── Utils.java │ └── onesix │ └── OneSixLauncher.java ├── optional-bare ├── CMakeLists.txt ├── LICENSE.txt ├── README.md └── include │ └── nonstd │ └── optional ├── qrcode ├── CMakeLists.txt ├── LICENSE ├── README.md ├── include │ └── qrcode │ │ └── QrCodeGenerator.h └── src │ ├── QrCodeGenerator.cpp │ ├── qrcodegen.cpp │ └── qrcodegen.h ├── rainbow ├── CMakeLists.txt ├── COPYING.LIB ├── include │ ├── rainbow.h │ └── rainbow_config.h └── src │ └── rainbow.cpp ├── systeminfo ├── CMakeLists.txt ├── include │ ├── distroutils.h │ ├── ntstatus │ │ ├── NtStatusNames.hpp │ │ └── README.md │ └── sys.h └── src │ ├── distroutils.cpp │ ├── ntstatus │ ├── NtStatusNames.cpp │ └── README.md │ ├── sys_apple.cpp │ ├── sys_test.cpp │ ├── sys_unix.cpp │ └── sys_win32.cpp ├── tomlc99 ├── CMakeLists.txt ├── LICENSE ├── README.md ├── include │ └── toml.h └── src │ └── toml.c └── xz-embedded ├── CMakeLists.txt ├── include └── xz.h ├── src ├── xz_config.h ├── xz_crc32.c ├── xz_crc64.c ├── xz_dec_bcj.c ├── xz_dec_lzma2.c ├── xz_dec_stream.c ├── xz_lzma2.h ├── xz_private.h └── xz_stream.h └── xzminidec.c /.gitattributes: -------------------------------------------------------------------------------- 1 | *.pem -crlf 2 | **/testdata/** -text -diff 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true 2 | contact_links: 3 | - name: MultiMC Discord 4 | url: https://discord.gg/multimc 5 | about: Please ask for support here before opening an issue. 6 | -------------------------------------------------------------------------------- /.github/workflows/dispatch.yml: -------------------------------------------------------------------------------- 1 | name: Dispatcher 2 | on: 3 | push: 4 | branches: ['6'] 5 | jobs: 6 | dispatch: 7 | name: Dispatch 8 | runs-on: ubuntu-latest 9 | timeout-minutes: 5 10 | steps: 11 | - name: Extract branch name 12 | shell: bash 13 | run: echo "branch=$(echo ${GITHUB_REF#refs/heads/})" >>$GITHUB_OUTPUT 14 | id: extract_branch 15 | - name: Dispatch to workflows 16 | run: | 17 | curl -H "Accept: application/vnd.github.everest-preview+json" \ 18 | -H "Authorization: token ${{ secrets.DISPATCH_TOKEN }}" \ 19 | --request POST \ 20 | --data '{"event_type": "push_to_main_repo", "client_payload": { "branch": "${{ steps.extract_branch.outputs.branch }}" }}' https://api.github.com/repos/MultiMC/Build/dispatches 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | Thumbs.db 2 | *.kdev4 3 | .user 4 | .directory 5 | resources/CMakeFiles 6 | *~ 7 | *.swp 8 | html/ 9 | 10 | # Project Files 11 | *.pro.user 12 | CMakeLists.txt.user 13 | CMakeLists.txt.user.* 14 | /.project 15 | /.settings 16 | /.idea 17 | cmake-build-*/ 18 | Debug 19 | .cache 20 | 21 | # Build dirs 22 | build 23 | /build-* 24 | 25 | # Install dirs 26 | install 27 | /install-* 28 | 29 | # Ctags File 30 | tags 31 | 32 | # YouCompleteMe config stuff. 33 | .ycm_extra_conf.* 34 | 35 | #OSX Stuff 36 | .DS_Store 37 | 38 | run/ 39 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "depends/libnbtplusplus"] 2 | path = libraries/libnbtplusplus 3 | url = https://github.com/MultiMC/libnbtplusplus.git 4 | pushurl = git@github.com:MultiMC/libnbtplusplus.git 5 | [submodule "libraries/quazip"] 6 | path = libraries/quazip 7 | url = https://github.com/MultiMC/quazip.git 8 | pushurl = git@github.com:MultiMC/quazip.git 9 | -------------------------------------------------------------------------------- /branding/MultiMC.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/branding/MultiMC.icns -------------------------------------------------------------------------------- /branding/MultiMC.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/branding/MultiMC.ico -------------------------------------------------------------------------------- /branding/genicons.sh: -------------------------------------------------------------------------------- 1 | #/bin/bash 2 | 3 | inkscape -w 16 -h 16 -o logo_16.png logo.svg 4 | inkscape -w 24 -h 24 -o logo_24.png logo.svg 5 | inkscape -w 32 -h 32 -o logo_32.png logo.svg 6 | inkscape -w 48 -h 48 -o logo_48.png logo.svg 7 | inkscape -w 64 -h 64 -o logo_64.png logo.svg 8 | inkscape -w 128 -h 128 -o logo_128.png logo.svg 9 | 10 | convert logo_128.png logo_64.png logo_48.png logo_32.png logo_24.png logo_16.png MultiMC.ico 11 | 12 | rm -f logo_*.png 13 | 14 | inkscape -w 16 -h 16 -o logo_16.png logo-macos.svg 15 | inkscape -w 32 -h 32 -o logo_32.png logo-macos.svg 16 | inkscape -w 128 -h 128 -o logo_128.png logo-macos.svg 17 | inkscape -w 256 -h 256 -o logo_256.png logo-macos.svg 18 | inkscape -w 512 -h 512 -o logo_512.png logo-macos.svg 19 | inkscape -w 1024 -h 1024 -o logo_1024.png logo-macos.svg 20 | 21 | png2icns MultiMC.icns logo_1024.png logo_512.png logo_256.png logo_128.png logo_32.png logo_16.png 22 | 23 | rm -f logo_*.png 24 | -------------------------------------------------------------------------------- /branding/logo.qrc: -------------------------------------------------------------------------------- 1 | <!DOCTYPE RCC> 2 | <RCC version="1.0"> 3 | <qresource prefix="/"> 4 | <file>logo.svg</file> 5 | </qresource> 6 | </RCC> 7 | -------------------------------------------------------------------------------- /buildconfig/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | ######## Configure the file with build properties ######## 2 | 3 | configure_file("${CMAKE_CURRENT_SOURCE_DIR}/BuildConfig.cpp.in" "${CMAKE_CURRENT_BINARY_DIR}/BuildConfig.cpp") 4 | 5 | add_library(BuildConfig STATIC 6 | BuildConfig.h 7 | ${CMAKE_CURRENT_BINARY_DIR}/BuildConfig.cpp 8 | ) 9 | 10 | target_link_libraries(BuildConfig Qt5::Core) 11 | target_include_directories(BuildConfig PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}") 12 | -------------------------------------------------------------------------------- /cmake/QMakeQuery.cmake: -------------------------------------------------------------------------------- 1 | if(__QMAKEQUERY_CMAKE__) 2 | return() 3 | endif() 4 | set(__QMAKEQUERY_CMAKE__ TRUE) 5 | 6 | get_target_property(QMAKE_EXECUTABLE Qt5::qmake LOCATION) 7 | 8 | function(QUERY_QMAKE VAR RESULT) 9 | exec_program(${QMAKE_EXECUTABLE} ARGS "-query ${VAR}" RETURN_VALUE return_code OUTPUT_VARIABLE output ) 10 | if(NOT return_code) 11 | file(TO_CMAKE_PATH "${output}" output) 12 | set(${RESULT} ${output} PARENT_SCOPE) 13 | endif(NOT return_code) 14 | endfunction(QUERY_QMAKE) 15 | -------------------------------------------------------------------------------- /cmake/UnitTest/TestUtil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include <QFile> 4 | #include <QCoreApplication> 5 | #include <QTest> 6 | #include <QDir> 7 | 8 | #define expandstr(s) expandstr2(s) 9 | #define expandstr2(s) #s 10 | 11 | class TestsInternal 12 | { 13 | public: 14 | static QByteArray readFile(const QString &fileName) 15 | { 16 | QFile f(fileName); 17 | f.open(QFile::ReadOnly); 18 | return f.readAll(); 19 | } 20 | static QString readFileUtf8(const QString &fileName) 21 | { 22 | return QString::fromUtf8(readFile(fileName)); 23 | } 24 | }; 25 | 26 | #define GET_TEST_FILE(file) TestsInternal::readFile(QFINDTESTDATA(file)) 27 | #define GET_TEST_FILE_UTF8(file) TestsInternal::readFileUtf8(QFINDTESTDATA(file)) 28 | 29 | -------------------------------------------------------------------------------- /cmake/UnitTest/generate_test_data.cmake: -------------------------------------------------------------------------------- 1 | # Copy files from source directory to destination directory, substituting any 2 | # variables. Create destination directory if it does not exist. 3 | 4 | function(configure_files srcDir destDir) 5 | make_directory(${destDir}) 6 | 7 | file(GLOB templateFiles RELATIVE ${srcDir} ${srcDir}/*) 8 | foreach(templateFile ${templateFiles}) 9 | set(srcTemplatePath ${srcDir}/${templateFile}) 10 | if(NOT IS_DIRECTORY ${srcTemplatePath}) 11 | configure_file( 12 | ${srcTemplatePath} 13 | ${destDir}/${templateFile} 14 | @ONLY 15 | NEWLINE_STYLE LF 16 | ) 17 | else() 18 | configure_files("${srcTemplatePath}" "${destDir}/${templateFile}") 19 | endif() 20 | endforeach() 21 | endfunction() 22 | 23 | configure_files(${SOURCE} ${DESTINATION}) -------------------------------------------------------------------------------- /cmake/UnitTest/test.rc: -------------------------------------------------------------------------------- 1 | #ifndef WIN32_LEAN_AND_MEAN 2 | #define WIN32_LEAN_AND_MEAN 3 | #endif 4 | #include <windows.h> 5 | 6 | 1 RT_MANIFEST "test.manifest" 7 | 8 | VS_VERSION_INFO VERSIONINFO 9 | FILEVERSION 1,0,0,0 10 | FILEOS VOS_NT_WINDOWS32 11 | FILETYPE VFT_APP 12 | BEGIN 13 | BLOCK "StringFileInfo" 14 | BEGIN 15 | BLOCK "000004b0" 16 | BEGIN 17 | VALUE "CompanyName", "MultiMC Contributors" 18 | VALUE "FileDescription", "Testcase" 19 | VALUE "FileVersion", "1.0.0.0" 20 | VALUE "ProductName", "Launcher Testcase" 21 | VALUE "ProductVersion", "5" 22 | END 23 | END 24 | BLOCK "VarFileInfo" 25 | BEGIN 26 | VALUE "Translation", 0x0000, 0x04b0 // Unicode 27 | END 28 | END 29 | -------------------------------------------------------------------------------- /launcher/ApplicationMessage.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include <QString> 4 | #include <QMap> 5 | #include <QByteArray> 6 | 7 | struct ApplicationMessage { 8 | QString command; 9 | QMap<QString, QString> args; 10 | 11 | QByteArray serialize(); 12 | void parse(const QByteArray & input); 13 | }; 14 | -------------------------------------------------------------------------------- /launcher/DefaultVariable.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | template <typename T> 4 | class DefaultVariable 5 | { 6 | public: 7 | DefaultVariable(const T & value) 8 | { 9 | defaultValue = value; 10 | } 11 | DefaultVariable<T> & operator =(const T & value) 12 | { 13 | currentValue = value; 14 | is_default = currentValue == defaultValue; 15 | is_explicit = true; 16 | return *this; 17 | } 18 | operator const T &() const 19 | { 20 | return is_default ? defaultValue : currentValue; 21 | } 22 | bool isDefault() const 23 | { 24 | return is_default; 25 | } 26 | bool isExplicit() const 27 | { 28 | return is_explicit; 29 | } 30 | private: 31 | T currentValue; 32 | T defaultValue; 33 | bool is_default = true; 34 | bool is_explicit = false; 35 | }; 36 | -------------------------------------------------------------------------------- /launcher/Exception.h: -------------------------------------------------------------------------------- 1 | // Licensed under the Apache-2.0 license. See README.md for details. 2 | 3 | #pragma once 4 | 5 | #include <QString> 6 | #include <QDebug> 7 | #include <exception> 8 | 9 | class Exception : public std::exception 10 | { 11 | public: 12 | Exception(const QString &message) : std::exception(), m_message(message) 13 | { 14 | qCritical() << "Exception:" << message; 15 | } 16 | Exception(const Exception &other) 17 | : std::exception(), m_message(other.cause()) 18 | { 19 | } 20 | virtual ~Exception() noexcept {} 21 | const char *what() const noexcept 22 | { 23 | return m_message.toLatin1().constData(); 24 | } 25 | QString cause() const 26 | { 27 | return m_message; 28 | } 29 | 30 | private: 31 | QString m_message; 32 | }; 33 | -------------------------------------------------------------------------------- /launcher/Filter.cpp: -------------------------------------------------------------------------------- 1 | #include "Filter.h" 2 | 3 | Filter::~Filter(){} 4 | 5 | ContainsFilter::ContainsFilter(const QString& pattern) : pattern(pattern){} 6 | ContainsFilter::~ContainsFilter(){} 7 | bool ContainsFilter::accepts(const QString& value) 8 | { 9 | return value.contains(pattern); 10 | } 11 | 12 | ExactFilter::ExactFilter(const QString& pattern) : pattern(pattern){} 13 | ExactFilter::~ExactFilter(){} 14 | bool ExactFilter::accepts(const QString& value) 15 | { 16 | return value == pattern; 17 | } 18 | 19 | RegexpFilter::RegexpFilter(const QString& regexp, bool invert) 20 | :invert(invert) 21 | { 22 | pattern.setPattern(regexp); 23 | pattern.optimize(); 24 | } 25 | RegexpFilter::~RegexpFilter(){} 26 | bool RegexpFilter::accepts(const QString& value) 27 | { 28 | auto match = pattern.match(value); 29 | bool matched = match.hasMatch(); 30 | return invert ? (!matched) : (matched); 31 | } 32 | -------------------------------------------------------------------------------- /launcher/GZip.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include <QByteArray> 3 | 4 | class GZip 5 | { 6 | public: 7 | static bool unzip(const QByteArray &compressedBytes, QByteArray &uncompressedBytes); 8 | static bool zip(const QByteArray &uncompressedBytes, QByteArray &compressedBytes); 9 | }; 10 | 11 | -------------------------------------------------------------------------------- /launcher/InstanceCopyTask.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "tasks/Task.h" 4 | #include "net/NetJob.h" 5 | #include <QUrl> 6 | #include <QFuture> 7 | #include <QFutureWatcher> 8 | #include "settings/SettingsObject.h" 9 | #include "BaseVersion.h" 10 | #include "BaseInstance.h" 11 | #include "InstanceTask.h" 12 | 13 | class InstanceCopyTask : public InstanceTask 14 | { 15 | Q_OBJECT 16 | public: 17 | explicit InstanceCopyTask(InstancePtr origInstance, bool copySaves, bool keepPlaytime); 18 | 19 | protected: 20 | //! Entry point for tasks. 21 | virtual void executeTask() override; 22 | void copyFinished(); 23 | void copyAborted(); 24 | 25 | private: /* data */ 26 | InstancePtr m_origInstance; 27 | QFuture<bool> m_copyFuture; 28 | QFutureWatcher<bool> m_copyFutureWatcher; 29 | std::unique_ptr<IPathMatcher> m_matcher; 30 | bool m_keepPlaytime; 31 | }; 32 | -------------------------------------------------------------------------------- /launcher/InstanceCreationTask.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "tasks/Task.h" 4 | #include "net/NetJob.h" 5 | #include <QUrl> 6 | #include "settings/SettingsObject.h" 7 | #include "BaseVersion.h" 8 | #include "InstanceTask.h" 9 | 10 | class InstanceCreationTask : public InstanceTask 11 | { 12 | Q_OBJECT 13 | public: 14 | explicit InstanceCreationTask(BaseVersionPtr version); 15 | 16 | protected: 17 | //! Entry point for tasks. 18 | virtual void executeTask() override; 19 | 20 | private: /* data */ 21 | BaseVersionPtr m_version; 22 | }; 23 | -------------------------------------------------------------------------------- /launcher/InstanceTask.cpp: -------------------------------------------------------------------------------- 1 | #include "InstanceTask.h" 2 | 3 | InstanceTask::InstanceTask() 4 | { 5 | } 6 | 7 | InstanceTask::~InstanceTask() 8 | { 9 | } 10 | -------------------------------------------------------------------------------- /launcher/KonamiCode.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include <QKeyEvent> 4 | 5 | class KonamiCode : public QObject 6 | { 7 | Q_OBJECT 8 | public: 9 | KonamiCode(QObject *parent = 0); 10 | void input(QEvent *event); 11 | 12 | signals: 13 | void triggered(); 14 | 15 | private: 16 | int m_progress = 0; 17 | }; 18 | -------------------------------------------------------------------------------- /launcher/MMCStrings.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include <QString> 4 | 5 | namespace Strings 6 | { 7 | int naturalCompare(const QString &s1, const QString &s2, Qt::CaseSensitivity cs); 8 | } 9 | -------------------------------------------------------------------------------- /launcher/MMCTime.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2021 Jamie Mansfield <jmansfield@cadixdev.org> 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #pragma once 18 | 19 | #include <QString> 20 | 21 | namespace Time { 22 | 23 | QString prettifyDuration(int64_t duration); 24 | QString prettifyDurationHours(int64_t duration); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /launcher/MessageLevel.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include <QString> 4 | 5 | /** 6 | * @brief the MessageLevel Enum 7 | * defines what level a log message is 8 | */ 9 | namespace MessageLevel 10 | { 11 | enum Enum 12 | { 13 | Unknown, /**< No idea what this is or where it came from */ 14 | StdOut, /**< Undetermined stderr messages */ 15 | StdErr, /**< Undetermined stdout messages */ 16 | Launcher, /**< Launcher Messages */ 17 | Debug, /**< Debug Messages */ 18 | Info, /**< Info Messages */ 19 | Message, /**< Standard Messages */ 20 | Warning, /**< Warnings */ 21 | Error, /**< Errors */ 22 | Fatal, /**< Fatal Errors */ 23 | }; 24 | MessageLevel::Enum getLevel(const QString &levelName); 25 | 26 | /* Get message level from a line. Line is modified if it was successful. */ 27 | MessageLevel::Enum fromLine(QString &line); 28 | } 29 | -------------------------------------------------------------------------------- /launcher/WatchLock.h: -------------------------------------------------------------------------------- 1 | 2 | #pragma once 3 | 4 | #include <QString> 5 | #include <QFileSystemWatcher> 6 | 7 | struct WatchLock 8 | { 9 | WatchLock(QFileSystemWatcher * watcher, const QString& directory) 10 | : m_watcher(watcher), m_directory(directory) 11 | { 12 | m_watcher->removePath(m_directory); 13 | } 14 | ~WatchLock() 15 | { 16 | m_watcher->addPath(m_directory); 17 | } 18 | QFileSystemWatcher * m_watcher; 19 | QString m_directory; 20 | }; 21 | -------------------------------------------------------------------------------- /launcher/icons/IconUtils.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include <QString> 4 | 5 | namespace IconUtils { 6 | 7 | // Given a folder and an icon key, find 'best' of the icons with the given key in there and return its path 8 | QString findBestIconIn(const QString &folder, const QString & iconKey); 9 | 10 | // Get icon file type filter for file browser dialogs 11 | QString getIconFilter(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /launcher/java/JavaInstall.cpp: -------------------------------------------------------------------------------- 1 | #include "JavaInstall.h" 2 | #include <MMCStrings.h> 3 | 4 | bool JavaInstall::operator<(const JavaInstall &rhs) 5 | { 6 | if(arch < rhs.arch) 7 | { 8 | return true; 9 | } 10 | if(arch > rhs.arch) 11 | { 12 | return false; 13 | } 14 | if(id < rhs.id) 15 | { 16 | return true; 17 | } 18 | if(id > rhs.id) 19 | { 20 | return false; 21 | } 22 | return Strings::naturalCompare(path, rhs.path, Qt::CaseInsensitive) < 0; 23 | } 24 | 25 | bool JavaInstall::operator==(const JavaInstall &rhs) 26 | { 27 | return arch == rhs.arch && id == rhs.id && path == rhs.path; 28 | } 29 | 30 | bool JavaInstall::operator>(const JavaInstall &rhs) 31 | { 32 | return (!operator<(rhs)) && (!operator==(rhs)); 33 | } 34 | -------------------------------------------------------------------------------- /launcher/launch/steps/TextPrint.cpp: -------------------------------------------------------------------------------- 1 | #include "TextPrint.h" 2 | 3 | TextPrint::TextPrint(LaunchTask * parent, const QStringList &lines, MessageLevel::Enum level) : LaunchStep(parent) 4 | { 5 | m_lines = lines; 6 | m_level = level; 7 | } 8 | TextPrint::TextPrint(LaunchTask *parent, const QString &line, MessageLevel::Enum level) : LaunchStep(parent) 9 | { 10 | m_lines.append(line); 11 | m_level = level; 12 | } 13 | 14 | void TextPrint::executeTask() 15 | { 16 | emit logLines(m_lines, m_level); 17 | emitSucceeded(); 18 | } 19 | 20 | bool TextPrint::canAbort() const 21 | { 22 | return true; 23 | } 24 | 25 | bool TextPrint::abort() 26 | { 27 | emitFailed("Aborted."); 28 | return true; 29 | } 30 | -------------------------------------------------------------------------------- /launcher/minecraft/ComponentUpdateTask.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "tasks/Task.h" 4 | #include "net/Mode.h" 5 | 6 | #include <memory> 7 | class PackProfile; 8 | struct ComponentUpdateTaskData; 9 | 10 | class ComponentUpdateTask : public Task 11 | { 12 | Q_OBJECT 13 | public: 14 | enum class Mode 15 | { 16 | Launch, 17 | Resolution 18 | }; 19 | 20 | public: 21 | explicit ComponentUpdateTask(Mode mode, Net::Mode netmode, PackProfile * list, QObject *parent = 0); 22 | virtual ~ComponentUpdateTask(); 23 | 24 | protected: 25 | void executeTask(); 26 | 27 | private: 28 | void loadComponents(); 29 | void resolveDependencies(bool checkOnly); 30 | 31 | void remoteLoadSucceeded(size_t index); 32 | void remoteLoadFailed(size_t index, const QString &msg); 33 | void checkIfAllFinished(); 34 | 35 | private: 36 | std::unique_ptr<ComponentUpdateTaskData> d; 37 | }; 38 | -------------------------------------------------------------------------------- /launcher/minecraft/ComponentUpdateTask_p.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include <cstddef> 4 | #include <QString> 5 | #include <QList> 6 | #include "net/Mode.h" 7 | 8 | class PackProfile; 9 | 10 | struct RemoteLoadStatus 11 | { 12 | enum class Type 13 | { 14 | Index, 15 | List, 16 | Version 17 | } type = Type::Version; 18 | size_t PackProfileIndex = 0; 19 | bool finished = false; 20 | bool succeeded = false; 21 | QString error; 22 | }; 23 | 24 | struct ComponentUpdateTaskData 25 | { 26 | PackProfile * m_list = nullptr; 27 | QList<RemoteLoadStatus> remoteLoadStatusList; 28 | bool remoteLoadSuccessful = true; 29 | size_t remoteTasksInProgress = 0; 30 | ComponentUpdateTask::Mode mode; 31 | Net::Mode netmode; 32 | }; 33 | -------------------------------------------------------------------------------- /launcher/minecraft/ParseUtils.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include <QString> 3 | #include <QDateTime> 4 | 5 | /// take the timestamp used by S3 and turn it into QDateTime 6 | QDateTime timeFromS3Time(QString str); 7 | 8 | /// take a timestamp and convert it into an S3 timestamp 9 | QString timeToS3Time(QDateTime); 10 | -------------------------------------------------------------------------------- /launcher/minecraft/ProfileUtils.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "Library.h" 3 | #include "VersionFile.h" 4 | 5 | namespace ProfileUtils 6 | { 7 | typedef QStringList PatchOrder; 8 | 9 | /// Read and parse a OneSix format order file 10 | bool readOverrideOrders(QString path, PatchOrder &order); 11 | 12 | /// Write a OneSix format order file 13 | bool writeOverrideOrders(QString path, const PatchOrder &order); 14 | 15 | 16 | /// Parse a version file in JSON format 17 | VersionFilePtr parseJsonFile(const QFileInfo &fileInfo, const bool requireOrder); 18 | 19 | /// Save a JSON file (in any format) 20 | bool saveJsonFile(const QJsonDocument doc, const QString & filename); 21 | 22 | /// Parse a version file in binary JSON format 23 | VersionFilePtr parseBinaryJsonFile(const QFileInfo &fileInfo); 24 | 25 | /// Remove LWJGL from a patch file. This is applied to all Mojang-like profile files. 26 | void removeLwjglFromPatch(VersionFilePtr patch); 27 | 28 | } 29 | -------------------------------------------------------------------------------- /launcher/minecraft/auth/AuthStep.cpp: -------------------------------------------------------------------------------- 1 | #include "AuthStep.h" 2 | 3 | AuthStep::AuthStep(AccountData *data) : QObject(nullptr), m_data(data) { 4 | } 5 | 6 | AuthStep::~AuthStep() noexcept = default; 7 | 8 | -------------------------------------------------------------------------------- /launcher/minecraft/auth/AuthStep.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include <QObject> 3 | #include <QList> 4 | #include <QNetworkReply> 5 | 6 | #include "QObjectPtr.h" 7 | #include "minecraft/auth/AccountData.h" 8 | #include "AccountTask.h" 9 | 10 | class AuthStep : public QObject { 11 | Q_OBJECT 12 | 13 | public: 14 | using Ptr = shared_qobject_ptr<AuthStep>; 15 | 16 | public: 17 | explicit AuthStep(AccountData *data); 18 | virtual ~AuthStep() noexcept; 19 | 20 | virtual QString describe() = 0; 21 | 22 | public slots: 23 | virtual void perform() = 0; 24 | 25 | signals: 26 | void finished(AccountTaskState resultingState, QString message); 27 | void showVerificationUriAndCode(const QUrl &uri, const QString &code, int expiresIn); 28 | void hideVerificationUriAndCode(); 29 | 30 | protected: 31 | AccountData *m_data; 32 | }; 33 | -------------------------------------------------------------------------------- /launcher/minecraft/auth/Parsers.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "AccountData.h" 4 | 5 | namespace Parsers 6 | { 7 | bool getDateTime(QJsonValue value, QDateTime & out); 8 | bool getString(QJsonValue value, QString & out); 9 | bool getNumber(QJsonValue value, double & out); 10 | bool getNumber(QJsonValue value, int64_t & out); 11 | bool getBool(QJsonValue value, bool & out); 12 | 13 | bool parseXTokenResponse(QByteArray &data, Katabasis::Token &output, QString name); 14 | bool parseMojangResponse(QByteArray &data, Katabasis::Token &output); 15 | 16 | bool parseMinecraftProfile(QByteArray &data, MinecraftProfile &output); 17 | bool parseMinecraftEntitlements(QByteArray &data, MinecraftEntitlement &output); 18 | bool parseRolloutResponse(QByteArray &data, bool& result); 19 | bool parseForcedMigrationResponse(QByteArray & data, bool& result); 20 | } 21 | -------------------------------------------------------------------------------- /launcher/minecraft/auth/steps/EntitlementsStep.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include <QObject> 3 | 4 | #include "QObjectPtr.h" 5 | #include "minecraft/auth/AuthStep.h" 6 | 7 | 8 | class EntitlementsStep : public AuthStep { 9 | Q_OBJECT 10 | 11 | public: 12 | explicit EntitlementsStep(AccountData *data); 13 | virtual ~EntitlementsStep() noexcept; 14 | 15 | void perform() override; 16 | 17 | QString describe() override; 18 | 19 | private slots: 20 | void onRequestDone(QNetworkReply::NetworkError, QByteArray, QList<QNetworkReply::RawHeaderPair>); 21 | 22 | private: 23 | QString m_entitlementsRequestId; 24 | }; 25 | -------------------------------------------------------------------------------- /launcher/minecraft/auth/steps/GetSkinStep.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include <QObject> 3 | 4 | #include "QObjectPtr.h" 5 | #include "minecraft/auth/AuthStep.h" 6 | 7 | 8 | class GetSkinStep : public AuthStep { 9 | Q_OBJECT 10 | 11 | public: 12 | explicit GetSkinStep(AccountData *data); 13 | virtual ~GetSkinStep() noexcept; 14 | 15 | void perform() override; 16 | 17 | QString describe() override; 18 | 19 | private slots: 20 | void onRequestDone(QNetworkReply::NetworkError, QByteArray, QList<QNetworkReply::RawHeaderPair>); 21 | }; 22 | -------------------------------------------------------------------------------- /launcher/minecraft/auth/steps/LauncherLoginStep.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include <QObject> 3 | 4 | #include "QObjectPtr.h" 5 | #include "minecraft/auth/AuthStep.h" 6 | 7 | 8 | class LauncherLoginStep : public AuthStep { 9 | Q_OBJECT 10 | 11 | public: 12 | explicit LauncherLoginStep(AccountData *data); 13 | virtual ~LauncherLoginStep() noexcept; 14 | 15 | void perform() override; 16 | 17 | QString describe() override; 18 | 19 | private slots: 20 | void onRequestDone(QNetworkReply::NetworkError, QByteArray, QList<QNetworkReply::RawHeaderPair>); 21 | }; 22 | -------------------------------------------------------------------------------- /launcher/minecraft/auth/steps/MSAStep.h: -------------------------------------------------------------------------------- 1 | 2 | #pragma once 3 | #include <QObject> 4 | 5 | #include "QObjectPtr.h" 6 | #include "minecraft/auth/AuthStep.h" 7 | 8 | #include <katabasis/DeviceFlow.h> 9 | 10 | class MSAStep : public AuthStep { 11 | Q_OBJECT 12 | public: 13 | enum Action { 14 | Refresh, 15 | Login 16 | }; 17 | public: 18 | explicit MSAStep(AccountData *data, Action action); 19 | virtual ~MSAStep() noexcept; 20 | 21 | void perform() override; 22 | 23 | QString describe() override; 24 | 25 | private slots: 26 | void onOAuthActivityChanged(Katabasis::Activity activity); 27 | 28 | private: 29 | Katabasis::DeviceFlow *m_oauth2 = nullptr; 30 | Action m_action; 31 | }; 32 | -------------------------------------------------------------------------------- /launcher/minecraft/auth/steps/MinecraftProfileCreateStep.h: -------------------------------------------------------------------------------- 1 | /* Copyright 2024 Petr Mrázek 2 | * 3 | * This source is subject to the Microsoft Permissive License (MS-PL). 4 | * Please see the COPYING.md file for more information. 5 | */ 6 | 7 | #pragma once 8 | #include <QObject> 9 | 10 | #include "QObjectPtr.h" 11 | #include "minecraft/auth/AuthStep.h" 12 | 13 | 14 | class MinecraftProfileCreateStep : public AuthStep { 15 | Q_OBJECT 16 | 17 | public: 18 | explicit MinecraftProfileCreateStep(AccountData *data, const QString& profileName); 19 | virtual ~MinecraftProfileCreateStep() noexcept; 20 | 21 | void perform() override; 22 | 23 | QString describe() override; 24 | 25 | signals: 26 | void apiError(const MojangError& error); 27 | 28 | private slots: 29 | void onRequestDone(QNetworkReply::NetworkError, QByteArray, QList<QNetworkReply::RawHeaderPair>); 30 | 31 | private: 32 | QString m_profileName; 33 | }; 34 | 35 | -------------------------------------------------------------------------------- /launcher/minecraft/auth/steps/MinecraftProfileStep.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include <QObject> 3 | 4 | #include "QObjectPtr.h" 5 | #include "minecraft/auth/AuthStep.h" 6 | 7 | 8 | class MinecraftProfileStep : public AuthStep { 9 | Q_OBJECT 10 | 11 | public: 12 | explicit MinecraftProfileStep(AccountData *data); 13 | virtual ~MinecraftProfileStep() noexcept; 14 | 15 | void perform() override; 16 | 17 | QString describe() override; 18 | 19 | private slots: 20 | void onRequestDone(QNetworkReply::NetworkError, QByteArray, QList<QNetworkReply::RawHeaderPair>); 21 | }; 22 | -------------------------------------------------------------------------------- /launcher/minecraft/auth/steps/SetCapeStep.h: -------------------------------------------------------------------------------- 1 | /* Copyright 2025 Petr Mrázek 2 | * 3 | * This source is subject to the Microsoft Permissive License (MS-PL). 4 | * Please see the COPYING.md file for more information. 5 | */ 6 | 7 | #pragma once 8 | #include <QObject> 9 | 10 | #include "QObjectPtr.h" 11 | #include "minecraft/auth/AuthStep.h" 12 | 13 | 14 | class SetCapeStep : public AuthStep { 15 | Q_OBJECT 16 | 17 | public: 18 | explicit SetCapeStep(AccountData *data, const QString& capeId); 19 | virtual ~SetCapeStep() noexcept; 20 | 21 | void perform() override; 22 | 23 | QString describe() override; 24 | 25 | signals: 26 | void apiError(const MojangError& error); 27 | 28 | private slots: 29 | void onRequestDone(QNetworkReply::NetworkError, QByteArray, QList<QNetworkReply::RawHeaderPair>); 30 | 31 | private: 32 | QString m_capeId; 33 | }; 34 | -------------------------------------------------------------------------------- /launcher/minecraft/auth/steps/XboxProfileStep.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include <QObject> 3 | 4 | #include "QObjectPtr.h" 5 | #include "minecraft/auth/AuthStep.h" 6 | 7 | 8 | class XboxProfileStep : public AuthStep { 9 | Q_OBJECT 10 | 11 | public: 12 | explicit XboxProfileStep(AccountData *data); 13 | virtual ~XboxProfileStep() noexcept; 14 | 15 | void perform() override; 16 | 17 | QString describe() override; 18 | 19 | private slots: 20 | void onRequestDone(QNetworkReply::NetworkError, QByteArray, QList<QNetworkReply::RawHeaderPair>); 21 | }; 22 | -------------------------------------------------------------------------------- /launcher/minecraft/auth/steps/XboxUserStep.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include <QObject> 3 | 4 | #include "QObjectPtr.h" 5 | #include "minecraft/auth/AuthStep.h" 6 | 7 | 8 | class XboxUserStep : public AuthStep { 9 | Q_OBJECT 10 | 11 | public: 12 | explicit XboxUserStep(AccountData *data); 13 | virtual ~XboxUserStep() noexcept; 14 | 15 | void perform() override; 16 | 17 | QString describe() override; 18 | 19 | private slots: 20 | void onRequestDone(QNetworkReply::NetworkError, QByteArray, QList<QNetworkReply::RawHeaderPair>); 21 | }; 22 | -------------------------------------------------------------------------------- /launcher/minecraft/legacy/LegacyUpgradeTask.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "InstanceTask.h" 4 | #include "net/NetJob.h" 5 | #include <QUrl> 6 | #include <QFuture> 7 | #include <QFutureWatcher> 8 | #include "settings/SettingsObject.h" 9 | #include "BaseVersion.h" 10 | #include "BaseInstance.h" 11 | 12 | 13 | class LegacyUpgradeTask : public InstanceTask 14 | { 15 | Q_OBJECT 16 | public: 17 | explicit LegacyUpgradeTask(InstancePtr origInstance); 18 | 19 | protected: 20 | //! Entry point for tasks. 21 | virtual void executeTask() override; 22 | void copyFinished(); 23 | void copyAborted(); 24 | 25 | private: /* data */ 26 | InstancePtr m_origInstance; 27 | QFuture<bool> m_copyFuture; 28 | QFutureWatcher<bool> m_copyFutureWatcher; 29 | }; 30 | -------------------------------------------------------------------------------- /launcher/minecraft/mod/LocalModParseTask.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include <QRunnable> 3 | #include <QDebug> 4 | #include <QObject> 5 | #include "Mod.h" 6 | #include "ModDetails.h" 7 | 8 | class LocalModParseTask : public QObject, public QRunnable 9 | { 10 | Q_OBJECT 11 | public: 12 | struct Result { 13 | QString id; 14 | std::shared_ptr<ModDetails> details; 15 | }; 16 | using ResultPtr = std::shared_ptr<Result>; 17 | ResultPtr result() const { 18 | return m_result; 19 | } 20 | 21 | LocalModParseTask(int token, Mod::ModType type, const QFileInfo & modFile); 22 | void run(); 23 | 24 | signals: 25 | void finished(int token); 26 | 27 | private: 28 | void processAsZip(); 29 | void processAsFolder(); 30 | void processAsLitemod(); 31 | 32 | private: 33 | int m_token; 34 | Mod::ModType m_type; 35 | QFileInfo m_modFile; 36 | ResultPtr m_result; 37 | }; 38 | -------------------------------------------------------------------------------- /launcher/minecraft/mod/ModDetails.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include <QString> 4 | #include <QStringList> 5 | 6 | struct ModDetails 7 | { 8 | QString mod_id; 9 | QString name; 10 | QString version; 11 | QString mcversion; 12 | QString homeurl; 13 | QString updateurl; 14 | QString description; 15 | QStringList authors; 16 | QString credits; 17 | }; 18 | -------------------------------------------------------------------------------- /launcher/minecraft/mod/ModFolderLoadTask.cpp: -------------------------------------------------------------------------------- 1 | #include "ModFolderLoadTask.h" 2 | #include <QDebug> 3 | 4 | ModFolderLoadTask::ModFolderLoadTask(QDir dir) : 5 | m_dir(dir), m_result(new Result()) 6 | { 7 | } 8 | 9 | void ModFolderLoadTask::run() 10 | { 11 | m_dir.refresh(); 12 | for (auto entry : m_dir.entryInfoList()) 13 | { 14 | Mod m(entry); 15 | m_result->mods[m.mmc_id()] = m; 16 | } 17 | emit succeeded(); 18 | } 19 | -------------------------------------------------------------------------------- /launcher/minecraft/mod/ModFolderLoadTask.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include <QRunnable> 3 | #include <QObject> 4 | #include <QDir> 5 | #include <QMap> 6 | #include "Mod.h" 7 | #include <memory> 8 | 9 | class ModFolderLoadTask : public QObject, public QRunnable 10 | { 11 | Q_OBJECT 12 | public: 13 | struct Result { 14 | QMap<QString, Mod> mods; 15 | }; 16 | using ResultPtr = std::shared_ptr<Result>; 17 | ResultPtr result() const { 18 | return m_result; 19 | } 20 | 21 | public: 22 | ModFolderLoadTask(QDir dir); 23 | void run(); 24 | signals: 25 | void succeeded(); 26 | private: 27 | QDir m_dir; 28 | ResultPtr m_result; 29 | }; 30 | -------------------------------------------------------------------------------- /launcher/minecraft/mod/ResourcePackFolderModel.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ModFolderModel.h" 4 | 5 | class ResourcePackFolderModel : public ModFolderModel 6 | { 7 | Q_OBJECT 8 | 9 | public: 10 | explicit ResourcePackFolderModel(const QString &dir); 11 | 12 | QVariant headerData(int section, Qt::Orientation orientation, int role) const override; 13 | }; 14 | -------------------------------------------------------------------------------- /launcher/minecraft/mod/TexturePackFolderModel.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ModFolderModel.h" 4 | 5 | class TexturePackFolderModel : public ModFolderModel 6 | { 7 | Q_OBJECT 8 | 9 | public: 10 | explicit TexturePackFolderModel(const QString &dir); 11 | 12 | QVariant headerData(int section, Qt::Orientation orientation, int role) const override; 13 | }; 14 | -------------------------------------------------------------------------------- /launcher/minecraft/testdata/codecwav-20101023.jar: -------------------------------------------------------------------------------- 1 | dummy test file. 2 | -------------------------------------------------------------------------------- /launcher/minecraft/testdata/lib-simple.json: -------------------------------------------------------------------------------- 1 | { 2 | "downloads": { 3 | "artifact": { 4 | "path": "com/paulscode/codecwav/20101023/codecwav-20101023.jar", 5 | "sha1": "12f031cfe88fef5c1dd36c563c0a3a69bd7261da", 6 | "size": 5618, 7 | "url": "https://libraries.minecraft.net/com/paulscode/codecwav/20101023/codecwav-20101023.jar" 8 | } 9 | }, 10 | "name": "com.paulscode:codecwav:20101023" 11 | } 12 | -------------------------------------------------------------------------------- /launcher/minecraft/testdata/testname-testversion-linux-32.jar: -------------------------------------------------------------------------------- 1 | dummy test file. 2 | -------------------------------------------------------------------------------- /launcher/minecraft/update/AssetUpdateTask.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "tasks/Task.h" 3 | #include "net/NetJob.h" 4 | class MinecraftInstance; 5 | 6 | class AssetUpdateTask : public Task 7 | { 8 | Q_OBJECT 9 | public: 10 | AssetUpdateTask(MinecraftInstance * inst); 11 | virtual ~AssetUpdateTask(); 12 | 13 | void executeTask() override; 14 | 15 | bool canAbort() const override; 16 | 17 | private slots: 18 | void assetIndexFinished(); 19 | void assetIndexFailed(QString reason); 20 | void assetsFailed(QString reason); 21 | 22 | public slots: 23 | bool abort() override; 24 | 25 | private: 26 | MinecraftInstance *m_inst; 27 | NetJob::Ptr downloadJob; 28 | }; 29 | -------------------------------------------------------------------------------- /launcher/minecraft/update/FMLLibrariesTask.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "tasks/Task.h" 3 | #include "net/NetJob.h" 4 | #include "minecraft/VersionFilterData.h" 5 | 6 | class MinecraftInstance; 7 | 8 | class FMLLibrariesTask : public Task 9 | { 10 | Q_OBJECT 11 | public: 12 | FMLLibrariesTask(MinecraftInstance * inst); 13 | virtual ~FMLLibrariesTask() {}; 14 | 15 | void executeTask() override; 16 | 17 | bool canAbort() const override; 18 | 19 | private slots: 20 | void fmllibsFinished(); 21 | void fmllibsFailed(QString reason); 22 | 23 | public slots: 24 | bool abort() override; 25 | 26 | private: 27 | MinecraftInstance *m_inst; 28 | NetJob::Ptr downloadJob; 29 | QList<FMLlib> fmlLibsToProcess; 30 | }; 31 | 32 | -------------------------------------------------------------------------------- /launcher/minecraft/update/FoldersTask.cpp: -------------------------------------------------------------------------------- 1 | #include "FoldersTask.h" 2 | #include "minecraft/MinecraftInstance.h" 3 | #include <QDir> 4 | 5 | FoldersTask::FoldersTask(MinecraftInstance * inst) 6 | :Task() 7 | { 8 | m_inst = inst; 9 | } 10 | 11 | void FoldersTask::executeTask() 12 | { 13 | // Make directories 14 | QDir mcDir(m_inst->gameRoot()); 15 | if (!mcDir.exists() && !mcDir.mkpath(".")) 16 | { 17 | emitFailed(tr("Failed to create folder for minecraft binaries.")); 18 | return; 19 | } 20 | emitSucceeded(); 21 | } 22 | -------------------------------------------------------------------------------- /launcher/minecraft/update/FoldersTask.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "tasks/Task.h" 4 | 5 | class MinecraftInstance; 6 | class FoldersTask : public Task 7 | { 8 | Q_OBJECT 9 | public: 10 | FoldersTask(MinecraftInstance * inst); 11 | virtual ~FoldersTask() {}; 12 | 13 | void executeTask() override; 14 | private: 15 | MinecraftInstance *m_inst; 16 | }; 17 | 18 | -------------------------------------------------------------------------------- /launcher/minecraft/update/LibrariesTask.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "tasks/Task.h" 3 | #include "net/NetJob.h" 4 | class MinecraftInstance; 5 | 6 | class LibrariesTask : public Task 7 | { 8 | Q_OBJECT 9 | public: 10 | LibrariesTask(MinecraftInstance * inst); 11 | virtual ~LibrariesTask() {}; 12 | 13 | void executeTask() override; 14 | 15 | bool canAbort() const override; 16 | 17 | private slots: 18 | void jarlibFailed(QString reason); 19 | 20 | public slots: 21 | bool abort() override; 22 | 23 | private: 24 | MinecraftInstance *m_inst; 25 | NetJob::Ptr downloadJob; 26 | }; 27 | -------------------------------------------------------------------------------- /launcher/modplatform/legacy_ftb/PrivatePackManager.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include <QSet> 4 | #include <QString> 5 | #include <QFile> 6 | 7 | namespace LegacyFTB { 8 | 9 | class PrivatePackManager 10 | { 11 | public: 12 | ~PrivatePackManager() 13 | { 14 | save(); 15 | } 16 | void load(); 17 | void save() const; 18 | bool empty() const 19 | { 20 | return currentPacks.empty(); 21 | } 22 | const QSet<QString> &getCurrentPackCodes() const 23 | { 24 | return currentPacks; 25 | } 26 | void add(const QString &code) 27 | { 28 | currentPacks.insert(code); 29 | dirty = true; 30 | } 31 | void remove(const QString &code) 32 | { 33 | currentPacks.remove(code); 34 | dirty = true; 35 | } 36 | 37 | private: 38 | QSet<QString> currentPacks; 39 | QString m_filename = "private_packs.txt"; 40 | mutable bool dirty = false; 41 | }; 42 | 43 | } 44 | -------------------------------------------------------------------------------- /launcher/modplatform/modrinth/ModrinthPackManifest.cpp: -------------------------------------------------------------------------------- 1 | /* Copyright 2022 kb1000 2 | * 3 | * Licensed under the Apache License, Version 2.0 (the "License"); 4 | * you may not use this file except in compliance with the License. 5 | * You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software 10 | * distributed under the License is distributed on an "AS IS" BASIS, 11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | * See the License for the specific language governing permissions and 13 | * limitations under the License. 14 | */ 15 | 16 | #include "ModrinthPackManifest.h" 17 | -------------------------------------------------------------------------------- /launcher/mojang/testdata/inspect/a/b.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/mojang/testdata/inspect/a/b.txt -------------------------------------------------------------------------------- /launcher/mojang/testdata/inspect/a/b/b.txt: -------------------------------------------------------------------------------- 1 | ../b.txt -------------------------------------------------------------------------------- /launcher/mojang/testdata/inspect_win/a/b.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/mojang/testdata/inspect_win/a/b.txt -------------------------------------------------------------------------------- /launcher/mojang/testdata/inspect_win/a/b/b.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/mojang/testdata/inspect_win/a/b/b.txt -------------------------------------------------------------------------------- /launcher/net/FileSink.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "Sink.h" 3 | #include <QSaveFile> 4 | 5 | namespace Net { 6 | class FileSink : public Sink 7 | { 8 | public: /* con/des */ 9 | FileSink(QString filename); 10 | virtual ~FileSink(); 11 | 12 | public: /* methods */ 13 | JobStatus init(QNetworkRequest & request) override; 14 | JobStatus write(QByteArray & data) override; 15 | JobStatus abort() override; 16 | JobStatus finalize(QNetworkReply & reply) override; 17 | bool hasLocalData() override; 18 | 19 | protected: /* methods */ 20 | virtual JobStatus initCache(QNetworkRequest &); 21 | virtual JobStatus finalizeCache(QNetworkReply &reply); 22 | 23 | protected: /* data */ 24 | QString m_filename; 25 | bool wroteAnyData = false; 26 | std::unique_ptr<QSaveFile> m_output_file; 27 | }; 28 | } 29 | -------------------------------------------------------------------------------- /launcher/net/MetaCacheSink.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "FileSink.h" 3 | #include "ChecksumValidator.h" 4 | #include "net/HttpMetaCache.h" 5 | 6 | namespace Net { 7 | class MetaCacheSink : public FileSink 8 | { 9 | public: /* con/des */ 10 | MetaCacheSink(MetaEntryPtr entry, ChecksumValidator * md5sum); 11 | virtual ~MetaCacheSink(); 12 | bool hasLocalData() override; 13 | 14 | protected: /* methods */ 15 | JobStatus initCache(QNetworkRequest & request) override; 16 | JobStatus finalizeCache(QNetworkReply & reply) override; 17 | 18 | private: /* data */ 19 | MetaEntryPtr m_entry; 20 | ChecksumValidator * m_md5Node; 21 | }; 22 | } 23 | -------------------------------------------------------------------------------- /launcher/net/Mode.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace Net 4 | { 5 | enum class Mode 6 | { 7 | Offline, 8 | Online 9 | }; 10 | } 11 | -------------------------------------------------------------------------------- /launcher/net/Validator.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "net/NetAction.h" 4 | 5 | namespace Net { 6 | class Validator 7 | { 8 | public: /* con/des */ 9 | Validator() {}; 10 | virtual ~Validator() {}; 11 | 12 | public: /* methods */ 13 | virtual bool init(QNetworkRequest & request) = 0; 14 | virtual bool write(QByteArray & data) = 0; 15 | virtual bool abort() = 0; 16 | virtual bool validate(QNetworkReply & reply) = 0; 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /launcher/package/rpm/README.md: -------------------------------------------------------------------------------- 1 | # What is this? 2 | A simple RPM package for MultiMC that contains a script that downloads and installs real MultiMC on Red Hat based systems. 3 | 4 | It contains a `.desktop` file, a `.metainfo.xml` file, an icon, and a simple script that does the heavy lifting. 5 | 6 | # How to build this? 7 | You need the `rpm-build` package. Switch into this directory, then run: 8 | ``` 9 | rpmbuild --build-in-place -bb MultiMC5.spec 10 | ``` 11 | 12 | Replace the version with whatever is appropriate. 13 | -------------------------------------------------------------------------------- /launcher/package/ubuntu/README.md: -------------------------------------------------------------------------------- 1 | # What is this? 2 | A simple Ubuntu package for MultiMC that contains a script that downloads and installs real MultiMC on Ubuntu based systems. 3 | 4 | It contains a `.desktop` file, an icon, and a simple script that does the heavy lifting. 5 | 6 | This is also the source for the files in the [RPM package](../rpm). If you rename, create or delete files here, you'll likely also have to update the RPM spec file there. 7 | 8 | # How to build this? 9 | You need dpkg utils. Rename the `multimc` folder to `multimc_1.6-1` and then run: 10 | ``` 11 | fakeroot dpkg-deb --build multimc_1.6-1 12 | ``` 13 | 14 | Replace the version with whatever is appropriate. 15 | -------------------------------------------------------------------------------- /launcher/package/ubuntu/multimc/DEBIAN/control: -------------------------------------------------------------------------------- 1 | Package: multimc 2 | Version: 1.6-2 3 | Architecture: all 4 | Maintainer: Petr Mrázek <peterix@gmail.com> 5 | Section: games 6 | Priority: optional 7 | Installed-Size: 75 8 | Depends: zenity, desktop-file-utils, libqt5widgets5, libqt5gui5, libqt5network5, libqt5core5a, libqt5xml5, libqt5concurrent5, wget 9 | Recommends: openjdk-8-jre 10 | Homepage: http://multimc.org 11 | Description: A local install wrapper for MultiMC 12 | 13 | -------------------------------------------------------------------------------- /launcher/package/ubuntu/multimc/DEBIAN/postrm: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | update-desktop-database 4 | -------------------------------------------------------------------------------- /launcher/package/ubuntu/multimc/opt/multimc/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | INSTDIR="${XDG_DATA_HOME-$HOME/.local/share}/multimc" 4 | 5 | if [ `getconf LONG_BIT` = "64" ] 6 | then 7 | PACKAGE="mmc-stable-lin64.tar.gz" 8 | else 9 | PACKAGE="mmc-stable-lin32.tar.gz" 10 | fi 11 | 12 | deploy() { 13 | mkdir -p $INSTDIR 14 | cd ${INSTDIR} 15 | 16 | wget --progress=dot:force "https://files.multimc.org/downloads/${PACKAGE}" 2>&1 | sed -u 's/.* \([0-9]\+%\)\ \+\([0-9.]\+.\) \(.*\)/\1\n# Downloading at \2\/s, ETA \3/' | zenity --progress --auto-close --auto-kill --title="Downloading MultiMC..." 17 | 18 | tar -xzf ${PACKAGE} --transform='s,MultiMC/,,' 19 | rm ${PACKAGE} 20 | chmod +x MultiMC 21 | } 22 | 23 | runmmc() { 24 | cd ${INSTDIR} 25 | exec ./MultiMC "$@" 26 | } 27 | 28 | if [[ ! -f ${INSTDIR}/MultiMC ]]; then 29 | deploy 30 | runmmc "$@" 31 | else 32 | runmmc "$@" 33 | fi 34 | -------------------------------------------------------------------------------- /launcher/package/ubuntu/multimc/usr/share/applications/multimc.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Categories=Game; 3 | Exec=/opt/multimc/run.sh 4 | Icon=/opt/multimc/icon.svg 5 | Keywords=game;Minecraft; 6 | MimeType= 7 | Name=MultiMC 5 8 | Path= 9 | StartupNotify=true 10 | Terminal=false 11 | TerminalOptions= 12 | Type=Application 13 | X-DBUS-ServiceName= 14 | X-DBUS-StartupType= 15 | X-KDE-SubstituteUID=false 16 | X-KDE-Username= 17 | -------------------------------------------------------------------------------- /launcher/pathmatcher/FSTreeMatcher.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "IPathMatcher.h" 4 | #include <SeparatorPrefixTree.h> 5 | #include <QRegularExpression> 6 | 7 | class FSTreeMatcher : public IPathMatcher 8 | { 9 | public: 10 | virtual ~FSTreeMatcher() {}; 11 | FSTreeMatcher(SeparatorPrefixTree<'/'> & tree) : m_fsTree(tree) 12 | { 13 | } 14 | 15 | bool matches(const QString &string) const override 16 | { 17 | return m_fsTree.covers(string); 18 | } 19 | 20 | SeparatorPrefixTree<'/'> & m_fsTree; 21 | }; 22 | -------------------------------------------------------------------------------- /launcher/pathmatcher/IPathMatcher.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include <memory> 3 | #include <QString> 4 | 5 | class IPathMatcher 6 | { 7 | public: 8 | typedef std::shared_ptr<IPathMatcher> Ptr; 9 | 10 | public: 11 | virtual ~IPathMatcher(){}; 12 | virtual bool matches(const QString &string) const = 0; 13 | }; 14 | -------------------------------------------------------------------------------- /launcher/pathmatcher/MultiMatcher.h: -------------------------------------------------------------------------------- 1 | #include "IPathMatcher.h" 2 | #include <SeparatorPrefixTree.h> 3 | #include <QRegularExpression> 4 | 5 | class MultiMatcher : public IPathMatcher 6 | { 7 | public: 8 | virtual ~MultiMatcher() {}; 9 | MultiMatcher() 10 | { 11 | } 12 | MultiMatcher &add(Ptr add) 13 | { 14 | m_matchers.append(add); 15 | return *this; 16 | } 17 | 18 | virtual bool matches(const QString &string) const override 19 | { 20 | for(auto iter: m_matchers) 21 | { 22 | if(iter->matches(string)) 23 | { 24 | return true; 25 | } 26 | } 27 | return false; 28 | } 29 | 30 | QList<Ptr> m_matchers; 31 | }; 32 | -------------------------------------------------------------------------------- /launcher/resources/OSX/index.theme: -------------------------------------------------------------------------------- 1 | [Icon Theme] 2 | Name=OSX 3 | Comment=OSX theme by pexner 4 | Inherits=multimc 5 | Directories=scalable 6 | 7 | [scalable] 8 | Size=48 9 | Type=Scalable 10 | MinSize=16 11 | MaxSize=256 12 | -------------------------------------------------------------------------------- /launcher/resources/assets/underconstruction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/assets/underconstruction.png -------------------------------------------------------------------------------- /launcher/resources/backgrounds/backgrounds.qrc: -------------------------------------------------------------------------------- 1 | <!DOCTYPE RCC> 2 | <RCC version="1.0"> 3 | <qresource prefix="/backgrounds"> 4 | <file alias="kitteh">catbgrnd2.png</file> 5 | <file alias="catmas">catmas.png</file> 6 | <file alias="cattiversary">cattiversary.png</file> 7 | </qresource> 8 | </RCC> 9 | -------------------------------------------------------------------------------- /launcher/resources/backgrounds/catbgrnd2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/backgrounds/catbgrnd2.png -------------------------------------------------------------------------------- /launcher/resources/backgrounds/catmas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/backgrounds/catmas.png -------------------------------------------------------------------------------- /launcher/resources/backgrounds/cattiversary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/backgrounds/cattiversary.png -------------------------------------------------------------------------------- /launcher/resources/documents/documents.qrc: -------------------------------------------------------------------------------- 1 | <!DOCTYPE RCC> 2 | <RCC version="1.0"> 3 | <qresource prefix="/documents"> 4 | <file>../../../COPYING.md</file> 5 | </qresource> 6 | </RCC> 7 | 8 | -------------------------------------------------------------------------------- /launcher/resources/flat/index.theme: -------------------------------------------------------------------------------- 1 | [Icon Theme] 2 | Name=Flat 3 | Comment=Flat icons 4 | Inherits=multimc 5 | Directories=scalable 6 | 7 | [scalable] 8 | Size=48 9 | Type=Scalable 10 | MinSize=16 11 | MaxSize=256 12 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/about.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M11,9H13V7H11M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M11,17H13V11H11V17Z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/accounts.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M16,13C15.71,13 15.38,13 15.03,13.05C16.19,13.89 17,15 17,16.5V19H23V16.5C23,14.17 18.33,13 16,13M8,13C5.67,13 1,14.17 1,16.5V19H15V16.5C15,14.17 10.33,13 8,13M8,11A3,3 0 0,0 11,8A3,3 0 0,0 8,5A3,3 0 0,0 5,8A3,3 0 0,0 8,11M16,11A3,3 0 0,0 19,8A3,3 0 0,0 16,5A3,3 0 0,0 13,8A3,3 0 0,0 16,11Z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/bug.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M20 8h-2.81c-.45-.78-1.07-1.45-1.82-1.96L17 4.41 15.59 3l-2.17 2.17C12.96 5.06 12.49 5 12 5c-.49 0-.96.06-1.41.17L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.04.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20V8zm-6 8h-4v-2h4v2zm0-4h-4v-2h4v2z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/cat.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M12,8L10.67,8.09C9.81,7.07 7.4,4.5 5,4.5C5,4.5 3.03,7.46 4.96,11.41C4.41,12.24 4.07,12.67 4,13.66L2.07,13.95L2.28,14.93L4.04,14.67L4.18,15.38L2.61,16.32L3.08,17.21L4.53,16.32C5.68,18.76 8.59,20 12,20C15.41,20 18.32,18.76 19.47,16.32L20.92,17.21L21.39,16.32L19.82,15.38L19.96,14.67L21.72,14.93L21.93,13.95L20,13.66C19.93,12.67 19.59,12.24 19.04,11.41C20.97,7.46 19,4.5 19,4.5C16.6,4.5 14.19,7.07 13.33,8.09L12,8M9,11A1,1 0 0,1 10,12A1,1 0 0,1 9,13A1,1 0 0,1 8,12A1,1 0 0,1 9,11M15,11A1,1 0 0,1 16,12A1,1 0 0,1 15,13A1,1 0 0,1 14,12A1,1 0 0,1 15,11M11,14H13L12.3,15.39C12.5,16.03 13.06,16.5 13.75,16.5A1.5,1.5 0 0,0 15.25,15H15.75A2,2 0 0,1 13.75,17C13,17 12.35,16.59 12,16V16H12C11.65,16.59 11,17 10.25,17A2,2 0 0,1 8.25,15H8.75A1.5,1.5 0 0,0 10.25,16.5C10.94,16.5 11.5,16.03 11.7,15.39L11,14Z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/centralmods.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M20 6h-8l-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm-2.06 11L15 15.28 12.06 17l.78-3.33-2.59-2.24 3.41-.29L15 8l1.34 3.14 3.41.29-2.59 2.24.78 3.33z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/checkupdate.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M21 10.12h-6.78l2.74-2.82c-2.73-2.7-7.15-2.8-9.88-.1-2.73 2.71-2.73 7.08 0 9.79 2.73 2.71 7.15 2.71 9.88 0C18.32 15.65 19 14.08 19 12.1h2c0 1.98-.88 4.55-2.64 6.29-3.51 3.48-9.21 3.48-12.72 0-3.5-3.47-3.53-9.11-.02-12.58 3.51-3.47 9.14-3.47 12.65 0L21 3v7.12zM12.5 8v4.25l3.5 2.08-.72 1.21L11 13V8h1.5z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/copy.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M4 6H2v14c0 1.1.9 2 2 2h14v-2H4V6zm16-4H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-1 9h-4v4h-2v-4H9V9h4V5h2v4h4v2z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/coremods.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M22,12A10,10,0,1,1,12,2,10,10,0,0,1,22,12ZM12,4a8,8,0,1,0,8,8A8,8,0,0,0,12,4Zm4.23,14-1.12-4.82,3.73-3.23-4.92-.42L12,5,10.08,9.54,5.16,10l3.73,3.23L7.77,18,12,15.45,16.23,18"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/discord.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M10.14,11.63a1.15,1.15,0,1,0,1,1.14A1.1,1.1,0,0,0,10.14,11.63Zm3.75,0a1.15,1.15,0,1,0,1,1.14A1.1,1.1,0,0,0,13.89,11.63Z"/> 3 | <path d="M18.89,3H5.11A2.11,2.11,0,0,0,3,5.12V19a2.11,2.11,0,0,0,2.11,2.12H16.77l-.55-1.9,1.32,1.22,1.24,1.15,2.21,2V5.12A2.11,2.11,0,0,0,18.89,3Zm-4,13.43s-.37-.44-.68-.83a3.25,3.25,0,0,0,1.86-1.22,5.89,5.89,0,0,1-1.18.61,6.77,6.77,0,0,1-1.49.44,7.21,7.21,0,0,1-2.66,0A8.63,8.63,0,0,1,9.25,15a6,6,0,0,1-.75-.35l-.09-.05,0,0-.29-.17a3.2,3.2,0,0,0,1.8,1.21l-.69.85a3.73,3.73,0,0,1-3.14-1.56,13.77,13.77,0,0,1,1.48-6,5.09,5.09,0,0,1,2.89-1.08l.1.12A6.94,6.94,0,0,0,7.82,9.26s.23-.12.61-.3a7.72,7.72,0,0,1,2.33-.65l.17,0a8.7,8.7,0,0,1,2.08,0,8.38,8.38,0,0,1,3.1,1A6.85,6.85,0,0,0,13.55,8l.14-.16a5.09,5.09,0,0,1,2.89,1.08,13.77,13.77,0,0,1,1.48,6A3.76,3.76,0,0,1,14.92,16.43Z"/> 4 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/externaltools.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M22.7,19L13.6,9.9C14.5,7.6 14,4.9 12.1,3C10.1,1 7.1,0.6 4.7,1.7L9,6L6,9L1.6,4.7C0.4,7.1 0.9,10.1 2.9,12.1C4.8,14 7.5,14.5 9.8,13.6L18.9,22.7C19.3,23.1 19.9,23.1 20.3,22.7L22.6,20.4C23.1,20 23.1,19.3 22.7,19Z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/help.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 | <svg 3 | xmlns:dc="http://purl.org/dc/elements/1.1/" 4 | xmlns:cc="http://creativecommons.org/ns#" 5 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 6 | xmlns:svg="http://www.w3.org/2000/svg" 7 | xmlns="http://www.w3.org/2000/svg" 8 | id="svg4" 9 | version="1.1" 10 | width="24" 11 | viewBox="0 0 24 24" 12 | height="24" 13 | fill="#757575"> 14 | <path 15 | d="m 15.07,11.25 -0.9,0.92 C 13.45,12.89 13,13.5 13,15 h -2 v -0.5 c 0,-1.11 0.45,-2.11 1.17,-2.83 l 1.24,-1.26 C 13.78,10.049999 14,9.549999 14,9 14,7.89 13.100001,7 12,7 A 2,2 0 0 0 10,9 H 7.9999995 A 4,4 0 0 1 12,5 4,4 0 0 1 16,9 c 0,0.879999 -0.36,1.67 -0.93,2.25 M 13,19 h -2 v -2 h 2 M 12,2 A 10,10 0 0 0 1.9999995,12 10,10 0 0 0 12,22 10,10 0 0 0 22,12 C 22,6.47 17.5,2 12,2 Z" 16 | id="path817" /> 17 | </svg> 18 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/jarmods.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M2,21H20V19H2M20,8H18V5h2m0-2H4V13a4,4,0,0,0,4,4h6a4,4,0,0,0,4-4V10h2a2,2,0,0,0,2-2V5A2,2,0,0,0,20,3ZM11,4.43l1.62,3.29,3.63.53-2.63,2.56.62,3.62L11,12.72,7.75,14.43l.62-3.62L5.74,8.25l3.63-.53Z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/java.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M2,21H20V19H2M20,8H18V5H20M20,3H4V13A4,4 0 0,0 8,17H14A4,4 0 0,0 18,13V10H20A2,2 0 0,0 22,8V5C22,3.89 21.1,3 20,3Z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/launcher.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <svg width="24" height="24" fill="#757575" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m20 4h-16v16h16zm0 18h-16c-1.1046 0-2-0.89543-2-2v-16c0-1.1046 0.89543-2 2-2h16c1.1046 0 2 0.89543 2 2v16c0 1.1046-0.89543 2-2 2z"/><path d="m7.2 18c-0.225 0-0.45-0.075-0.6-0.15-0.375-0.225-0.6-0.6-0.6-1.05v-9.6c0-0.45 0.225-0.825 0.6-1.05 0.225-0.15 0.375-0.15 0.6-0.15 0.15 0 0.375 0.075 0.525 0.15l9.6 4.8c0.375 0.225 0.675 0.6 0.675 1.05 0 0.45-0.225 0.9-0.675 1.05l-9.6 4.8c-0.15 0.075-0.375 0.15-0.525 0.15z" clip-rule="evenodd" fill="#757575" fill-rule="evenodd" stroke-width=".99999"/></svg> 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/loadermods.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M16.23,18l-1.12-4.82,3.73-3.23-4.92-.42L12,5,10.08,9.54,5.16,10l3.73,3.23L7.77,18,12,15.45,16.23,18M20,4H4V20H20Zm0,18H4a2,2,0,0,1-2-2V4A2,2,0,0,1,4,2H20a2,2,0,0,1,2,2V20A2,2,0,0,1,20,22Z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/log.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/minecraft.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M21,16.5C21,16.88 20.79,17.21 20.47,17.38L12.57,21.82C12.41,21.94 12.21,22 12,22C11.79,22 11.59,21.94 11.43,21.82L3.53,17.38C3.21,17.21 3,16.88 3,16.5V7.5C3,7.12 3.21,6.79 3.53,6.62L11.43,2.18C11.59,2.06 11.79,2 12,2C12.21,2 12.41,2.06 12.57,2.18L20.47,6.62C20.79,6.79 21,7.12 21,7.5V16.5M12,4.15L6.04,7.5L12,10.85L17.96,7.5L12,4.15M5,15.91L11,19.29V12.58L5,9.21V15.91M19,15.91V9.21L13,12.58V19.29L19,15.91Z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/multimc.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M0,2A2,2,0,0,1,2,0H22a2,2,0,0,1,2,2V8L22,8V6H20V8H18v2H16V8H14V6H12V8H10V6H8v4H6V8H4V6H2V8H0ZM0,22a2,2,0,0,0,2,2H22a2,2,0,0,0,2-2V10H22V22H2V10H0Zm18.71-3.29a3.83,3.83,0,0,0-5.41-5.41L12,14.59l-1.29-1.29a3.83,3.83,0,1,0,0,5.41L12,17.41l1.29,1.29a3.83,3.83,0,0,0,5.41,0Zm-4-4a1.83,1.83,0,1,1,0,2.59L13.41,16Zm-5.41,0L10.59,16,9.29,17.29a1.83,1.83,0,1,1,0-2.59Z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/new.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/news.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M20,11H4V8H20M20,15H13V13H20M20,19H13V17H20M11,19H4V13H11M20.33,4.67L18.67,3L17,4.67L15.33,3L13.67,4.67L12,3L10.33,4.67L8.67,3L7,4.67L5.33,3L3.67,4.67L2,3V19A2,2 0 0,0 4,21H20A2,2 0 0,0 22,19V3L20.33,4.67Z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/notes.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M14,17H7V15H14M17,13H7V11H17M17,9H7V7H17M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/packages.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M5.12,5l.81-1h12l.94,1m1.67.23L19.15,3.55A1.45,1.45,0,0,0,18,3H6a1.49,1.49,0,0,0-1.16.55L3.46,5.23A1.92,1.92,0,0,0,3,6.5V19a2,2,0,0,0,2,2H19a2,2,0,0,0,2-2V6.5A1.92,1.92,0,0,0,20.54,5.23Z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/patreon.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M12,3h0a9,9,0,0,0-9,9v9H5.09V12a6.91,6.91,0,1,1,7.23,6.9,5.9,5.9,0,0,1-2.59-.47v-3A4.13,4.13,0,1,0,7.85,12v9H12A9,9,0,1,0,12,3Zm0,15.91h0Z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/proxy.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M22 4v-.5C22 2.12 20.88 1 19.5 1S17 2.12 17 3.5V4c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h5c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm-.8 0h-3.4v-.5c0-.94.76-1.7 1.7-1.7s1.7.76 1.7 1.7V4zm-2.28 8c.04.33.08.66.08 1 0 2.08-.8 3.97-2.1 5.39-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H7v-2h2c.55 0 1-.45 1-1V8h2c1.1 0 2-.9 2-2V3.46c-.95-.3-1.95-.46-3-.46C5.48 3 1 7.48 1 13s4.48 10 10 10 10-4.48 10-10c0-.34-.02-.67-.05-1h-2.03zM10 20.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L8 16v1c0 1.1.9 2 2 2v1.93z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/quickmods.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M8.75,5.5v7.15H10.7V18.5l4.55-7.8h-2.6l2.6-5.2ZM20,4H4V20H20Zm0,18H4a2,2,0,0,1-2-2V4A2,2,0,0,1,4,2H20a2,2,0,0,1,2,2V20A2,2,0,0,1,20,22Z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/reddit-alien.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M20,11.86a1.76,1.76,0,0,0-1.75-1.75,1.73,1.73,0,0,0-1.22.51,9,9,0,0,0-4.67-1.38l1-3.16L16,6.71s0,0,0,0a1.46,1.46,0,1,0,.1-.53l-2.89-.68a.25.25,0,0,0-.29.17L11.83,9.23a9.16,9.16,0,0,0-4.88,1.36,1.75,1.75,0,1,0-2.07,2.79,3,3,0,0,0-.06.58C4.82,16.58,8,18.7,12,18.7s7.14-2.13,7.14-4.74a2.94,2.94,0,0,0-.05-.55A1.74,1.74,0,0,0,20,11.86ZM8.51,13.08a1.06,1.06,0,1,1,1.06,1.06A1.06,1.06,0,0,1,8.51,13.08Zm6.06,3.14A3.48,3.48,0,0,1,12,17h0a3.48,3.48,0,0,1-2.56-.79.25.25,0,0,1,.35-.35,3,3,0,0,0,2.2.65h0a3,3,0,0,0,2.2-.65.25.25,0,1,1,.35.35Zm-.13-2.08a1.06,1.06,0,1,1,1.06-1.06A1.06,1.06,0,0,1,14.44,14.14Z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/refresh.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/resourcepacks.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M19.51 3.08L3.08 19.51c.09.34.27.65.51.9.25.24.56.42.9.51L20.93 4.49c-.19-.69-.73-1.23-1.42-1.41zM11.88 3L3 11.88v2.83L14.71 3h-2.83zM5 3c-1.1 0-2 .9-2 2v2l4-4H5zm14 18c.55 0 1.05-.22 1.41-.59.37-.36.59-.86.59-1.41v-2l-4 4h2zm-9.71 0h2.83L21 12.12V9.29L9.29 21z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/screenshot-placeholder.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M21 15h2v2h-2v-2zm0-4h2v2h-2v-2zm2 8h-2v2c1 0 2-1 2-2zM13 3h2v2h-2V3zm8 4h2v2h-2V7zm0-4v2h2c0-1-1-2-2-2zM1 7h2v2H1V7zm16-4h2v2h-2V3zm0 16h2v2h-2v-2zM3 3C2 3 1 4 1 5h2V3zm6 0h2v2H9V3zM5 3h2v2H5V3zm-4 8v8c0 1.1.9 2 2 2h12V11H1zm2 8l2.5-3.21 1.79 2.15 2.5-3.22L13 19H3z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/screenshots.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M21 3H3C2 3 1 4 1 5v14c0 1.1.9 2 2 2h18c1 0 2-1 2-2V5c0-1-1-2-2-2zM5 17l3.5-4.5 2.5 3.01L14.5 11l4.5 6H5z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/star.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/status-bad.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M12,2A10,10,0,1,0,22,12,10,10,0,0,0,12,2Zm4.24,7.17L13.41,12l2.83,2.83-1.41,1.41L12,13.41,9.17,16.24,7.76,14.83,10.59,12,7.76,9.17,9.17,7.76,12,10.59l2.83-2.83Z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/status-good.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/status-running.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 14.5v-9l6 4.5-6 4.5z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/status-yellow.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/viewfolder.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/worlds.svg: -------------------------------------------------------------------------------- 1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> 2 | <path d="M18.2,13a3.18,3.18,0,0,1-.84,2.16.8.8,0,0,0-.76-.56h-.4V13.4a.4.4,0,0,0-.4-.4H13.4v-.8h.8a.4.4,0,0,0,.4-.4V11h.8a.8.8,0,0,0,.8-.8V10A3.19,3.19,0,0,1,18.2,13Zm-4.4,1.6v-.4l-1.92-1.92a3.18,3.18,0,0,0,2.72,3.89V15.4A.8.8,0,0,1,13.8,14.6ZM22,8V18a2,2,0,0,1-2,2H4a2,2,0,0,1-2-2V6A2,2,0,0,1,4,4h6l2,2h8A2,2,0,0,1,22,8Zm-3,5a4,4,0,1,0-4,4A4,4,0,0,0,19,13Z"/> 3 | </svg> -------------------------------------------------------------------------------- /launcher/resources/iOS/index.theme: -------------------------------------------------------------------------------- 1 | [Icon Theme] 2 | Name=iOS 3 | Comment=iOS theme by pexner 4 | Inherits=multimc 5 | Directories=scalable 6 | 7 | [scalable] 8 | Size=48 9 | Type=Scalable 10 | MinSize=16 11 | MaxSize=256 12 | -------------------------------------------------------------------------------- /launcher/resources/iOS/scalable/about.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve"> 6 | <g> 7 | <polygon fill="#3366CC" points="18.5,22.5 18.5,12.5 12,12.5 12,15 14.5,15 14.5,22.5 12,22.5 12,25 21,25 21,22.5 "/> 8 | <g id="_x38__8_"> 9 | <g> 10 | <path fill="#3366CC" d="M16,0C7.2,0,0,7.2,0,16c0,8.8,7.2,16,16,16c8.8,0,16-7.2,16-16C32,7.2,24.8,0,16,0z M16,30 11 | C8.3,30,2,23.7,2,16C2,8.3,8.3,2,16,2c7.7,0,14,6.3,14,14C30,23.7,23.7,30,16,30z"/> 12 | </g> 13 | </g> 14 | <circle fill="#3366CC" cx="16.5" cy="8.5" r="2"/> 15 | </g> 16 | </svg> 17 | -------------------------------------------------------------------------------- /launcher/resources/iOS/scalable/copy.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve"> 6 | <g id="_x33__7_"> 7 | <g> 8 | <path fill="#3366CC" d="M20,8H4c-2.2,0-4,1.8-4,4v16c0,2.2,1.8,4,4,4h16c2.2,0,4-1.8,4-4V12C24,9.8,22.2,8,20,8z M22,28 9 | c0,1.1-0.9,2-2,2H4c-1.1,0-2-0.9-2-2V12c0-1.1,0.9-2,2-2h16c1.1,0,2,0.9,2,2V28z M28,0H12C9.8,0,8,1.8,8,4v2h2V4c0-1.1,0.9-2,2-2 10 | h16c1.1,0,2,0.9,2,2v16c0,1.1-0.9,2-2,2h-2v2h2c2.2,0,4-1.8,4-4V4C32,1.8,30.2,0,28,0z"/> 11 | </g> 12 | </g> 13 | </svg> 14 | -------------------------------------------------------------------------------- /launcher/resources/iOS/scalable/externaltools.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve"> 6 | <g id="_x35__5_"> 7 | <g> 8 | <path fill="#3366CC" d="M3,11c0.6,0,1-0.5,1-1l0-4.8l15.2,14.5c0.4,0.4,1,0.4,1.4,0c0.4-0.4,0.4-1,0-1.4L5.6,4L10,4 9 | c0.6,0,1-0.5,1-1s-0.4-1-1-1H3C2.5,2,2,2.4,2,3v7C2,10.5,2.4,11,3,11z M26,2H15v2h11c1.1,0,2,0.9,2,2l0,20.1c0,1.1-0.9,2-2,2L6,28 10 | c-1.1,0-2-0.9-2-2V15H2v11c0,2.2,2.2,4,4.4,4h19.7c2.2,0,3.9-1.8,3.9-3.9V6.4C30,4.2,28.2,2,26,2z"/> 11 | </g> 12 | </g> 13 | </svg> 14 | -------------------------------------------------------------------------------- /launcher/resources/iOS/scalable/log.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve"> 6 | <g id="_x37__21_"> 7 | <g> 8 | <path fill="#3366CC" d="M28,0c0,0-5.8,1.6-11,3c-0.7,0-1.3,0-2,0C10,1.7,4,0,4,0C1.8,0,0,1.8,0,4v21c0,2.2,1.9,3.3,4,4 9 | c0,0,5.4,1.5,11,3h2c5.6-1.5,11-3,11-3c2.1-0.5,4-1.8,4-4V4C32,1.8,30.2,0,28,0z M15,30c-5.5-1.5-11-3-11-3c-1.1-0.3-2-0.9-2-2V4 10 | c0-1.1,0.9-2,2-2l11,3V30z M30,25c0,1.1-0.9,1.7-2,2c0,0-5.4,1.5-11,3V5l11-3c1.1,0,2,0.9,2,2V25z"/> 11 | </g> 12 | </g> 13 | </svg> 14 | -------------------------------------------------------------------------------- /launcher/resources/iOS/scalable/minecraft.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve"> 6 | <path fill="#3366CC" d="M16,0L2,7.1v17.8L16,32l14-7.1V7.1L16,0z M26.7,7.7L16,13.1L5.3,7.7L16,2.2L26.7,7.7z M4,9.2l11,5.6v14.4 7 | L4,23.7V9.2z M17,29.2V14.8l11-5.6v14.4L17,29.2z"/> 8 | </svg> 9 | -------------------------------------------------------------------------------- /launcher/resources/iOS/scalable/new.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve"> 6 | <g id="_x31__2_"> 7 | <g> 8 | <path fill="#3366CC" d="M22,15h-5v-5c0-0.6-0.4-1-1-1s-1,0.4-1,1v5h-5c-0.6,0-1,0.4-1,1c0,0.6,0.4,1,1,1h5v5c0,0.6,0.4,1,1,1 9 | s1-0.4,1-1v-5h5c0.6,0,1-0.4,1-1C23,15.4,22.6,15,22,15z M28,0H4C1.8,0,0,1.8,0,4v24c0,2.2,1.8,4,4,4h24c2.2,0,4-1.8,4-4V4 10 | C32,1.8,30.2,0,28,0z M30,28c0,1.1-0.9,2-2,2H4c-1.1,0-2-0.9-2-2V4c0-1.1,0.9-2,2-2h24c1.1,0,2,0.9,2,2V28z"/> 11 | </g> 12 | </g> 13 | </svg> 14 | -------------------------------------------------------------------------------- /launcher/resources/iOS/scalable/patreon.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve"> 6 | <g> 7 | <rect y="0" fill="none" width="32" height="32"/> 8 | <path fill="#3366CC" d="M16,0C7.2,0,0,7.2,0,16v16h3.7v-3.7v-5V16C3.7,9.2,9.2,3.7,16,3.7c6.8,0,12.3,5.5,12.3,12.3 9 | c0,6.6-5.2,12-11.7,12.3c-2.1,0-3.8-0.4-4.6-0.8v-5.3c1.2,0.8,2.5,1.2,4,1.2c4.1,0,7.3-3.3,7.3-7.3c0-4.1-3.3-7.3-7.3-7.3 10 | c-4.1,0-7.3,3.3-7.3,7.3v16h6.7c0.2,0,0.4,0,0.7,0c8.8,0,16-7.2,16-16S24.8,0,16,0z"/> 11 | </g> 12 | </svg> 13 | -------------------------------------------------------------------------------- /launcher/resources/iOS/scalable/refresh.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve"> 6 | <g id="_x32__8_"> 7 | <g> 8 | <path fill="#3366CC" d="M23.7,2H31c0.6,0,1-0.4,1-1c0-0.6-0.4-1-1-1H21c-0.1,0-1,0-1,1v10c0,0.6,0.4,1,1,1c0.6,0,1-0.4,1-1V3.4 9 | c4.7,2.2,8,7.1,8,12.6c0,7.7-6.3,14-14,14C8.3,30,2,23.7,2,16C2,8.9,7.2,3.1,14,2.2v-2C6.1,1.1,0,7.8,0,16c0,8.8,7.2,16,16,16 10 | c8.8,0,16-7.2,16-16C32,10,28.7,4.7,23.7,2z"/> 11 | </g> 12 | </g> 13 | </svg> 14 | -------------------------------------------------------------------------------- /launcher/resources/iOS/scalable/viewfolder.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve"> 6 | <g id="_x36__4_"> 7 | <g> 8 | <path fill="#3366CC" d="M28,4H14c0-2.2-1.8-4-4-4H4C1.8,0,0,1.8,0,4v24c0,2.2,1.8,4,4,4h24c2.2,0,4-1.8,4-4V8C32,5.8,30.2,4,28,4z 9 | M30,28c0,1.1-0.9,2-2,2H4c-1.1,0-2-0.9-2-2V12h28V28z M30,10H2V4c0-1.1,0.9-2,2-2h6c1.1,0,2,0.9,2,2v2h16c1.1,0,2,0.9,2,2V10z"/> 10 | </g> 11 | </g> 12 | </svg> 13 | -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/chicken.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/chicken.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/creeper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/creeper.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/enderpearl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/enderpearl.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/flame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/flame.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/ftb_glow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/ftb_glow.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/ftb_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/ftb_logo.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/gear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/gear.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/herobrine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/herobrine.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/infinity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/infinity.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/magitech.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/magitech.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/meat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/meat.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/netherstar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/netherstar.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/skeleton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/skeleton.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/squarecreeper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/squarecreeper.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/steve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/steve.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/shaderpacks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/shaderpacks.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/unknown_server.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/unknown_server.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/about.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/bug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/bug.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/cat.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/centralmods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/centralmods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/checkupdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/checkupdate.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/copy.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/coremods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/coremods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/help.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/instance-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/instance-settings.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/jarmods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/jarmods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/loadermods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/loadermods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/log.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/minecraft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/minecraft.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/new.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/news.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/noaccount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/noaccount.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/patreon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/patreon.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/refresh.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/resourcepacks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/resourcepacks.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/screenshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/screenshots.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/settings.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/star.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/status-bad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/status-bad.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/status-good.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/status-good.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/status-running.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/status-running.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/status-yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/status-yellow.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/viewfolder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/viewfolder.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/worlds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/worlds.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/about.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/bug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/bug.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/cat.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/centralmods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/centralmods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/checkupdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/checkupdate.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/copy.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/help.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/instance-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/instance-settings.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/new.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/news.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/patreon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/patreon.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/refresh.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/screenshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/screenshots.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/settings.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/status-bad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/status-bad.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/status-good.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/status-good.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/status-running.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/status-running.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/status-yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/status-yellow.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/viewfolder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/viewfolder.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/worlds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/worlds.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/cat.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/coremods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/coremods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/jarmods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/jarmods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/loadermods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/loadermods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/log.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/minecraft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/minecraft.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/noaccount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/noaccount.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/patreon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/patreon.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/resourcepacks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/resourcepacks.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/star.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/status-bad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/status-bad.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/status-good.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/status-good.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/status-running.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/status-running.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/status-yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/status-yellow.png -------------------------------------------------------------------------------- /launcher/resources/multimc/256x256/minecraft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/256x256/minecraft.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/about.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/bug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/bug.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/cat.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/centralmods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/centralmods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/checkupdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/checkupdate.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/copy.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/coremods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/coremods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/help.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instance-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instance-settings.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/brick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/brick.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/chicken.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/chicken.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/creeper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/creeper.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/diamond.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/diamond.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/dirt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/dirt.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/enderpearl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/enderpearl.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/flame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/flame.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/ftb_glow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/ftb_glow.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/ftb_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/ftb_logo.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/gear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/gear.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/gold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/gold.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/grass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/grass.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/herobrine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/herobrine.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/infinity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/infinity.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/iron.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/iron.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/magitech.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/magitech.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/meat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/meat.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/netherstar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/netherstar.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/planks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/planks.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/skeleton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/skeleton.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/squarecreeper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/squarecreeper.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/steve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/steve.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/stone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/stone.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/tnt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/tnt.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/jarmods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/jarmods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/loadermods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/loadermods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/log.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/minecraft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/minecraft.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/new.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/news.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/noaccount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/noaccount.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/patreon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/patreon.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/refresh.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/resourcepacks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/resourcepacks.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/screenshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/screenshots.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/settings.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/star.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/status-bad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/status-bad.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/status-good.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/status-good.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/status-running.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/status-running.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/status-yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/status-yellow.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/viewfolder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/viewfolder.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/worlds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/worlds.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/about.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/bug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/bug.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/cat.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/centralmods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/centralmods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/checkupdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/checkupdate.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/copy.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/help.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/instance-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/instance-settings.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/log.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/minecraft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/minecraft.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/new.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/news.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/noaccount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/noaccount.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/patreon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/patreon.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/refresh.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/screenshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/screenshots.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/settings.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/star.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/status-bad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/status-bad.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/status-good.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/status-good.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/status-running.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/status-running.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/status-yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/status-yellow.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/viewfolder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/viewfolder.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/worlds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/worlds.png -------------------------------------------------------------------------------- /launcher/resources/multimc/50x50/instances/enderman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/50x50/instances/enderman.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/about.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/bug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/bug.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/cat.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/centralmods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/centralmods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/checkupdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/checkupdate.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/copy.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/coremods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/coremods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/help.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/instance-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/instance-settings.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/jarmods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/jarmods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/loadermods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/loadermods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/log.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/new.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/news.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/patreon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/patreon.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/refresh.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/resourcepacks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/resourcepacks.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/screenshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/screenshots.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/settings.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/star.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/status-bad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/status-bad.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/status-good.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/status-good.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/status-running.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/status-running.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/status-yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/status-yellow.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/viewfolder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/viewfolder.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/worlds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/worlds.png -------------------------------------------------------------------------------- /launcher/resources/multimc/8x8/noaccount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/8x8/noaccount.png -------------------------------------------------------------------------------- /launcher/resources/multimc/index.theme: -------------------------------------------------------------------------------- 1 | [Icon Theme] 2 | Name=multimc 3 | Comment=Default Icons 4 | Inherits=default 5 | Directories=8x8,16x16,22x22,24x24,32x32,32x32/instances,48x48,50x50/instances,64x64,128x128/instances,256x256,scalable,scalable/instances 6 | 7 | [8x8] 8 | Size=8 9 | 10 | [16x16] 11 | Size=16 12 | 13 | [22x22] 14 | Size=22 15 | 16 | [24x24] 17 | Size=24 18 | 19 | [32x32] 20 | Size=32 21 | 22 | [32x32/instances] 23 | Size=32 24 | MinSize=1 25 | MaxSize=32 26 | 27 | [48x48] 28 | Size=48 29 | 30 | [50x50/instances] 31 | Size=50 32 | 33 | [64x64] 34 | Size=64 35 | 36 | [128x128] 37 | Size=128 38 | MinSize=33 39 | MaxSize=128 40 | 41 | [128x128/instances] 42 | Size=128 43 | MinSize=33 44 | MaxSize=128 45 | 46 | [256x256] 47 | Size=256 48 | 49 | [scalable] 50 | Size=48 51 | Type=Scalable 52 | MinSize=16 53 | MaxSize=256 54 | 55 | [scalable/instances] 56 | Size=128 57 | MinSize=16 58 | MaxSize=256 59 | -------------------------------------------------------------------------------- /launcher/resources/multimc/scalable/atlauncher-placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/scalable/atlauncher-placeholder.png -------------------------------------------------------------------------------- /launcher/resources/pe_blue/index.theme: -------------------------------------------------------------------------------- 1 | [Icon Theme] 2 | Name=pe_blue 3 | Comment=Icons by pexner (blue) 4 | Inherits=multimc 5 | Directories=scalable 6 | 7 | [scalable] 8 | Size=48 9 | Type=Scalable 10 | MinSize=16 11 | MaxSize=256 12 | -------------------------------------------------------------------------------- /launcher/resources/pe_blue/scalable/news.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve"> 6 | <rect fill="none" width="32" height="32"/> 7 | <g> 8 | <g> 9 | <path fill="#3366CC" d="M26,0H6C2.6,0,0,2.6,0,6v14c0,3.4,2.6,6,6,6l4,6l4-6h12c3.4,0,6-2.6,6-6V6C32,2.6,29.4,0,26,0z M16,20H6 10 | v-2h10V20z M26,16H6v-2h20V16z M26,12H6v-2h20V12z M26,8H6V6h20V8z"/> 11 | </g> 12 | </g> 13 | </svg> 14 | -------------------------------------------------------------------------------- /launcher/resources/pe_blue/scalable/status-bad.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve"> 6 | <path fill="#C1272D" d="M26,32H6c-3.4,0-6-2.6-6-6V6c0-3.4,2.6-6,6-6h20c3.4,0,6,2.6,6,6v20C32,29.4,29.4,32,26,32z"/> 7 | <path fill="#FFFFFF" d="M21.6,21.6c-0.8,0.8-2,0.8-2.8,0L16,18.8l-2.8,2.8c-0.8,0.8-2,0.8-2.8,0c-0.8-0.8-0.8-2,0-2.8l2.8-2.8 8 | l-2.8-2.8c-0.8-0.8-0.8-2,0-2.8c0.8-0.8,2-0.8,2.8,0l2.8,2.8l2.8-2.8c0.8-0.8,2-0.8,2.8,0s0.8,2,0,2.8L18.8,16l2.8,2.8 9 | C22.4,19.6,22.4,20.8,21.6,21.6z"/> 10 | </svg> 11 | -------------------------------------------------------------------------------- /launcher/resources/pe_colored/index.theme: -------------------------------------------------------------------------------- 1 | [Icon Theme] 2 | Name=pe_colored 3 | Comment=Icons by pexner (colored) 4 | Inherits=multimc 5 | Directories=scalable 6 | 7 | [scalable] 8 | Size=48 9 | Type=Scalable 10 | MinSize=16 11 | MaxSize=256 12 | -------------------------------------------------------------------------------- /launcher/resources/pe_colored/scalable/news.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve"> 6 | <rect fill="none" width="16" height="16"/> 7 | <g> 8 | <g> 9 | <path fill="#39B54A" d="M13,0H3C1.3,0,0,1.3,0,3v7c0,1.7,1.3,3,3,3l2,3l2-3h6c1.7,0,3-1.3,3-3V3C16,1.3,14.7,0,13,0z M8,10H3V9h5 10 | V10z M13,8H3V7h10V8z M13,6H3V5h10V6z M13,4H3V3h10V4z"/> 11 | </g> 12 | </g> 13 | </svg> 14 | -------------------------------------------------------------------------------- /launcher/resources/pe_colored/scalable/status-bad.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve"> 6 | <path fill="#C1272D" d="M26,32H6c-3.4,0-6-2.6-6-6V6c0-3.4,2.6-6,6-6h20c3.4,0,6,2.6,6,6v20C32,29.2,29.4,32,26,32z"/> 7 | <path fill="#FFFFFF" d="M21.6,21.6c-0.8,0.8-2,0.8-2.8,0L16,18.8l-2.8,2.8c-0.8,0.8-2,0.8-2.8,0c-0.8-0.8-0.8-2,0-2.8l2.8-2.8 8 | l-2.8-2.8c-0.8-0.8-0.8-2,0-2.8c0.8-0.8,2-0.8,2.8,0l2.8,2.8l2.8-2.8c0.8-0.8,2-0.8,2.8,0s0.8,2,0,2.8L18.8,16l2.8,2.8 9 | C22.4,19.6,22.4,20.8,21.6,21.6z"/> 10 | </svg> 11 | -------------------------------------------------------------------------------- /launcher/resources/pe_dark/index.theme: -------------------------------------------------------------------------------- 1 | [Icon Theme] 2 | Name=pe_dark 3 | Comment=Icons by pexner (dark) 4 | Inherits=multimc 5 | Directories=scalable 6 | 7 | [scalable] 8 | Size=48 9 | Type=Scalable 10 | MinSize=16 11 | MaxSize=256 12 | -------------------------------------------------------------------------------- /launcher/resources/pe_dark/scalable/about.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve"> 6 | <g> 7 | <g> 8 | <polygon fill="#666666" points="17.8,21 17.8,11.9 11.9,11.9 11.9,14.2 14.2,14.2 14.2,21 11.9,21 11.9,23.3 20.1,23.3 20.1,21 9 | "/> 10 | <circle fill="#666666" cx="16" cy="8.3" r="1.8"/> 11 | </g> 12 | <path d="M16,32C7.2,32,0,24.8,0,16C0,7.2,7.2,0,16,0c8.8,0,16,7.2,16,16C32,24.8,24.8,32,16,32L16,32z M16,4C9.4,4,4,9.4,4,16 13 | s5.4,12,12,12s12-5.4,12-12S22.6,4,16,4z"/> 14 | </g> 15 | </svg> 16 | -------------------------------------------------------------------------------- /launcher/resources/pe_dark/scalable/news.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve"> 6 | <rect fill="none" width="32" height="32"/> 7 | <g> 8 | <g> 9 | <path d="M26,0H6C2.6,0,0,2.6,0,6v14c0,3.4,2.6,6,6,6l4,6l4-6h12c3.4,0,6-2.6,6-6V6C32,2.6,29.4,0,26,0z M16,20H6v-2h10V20z M26,16 10 | H6v-2h20V16z M26,12H6v-2h20V12z M26,8H6V6h20V8z"/> 11 | </g> 12 | </g> 13 | </svg> 14 | -------------------------------------------------------------------------------- /launcher/resources/pe_dark/scalable/refresh.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve"> 6 | <rect fill="none" width="32" height="32"/> 7 | <path d="M31.8,17.4c-0.4-0.9-1.2-1.4-2.1-1.4h-2.3c0-7.6-6.1-13.7-13.7-13.7C6.1,2.3,0,8.4,0,16c0,7.6,6.1,13.7,13.7,13.7 8 | c2.5,0,4.8-0.7,6.8-1.8l-3.4-3.4c-1,0.4-2.2,0.7-3.4,0.7c-5,0-9.1-4.1-9.1-9.1s4.1-9.1,9.1-9.1c5.1,0,9.1,4.1,9.1,9.1h-2.3 9 | c-0.9,0-1.8,0.6-2.1,1.4c-0.4,0.9-0.2,1.8,0.5,2.5l4.6,4.6c0.4,0.4,1,0.7,1.6,0.7c0.6,0,1.2-0.2,1.6-0.7l4.6-4.6 10 | C32,19.2,32.2,18.3,31.8,17.4z"/> 11 | </svg> 12 | -------------------------------------------------------------------------------- /launcher/resources/pe_dark/scalable/status-bad.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve"> 6 | <path d="M26,32H6c-3.4,0-6-2.6-6-6V6c0-3.4,2.6-6,6-6h20c3.4,0,6,2.6,6,6v20C32,29.4,29.4,32,26,32z"/> 7 | <path fill="#FFFFFF" d="M21.6,21.4c-0.8,0.8-2,0.8-2.8,0L16,18.6l-2.8,2.8c-0.8,0.8-2,0.8-2.8,0c-0.8-0.8-0.8-2,0-2.8l2.8-2.8 8 | L10.4,13c-0.8-0.8-0.8-2,0-2.8c0.8-0.8,2-0.8,2.8,0L16,13l2.8-2.8c0.8-0.8,2-0.8,2.8,0s0.8,2,0,2.8l-2.8,2.8l2.8,2.8 9 | C22.4,19.4,22.4,20.6,21.6,21.4z"/> 10 | </svg> 11 | -------------------------------------------------------------------------------- /launcher/resources/pe_light/index.theme: -------------------------------------------------------------------------------- 1 | [Icon Theme] 2 | Name=pe_light 3 | Comment=Icons by pexner (light) 4 | Inherits=multimc 5 | Directories=scalable 6 | 7 | [scalable] 8 | Size=48 9 | Type=Scalable 10 | MinSize=16 11 | MaxSize=256 12 | -------------------------------------------------------------------------------- /launcher/resources/pe_light/scalable/about.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve"> 6 | <g> 7 | <g> 8 | <polygon fill="#F2F2F2" points="17.8,21 17.8,11.9 11.9,11.9 11.9,14.2 14.2,14.2 14.2,21 11.9,21 11.9,23.3 20.1,23.3 20.1,21 9 | "/> 10 | <circle fill="#F2F2F2" cx="16" cy="8.3" r="1.8"/> 11 | </g> 12 | <path fill="#F2F2F2" d="M16,32C7.2,32,0,24.8,0,16C0,7.2,7.2,0,16,0c8.8,0,16,7.2,16,16C32,24.8,24.8,32,16,32L16,32z M16,4 13 | C9.4,4,4,9.4,4,16s5.4,12,12,12s12-5.4,12-12S22.6,4,16,4z"/> 14 | </g> 15 | </svg> 16 | -------------------------------------------------------------------------------- /launcher/resources/pe_light/scalable/news.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve"> 6 | <g> 7 | <g> 8 | <path fill-rule="evenodd" clip-rule="evenodd" fill="#F2F2F2" d="M26,0H6C2.7,0,0,2.7,0,6v14c0,3.3,2.7,6,6,6l4,6l4-6h12 9 | c3.3,0,6-2.7,6-6V6C32,2.7,29.3,0,26,0z M16,20H6v-2h10V20z M26,16H6v-2h20V16z M26,12H6v-2h20V12z M26,8H6V6h20V8z"/> 10 | </g> 11 | </g> 12 | </svg> 13 | -------------------------------------------------------------------------------- /launcher/resources/pe_light/scalable/status-bad.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve"> 6 | <path fill="#F2F2F2" d="M26,32H6c-3.4,0-6-2.6-6-6V6c0-3.4,2.6-6,6-6h20c3.4,0,6,2.6,6,6v20C32,29.4,29.4,32,26,32z"/> 7 | <path fill="#4D4D4D" d="M21.6,21.6c-0.8,0.8-2,0.8-2.8,0L16,18.8l-2.8,2.8c-0.8,0.8-2,0.8-2.8,0c-0.8-0.8-0.8-2,0-2.8l2.8-2.8 8 | l-2.8-2.8c-0.8-0.8-0.8-2,0-2.8c0.8-0.8,2-0.8,2.8,0l2.8,2.8l2.8-2.8c0.8-0.8,2-0.8,2.8,0s0.8,2,0,2.8L18.8,16l2.8,2.8 9 | C22.4,19.6,22.4,20.8,21.6,21.6z"/> 10 | </svg> 11 | -------------------------------------------------------------------------------- /launcher/resources/skins/shaders/bg.frag: -------------------------------------------------------------------------------- 1 | #version 150 core 2 | 3 | /* Copyright 2025 Petr Mrázek 4 | * 5 | * This source is subject to the Microsoft Permissive License (MS-PL). 6 | * Please see the COPYING.md file for more information. 7 | */ 8 | 9 | out vec4 finalColor; 10 | in vec4 gl_FragCoord; 11 | 12 | uniform vec3 baseColor; 13 | uniform vec3 alternateColor; 14 | uniform float fDevicePixelSize; 15 | 16 | void main() { 17 | float fieldSize = fDevicePixelSize * 25.0; 18 | if ((int(floor(gl_FragCoord.x / fieldSize) + floor(gl_FragCoord.y / fieldSize)) & 1) == 0) 19 | finalColor = vec4(baseColor, 1.0); 20 | else 21 | finalColor = vec4(alternateColor, 1.0); 22 | } 23 | -------------------------------------------------------------------------------- /launcher/resources/skins/shaders/bg.vert: -------------------------------------------------------------------------------- 1 | #version 150 core 2 | 3 | /* Copyright 2025 Petr Mrázek 4 | * 5 | * This source is subject to the Microsoft Permissive License (MS-PL). 6 | * Please see the COPYING.md file for more information. 7 | */ 8 | 9 | in vec2 position; 10 | 11 | void main() { 12 | gl_Position = vec4(position, 0.0, 1.0); 13 | } 14 | 15 | -------------------------------------------------------------------------------- /launcher/resources/skins/shaders/skin.vert: -------------------------------------------------------------------------------- 1 | #version 150 core 2 | 3 | /* Copyright 2025 Petr Mrázek 4 | * 5 | * This source is subject to the Microsoft Permissive License (MS-PL). 6 | * Please see the COPYING.md file for more information. 7 | */ 8 | 9 | // vertex shader 10 | 11 | in vec3 position; 12 | in vec2 texcoords; 13 | in int texnr; 14 | in int transparency; 15 | 16 | out vec2 texCoord; 17 | flat out int texID; 18 | flat out int texTransparency; 19 | 20 | uniform mat4 worldToView; 21 | 22 | void main() { 23 | gl_Position = worldToView * vec4(position, 1.0); 24 | texCoord = texcoords; 25 | texID = texnr; 26 | texTransparency = transparency; 27 | } 28 | -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Alex_Classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Alex_Classic.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Alex_Slim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Alex_Slim.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Ari_Classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Ari_Classic.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Ari_Slim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Ari_Slim.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Efe_Classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Efe_Classic.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Efe_Slim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Efe_Slim.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Kai_Classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Kai_Classic.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Kai_Slim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Kai_Slim.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Makena_Classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Makena_Classic.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Makena_Slim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Makena_Slim.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Noor_Classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Noor_Classic.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Noor_Slim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Noor_Slim.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Steve_Classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Steve_Classic.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Steve_Slim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Steve_Slim.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Sunny_Classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Sunny_Classic.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Sunny_Slim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Sunny_Slim.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Zuri_Classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Zuri_Classic.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Zuri_Slim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Zuri_Slim.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/no_cape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/no_cape.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/placeholder_cape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/placeholder_cape.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/placeholder_skin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/placeholder_skin.png -------------------------------------------------------------------------------- /launcher/resources/sources/burfcat_hat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/sources/burfcat_hat.png -------------------------------------------------------------------------------- /launcher/resources/sources/cattiversary.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/sources/cattiversary.xcf -------------------------------------------------------------------------------- /launcher/screenshots/ImgurUpload.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "QObjectPtr.h" 3 | #include "net/NetAction.h" 4 | #include "Screenshot.h" 5 | 6 | class ImgurUpload : public NetAction { 7 | public: 8 | using Ptr = shared_qobject_ptr<ImgurUpload>; 9 | 10 | explicit ImgurUpload(ScreenShot::Ptr shot); 11 | static Ptr make(ScreenShot::Ptr shot) { 12 | return Ptr(new ImgurUpload(shot)); 13 | } 14 | 15 | protected 16 | slots: 17 | void downloadProgress(qint64 bytesReceived, qint64 bytesTotal) override; 18 | void downloadError(QNetworkReply::NetworkError error) override; 19 | void downloadFinished() override; 20 | void downloadReadyRead() override {} 21 | 22 | public 23 | slots: 24 | void startImpl() override; 25 | 26 | private: 27 | ScreenShot::Ptr m_shot; 28 | bool finished = true; 29 | }; 30 | -------------------------------------------------------------------------------- /launcher/screenshots/Screenshot.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include <QDateTime> 4 | #include <QString> 5 | #include <QFileInfo> 6 | #include <memory> 7 | 8 | struct ScreenShot { 9 | using Ptr = std::shared_ptr<ScreenShot>; 10 | 11 | ScreenShot(QFileInfo file) { 12 | m_file = file; 13 | } 14 | QFileInfo m_file; 15 | QString m_url; 16 | QString m_imgurId; 17 | QString m_imgurDeleteHash; 18 | }; 19 | -------------------------------------------------------------------------------- /launcher/skins/SkinUtils.h: -------------------------------------------------------------------------------- 1 | /* Copyright 2025 Petr Mrázek 2 | * 3 | * This source is subject to the Microsoft Permissive License (MS-PL). 4 | * Please see the COPYING.md file for more information. 5 | */ 6 | 7 | #pragma once 8 | 9 | #include <QString> 10 | #include <QByteArray> 11 | #include <QImage> 12 | 13 | namespace Skins { 14 | bool readSkinFromFile(const QString& path, QByteArray& dataOut, QImage& imageOut, QString& keyOut, QString& textureIDOut); 15 | bool readSkinFromData(const QByteArray& data, QImage& imageOut, QString& textureIDOut); 16 | 17 | QString hashSkin(const QImage& image); 18 | } 19 | -------------------------------------------------------------------------------- /launcher/tasks/SequentialTask.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "Task.h" 4 | #include "QObjectPtr.h" 5 | 6 | #include <QQueue> 7 | 8 | class SequentialTask : public Task 9 | { 10 | Q_OBJECT 11 | public: 12 | explicit SequentialTask(QObject *parent = 0); 13 | virtual ~SequentialTask() {}; 14 | 15 | void addTask(Task::Ptr task); 16 | 17 | protected: 18 | void executeTask(); 19 | 20 | private 21 | slots: 22 | void startNext(); 23 | void subTaskFailed(const QString &msg); 24 | void subTaskStatus(const QString &msg); 25 | void subTaskProgress(qint64 current, qint64 total); 26 | 27 | private: 28 | QQueue<Task::Ptr > m_queue; 29 | int m_currentIndex; 30 | }; 31 | -------------------------------------------------------------------------------- /launcher/testdata/FileSystem-test_createShortcut-unix: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | TryExec=asdfDest 4 | Exec=asdfDest 'arg1' 'arg2' 5 | Name=asdf 6 | Icon= 7 | -------------------------------------------------------------------------------- /launcher/testdata/test_folder/assets/minecraft/textures/blah.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /launcher/testdata/test_folder/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "pack_format": 1, 4 | "description": "Some resource pack maybe" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /launcher/testdata/test_folder/pack.nfo: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /launcher/tools/JProfiler.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "BaseProfiler.h" 4 | 5 | class JProfilerFactory : public BaseProfilerFactory 6 | { 7 | public: 8 | QString name() const override { return "JProfiler"; } 9 | void registerSettings(SettingsObjectPtr settings) override; 10 | BaseExternalTool *createTool(InstancePtr instance, QObject *parent = 0) override; 11 | bool check(QString *error) override; 12 | bool check(const QString &path, QString *error) override; 13 | }; 14 | -------------------------------------------------------------------------------- /launcher/tools/JVisualVM.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "BaseProfiler.h" 4 | 5 | class JVisualVMFactory : public BaseProfilerFactory 6 | { 7 | public: 8 | QString name() const override { return "JVisualVM"; } 9 | void registerSettings(SettingsObjectPtr settings) override; 10 | BaseExternalTool *createTool(InstancePtr instance, QObject *parent = 0) override; 11 | bool check(QString *error) override; 12 | bool check(const QString &path, QString *error) override; 13 | }; 14 | -------------------------------------------------------------------------------- /launcher/tools/MCEditTool.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include <QString> 4 | #include "settings/SettingsObject.h" 5 | 6 | class MCEditTool 7 | { 8 | public: 9 | MCEditTool(SettingsObjectPtr settings); 10 | void setPath(QString & path); 11 | QString path() const; 12 | bool check(const QString &toolPath, QString &error); 13 | QString getProgramPath(); 14 | private: 15 | SettingsObjectPtr m_settings; 16 | }; 17 | -------------------------------------------------------------------------------- /launcher/translations/POTranslator.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include <QTranslator> 4 | 5 | struct POTranslatorPrivate; 6 | 7 | class POTranslator : public QTranslator 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit POTranslator(const QString& filename, QObject * parent = nullptr); 12 | QString translate(const char * context, const char * sourceText, const char * disambiguation, int n) const override; 13 | bool isEmpty() const override; 14 | private: 15 | POTranslatorPrivate * d; 16 | }; 17 | -------------------------------------------------------------------------------- /launcher/ui/ColorCache.cpp: -------------------------------------------------------------------------------- 1 | #include "ColorCache.h" 2 | 3 | 4 | /** 5 | * Blend the color with the front color, adapting to the back color 6 | */ 7 | QColor ColorCache::blend(QColor color) 8 | { 9 | if (Rainbow::luma(m_front) > Rainbow::luma(m_back)) 10 | { 11 | // for dark color schemes, produce a fitting color first 12 | color = Rainbow::tint(m_front, color, 0.5); 13 | } 14 | // adapt contrast 15 | return Rainbow::mix(m_front, color, m_bias); 16 | } 17 | 18 | /** 19 | * Blend the color with the back color 20 | */ 21 | QColor ColorCache::blendBackground(QColor color) 22 | { 23 | // adapt contrast 24 | return Rainbow::mix(m_back, color, m_bias); 25 | } 26 | 27 | void ColorCache::recolorAll() 28 | { 29 | auto iter = m_colors.begin(); 30 | while(iter != m_colors.end()) 31 | { 32 | iter->front = blend(iter->original); 33 | iter->back = blendBackground(iter->original); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /launcher/ui/GuiUtil.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include <QWidget> 4 | 5 | namespace GuiUtil 6 | { 7 | QString uploadPaste(const QString &text, QWidget *parentWidget); 8 | void setClipboardText(const QString &text); 9 | QStringList BrowseForFiles(QString context, QString caption, QString filter, QString defaultPath, QWidget *parentWidget); 10 | QString BrowseForFile(QString context, QString caption, QString filter, QString defaultPath, QWidget *parentWidget); 11 | } 12 | -------------------------------------------------------------------------------- /launcher/ui/dialogs/ModrinthExportDialog.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 arthomnix 3 | * 4 | * This source is subject to the Microsoft Public License (MS-PL). 5 | * Please see the COPYING.md file for more information. 6 | */ 7 | 8 | #pragma once 9 | 10 | #include <QDialog> 11 | #include "ExportInstanceDialog.h" 12 | 13 | QT_BEGIN_NAMESPACE 14 | namespace Ui 15 | { 16 | class ModrinthExportDialog; 17 | } 18 | QT_END_NAMESPACE 19 | 20 | class ModrinthExportDialog : public QDialog 21 | { 22 | Q_OBJECT 23 | 24 | public: 25 | explicit ModrinthExportDialog(InstancePtr instance, QWidget *parent = nullptr); 26 | 27 | ~ModrinthExportDialog() override; 28 | 29 | private slots: 30 | void on_fileBrowseButton_clicked(); 31 | void on_datapackPathBrowse_clicked(); 32 | void accept() override; 33 | void updateDialogState(); 34 | 35 | private: 36 | Ui::ModrinthExportDialog *ui; 37 | InstancePtr m_instance; 38 | }; -------------------------------------------------------------------------------- /launcher/ui/instanceview/AccessibleInstanceView.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include <QString> 4 | class QAccessibleInterface; 5 | 6 | QAccessibleInterface *groupViewAccessibleFactory(const QString &classname, QObject *object); 7 | -------------------------------------------------------------------------------- /launcher/ui/pages/BasePageContainer.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | class BasePageContainer 4 | { 5 | public: 6 | virtual ~BasePageContainer(){}; 7 | virtual bool selectPage(QString pageId) = 0; 8 | virtual void refreshContainer() = 0; 9 | virtual bool requestClose() = 0; 10 | }; 11 | -------------------------------------------------------------------------------- /launcher/ui/pages/instance/NotesPage.cpp: -------------------------------------------------------------------------------- 1 | #include "NotesPage.h" 2 | #include "ui_NotesPage.h" 3 | #include <QTabBar> 4 | 5 | NotesPage::NotesPage(BaseInstance *inst, QWidget *parent) 6 | : QWidget(parent), ui(new Ui::NotesPage), m_inst(inst) 7 | { 8 | ui->setupUi(this); 9 | ui->noteEditor->setText(m_inst->notes()); 10 | } 11 | 12 | NotesPage::~NotesPage() 13 | { 14 | delete ui; 15 | } 16 | 17 | bool NotesPage::apply() 18 | { 19 | m_inst->setNotes(ui->noteEditor->toPlainText()); 20 | return true; 21 | } 22 | -------------------------------------------------------------------------------- /launcher/ui/pages/instance/ResourcePackPage.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ModFolderPage.h" 4 | #include "ui_ModFolderPage.h" 5 | 6 | class ResourcePackPage : public ModFolderPage 7 | { 8 | Q_OBJECT 9 | public: 10 | explicit ResourcePackPage(MinecraftInstance *instance, QWidget *parent = 0) 11 | : ModFolderPage(instance, instance->resourcePackList(), "resourcepacks", 12 | "resourcepacks", tr("Resource packs"), "Resource-packs", parent) 13 | { 14 | ui->actionView_configs->setVisible(false); 15 | } 16 | virtual ~ResourcePackPage() {} 17 | 18 | virtual bool shouldDisplay() const override 19 | { 20 | return !m_inst->traits().contains("no-texturepacks") && 21 | !m_inst->traits().contains("texturepacks"); 22 | } 23 | }; 24 | -------------------------------------------------------------------------------- /launcher/ui/pages/instance/ShaderPackPage.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ModFolderPage.h" 4 | #include "ui_ModFolderPage.h" 5 | 6 | class ShaderPackPage : public ModFolderPage 7 | { 8 | Q_OBJECT 9 | public: 10 | explicit ShaderPackPage(MinecraftInstance *instance, QWidget *parent = 0) 11 | : ModFolderPage(instance, instance->shaderPackList(), "shaderpacks", 12 | "shaderpacks", tr("Shader packs"), "Resource-packs", parent) 13 | { 14 | ui->actionView_configs->setVisible(false); 15 | } 16 | virtual ~ShaderPackPage() {} 17 | 18 | virtual bool shouldDisplay() const override 19 | { 20 | return true; 21 | } 22 | }; 23 | -------------------------------------------------------------------------------- /launcher/ui/pages/instance/TexturePackPage.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ModFolderPage.h" 4 | #include "ui_ModFolderPage.h" 5 | 6 | class TexturePackPage : public ModFolderPage 7 | { 8 | Q_OBJECT 9 | public: 10 | explicit TexturePackPage(MinecraftInstance *instance, QWidget *parent = 0) 11 | : ModFolderPage(instance, instance->texturePackList(), "texturepacks", "resourcepacks", 12 | tr("Texture packs"), "Texture-packs", parent) 13 | { 14 | ui->actionView_configs->setVisible(false); 15 | } 16 | virtual ~TexturePackPage() {} 17 | 18 | virtual bool shouldDisplay() const override 19 | { 20 | return m_inst->traits().contains("texturepacks"); 21 | } 22 | }; 23 | -------------------------------------------------------------------------------- /launcher/ui/setupwizard/BaseWizardPage.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include <QWizardPage> 4 | #include <QEvent> 5 | 6 | class BaseWizardPage : public QWizardPage 7 | { 8 | public: 9 | explicit BaseWizardPage(QWidget *parent = Q_NULLPTR) 10 | : QWizardPage(parent) 11 | { 12 | } 13 | virtual ~BaseWizardPage() {}; 14 | 15 | virtual bool wantsRefreshButton() 16 | { 17 | return false; 18 | } 19 | virtual void refresh() 20 | { 21 | } 22 | 23 | protected: 24 | virtual void retranslate() = 0; 25 | void changeEvent(QEvent * event) override 26 | { 27 | if (event->type() == QEvent::LanguageChange) 28 | { 29 | retranslate(); 30 | } 31 | QWizardPage::changeEvent(event); 32 | } 33 | }; 34 | -------------------------------------------------------------------------------- /launcher/ui/setupwizard/JavaWizardPage.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "BaseWizardPage.h" 4 | 5 | class JavaSettingsWidget; 6 | 7 | class JavaWizardPage : public BaseWizardPage 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit JavaWizardPage(QWidget *parent = Q_NULLPTR); 12 | 13 | virtual ~JavaWizardPage() 14 | { 15 | }; 16 | 17 | bool wantsRefreshButton() override; 18 | void refresh() override; 19 | void initializePage() override; 20 | bool validatePage() override; 21 | 22 | protected: /* methods */ 23 | void setupUi(); 24 | void retranslate() override; 25 | 26 | private: /* data */ 27 | JavaSettingsWidget *m_java_widget = nullptr; 28 | }; 29 | 30 | -------------------------------------------------------------------------------- /launcher/ui/setupwizard/LanguageWizardPage.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "BaseWizardPage.h" 4 | 5 | class LanguageSelectionWidget; 6 | 7 | class LanguageWizardPage : public BaseWizardPage 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit LanguageWizardPage(QWidget *parent = Q_NULLPTR); 12 | 13 | virtual ~LanguageWizardPage(); 14 | 15 | bool wantsRefreshButton() override; 16 | 17 | void refresh() override; 18 | 19 | bool validatePage() override; 20 | 21 | protected: 22 | void retranslate() override; 23 | 24 | private: 25 | LanguageSelectionWidget *mainWidget = nullptr; 26 | }; 27 | -------------------------------------------------------------------------------- /launcher/ui/themes/BrightTheme.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "FusionTheme.h" 4 | 5 | class BrightTheme: public FusionTheme 6 | { 7 | public: 8 | virtual ~BrightTheme() {} 9 | 10 | QString id() override; 11 | QString name() override; 12 | bool hasStyleSheet() override; 13 | QString appStyleSheet() override; 14 | bool hasColorScheme() override; 15 | QPalette colorScheme() override; 16 | double fadeAmount() override; 17 | QColor fadeColor() override; 18 | }; 19 | 20 | -------------------------------------------------------------------------------- /launcher/ui/themes/CustomTheme.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ITheme.h" 4 | 5 | class CustomTheme: public ITheme 6 | { 7 | public: 8 | CustomTheme(ITheme * baseTheme, QString folder); 9 | virtual ~CustomTheme() {} 10 | 11 | QString id() override; 12 | QString name() override; 13 | bool hasStyleSheet() override; 14 | QString appStyleSheet() override; 15 | bool hasColorScheme() override; 16 | QPalette colorScheme() override; 17 | double fadeAmount() override; 18 | QColor fadeColor() override; 19 | QString qtTheme() override; 20 | QStringList searchPaths() override; 21 | 22 | private: /* data */ 23 | QPalette m_palette; 24 | QColor m_fadeColor; 25 | double m_fadeAmount; 26 | QString m_styleSheet; 27 | QString m_name; 28 | QString m_id; 29 | QString m_widgets; 30 | }; 31 | 32 | -------------------------------------------------------------------------------- /launcher/ui/themes/DarkTheme.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "FusionTheme.h" 4 | 5 | class DarkTheme: public FusionTheme 6 | { 7 | public: 8 | virtual ~DarkTheme() {} 9 | 10 | QString id() override; 11 | QString name() override; 12 | bool hasStyleSheet() override; 13 | QString appStyleSheet() override; 14 | bool hasColorScheme() override; 15 | QPalette colorScheme() override; 16 | double fadeAmount() override; 17 | QColor fadeColor() override; 18 | }; 19 | -------------------------------------------------------------------------------- /launcher/ui/themes/FusionTheme.cpp: -------------------------------------------------------------------------------- 1 | #include "FusionTheme.h" 2 | 3 | QString FusionTheme::qtTheme() 4 | { 5 | return "Fusion"; 6 | } 7 | -------------------------------------------------------------------------------- /launcher/ui/themes/FusionTheme.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ITheme.h" 4 | 5 | class FusionTheme: public ITheme 6 | { 7 | public: 8 | virtual ~FusionTheme() {} 9 | 10 | QString qtTheme() override; 11 | }; 12 | -------------------------------------------------------------------------------- /launcher/ui/themes/ITheme.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include <QString> 3 | #include <QPalette> 4 | 5 | class QStyle; 6 | 7 | class ITheme 8 | { 9 | public: 10 | virtual ~ITheme() {} 11 | virtual void apply(bool initial); 12 | virtual QString id() = 0; 13 | virtual QString name() = 0; 14 | virtual bool hasStyleSheet() = 0; 15 | virtual QString appStyleSheet() = 0; 16 | virtual QString qtTheme() = 0; 17 | virtual bool hasColorScheme() = 0; 18 | virtual QPalette colorScheme() = 0; 19 | virtual QColor fadeColor() = 0; 20 | virtual double fadeAmount() = 0; 21 | virtual QStringList searchPaths() 22 | { 23 | return {}; 24 | } 25 | 26 | static QPalette fadeInactive(QPalette in, qreal bias, QColor color); 27 | }; 28 | -------------------------------------------------------------------------------- /launcher/ui/themes/SystemTheme.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ITheme.h" 4 | 5 | class SystemTheme: public ITheme 6 | { 7 | public: 8 | SystemTheme(); 9 | virtual ~SystemTheme() {} 10 | void apply(bool initial) override; 11 | 12 | QString id() override; 13 | QString name() override; 14 | QString qtTheme() override; 15 | bool hasStyleSheet() override; 16 | QString appStyleSheet() override; 17 | bool hasColorScheme() override; 18 | QPalette colorScheme() override; 19 | double fadeAmount() override; 20 | QColor fadeColor() override; 21 | private: 22 | QPalette systemPalette; 23 | QString systemTheme; 24 | }; 25 | -------------------------------------------------------------------------------- /launcher/ui/widgets/Common.cpp: -------------------------------------------------------------------------------- 1 | #include "Common.h" 2 | 3 | // Origin: Qt 4 | QStringList viewItemTextLayout(QTextLayout &textLayout, int lineWidth, qreal &height, 5 | qreal &widthUsed) 6 | { 7 | QStringList lines; 8 | height = 0; 9 | widthUsed = 0; 10 | textLayout.beginLayout(); 11 | QString str = textLayout.text(); 12 | while (true) 13 | { 14 | QTextLine line = textLayout.createLine(); 15 | if (!line.isValid()) 16 | break; 17 | if (line.textLength() == 0) 18 | break; 19 | line.setLineWidth(lineWidth); 20 | line.setPosition(QPointF(0, height)); 21 | height += line.height(); 22 | lines.append(str.mid(line.textStart(), line.textLength())); 23 | widthUsed = qMax(widthUsed, line.naturalTextWidth()); 24 | } 25 | textLayout.endLayout(); 26 | return lines; 27 | } 28 | -------------------------------------------------------------------------------- /launcher/ui/widgets/Common.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include <QStringList> 3 | #include <QTextLayout> 4 | 5 | QStringList viewItemTextLayout(QTextLayout &textLayout, int lineWidth, qreal &height, 6 | qreal &widthUsed); -------------------------------------------------------------------------------- /launcher/ui/widgets/DropLabel.cpp: -------------------------------------------------------------------------------- 1 | #include "DropLabel.h" 2 | 3 | #include <QMimeData> 4 | #include <QDropEvent> 5 | 6 | DropLabel::DropLabel(QWidget *parent) : QLabel(parent) 7 | { 8 | setAcceptDrops(true); 9 | } 10 | 11 | void DropLabel::dragEnterEvent(QDragEnterEvent *event) 12 | { 13 | event->acceptProposedAction(); 14 | } 15 | 16 | void DropLabel::dragMoveEvent(QDragMoveEvent *event) 17 | { 18 | event->acceptProposedAction(); 19 | } 20 | 21 | void DropLabel::dragLeaveEvent(QDragLeaveEvent *event) 22 | { 23 | event->accept(); 24 | } 25 | 26 | void DropLabel::dropEvent(QDropEvent *event) 27 | { 28 | const QMimeData *mimeData = event->mimeData(); 29 | 30 | if (!mimeData) 31 | { 32 | return; 33 | } 34 | 35 | if (mimeData->hasUrls()) { 36 | auto urls = mimeData->urls(); 37 | emit droppedURLs(urls); 38 | } 39 | 40 | event->acceptProposedAction(); 41 | } 42 | -------------------------------------------------------------------------------- /launcher/ui/widgets/DropLabel.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include <QLabel> 4 | 5 | class DropLabel : public QLabel 6 | { 7 | Q_OBJECT 8 | 9 | public: 10 | explicit DropLabel(QWidget *parent = nullptr); 11 | 12 | signals: 13 | void droppedURLs(QList<QUrl> urls); 14 | 15 | protected: 16 | void dropEvent(QDropEvent *event) override; 17 | void dragEnterEvent(QDragEnterEvent *event) override; 18 | void dragMoveEvent(QDragMoveEvent *event) override; 19 | void dragLeaveEvent(QDragLeaveEvent *event) override; 20 | }; 21 | -------------------------------------------------------------------------------- /launcher/ui/widgets/FocusLineEdit.cpp: -------------------------------------------------------------------------------- 1 | #include "FocusLineEdit.h" 2 | #include <QDebug> 3 | 4 | FocusLineEdit::FocusLineEdit(QWidget *parent) : QLineEdit(parent) 5 | { 6 | _selectOnMousePress = false; 7 | } 8 | 9 | void FocusLineEdit::focusInEvent(QFocusEvent *e) 10 | { 11 | QLineEdit::focusInEvent(e); 12 | selectAll(); 13 | _selectOnMousePress = true; 14 | } 15 | 16 | void FocusLineEdit::mousePressEvent(QMouseEvent *me) 17 | { 18 | QLineEdit::mousePressEvent(me); 19 | if (_selectOnMousePress) 20 | { 21 | selectAll(); 22 | _selectOnMousePress = false; 23 | } 24 | qDebug() << selectedText(); 25 | } 26 | -------------------------------------------------------------------------------- /launcher/ui/widgets/FocusLineEdit.h: -------------------------------------------------------------------------------- 1 | #include <QLineEdit> 2 | 3 | class FocusLineEdit : public QLineEdit 4 | { 5 | Q_OBJECT 6 | public: 7 | FocusLineEdit(QWidget *parent); 8 | virtual ~FocusLineEdit() 9 | { 10 | } 11 | 12 | protected: 13 | void focusInEvent(QFocusEvent *e); 14 | void mousePressEvent(QMouseEvent *me); 15 | 16 | bool _selectOnMousePress; 17 | }; 18 | -------------------------------------------------------------------------------- /launcher/ui/widgets/LineSeparator.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include <QWidget> 3 | 4 | class QStyleOption; 5 | 6 | class LineSeparator : public QWidget 7 | { 8 | Q_OBJECT 9 | 10 | public: 11 | /// Create a line separator. orientation is the orientation of the line. 12 | explicit LineSeparator(QWidget *parent, Qt::Orientation orientation = Qt::Horizontal); 13 | QSize sizeHint() const; 14 | void paintEvent(QPaintEvent *); 15 | void initStyleOption(QStyleOption *option) const; 16 | private: 17 | Qt::Orientation m_orientation = Qt::Horizontal; 18 | }; 19 | -------------------------------------------------------------------------------- /launcher/ui/widgets/ModListView.h: -------------------------------------------------------------------------------- 1 | /* Copyright 2013-2021 MultiMC Contributors 2 | * 3 | * Licensed under the Apache License, Version 2.0 (the "License"); 4 | * you may not use this file except in compliance with the License. 5 | * You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software 10 | * distributed under the License is distributed on an "AS IS" BASIS, 11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | * See the License for the specific language governing permissions and 13 | * limitations under the License. 14 | */ 15 | 16 | #pragma once 17 | #include <QTreeView> 18 | 19 | class ModListView: public QTreeView 20 | { 21 | Q_OBJECT 22 | public: 23 | explicit ModListView ( QWidget* parent = 0 ); 24 | virtual void setModel ( QAbstractItemModel* model ); 25 | }; 26 | -------------------------------------------------------------------------------- /launcher/ui/widgets/ProgressWidget.h: -------------------------------------------------------------------------------- 1 | // Licensed under the Apache-2.0 license. See README.md for details. 2 | 3 | #pragma once 4 | 5 | #include <QWidget> 6 | #include <memory> 7 | 8 | class Task; 9 | class QProgressBar; 10 | class QLabel; 11 | 12 | class ProgressWidget : public QWidget 13 | { 14 | Q_OBJECT 15 | public: 16 | explicit ProgressWidget(QWidget *parent = nullptr); 17 | 18 | public slots: 19 | void start(std::shared_ptr<Task> task); 20 | bool exec(std::shared_ptr<Task> task); 21 | 22 | private slots: 23 | void handleTaskFinish(); 24 | void handleTaskStatus(const QString &status); 25 | void handleTaskProgress(qint64 current, qint64 total); 26 | void taskDestroyed(); 27 | 28 | private: 29 | QLabel *m_label; 30 | QProgressBar *m_bar; 31 | std::shared_ptr<Task> m_task; 32 | }; 33 | -------------------------------------------------------------------------------- /launcher/ui/widgets/WideBar.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include <QToolBar> 4 | #include <QAction> 5 | #include <QMap> 6 | 7 | class QMenu; 8 | 9 | class WideBar : public QToolBar 10 | { 11 | Q_OBJECT 12 | 13 | public: 14 | explicit WideBar(const QString &title, QWidget * parent = nullptr); 15 | explicit WideBar(QWidget * parent = nullptr); 16 | virtual ~WideBar(); 17 | 18 | void addAction(QAction *action); 19 | void addSeparator(); 20 | void insertSpacer(QAction *action); 21 | QMenu *createContextMenu(QWidget *parent = nullptr, const QString & title = QString()); 22 | 23 | private: 24 | struct BarEntry; 25 | QList<BarEntry *> m_entries; 26 | }; 27 | -------------------------------------------------------------------------------- /launcher/updater/testdata/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "ApiVersion": 0, 3 | "Id": 1, 4 | "Name": "1.0.1", 5 | "Files": [ 6 | { 7 | "Path": "fileOne", 8 | "Sources": [ 9 | { 10 | "SourceType": "http", 11 | "Url": "@TEST_DATA_URL@/fileOneB" 12 | } 13 | ], 14 | "Executable": true, 15 | "Perms": 493, 16 | "MD5": "42915a71277c9016668cce7b82c6b577" 17 | }, 18 | { 19 | "Path": "fileTwo", 20 | "Sources": [ 21 | { 22 | "SourceType": "http", 23 | "Url": "@TEST_DATA_URL@/fileTwo" 24 | } 25 | ], 26 | "Executable": false, 27 | "Perms": 644, 28 | "MD5": "38f94f54fa3eb72b0ea836538c10b043" 29 | } 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /launcher/updater/testdata/channels.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": 0, 3 | "channels": [ 4 | { 5 | "id": "develop", 6 | "name": "Develop", 7 | "description": "The channel called \"develop\"", 8 | "url": "@TEST_DATA_URL@" 9 | }, 10 | { 11 | "id": "stable", 12 | "name": "Stable", 13 | "description": "It's stable at least", 14 | "url": "@TEST_DATA_URL@" 15 | }, 16 | { 17 | "id": "42", 18 | "name": "The Channel", 19 | "description": "This is the channel that is going to answer all of your questions", 20 | "url": "https://dent.me/tea" 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /launcher/updater/testdata/errorChannels.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": 0, 3 | "channels": [ 4 | { 5 | "id": "", 6 | "name": "Develop", 7 | "description": "The channel called \"develop\"", 8 | "url": "http://example.org/stuff" 9 | }, 10 | { 11 | "id": "stable", 12 | "name": "", 13 | "description": "It's stable at least", 14 | "url": "ftp://username@host/path/to/stuff" 15 | }, 16 | { 17 | "id": "42", 18 | "name": "The Channel", 19 | "description": "This is the channel that is going to answer all of your questions", 20 | "url": "" 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /launcher/updater/testdata/fileOneA: -------------------------------------------------------------------------------- 1 | stuff 2 | -------------------------------------------------------------------------------- /launcher/updater/testdata/fileOneB: -------------------------------------------------------------------------------- 1 | stuff 2 | 3 | more stuff that came in the new version 4 | -------------------------------------------------------------------------------- /launcher/updater/testdata/fileThree: -------------------------------------------------------------------------------- 1 | this is yet another file 2 | -------------------------------------------------------------------------------- /launcher/updater/testdata/fileTwo: -------------------------------------------------------------------------------- 1 | some other stuff 2 | -------------------------------------------------------------------------------- /launcher/updater/testdata/garbageChannels.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": 0, 3 | "channels": [ 4 | { 5 | "id": "develop", 6 | "name": "Develop", 7 | "description": "The channel called \"develop\"", 8 | aa "url": "http://example.org/stuff" 9 | }, 10 | a "id": "stable", 11 | "name": "Stable", 12 | "description": "It's stable at least", 13 | "url": "ftp://username@host/path/to/stuff" 14 | }, 15 | { 16 | "id": "42"f 17 | "name": "The Channel", 18 | "description": "This is the channel that is going to answer all of your questions", 19 | "url": "https://dent.me/tea" 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /launcher/updater/testdata/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "ApiVersion": 0, 3 | "Versions": [ 4 | { "Id": 0, "Name": "1.0.0" }, 5 | { "Id": 1, "Name": "1.0.1" }, 6 | { "Id": 2, "Name": "1.0.2" }, 7 | { "Id": 3, "Name": "1.0.3" } 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /launcher/updater/testdata/noChannels.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": 0, 3 | "channels": [ 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /launcher/updater/testdata/oneChannel.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": 0, 3 | "channels": [ 4 | { 5 | "id": "develop", 6 | "name": "Develop", 7 | "description": "The channel called \"develop\"", 8 | "url": "http://example.org/stuff" 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /launcher/updater/testdata/tst_DownloadTask-test_writeInstallScript.xml: -------------------------------------------------------------------------------- 1 | <update version="3"> 2 | <install> 3 | <file> 4 | <source>sourceOne</source> 5 | <dest>destOne</dest> 6 | <mode>0777</mode> 7 | </file> 8 | <file> 9 | <source>MultiMC.exe</source> 10 | <dest>M/u/l/t/i/M/C/e/x/e</dest> 11 | <mode>0644</mode> 12 | </file> 13 | </install> 14 | <uninstall> 15 | <file>toDelete.abc</file> 16 | </uninstall> 17 | </update> 18 | -------------------------------------------------------------------------------- /libraries/LocalPeer/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.1) 2 | project(LocalPeer) 3 | 4 | find_package(Qt5 COMPONENTS Core Network REQUIRED) 5 | 6 | set(SINGLE_SOURCES 7 | src/LocalPeer.cpp 8 | src/LockedFile.cpp 9 | src/LockedFile.h 10 | include/LocalPeer.h 11 | ) 12 | 13 | if(UNIX) 14 | list(APPEND SINGLE_SOURCES 15 | src/LockedFile_unix.cpp 16 | ) 17 | endif() 18 | 19 | if(WIN32) 20 | list(APPEND SINGLE_SOURCES 21 | src/LockedFile_win.cpp 22 | ) 23 | endif() 24 | 25 | add_library(LocalPeer STATIC ${SINGLE_SOURCES}) 26 | target_include_directories(LocalPeer PUBLIC include) 27 | 28 | target_link_libraries(LocalPeer Qt5::Core Qt5::Network) 29 | -------------------------------------------------------------------------------- /libraries/classparser/include/classparser_config.h: -------------------------------------------------------------------------------- 1 | /* Copyright 2013-2021 MultiMC Contributors 2 | * 3 | * Licensed under the Apache License, Version 2.0 (the "License"); 4 | * you may not use this file except in compliance with the License. 5 | * You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software 10 | * distributed under the License is distributed on an "AS IS" BASIS, 11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | * See the License for the specific language governing permissions and 13 | * limitations under the License. 14 | */ 15 | 16 | #include <QtCore/QtGlobal> 17 | 18 | #ifdef CLASSPARSER_LIBRARY 19 | #define CLASSPARSER_EXPORT Q_DECL_EXPORT 20 | #else 21 | #define CLASSPARSER_EXPORT Q_DECL_IMPORT 22 | #endif 23 | -------------------------------------------------------------------------------- /libraries/classparser/src/errors.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include <exception> 3 | namespace java 4 | { 5 | class classfile_exception : public std::exception 6 | { 7 | }; 8 | } 9 | -------------------------------------------------------------------------------- /libraries/hoedown/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # hoedown 3.0.2 - https://github.com/hoedown/hoedown/archive/3.0.2.tar.gz 2 | project(hoedown LANGUAGES C VERSION 3.0.2) 3 | 4 | set(HOEDOWN_SOURCES 5 | include/hoedown/autolink.h 6 | include/hoedown/buffer.h 7 | include/hoedown/document.h 8 | include/hoedown/escape.h 9 | include/hoedown/html.h 10 | include/hoedown/stack.h 11 | include/hoedown/version.h 12 | src/autolink.c 13 | src/buffer.c 14 | src/document.c 15 | src/escape.c 16 | src/html.c 17 | src/html_blocks.c 18 | src/html_smartypants.c 19 | src/stack.c 20 | src/version.c 21 | ) 22 | 23 | # Include self. 24 | add_library(hoedown STATIC ${HOEDOWN_SOURCES}) 25 | 26 | target_include_directories(hoedown PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) 27 | -------------------------------------------------------------------------------- /libraries/hoedown/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2008, Natacha Porté 2 | Copyright (c) 2011, Vicent Martí 3 | Copyright (c) 2014, Xavier Mendez, Devin Torres and the Hoedown authors 4 | 5 | Permission to use, copy, modify, and distribute this software for any 6 | purpose with or without fee is hereby granted, provided that the above 7 | copyright notice and this permission notice appear in all copies. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 | -------------------------------------------------------------------------------- /libraries/hoedown/README.md: -------------------------------------------------------------------------------- 1 | Hoedown 2 | ======= 3 | 4 | This is Hoedown 3.0.2, taken from [the hoedown github repo](https://github.com/hoedown/hoedown). 5 | 6 | `Hoedown` is a revived fork of [Sundown](https://github.com/vmg/sundown), 7 | the Markdown parser based on the original code of the 8 | [Upskirt library](http://fossil.instinctive.eu/libupskirt/index) 9 | by Natacha Porté. 10 | -------------------------------------------------------------------------------- /libraries/hoedown/include/hoedown/escape.h: -------------------------------------------------------------------------------- 1 | /* escape.h - escape utilities */ 2 | 3 | #ifndef HOEDOWN_ESCAPE_H 4 | #define HOEDOWN_ESCAPE_H 5 | 6 | #include "buffer.h" 7 | 8 | #ifdef __cplusplus 9 | extern "C" { 10 | #endif 11 | 12 | 13 | /************* 14 | * FUNCTIONS * 15 | *************/ 16 | 17 | /* hoedown_escape_href: escape (part of) a URL inside HTML */ 18 | void hoedown_escape_href(hoedown_buffer *ob, const uint8_t *data, size_t size); 19 | 20 | /* hoedown_escape_html: escape HTML */ 21 | void hoedown_escape_html(hoedown_buffer *ob, const uint8_t *data, size_t size, int secure); 22 | 23 | 24 | #ifdef __cplusplus 25 | } 26 | #endif 27 | 28 | #endif /** HOEDOWN_ESCAPE_H **/ 29 | -------------------------------------------------------------------------------- /libraries/hoedown/include/hoedown/version.h: -------------------------------------------------------------------------------- 1 | /* version.h - holds Hoedown's version */ 2 | 3 | #ifndef HOEDOWN_VERSION_H 4 | #define HOEDOWN_VERSION_H 5 | 6 | #ifdef __cplusplus 7 | extern "C" { 8 | #endif 9 | 10 | 11 | /************* 12 | * CONSTANTS * 13 | *************/ 14 | 15 | #define HOEDOWN_VERSION "3.0.2" 16 | #define HOEDOWN_VERSION_MAJOR 3 17 | #define HOEDOWN_VERSION_MINOR 0 18 | #define HOEDOWN_VERSION_REVISION 2 19 | 20 | 21 | /************* 22 | * FUNCTIONS * 23 | *************/ 24 | 25 | /* hoedown_version: retrieve Hoedown's version numbers */ 26 | void hoedown_version(int *major, int *minor, int *revision); 27 | 28 | 29 | #ifdef __cplusplus 30 | } 31 | #endif 32 | 33 | #endif /** HOEDOWN_VERSION_H **/ 34 | -------------------------------------------------------------------------------- /libraries/hoedown/src/version.c: -------------------------------------------------------------------------------- 1 | #include "hoedown/version.h" 2 | 3 | void 4 | hoedown_version(int *major, int *minor, int *revision) 5 | { 6 | *major = HOEDOWN_VERSION_MAJOR; 7 | *minor = HOEDOWN_VERSION_MINOR; 8 | *revision = HOEDOWN_VERSION_REVISION; 9 | } 10 | -------------------------------------------------------------------------------- /libraries/iconfix/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.1) 2 | project(iconfix) 3 | 4 | find_package(Qt5Core REQUIRED QUIET) 5 | find_package(Qt5Widgets REQUIRED QUIET) 6 | 7 | set(ICONFIX_SOURCES 8 | xdgicon.h 9 | xdgicon.cpp 10 | internal/qhexstring_p.h 11 | internal/qiconloader.cpp 12 | internal/qiconloader_p.h 13 | ) 14 | 15 | add_library(Launcher_iconfix SHARED ${ICONFIX_SOURCES}) 16 | target_include_directories(Launcher_iconfix PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_CURRENT_BINARY_DIR}" ) 17 | 18 | target_link_libraries(Launcher_iconfix Qt5::Core Qt5::Widgets) 19 | 20 | set_target_properties(Launcher_iconfix PROPERTIES CXX_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN 1) 21 | generate_export_header(Launcher_iconfix) 22 | 23 | # Install it 24 | install( 25 | TARGETS Launcher_iconfix 26 | RUNTIME DESTINATION ${LIBRARY_DEST_DIR} 27 | LIBRARY DESTINATION ${LIBRARY_DEST_DIR} 28 | ) -------------------------------------------------------------------------------- /libraries/javacheck/.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | *.iml 3 | out 4 | .classpath 5 | .idea 6 | .project 7 | -------------------------------------------------------------------------------- /libraries/javacheck/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.1) 2 | project(launcher Java) 3 | find_package(Java 1.7 REQUIRED COMPONENTS Development) 4 | 5 | include(UseJava) 6 | set(CMAKE_JAVA_JAR_ENTRY_POINT JavaCheck) 7 | set(CMAKE_JAVA_COMPILE_FLAGS -target 7 -source 7 -Xlint:deprecation -Xlint:unchecked) 8 | 9 | set(SRC 10 | JavaCheck.java 11 | ) 12 | 13 | add_jar(JavaCheck ${SRC}) 14 | install_jar(JavaCheck "${JARS_DEST_DIR}") 15 | -------------------------------------------------------------------------------- /libraries/javacheck/JavaCheck.java: -------------------------------------------------------------------------------- 1 | import java.lang.Integer; 2 | 3 | public class JavaCheck 4 | { 5 | private static final String[] keys = {"os.arch", "java.version", "java.vendor"}; 6 | public static void main (String [] args) 7 | { 8 | int ret = 0; 9 | for(String key : keys) 10 | { 11 | String property = System.getProperty(key); 12 | if(property != null) 13 | { 14 | System.out.println(key + "=" + property); 15 | } 16 | else 17 | { 18 | ret = 1; 19 | } 20 | } 21 | 22 | System.exit(ret); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /libraries/katabasis/.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | *.kdev4 3 | -------------------------------------------------------------------------------- /libraries/katabasis/include/katabasis/Bits.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include <QString> 4 | #include <QDateTime> 5 | #include <QMap> 6 | #include <QVariantMap> 7 | 8 | namespace Katabasis { 9 | enum class Activity { 10 | Idle, 11 | LoggingIn, 12 | LoggingOut, 13 | Refreshing, 14 | FailedSoft, //!< soft failure. this generally means the user auth details haven't been invalidated 15 | FailedHard, //!< hard failure. auth is invalid 16 | FailedGone, //!< hard failure. auth is invalid, and the account no longer exists 17 | Succeeded 18 | }; 19 | 20 | enum class Validity { 21 | None, 22 | Assumed, 23 | Certain 24 | }; 25 | 26 | struct Token { 27 | QDateTime issueInstant; 28 | QDateTime notAfter; 29 | QString token; 30 | QString refresh_token; 31 | QVariantMap extra; 32 | 33 | Validity validity = Validity::None; 34 | bool persistent = true; 35 | }; 36 | 37 | } 38 | -------------------------------------------------------------------------------- /libraries/katabasis/include/katabasis/RequestParameter.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace Katabasis { 4 | 5 | /// Request parameter (name-value pair) participating in authentication. 6 | struct RequestParameter { 7 | RequestParameter(const QByteArray &n, const QByteArray &v): name(n), value(v) {} 8 | bool operator <(const RequestParameter &other) const { 9 | return (name == other.name)? (value < other.value): (name < other.name); 10 | } 11 | QByteArray name; 12 | QByteArray value; 13 | }; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /libraries/katabasis/src/JsonResponse.cpp: -------------------------------------------------------------------------------- 1 | #include "JsonResponse.h" 2 | 3 | #include <QByteArray> 4 | #include <QDebug> 5 | #include <QJsonDocument> 6 | #include <QJsonObject> 7 | 8 | namespace Katabasis { 9 | 10 | QVariantMap parseJsonResponse(const QByteArray &data) { 11 | QJsonParseError err; 12 | QJsonDocument doc = QJsonDocument::fromJson(data, &err); 13 | if (err.error != QJsonParseError::NoError) { 14 | qWarning() << "parseTokenResponse: Failed to parse token response due to err:" << err.errorString(); 15 | return QVariantMap(); 16 | } 17 | 18 | if (!doc.isObject()) { 19 | qWarning() << "parseTokenResponse: Token response is not an object"; 20 | return QVariantMap(); 21 | } 22 | 23 | return doc.object().toVariantMap(); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /libraries/katabasis/src/JsonResponse.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include <QVariantMap> 4 | 5 | class QByteArray; 6 | 7 | namespace Katabasis { 8 | 9 | /// Parse JSON data into a QVariantMap 10 | QVariantMap parseJsonResponse(const QByteArray &data); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /libraries/launcher/.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | *.iml 3 | out 4 | .classpath 5 | .idea 6 | .project 7 | -------------------------------------------------------------------------------- /libraries/launcher/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.1) 2 | project(launcher Java) 3 | find_package(Java 1.7 REQUIRED COMPONENTS Development) 4 | 5 | include(UseJava) 6 | set(CMAKE_JAVA_JAR_ENTRY_POINT org.multimc.EntryPoint) 7 | set(CMAKE_JAVA_COMPILE_FLAGS -target 7 -source 7 -Xlint:deprecation -Xlint:unchecked) 8 | 9 | set(SRC 10 | org/multimc/EntryPoint.java 11 | org/multimc/Launcher.java 12 | org/multimc/LegacyFrame.java 13 | org/multimc/NotFoundException.java 14 | org/multimc/ParamBucket.java 15 | org/multimc/ParseException.java 16 | org/multimc/Utils.java 17 | org/multimc/onesix/OneSixLauncher.java 18 | net/minecraft/Launcher.java 19 | ) 20 | add_jar(NewLaunch ${SRC}) 21 | install_jar(NewLaunch "${JARS_DEST_DIR}") 22 | -------------------------------------------------------------------------------- /libraries/launcher/org/multimc/Launcher.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2012-2021 MultiMC Contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.multimc; 18 | 19 | public interface Launcher 20 | { 21 | abstract int launch(ParamBucket params); 22 | } 23 | -------------------------------------------------------------------------------- /libraries/launcher/org/multimc/NotFoundException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2012-2021 MultiMC Contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.multimc; 18 | 19 | public class NotFoundException extends Exception 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /libraries/launcher/org/multimc/ParseException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2012-2021 MultiMC Contributors 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.multimc; 18 | 19 | public class ParseException extends java.lang.Exception 20 | { 21 | public ParseException() { super(); } 22 | public ParseException(String message) { 23 | super(message); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /libraries/optional-bare/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.1) 2 | project(optional-bare) 3 | 4 | add_library(optional-bare INTERFACE) 5 | target_include_directories(optional-bare INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/include") 6 | -------------------------------------------------------------------------------- /libraries/optional-bare/README.md: -------------------------------------------------------------------------------- 1 | # optional bare 2 | 3 | A simple single-file header-only version of a C++17-like optional for default-constructible, copyable types, for C++98 and later. 4 | 5 | Imported from: https://github.com/martinmoene/optional-bare/commit/0bb1d183bcee1e854c4ea196b533252c51f98b81 6 | -------------------------------------------------------------------------------- /libraries/rainbow/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.1) 2 | project(rainbow) 3 | 4 | find_package(Qt5Core REQUIRED QUIET) 5 | find_package(Qt5Gui REQUIRED QUIET) 6 | 7 | set(RAINBOW_SOURCES 8 | src/rainbow.cpp 9 | ) 10 | 11 | add_definitions(-DRAINBOW_LIBRARY) 12 | add_library(Launcher_rainbow SHARED ${RAINBOW_SOURCES}) 13 | target_include_directories(Launcher_rainbow PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include") 14 | 15 | target_link_libraries(Launcher_rainbow Qt5::Core Qt5::Gui) 16 | 17 | # Install it 18 | install( 19 | TARGETS Launcher_rainbow 20 | RUNTIME DESTINATION ${LIBRARY_DEST_DIR} 21 | LIBRARY DESTINATION ${LIBRARY_DEST_DIR} 22 | ) 23 | -------------------------------------------------------------------------------- /libraries/rainbow/COPYING.LIB: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/libraries/rainbow/COPYING.LIB -------------------------------------------------------------------------------- /libraries/systeminfo/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(systeminfo) 2 | 3 | find_package(Qt5Core) 4 | 5 | set(systeminfo_SOURCES 6 | include/sys.h 7 | include/distroutils.h 8 | src/distroutils.cpp 9 | ) 10 | 11 | set(systeminfo_INCLUDE_DIRS 12 | ${CMAKE_CURRENT_LIST_DIR}/include) 13 | 14 | if (WIN32) 15 | list(APPEND systeminfo_SOURCES src/sys_win32.cpp src/ntstatus/NtStatusNames.cpp) 16 | elseif (UNIX) 17 | if(APPLE) 18 | list(APPEND systeminfo_SOURCES src/sys_apple.cpp) 19 | else() 20 | list(APPEND systeminfo_SOURCES src/sys_unix.cpp) 21 | endif() 22 | endif() 23 | 24 | add_library(systeminfo STATIC ${systeminfo_SOURCES}) 25 | target_link_libraries(systeminfo Qt5::Core Qt5::Gui Qt5::Network) 26 | target_include_directories(systeminfo PUBLIC ${systeminfo_INCLUDE_DIRS}) 27 | 28 | include (UnitTest) 29 | add_unit_test(sys 30 | SOURCES src/sys_test.cpp 31 | LIBS systeminfo 32 | ) 33 | -------------------------------------------------------------------------------- /libraries/systeminfo/include/distroutils.h: -------------------------------------------------------------------------------- 1 | #include "sys.h" 2 | #include <QString> 3 | 4 | namespace Sys { 5 | struct LsbInfo 6 | { 7 | QString distributor; 8 | QString version; 9 | QString description; 10 | QString codename; 11 | }; 12 | 13 | bool main_lsb_info(LsbInfo & out); 14 | bool fallback_lsb_info(Sys::LsbInfo & out); 15 | void lsb_postprocess(Sys::LsbInfo & lsb, Sys::DistributionInfo & out); 16 | Sys::DistributionInfo read_lsb_release(); 17 | 18 | QString _extract_distribution(const QString & x); 19 | QString _extract_version(const QString & x); 20 | Sys::DistributionInfo read_legacy_release(); 21 | 22 | Sys::DistributionInfo read_os_release(); 23 | } 24 | -------------------------------------------------------------------------------- /libraries/systeminfo/include/ntstatus/NtStatusNames.hpp: -------------------------------------------------------------------------------- 1 | // AUTO GENERATED FILE, DO NOT EDIT! 2 | // This file has been generated by nt-status-gen from https://github.com/Janrupf/nt-status-gen 3 | // 4 | // Used compiler: MSVC version 19.28.29337.0 5 | // Targeted OS: Windows version 10.0.19044 6 | 7 | #pragma once 8 | 9 | #include <cstdint> 10 | #include <string> 11 | 12 | namespace NtStatus { 13 | bool lookupNtStatusCodeName(uint64_t code, std::string &nameOut); 14 | } 15 | -------------------------------------------------------------------------------- /libraries/systeminfo/include/ntstatus/README.md: -------------------------------------------------------------------------------- 1 | Source files in this directory have been generated using 2 | https://github.com/Janrupf/nt-status-gen 3 | -------------------------------------------------------------------------------- /libraries/systeminfo/src/ntstatus/README.md: -------------------------------------------------------------------------------- 1 | Source files in this directory have been generated using 2 | https://github.com/Janrupf/nt-status-gen 3 | -------------------------------------------------------------------------------- /libraries/systeminfo/src/sys_test.cpp: -------------------------------------------------------------------------------- 1 | #include <QTest> 2 | #include "TestUtil.h" 3 | 4 | #include <sys.h> 5 | 6 | class SysTest : public QObject 7 | { 8 | Q_OBJECT 9 | private 10 | slots: 11 | 12 | void test_kernelNotNull() 13 | { 14 | auto kinfo = Sys::getKernelInfo(); 15 | QVERIFY(!kinfo.kernelName.isEmpty()); 16 | QVERIFY(kinfo.kernelVersion != "0.0"); 17 | } 18 | /* 19 | void test_systemDistroNotNull() 20 | { 21 | auto kinfo = Sys::getDistributionInfo(); 22 | QVERIFY(!kinfo.distributionName.isEmpty()); 23 | QVERIFY(!kinfo.distributionVersion.isEmpty()); 24 | qDebug() << "Distro: " << kinfo.distributionName << "version" << kinfo.distributionVersion; 25 | } 26 | */ 27 | }; 28 | 29 | QTEST_GUILESS_MAIN(SysTest) 30 | 31 | #include "sys_test.moc" 32 | -------------------------------------------------------------------------------- /libraries/tomlc99/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(tomlc99) 2 | 3 | set(tomlc99_SOURCES 4 | include/toml.h 5 | src/toml.c 6 | ) 7 | 8 | add_library(tomlc99 STATIC ${tomlc99_SOURCES}) 9 | 10 | target_include_directories(tomlc99 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) 11 | --------------------------------------------------------------------------------