2014-05-09 16:16:25 +01:00
|
|
|
#include "MinecraftVersion.h"
|
2015-01-27 21:31:07 +00:00
|
|
|
#include "MinecraftProfile.h"
|
2014-05-11 11:37:21 +01:00
|
|
|
#include "VersionBuildError.h"
|
|
|
|
#include "VersionBuilder.h"
|
2015-01-27 21:31:07 +00:00
|
|
|
#include "ProfileUtils.h"
|
2014-07-19 22:16:02 +01:00
|
|
|
#include "MultiMC.h"
|
|
|
|
#include "logic/settings/SettingsObject.h"
|
2014-05-09 16:16:25 +01:00
|
|
|
|
2014-05-10 00:53:32 +01:00
|
|
|
bool MinecraftVersion::usesLegacyLauncher()
|
|
|
|
{
|
|
|
|
return m_traits.contains("legacyLaunch") || m_traits.contains("aplhaLaunch");
|
|
|
|
}
|
2014-05-11 11:37:21 +01:00
|
|
|
|
2014-05-10 00:53:32 +01:00
|
|
|
QString MinecraftVersion::descriptor()
|
|
|
|
{
|
|
|
|
return m_descriptor;
|
|
|
|
}
|
2014-05-11 11:37:21 +01:00
|
|
|
|
2014-05-10 00:53:32 +01:00
|
|
|
QString MinecraftVersion::name()
|
|
|
|
{
|
|
|
|
return m_name;
|
|
|
|
}
|
2014-05-11 11:37:21 +01:00
|
|
|
|
2014-05-10 00:53:32 +01:00
|
|
|
QString MinecraftVersion::typeString() const
|
|
|
|
{
|
2014-05-11 18:13:21 +01:00
|
|
|
if(m_type == "snapshot")
|
2014-05-10 00:53:32 +01:00
|
|
|
{
|
|
|
|
return QObject::tr("Snapshot");
|
|
|
|
}
|
2014-05-11 18:13:21 +01:00
|
|
|
else if (m_type == "release")
|
2014-05-10 00:53:32 +01:00
|
|
|
{
|
|
|
|
return QObject::tr("Regular release");
|
|
|
|
}
|
2014-05-11 18:13:21 +01:00
|
|
|
else if (m_type == "old_alpha")
|
|
|
|
{
|
|
|
|
return QObject::tr("Alpha");
|
|
|
|
}
|
|
|
|
else if (m_type == "old_beta")
|
|
|
|
{
|
|
|
|
return QObject::tr("Beta");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return QString();
|
|
|
|
}
|
2014-05-10 00:53:32 +01:00
|
|
|
}
|
2014-05-11 11:37:21 +01:00
|
|
|
|
2014-05-10 00:53:32 +01:00
|
|
|
bool MinecraftVersion::hasJarMods()
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
2014-05-11 11:37:21 +01:00
|
|
|
|
|
|
|
bool MinecraftVersion::isMinecraftVersion()
|
2014-05-10 00:53:32 +01:00
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2014-05-11 11:37:21 +01:00
|
|
|
// 1. assume the local file is good. load, check. If it's good, apply.
|
|
|
|
// 2. if discrepancies are found, fall out and fail (impossible to apply incomplete version).
|
2015-01-27 21:31:07 +00:00
|
|
|
void MinecraftVersion::applyFileTo(MinecraftProfile *version)
|
|
|
|
{
|
|
|
|
getVersionFile()->applyTo(version);
|
|
|
|
}
|
|
|
|
|
|
|
|
VersionFilePtr MinecraftVersion::getVersionFile()
|
2014-05-11 11:37:21 +01:00
|
|
|
{
|
2014-05-13 22:57:34 +01:00
|
|
|
QFileInfo versionFile(QString("versions/%1/%1.dat").arg(m_descriptor));
|
2015-01-27 21:31:07 +00:00
|
|
|
|
|
|
|
return ProfileUtils::parseBinaryJsonFile(versionFile);
|
2014-05-11 11:37:21 +01:00
|
|
|
}
|
|
|
|
|
2015-01-27 21:31:07 +00:00
|
|
|
|
|
|
|
void MinecraftVersion::applyTo(MinecraftProfile *version)
|
2014-05-10 00:53:32 +01:00
|
|
|
{
|
2014-05-11 11:37:21 +01:00
|
|
|
// do we have this one cached?
|
|
|
|
if (m_versionSource == Local)
|
2014-05-10 00:53:32 +01:00
|
|
|
{
|
2014-05-11 11:37:21 +01:00
|
|
|
applyFileTo(version);
|
2014-05-10 00:53:32 +01:00
|
|
|
return;
|
|
|
|
}
|
2014-05-11 11:37:21 +01:00
|
|
|
// if not builtin, do not proceed any further.
|
|
|
|
if (m_versionSource != Builtin)
|
|
|
|
{
|
|
|
|
throw VersionIncomplete(QObject::tr(
|
|
|
|
"Minecraft version %1 could not be applied: version files are missing.").arg(m_descriptor));
|
|
|
|
}
|
2014-05-10 00:53:32 +01:00
|
|
|
if (!m_descriptor.isNull())
|
|
|
|
{
|
|
|
|
version->id = m_descriptor;
|
|
|
|
}
|
|
|
|
if (!m_mainClass.isNull())
|
|
|
|
{
|
|
|
|
version->mainClass = m_mainClass;
|
|
|
|
}
|
|
|
|
if (!m_appletClass.isNull())
|
|
|
|
{
|
|
|
|
version->appletClass = m_appletClass;
|
|
|
|
}
|
|
|
|
if (!m_processArguments.isNull())
|
|
|
|
{
|
|
|
|
version->vanillaProcessArguments = m_processArguments;
|
|
|
|
version->processArguments = m_processArguments;
|
|
|
|
}
|
|
|
|
if (!m_type.isNull())
|
|
|
|
{
|
|
|
|
version->type = m_type;
|
|
|
|
}
|
|
|
|
if (!m_releaseTimeString.isNull())
|
|
|
|
{
|
|
|
|
version->m_releaseTimeString = m_releaseTimeString;
|
|
|
|
version->m_releaseTime = m_releaseTime;
|
|
|
|
}
|
|
|
|
if (!m_updateTimeString.isNull())
|
|
|
|
{
|
|
|
|
version->m_updateTimeString = m_updateTimeString;
|
|
|
|
version->m_updateTime = m_updateTime;
|
|
|
|
}
|
|
|
|
version->traits.unite(m_traits);
|
|
|
|
}
|
2014-05-11 11:37:21 +01:00
|
|
|
|
2014-05-10 00:53:32 +01:00
|
|
|
int MinecraftVersion::getOrder()
|
|
|
|
{
|
|
|
|
return order;
|
|
|
|
}
|
2014-05-11 11:37:21 +01:00
|
|
|
|
2014-05-10 00:53:32 +01:00
|
|
|
void MinecraftVersion::setOrder(int order)
|
|
|
|
{
|
|
|
|
this->order = order;
|
|
|
|
}
|
2014-05-11 11:37:21 +01:00
|
|
|
|
2014-05-10 00:53:32 +01:00
|
|
|
QList<JarmodPtr> MinecraftVersion::getJarMods()
|
|
|
|
{
|
|
|
|
return QList<JarmodPtr>();
|
|
|
|
}
|
2014-05-11 11:37:21 +01:00
|
|
|
|
|
|
|
QString MinecraftVersion::getPatchName()
|
|
|
|
{
|
|
|
|
return "Minecraft";
|
|
|
|
}
|
|
|
|
QString MinecraftVersion::getPatchVersion()
|
|
|
|
{
|
|
|
|
return m_descriptor;
|
|
|
|
}
|
|
|
|
QString MinecraftVersion::getPatchID()
|
|
|
|
{
|
|
|
|
return "net.minecraft";
|
|
|
|
}
|
|
|
|
QString MinecraftVersion::getPatchFilename()
|
|
|
|
{
|
|
|
|
return QString();
|
|
|
|
}
|
2014-07-19 22:16:02 +01:00
|
|
|
|
|
|
|
bool MinecraftVersion::needsUpdate()
|
|
|
|
{
|
2015-01-31 15:59:03 +00:00
|
|
|
return m_versionSource == Remote || hasUpdate();
|
2014-07-19 22:16:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
bool MinecraftVersion::hasUpdate()
|
|
|
|
{
|
|
|
|
return m_versionSource == Remote || (m_versionSource == Local && upstreamUpdate);
|
|
|
|
}
|
2014-08-11 01:17:48 +01:00
|
|
|
|
|
|
|
bool MinecraftVersion::isCustom()
|
|
|
|
{
|
|
|
|
// if we add any other source types, this will evaluate to false for them.
|
|
|
|
return m_versionSource != Builtin && m_versionSource != Local && m_versionSource != Remote;
|
|
|
|
}
|