startProcess method
Future<MinecraftProcessInfo>
startProcess({
- required String javaExe,
- required List<
String> javaArgs, - required String workingDirectory,
- required Map<
String, String> environment, - required String versionId,
- MinecraftAuth? auth,
- JavaStdoutCallback? onStdout,
- JavaStderrCallback? onStderr,
- JavaExitCallback? onExit,
Starts a new Minecraft process.
javaExe
- Path to the Java executable
javaArgs
- Arguments to pass to Java
workingDirectory
- Working directory for the process
environment
- Environment variables for the process
versionId
- Version of Minecraft to run
auth
- Optional authentication details
onStdout
- Optional callback for standard output
onStderr
- Optional callback for standard error
onExit
- Optional callback for when the process exits
Returns information about the started process.
Implementation
Future<MinecraftProcessInfo> startProcess({
required String javaExe,
required List<String> javaArgs,
required String workingDirectory,
required Map<String, String> environment,
required String versionId,
MinecraftAuth? auth,
JavaStdoutCallback? onStdout,
JavaStderrCallback? onStderr,
JavaExitCallback? onExit,
}) async {
final process = await Process.start(
javaExe,
javaArgs,
workingDirectory: workingDirectory,
environment: environment,
);
final processInfo = MinecraftProcessInfo(
pid: process.pid,
versionId: versionId,
process: process,
auth: auth,
);
_runningProcesses[process.pid] = processInfo;
if (onStdout != null) {
process.stdout.listen((data) {
final output = utf8.decode(data, allowMalformed: true);
debugPrint('Minecraft stdout [${process.pid}]: $output');
onStdout(output);
});
} else {
process.stdout.listen((data) {
debugPrint(
'Minecraft stdout [${process.pid}]: ${utf8.decode(data, allowMalformed: true)}',
);
});
}
if (onStderr != null) {
process.stderr.listen((data) {
final output = utf8.decode(data, allowMalformed: true);
debugPrint('Minecraft stderr [${process.pid}]: $output');
onStderr(output);
});
} else {
process.stderr.listen((data) {
debugPrint(
'Minecraft stderr [${process.pid}]: ${utf8.decode(data, allowMalformed: true)}',
);
});
}
process.exitCode.then((exitCode) {
debugPrint(
'Minecraft process ${process.pid} exited with code: $exitCode',
);
_runningProcesses.remove(process.pid);
if (onExit != null) {
onExit(exitCode);
}
});
debugPrint(
'Minecraft process started: PID=${process.pid}, User=${auth?.userName ?? "anonymous"}, Version=$versionId',
);
return processInfo;
}