mirror of
https://github.com/UltimMC/Launcher.git
synced 2025-12-16 17:07:14 +00:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3ad9ea507e | ||
|
|
c9e851f12f | ||
|
|
0281845fc8 |
@@ -46,7 +46,7 @@ set(MultiMC_NEWS_RSS_URL "https://multimc.org/rss.xml" CACHE STRING "URL to fetc
|
|||||||
######## Set version numbers ########
|
######## Set version numbers ########
|
||||||
set(MultiMC_VERSION_MAJOR 0)
|
set(MultiMC_VERSION_MAJOR 0)
|
||||||
set(MultiMC_VERSION_MINOR 6)
|
set(MultiMC_VERSION_MINOR 6)
|
||||||
set(MultiMC_VERSION_HOTFIX 10)
|
set(MultiMC_VERSION_HOTFIX 11)
|
||||||
|
|
||||||
# Build number
|
# Build number
|
||||||
set(MultiMC_VERSION_BUILD -1 CACHE STRING "Build number. -1 for no build number.")
|
set(MultiMC_VERSION_BUILD -1 CACHE STRING "Build number. -1 for no build number.")
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ void LaunchProfile::clear()
|
|||||||
m_mainClass.clear();
|
m_mainClass.clear();
|
||||||
m_appletClass.clear();
|
m_appletClass.clear();
|
||||||
m_libraries.clear();
|
m_libraries.clear();
|
||||||
|
m_mavenFiles.clear();
|
||||||
m_traits.clear();
|
m_traits.clear();
|
||||||
m_jarMods.clear();
|
m_jarMods.clear();
|
||||||
m_mainJar.reset();
|
m_mainJar.reset();
|
||||||
@@ -157,6 +158,22 @@ void LaunchProfile::applyLibrary(LibraryPtr library)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LaunchProfile::applyMavenFile(LibraryPtr mavenFile)
|
||||||
|
{
|
||||||
|
if(!mavenFile->isActive())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mavenFile->isNative())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// unlike libraries, we do not keep only one version or try to dedupe them
|
||||||
|
m_mavenFiles.append(Library::limitedCopy(mavenFile));
|
||||||
|
}
|
||||||
|
|
||||||
const LibraryPtr LaunchProfile::getMainJar() const
|
const LibraryPtr LaunchProfile::getMainJar() const
|
||||||
{
|
{
|
||||||
return m_mainJar;
|
return m_mainJar;
|
||||||
@@ -253,6 +270,11 @@ const QList<LibraryPtr> & LaunchProfile::getNativeLibraries() const
|
|||||||
return m_nativeLibraries;
|
return m_nativeLibraries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const QList<LibraryPtr> & LaunchProfile::getMavenFiles() const
|
||||||
|
{
|
||||||
|
return m_mavenFiles;
|
||||||
|
}
|
||||||
|
|
||||||
void LaunchProfile::getLibraryFiles(
|
void LaunchProfile::getLibraryFiles(
|
||||||
const QString& architecture,
|
const QString& architecture,
|
||||||
QStringList& jars,
|
QStringList& jars,
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ public: /* application of profile variables from patches */
|
|||||||
void applyJarMods(const QList<LibraryPtr> &jarMods);
|
void applyJarMods(const QList<LibraryPtr> &jarMods);
|
||||||
void applyMods(const QList<LibraryPtr> &jarMods);
|
void applyMods(const QList<LibraryPtr> &jarMods);
|
||||||
void applyLibrary(LibraryPtr library);
|
void applyLibrary(LibraryPtr library);
|
||||||
|
void applyMavenFile(LibraryPtr library);
|
||||||
void applyMainJar(LibraryPtr jar);
|
void applyMainJar(LibraryPtr jar);
|
||||||
void applyProblemSeverity(ProblemSeverity severity);
|
void applyProblemSeverity(ProblemSeverity severity);
|
||||||
/// clear the profile
|
/// clear the profile
|
||||||
@@ -37,6 +38,7 @@ public: /* getters for profile variables */
|
|||||||
const QList<LibraryPtr> & getJarMods() const;
|
const QList<LibraryPtr> & getJarMods() const;
|
||||||
const QList<LibraryPtr> & getLibraries() const;
|
const QList<LibraryPtr> & getLibraries() const;
|
||||||
const QList<LibraryPtr> & getNativeLibraries() const;
|
const QList<LibraryPtr> & getNativeLibraries() const;
|
||||||
|
const QList<LibraryPtr> & getMavenFiles() const;
|
||||||
const LibraryPtr getMainJar() const;
|
const LibraryPtr getMainJar() const;
|
||||||
void getLibraryFiles(
|
void getLibraryFiles(
|
||||||
const QString & architecture,
|
const QString & architecture,
|
||||||
@@ -79,10 +81,13 @@ private:
|
|||||||
/// the list of libraries
|
/// the list of libraries
|
||||||
QList<LibraryPtr> m_libraries;
|
QList<LibraryPtr> m_libraries;
|
||||||
|
|
||||||
|
/// the list of maven files to be placed in the libraries folder, but not acted upon
|
||||||
|
QList<LibraryPtr> m_mavenFiles;
|
||||||
|
|
||||||
/// the main jar
|
/// the main jar
|
||||||
LibraryPtr m_mainJar;
|
LibraryPtr m_mainJar;
|
||||||
|
|
||||||
/// the list of libraries
|
/// the list of native libraries
|
||||||
QList<LibraryPtr> m_nativeLibraries;
|
QList<LibraryPtr> m_nativeLibraries;
|
||||||
|
|
||||||
/// traits, collected from all the version files (version files can only add)
|
/// traits, collected from all the version files (version files can only add)
|
||||||
|
|||||||
@@ -144,18 +144,14 @@ VersionFilePtr OneSixVersionFormat::versionFileFromJson(const QJsonDocument &doc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto readLibs = [&](const char * which)
|
auto readLibs = [&](const char * which, QList<LibraryPtr> & out)
|
||||||
{
|
{
|
||||||
for (auto libVal : requireArray(root.value(which)))
|
for (auto libVal : requireArray(root.value(which)))
|
||||||
{
|
{
|
||||||
QJsonObject libObj = requireObject(libVal);
|
QJsonObject libObj = requireObject(libVal);
|
||||||
// parse the library
|
// parse the library
|
||||||
auto lib = libraryFromJson(libObj, filename);
|
auto lib = libraryFromJson(libObj, filename);
|
||||||
if(lib->rawName().artifactId() == "ForgeWrapper") {
|
out.append(lib);
|
||||||
out->mainClass.clear();
|
|
||||||
out->addProblem(ProblemSeverity::Error, QObject::tr("Forge workarounds have no place in MultiMC."));
|
|
||||||
}
|
|
||||||
out->libraries.append(lib);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
bool hasPlusLibs = root.contains("+libraries");
|
bool hasPlusLibs = root.contains("+libraries");
|
||||||
@@ -164,16 +160,20 @@ VersionFilePtr OneSixVersionFormat::versionFileFromJson(const QJsonDocument &doc
|
|||||||
{
|
{
|
||||||
out->addProblem(ProblemSeverity::Warning,
|
out->addProblem(ProblemSeverity::Warning,
|
||||||
QObject::tr("Version file has both '+libraries' and 'libraries'. This is no longer supported."));
|
QObject::tr("Version file has both '+libraries' and 'libraries'. This is no longer supported."));
|
||||||
readLibs("libraries");
|
readLibs("libraries", out->libraries);
|
||||||
readLibs("+libraries");
|
readLibs("+libraries", out->libraries);
|
||||||
}
|
}
|
||||||
else if (hasLibs)
|
else if (hasLibs)
|
||||||
{
|
{
|
||||||
readLibs("libraries");
|
readLibs("libraries", out->libraries);
|
||||||
}
|
}
|
||||||
else if(hasPlusLibs)
|
else if(hasPlusLibs)
|
||||||
{
|
{
|
||||||
readLibs("+libraries");
|
readLibs("+libraries", out->libraries);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(root.contains("mavenFiles")) {
|
||||||
|
readLibs("mavenFiles", out->mavenFiles);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if we have mainJar, just use it
|
// if we have mainJar, just use it
|
||||||
@@ -280,6 +280,15 @@ QJsonDocument OneSixVersionFormat::versionFileToJson(const VersionFilePtr &patch
|
|||||||
}
|
}
|
||||||
root.insert("libraries", array);
|
root.insert("libraries", array);
|
||||||
}
|
}
|
||||||
|
if (!patch->mavenFiles.isEmpty())
|
||||||
|
{
|
||||||
|
QJsonArray array;
|
||||||
|
for (auto value: patch->mavenFiles)
|
||||||
|
{
|
||||||
|
array.append(OneSixVersionFormat::libraryToJson(value.get()));
|
||||||
|
}
|
||||||
|
root.insert("mavenFiles", array);
|
||||||
|
}
|
||||||
if (!patch->jarMods.isEmpty())
|
if (!patch->jarMods.isEmpty())
|
||||||
{
|
{
|
||||||
QJsonArray array;
|
QJsonArray array;
|
||||||
|
|||||||
@@ -41,6 +41,10 @@ void VersionFile::applyTo(LaunchProfile *profile)
|
|||||||
{
|
{
|
||||||
profile->applyLibrary(library);
|
profile->applyLibrary(library);
|
||||||
}
|
}
|
||||||
|
for (auto mavenFile : mavenFiles)
|
||||||
|
{
|
||||||
|
profile->applyMavenFile(mavenFile);
|
||||||
|
}
|
||||||
profile->applyProblemSeverity(getProblemSeverity());
|
profile->applyProblemSeverity(getProblemSeverity());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -75,6 +75,9 @@ public: /* data */
|
|||||||
/// Mojang: list of libraries to add to the version
|
/// Mojang: list of libraries to add to the version
|
||||||
QList<LibraryPtr> libraries;
|
QList<LibraryPtr> libraries;
|
||||||
|
|
||||||
|
/// MultiMC: list of maven files to put in the libraries folder, but not in classpath
|
||||||
|
QList<LibraryPtr> mavenFiles;
|
||||||
|
|
||||||
/// The main jar (Minecraft version library, normally)
|
/// The main jar (Minecraft version library, normally)
|
||||||
LibraryPtr mainJar;
|
LibraryPtr mainJar;
|
||||||
|
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ void LibrariesTask::executeTask()
|
|||||||
QList<LibraryPtr> libArtifactPool;
|
QList<LibraryPtr> libArtifactPool;
|
||||||
libArtifactPool.append(profile->getLibraries());
|
libArtifactPool.append(profile->getLibraries());
|
||||||
libArtifactPool.append(profile->getNativeLibraries());
|
libArtifactPool.append(profile->getNativeLibraries());
|
||||||
|
libArtifactPool.append(profile->getMavenFiles());
|
||||||
libArtifactPool.append(profile->getMainJar());
|
libArtifactPool.append(profile->getMainJar());
|
||||||
processArtifactPool(libArtifactPool, failedLocalLibraries, inst->getLocalLibraryPath());
|
processArtifactPool(libArtifactPool, failedLocalLibraries, inst->getLocalLibraryPath());
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ QString getCreditsHtml(QStringList patrons)
|
|||||||
stream << "<p>TakSuyu <<a href='mailto:taksuyu@gmail.com'>taksuyu@gmail.com</a>></p>\n";
|
stream << "<p>TakSuyu <<a href='mailto:taksuyu@gmail.com'>taksuyu@gmail.com</a>></p>\n";
|
||||||
stream << "<p>Kilobyte <<a href='mailto:stiepen22@gmx.de'>stiepen22@gmx.de</a>></p>\n";
|
stream << "<p>Kilobyte <<a href='mailto:stiepen22@gmx.de'>stiepen22@gmx.de</a>></p>\n";
|
||||||
stream << "<p>Rootbear75 <<a href='https://twitter.com/rootbear75'>@rootbear75</a>></p>\n";
|
stream << "<p>Rootbear75 <<a href='https://twitter.com/rootbear75'>@rootbear75</a>></p>\n";
|
||||||
|
stream << "<p>Zeker Zhayard <<a href='https://twitter.com/zeker_zhayard'>@Zeker_Zhayard</a>></p>\n";
|
||||||
stream << "<br />\n";
|
stream << "<br />\n";
|
||||||
|
|
||||||
if(!patrons.isEmpty()) {
|
if(!patrons.isEmpty()) {
|
||||||
|
|||||||
@@ -206,7 +206,7 @@ void VersionPage::updateVersionControls()
|
|||||||
bool newCraft = controlsEnabled && (minecraftVersion >= Version("1.14"));
|
bool newCraft = controlsEnabled && (minecraftVersion >= Version("1.14"));
|
||||||
bool oldCraft = controlsEnabled && (minecraftVersion <= Version("1.12.2"));
|
bool oldCraft = controlsEnabled && (minecraftVersion <= Version("1.12.2"));
|
||||||
ui->actionInstall_Fabric->setEnabled(newCraft);
|
ui->actionInstall_Fabric->setEnabled(newCraft);
|
||||||
ui->actionInstall_Forge->setEnabled(oldCraft);
|
ui->actionInstall_Forge->setEnabled(true);
|
||||||
ui->actionInstall_LiteLoader->setEnabled(oldCraft);
|
ui->actionInstall_LiteLoader->setEnabled(oldCraft);
|
||||||
ui->actionReload->setEnabled(true);
|
ui->actionReload->setEnabled(true);
|
||||||
updateButtons();
|
updateButtons();
|
||||||
|
|||||||
21
changelog.md
21
changelog.md
@@ -1,4 +1,22 @@
|
|||||||
# MultiMC 0.6.8
|
# MultiMC 0.6.11
|
||||||
|
|
||||||
|
This adds Forge 1.13+ support using [ForgeWrapper](https://github.com/ZekerZhayard/ForgeWrapper) by ZekerZhayard.
|
||||||
|
|
||||||
|
### New or changed features
|
||||||
|
|
||||||
|
- GH-2988: You can now import instances and curse modpacks from the command line with the `--import` option followed by either an URL or a local file path.
|
||||||
|
|
||||||
|
- GH-2544: MultiMC now supports downloading library files without including them on the Java classpath.
|
||||||
|
|
||||||
|
This is done by adding them to the `mavenFiles` list instead of the `libraries` list.
|
||||||
|
|
||||||
|
Such downloads are not deduplicated or version upgraded like libraries are.
|
||||||
|
|
||||||
|
This enables ForgeWrapper to work - MultiMC downloads all the files, and ForgeWrapper runs the Forge installer during instance start when needed.
|
||||||
|
|
||||||
|
# Previous releases
|
||||||
|
|
||||||
|
## MultiMC 0.6.8
|
||||||
|
|
||||||
This is mostly about removal of the 'curse URL' related features, because they were of low quality and generally unreliable.
|
This is mostly about removal of the 'curse URL' related features, because they were of low quality and generally unreliable.
|
||||||
|
|
||||||
@@ -44,7 +62,6 @@ MultiMC also migrated to a new continuous deployment system, which makes everyth
|
|||||||
|
|
||||||
- When a component is customized, the launcher will not try to update it in an infinite loop when something else requires a different version.
|
- When a component is customized, the launcher will not try to update it in an infinite loop when something else requires a different version.
|
||||||
|
|
||||||
# Previous releases
|
|
||||||
|
|
||||||
## MultiMC 0.6.7
|
## MultiMC 0.6.7
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user