├── .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 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/accounts.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/bug.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/cat.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/centralmods.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/checkupdate.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/copy.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/coremods.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/discord.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/externaltools.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/help.svg:
--------------------------------------------------------------------------------
1 |
2 |
18 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/jarmods.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/java.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/launcher.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/loadermods.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/log.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/minecraft.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/multimc.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/new.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/news.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/notes.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/packages.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/patreon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/proxy.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/quickmods.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/reddit-alien.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/refresh.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/resourcepacks.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/screenshot-placeholder.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/screenshots.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/star.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/status-bad.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/status-good.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/status-running.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/status-yellow.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/viewfolder.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/worlds.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/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 |
17 |
--------------------------------------------------------------------------------
/launcher/resources/iOS/scalable/copy.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
14 |
--------------------------------------------------------------------------------
/launcher/resources/iOS/scalable/externaltools.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
14 |
--------------------------------------------------------------------------------
/launcher/resources/iOS/scalable/log.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
14 |
--------------------------------------------------------------------------------
/launcher/resources/iOS/scalable/minecraft.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
--------------------------------------------------------------------------------
/launcher/resources/iOS/scalable/new.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
14 |
--------------------------------------------------------------------------------
/launcher/resources/iOS/scalable/patreon.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
13 |
--------------------------------------------------------------------------------
/launcher/resources/iOS/scalable/refresh.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
14 |
--------------------------------------------------------------------------------
/launcher/resources/iOS/scalable/viewfolder.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
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 |
14 |
--------------------------------------------------------------------------------
/launcher/resources/pe_blue/scalable/status-bad.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
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 |
14 |
--------------------------------------------------------------------------------
/launcher/resources/pe_colored/scalable/status-bad.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
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 |
16 |
--------------------------------------------------------------------------------
/launcher/resources/pe_dark/scalable/news.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
14 |
--------------------------------------------------------------------------------
/launcher/resources/pe_dark/scalable/refresh.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
12 |
--------------------------------------------------------------------------------
/launcher/resources/pe_dark/scalable/status-bad.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
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 |
16 |
--------------------------------------------------------------------------------
/launcher/resources/pe_light/scalable/news.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
13 |
--------------------------------------------------------------------------------
/launcher/resources/pe_light/scalable/status-bad.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
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 |
--------------------------------------------------------------------------------