From 2980322c3b34b252ead838daee7a844853feccf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 12 Mar 2017 19:45:28 +0100 Subject: NOISSUE Remove Minecraft version list and versions. --- api/logic/minecraft/onesix/OneSixProfileStrategy.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'api/logic/minecraft/onesix/OneSixProfileStrategy.cpp') diff --git a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp index 07c9f075..2b023e82 100644 --- a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp +++ b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp @@ -3,7 +3,6 @@ #include "OneSixVersionFormat.h" #include "minecraft/VersionBuildError.h" -#include "minecraft/MinecraftVersionList.h" #include "Env.h" #include @@ -11,6 +10,8 @@ #include #include #include +#include +#include OneSixProfileStrategy::OneSixProfileStrategy(OneSixInstance* instance) { -- cgit v1.2.3 From f6eb8fa1e43a412edb49401107de30d497f0f593 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 12 Mar 2017 20:08:56 +0100 Subject: NOISSUE Remove hardcoded LWJGL (modern) --- api/logic/minecraft/onesix/OneSixProfileStrategy.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'api/logic/minecraft/onesix/OneSixProfileStrategy.cpp') diff --git a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp index 2b023e82..e3d3f674 100644 --- a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp +++ b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp @@ -121,12 +121,8 @@ void OneSixProfileStrategy::loadDefaultBuiltinPatches() } else { - // NOTE: this is obviously fake, is fixed in unstable. - QResource LWJGL(":/versions/LWJGL/2.9.1.json"); - auto lwjgl = ProfileUtils::parseJsonFile(LWJGL.absoluteFilePath(), false); - lwjgl->setVanilla(true); - lwjgl->setCustomizable(true); - lwjglPatch = std::dynamic_pointer_cast(lwjgl); + auto lwjglversion = ENV.getVersion("org.lwjgl", "2.9.1" /*m_instance->intendedVersionId()*/); + lwjglPatch = std::dynamic_pointer_cast(lwjglversion); } if (!lwjglPatch) { -- cgit v1.2.3 From 2660418d58efb33cd3a0ab8ed9d48c359c076905 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 19 Mar 2017 02:13:49 +0100 Subject: NOISSUE hack it together enough to get launching back Meta index will now always return valid objects. They just might never load if they don't exist on the server. --- api/logic/minecraft/onesix/OneSixProfileStrategy.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'api/logic/minecraft/onesix/OneSixProfileStrategy.cpp') diff --git a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp index e3d3f674..b19a2dea 100644 --- a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp +++ b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp @@ -12,6 +12,8 @@ #include #include #include +#include +#include OneSixProfileStrategy::OneSixProfileStrategy(OneSixInstance* instance) { @@ -98,7 +100,7 @@ void OneSixProfileStrategy::loadDefaultBuiltinPatches() } else { - auto mcversion = ENV.getVersion("net.minecraft", m_instance->intendedVersionId()); + auto mcversion = ENV.metadataIndex()->get("net.minecraft", m_instance->intendedVersionId()); minecraftPatch = std::dynamic_pointer_cast(mcversion); } if (!minecraftPatch) @@ -121,7 +123,7 @@ void OneSixProfileStrategy::loadDefaultBuiltinPatches() } else { - auto lwjglversion = ENV.getVersion("org.lwjgl", "2.9.1" /*m_instance->intendedVersionId()*/); + auto lwjglversion = ENV.metadataIndex()->get("org.lwjgl", "2.9.1"); lwjglPatch = std::dynamic_pointer_cast(lwjglversion); } if (!lwjglPatch) -- cgit v1.2.3 From f557c1367994a61935fa0e8d0b1b67688d2692d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 19 Mar 2017 23:58:54 +0100 Subject: NOISSUE stuff and things happened. Maybe. --- .../minecraft/onesix/OneSixProfileStrategy.cpp | 130 ++++++++++++++++++--- 1 file changed, 116 insertions(+), 14 deletions(-) (limited to 'api/logic/minecraft/onesix/OneSixProfileStrategy.cpp') diff --git a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp index b19a2dea..3a9b10e6 100644 --- a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp +++ b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp @@ -56,7 +56,7 @@ void OneSixProfileStrategy::upgradeDeprecatedFiles() } auto file = ProfileUtils::parseJsonFile(QFileInfo(sourceFile), false); ProfileUtils::removeLwjglFromPatch(file); - file->fileId = "net.minecraft"; + file->uid = "net.minecraft"; file->version = file->minecraftVersion; file->name = "Minecraft"; auto data = OneSixVersionFormat::versionFileToJson(file, false).toJson(); @@ -81,6 +81,107 @@ void OneSixProfileStrategy::upgradeDeprecatedFiles() } } +class MetaPatchProvider : public ProfilePatch +{ +public: /* con/des */ + MetaPatchProvider(std::shared_ptr data) + :m_version(data) + { + } +public: + QString getFilename() override + { + return QString(); + } + QString getID() override + { + return m_version->uid(); + } + QString getName() override + { + auto vfile = getFile(); + if(vfile) + { + return vfile->getName(); + } + return m_version->name(); + } + QDateTime getReleaseDateTime() override + { + return m_version->time(); + } + QString getVersion() override + { + return m_version->version(); + } + std::shared_ptr getVersionFile() override + { + return m_version->data(); + } + void setOrder(int) override + { + } + int getOrder() override + { + return 0; + } + VersionSource getVersionSource() override + { + return VersionSource::Local; + } + bool isVersionChangeable() override + { + return true; + } + bool isRevertible() override + { + return false; + } + bool isRemovable() override + { + return true; + } + bool isCustom() override + { + return false; + } + bool isCustomizable() override + { + return true; + } + bool isMoveable() override + { + return true; + } + bool isEditable() override + { + return false; + } + bool isMinecraftVersion() override + { + return getID() == "net.minecraft"; + } + void applyTo(MinecraftProfile * profile) override + { + auto vfile = getFile(); + if(vfile) + { + vfile->applyTo(profile); + } + } +private: + VersionFilePtr getFile() + { + if(!m_version->isLoaded()) + { + m_version->load(); + } + return m_version->data(); + } +private: + std::shared_ptr m_version; +}; + void OneSixProfileStrategy::loadDefaultBuiltinPatches() { { @@ -101,7 +202,7 @@ void OneSixProfileStrategy::loadDefaultBuiltinPatches() else { auto mcversion = ENV.metadataIndex()->get("net.minecraft", m_instance->intendedVersionId()); - minecraftPatch = std::dynamic_pointer_cast(mcversion); + minecraftPatch = std::make_shared(mcversion); } if (!minecraftPatch) { @@ -124,7 +225,7 @@ void OneSixProfileStrategy::loadDefaultBuiltinPatches() else { auto lwjglversion = ENV.metadataIndex()->get("org.lwjgl", "2.9.1"); - lwjglPatch = std::dynamic_pointer_cast(lwjglversion); + lwjglPatch = std::make_shared(lwjglversion); } if (!lwjglPatch) { @@ -162,10 +263,10 @@ void OneSixProfileStrategy::loadUserPatches() qDebug() << "Reading" << filename << "by user order"; VersionFilePtr file = ProfileUtils::parseJsonFile(finfo, false); // sanity check. prevent tampering with files. - if (file->fileId != id) + if (file->uid != id) { - file->addProblem(PROBLEM_WARNING, QObject::tr("load id %1 does not match internal id %2").arg(id, file->fileId)); - seen_extra.insert(file->fileId); + file->addProblem(PROBLEM_WARNING, QObject::tr("load id %1 does not match internal id %2").arg(id, file->uid)); + seen_extra.insert(file->uid); } file->setRemovable(true); file->setMovable(true); @@ -185,15 +286,15 @@ void OneSixProfileStrategy::loadUserPatches() qDebug() << "Reading" << info.fileName(); auto file = ProfileUtils::parseJsonFile(info, true); // ignore builtins - if (file->fileId == "net.minecraft") + if (file->uid == "net.minecraft") continue; - if (file->fileId == "org.lwjgl") + if (file->uid == "org.lwjgl") continue; // do not load versions with broken IDs twice - if(seen_extra.contains(file->fileId)) + if(seen_extra.contains(file->uid)) continue; // do not load what we already loaded in the first pass - if (userOrder.contains(file->fileId)) + if (userOrder.contains(file->uid)) continue; file->setRemovable(true); file->setMovable(true); @@ -203,7 +304,7 @@ void OneSixProfileStrategy::loadUserPatches() file->assets = QString(); file->mojangAssetIndex.reset(); // HACK - files.insert(file->order, file); + files.insert(file->getOrder(), file); } QSet seen; for (auto order : files.keys()) @@ -284,7 +385,8 @@ bool OneSixProfileStrategy::removePatch(ProfilePatchPtr patch) return true; }; - for(auto &jarmod: patch->getJarMods()) + auto &jarMods = patch->getVersionFile()->jarMods; + for(auto &jarmod: jarMods) { ok &= preRemoveJarMod(jarmod); } @@ -404,8 +506,8 @@ bool OneSixProfileStrategy::installJarMods(QStringList filepaths) jarMod->originalName = sourceInfo.completeBaseName(); f->jarMods.append(jarMod); f->name = target_name; - f->fileId = target_id; - f->order = profile->getFreeOrderNumber(); + f->uid = target_id; + f->setOrder(profile->getFreeOrderNumber()); QString patchFileName = FS::PathCombine(patchDir, target_id + ".json"); f->filename = patchFileName; f->setMovable(true); -- cgit v1.2.3 From 6f2a87167a13101d80d2fbc096bbb6a5eb5ab0c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 26 Mar 2017 20:50:31 +0200 Subject: NOISSUE remove some dead code from version related classes --- api/logic/minecraft/onesix/OneSixProfileStrategy.cpp | 4 ---- 1 file changed, 4 deletions(-) (limited to 'api/logic/minecraft/onesix/OneSixProfileStrategy.cpp') diff --git a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp index 3a9b10e6..3f33dd7f 100644 --- a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp +++ b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp @@ -125,10 +125,6 @@ public: { return 0; } - VersionSource getVersionSource() override - { - return VersionSource::Local; - } bool isVersionChangeable() override { return true; -- cgit v1.2.3 From 5fabb4f2546fa6b79a4e2c29679f506e587a0070 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Mon, 27 Mar 2017 03:34:39 +0200 Subject: NOISSUE Rough refactor of ProfilePatch and VersionFile internals. They are now distinct classes with distinct responsibilities. * ProfilePatch is an entry in MinecraftProfile and can hold VersionFile or Meta::Version. * VersionFile is the basic element that holds version information loaded from JSON. * Meta::Version is the loader class for VersionFile(s) from a server. --- .../minecraft/onesix/OneSixProfileStrategy.cpp | 178 +++++---------------- 1 file changed, 44 insertions(+), 134 deletions(-) (limited to 'api/logic/minecraft/onesix/OneSixProfileStrategy.cpp') diff --git a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp index 3f33dd7f..a9cad832 100644 --- a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp +++ b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp @@ -15,6 +15,8 @@ #include #include +#include + OneSixProfileStrategy::OneSixProfileStrategy(OneSixInstance* instance) { m_instance = instance; @@ -81,103 +83,6 @@ void OneSixProfileStrategy::upgradeDeprecatedFiles() } } -class MetaPatchProvider : public ProfilePatch -{ -public: /* con/des */ - MetaPatchProvider(std::shared_ptr data) - :m_version(data) - { - } -public: - QString getFilename() override - { - return QString(); - } - QString getID() override - { - return m_version->uid(); - } - QString getName() override - { - auto vfile = getFile(); - if(vfile) - { - return vfile->getName(); - } - return m_version->name(); - } - QDateTime getReleaseDateTime() override - { - return m_version->time(); - } - QString getVersion() override - { - return m_version->version(); - } - std::shared_ptr getVersionFile() override - { - return m_version->data(); - } - void setOrder(int) override - { - } - int getOrder() override - { - return 0; - } - bool isVersionChangeable() override - { - return true; - } - bool isRevertible() override - { - return false; - } - bool isRemovable() override - { - return true; - } - bool isCustom() override - { - return false; - } - bool isCustomizable() override - { - return true; - } - bool isMoveable() override - { - return true; - } - bool isEditable() override - { - return false; - } - bool isMinecraftVersion() override - { - return getID() == "net.minecraft"; - } - void applyTo(MinecraftProfile * profile) override - { - auto vfile = getFile(); - if(vfile) - { - vfile->applyTo(profile); - } - } -private: - VersionFilePtr getFile() - { - if(!m_version->isLoaded()) - { - m_version->load(); - } - return m_version->data(); - } -private: - std::shared_ptr m_version; -}; - void OneSixProfileStrategy::loadDefaultBuiltinPatches() { { @@ -191,14 +96,15 @@ void OneSixProfileStrategy::loadDefaultBuiltinPatches() { file->version = m_instance->intendedVersionId(); } - file->setVanilla(false); - file->setRevertible(true); - minecraftPatch = std::dynamic_pointer_cast(file); + minecraftPatch = std::make_shared(file, mcJson); + minecraftPatch->setVanilla(false); + minecraftPatch->setRevertible(true); } else { auto mcversion = ENV.metadataIndex()->get("net.minecraft", m_instance->intendedVersionId()); - minecraftPatch = std::make_shared(mcversion); + minecraftPatch = std::make_shared(mcversion); + minecraftPatch->setVanilla(true); } if (!minecraftPatch) { @@ -214,14 +120,15 @@ void OneSixProfileStrategy::loadDefaultBuiltinPatches() if(QFile::exists(lwjglJson)) { auto file = ProfileUtils::parseJsonFile(QFileInfo(lwjglJson), false); - file->setVanilla(false); - file->setRevertible(true); - lwjglPatch = std::dynamic_pointer_cast(file); + lwjglPatch = std::make_shared(file, lwjglJson); + lwjglPatch->setVanilla(false); + lwjglPatch->setRevertible(true); } else { auto lwjglversion = ENV.metadataIndex()->get("org.lwjgl", "2.9.1"); - lwjglPatch = std::make_shared(lwjglversion); + lwjglPatch = std::make_shared(lwjglversion); + lwjglPatch->setVanilla(true); } if (!lwjglPatch) { @@ -261,21 +168,17 @@ void OneSixProfileStrategy::loadUserPatches() // sanity check. prevent tampering with files. if (file->uid != id) { - file->addProblem(PROBLEM_WARNING, QObject::tr("load id %1 does not match internal id %2").arg(id, file->uid)); + file->addProblem(ProblemSeverity::Warning, QObject::tr("load id %1 does not match internal id %2").arg(id, file->uid)); seen_extra.insert(file->uid); } - file->setRemovable(true); - file->setMovable(true); - // HACK: ignore assets from other version files than Minecraft - // workaround for stupid assets issue caused by amazon: - // https://www.theregister.co.uk/2017/02/28/aws_is_awol_as_s3_goes_haywire/ - file->assets = QString(); - file->mojangAssetIndex.reset(); - // HACK - profile->appendPatch(file); + auto patchEntry = std::make_shared(file, filename); + patchEntry->setRemovable(true); + patchEntry->setMovable(true); + profile->appendPatch(patchEntry); } // now load the rest by internal preference. - QMultiMap files; + using FileEntry = std::tuple; + QMultiMap files; for (auto info : patches.entryInfoList(QStringList() << "*.json", QDir::Files)) { // parse the file @@ -292,16 +195,18 @@ void OneSixProfileStrategy::loadUserPatches() // do not load what we already loaded in the first pass if (userOrder.contains(file->uid)) continue; - file->setRemovable(true); - file->setMovable(true); - // HACK: ignore assets from other version files than Minecraft - // workaround for stupid assets issue caused by amazon: - // https://www.theregister.co.uk/2017/02/28/aws_is_awol_as_s3_goes_haywire/ - file->assets = QString(); - file->mojangAssetIndex.reset(); - // HACK - files.insert(file->getOrder(), file); + files.insert(file->order, std::make_tuple(file, info.filePath())); } + auto appendFilePatch = [&](FileEntry tuple) + { + VersionFilePtr file; + QString filename; + std::tie(file, filename) = tuple; + auto patchEntry = std::make_shared(file, filename); + patchEntry->setRemovable(true); + patchEntry->setMovable(true); + profile->appendPatch(patchEntry); + }; QSet seen; for (auto order : files.keys()) { @@ -311,7 +216,7 @@ void OneSixProfileStrategy::loadUserPatches() const auto &values = files.values(order); if(values.size() == 1) { - profile->appendPatch(values[0]); + appendFilePatch(values[0]); continue; } for(auto &file: values) @@ -320,10 +225,13 @@ void OneSixProfileStrategy::loadUserPatches() for(auto &file2: values) { if(file != file2) - list.append(file2->name); + { + list.append(std::get<0>(file2)->name); + } } - file->addProblem(PROBLEM_WARNING, QObject::tr("%1 has the same order as the following components:\n%2").arg(file->name, list.join(", "))); - profile->appendPatch(file); + auto vfileptr = std::get<0>(file); + vfileptr->addProblem(ProblemSeverity::Warning, QObject::tr("%1 has the same order as the following components:\n%2").arg(vfileptr->name, list.join(", "))); + appendFilePatch(file); } } } @@ -503,11 +411,9 @@ bool OneSixProfileStrategy::installJarMods(QStringList filepaths) f->jarMods.append(jarMod); f->name = target_name; f->uid = target_id; - f->setOrder(profile->getFreeOrderNumber()); + f->order = profile->getFreeOrderNumber(); QString patchFileName = FS::PathCombine(patchDir, target_id + ".json"); - f->filename = patchFileName; - f->setMovable(true); - f->setRemovable(true); + // f->filename = patchFileName; QFile file(patchFileName); if (!file.open(QFile::WriteOnly)) @@ -518,7 +424,11 @@ bool OneSixProfileStrategy::installJarMods(QStringList filepaths) } file.write(OneSixVersionFormat::versionFileToJson(f, true).toJson()); file.close(); - profile->appendPatch(f); + + auto patch = std::make_shared(f); + patch->setMovable(true); + patch->setRemovable(true); + profile->appendPatch(patch); } profile->saveCurrentOrder(); profile->reapplyPatches(); -- cgit v1.2.3 From af3384c649cb0f71a78ade376386d0c873754bb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Mon, 27 Mar 2017 08:30:21 +0200 Subject: NOISSUE add filename to newly created jar mod patches --- api/logic/minecraft/onesix/OneSixProfileStrategy.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'api/logic/minecraft/onesix/OneSixProfileStrategy.cpp') diff --git a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp index a9cad832..c8d4aa2e 100644 --- a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp +++ b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp @@ -413,7 +413,6 @@ bool OneSixProfileStrategy::installJarMods(QStringList filepaths) f->uid = target_id; f->order = profile->getFreeOrderNumber(); QString patchFileName = FS::PathCombine(patchDir, target_id + ".json"); - // f->filename = patchFileName; QFile file(patchFileName); if (!file.open(QFile::WriteOnly)) @@ -425,7 +424,7 @@ bool OneSixProfileStrategy::installJarMods(QStringList filepaths) file.write(OneSixVersionFormat::versionFileToJson(f, true).toJson()); file.close(); - auto patch = std::make_shared(f); + auto patch = std::make_shared(f, patchFileName); patch->setMovable(true); patch->setRemovable(true); profile->appendPatch(patch); -- cgit v1.2.3 From 53188386b807f1f1ca5eebcd08303633ca4a13fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Tue, 28 Mar 2017 09:45:51 +0200 Subject: NOISSUE refactor builtin patch loading slightly --- .../minecraft/onesix/OneSixProfileStrategy.cpp | 59 +++++++--------------- 1 file changed, 19 insertions(+), 40 deletions(-) (limited to 'api/logic/minecraft/onesix/OneSixProfileStrategy.cpp') diff --git a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp index c8d4aa2e..8125b1d6 100644 --- a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp +++ b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp @@ -85,58 +85,37 @@ void OneSixProfileStrategy::upgradeDeprecatedFiles() void OneSixProfileStrategy::loadDefaultBuiltinPatches() { + auto addBuiltinPatch = [&](const QString &uid, const QString intendedVersion, int order) { - auto mcJson = FS::PathCombine(m_instance->instanceRoot(), "patches" , "net.minecraft.json"); + auto jsonFilePath = FS::PathCombine(m_instance->instanceRoot(), "patches" , uid + ".json"); // load up the base minecraft patch - ProfilePatchPtr minecraftPatch; - if(QFile::exists(mcJson)) + ProfilePatchPtr profilePatch; + if(QFile::exists(jsonFilePath)) { - auto file = ProfileUtils::parseJsonFile(QFileInfo(mcJson), false); + auto file = ProfileUtils::parseJsonFile(QFileInfo(jsonFilePath), false); if(file->version.isEmpty()) { - file->version = m_instance->intendedVersionId(); + file->version = intendedVersion; } - minecraftPatch = std::make_shared(file, mcJson); - minecraftPatch->setVanilla(false); - minecraftPatch->setRevertible(true); + profilePatch = std::make_shared(file, jsonFilePath); + profilePatch->setVanilla(false); + profilePatch->setRevertible(true); } else { - auto mcversion = ENV.metadataIndex()->get("net.minecraft", m_instance->intendedVersionId()); - minecraftPatch = std::make_shared(mcversion); - minecraftPatch->setVanilla(true); + auto metaVersion = ENV.metadataIndex()->get(uid, intendedVersion); + profilePatch = std::make_shared(metaVersion); + profilePatch->setVanilla(true); } - if (!minecraftPatch) + if (!profilePatch) { - throw VersionIncomplete("net.minecraft"); + throw VersionIncomplete(uid); } - minecraftPatch->setOrder(-2); - profile->appendPatch(minecraftPatch); - } - - { - auto lwjglJson = FS::PathCombine(m_instance->instanceRoot(), "patches" , "org.lwjgl.json"); - ProfilePatchPtr lwjglPatch; - if(QFile::exists(lwjglJson)) - { - auto file = ProfileUtils::parseJsonFile(QFileInfo(lwjglJson), false); - lwjglPatch = std::make_shared(file, lwjglJson); - lwjglPatch->setVanilla(false); - lwjglPatch->setRevertible(true); - } - else - { - auto lwjglversion = ENV.metadataIndex()->get("org.lwjgl", "2.9.1"); - lwjglPatch = std::make_shared(lwjglversion); - lwjglPatch->setVanilla(true); - } - if (!lwjglPatch) - { - throw VersionIncomplete("org.lwjgl"); - } - lwjglPatch->setOrder(-1); - profile->appendPatch(lwjglPatch); - } + profilePatch->setOrder(order); + profile->appendPatch(profilePatch); + }; + addBuiltinPatch("net.minecraft", m_instance->intendedVersionId(), -2); + addBuiltinPatch("org.lwjgl", "2.9.1", -1); } void OneSixProfileStrategy::loadUserPatches() -- cgit v1.2.3 From 2ac0edbbdb27e12bae00c4779da135582bde89f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Thu, 30 Mar 2017 01:05:58 +0200 Subject: NOISSUE preview of LWJGL version changing It still needs work - some LWJGL versions are exclusive to macOS. This has to be encoded in the json. --- api/logic/minecraft/onesix/OneSixProfileStrategy.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'api/logic/minecraft/onesix/OneSixProfileStrategy.cpp') diff --git a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp index 8125b1d6..4a56a810 100644 --- a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp +++ b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp @@ -114,8 +114,8 @@ void OneSixProfileStrategy::loadDefaultBuiltinPatches() profilePatch->setOrder(order); profile->appendPatch(profilePatch); }; - addBuiltinPatch("net.minecraft", m_instance->intendedVersionId(), -2); - addBuiltinPatch("org.lwjgl", "2.9.1", -1); + addBuiltinPatch("net.minecraft", m_instance->getComponentVersion("net.minecraft"), -2); + addBuiltinPatch("org.lwjgl", m_instance->getComponentVersion("org.lwjgl"), -1); } void OneSixProfileStrategy::loadUserPatches() -- cgit v1.2.3 From e0596d3c86806d952a9811f306f497f84430ae3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Fri, 31 Mar 2017 23:47:56 +0200 Subject: NOISSUE Make forge installable again --- .../minecraft/onesix/OneSixProfileStrategy.cpp | 143 ++++++++++----------- 1 file changed, 70 insertions(+), 73 deletions(-) (limited to 'api/logic/minecraft/onesix/OneSixProfileStrategy.cpp') diff --git a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp index 4a56a810..e08dd529 100644 --- a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp +++ b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp @@ -120,99 +120,93 @@ void OneSixProfileStrategy::loadDefaultBuiltinPatches() void OneSixProfileStrategy::loadUserPatches() { - // load all patches, put into map for ordering, apply in the right order - ProfileUtils::PatchOrder userOrder; - ProfileUtils::readOverrideOrders(FS::PathCombine(m_instance->instanceRoot(), "order.json"), userOrder); - QDir patches(FS::PathCombine(m_instance->instanceRoot(),"patches")); - QSet seen_extra; - - // first, load things by sort order. - for (auto id : userOrder) + // first, collect all patches (that are not builtins of OneSix) and load them + QMap loadedPatches; + QDir patchesDir(FS::PathCombine(m_instance->instanceRoot(),"patches")); + for (auto info : patchesDir.entryInfoList(QStringList() << "*.json", QDir::Files)) { + // parse the file + qDebug() << "Reading" << info.fileName(); + auto file = ProfileUtils::parseJsonFile(info, true); // ignore builtins - if (id == "net.minecraft") + if (file->uid == "net.minecraft") continue; - if (id == "org.lwjgl") + if (file->uid == "org.lwjgl") continue; - // parse the file - QString filename = patches.absoluteFilePath(id + ".json"); - QFileInfo finfo(filename); - if(!finfo.exists()) + auto patch = std::make_shared(file, info.filePath()); + patch->setRemovable(true); + patch->setMovable(true); + if(ENV.metadataIndex()->hasUid(file->uid)) { - qDebug() << "Patch file " << filename << " was deleted by external means..."; - continue; + // FIXME: requesting a uid/list creates it in the index... this allows reverting to possibly invalid versions... + patch->setRevertible(true); } - qDebug() << "Reading" << filename << "by user order"; - VersionFilePtr file = ProfileUtils::parseJsonFile(finfo, false); - // sanity check. prevent tampering with files. - if (file->uid != id) + loadedPatches[file->uid] = patch; + } + // these are 'special'... if not already loaded from instance files, grab them from the metadata repo. + auto loadSpecial = [&](const QString & uid, int order) + { + auto patchVersion = m_instance->getComponentVersion(uid); + if(!patchVersion.isEmpty() && !loadedPatches.contains(uid)) { - file->addProblem(ProblemSeverity::Warning, QObject::tr("load id %1 does not match internal id %2").arg(id, file->uid)); - seen_extra.insert(file->uid); + auto patch = std::make_shared(ENV.metadataIndex()->get(uid, patchVersion)); + patch->setOrder(order); + patch->setVanilla(true); + patch->setRemovable(true); + patch->setMovable(true); + loadedPatches[uid] = patch; } - auto patchEntry = std::make_shared(file, filename); - patchEntry->setRemovable(true); - patchEntry->setMovable(true); - profile->appendPatch(patchEntry); - } - // now load the rest by internal preference. - using FileEntry = std::tuple; - QMultiMap files; - for (auto info : patches.entryInfoList(QStringList() << "*.json", QDir::Files)) + }; + loadSpecial("net.minecraftforge", 5); + loadSpecial("com.liteloader", 10); + + // now add all the patches by user sort order + ProfileUtils::PatchOrder userOrder; + ProfileUtils::readOverrideOrders(FS::PathCombine(m_instance->instanceRoot(), "order.json"), userOrder); + bool orderIsDirty = false; + for (auto uid : userOrder) { - // parse the file - qDebug() << "Reading" << info.fileName(); - auto file = ProfileUtils::parseJsonFile(info, true); // ignore builtins - if (file->uid == "net.minecraft") - continue; - if (file->uid == "org.lwjgl") + if (uid == "net.minecraft") continue; - // do not load versions with broken IDs twice - if(seen_extra.contains(file->uid)) + if (uid == "org.lwjgl") continue; - // do not load what we already loaded in the first pass - if (userOrder.contains(file->uid)) + // ordering has a patch that is gone? + if(!loadedPatches.contains(uid)) + { + orderIsDirty = true; continue; - files.insert(file->order, std::make_tuple(file, info.filePath())); + } + profile->appendPatch(loadedPatches.take(uid)); } - auto appendFilePatch = [&](FileEntry tuple) + + // is there anything left to sort? + if(loadedPatches.isEmpty()) { - VersionFilePtr file; - QString filename; - std::tie(file, filename) = tuple; - auto patchEntry = std::make_shared(file, filename); - patchEntry->setRemovable(true); - patchEntry->setMovable(true); - profile->appendPatch(patchEntry); - }; - QSet seen; + // TODO: save the order here? + return; + } + + // inserting into multimap by order number as key sorts the patches and detects duplicates + QMultiMap files; + auto iter = loadedPatches.begin(); + while(iter != loadedPatches.end()) + { + files.insert((*iter)->getOrder(), *iter); + iter++; + } + + // then just extract the patches and put them in the list for (auto order : files.keys()) { - if(seen.contains(order)) - continue; - seen.insert(order); const auto &values = files.values(order); - if(values.size() == 1) - { - appendFilePatch(values[0]); - continue; - } - for(auto &file: values) + for(auto &value: values) { - QStringList list; - for(auto &file2: values) - { - if(file != file2) - { - list.append(std::get<0>(file2)->name); - } - } - auto vfileptr = std::get<0>(file); - vfileptr->addProblem(ProblemSeverity::Warning, QObject::tr("%1 has the same order as the following components:\n%2").arg(vfileptr->name, list.join(", "))); - appendFilePatch(file); + // TODO: put back the insertion of problem messages here, so the user knows about the id duplication + profile->appendPatch(value); } } + // TODO: save the order here? } @@ -249,7 +243,10 @@ bool OneSixProfileStrategy::removePatch(ProfilePatchPtr patch) return false; } } - + if(!m_instance->getComponentVersion(patch->getID()).isEmpty()) + { + m_instance->setComponentVersion(patch->getID(), QString()); + } auto preRemoveJarMod = [&](JarmodPtr jarMod) -> bool { -- cgit v1.2.3 From dff307557bf69cb2dc6cc264b485865469ef64fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Thu, 6 Apr 2017 23:32:20 +0200 Subject: NOISSUE fix liteloader uid where it is hardcoded hardcoded --- api/logic/minecraft/onesix/OneSixProfileStrategy.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'api/logic/minecraft/onesix/OneSixProfileStrategy.cpp') diff --git a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp index e08dd529..d3e137c7 100644 --- a/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp +++ b/api/logic/minecraft/onesix/OneSixProfileStrategy.cpp @@ -158,7 +158,7 @@ void OneSixProfileStrategy::loadUserPatches() } }; loadSpecial("net.minecraftforge", 5); - loadSpecial("com.liteloader", 10); + loadSpecial("com.mumfrey.liteloader", 10); // now add all the patches by user sort order ProfileUtils::PatchOrder userOrder; -- cgit v1.2.3