MCPcopy Create free account
hub / github.com/PolyMC/PolyMC / executeTask

Method executeTask

launcher/minecraft/launch/DirectJavaLaunch.cpp:36–100  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

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
censorPrivateInfoMethod · 0.80
setDetachableMethod · 0.80
processMinecraftArgsMethod · 0.80
getWrapperCommandMethod · 0.80

Tested by

no test coverage detected