- Баллы
- 103
Внимание всем, кто пользовался старыми версиями кода файла xLoader.java замените старый код на новый. Обновление(замена): делается так же как и исправление.
Я нашёл фикс запускатора на 1.6.2 и 1.5.2(если вы берёте официальный клиент)!
Тема самого лаунчера(кликабельно).
Исправление:
Заходим в Netbeans или в Eclipse и ищем файл xLoader.java, стираем всё и вставляем это, я пользовался самой последней версией исходников версией 1.5.3) Такой тип запускатора выбирает тип запуска по названию jar'ника, если это minecraft.jar то это старый метод запуска minecraft ниже версию 1.5, если же jar'ник скажем такой 1.6.2.jar или 1.5.2.jar то метод запуска новый. Называйте правильно jar'ники, иначе ничего не запустится.(В клиенте ничего менять не нужно, как папки лежали так пусть и лежат.)
Дальше идём в xSettingsOfTheme.java и в серверах вместо этого вписываем
UPDATE! Теперь можно пользоваться версиями ниже 1.5.
Вот собственно весь фикс.
Версии ниже 1.0.0 будут запускаться.
1. Также фикс вечной авторизации. Она возникает в большинстве случаев из-за удаления старых как попало или добавления новых серверов в список лаунчера не по счёту то есть нужно добавлять так:
Самое первое в скобках это ID сервера, добавляем сервер по порядку начиная с нуля если уже есть какие-то то добавляем в ID нового сервера ID на 1 больше предыдущего(Внимательно проверяйте введённые данные)
2. Ваш лаунчер пытается проверить папки, которых нет, это возможно ваш косяк или косяк лаунчера(он иногда не распаковывает архив с обновлением, советую удалить архив и заново нажать кнопку обновить в лаунчере.).
С вами был Кэп.
Обновления:
v 2.1 relese Окончательное исправление 2.
v 2.0 relese Окончательное исправление.
v 1.1 Добавление второго пункта фикса вечной авторизации.
v 1.0 Исправление фикса запускатора клиента и небольшие исправления текста.
v 1.0 alfa Появление фикса.
To Do:
1) Исправить ошибку распаковки архива.
2) Исправить ошибку проверки клиента.
3) Выложить исходники со всеми исправлениями.
Я нашёл фикс запускатора на 1.6.2 и 1.5.2(если вы берёте официальный клиент)!
Тема самого лаунчера(кликабельно).
Исправление:
Заходим в Netbeans или в Eclipse и ищем файл xLoader.java, стираем всё и вставляем это, я пользовался самой последней версией исходников версией 1.5.3) Такой тип запускатора выбирает тип запуска по названию jar'ника, если это minecraft.jar то это старый метод запуска minecraft ниже версию 1.5, если же jar'ник скажем такой 1.6.2.jar или 1.5.2.jar то метод запуска новый. Называйте правильно jar'ники, иначе ничего не запустится.(В клиенте ничего менять не нужно, как папки лежали так пусть и лежат.)
Код:
package ru.xeroxp.launcher;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collection;
import ru.xeroxp.launcher.process.JavaProcess;
import ru.xeroxp.launcher.process.JavaProcessLauncher;
import ru.xeroxp.launcher.process.JavaProcessRunnable;
public class xLoader implements JavaProcessRunnable {
private final Object lock = new Object();
private boolean isWorking = false;
private String userName;
private String sessionId = "0";
private String jarfile;
private String server = "0";
private String port = "25565";
private String folder;
private String version;
public static JavaProcess process;
public xLoader(String userName, String sessionId, String server, String port, String folder, String jar, String version) {
this.userName = userName;
this.sessionId = sessionId;
this.server = server;
this.port = port;
this.jarfile = jar;
this.folder = folder;
this.version = version;
playGame();
}
public xLoader(String userName) {
this.userName = userName;
this.jarfile = xSettings.offlineClient[1];
this.folder = xSettings.offlineClient[0];
this.version = xSettings.offlineClient[2];
playGame();
}
private void setWorking(boolean working) {
this.isWorking = working;
}
public boolean isWorking() {
return this.isWorking;
}
public void playGame() {
synchronized (this.lock) {
if (this.isWorking) {
return;
}
setWorking(true);
launchGame();
}
}
protected void launchGame() {
try {
String memory = xTheme.readMemory();
if (memory == null || memory.isEmpty()) memory = Integer.toString(512);
xUtils utils = new xUtils();
String separator = System.getProperty("file.separator");
File nativespath;
File librarypath;
File workdir;
File assetsdir;
File jarpath;
File fl = null;
String minecraft;
fl = new File(this.jarfile);
minecraft = fl.getName();
if (minecraft == "minecraft.jar") {
if (this.folder.isEmpty()) {
nativespath = new File(utils.getDirectory(), "bin" + separator + "natives");
librarypath = new File(utils.getDirectory(), "bin");
workdir = utils.getDirectory();
jarpath = new File(utils.getDirectory(), "bin" + separator + this.jarfile);
assetsdir = new File(utils.getDirectory(), "assets");
}
else {
nativespath = new File(utils.getDirectory(), this.folder + separator + "bin" + separator + "natives");
librarypath = new File(utils.getDirectory(), this.folder + separator + "bin");
workdir = new File(utils.getDirectory(), this.folder);
jarpath = new File(utils.getDirectory(), this.folder + separator + "bin" + separator + this.jarfile);
assetsdir = new File(utils.getDirectory(), this.folder + separator + "assets");
}
} else {
if (this.folder.isEmpty()) {
nativespath = new File(utils.getDirectory(), "versions" + separator + this.version + separator + "natives");
librarypath = new File(utils.getDirectory(), "libraries");
workdir = utils.getDirectory();
jarpath = new File(utils.getDirectory(), "versions" + separator + this.version + separator + this.jarfile);
assetsdir = new File(utils.getDirectory(), "assets");
}
else {
nativespath = new File(utils.getDirectory(), this.folder + separator + "versions" + separator + this.version + separator + "natives");
librarypath = new File(utils.getDirectory(), this.folder + separator + "libraries");
workdir = new File(utils.getDirectory(), this.folder);
jarpath = new File(utils.getDirectory(), this.folder + separator + "versions" + separator + this.version + separator + this.jarfile);
assetsdir = new File(utils.getDirectory(), this.folder + separator + "assets");
}
}
String libraries = getLibraries(librarypath);
if (!libraries.isEmpty()) {
libraries = libraries + ";" + jarpath.getAbsolutePath();
} else {
libraries = jarpath.getAbsolutePath();
}
JavaProcessLauncher processLauncher = new JavaProcessLauncher(utils.getJavaExecutable(), new String[0]);
processLauncher.addCommands(new String[] { "-Xmx" + memory + "M" });
File assetsDirectory = assetsdir;
if (utils.getPlatform().toString().equals("macos")) {
processLauncher.addCommands(new String[] { "-Xdock:icon=" + new File(assetsDirectory, "icons/minecraft.icns").getAbsolutePath() });
processLauncher.addCommands(new String[] { "-Xdock:name=" + xSettings.gameName });
}
processLauncher.addCommands(new String[] { "\"" + "-Djava.library.path=" + nativespath.getAbsolutePath() + "\"" });
processLauncher.addCommands(new String[] { "-cp", "\"" + libraries + "\"" });
if (jarfile.toString().toLowerCase().contains("forge")) {
processLauncher.addCommands(new String[] { "net.minecraft.launchwrapper.Launch" });
processLauncher.addCommands(new String[] { "--tweakClass", "cpw.mods.fml.common.launcher.FMLTweaker" });
} else {
processLauncher.addCommands(new String[] { "net.minecraft.client.main.Main" });
}
//processLauncher.addCommands(new String[] { userName, sessionId, version });
processLauncher.addCommands(new String[] { "--username", userName });
processLauncher.addCommands(new String[] { "--session", sessionId });
processLauncher.addCommands(new String[] { "--version", version });
processLauncher.addCommands(new String[] { "--gameDir", "\"" + workdir.getAbsolutePath() + "\"" });
processLauncher.addCommands(new String[] { "--assetsDir", "\"" + assetsdir.getAbsolutePath() + "\"" });
if (!server.equals("0")) {
processLauncher.addCommands(new String[] { "--server", server });
processLauncher.addCommands(new String[] { "--port", port });
}
process = processLauncher.start();
process.safeSetExitRunnable(this);
} catch (Exception e) {
System.out.println(e);
setWorking(false);
return;
}
}
public void onJavaProcessEnded(JavaProcess process) {
int exitCode = process.getExitCode();
if (exitCode == 0) {
System.out.println("Game ended with no troubles detected (exit code " + exitCode + ")");
} else {
System.out.println("Game ended with bad state (exit code " + exitCode + ")");
String errorText = null;
String[] sysOut = (String[])process.getSysOutLines().getItems();
for (int i = sysOut.length - 1; i >= 0; i--) {
String line = sysOut[i];
String crashIdentifier = "#@!@#";
int pos = line.lastIndexOf(crashIdentifier);
if ((pos >= 0) && (pos < line.length() - crashIdentifier.length() - 1)) {
errorText = line.substring(pos + crashIdentifier.length()).trim();
break;
}
}
if(errorText != null) {
System.out.println(errorText);
}
setWorking(false);
}
if (!xMain.error) {
System.exit(1);
}
}
public void onReadyToLaunch() {
synchronized (this.lock) {
if (isWorking()) {
try {
launchGame();
} catch (Throwable ex) {
System.out.println("LAUNCH ERROR: " + ex.getMessage());
}
}
}
}
private static String getLibraries(File path) throws Exception {
String libraries = "";
File[] files = path.listFiles();
if (files.length == 0) {
return "";
}
for(int i = 0; i < files.length; i++) {
if(files[i].isDirectory()) {
String slibraries = getLibraries(new File(path+File.separator+files[i].getName()));
if (libraries.isEmpty()) {
libraries = slibraries;
} else {
libraries = libraries + ";" + slibraries;
}
}
if(files[i].isFile()) {
if (libraries.isEmpty()) {
libraries = files[i].getAbsolutePath();
} else {
libraries = libraries + ";" + files[i].getAbsolutePath();
}
}
}
return libraries;
}
private static void exit() {
new Thread (new Runnable() {
public void run() {
try {
process.getRawProcess().waitFor();
if (!xMain.error) {
System.exit(1);
}
} catch (Exception ex) {
System.exit(1);
}
}
}).start();
}
}
Код:
new xServer(0, "Classic", "localhost", "25565", "hitech", "Сюда пишем(то что в квадратных скобках): [цифра.цифра.цифра.jar] или [minecraft.jar] зависит от версии вашего клиента, первый вариант для версий 1.5 +", "Cюда пишем версию(то что в квадратных скобках): [цифра.цифра.цифра.jar] или [minecraft.jar] зависит от версии вашего клиента, первый вариант для версий 1.5 +", 100, 0, 0, 724, 110, 6, 6, 180, 98, 500, 30, 200, 24, new Color(114, 114, 114), 450, 78, 70, 14, new Color(114, 114, 114), 231, 71, 484.0D, 29),
Вот собственно весь фикс.
Версии ниже 1.0.0 будут запускаться.
1. Также фикс вечной авторизации. Она возникает в большинстве случаев из-за удаления старых как попало или добавления новых серверов в список лаунчера не по счёту то есть нужно добавлять так:
Код:
new xServer(0, "Classic", "localhost", "25565", "hitech", "1.5.2.jar", "1.5.2", 100, 0, 0, 724, 110, 6, 6, 180, 98, 500, 30, 200, 24, new Color(114, 114, 114), 450, 78, 70, 14, new Color(114, 114, 114), 231, 71, 484.0D, 29),
new xServer(1, "Hitech", "localhost", "25565", "sandbox", "minecraft.jar", "1.4.7", 100, 0, 120, 724, 110, 6, 126, 180, 98, 500, 150, 200, 24, new Color(114, 114, 114), 450, 198, 70, 14, new Color(114, 114, 114), 231, 191, 484.0D, 29)
2. Ваш лаунчер пытается проверить папки, которых нет, это возможно ваш косяк или косяк лаунчера(он иногда не распаковывает архив с обновлением, советую удалить архив и заново нажать кнопку обновить в лаунчере.).
С вами был Кэп.

Обновления:
v 2.1 relese Окончательное исправление 2.
v 2.0 relese Окончательное исправление.
v 1.1 Добавление второго пункта фикса вечной авторизации.
v 1.0 Исправление фикса запускатора клиента и небольшие исправления текста.
v 1.0 alfa Появление фикса.
To Do:
1) Исправить ошибку распаковки архива.
2) Исправить ошибку проверки клиента.
3) Выложить исходники со всеми исправлениями.
