start method

Future<VanillaClient> start ()
override

Implementation

Future<VanillaClient> start() async {
  String nativePath = resolvePath("$rootDir/natives/$version");

  // Jvm
  List<String> jvm = [
    '-XX:-UseAdaptiveSizePolicy',
    '-XX:-OmitStackTraceInFastThrow',
    '-Dfml.ignorePatchDiscrepancies=true',
    '-Dfml.ignoreInvalidMinecraftCertificates=true',
    '-Djava.library.path=${nativePath}',
    '-Xmx${maxRam}M',
    '-Xms${minRam}M',
  ];

  jvm.add(await this.handler.getJVM());
  String mcPath = await handler.getJar();
  List<String> classes = await handler.getClasses();
  List<String> classPaths = ['-cp'];
  String separator = this.handler.getOS() == "windows" ? ";" : ":";
  String jar = (await File(mcPath).exists()) ? '${mcPath}${separator}' : '';
  classPaths.add('${jar}${classes.join(separator)}');
  classPaths.add('net.minecraft.client.main.Main');

  List<String> args = [];

  args.addAll(jvm);
  args.addAll(classPaths);

  this.handler.getLaunchOptions(auth: auth).forEach((e) {
    args.add(e);
  });

  //print("$JAVAW ${args.join(" ")}");
  this.process = await Process.start(JAVAW, args, workingDirectory: this.rootDir);
  this.process.stdout.transform(utf8.decoder).listen((data) { this.onStdOut.forEach((e) { e(data); }); });
  this.process.stderr.transform(utf8.decoder).listen((data) { this.onStdErr.forEach((e) { e(data); }); });
  this.process.exitCode.then((code) {
    process = null;
  });

  return this;
}