using System;
using System.IO;
using System.Windows.Forms;
using System.Net;
using System.Diagnostics;
using System.Runtime.InteropServices; // This is to unzip the files downloaded from Dropbox
namespace GMODit
{
public partial class Form1 : Form
{
#region Mouse Capture Code
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;
[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();
#endregion
public Form1()
{
InitializeComponent();
this.password.KeyUp += new KeyEventHandler(password_KeyUp); //necessary for Enter key capture.
this.MouseDown += new MouseEventHandler(Form1_MouseDown); //necessary for mouse capture.
if (Directory.Exists(@"C:\GMODit\.minecraft") == false)
{
Directory.CreateDirectory(@"C:\GMODit\.minecraft");
}
if (File.Exists(@"C:\GMODit\.minecraft\gmoditlastlogin") == false)
{
StreamWriter URaDummyJoel = new StreamWriter(@"C:\GMODit\.minecraft\gmoditlastlogin"); // This creates a blank file
URaDummyJoel.Close(); //I'm a dummy because the lack of this section would cause a crash on the first run. Every. Time.
}
StreamReader loginInfo = new StreamReader(@"C:\GMODit\.minecraft\gmoditlastlogin");
string username;
if ((username = loginInfo.ReadLine()) != null)
{
this.rememberMeBox.Checked = true;
}
string password = loginInfo.ReadLine();
//decode password string using decryption algorithm that I haven't written yet... :'(
this.username.Text = username;
this.password.Text = password;
loginInfo.Close();
}
private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}
private void button1_Click(object sender, EventArgs e)
{
if (rememberMeBox.Checked == true)
{
StreamWriter logininfo = new StreamWriter(@"C:\GMODit\.minecraft\gmoditlastlogin");
logininfo.WriteLine(this.username.Text);
logininfo.WriteLine(this.password.Text);
logininfo.Close();
}
else
{
StreamWriter logininfo = new StreamWriter(@"C:\GMODit\.minecraft\gmoditlastlogin"); // creates blank file; overwrites old file
logininfo.Close();
}
bool ismodded = false;
bool clientExists = false;
string folderlocation = @"C:\GMODIT\.minecraft";
string modlocation = folderlocation + @"\mods";
string coremodlocation = folderlocation + @"\coremods";
string templocation = "c:\\temp\\";
if (Directory.Exists(folderlocation))
{
clientExists = true;
}
if (!Directory.Exists(templocation))
{
Directory.CreateDirectory(templocation);
}
if (File.Exists(folderlocation + "\\version3.modit"))
{
ismodded = true;
}
else
{
//download and extract the three files
if (InternetCheck.Checked == true) //Secret features being planned!
{
WebClient downloader = new WebClient();
label4.Text = "Téléchargement du client...";
this.Update();
downloader.DownloadFile("", templocation + "client.zip");
label4.Text = "Téléchargement des mods...";
this.Update();
downloader.DownloadFile("", templocation + "mods.zip");
label4.Text = "Téléchargement de CoreMods...";
this.Update();
downloader.DownloadFile("", templocation + "coremods.zip");
label4.Text = "Extraction...";
Shell32.Shell sc = new Shell32.Shell();
Directory.CreateDirectory(@"C:\temp\.minecraft");
Shell32.Folder output = sc.NameSpace(@"C:\temp\.minecraft\");
Shell32.Folder input = sc.NameSpace(templocation + "client.zip");
output.CopyHere(input.Items(), 256);
Directory.CreateDirectory(@"C:\temp\.minecraft\mods");
output = sc.NameSpace(@"C:\temp\.minecraft\mods");
input = sc.NameSpace(templocation + "mods.zip");
output.CopyHere(input.Items(), 256);
Directory.CreateDirectory(@"C:\temp\.minecraft\coremods");
output = sc.NameSpace(@"C:\temp\.minecraft\coremods");
input = sc.NameSpace(templocation + "coremods.zip");
output.CopyHere(input.Items(), 256);
label4.Text = "Cleaning up...";
this.Update();
File.Delete(templocation + "client.zip");
File.Delete(templocation + "mods.zip");
File.Delete(templocation + "coremods.zip");
}
else
{
WebClient downloader = new WebClient();
label4.Text = "Téléchargement du client...";
this.Update();
downloader.DownloadFile("", templocation + "client_full.zip");
label4.Text = "Extraction...";
Shell32.Shell sc = new Shell32.Shell();
Directory.CreateDirectory(@"C:\temp\.minecraft");
Shell32.Folder output = sc.NameSpace(@"C:\temp\.minecraft\");
Shell32.Folder input = sc.NameSpace(templocation + "client_full.zip");
output.CopyHere(input.Items(), 256);
label4.Text = "Nettoyage des fichiers Temps...";
File.Delete(templocation + "client_full.zip");
}
new Microsoft.VisualBasic.Devices.Computer().FileSystem.CopyDirectory("C:\\temp\\.minecraft", folderlocation, true);
Directory.Delete("C:\\temp\\.minecraft", true);
clientExists = true;
ismodded = true;
}
if (clientExists && ismodded)
{
bool authed = false;
string user, session = "";
string[] res = verifyUser(username.Text, password.Text, out authed);
if (authed)
{
user = res[2];
session = res[3];
StartMinecraft(user, session);
Application.Exit();
}
}
}
private string[] verifyUser(string username, string password, out bool authed)
{
HttpWebResponse response;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://login.minecraft.net/?user=" + username + "&password=" + password + "&version=13");
try
{
response = (HttpWebResponse)request.GetResponse();
}
catch (Exception)
{
authed = false;
return null;
}
string str = new StreamReader(response.GetResponseStream()).ReadToEnd();
if (str.Contains(":") == false)
{
authed = false;
this.label4.Text = str;
return null;
}
authed = true;
return str.Split(new char[] { ':' });
}
private string GetJavaInstallationPath()
{
string environmentPath = Environment.GetEnvironmentVariable("JAVA_HOME");
if (!string.IsNullOrEmpty(environmentPath))
{
return environmentPath;
}
try
{
string javaKey = "SOFTWARE\\JavaSoft\\Java Runtime Environment\\";
using (Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(javaKey))
{
string currentVersion = rk.GetValue("CurrentVersion").ToString();
using (Microsoft.Win32.RegistryKey key = rk.OpenSubKey(currentVersion))
{
return key.GetValue("JavaHome").ToString();
}
}
}
catch (NullReferenceException)
{
try
{
string javaKey = "Wow6432Node\\SOFTWARE\\JavaSoft\\Java Runtime Environment\\";
using (Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(javaKey))
{
string currentVersion = rk.GetValue("CurrentVersion").ToString();
using (Microsoft.Win32.RegistryKey key = rk.OpenSubKey(currentVersion))
{
return key.GetValue("JavaHome").ToString();
}
}
}
catch (NullReferenceException)
{
MessageBox.Show("Cannot find Java installation. Please reinstall the latest version of Java and try again.", "GMODit Fatal Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return null;
}
}
}
private void StartMinecraft(string username, string session)
{
string installPath = GetJavaInstallationPath();
string filePath = System.IO.Path.Combine(installPath, "bin\\Javaw.exe");
Environment.SetEnvironmentVariable("APPDATA", "C:\\GMODIT\\");
Process process = new Process();
ProcessStartInfo info = new ProcessStartInfo();
string dir = @"C:\GMODIT\.minecraft\bin\";
info.FileName = filePath;
info.CreateNoWindow = true;
info.Arguments = "-cp \"" + dir + "minecraft.jar;" + dir + "lwjgl.jar;" + dir + "lwjgl_util.jar;" + dir + "jinput.jar;\" ";
info.Arguments += "\"-Djava.library.path=" + dir + "natives\" -Xmx1024M -Xms512M net.minecraft.client.Minecraft " + username + " " + session;
process.StartInfo = info;
process.Start();
}
private void Exit_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void password_TextChanged(object sender, EventArgs e)
{
if (password.Text == "")
{
button1.Enabled = false;
}
else
{
button1.Enabled = true;
}
}
private void password_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
button1_Click(null, null);
}
private void label1_Click(object sender, EventArgs e)
{
}
private void groupBox2_Enter(object sender, EventArgs e)
{
}
private void label14_Click(object sender, EventArgs e)
{
}
private void pictureBox1_Click(object sender, EventArgs e)
{
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
}
private void eventLog1_EntryWritten(object sender, EntryWrittenEventArgs e)
{
}
private void eventLog1_EntryWritten_1(object sender, EntryWrittenEventArgs e)
{
}
private void label4_Click(object sender, EventArgs e)
{
}
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
}
}
}