summaryrefslogtreecommitdiffstats
path: root/logic/minecraft
diff options
context:
space:
mode:
Diffstat (limited to 'logic/minecraft')
-rw-r--r--logic/minecraft/LegacyInstance.cpp6
-rw-r--r--logic/minecraft/LegacyInstance.h2
-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.cpp6
-rw-r--r--logic/minecraft/OneSixInstance.h2
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;