diff options
Diffstat (limited to 'logic/minecraft')
-rw-r--r-- | logic/minecraft/LegacyInstance.cpp | 6 | ||||
-rw-r--r-- | logic/minecraft/LegacyInstance.h | 2 | ||||
-rw-r--r-- | logic/minecraft/MinecraftLauncher.cpp (renamed from logic/minecraft/MinecraftProcess.cpp) | 154 | ||||
-rw-r--r-- | logic/minecraft/MinecraftLauncher.h (renamed from logic/minecraft/MinecraftProcess.h) | 15 | ||||
-rw-r--r-- | logic/minecraft/OneSixInstance.cpp | 6 | ||||
-rw-r--r-- | logic/minecraft/OneSixInstance.h | 2 |
6 files changed, 96 insertions, 89 deletions
diff --git a/logic/minecraft/LegacyInstance.cpp b/logic/minecraft/LegacyInstance.cpp index 387975fa..a2b813e2 100644 --- a/logic/minecraft/LegacyInstance.cpp +++ b/logic/minecraft/LegacyInstance.cpp @@ -24,7 +24,7 @@ #include "minecraft/LegacyUpdate.h" #include "icons/IconList.h" -#include "minecraft/MinecraftProcess.h" +#include "minecraft/MinecraftLauncher.h" #include "minecraft/ModList.h" LegacyInstance::LegacyInstance(SettingsObjectPtr globalSettings, SettingsObjectPtr settings, const QString &rootDir) @@ -95,7 +95,7 @@ std::shared_ptr<Task> LegacyInstance::doUpdate() return std::shared_ptr<Task>(new LegacyUpdate(this, this)); } -BaseProcess *LegacyInstance::prepareForLaunch(AuthSessionPtr account) +BaseLauncher *LegacyInstance::prepareForLaunch(AuthSessionPtr account) { QString launchScript; QIcon icon = ENV.icons()->getIcon(iconKey()); @@ -122,7 +122,7 @@ BaseProcess *LegacyInstance::prepareForLaunch(AuthSessionPtr account) launchScript += "lwjgl " + lwjgl + "\n"; launchScript += "launcher legacy\n"; } - auto process = MinecraftProcess::create(std::dynamic_pointer_cast<MinecraftInstance>(getSharedPtr())); + auto process = MinecraftLauncher::create(std::dynamic_pointer_cast<MinecraftInstance>(getSharedPtr())); process->setLaunchScript(launchScript); process->setWorkdir(minecraftRoot()); process->setLogin(account); diff --git a/logic/minecraft/LegacyInstance.h b/logic/minecraft/LegacyInstance.h index 64bcb08b..236771f4 100644 --- a/logic/minecraft/LegacyInstance.h +++ b/logic/minecraft/LegacyInstance.h @@ -111,7 +111,7 @@ public: virtual void setShouldUpdate(bool val) override; virtual std::shared_ptr<Task> doUpdate() override; - virtual BaseProcess *prepareForLaunch(AuthSessionPtr account) override; + virtual BaseLauncher *prepareForLaunch(AuthSessionPtr account) override; virtual void cleanupAfterRun() override; virtual QString getStatusbarDescription() override; diff --git a/logic/minecraft/MinecraftProcess.cpp b/logic/minecraft/MinecraftLauncher.cpp index d0f2a6cc..60fc935f 100644 --- a/logic/minecraft/MinecraftProcess.cpp +++ b/logic/minecraft/MinecraftLauncher.cpp @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#include "minecraft/MinecraftProcess.h" +#include "minecraft/MinecraftLauncher.h" #include "BaseInstance.h" #include <java/JavaChecker.h> #include <MMCStrings.h> @@ -32,19 +32,19 @@ #include "cmdutils.h" // constructor -MinecraftProcess::MinecraftProcess(MinecraftInstancePtr inst) : BaseProcess(inst) +MinecraftLauncher::MinecraftLauncher(MinecraftInstancePtr inst) : BaseLauncher(inst) { } -MinecraftProcess* MinecraftProcess::create(MinecraftInstancePtr inst) +MinecraftLauncher* MinecraftLauncher::create(MinecraftInstancePtr inst) { - auto proc = new MinecraftProcess(inst); + auto proc = new MinecraftLauncher(inst); proc->init(); return proc; } -QString MinecraftProcess::censorPrivateInfo(QString in) +QString MinecraftLauncher::censorPrivateInfo(QString in) { if (!m_session) return in; @@ -67,7 +67,7 @@ QString MinecraftProcess::censorPrivateInfo(QString in) } // console window -MessageLevel::Enum MinecraftProcess::guessLevel(const QString &line, MessageLevel::Enum level) +MessageLevel::Enum MinecraftLauncher::guessLevel(const QString &line, MessageLevel::Enum level) { QRegularExpression re("\\[(?<timestamp>[0-9:]+)\\] \\[[^/]+/(?<level>[^\\]]+)\\]"); auto match = re.match(line); @@ -107,7 +107,7 @@ MessageLevel::Enum MinecraftProcess::guessLevel(const QString &line, MessageLeve return level; } -QMap<QString, QString> MinecraftProcess::getVariables() const +QMap<QString, QString> MinecraftLauncher::getVariables() const { auto mcInstance = std::dynamic_pointer_cast<MinecraftInstance>(m_instance); QMap<QString, QString> out; @@ -120,7 +120,7 @@ QMap<QString, QString> MinecraftProcess::getVariables() const return out; } -QStringList MinecraftProcess::javaArguments() const +QStringList MinecraftLauncher::javaArguments() const { QStringList args; @@ -161,75 +161,83 @@ QStringList MinecraftProcess::javaArguments() const return args; } -void MinecraftProcess::arm() +bool MinecraftLauncher::checkJava(QString JavaPath) +{ + auto realJavaPath = QStandardPaths::findExecutable(JavaPath); + if (realJavaPath.isEmpty()) + { + emit log(tr("The java binary \"%1\" couldn't be found. You may have to set up java " + "if Minecraft fails to launch.").arg(JavaPath), + MessageLevel::Warning); + } + + QFileInfo javaInfo(realJavaPath); + qlonglong javaUnixTime = javaInfo.lastModified().toMSecsSinceEpoch(); + auto storedUnixTime = m_instance->settings()->get("JavaTimestamp").toLongLong(); + // if they are not the same, check! + if(javaUnixTime != storedUnixTime) + { + QEventLoop ev; + auto checker = std::make_shared<JavaChecker>(); + bool successful = false; + QString errorLog; + QString version; + emit log(tr("Checking Java version..."), MessageLevel::MultiMC); + connect(checker.get(), &JavaChecker::checkFinished, + [&](JavaCheckResult result) + { + successful = result.valid; + errorLog = result.errorLog; + version = result.javaVersion; + ev.exit(); + }); + checker->m_path = realJavaPath; + checker->performCheck(); + ev.exec(); + if(!successful) + { + // Error message displayed if java can't start + emit log(tr("Could not start java:"), MessageLevel::Error); + auto lines = errorLog.split('\n'); + for(auto line: lines) + { + emit log(line, MessageLevel::Error); + } + emit log("\nCheck your MultiMC Java settings.", MessageLevel::MultiMC); + m_instance->cleanupAfterRun(); + emit launch_failed(m_instance); + // not running, failed + m_instance->setRunning(false); + return false; + } + emit log(tr("Java version is %1!\n").arg(version), MessageLevel::MultiMC); + m_instance->settings()->set("JavaVersion", version); + m_instance->settings()->set("JavaTimestamp", javaUnixTime); + } + return true; +} + +void MinecraftLauncher::arm() { printHeader(); - emit log("Minecraft folder is:\n" + workingDirectory() + "\n\n"); + emit log("Minecraft folder is:\n" + m_process.workingDirectory() + "\n\n"); + /* if (!preLaunch()) { emit ended(m_instance, 1, QProcess::CrashExit); return; } + */ m_instance->setLastLaunch(); QString JavaPath = m_instance->settings()->get("JavaPath").toString(); emit log("Java path is:\n" + JavaPath + "\n\n"); - auto realJavaPath = QStandardPaths::findExecutable(JavaPath); - if (realJavaPath.isEmpty()) + if(!checkJava(JavaPath)) { - emit log(tr("The java binary \"%1\" couldn't be found. You may have to set up java " - "if Minecraft fails to launch.").arg(JavaPath), - MessageLevel::Warning); - } - - // check java version here. - { - QFileInfo javaInfo(realJavaPath); - qlonglong javaUnixTime = javaInfo.lastModified().toMSecsSinceEpoch(); - auto storedUnixTime = m_instance->settings()->get("JavaTimestamp").toLongLong(); - // if they are not the same, check! - if(javaUnixTime != storedUnixTime) - { - QEventLoop ev; - auto checker = std::make_shared<JavaChecker>(); - bool successful = false; - QString errorLog; - QString version; - emit log(tr("Checking Java version..."), MessageLevel::MultiMC); - connect(checker.get(), &JavaChecker::checkFinished, - [&](JavaCheckResult result) - { - successful = result.valid; - errorLog = result.errorLog; - version = result.javaVersion; - ev.exit(); - }); - checker->m_path = realJavaPath; - checker->performCheck(); - ev.exec(); - if(!successful) - { - // Error message displayed if java can't start - emit log(tr("Could not start java:"), MessageLevel::Error); - auto lines = errorLog.split('\n'); - for(auto line: lines) - { - emit log(line, MessageLevel::Error); - } - emit log("\nCheck your MultiMC Java settings.", MessageLevel::MultiMC); - m_instance->cleanupAfterRun(); - emit launch_failed(m_instance); - // not running, failed - m_instance->setRunning(false); - return; - } - emit log(tr("Java version is %1!\n").arg(version), MessageLevel::MultiMC); - m_instance->settings()->set("JavaVersion", version); - m_instance->settings()->set("JavaTimestamp", javaUnixTime); - } + return; } QStringList args = javaArguments(); @@ -250,14 +258,15 @@ void MinecraftProcess::arm() } emit log("Wrapper command is:\n" + wrapperCommand + "\n\n"); args.prepend(JavaPath); - start(wrapperCommand, args); + m_process.start(wrapperCommand, args); } else { - start(JavaPath, args); + m_process.start(JavaPath, args); } - if (!waitForStarted()) + // instantiate the launcher part + if (!m_process.waitForStarted()) { //: Error message displayed if instace can't start emit log(tr("Could not launch minecraft!"), MessageLevel::Error); @@ -268,23 +277,20 @@ void MinecraftProcess::arm() return; } - emit log(tr("Minecraft process ID: %1\n\n").arg(processId()), MessageLevel::MultiMC); + emit log(tr("Minecraft process ID: %1\n\n").arg(m_process.processId()), MessageLevel::MultiMC); // send the launch script to the launcher part - QByteArray bytes = launchScript.toUtf8(); - writeData(bytes.constData(), bytes.length()); + m_process.write(launchScript.toUtf8()); } -void MinecraftProcess::launch() +void MinecraftLauncher::launch() { QString launchString("launch\n"); - QByteArray bytes = launchString.toUtf8(); - writeData(bytes.constData(), bytes.length()); + m_process.write(launchString.toUtf8()); } -void MinecraftProcess::abort() +void MinecraftLauncher::abort() { QString launchString("abort\n"); - QByteArray bytes = launchString.toUtf8(); - writeData(bytes.constData(), bytes.length()); + m_process.write(launchString.toUtf8()); } diff --git a/logic/minecraft/MinecraftProcess.h b/logic/minecraft/MinecraftLauncher.h index 34c02b77..1c870e84 100644 --- a/logic/minecraft/MinecraftProcess.h +++ b/logic/minecraft/MinecraftLauncher.h @@ -19,20 +19,20 @@ #include <QString> #include "minecraft/MinecraftInstance.h" -#include "BaseProcess.h" +#include "BaseLauncher.h" /** - * The MinecraftProcess class + * The MinecraftLauncher class */ -class MinecraftProcess : public BaseProcess +class MinecraftLauncher : public BaseLauncher { Q_OBJECT protected: - MinecraftProcess(MinecraftInstancePtr inst); + MinecraftLauncher(MinecraftInstancePtr inst); public: - static MinecraftProcess *create(MinecraftInstancePtr inst); + static MinecraftLauncher *create(MinecraftInstancePtr inst); - virtual ~MinecraftProcess(){}; + virtual ~MinecraftLauncher(){}; /** * @brief start the launcher part with the provided launch script @@ -69,8 +69,9 @@ protected: QString launchScript; QString m_nativeFolder; +protected: + bool checkJava(QString path); virtual QMap<QString, QString> getVariables() const override; - QStringList javaArguments() const; virtual QString censorPrivateInfo(QString in) override; virtual MessageLevel::Enum guessLevel(const QString &message, MessageLevel::Enum defaultLevel) override; diff --git a/logic/minecraft/OneSixInstance.cpp b/logic/minecraft/OneSixInstance.cpp index b7937e31..ed757fd5 100644 --- a/logic/minecraft/OneSixInstance.cpp +++ b/logic/minecraft/OneSixInstance.cpp @@ -22,7 +22,7 @@ #include "minecraft/OneSixUpdate.h" #include "minecraft/MinecraftProfile.h" #include "minecraft/VersionBuildError.h" -#include "minecraft/MinecraftProcess.h" +#include "minecraft/MinecraftLauncher.h" #include "minecraft/OneSixProfileStrategy.h" #include "MMCZip.h" @@ -123,7 +123,7 @@ QStringList OneSixInstance::processMinecraftArgs(AuthSessionPtr session) return parts; } -BaseProcess *OneSixInstance::prepareForLaunch(AuthSessionPtr session) +BaseLauncher *OneSixInstance::prepareForLaunch(AuthSessionPtr session) { QString launchScript; QIcon icon = ENV.icons()->getIcon(iconKey()); @@ -230,7 +230,7 @@ BaseProcess *OneSixInstance::prepareForLaunch(AuthSessionPtr session) } launchScript += "launcher onesix\n"; - auto process = MinecraftProcess::create(std::dynamic_pointer_cast<MinecraftInstance>(getSharedPtr())); + auto process = MinecraftLauncher::create(std::dynamic_pointer_cast<MinecraftInstance>(getSharedPtr())); process->setLaunchScript(launchScript); process->setWorkdir(minecraftRoot()); process->setLogin(session); diff --git a/logic/minecraft/OneSixInstance.h b/logic/minecraft/OneSixInstance.h index dd5ddf5e..5c71687d 100644 --- a/logic/minecraft/OneSixInstance.h +++ b/logic/minecraft/OneSixInstance.h @@ -49,7 +49,7 @@ public: virtual QString instanceConfigFolder() const override; virtual std::shared_ptr<Task> doUpdate() override; - virtual BaseProcess *prepareForLaunch(AuthSessionPtr account) override; + virtual BaseLauncher *prepareForLaunch(AuthSessionPtr account) override; virtual void cleanupAfterRun() override; |