Advertisement
Guest User

Untitled

a guest
Nov 28th, 2014
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.96 KB | None | 0 0
  1. package ru.er_log.game;
  2.  
  3. import ru.er_log.Settings;
  4. import ru.er_log.components.Frame;
  5. import ru.er_log.game.zx.JavaProcess;
  6. import ru.er_log.game.zx.JavaProcessLauncher;
  7. import ru.er_log.game.zx.JavaProcessRunnable;
  8. import ru.er_log.utils.BaseUtils;
  9. import ru.er_log.utils.GuardUtils;
  10. import ru.er_log.utils.OperatingSystem;
  11. import ru.er_log.utils.ThemeUtils;
  12.  
  13. import javax.swing.*;
  14. import java.awt.event.ActionEvent;
  15. import java.awt.event.ActionListener;
  16. import java.io.File;
  17. import java.io.IOException;
  18. import java.net.MalformedURLException;
  19. import java.net.URL;
  20. import java.util.ArrayList;
  21. import java.util.List;
  22.  
  23. public final class GameLauncher implements JavaProcessRunnable {
  24.  
  25. public GameLauncher(String[] data) throws IOException {
  26. JavaProcessLauncher processLauncher = new JavaProcessLauncher(new String[0]);
  27.  
  28. File gameDirectory = new File(BaseUtils.getClientDirectory());
  29. File binDirectory = new File(gameDirectory, "bin");
  30. File nativesDirectory = new File(gameDirectory, "bin/natives");
  31. File assetsDirectory = new File(gameDirectory, "assets");
  32.  
  33. boolean version_above_1_7 = BaseUtils.versionCompare(BaseUtils.getClientVersion(), "1.7") == 1;
  34. boolean version_below_1_7_4 = (BaseUtils.versionCompare(BaseUtils.getClientVersion(), "1.7.4") == 2) && (BaseUtils.versionCompare(BaseUtils.getClientVersion(), "1.7") == 1);
  35. boolean forge = Boolean.valueOf(Frame.frame.isOffline() ? ThemeUtils.offlineGameUtils.useForge(Frame.frame.serversList.getSelectedIndex()) : BaseUtils.getServerAbout()[4]);
  36. boolean liteloader = Boolean.valueOf(Frame.frame.isOffline() ? ThemeUtils.offlineGameUtils.useLiteLoader(Frame.frame.serversList.getSelectedIndex()) : BaseUtils.getServerAbout()[5]);
  37.  
  38. String hAESKey, sesKey = null, UUID = null;
  39.  
  40. try {
  41. hAESKey = GuardUtils.decrypt(Frame.onlineData[3], Settings.aes_key[0]);
  42.  
  43. String stirSesKey = GuardUtils.decrypt(data[7], GuardUtils.reestablishString(hAESKey.split("<:k:>")[0], hAESKey.split("<:k:>")[1]));
  44. sesKey = GuardUtils.reestablishString(stirSesKey.split("<:k:>")[0], stirSesKey.split("<:k:>")[1]);
  45.  
  46. String stirUUID = GuardUtils.decrypt(data[27], GuardUtils.reestablishString(hAESKey.split("<:k:>")[0], hAESKey.split("<:k:>")[1]));
  47. UUID = GuardUtils.reestablishString(stirUUID.split("<:k:>")[0], stirUUID.split("<:k:>")[1]);
  48. } catch (Exception e) {
  49. if (!Frame.frame.isOffline()) e.printStackTrace();
  50. else UUID = "0-0-0-0-0";
  51. }
  52.  
  53. String username = Frame.frame.isOffline() ? Settings.off_user[0] : data[23];
  54. String session = Frame.frame.isOffline() ? (version_above_1_7 ? Settings.off_sess[0] : Settings.off_sess[0] + "<::>" + BaseUtils.getClientName() + "<::>" + GuardUtils.appPath() + "<::>null<::>" + "00-00-00-00-00-00" + "<::>" + getLibraryList(binDirectory, forge, liteloader) + "<::>" + Settings.game_directory[0] + "<::>" + Settings.par_directory[0]) : (version_above_1_7 ? GuardUtils.md5(sesKey) : GuardUtils.md5(sesKey) + "<::>" + BaseUtils.getClientName() + "<::>" + GuardUtils.appPath() + "<::>" + data[20] + "<::>" + "00-00-00-00-00-00" + "<::>" + getLibraryList(binDirectory, forge, liteloader) + "<::>" + Settings.game_directory[0] + "<::>" + Settings.par_directory[0]);
  55.  
  56. List<String> properties = new ArrayList<>();
  57. List<String> tweak_args_list = new ArrayList<>();
  58.  
  59.  
  60. if (OperatingSystem.getCurrentPlatform().equals(OperatingSystem.OSX)) {
  61. /*
  62. properties.add("-Xdock:icon=" + new File(assetsDirectory, "icons/minecraft.icns").getAbsolutePath());
  63. properties.add("-Xdock:name=Minecraft");
  64. */
  65. processLauncher.addCommands(new String[]
  66. {
  67. "-Xdock:icon=" + new File(assetsDirectory, "icons/minecraft.icns").getAbsolutePath(), "-Xdock:name=" + Settings.title_in_game
  68. });
  69. }
  70.  
  71. int memory = BaseUtils.getPropertyInt("memory");
  72. if (memory == 0) memory = "32".equals(System.getProperty("sun.arch.data.model")) ? 512 : 1024;
  73.  
  74. processLauncher.addSplitCommands("-Xmx" + memory + "M");
  75.  
  76. if (forge) {
  77. /*
  78. properties.add("-Dfml.ignoreInvalidMinecraftCertificates=true");
  79. properties.add("-Dfml.ignorePatchDiscrepancies=true");
  80. */
  81. processLauncher.addCommands(new String[]
  82. {
  83. "-Dfml.ignoreInvalidMinecraftCertificates=true"
  84. });
  85.  
  86. processLauncher.addCommands(new String[]
  87. {
  88. "-Dfml.ignorePatchDiscrepancies=true"
  89. });
  90. }
  91.  
  92. processLauncher.addCommands(new String[]
  93. {
  94. "-Djava.library.path=" + nativesDirectory.toString()
  95. });
  96.  
  97.  
  98. processLauncher.addCommands(new String[]
  99. {
  100. "-cp", getLibraryList(binDirectory, forge, liteloader)
  101. });
  102.  
  103. processLauncher.addCommands(new String[]
  104. {
  105. (forge || liteloader) ? Settings.lwrap_mine_class[0] : Settings.mine_class[0]
  106. });
  107. // properties.add("-Djava.library.path=" + nativesDirectory.toString());
  108. //properties.add("-Dorg.lwjgl.librarypath=" + nativesDirectory.toString());
  109. //properties.add("-Dnet.java.games.input.librarypath=" + nativesDirectory.toString());
  110.  
  111.  
  112. tweak_args_list.add("--username");
  113. tweak_args_list.add(username);
  114. tweak_args_list.add("--version");
  115. tweak_args_list.add(BaseUtils.getClientVersion());
  116. tweak_args_list.add("--gameDir");
  117. tweak_args_list.add(gameDirectory.toString());
  118. if (BaseUtils.getClientVersion().equals("1.7.10")) {
  119. tweak_args_list.add("--assetsDir");
  120. tweak_args_list.add(assetsDirectory.toString());
  121. } else if (version_below_1_7_4 && version_above_1_7) {
  122. tweak_args_list.add("--assetsDir");
  123. tweak_args_list.add(assetsDirectory.toString() + "/virtual/legacy");
  124. } else {
  125. tweak_args_list.add("--assetsDir");
  126. tweak_args_list.add(assetsDirectory.toString());
  127. }
  128. tweak_args_list.add("--width");
  129. tweak_args_list.add("994");
  130. tweak_args_list.add("--height");
  131. tweak_args_list.add("602");
  132.  
  133. if (version_above_1_7) {
  134. if (!Frame.frame.isOffline())
  135. session = GuardUtils.md5(session + BaseUtils.lastNchars(session, 3)); // !!!
  136.  
  137. tweak_args_list.add("--uuid");
  138. tweak_args_list.add(UUID);
  139. tweak_args_list.add("--accessToken");
  140. tweak_args_list.add(session);
  141. tweak_args_list.add("--userProperties");
  142. tweak_args_list.add("{}");
  143. tweak_args_list.add("--assetIndex");
  144. tweak_args_list.add(BaseUtils.getClientVersion());
  145. } else {
  146. tweak_args_list.add("--session");
  147. tweak_args_list.add(session);
  148. }
  149.  
  150. if (Frame.frame.set_full.isSelected()) {
  151. tweak_args_list.add("--fullscreen");
  152. tweak_args_list.add("true");
  153. }
  154.  
  155. if (Settings.use_auto_entrance[0] && !Frame.frame.isOffline()) {
  156. tweak_args_list.add("--server");
  157. tweak_args_list.add(BaseUtils.getServerAbout()[1]);
  158. tweak_args_list.add("--port");
  159. tweak_args_list.add(BaseUtils.getServerAbout()[2]);
  160. }
  161.  
  162. if (forge || liteloader) {
  163. tweak_args_list.add("--tweakClass");
  164. }
  165.  
  166. if (liteloader) {
  167. tweak_args_list.add("com.mumfrey.liteloader.launch.LiteLoaderTweaker");
  168. }
  169.  
  170. if (forge && liteloader) {
  171. // Начиная с версии 1.6.4, клиент использует "--tweakClass" вместо "--cascadedTweaks", в качестве второстепенного класса
  172. String arg = BaseUtils.versionCompare(BaseUtils.getClientVersion(), "1.6.4") == 2 ? "--cascadedTweaks" : "--tweakClass";
  173. tweak_args_list.add(arg);
  174. }
  175.  
  176. if (forge) {
  177. tweak_args_list.add("cpw.mods.fml.common.launcher.FMLTweaker");
  178. }
  179.  
  180. if (GuardUtils.use_jar_check && !Frame.frame.isOffline()) {
  181. Frame.report("GUARD: Проверка клиента на наличие сторонних JAR файлов...");
  182. GuardUtils.checkClientsJars(BaseUtils.getClientDirectory(), data);
  183. Frame.report("GUARD: Проверка завершена");
  184. }
  185. GuardUtils.checkClient(Frame.authData, false);
  186.  
  187. if (GuardUtils.use_mod_check && GuardUtils.use_mod_check_timer && !Frame.frame.isOffline()) {
  188. new Timer(GuardUtils.time_for_mods_check * 1000, new ActionListener() {
  189. public void actionPerformed(ActionEvent e) {
  190. GuardUtils.checkClient(Frame.authData, false);
  191. }
  192. }).start();
  193. }
  194.  
  195. setSystemProperties(properties);
  196.  
  197. System.out.println(tweak_args_list);
  198.  
  199. Frame.report("-------------------------");
  200. Frame.report("Переход к запуску игры...");
  201. Frame.report("-------------------------");
  202. Frame.frame.setAlert("Игра запущена", 1, 391, -1);
  203. BaseUtils.sleep(1.5);
  204. Frame.frame.setVisible(false);
  205.  
  206. processLauncher.addCommands(tweak_args_list.toArray());
  207. JavaProcess process = processLauncher.start();
  208. process.safeSetExitRunnable(this);
  209. /*
  210. try
  211. {
  212.  
  213. URL[] urls = toURLs(getLibraryList(binDirectory, forge, liteloader), getCPSeparator());
  214. eURLClassLoader loader = new eURLClassLoader(urls);
  215. BaseUtils.patchNewClientUrls(loader);
  216.  
  217. String main_class = (forge || liteloader) ? Settings.lwrap_mine_class[0] : Settings.mine_class[0];
  218. Class cls = loader.loadClass(main_class);
  219.  
  220. Method main = cls.getMethod("main", new Class[] { String[].class });
  221. main.invoke(null, new Object[] { tweak_args_list.toArray(new String[0]) });
  222.  
  223. } catch (Exception e)
  224. {
  225. Frame.frame.setAlert("Ошибка в работе приложения", 3, 391, 2);
  226. Frame.frame.setVisible(true);
  227.  
  228. Frame.reportErr("Ошибка при запуске или в работе приложения!");
  229. e.printStackTrace();
  230. }
  231. */
  232. }
  233.  
  234. private void setSystemProperties(List<String> properties) {
  235. Frame.report("Установка системных параметров...");
  236.  
  237. for (String propertie : properties) {
  238. String[] key_value = propertie.replaceFirst("-D", "").replaceFirst("-X", "").split("=", 2);
  239. try {
  240. System.setProperty(key_value[0], key_value[1]);
  241. } catch (Exception e) {
  242. Frame.reportErr("Не удалось установить параметр: " + propertie);
  243. e.printStackTrace();
  244. }
  245. }
  246. Frame.report("Все системные параметры установлены");
  247. }
  248.  
  249. private URL[] toURLs(String line, String sep) {
  250. String[] strs = line.split(sep);
  251. URL[] urls = new URL[strs.length];
  252.  
  253. try {
  254. for (int i = 0; i < urls.length; i++)
  255. urls[i] = new File(strs[i]).toURI().toURL();
  256.  
  257. return urls;
  258. } catch (MalformedURLException e) {
  259. Frame.reportErr("Ошибка при преобразовании в URL");
  260. e.printStackTrace();
  261. }
  262.  
  263. return null;
  264. }
  265.  
  266. private String getLibraryList(File bin_folder, boolean using_forge, boolean using_liteloader) {
  267. String sep = getCPSeparator();
  268. List<String> lib = new ArrayList<>();
  269.  
  270. lib.add(bin_folder.toString() + File.separator + "libraries.jar");
  271. if (using_forge) lib.add(bin_folder.toString() + File.separator + "forge.jar");
  272. if (using_liteloader) lib.add(bin_folder.toString() + File.separator + "liteloader.jar");
  273. lib.add(bin_folder.toString() + File.separator + "minecraft.jar");
  274. lib.add(new File(GuardUtils.appPath()).toString());
  275.  
  276. String library = "";
  277. for (int i = 0; i < lib.size(); i++) {
  278. library += lib.get(i);
  279. if (i + 1 < lib.size()) library += sep;
  280. }
  281.  
  282. return library;
  283. }
  284.  
  285. private String getCPSeparator() {
  286. return (BaseUtils.getPlatform() != 2) ? ":" : ";";
  287. }
  288.  
  289. @Override
  290. public void onJavaProcessEnded(JavaProcess paramJavaProcess) {
  291. if (paramJavaProcess.getRawProcess().exitValue() == -2) {
  292. Frame.frame.setVisible(true);
  293. BaseUtils.restart();
  294. } else {
  295. System.exit(0);
  296. }
  297. }
  298. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement