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;
}