createClient method

Future<FabricClient> createClient ({@required String rootDir, @required String minecraft_version, @required String fabric_version, String installer_version, int maxRam: 2048, int minRam: 512, Authorization auth })

Implementation

static Future<FabricClient> createClient({@required String rootDir, @required String minecraft_version, @required String fabric_version, String installer_version, int maxRam = 2048, int minRam = 512, Authorization auth}) async {

  if(rootDir == null) throw("No rootDir given");
  if(fabric_version == null) throw("No fabric_version given");
  if(minecraft_version == null) throw("No minecraft_version given");

  String version = "fabric-loader-$fabric_version-$minecraft_version";

  await createDirIfNotExists(rootDir);
  if(!await new Directory(path.join(rootDir, "versions", version)).exists()) {

    print("Setting up $version...");

    await File(path.join(rootDir, "launcher_profiles.json")).writeAsString("{\"profiles\":{}}");

    String jarfile = await downloadInstaller(rootDir, installer_version: installer_version);
    List<String> args = ["-jar", jarfile, "client", "-dir", rootDir];

    if(minecraft_version != null) args.addAll(["-version", minecraft_version]);
    if(fabric_version != null) args.addAll(["-loader", fabric_version]);

    Completer installerFinished = new Completer<String>();
    Process.start(JAVA, args).then((Process process) {
      process.stdout.transform(utf8.decoder).listen((data) { stdout.write(data); });
      process.exitCode.then((code) {
        Future.delayed(Duration(milliseconds: 1000)).then((e) { new Directory("$rootDir/tmp").delete(recursive: true); });
        installerFinished.complete();
      });
    }).catchError((e) {print(e);});

    await installerFinished.future;
  }

  return await new FabricClient._init(handler: await new MinecraftClientPreparer(rootDir), rootDir: rootDir, minecraft_version: minecraft_version, fabric_version: fabric_version, version: version, maxRam: maxRam, minRam: minRam, auth: auth ?? auth)._prepare();

}