sneedmc/launcher/MCFrame.java

123 lines
2.9 KiB
Java

//
// Copyright 2012 MultiMC Contributors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
import net.minecraft.Launcher;
import java.applet.Applet;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.net.MalformedURLException;
import java.net.URL;
import java.io.IOException;
import java.io.File;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
public class MCFrame extends Frame implements WindowListener
{
private Launcher appletWrap = null;
public MCFrame(String title)
{
super(title);
BufferedImage image = null;
try
{
image = ImageIO.read(new File("icon.png"));
setIconImage(image);
}
catch (IOException e)
{
e.printStackTrace();
}
this.addWindowListener(this);
}
public void start(Applet mcApplet, String user, String session, Dimension winSize, boolean maximize)
{
try
{
appletWrap = new Launcher(mcApplet, new URL("http://www.minecraft.net/game"));
}
catch (MalformedURLException ignored){}
appletWrap.setParameter("username", user);
appletWrap.setParameter("sessionid", session);
appletWrap.setParameter("stand-alone", "true"); // Show the quit button.
mcApplet.setStub(appletWrap);
this.add(appletWrap);
appletWrap.setPreferredSize(winSize);
this.pack();
this.setLocationRelativeTo(null);
this.setResizable(true);
if (maximize)
this.setExtendedState(MAXIMIZED_BOTH);
validate();
appletWrap.init();
appletWrap.start();
setVisible(true);
}
@Override
public void windowActivated(WindowEvent e) {}
@Override
public void windowClosed(WindowEvent e) {}
@Override
public void windowClosing(WindowEvent e)
{
new Thread()
{
public void run()
{
try
{
Thread.sleep(30000L);
} catch (InterruptedException localInterruptedException)
{
localInterruptedException.printStackTrace();
}
System.out.println("FORCING EXIT!");
System.exit(0);
}
}
.start();
if (appletWrap != null)
{
appletWrap.stop();
appletWrap.destroy();
}
// old minecraft versions can hang without this >_<
System.exit(0);
}
@Override
public void windowDeactivated(WindowEvent e) {}
@Override
public void windowDeiconified(WindowEvent e) {}
@Override
public void windowIconified(WindowEvent e) {}
@Override
public void windowOpened(WindowEvent e) {}
}