diff options
author | Sefa Eyeoglu <contact@scrumplex.net> | 2023-01-11 13:50:57 +0100 |
---|---|---|
committer | Sefa Eyeoglu <contact@scrumplex.net> | 2023-01-11 13:50:57 +0100 |
commit | fff52cb24773c369bd02af2710611290a0a2380f (patch) | |
tree | 3195bd07d82ee7c4f7e714b5703650b134420f71 /launcher/minecraft | |
parent | 219c5b323db769ffa699b1a5c420189823108cb0 (diff) | |
download | PrismLauncher-fff52cb24773c369bd02af2710611290a0a2380f.tar.gz PrismLauncher-fff52cb24773c369bd02af2710611290a0a2380f.tar.bz2 PrismLauncher-fff52cb24773c369bd02af2710611290a0a2380f.zip |
feat: add button to import component JSONs
Signed-off-by: Sefa Eyeoglu <contact@scrumplex.net>
Diffstat (limited to 'launcher/minecraft')
-rw-r--r-- | launcher/minecraft/PackProfile.cpp | 32 | ||||
-rw-r--r-- | launcher/minecraft/PackProfile.h | 4 |
2 files changed, 36 insertions, 0 deletions
diff --git a/launcher/minecraft/PackProfile.cpp b/launcher/minecraft/PackProfile.cpp index 43fa3f8d..2028b236 100644 --- a/launcher/minecraft/PackProfile.cpp +++ b/launcher/minecraft/PackProfile.cpp @@ -49,6 +49,7 @@ #include "minecraft/OneSixVersionFormat.h" #include "FileSystem.h" #include "minecraft/MinecraftInstance.h" +#include "minecraft/ProfileUtils.h" #include "Json.h" #include "PackProfile.h" @@ -737,6 +738,11 @@ void PackProfile::installCustomJar(QString selectedFile) installCustomJar_internal(selectedFile); } +void PackProfile::installComponents(QStringList selectedFiles) +{ + installComponents_internal(selectedFiles); +} + void PackProfile::installAgents(QStringList selectedFiles) { installAgents_internal(selectedFiles); @@ -939,6 +945,32 @@ bool PackProfile::installCustomJar_internal(QString filepath) return true; } +bool PackProfile::installComponents_internal(QStringList filepaths) +{ + const QString patchDir = FS::PathCombine(d->m_instance->instanceRoot(), "patches"); + if (!FS::ensureFolderPathExists(patchDir)) + return false; + + for (const QString& source : filepaths) { + const QFileInfo sourceInfo(source); + + auto versionFile = ProfileUtils::parseJsonFile(sourceInfo, false); + const QString target = FS::PathCombine(patchDir, versionFile->uid + ".json"); + + if (!QFile::copy(source, target)) + { + return false; + } + + appendComponent(new Component(this, versionFile->uid, versionFile)); + } + + scheduleSave(); + invalidateLaunchProfile(); + + return true; +} + bool PackProfile::installAgents_internal(QStringList filepaths) { // FIXME code duplication diff --git a/launcher/minecraft/PackProfile.h b/launcher/minecraft/PackProfile.h index 2330cca1..35af9a56 100644 --- a/launcher/minecraft/PackProfile.h +++ b/launcher/minecraft/PackProfile.h @@ -86,6 +86,9 @@ public: /// install a jar/zip as a replacement for the main jar void installCustomJar(QString selectedFile); + /// install MMC/Prism component files + void installComponents(QStringList selectedFiles); + /// install Java agent files void installAgents(QStringList selectedFiles); @@ -171,6 +174,7 @@ private: bool load(); bool installJarMods_internal(QStringList filepaths); bool installCustomJar_internal(QString filepath); + bool installComponents_internal(QStringList filepaths); bool installAgents_internal(QStringList filepaths); bool removeComponent_internal(ComponentPtr patch); |