MCPcopy Create free account
hub / github.com/PolyMC/PolyMC / getVersionForLoader

Method getVersionForLoader

launcher/modplatform/atlauncher/ATLPackInstallTask.cpp:337–394  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

335}
336
337QString PackInstallTask::getVersionForLoader(QString uid)
338{
339 if(m_version.loader.recommended || m_version.loader.latest || m_version.loader.choose) {
340 auto vlist = APPLICATION->metadataIndex()->get(uid);
341 if(!vlist)
342 {
343 emitFailed(tr("Failed to get local metadata index for %1").arg(uid));
344 return Q_NULLPTR;
345 }
346
347 if(!vlist->isLoaded()) {
348 vlist->load(Net::Mode::Online);
349 }
350
351 if(m_version.loader.recommended || m_version.loader.latest) {
352 for (int i = 0; i < vlist->versions().size(); i++) {
353 auto version = vlist->versions().at(i);
354 auto reqs = version->required();
355
356 // filter by minecraft version, if the loader depends on a certain version.
357 // not all mod loaders depend on a given Minecraft version, so we won't do this
358 // filtering for those loaders.
359 if (m_version.loader.type != "fabric") {
360 auto iter = std::find_if(reqs.begin(), reqs.end(), [](const Meta::Require &req) {
361 return req.uid == "net.minecraft";
362 });
363 if (iter == reqs.end()) continue;
364 if (iter->equalsVersion != m_version.minecraft) continue;
365 }
366
367 if (m_version.loader.recommended) {
368 // first recommended build we find, we use.
369 if (!version->isRecommended()) continue;
370 }
371
372 return version->descriptor();
373 }
374
375 emitFailed(tr("Failed to find version for %1 loader").arg(m_version.loader.type));
376 return Q_NULLPTR;
377 }
378 else if(m_version.loader.choose) {
379 // Fabric Loader doesn't depend on a given Minecraft version.
380 if (m_version.loader.type == "fabric") {
381 return m_support->chooseVersion(vlist, Q_NULLPTR);
382 }
383
384 return m_support->chooseVersion(vlist, m_version.minecraft);
385 }
386 }
387
388 if (m_version.loader.version == Q_NULLPTR || m_version.loader.version.isEmpty()) {
389 emitFailed(tr("No loader version set for modpack!"));
390 return Q_NULLPTR;
391 }
392
393 return m_version.loader.version;
394}

Callers

nothing calls this directly

Calls 13

metadataIndexMethod · 0.80
versionsMethod · 0.80
beginMethod · 0.80
endMethod · 0.80
isRecommendedMethod · 0.80
chooseVersionMethod · 0.80
isEmptyMethod · 0.80
getMethod · 0.45
isLoadedMethod · 0.45
loadMethod · 0.45
sizeMethod · 0.45
atMethod · 0.45

Tested by

no test coverage detected