using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
using System.Diagnostics;
using Ionic.Zip;
class Runs {
static string assetIndex = "";
static string clientjar;
static void Main(string[] args) {
string clientdir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\.minecraft\";
string client = "1.10.2";
string user = "zenit";
string uuid = "00000000000000000000000000000000";
string session = "0";
start(clientdir, client, user, uuid, session);
}
static void start(string clientdir, string client, string user, string uuid, string session) {
string nfolder = clientdir + @"versions\" + client + @"\natives";
Directory.CreateDirectory(nfolder);
clientjar = client;
JObject versions = json(clientdir, client);
assetInd(versions);
JArray libraries = (JArray)versions["libraries"];
string assetsdir = "assets";
string gameassets = assetsdir + @"\virtual\legacy";
string url = @"-Djava.library.path=versions\" + client + @"\natives -cp ";
url = libs(libraries, url, clientdir, client, client);
url += @"versions\" + clientjar + @"\" + clientjar + ".jar ";
url += (string)versions["mainClass"] + " ";
url += versions["minecraftArguments"].ToString().
Replace("${auth_player_name}", user).
Replace("${version_name}", client).
Replace("${game_directory}", ".").
Replace("${assets_root}", assetsdir).
Replace("${game_assets}", gameassets).
Replace("${assets_index_name}", assetIndex).
Replace("${auth_uuid}", uuid).
Replace("${auth_access_token}", session).
Replace("${user_type}", "legacy").
Replace("${version_type}", "release").
Replace("${user_properties}", "{}");
ProcessStartInfo Info = new ProcessStartInfo("java");
Info.Arguments = url;
Info.WorkingDirectory = clientdir;
Info.UseShellExecute = false;
Info.RedirectStandardOutput = true;
Info.RedirectStandardError = true;
Process process = new Process();
process.StartInfo = Info;
Action<object, DataReceivedEventArgs> actionWrite = (sender, e) =>
{
Console.WriteLine(e.Data);
};
process.ErrorDataReceived += (sender, e) => actionWrite(sender, e);
process.OutputDataReceived += (sender, e) => actionWrite(sender, e);
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
}
static string libs(JArray libraries, string url, string clientdir, string client, string n) {
foreach (var librari in libraries) {
string[] libdir = librari["name"].ToString().Split(':');
string libsdir = @"libraries\"+libdir[0].Replace(".", @"\")+@"\"+libdir[1]+@"\"+libdir[2]+@"\"+libdir[1]+"-"+libdir[2];
if (librari["natives"]==null) {
url += libsdir+ ".jar;";
} else {
string natives = clientdir + libsdir + "-natives-windows.jar";
string nfolder = clientdir + @"versions\" + n + @"\natives\";
unzip(natives, nfolder);
}
}
JObject versions = json(clientdir, client);
string inheritsFrom = (string)versions["inheritsFrom"];
if (versions["jar"] != null) {
clientjar = (string)versions["jar"];
}
if (inheritsFrom !=null) {
versions = json(clientdir, inheritsFrom);
libraries = (JArray)versions["libraries"];
return url += libs(libraries, url, clientdir, inheritsFrom, n);
}
assetInd((JObject)versions["assetIndex"]);
return url;
}
static JObject json(string clientdir, string client) {
string json = clientdir + @"versions\" + client + @"\" + client + ".json";
return JObject.Parse(File.ReadAllText(json));
}
static string assetInd(JObject versions) {
if (versions["assetIndex"] != null) {
assetIndex = (string)versions["assetIndex"]["id"];
}
else if (versions["assets"] != null) {
assetIndex = (string)versions["assets"];
}
return assetIndex;
}
static void unzip(string zipdfile, string zipfolder) {
try {
using (ZipFile zip = ZipFile.Read(zipdfile)) {
foreach (ZipEntry ef in zip) {
zip.ExtractAll(zipfolder, ExtractExistingFileAction.OverwriteSilently);
}
}
}
catch {}
}
}