import java.awt.Dimension;
import java.awt.TextField;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
public class Launch {
List<URL> url = new ArrayList<URL>();
URLClassLoader cl;
String Class = null;
public Launch() {
initComponents();
}
private static JFrame frame;
private TextField username;
private void initComponents() {
frame = new JFrame("Launcher");
frame.setSize(156, 100);
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
int x = (int) ((dimension.getWidth() - frame.getWidth()) / 2);
int y = (int) ((dimension.getHeight() - frame.getHeight()) / 2);
frame.setLocation(x, y);
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
username = new TextField();
username.setLocation(17, 10);
username.setSize(120, 25);
JButton button = new JButton("Играть");
button.setVisible(true);
button.setLocation(17, 40);
button.setSize(120, 25);
frame.getContentPane().add(username);
frame.getContentPane().add(button);
frame.getContentPane().add(new JLabel());
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String nickname = username.getText();
Pattern p = Pattern.compile("^[a-zA-Z0-9_-]{2,16}$");
Matcher m = p.matcher(nickname);
List<String> params = new ArrayList<String>();
boolean b = m.matches();
if (nickname.isEmpty()) {
JOptionPane.showMessageDialog(frame, "Введите ник!", "", javax.swing.JOptionPane.WARNING_MESSAGE);
return;
} else if (b==false) {
JOptionPane.showMessageDialog(frame, "Ник должен содержать только латинские буквы и цифры 2-16 символов!", "", javax.swing.JOptionPane.ERROR_MESSAGE);
return;
} else {
File Dir = new File(".");
System.out.println("Путь до папки с клиентом -> "+Dir.getAbsolutePath());
if (!new File(Dir.getAbsolutePath()+"/natives").exists()) new File(Dir.getAbsolutePath()+"/natives").mkdirs(); //Папка с нативами
try {
url.addAll(getLibs(new File(Dir.getAbsolutePath()+"/versions"))); //Папка с клиентом
url.addAll(getLibs(new File(Dir.getAbsolutePath()+"/libraries"))); //Папка с либами
} catch (Exception x) {
JOptionPane.showMessageDialog(frame, "Неправильный путь к клиенту!", "", javax.swing.JOptionPane.ERROR_MESSAGE);
return;
}
cl = new URLClassLoader(url.toArray(new URL[url.size()]));
System.out.println("Список загруженных jar ->"+url);
System.setProperty("fml.ignoreInvalidMinecraftCertificates", "true");
System.setProperty("fml.ignorePatchDiscrepancies", "true");
System.setProperty("org.lwjgl.librarypath", Dir.getAbsolutePath()+"/natives");
System.setProperty("net.java.games.input.librarypath", Dir.getAbsolutePath()+"/natives");
System.setProperty("java.library.path", Dir.getAbsolutePath()+"/natives");
try {
cl.loadClass("
[QUOTE="alexandrage, post: 945059, member: 1987"]TrueBat
[code=java]import java.awt.Dimension;
import java.awt.TextField;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
public class Launch {
List<URL> url = new ArrayList<URL>();
URLClassLoader cl;
String Class = null;
public Launch() {
initComponents();
}
private static JFrame frame;
private TextField username;
private void initComponents() {
frame = new JFrame("Launcher");
frame.setSize(156, 100);
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
int x = (int) ((dimension.getWidth() - frame.getWidth()) / 2);
int y = (int) ((dimension.getHeight() - frame.getHeight()) / 2);
frame.setLocation(x, y);
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
username = new TextField();
username.setLocation(17, 10);
username.setSize(120, 25);
JButton button = new JButton("Играть");
button.setVisible(true);
button.setLocation(17, 40);
button.setSize(120, 25);
frame.getContentPane().add(username);
frame.getContentPane().add(button);
frame.getContentPane().add(new JLabel());
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String nickname = username.getText();
Pattern p = Pattern.compile("^[a-zA-Z0-9_-]{2,16}$");
Matcher m = p.matcher(nickname);
List<String> params = new ArrayList<String>();
boolean b = m.matches();
if (nickname.isEmpty()) {
JOptionPane.showMessageDialog(frame, "Введите ник!", "", javax.swing.JOptionPane.WARNING_MESSAGE);
return;
} else if (b==false) {
JOptionPane.showMessageDialog(frame, "Ник должен содержать только латинские буквы и цифры 2-16 символов!", "", javax.swing.JOptionPane.ERROR_MESSAGE);
return;
} else {
File Dir = new File(".");
System.out.println("Путь до папки с клиентом -> "+Dir.getAbsolutePath());
if (!new File(Dir.getAbsolutePath()+"/natives").exists()) new File(Dir.getAbsolutePath()+"/natives").mkdirs(); //Папка с нативами
try {
url.addAll(getLibs(new File(Dir.getAbsolutePath()+"/versions"))); //Папка с клиентом
url.addAll(getLibs(new File(Dir.getAbsolutePath()+"/libraries"))); //Папка с либами
} catch (Exception x) {
JOptionPane.showMessageDialog(frame, "Неправильный путь к клиенту!", "", javax.swing.JOptionPane.ERROR_MESSAGE);
return;
}
cl = new URLClassLoader(url.toArray(new URL[url.size()]));
System.out.println("Список загруженных jar ->"+url);
System.setProperty("fml.ignoreInvalidMinecraftCertificates", "true");
System.setProperty("fml.ignorePatchDiscrepancies", "true");
System.setProperty("org.lwjgl.librarypath", Dir.getAbsolutePath()+"/natives");
System.setProperty("net.java.games.input.librarypath", Dir.getAbsolutePath()+"/natives");
System.setProperty("java.library.path", Dir.getAbsolutePath()+"/natives");
try {
cl.loadClass("com.mojang.authlib.Agent");
params.add("--accessToken");
params.add("1");
params.add("--uuid");
params.add("12345");
params.add("--userProperties");
params.add("{}");
params.add("--assetIndex");
params.add("1.7.4");
} catch (ClassNotFoundException x) {
params.add("--session");
params.add("1");
}
params.add("--username");
params.add(nickname);
params.add("--version");
params.add("1.7.4");
params.add("--gameDir");
params.add(Dir.getAbsolutePath()+"/");
params.add("--assetsDir");
params.add(Dir.getAbsolutePath()+"/assets");
}
boolean tweakClass = false;
try {
cl.loadClass("com.mumfrey.liteloader.launch.LiteLoaderTweaker");
params.add("--tweakClass");
params.add("com.mumfrey.liteloader.launch.LiteLoaderTweaker");
tweakClass = true;
} catch (ClassNotFoundException x) {}
try {
cl.loadClass("cpw.mods.fml.common.launcher.FMLTweaker");
params.add("--tweakClass");
params.add("cpw.mods.fml.common.launcher.FMLTweaker");
tweakClass = true;
} catch (ClassNotFoundException x) {}
if(tweakClass)
{
Class = "net.minecraft.launchwrapper.Launch";
} else {
Class = "net.minecraft.client.main.Main";
}
frame.setVisible(false);
try
{
Class<?> start = cl.loadClass(Class);
System.out.println("Запуск клиента");
Method main = start.getMethod("main", new Class[] { String[].class });
main.invoke(null, new Object[] { params.toArray(new String[0]) });
} catch (Exception x)
{
JOptionPane.showMessageDialog(frame, "Ошибка запуска!", "", javax.swing.JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
}
});
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
System.out.println("Launcher Start");
new Launch();
}
});
}
private static List<URL> getLibs(File libsfolder) throws MalformedURLException {
List<URL> libs = new ArrayList<URL>();
if (!libsfolder.exists()) libsfolder.mkdirs();
for (File file : libsfolder.listFiles()) {
if (file.isDirectory()) {
libs.addAll(getLibs(file));
} else {
if (file.getName().endsWith(".jar")) {
libs.add(file.toURI().toURL());
}
}
}
return libs;
}
}