Package com.kokakiwi.mclauncher

Source Code of com.kokakiwi.mclauncher.MCLauncher

package com.kokakiwi.mclauncher;

import java.lang.reflect.Constructor;
import java.util.ArrayList;

import javax.swing.UIManager;

import com.kokakiwi.mclauncher.api.LauncherAPI;
import com.kokakiwi.mclauncher.api.ui.Theme;
import com.kokakiwi.mclauncher.core.Launcher;
import com.kokakiwi.mclauncher.core.Loginer;
import com.kokakiwi.mclauncher.core.TimeLine;
import com.kokakiwi.mclauncher.core.Updater;
import com.kokakiwi.mclauncher.core.launcher.LauncherApplet;
import com.kokakiwi.mclauncher.ui.LauncherFrame;
import com.kokakiwi.mclauncher.ui.simple.SimpleTheme;
import com.kokakiwi.mclauncher.utils.Configuration;
import com.kokakiwi.mclauncher.utils.MCLogger;

public class MCLauncher
{
    // Components
    private Configuration config;
    private LauncherAPI   api;
    private LauncherFrame frame;
   
    private Theme         theme;
   
    // Core
    private TimeLine      timeLine;
    private Loginer       loginer;
    private Updater       updater;
    private Launcher      launcher;
   
    public MCLauncher(String[] args)
    {
        instance = this;
        MCLogger.register();
        // Minecraft Forge Mod Loader property.
        System.setProperty("minecraft.applet.WrapperClass",
                LauncherApplet.class.getCanonicalName());
       
        try
        {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        }
        catch (final Exception e)
        {
            e.printStackTrace();
        }
       
        init(args);
    }
   
    private void init(String[] args)
    {
        config = Configuration.getLauncherConfiguration();
       
        timeLine = new TimeLine(this);
        loginer = new Loginer(this);
        updater = new Updater(this);
        launcher = new Launcher(this);
       
        api = new LauncherAPI(this);
        frame = new LauncherFrame(this);
       
        loadTheme();
       
        timeLine.init();
        frame.init();
        loginer.init();
       
        parseArguments(args);
    }
   
    @SuppressWarnings("unchecked")
    private void loadTheme()
    {
        try
        {
            final Class<? extends Theme> clazz = (Class<? extends Theme>) MCLauncher.class
                    .getClassLoader().loadClass(
                            config.getString("window.theme"));
            final Constructor<? extends Theme> constructor = clazz
                    .getConstructor();
            theme = constructor.newInstance();
           
            System.out.println("Using custom theme '" + clazz.getSimpleName()
                    + "'...");
        }
        catch (final Exception e)
        {
            theme = new SimpleTheme();
        }
       
        theme.onLoad(api);
    }
   
    private void parseArguments(String[] args)
    {
        if (args.length > 0)
        {
            config.set("username", args[0]);
            if (args.length > 1)
            {
                config.set("password", args[1]);
                if (args.length > 2)
                {
                    String ip = args[2];
                    String port = "25565";
                   
                    if (ip.contains(":"))
                    {
                        final String[] split = ip.split(":");
                        ip = split[0];
                        port = split[1];
                    }
                   
                    config.set("server", ip);
                    config.set("port", port);
                }
            }
        }
    }
   
    public void start()
    {
        timeLine.start();
        frame.setVisible(true);
    }
   
    public void stop()
    {
        frame.setVisible(false);
        new Thread(new Runnable() {
           
            public void run()
            {
                try
                {
                    Thread.sleep(500L);
                }
                catch (final InterruptedException e)
                {
                    e.printStackTrace();
                }
               
                System.exit(0);
            }
        }).start();
        System.exit(0);
    }
   
    // Getter / Setter
   
    public Configuration getConfig()
    {
        return config;
    }
   
    public Loginer getLoginer()
    {
        return loginer;
    }
   
    public Updater getUpdater()
    {
        return updater;
    }
   
    public Launcher getLauncher()
    {
        return launcher;
    }
   
    public LauncherAPI getApi()
    {
        return api;
    }
   
    public TimeLine getTimeLine()
    {
        return timeLine;
    }
   
    public LauncherFrame getFrame()
    {
        return frame;
    }
   
    public Theme getTheme()
    {
        return theme;
    }
   
    // INSTANCE
   
    private static MCLauncher instance = null;
   
    // Main Class methods
   
    public static MCLauncher getInstance()
    {
        return instance;
    }
   
    public final static long MIN_HEAP         = 511;
   
    public final static long RECOMMENDED_HEAP = 1024;
   
    public static void main(String[] args)
    {
        final float heapSizeMegs = Runtime.getRuntime().maxMemory() / 1024L / 1024L;
        boolean start = false;
        if (heapSizeMegs > MIN_HEAP || !start)
        {
            start = true;
        }
        else
        {
            try
            {
                final String pathToJar = MCLauncher.class.getProtectionDomain()
                        .getCodeSource().getLocation().toURI().getPath();
               
                final ArrayList<String> params = new ArrayList<String>();
               
                params.add("javaw");
                params.add("-Xmx" + Long.toString(RECOMMENDED_HEAP) + "m");
                params.add("-Dsun.java2d.noddraw=true");
                params.add("-Dsun.java2d.d3d=false");
                params.add("-Dsun.java2d.opengl=false");
                params.add("-Dsun.java2d.pmoffscreen=false");
               
                params.add("-classpath");
                params.add(pathToJar);
                params.add("com.kokakiwi.mclauncher.MCLauncher");
                final ProcessBuilder pb = new ProcessBuilder(params);
                final Process process = pb.start();
                if (process == null)
                {
                    throw new Exception("!");
                }
                System.exit(0);
            }
            catch (final Exception e)
            {
                e.printStackTrace();
                start = true;
            }
        }
       
        if (start)
        {
            final MCLauncher main = new MCLauncher(args);
            main.start();
        }
    }
   
}
TOP

Related Classes of com.kokakiwi.mclauncher.MCLauncher

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.