Solve conflicts

This commit is contained in:
Sebastian
2022-06-09 18:33:37 -05:00
4 changed files with 105 additions and 19 deletions

View File

@@ -1,4 +1,36 @@
# MultiMC 0.6.15 # MultiMC 0.6.16
This brings some good and bad changes to modpack platforms, along with various fixes.
We've added Modrinth as a directly supported modpack platform. It's nice, and the list of packs availale from it is slowly growing.
We can no longer directly import FTB modpacks from the FTB platform. Instead, this has been replaced by import from the [FTB App](https://www.feed-the-beast.com/app). You can get FTB modpacks through the FTB App and then import them into MultiMC using the `FTB App Import` page in `Add Instance`.
We can also no longer directly download CurseForge modpacks, although this should be only temporary (once the issues we have with the CurseForge API ToS are resolved, it will make a comeback). Currently, you can get CurseForge packs using the `FTB App Import`, just make sure you switch the FTB App to the CurseForge mode. The button for that isn't too obvious, look for the CurseForge logo.
Aside from these changes, the release brings some general fixes.
#### Changes, itemized.
- Modrinth platform has been added, along with importing `.mrpack` files.
- FTB App Import has been added as a way to automate copying over modpacks installed using the FTB App.
- Curseforge platform and importing `.zip` files from the platform has been removed (replaced by FTB App Import).
- FTB platform has been removed (replaced by FTB App Import).
- MultiMC is now blocking passing the `-version` argument to the Java Runtime. This should stop some really strange (unaccounted for) things from happening.
- GH-3742: Added Quilt modloader installation button and support for importing Quilt-using modpacks in general.
- When the game crashes on Windows, MultiMC gives you a nicer representation of what the exit code could mean.
- Some odd corner cases when importing ATLauncher modpacks are now handled better.
- Custom player name for offline mode is now saved for your convenience.
- GH-3012: Added command line options to launch instances offline.
Used like this:
```
./MultiMC --launch 1.17.1 --offline --name Steve
```
# Previous releases
## MultiMC 0.6.15
This is mostly a bugfix release. This is mostly a bugfix release.
@@ -27,8 +59,6 @@ This is mostly a bugfix release.
- GH-4299: Fix crash when uploading screenshots. - GH-4299: Fix crash when uploading screenshots.
- Added the capability to copypaste screenshots as raw images (to image editors) and files (to file explorers). - Added the capability to copypaste screenshots as raw images (to image editors) and files (to file explorers).
# Previous releases
## MultiMC 0.6.14 ## MultiMC 0.6.14
This further refines Microsoft account support, along with small fixes related to modpack platforms and Java runtime detection. This further refines Microsoft account support, along with small fixes related to modpack platforms and Java runtime detection.

View File

@@ -249,6 +249,14 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
parser.addOption("profile"); parser.addOption("profile");
parser.addShortOpt("profile", 'a'); parser.addShortOpt("profile", 'a');
parser.addDocumentation("profile", "Use the account specified by its profile name (only valid in combination with --launch)"); parser.addDocumentation("profile", "Use the account specified by its profile name (only valid in combination with --launch)");
// --offline
parser.addSwitch("offline");
parser.addShortOpt("offline", 'o');
parser.addDocumentation("offline", "Launch offline (only valid in combination with --launch)");
// --name
parser.addOption("name");
parser.addShortOpt("name", 'n');
parser.addDocumentation("name", "When launching offline, use specified name (only makes sense in combination with --launch and --offline)");
// --alive // --alive
parser.addSwitch("alive"); parser.addSwitch("alive");
parser.addDocumentation("alive", "Write a small '" + liveCheckFile + "' file after the launcher starts"); parser.addDocumentation("alive", "Write a small '" + liveCheckFile + "' file after the launcher starts");
@@ -292,6 +300,10 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
m_instanceIdToLaunch = args["launch"].toString(); m_instanceIdToLaunch = args["launch"].toString();
m_serverToJoin = args["server"].toString(); m_serverToJoin = args["server"].toString();
m_profileToUse = args["profile"].toString(); m_profileToUse = args["profile"].toString();
if(args["offline"].toBool()) {
m_offline = true;
m_offlineName = args["name"].toString();
}
m_liveCheck = args["alive"].toBool(); m_liveCheck = args["alive"].toBool();
m_zipToImport = args["import"].toUrl(); m_zipToImport = args["import"].toUrl();
@@ -357,18 +369,44 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
return; return;
} }
if(m_instanceIdToLaunch.isEmpty() && !m_serverToJoin.isEmpty()) // all the things invalid when NOT trying to --launch
{ if(m_instanceIdToLaunch.isEmpty()) {
std::cerr << "--server can only be used in combination with --launch!" << std::endl; if(!m_serverToJoin.isEmpty())
m_status = Application::Failed; {
return; std::cerr << "--server can only be used in combination with --launch!" << std::endl;
} m_status = Application::Failed;
return;
}
if(m_instanceIdToLaunch.isEmpty() && !m_profileToUse.isEmpty()) if(!m_profileToUse.isEmpty())
{ {
std::cerr << "--account can only be used in combination with --launch!" << std::endl; std::cerr << "--account can only be used in combination with --launch!" << std::endl;
m_status = Application::Failed; m_status = Application::Failed;
return; return;
}
if(m_offline)
{
std::cerr << "--offline can only be used in combination with --launch!" << std::endl;
m_status = Application::Failed;
return;
}
if(!m_offlineName.isEmpty())
{
std::cerr << "--offlineName can only be used in combination with --launch and --offline!" << std::endl;
m_status = Application::Failed;
return;
}
}
else {
// all the things invalid when trying to --launch
// online, and offline name is set
if(!m_offline && !m_offlineName.isEmpty()) {
std::cerr << "--offlineName can only be used in combination with --launch and --offline!" << std::endl;
m_status = Application::Failed;
return;
}
} }
#if defined(Q_OS_MAC) #if defined(Q_OS_MAC)
@@ -475,6 +513,10 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
{ {
launch.args["profile"] = m_profileToUse; launch.args["profile"] = m_profileToUse;
} }
if(m_offline) {
launch.args["offline_enabled"] = "true";
launch.args["offline_name"] = m_offlineName;
}
m_peerInstance->sendMessage(launch.serialize(), timeout); m_peerInstance->sendMessage(launch.serialize(), timeout);
} }
m_status = Application::Succeeded; m_status = Application::Succeeded;
@@ -1043,6 +1085,7 @@ void Application::performMainStartupAction()
{ {
MinecraftServerTargetPtr serverToJoin = nullptr; MinecraftServerTargetPtr serverToJoin = nullptr;
MinecraftAccountPtr accountToUse = nullptr; MinecraftAccountPtr accountToUse = nullptr;
bool offline = m_offline;
qDebug() << "<> Instance" << m_instanceIdToLaunch << "launching"; qDebug() << "<> Instance" << m_instanceIdToLaunch << "launching";
if(!m_serverToJoin.isEmpty()) if(!m_serverToJoin.isEmpty())
@@ -1061,7 +1104,7 @@ void Application::performMainStartupAction()
qDebug() << " Launching with account" << m_profileToUse; qDebug() << " Launching with account" << m_profileToUse;
} }
launch(inst, true, nullptr, serverToJoin, accountToUse); launch(inst, !offline, nullptr, serverToJoin, accountToUse, m_offlineName);
return; return;
} }
} }
@@ -1134,6 +1177,8 @@ void Application::messageReceived(const QByteArray& message)
QString id = received.args["id"]; QString id = received.args["id"];
QString server = received.args["server"]; QString server = received.args["server"];
QString profile = received.args["profile"]; QString profile = received.args["profile"];
bool offline = received.args["offline_enabled"] == "true";
QString offlineName = received.args["offline_name"];
InstancePtr instance; InstancePtr instance;
if(!id.isEmpty()) { if(!id.isEmpty()) {
@@ -1164,10 +1209,11 @@ void Application::messageReceived(const QByteArray& message)
launch( launch(
instance, instance,
true, !offline,
nullptr, nullptr,
serverObject, serverObject,
accountObject accountObject,
offlineName
); );
} }
else else
@@ -1265,7 +1311,8 @@ bool Application::launch(
bool online, bool online,
BaseProfilerFactory *profiler, BaseProfilerFactory *profiler,
MinecraftServerTargetPtr serverToJoin, MinecraftServerTargetPtr serverToJoin,
MinecraftAccountPtr accountToUse MinecraftAccountPtr accountToUse,
const QString& offlineName
) { ) {
if(m_updateRunning) if(m_updateRunning)
{ {
@@ -1290,6 +1337,7 @@ bool Application::launch(
controller->setServerToJoin(serverToJoin); controller->setServerToJoin(serverToJoin);
controller->setAuthserver(m_authserver); controller->setAuthserver(m_authserver);
controller->setAccountToUse(accountToUse); controller->setAccountToUse(accountToUse);
controller->setOfflineName(offlineName);
if(window) if(window)
{ {
controller->setParentWidget(window); controller->setParentWidget(window);

View File

@@ -155,7 +155,8 @@ public slots:
bool online = true, bool online = true,
BaseProfilerFactory *profiler = nullptr, BaseProfilerFactory *profiler = nullptr,
MinecraftServerTargetPtr serverToJoin = nullptr, MinecraftServerTargetPtr serverToJoin = nullptr,
MinecraftAccountPtr accountToUse = nullptr MinecraftAccountPtr accountToUse = nullptr,
const QString &offlineName = QString()
); );
bool kill(InstancePtr instance); bool kill(InstancePtr instance);
@@ -236,6 +237,8 @@ public:
QString m_instanceIdToLaunch; QString m_instanceIdToLaunch;
QString m_serverToJoin; QString m_serverToJoin;
QString m_profileToUse; QString m_profileToUse;
bool m_offline = false;
QString m_offlineName;
bool m_liveCheck = false; bool m_liveCheck = false;
QUrl m_zipToImport; QUrl m_zipToImport;
std::unique_ptr<QFile> logFile; std::unique_ptr<QFile> logFile;

View File

@@ -29,6 +29,10 @@ public:
m_online = online; m_online = online;
} }
void setOfflineName(const QString &offlineName) {
m_offlineName = offlineName;
}
void setProfiler(BaseProfilerFactory *profiler) { void setProfiler(BaseProfilerFactory *profiler) {
m_profiler = profiler; m_profiler = profiler;
} }
@@ -71,6 +75,7 @@ private slots:
private: private:
BaseProfilerFactory *m_profiler = nullptr; BaseProfilerFactory *m_profiler = nullptr;
bool m_online = true; bool m_online = true;
QString m_offlineName;
InstancePtr m_instance; InstancePtr m_instance;
QWidget * m_parentWidget = nullptr; QWidget * m_parentWidget = nullptr;
InstanceWindow *m_console = nullptr; InstanceWindow *m_console = nullptr;