diff options
author | Petr Mrázek <peterix@gmail.com> | 2015-07-21 02:38:15 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2015-07-21 02:38:15 +0200 |
commit | 61c5a67777a6f7639c9d2f36b14f7a903bdfc5a0 (patch) | |
tree | ce1e124a44f48d221d40c5534e438ef60491831c /logic/minecraft/OneSixInstance.cpp | |
parent | 8e7caf4e25dc3f56877a504c45d157860215496b (diff) | |
download | MultiMC-61c5a67777a6f7639c9d2f36b14f7a903bdfc5a0.tar MultiMC-61c5a67777a6f7639c9d2f36b14f7a903bdfc5a0.tar.gz MultiMC-61c5a67777a6f7639c9d2f36b14f7a903bdfc5a0.tar.lz MultiMC-61c5a67777a6f7639c9d2f36b14f7a903bdfc5a0.tar.xz MultiMC-61c5a67777a6f7639c9d2f36b14f7a903bdfc5a0.zip |
GH-1053 explode launch task into many small steps, each a Task
Diffstat (limited to 'logic/minecraft/OneSixInstance.cpp')
-rw-r--r-- | logic/minecraft/OneSixInstance.cpp | 65 |
1 files changed, 62 insertions, 3 deletions
diff --git a/logic/minecraft/OneSixInstance.cpp b/logic/minecraft/OneSixInstance.cpp index d66236f4..5e2f5c64 100644 --- a/logic/minecraft/OneSixInstance.cpp +++ b/logic/minecraft/OneSixInstance.cpp @@ -23,6 +23,12 @@ #include "minecraft/MinecraftProfile.h" #include "minecraft/VersionBuildError.h" #include "launch/LaunchTask.h" +#include <launch/steps/PreLaunchCommand.h> +#include <launch/steps/Update.h> +#include <launch/steps/LaunchCommand.h> +#include <launch/steps/PostLaunchCommand.h> +#include <launch/steps/TextPrint.h> +#include <launch/steps/ModMinecraftJar.h> #include "minecraft/OneSixProfileStrategy.h" #include "MMCZip.h" @@ -231,9 +237,62 @@ std::shared_ptr<LaunchTask> OneSixInstance::createLaunchTask(AuthSessionPtr sess launchScript += "launcher onesix\n"; auto process = LaunchTask::create(std::dynamic_pointer_cast<MinecraftInstance>(getSharedPtr())); - process->setLaunchScript(launchScript); - process->setWorkdir(minecraftRoot()); - process->setLogin(session); + auto pptr = process.get(); + + // print a header + { + process->appendStep(std::make_shared<TextPrint>(pptr, "Minecraft folder is:\n" + minecraftRoot() + "\n\n", MessageLevel::MultiMC)); + } + // run pre-launch command if that's needed + if(getPreLaunchCommand().size()) + { + auto step = std::make_shared<PreLaunchCommand>(pptr); + step->setWorkingDirectory(minecraftRoot()); + process->appendStep(step); + } + // if we aren't in offline mode,. + if(session->status != AuthSession::PlayableOffline) + { + process->appendStep(std::make_shared<Update>(pptr)); + } + // if there are any jar mods + if(getJarMods().size()) + { + auto step = std::make_shared<ModMinecraftJar>(pptr); + process->appendStep(step); + } + // actually launch the game + { + auto step = std::make_shared<LaunchCommand>(pptr); + step->setWorkingDirectory(minecraftRoot()); + step->setLaunchScript(launchScript); + process->appendStep(step); + } + // run post-exit command if that's needed + if(getPostExitCommand().size()) + { + auto step = std::make_shared<PostLaunchCommand>(pptr); + step->setWorkingDirectory(minecraftRoot()); + process->appendStep(step); + } + if (session) + { + QMap<QString, QString> filter; + if (session->session != "-") + filter[session->session] = tr("<SESSION ID>"); + filter[session->access_token] = tr("<ACCESS TOKEN>"); + filter[session->client_token] = tr("<CLIENT TOKEN>"); + filter[session->uuid] = tr("<PROFILE ID>"); + filter[session->player_name] = tr("<PROFILE NAME>"); + + auto i = session->u.properties.begin(); + while (i != session->u.properties.end()) + { + filter[i.value()] = "<" + i.key().toUpper() + ">"; + ++i; + } + process->setCensorFilter(filter); + } return process; } |