Newer
Older
ultramine_core / src / main / java / Start.java
@vlad20012 vlad20012 on 24 Apr 2014 2 KB [forge 10.12.1.1061] Jenkins build 20
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.Arrays;

import joptsimple.ArgumentAcceptingOptionSpec;
import joptsimple.OptionParser;
import joptsimple.OptionSet;

import net.minecraft.client.Minecraft;
import net.minecraft.client.main.Main;

public class Start
{
	public static void main(String[] args) throws Exception
	{
		int userIndex = -1;
		int passIndex = -1;
		int sessIndex = -1;
		int versIndex = -1;

		for( int x = 0; x < args.length; x++)
		{
			if (args[x].equals("--username"))      userIndex = x + 1;
			else if (args[x].equals("--password")) passIndex = x + 1;
			else if (args[x].equals("--session"))  sessIndex = x + 1;
			else if (args[x].equals("--version"))  versIndex = x + 1;
		}

		if (userIndex != 0-1 && passIndex != -1 && sessIndex == -1)
		{
			String[] session = getSession(args[userIndex], args[passIndex]);
			if (session != null)
			{
				args[userIndex] = session[0];
				args = concat(args, new String[]{"--session", session[1]});
			}
		}
		
		//Kill the password if its there so it isn't printed to the console.
		if (passIndex != -1)
		{
			args[passIndex-1] = "no_password_for_joo";
			args[passIndex] = "no_password_for_joo";
		}

		if (versIndex == -1)
		{
			args = concat(args, new String[]{ "--version", "fml_mcp" });
		}

		Main.main(args);
	}
	
	private static String[] getSession(String username, String password) throws UnsupportedEncodingException
	{
		String parameters = "http://login.minecraft.net/?user=" + URLEncoder.encode(username, "UTF-8") +
				"&password=" + URLEncoder.encode(password, "UTF-8") +
				"&version=" + 13;
		String result = openUrl(parameters);
		
		if (result == null)
		{
			System.out.println("Can't connect to minecraft.net");
			return null;
		}
		
		if (!result.contains(":"))
		{
			System.out.println("Login Failed: " + result);
			return null;
		}
		String[] values = result.split(":");
		return new String[]{ values[2].trim(), values[3].trim() };
	}

	private static String openUrl(String addr)
	{
		try
		{
			URL url = new URL(addr);
			java.io.InputStream is;
			is = url.openConnection().getInputStream();
			java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(is));
			String buf = "";
			String line = null;

			while ((line = reader.readLine()) != null)
			{
				buf += "\n" + line;
			}

			reader.close();
			return buf;
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}

		return null;
	}
	
	private static <T> T[] concat(T[] first, T[] second)
	{
		T[] result = Arrays.copyOf(first, first.length + second.length);
		System.arraycopy(second, 0, result, first.length, second.length);
		return result;
	}
}