MCPcopy Create free account
hub / github.com/MultiMC/Launcher / executeTask

Method executeTask

launcher/minecraft/launch/DirectJavaLaunch.cpp:29–82  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

27}
28
29void DirectJavaLaunch::executeTask()
30{
31 auto instance = m_parent->instance();
32 std::shared_ptr<MinecraftInstance> minecraftInstance = std::dynamic_pointer_cast<MinecraftInstance>(instance);
33 QStringList args = minecraftInstance->javaArguments();
34
35 args.append("-Djava.library.path=" + minecraftInstance->getNativePath());
36
37 auto classPathEntries = minecraftInstance->getClassPath();
38 args.append("-cp");
39 QString classpath;
40#ifdef Q_OS_WIN32
41 classpath = classPathEntries.join(';');
42#else
43 classpath = classPathEntries.join(':');
44#endif
45 args.append(classpath);
46 args.append(minecraftInstance->getMainClass());
47
48 QString allArgs = args.join(", ");
49 emit logLine("Java Arguments:\n[" + m_parent->censorPrivateInfo(allArgs) + "]\n\n", MessageLevel::Launcher);
50
51 auto javaPath = FS::ResolveExecutable(instance->settings()->get("JavaPath").toString());
52
53 m_process.setProcessEnvironment(instance->createEnvironment());
54
55 // make detachable - this will keep the process running even if the object is destroyed
56 m_process.setDetachable(true);
57
58 auto mcArgs = minecraftInstance->processMinecraftArgs(m_session, m_serverToJoin);
59 args.append(mcArgs);
60
61 QString wrapperCommandStr = instance->getWrapperCommand().trimmed();
62 if(!wrapperCommandStr.isEmpty())
63 {
64 auto wrapperArgs = Commandline::splitArgs(wrapperCommandStr);
65 auto wrapperCommand = wrapperArgs.takeFirst();
66 auto realWrapperCommand = QStandardPaths::findExecutable(wrapperCommand);
67 if (realWrapperCommand.isEmpty())
68 {
69 const char *reason = QT_TR_NOOP("The wrapper command \"%1\" couldn't be found.");
70 emit logLine(QString(reason).arg(wrapperCommand), MessageLevel::Fatal);
71 emitFailed(tr(reason).arg(wrapperCommand));
72 return;
73 }
74 emit logLine("Wrapper command is:\n" + wrapperCommandStr + "\n\n", MessageLevel::Launcher);
75 args.prepend(javaPath);
76 m_process.start(wrapperCommand, wrapperArgs + args);
77 }
78 else
79 {
80 m_process.start(javaPath, args);
81 }
82}
83
84void DirectJavaLaunch::on_state(LoggedProcess::State state)
85{

Callers

nothing calls this directly

Calls 15

ResolveExecutableFunction · 0.85
splitArgsFunction · 0.85
QStringClass · 0.85
javaArgumentsMethod · 0.80
appendMethod · 0.80
getNativePathMethod · 0.80
getClassPathMethod · 0.80
joinMethod · 0.80
censorPrivateInfoMethod · 0.80
setDetachableMethod · 0.80
processMinecraftArgsMethod · 0.80
getWrapperCommandMethod · 0.80

Tested by

no test coverage detected