├── .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/2eb4cc9694f891ebc4139b9164cc733a856f0818/branding/MultiMC.icns -------------------------------------------------------------------------------- /branding/MultiMC.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/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 | 2 | 3 | 4 | logo.svg 5 | 6 | 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 4 | #include 5 | #include 6 | #include 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 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 4 | #include 5 | #include 6 | 7 | struct ApplicationMessage { 8 | QString command; 9 | QMap args; 10 | 11 | QByteArray serialize(); 12 | void parse(const QByteArray & input); 13 | }; 14 | -------------------------------------------------------------------------------- /launcher/DefaultVariable.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | template 4 | class DefaultVariable 5 | { 6 | public: 7 | DefaultVariable(const T & value) 8 | { 9 | defaultValue = value; 10 | } 11 | DefaultVariable & 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 6 | #include 7 | #include 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 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 6 | #include 7 | #include 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 m_copyFuture; 28 | QFutureWatcher m_copyFutureWatcher; 29 | std::unique_ptr 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 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 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 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 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 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 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 5 | #include 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 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 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 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 d; 37 | }; 38 | -------------------------------------------------------------------------------- /launcher/minecraft/ComponentUpdateTask_p.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 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 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 3 | #include 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 3 | #include 4 | #include 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; 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 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); 21 | 22 | private: 23 | QString m_entitlementsRequestId; 24 | }; 25 | -------------------------------------------------------------------------------- /launcher/minecraft/auth/steps/GetSkinStep.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 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); 21 | }; 22 | -------------------------------------------------------------------------------- /launcher/minecraft/auth/steps/LauncherLoginStep.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 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); 21 | }; 22 | -------------------------------------------------------------------------------- /launcher/minecraft/auth/steps/MSAStep.h: -------------------------------------------------------------------------------- 1 | 2 | #pragma once 3 | #include 4 | 5 | #include "QObjectPtr.h" 6 | #include "minecraft/auth/AuthStep.h" 7 | 8 | #include 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 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); 30 | 31 | private: 32 | QString m_profileName; 33 | }; 34 | 35 | -------------------------------------------------------------------------------- /launcher/minecraft/auth/steps/MinecraftProfileStep.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 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); 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 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); 30 | 31 | private: 32 | QString m_capeId; 33 | }; 34 | -------------------------------------------------------------------------------- /launcher/minecraft/auth/steps/XboxProfileStep.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 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); 21 | }; 22 | -------------------------------------------------------------------------------- /launcher/minecraft/auth/steps/XboxUserStep.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 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); 21 | }; 22 | -------------------------------------------------------------------------------- /launcher/minecraft/legacy/LegacyUpgradeTask.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "InstanceTask.h" 4 | #include "net/NetJob.h" 5 | #include 6 | #include 7 | #include 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 m_copyFuture; 28 | QFutureWatcher m_copyFutureWatcher; 29 | }; 30 | -------------------------------------------------------------------------------- /launcher/minecraft/mod/LocalModParseTask.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 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 details; 15 | }; 16 | using ResultPtr = std::shared_ptr; 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 4 | #include 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 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 3 | #include 4 | #include 5 | #include 6 | #include "Mod.h" 7 | #include 8 | 9 | class ModFolderLoadTask : public QObject, public QRunnable 10 | { 11 | Q_OBJECT 12 | public: 13 | struct Result { 14 | QMap mods; 15 | }; 16 | using ResultPtr = std::shared_ptr; 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 fmlLibsToProcess; 30 | }; 31 | 32 | -------------------------------------------------------------------------------- /launcher/minecraft/update/FoldersTask.cpp: -------------------------------------------------------------------------------- 1 | #include "FoldersTask.h" 2 | #include "minecraft/MinecraftInstance.h" 3 | #include 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 4 | #include 5 | #include 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 &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 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/2eb4cc9694f891ebc4139b9164cc733a856f0818/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/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/mojang/testdata/inspect_win/a/b.txt -------------------------------------------------------------------------------- /launcher/mojang/testdata/inspect_win/a/b/b.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/mojang/testdata/inspect_win/a/b/b.txt -------------------------------------------------------------------------------- /launcher/net/FileSink.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "Sink.h" 3 | #include 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 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 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 5 | #include 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 3 | #include 4 | 5 | class IPathMatcher 6 | { 7 | public: 8 | typedef std::shared_ptr 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 3 | #include 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 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/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/assets/underconstruction.png -------------------------------------------------------------------------------- /launcher/resources/backgrounds/backgrounds.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | catbgrnd2.png 5 | catmas.png 6 | cattiversary.png 7 | 8 | 9 | -------------------------------------------------------------------------------- /launcher/resources/backgrounds/catbgrnd2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/backgrounds/catbgrnd2.png -------------------------------------------------------------------------------- /launcher/resources/backgrounds/catmas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/backgrounds/catmas.png -------------------------------------------------------------------------------- /launcher/resources/backgrounds/cattiversary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/backgrounds/cattiversary.png -------------------------------------------------------------------------------- /launcher/resources/documents/documents.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ../../../COPYING.md 5 | 6 | 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 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/accounts.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/bug.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/cat.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/centralmods.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/checkupdate.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/copy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/coremods.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/discord.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/externaltools.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/help.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 17 | 18 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/jarmods.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/java.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/launcher.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/loadermods.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/log.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/minecraft.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/multimc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/new.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/news.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/notes.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/packages.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/patreon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/proxy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/quickmods.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/reddit-alien.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/refresh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/resourcepacks.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/screenshot-placeholder.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/screenshots.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/star.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/status-bad.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/status-good.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/status-running.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/status-yellow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/viewfolder.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /launcher/resources/flat/scalable/worlds.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /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 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /launcher/resources/iOS/scalable/copy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /launcher/resources/iOS/scalable/externaltools.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /launcher/resources/iOS/scalable/log.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /launcher/resources/iOS/scalable/minecraft.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 8 | 9 | -------------------------------------------------------------------------------- /launcher/resources/iOS/scalable/new.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /launcher/resources/iOS/scalable/patreon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /launcher/resources/iOS/scalable/refresh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /launcher/resources/iOS/scalable/viewfolder.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/chicken.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/128x128/instances/chicken.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/creeper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/128x128/instances/creeper.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/enderpearl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/128x128/instances/enderpearl.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/flame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/128x128/instances/flame.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/ftb_glow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/128x128/instances/ftb_glow.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/ftb_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/128x128/instances/ftb_logo.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/gear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/128x128/instances/gear.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/herobrine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/128x128/instances/herobrine.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/infinity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/128x128/instances/infinity.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/magitech.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/128x128/instances/magitech.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/meat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/128x128/instances/meat.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/netherstar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/128x128/instances/netherstar.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/skeleton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/128x128/instances/skeleton.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/squarecreeper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/128x128/instances/squarecreeper.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/instances/steve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/128x128/instances/steve.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/shaderpacks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/128x128/shaderpacks.png -------------------------------------------------------------------------------- /launcher/resources/multimc/128x128/unknown_server.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/128x128/unknown_server.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/about.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/bug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/bug.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/cat.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/centralmods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/centralmods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/checkupdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/checkupdate.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/copy.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/coremods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/coremods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/help.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/instance-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/instance-settings.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/jarmods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/jarmods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/loadermods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/loadermods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/log.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/minecraft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/minecraft.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/new.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/news.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/noaccount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/noaccount.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/patreon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/patreon.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/refresh.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/resourcepacks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/resourcepacks.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/screenshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/screenshots.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/settings.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/star.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/status-bad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/status-bad.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/status-good.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/status-good.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/status-running.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/status-running.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/status-yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/status-yellow.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/viewfolder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/viewfolder.png -------------------------------------------------------------------------------- /launcher/resources/multimc/16x16/worlds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/16x16/worlds.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/22x22/about.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/bug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/22x22/bug.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/22x22/cat.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/centralmods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/22x22/centralmods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/checkupdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/22x22/checkupdate.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/22x22/copy.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/22x22/help.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/instance-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/22x22/instance-settings.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/22x22/new.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/22x22/news.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/patreon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/22x22/patreon.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/22x22/refresh.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/screenshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/22x22/screenshots.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/22x22/settings.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/status-bad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/22x22/status-bad.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/status-good.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/22x22/status-good.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/status-running.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/22x22/status-running.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/status-yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/22x22/status-yellow.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/viewfolder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/22x22/viewfolder.png -------------------------------------------------------------------------------- /launcher/resources/multimc/22x22/worlds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/22x22/worlds.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/24x24/cat.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/coremods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/24x24/coremods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/jarmods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/24x24/jarmods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/loadermods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/24x24/loadermods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/24x24/log.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/minecraft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/24x24/minecraft.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/noaccount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/24x24/noaccount.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/patreon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/24x24/patreon.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/resourcepacks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/24x24/resourcepacks.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/24x24/star.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/status-bad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/24x24/status-bad.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/status-good.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/24x24/status-good.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/status-running.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/24x24/status-running.png -------------------------------------------------------------------------------- /launcher/resources/multimc/24x24/status-yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/24x24/status-yellow.png -------------------------------------------------------------------------------- /launcher/resources/multimc/256x256/minecraft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/256x256/minecraft.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/about.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/bug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/bug.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/cat.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/centralmods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/centralmods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/checkupdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/checkupdate.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/copy.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/coremods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/coremods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/help.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instance-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instance-settings.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/brick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/brick.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/chicken.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/chicken.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/creeper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/creeper.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/diamond.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/diamond.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/dirt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/dirt.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/enderpearl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/enderpearl.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/flame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/flame.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/ftb_glow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/ftb_glow.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/ftb_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/ftb_logo.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/gear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/gear.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/gold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/gold.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/grass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/grass.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/herobrine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/herobrine.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/infinity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/infinity.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/iron.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/iron.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/magitech.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/magitech.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/meat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/meat.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/netherstar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/netherstar.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/planks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/planks.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/skeleton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/skeleton.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/squarecreeper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/squarecreeper.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/steve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/steve.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/stone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/stone.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/instances/tnt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/instances/tnt.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/jarmods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/jarmods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/loadermods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/loadermods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/log.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/minecraft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/minecraft.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/new.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/news.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/noaccount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/noaccount.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/patreon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/patreon.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/refresh.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/resourcepacks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/resourcepacks.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/screenshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/screenshots.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/settings.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/star.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/status-bad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/status-bad.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/status-good.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/status-good.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/status-running.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/status-running.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/status-yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/status-yellow.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/viewfolder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/viewfolder.png -------------------------------------------------------------------------------- /launcher/resources/multimc/32x32/worlds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/32x32/worlds.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/about.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/bug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/bug.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/cat.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/centralmods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/centralmods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/checkupdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/checkupdate.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/copy.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/help.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/instance-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/instance-settings.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/log.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/minecraft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/minecraft.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/new.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/news.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/noaccount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/noaccount.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/patreon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/patreon.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/refresh.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/screenshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/screenshots.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/settings.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/star.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/status-bad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/status-bad.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/status-good.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/status-good.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/status-running.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/status-running.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/status-yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/status-yellow.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/viewfolder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/viewfolder.png -------------------------------------------------------------------------------- /launcher/resources/multimc/48x48/worlds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/48x48/worlds.png -------------------------------------------------------------------------------- /launcher/resources/multimc/50x50/instances/enderman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/50x50/instances/enderman.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/about.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/bug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/bug.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/cat.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/centralmods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/centralmods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/checkupdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/checkupdate.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/copy.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/coremods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/coremods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/help.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/instance-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/instance-settings.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/jarmods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/jarmods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/loadermods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/loadermods.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/log.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/new.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/news.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/patreon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/patreon.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/refresh.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/resourcepacks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/resourcepacks.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/screenshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/screenshots.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/settings.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/star.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/status-bad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/status-bad.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/status-good.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/status-good.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/status-running.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/status-running.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/status-yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/status-yellow.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/viewfolder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/viewfolder.png -------------------------------------------------------------------------------- /launcher/resources/multimc/64x64/worlds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/multimc/64x64/worlds.png -------------------------------------------------------------------------------- /launcher/resources/multimc/8x8/noaccount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/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/2eb4cc9694f891ebc4139b9164cc733a856f0818/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 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /launcher/resources/pe_blue/scalable/status-bad.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 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 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /launcher/resources/pe_colored/scalable/status-bad.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 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 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 11 | 12 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /launcher/resources/pe_dark/scalable/news.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /launcher/resources/pe_dark/scalable/refresh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /launcher/resources/pe_dark/scalable/status-bad.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 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 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 11 | 12 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /launcher/resources/pe_light/scalable/news.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /launcher/resources/pe_light/scalable/status-bad.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 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/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/skins/textures/Alex_Classic.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Alex_Slim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/skins/textures/Alex_Slim.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Ari_Classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/skins/textures/Ari_Classic.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Ari_Slim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/skins/textures/Ari_Slim.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Efe_Classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/skins/textures/Efe_Classic.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Efe_Slim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/skins/textures/Efe_Slim.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Kai_Classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/skins/textures/Kai_Classic.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Kai_Slim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/skins/textures/Kai_Slim.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Makena_Classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/skins/textures/Makena_Classic.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Makena_Slim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/skins/textures/Makena_Slim.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Noor_Classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/skins/textures/Noor_Classic.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Noor_Slim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/skins/textures/Noor_Slim.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Steve_Classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/skins/textures/Steve_Classic.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Steve_Slim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/skins/textures/Steve_Slim.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Sunny_Classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/skins/textures/Sunny_Classic.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Sunny_Slim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/skins/textures/Sunny_Slim.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Zuri_Classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/skins/textures/Zuri_Classic.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/Zuri_Slim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/skins/textures/Zuri_Slim.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/no_cape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/skins/textures/no_cape.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/placeholder_cape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/skins/textures/placeholder_cape.png -------------------------------------------------------------------------------- /launcher/resources/skins/textures/placeholder_skin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/skins/textures/placeholder_skin.png -------------------------------------------------------------------------------- /launcher/resources/sources/burfcat_hat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/launcher/resources/sources/burfcat_hat.png -------------------------------------------------------------------------------- /launcher/resources/sources/cattiversary.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MultiMC/Launcher/2eb4cc9694f891ebc4139b9164cc733a856f0818/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; 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 4 | #include 5 | #include 6 | #include 7 | 8 | struct ScreenShot { 9 | using Ptr = std::shared_ptr; 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 10 | #include 11 | #include 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 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 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 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 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 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 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 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 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 4 | #include 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 3 | #include 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 3 | #include 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 4 | #include 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 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 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 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 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 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 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 6 | #include 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); 20 | bool exec(std::shared_ptr 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 m_task; 32 | }; 33 | -------------------------------------------------------------------------------- /launcher/ui/widgets/WideBar.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 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 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 | 2 | 3 | 4 | sourceOne 5 | destOne 6 | 0777 7 | 8 | 9 | MultiMC.exe 10 | M/u/l/t/i/M/C/e/x/e 11 | 0644 12 | 13 | 14 | 15 | toDelete.abc 16 | 17 | 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 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 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 4 | #include 5 | #include 6 | #include 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 4 | #include 5 | #include 6 | #include 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 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/2eb4cc9694f891ebc4139b9164cc733a856f0818/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 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 10 | #include 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 2 | #include "TestUtil.h" 3 | 4 | #include 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 | --------------------------------------------------------------------------------