startProcess method

Future<MinecraftProcessInfo> startProcess({
  1. required String javaExe,
  2. required List<String> javaArgs,
  3. required String workingDirectory,
  4. required Map<String, String> environment,
  5. required String versionId,
  6. MinecraftAuth? auth,
  7. JavaStdoutCallback? onStdout,
  8. JavaStderrCallback? onStderr,
  9. 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;
}