2
0

ModJava.cs 49 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Runtime.CompilerServices;
  7. using System.Threading;
  8. using System.Windows.Controls;
  9. using Microsoft.VisualBasic;
  10. using Microsoft.VisualBasic.CompilerServices;
  11. using Newtonsoft.Json;
  12. using Newtonsoft.Json.Linq;
  13. namespace PCL
  14. {
  15. // Token: 0x02000065 RID: 101
  16. [StandardModule]
  17. public sealed class ModJava
  18. {
  19. // Token: 0x06000260 RID: 608 RVA: 0x00003765 File Offset: 0x00001965
  20. private static string InitBroadcaster()
  21. {
  22. if (ModJava.m_Container == null)
  23. {
  24. ModJava.m_Container = (Environment.GetEnvironmentVariable("Path") ?? "");
  25. }
  26. return ModJava.m_Container;
  27. }
  28. // Token: 0x06000261 RID: 609 RVA: 0x0000378B File Offset: 0x0000198B
  29. private static string AddBroadcaster()
  30. {
  31. if (ModJava.@params == null)
  32. {
  33. ModJava.@params = (Environment.GetEnvironmentVariable("JAVA_HOME") ?? "");
  34. }
  35. return ModJava.@params;
  36. }
  37. // Token: 0x06000262 RID: 610 RVA: 0x0001A7B4 File Offset: 0x000189B4
  38. public static void JavaListInit()
  39. {
  40. ModJava.interceptor = new List<ModJava.JavaEntry>();
  41. try
  42. {
  43. if (Operators.ConditionalCompareObjectLess(ModBase.m_IdentifierRepository.Get("CacheJavaListVersion", null), ModJava.m_Page, false))
  44. {
  45. ModBase.Log("[Java] 要求 Java 列表缓存更新", ModBase.LogLevel.Normal, "出现错误");
  46. ModBase.m_IdentifierRepository.Set("CacheJavaListVersion", ModJava.m_Page, false, null);
  47. }
  48. else
  49. {
  50. try
  51. {
  52. foreach (object obj in ((IEnumerable)ModBase.GetJson(Conversions.ToString(ModBase.m_IdentifierRepository.Get("LaunchArgumentJavaAll", null)))))
  53. {
  54. object objectValue = RuntimeHelpers.GetObjectValue(obj);
  55. ModJava.interceptor.Add(ModJava.JavaEntry.FromJson((JObject)objectValue));
  56. }
  57. }
  58. finally
  59. {
  60. IEnumerator enumerator;
  61. if (enumerator is IDisposable)
  62. {
  63. (enumerator as IDisposable).Dispose();
  64. }
  65. }
  66. }
  67. if (!Enumerable.Any<ModJava.JavaEntry>(ModJava.interceptor))
  68. {
  69. ModBase.Log("[Java] 初始化未找到可用的 Java,将自动触发搜索", ModBase.LogLevel.Developer, "出现错误");
  70. ModJava._Process.Start(0, false);
  71. }
  72. else
  73. {
  74. ModBase.Log("[Java] 缓存中有 " + Conversions.ToString(ModJava.interceptor.Count) + " 个可用的 Java:", ModBase.LogLevel.Normal, "出现错误");
  75. ModJava.interceptor.ForEach((ModJava._Closure$__.$I10-0 == null) ? (ModJava._Closure$__.$I10-0 = delegate(ModJava.JavaEntry j)
  76. {
  77. ModBase.Log(string.Format("[Java] - {0}", j), ModBase.LogLevel.Normal, "出现错误");
  78. }) : ModJava._Closure$__.$I10-0);
  79. }
  80. }
  81. catch (Exception ex)
  82. {
  83. ModBase.Log(ex, "初始化 Java 列表失败", ModBase.LogLevel.Feedback, "出现错误");
  84. ModBase.m_IdentifierRepository.Set("LaunchArgumentJavaAll", "[]", false, null);
  85. }
  86. }
  87. // Token: 0x06000263 RID: 611 RVA: 0x0001A974 File Offset: 0x00018B74
  88. public static ModJava.JavaEntry JavaSelect(string CancelException, Version MinVersion = null, Version MaxVersion = null, ModMinecraft.McVersion RelatedVersion = null)
  89. {
  90. ModJava.JavaEntry result;
  91. try
  92. {
  93. ModJava._Closure$__12-0 CS$<>8__locals1 = new ModJava._Closure$__12-0(CS$<>8__locals1);
  94. List<ModJava.JavaEntry> list = new List<ModJava.JavaEntry>();
  95. Dictionary<string, bool> dictionary = new Dictionary<string, bool>();
  96. if (Enumerable.Count<string>(ModMinecraft.m_ProxyTests.Split("\\")) > 3 && !ModMinecraft.m_ProxyTests.Contains("AppData\\Roaming"))
  97. {
  98. ModJava.JavaSearchFolder(ModBase.GetPathFromFullPath(ModMinecraft.m_ProxyTests), ref dictionary, false, true);
  99. }
  100. ModJava.JavaSearchFolder(ModMinecraft.m_ProxyTests, ref dictionary, false, true);
  101. dictionary = Enumerable.ToDictionary<KeyValuePair<string, bool>, string, bool>(Enumerable.Where<KeyValuePair<string, bool>>(dictionary, (ModJava._Closure$__.$I12-0 == null) ? (ModJava._Closure$__.$I12-0 = ((KeyValuePair<string, bool> j) => !j.Key.Contains(".minecraft\\runtime"))) : ModJava._Closure$__.$I12-0), (ModJava._Closure$__.$I12-1 == null) ? (ModJava._Closure$__.$I12-1 = ((KeyValuePair<string, bool> j) => j.Key)) : ModJava._Closure$__.$I12-1, (ModJava._Closure$__.$I12-2 == null) ? (ModJava._Closure$__.$I12-2 = ((KeyValuePair<string, bool> j) => j.Value)) : ModJava._Closure$__.$I12-2);
  102. if (RelatedVersion != null)
  103. {
  104. ModJava.JavaSearchFolder(RelatedVersion.Path, ref dictionary, false, true);
  105. }
  106. List<ModJava.JavaEntry> list2 = new List<ModJava.JavaEntry>();
  107. try
  108. {
  109. foreach (KeyValuePair<string, bool> keyValuePair in dictionary)
  110. {
  111. list2.Add(new ModJava.JavaEntry(keyValuePair.Key, keyValuePair.Value));
  112. }
  113. }
  114. finally
  115. {
  116. Dictionary<string, bool>.Enumerator enumerator;
  117. ((IDisposable)enumerator).Dispose();
  118. }
  119. if (Enumerable.Any<ModJava.JavaEntry>(list2))
  120. {
  121. list2 = ModJava.JavaCheckList(list2);
  122. ModBase.Log("[Java] 检查后找到 " + Conversions.ToString(list2.Count) + " 个特定路径下的 Java:", ModBase.LogLevel.Normal, "出现错误");
  123. try
  124. {
  125. foreach (ModJava.JavaEntry arg in list2)
  126. {
  127. ModBase.Log(string.Format("[Java] - {0}", arg), ModBase.LogLevel.Normal, "出现错误");
  128. }
  129. }
  130. finally
  131. {
  132. List<ModJava.JavaEntry>.Enumerator enumerator2;
  133. ((IDisposable)enumerator2).Dispose();
  134. }
  135. }
  136. CS$<>8__locals1.$VB$Local_UserJava = null;
  137. string text = "";
  138. if (RelatedVersion != null)
  139. {
  140. text = Conversions.ToString(ModBase.m_IdentifierRepository.Get("VersionArgumentJavaSelect", RelatedVersion));
  141. if (text.StartsWithF("{", false))
  142. {
  143. try
  144. {
  145. CS$<>8__locals1.$VB$Local_UserJava = ModJava.JavaEntry.FromJson((JObject)ModBase.GetJson(text));
  146. CS$<>8__locals1.$VB$Local_UserJava.Check();
  147. }
  148. catch (ThreadInterruptedException ex)
  149. {
  150. throw;
  151. }
  152. catch (Exception ex2)
  153. {
  154. CS$<>8__locals1.$VB$Local_UserJava = null;
  155. ModBase.m_IdentifierRepository.Reset("VersionArgumentJavaSelect", false, RelatedVersion);
  156. ModBase.Log(ex2, "版本独立设置中指定的 Java 已无法使用,此设置已重置", ModBase.LogLevel.Hint, "出现错误");
  157. }
  158. }
  159. }
  160. if (CS$<>8__locals1.$VB$Local_UserJava == null && Operators.CompareString(text, "", false) != 0 && Operators.ConditionalCompareObjectNotEqual(ModBase.m_IdentifierRepository.Get("LaunchArgumentJavaSelect", null), "", false))
  161. {
  162. try
  163. {
  164. CS$<>8__locals1.$VB$Local_UserJava = ModJava.JavaEntry.FromJson((JObject)ModBase.GetJson(Conversions.ToString(ModBase.m_IdentifierRepository.Get("LaunchArgumentJavaSelect", null))));
  165. CS$<>8__locals1.$VB$Local_UserJava.Check();
  166. }
  167. catch (ThreadInterruptedException ex3)
  168. {
  169. throw;
  170. }
  171. catch (Exception ex4)
  172. {
  173. CS$<>8__locals1.$VB$Local_UserJava = null;
  174. ModBase.m_IdentifierRepository.Reset("LaunchArgumentJavaSelect", false, null);
  175. ModBase.Log(ex4, "全局设置中指定的 Java 已无法使用,此设置已重置", ModBase.LogLevel.Hint, "出现错误");
  176. }
  177. }
  178. if (CS$<>8__locals1.$VB$Local_UserJava != null)
  179. {
  180. ModBase.Log(string.Format("[Java] 用户指定的 Java:{0}", CS$<>8__locals1.$VB$Local_UserJava), ModBase.LogLevel.Normal, "出现错误");
  181. list2.Add(CS$<>8__locals1.$VB$Local_UserJava);
  182. }
  183. ModJava.JavaEntry javaEntry2;
  184. for (;;)
  185. {
  186. if (ModJava._Process.State != ModBase.LoadState.Finished)
  187. {
  188. goto IL_9AA;
  189. }
  190. IL_33A:
  191. ModBase.LoadState state = ModJava._Process.State;
  192. if (state == ModBase.LoadState.Failed)
  193. {
  194. goto IL_A15;
  195. }
  196. if (state == ModBase.LoadState.Aborted)
  197. {
  198. goto IL_A0A;
  199. }
  200. List<ModJava.JavaEntry> list3 = new List<ModJava.JavaEntry>();
  201. list3.AddRange(list2);
  202. list3.AddRange(ModJava.interceptor);
  203. try
  204. {
  205. foreach (ModJava.JavaEntry javaEntry in list3)
  206. {
  207. if ((MinVersion == null || !(javaEntry.policyRepository < MinVersion)) && (MaxVersion == null || !(javaEntry.policyRepository > MaxVersion)) && (!javaEntry.producerRepository || !ModBase.m_StubRepository))
  208. {
  209. list.Add(javaEntry);
  210. }
  211. }
  212. }
  213. finally
  214. {
  215. List<ModJava.JavaEntry>.Enumerator enumerator3;
  216. ((IDisposable)enumerator3).Dispose();
  217. }
  218. if (!Enumerable.Any<ModJava.JavaEntry>(list) && ModJava._Process.State == ModBase.LoadState.Waiting)
  219. {
  220. ModBase.Log("[Java] 未找到满足条件的 Java,尝试进行搜索", ModBase.LogLevel.Normal, "出现错误");
  221. ModJava._Process.Start(null, true);
  222. continue;
  223. }
  224. if (CS$<>8__locals1.$VB$Local_UserJava == null)
  225. {
  226. goto IL_853;
  227. }
  228. if (Enumerable.Any<ModJava.JavaEntry>(list, (ModJava.JavaEntry j) => Operators.CompareString(j._UtilsRepository, CS$<>8__locals1.$VB$Local_UserJava._UtilsRepository, false) == 0))
  229. {
  230. ModBase.Log("[Java] 使用用户指定的 Java:" + CS$<>8__locals1.$VB$Local_UserJava._UtilsRepository, ModBase.LogLevel.Normal, "出现错误");
  231. list = new List<ModJava.JavaEntry>
  232. {
  233. CS$<>8__locals1.$VB$Local_UserJava
  234. };
  235. }
  236. else
  237. {
  238. ModBase.Log("[Java] 发现用户指定的不兼容 Java:" + CS$<>8__locals1.$VB$Local_UserJava.ToString(), ModBase.LogLevel.Normal, "出现错误");
  239. ModBase.Log("[Java] 目前实际可用的 Java 列表:", ModBase.LogLevel.Normal, "出现错误");
  240. try
  241. {
  242. foreach (ModJava.JavaEntry arg2 in list)
  243. {
  244. ModBase.Log(string.Format("[Java] - {0}", arg2), ModBase.LogLevel.Normal, "出现错误");
  245. }
  246. }
  247. finally
  248. {
  249. List<ModJava.JavaEntry>.Enumerator enumerator4;
  250. ((IDisposable)enumerator4).Dispose();
  251. }
  252. string text2 = "";
  253. bool flag = false;
  254. if ((MinVersion == null || MinVersion.Minor == 0) && MaxVersion != null && MaxVersion.Minor < 999)
  255. {
  256. flag = (MaxVersion.MinorRevision < 999);
  257. text2 = "最高兼容到 Java " + Conversions.ToString(MaxVersion.Minor) + (flag ? ("." + Conversions.ToString((int)MaxVersion.MajorRevision) + "." + Conversions.ToString((int)MaxVersion.MinorRevision)) : "");
  258. }
  259. else if (MinVersion != null && MinVersion.Minor > 0 && (MaxVersion == null || MaxVersion.Minor >= 999))
  260. {
  261. flag = (MinVersion.MinorRevision > 0 || MinVersion.MajorRevision > 0);
  262. text2 = "至少需要 Java " + Conversions.ToString(MinVersion.Minor) + (flag ? ("." + Conversions.ToString((int)MinVersion.MajorRevision) + "." + Conversions.ToString((int)MinVersion.MinorRevision)) : "");
  263. }
  264. else if (MinVersion != null && MinVersion.Minor > 0 && MaxVersion != null && MaxVersion.Minor < 999)
  265. {
  266. flag = (MinVersion.MinorRevision > 0 || MinVersion.MajorRevision > 0 || MaxVersion.MinorRevision < 999);
  267. string text3 = Conversions.ToString(MinVersion.Minor) + (flag ? ("." + Conversions.ToString((int)MinVersion.MajorRevision) + "." + Conversions.ToString((int)MinVersion.MinorRevision)) : "");
  268. string text4 = Conversions.ToString(MaxVersion.Minor) + (flag ? ("." + Conversions.ToString((int)MaxVersion.MajorRevision) + "." + Conversions.ToString((int)MaxVersion.MinorRevision)) : "");
  269. text2 = "需要 Java " + ((Operators.CompareString(text3, text4, false) == 0) ? text3 : (text3 + " ~ " + text4));
  270. }
  271. string text5 = Conversions.ToString(CS$<>8__locals1.$VB$Local_UserJava.PostTests()) + (flag ? ("." + Conversions.ToString((int)CS$<>8__locals1.$VB$Local_UserJava.policyRepository.MajorRevision) + "." + Conversions.ToString((int)CS$<>8__locals1.$VB$Local_UserJava.policyRepository.MinorRevision)) : "");
  272. if (Conversions.ToBoolean(Conversions.ToBoolean(ModBase.m_IdentifierRepository.Get("LaunchAdvanceJava", null)) || (RelatedVersion != null && Conversions.ToBoolean(ModBase.m_IdentifierRepository.Get("VersionAdvanceJava", RelatedVersion)))))
  273. {
  274. ModBase.Log(string.Concat(new string[]
  275. {
  276. "[Java] 设置中指定了使用 Java ",
  277. text5,
  278. ",但当前版本",
  279. text2,
  280. ",这可能会导致游戏崩溃!"
  281. }), ModBase.LogLevel.Debug, "出现错误");
  282. list = new List<ModJava.JavaEntry>
  283. {
  284. CS$<>8__locals1.$VB$Local_UserJava
  285. };
  286. goto IL_853;
  287. }
  288. switch (ModMain.MyMsgBox(string.Concat(new string[]
  289. {
  290. "你在设置中手动指定了使用 Java ",
  291. text5,
  292. ",但当前",
  293. text2,
  294. "。\r\n如果强制使用该 Java,可能导致游戏崩溃。\r\n你也可以将 游戏 Java 设置修改为 自动选择合适的 Java。\r\n\r\n - 指定的 Java:",
  295. CS$<>8__locals1.$VB$Local_UserJava.ToString()
  296. }), "Java 兼容性警告", "让 PCL 自动选择", "强制使用该 Java", "取消", false, true, false, null, null, null))
  297. {
  298. case 1:
  299. goto IL_853;
  300. case 2:
  301. ModBase.Log("[Java] 已强制使用用户指定的不兼容 Java", ModBase.LogLevel.Normal, "出现错误");
  302. list = new List<ModJava.JavaEntry>
  303. {
  304. CS$<>8__locals1.$VB$Local_UserJava
  305. };
  306. goto IL_853;
  307. case 3:
  308. goto IL_9DE;
  309. default:
  310. goto IL_853;
  311. }
  312. }
  313. IL_8D5:
  314. list = list.Sort(new ModBase.CompareThreadStart<ModJava.JavaEntry>(ModJava.JavaSorter));
  315. ModBase.Log("[Java] 排序后的 Java 优先顺序:", ModBase.LogLevel.Normal, "出现错误");
  316. try
  317. {
  318. foreach (ModJava.JavaEntry arg3 in list)
  319. {
  320. ModBase.Log(string.Format("[Java] - {0}", arg3), ModBase.LogLevel.Normal, "出现错误");
  321. }
  322. }
  323. finally
  324. {
  325. List<ModJava.JavaEntry>.Enumerator enumerator5;
  326. ((IDisposable)enumerator5).Dispose();
  327. }
  328. javaEntry2 = Enumerable.First<ModJava.JavaEntry>(list);
  329. try
  330. {
  331. javaEntry2.Check();
  332. goto IL_9E5;
  333. }
  334. catch (ThreadInterruptedException ex5)
  335. {
  336. throw;
  337. }
  338. catch (Exception ex6)
  339. {
  340. if (ex6.InnerException != null && ex6.InnerException is ThreadInterruptedException)
  341. {
  342. throw ex6.InnerException;
  343. }
  344. ModBase.Log(ex6, "最终选定的 Java 已无法使用,尝试进行搜索", ModBase.LogLevel.Debug, "出现错误");
  345. list = new List<ModJava.JavaEntry>();
  346. ModJava._Process.Start(null, true);
  347. continue;
  348. }
  349. goto IL_9AA;
  350. IL_853:
  351. if (Enumerable.Any<ModJava.JavaEntry>(list))
  352. {
  353. try
  354. {
  355. foreach (ModJava.JavaEntry javaEntry3 in list)
  356. {
  357. if (!javaEntry3._UtilsRepository.Contains(".minecraft\\cache\\java") && list2.Contains(javaEntry3))
  358. {
  359. list = new List<ModJava.JavaEntry>
  360. {
  361. javaEntry3
  362. };
  363. ModBase.Log("[Java] 优先使用特定路径下的 Java:" + javaEntry3.ToString(), ModBase.LogLevel.Normal, "出现错误");
  364. break;
  365. }
  366. }
  367. }
  368. finally
  369. {
  370. List<ModJava.JavaEntry>.Enumerator enumerator6;
  371. ((IDisposable)enumerator6).Dispose();
  372. }
  373. goto IL_8D5;
  374. }
  375. goto IL_A20;
  376. IL_9AA:
  377. if (ModJava._Process.State != ModBase.LoadState.Waiting)
  378. {
  379. ModJava._Process.WaitForExit(null, null, false);
  380. goto IL_33A;
  381. }
  382. goto IL_33A;
  383. }
  384. IL_9DE:
  385. throw new Exception(CancelException);
  386. IL_9E5:
  387. ModBase.Log("[Java] 最终选定的 Java:" + Enumerable.First<ModJava.JavaEntry>(list).ToString(), ModBase.LogLevel.Normal, "出现错误");
  388. return javaEntry2;
  389. IL_A0A:
  390. throw new ThreadInterruptedException("Java 搜索加载器已中断");
  391. IL_A15:
  392. throw ModJava._Process.Error;
  393. IL_A20:
  394. result = null;
  395. }
  396. catch (ThreadInterruptedException ex7)
  397. {
  398. ModBase.Log(ex7, "查找符合条件的 Java 时出现加载器中断", ModBase.LogLevel.Debug, "出现错误");
  399. result = null;
  400. }
  401. catch (Exception ex8)
  402. {
  403. if (Operators.CompareString(ex8.Message, "$$", false) == 0)
  404. {
  405. throw ex8;
  406. }
  407. ModBase.Log(ex8, "查找符合条件的 Java 失败", ModBase.LogLevel.Feedback, "出现错误");
  408. result = null;
  409. }
  410. return result;
  411. }
  412. // Token: 0x06000264 RID: 612 RVA: 0x0001B558 File Offset: 0x00019758
  413. public static bool smethod_0(ModMinecraft.McVersion RelatedVersion = null)
  414. {
  415. bool result;
  416. try
  417. {
  418. string text = Conversions.ToString(ModBase.m_IdentifierRepository.Get("LaunchArgumentJavaSelect", null));
  419. if (RelatedVersion != null)
  420. {
  421. string text2 = Conversions.ToString(ModBase.m_IdentifierRepository.Get("VersionArgumentJavaSelect", RelatedVersion));
  422. if (Operators.CompareString(text2, "使用全局设置", false) != 0)
  423. {
  424. text = text2;
  425. }
  426. }
  427. if (Operators.CompareString(text, "", false) != 0)
  428. {
  429. ModJava.JavaEntry javaEntry = null;
  430. try
  431. {
  432. javaEntry = ModJava.JavaEntry.FromJson((JObject)ModBase.GetJson(text));
  433. }
  434. catch (Exception ex)
  435. {
  436. ModBase.Log(ex, "版本指定的 Java 信息已损坏,已重置版本设置中指定的 Java", ModBase.LogLevel.Debug, "出现错误");
  437. ModBase.m_IdentifierRepository.Set("VersionArgumentJavaSelect", "使用全局设置", false, RelatedVersion);
  438. goto IL_EA;
  439. }
  440. try
  441. {
  442. List<ModJava.JavaEntry>.Enumerator enumerator = ModJava.interceptor.GetEnumerator();
  443. while (enumerator.MoveNext())
  444. {
  445. if (Operators.CompareString(enumerator.Current._UtilsRepository, javaEntry._UtilsRepository, false) == 0)
  446. {
  447. return javaEntry.producerRepository;
  448. }
  449. }
  450. }
  451. finally
  452. {
  453. List<ModJava.JavaEntry>.Enumerator enumerator;
  454. ((IDisposable)enumerator).Dispose();
  455. }
  456. }
  457. IL_EA:
  458. try
  459. {
  460. List<ModJava.JavaEntry>.Enumerator enumerator2 = ModJava.interceptor.GetEnumerator();
  461. while (enumerator2.MoveNext())
  462. {
  463. if (enumerator2.Current.producerRepository)
  464. {
  465. return true;
  466. }
  467. }
  468. }
  469. finally
  470. {
  471. List<ModJava.JavaEntry>.Enumerator enumerator2;
  472. ((IDisposable)enumerator2).Dispose();
  473. }
  474. result = false;
  475. }
  476. catch (Exception ex2)
  477. {
  478. ModBase.Log(ex2, "检查 Java 类别时出错", ModBase.LogLevel.Feedback, "出现错误");
  479. ModBase.m_IdentifierRepository.Set("LaunchArgumentJavaSelect", "", false, null);
  480. result = true;
  481. }
  482. return result;
  483. }
  484. // Token: 0x06000265 RID: 613 RVA: 0x0001B72C File Offset: 0x0001992C
  485. public static bool JavaSorter(ModJava.JavaEntry Left, ModJava.JavaEntry Right)
  486. {
  487. string prefix = "";
  488. string fullName = (new DirectoryInfo(ModBase.Path).Parent ?? new DirectoryInfo(ModBase.Path)).FullName;
  489. if (Operators.CompareString(ModMinecraft.m_ProxyTests, "", false) != 0)
  490. {
  491. prefix = (new DirectoryInfo(ModMinecraft.m_ProxyTests).Parent ?? new DirectoryInfo(ModMinecraft.m_ProxyTests)).FullName;
  492. }
  493. bool result;
  494. if (Left._UtilsRepository.StartsWithF(fullName, false) && !Right._UtilsRepository.StartsWithF(fullName, false))
  495. {
  496. result = true;
  497. }
  498. else if (!Left._UtilsRepository.StartsWithF(fullName, false) && Right._UtilsRepository.StartsWithF(fullName, false))
  499. {
  500. result = false;
  501. }
  502. else
  503. {
  504. if (Operators.CompareString(ModMinecraft.m_ProxyTests, "", false) != 0)
  505. {
  506. if (Left._UtilsRepository.StartsWithF(prefix, false) && !Right._UtilsRepository.StartsWithF(prefix, false))
  507. {
  508. return true;
  509. }
  510. if (!Left._UtilsRepository.StartsWithF(prefix, false) && Right._UtilsRepository.StartsWithF(prefix, false))
  511. {
  512. return false;
  513. }
  514. }
  515. if (Left.producerRepository && !Right.producerRepository)
  516. {
  517. result = true;
  518. }
  519. else if (!Left.producerRepository && Right.producerRepository)
  520. {
  521. result = false;
  522. }
  523. else if (Left.orderRepository && !Right.orderRepository)
  524. {
  525. result = true;
  526. }
  527. else if (!Left.orderRepository && Right.orderRepository)
  528. {
  529. result = false;
  530. }
  531. else if (Left.PostTests() != Right.PostTests())
  532. {
  533. int[] array = new int[]
  534. {
  535. 0,
  536. 1,
  537. 2,
  538. 3,
  539. 4,
  540. 5,
  541. 6,
  542. 14,
  543. 30,
  544. 10,
  545. 12,
  546. 15,
  547. 13,
  548. 9,
  549. 8,
  550. 7,
  551. 11,
  552. 31,
  553. 29,
  554. 16,
  555. 17,
  556. 28,
  557. 27,
  558. 26,
  559. 25,
  560. 24,
  561. 23,
  562. 22,
  563. 21,
  564. 20,
  565. 19,
  566. 18
  567. };
  568. result = (Enumerable.ElementAtOrDefault<int>(array, Left.PostTests()) >= Enumerable.ElementAtOrDefault<int>(array, Right.PostTests()));
  569. }
  570. else
  571. {
  572. result = checked(Math.Abs(Left.policyRepository.Revision - 51) <= Math.Abs(Right.policyRepository.Revision - 51));
  573. }
  574. }
  575. return result;
  576. }
  577. // Token: 0x06000266 RID: 614 RVA: 0x0001B904 File Offset: 0x00019B04
  578. private static void JavaSearchLoaderSub(ModLoader.LoaderTask<int, int> Loader)
  579. {
  580. if (ModMain._PolicyIterator != null)
  581. {
  582. ModBase.RunInUiWait((ModJava._Closure$__.$I16-0 == null) ? (ModJava._Closure$__.$I16-0 = delegate()
  583. {
  584. ModMain._PolicyIterator.ComboArgumentJava.Items.Clear();
  585. ModMain._PolicyIterator.ComboArgumentJava.Items.Add(new ComboBoxItem
  586. {
  587. Content = "加载中……",
  588. IsSelected = true
  589. });
  590. }) : ModJava._Closure$__.$I16-0);
  591. }
  592. if (ModMain.composerRepository != null)
  593. {
  594. ModBase.RunInUiWait((ModJava._Closure$__.$I16-1 == null) ? (ModJava._Closure$__.$I16-1 = delegate()
  595. {
  596. ModMain.composerRepository.ComboArgumentJava.Items.Clear();
  597. ModMain.composerRepository.ComboArgumentJava.Items.Add(new ComboBoxItem
  598. {
  599. Content = "加载中……",
  600. IsSelected = true
  601. });
  602. }) : ModJava._Closure$__.$I16-1);
  603. }
  604. try
  605. {
  606. Dictionary<string, bool> dictionary = new Dictionary<string, bool>();
  607. foreach (string text in (ModJava.InitBroadcaster() + ";" + ModJava.AddBroadcaster()).Replace("\\\\", "\\").Replace("/", "\\").Split(";"))
  608. {
  609. text = text.Trim(" \"".ToCharArray());
  610. if (Operators.CompareString(text, "", false) != 0)
  611. {
  612. if (!text.EndsWithF("\\", false))
  613. {
  614. text += "\\";
  615. }
  616. if (File.Exists(text + "javaw.exe"))
  617. {
  618. dictionary[text] = false;
  619. }
  620. }
  621. }
  622. foreach (DriveInfo driveInfo in DriveInfo.GetDrives())
  623. {
  624. if (driveInfo.DriveType != DriveType.Network)
  625. {
  626. ModJava.JavaSearchFolder(driveInfo.Name, ref dictionary, false, false);
  627. }
  628. }
  629. ModJava.JavaSearchFolder(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\", ref dictionary, false, false);
  630. ModJava.JavaSearchFolder(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\", ref dictionary, false, false);
  631. ModJava.JavaSearchFolder(ModBase.Path, ref dictionary, false, true);
  632. if (!string.IsNullOrWhiteSpace(ModMinecraft.m_ProxyTests) && Operators.CompareString(ModBase.Path, ModMinecraft.m_ProxyTests, false) != 0)
  633. {
  634. ModJava.JavaSearchFolder(ModMinecraft.m_ProxyTests, ref dictionary, false, true);
  635. }
  636. Dictionary<string, bool> dictionary2 = new Dictionary<string, bool>();
  637. try
  638. {
  639. Dictionary<string, bool>.Enumerator enumerator = dictionary.GetEnumerator();
  640. IL_2AF:
  641. while (enumerator.MoveNext())
  642. {
  643. KeyValuePair<string, bool> keyValuePair = enumerator.Current;
  644. string text2 = keyValuePair.Key.Replace("\\\\", "\\").Replace("/", "\\");
  645. FileSystemInfo fileSystemInfo = new FileInfo(text2 + "javaw.exe");
  646. while (!fileSystemInfo.Attributes.HasFlag(FileAttributes.ReparsePoint))
  647. {
  648. fileSystemInfo = ((fileSystemInfo is FileInfo) ? ((FileInfo)fileSystemInfo).Directory : ((DirectoryInfo)fileSystemInfo).Parent);
  649. if (fileSystemInfo == null)
  650. {
  651. ModBase.Log("[Java] 位于 " + text2 + " 的 Java 不含符号链接", ModBase.LogLevel.Normal, "出现错误");
  652. dictionary2.Add(keyValuePair.Key, keyValuePair.Value);
  653. goto IL_2AF;
  654. }
  655. }
  656. ModBase.Log("[Java] 位于 " + text2 + " 的 Java 包含符号链接", ModBase.LogLevel.Normal, "出现错误");
  657. }
  658. }
  659. finally
  660. {
  661. Dictionary<string, bool>.Enumerator enumerator;
  662. ((IDisposable)enumerator).Dispose();
  663. }
  664. if (Enumerable.Any<KeyValuePair<string, bool>>(dictionary2))
  665. {
  666. dictionary = dictionary2;
  667. }
  668. Dictionary<string, bool> dictionary3 = new Dictionary<string, bool>();
  669. try
  670. {
  671. foreach (KeyValuePair<string, bool> keyValuePair2 in dictionary)
  672. {
  673. if (!keyValuePair2.Key.Contains("java8path_target_") && !keyValuePair2.Key.Contains("javapath_target_") && !keyValuePair2.Key.Contains("javatmp"))
  674. {
  675. ModBase.Log("[Java] 位于 " + keyValuePair2.Key + " 的 Java 不含特殊引用", ModBase.LogLevel.Normal, "出现错误");
  676. dictionary3.Add(keyValuePair2.Key, keyValuePair2.Value);
  677. }
  678. else
  679. {
  680. ModBase.Log("[Java] 位于 " + keyValuePair2.Key + " 的 Java 包含特殊引用", ModBase.LogLevel.Normal, "出现错误");
  681. }
  682. }
  683. }
  684. finally
  685. {
  686. Dictionary<string, bool>.Enumerator enumerator2;
  687. ((IDisposable)enumerator2).Dispose();
  688. }
  689. if (Enumerable.Any<KeyValuePair<string, bool>>(dictionary3))
  690. {
  691. dictionary = dictionary3;
  692. }
  693. string data = Conversions.ToString(ModBase.m_IdentifierRepository.Get("LaunchArgumentJavaAll", null));
  694. try
  695. {
  696. try
  697. {
  698. foreach (object obj in ((IEnumerable)ModBase.GetJson(data)))
  699. {
  700. ModJava.JavaEntry javaEntry = ModJava.JavaEntry.FromJson((JObject)RuntimeHelpers.GetObjectValue(obj));
  701. if (javaEntry._ClassRepository)
  702. {
  703. dictionary[javaEntry._UtilsRepository] = true;
  704. }
  705. }
  706. }
  707. finally
  708. {
  709. IEnumerator enumerator3;
  710. if (enumerator3 is IDisposable)
  711. {
  712. (enumerator3 as IDisposable).Dispose();
  713. }
  714. }
  715. }
  716. catch (Exception ex)
  717. {
  718. ModBase.Log(ex, "Java 列表已损坏", ModBase.LogLevel.Feedback, "出现错误");
  719. ModBase.m_IdentifierRepository.Set("LaunchArgumentJavaAll", "[]", false, null);
  720. }
  721. List<ModJava.JavaEntry> list = new List<ModJava.JavaEntry>();
  722. try
  723. {
  724. foreach (KeyValuePair<string, bool> keyValuePair3 in dictionary.Distinct((ModJava._Closure$__.$I16-2 == null) ? (ModJava._Closure$__.$I16-2 = ((KeyValuePair<string, bool> a, KeyValuePair<string, bool> b) => Operators.CompareString(a.Key.ToLower(), b.Key.ToLower(), false) == 0)) : ModJava._Closure$__.$I16-2))
  725. {
  726. list.Add(new ModJava.JavaEntry(keyValuePair3.Key, keyValuePair3.Value));
  727. }
  728. }
  729. finally
  730. {
  731. List<KeyValuePair<string, bool>>.Enumerator enumerator4;
  732. ((IDisposable)enumerator4).Dispose();
  733. }
  734. list = ModJava.JavaCheckList(list).Sort(new ModBase.CompareThreadStart<ModJava.JavaEntry>(ModJava.JavaSorter));
  735. JArray jarray = new JArray();
  736. try
  737. {
  738. foreach (ModJava.JavaEntry javaEntry2 in list)
  739. {
  740. jarray.Add(javaEntry2.ToJson());
  741. }
  742. }
  743. finally
  744. {
  745. List<ModJava.JavaEntry>.Enumerator enumerator5;
  746. ((IDisposable)enumerator5).Dispose();
  747. }
  748. ModBase.m_IdentifierRepository.Set("LaunchArgumentJavaAll", jarray.ToString(0, new JsonConverter[0]), false, null);
  749. ModJava.interceptor = list;
  750. }
  751. catch (Exception ex2)
  752. {
  753. ModBase.Log(ex2, "搜索 Java 时出错", ModBase.LogLevel.Feedback, "出现错误");
  754. ModJava.interceptor = new List<ModJava.JavaEntry>();
  755. }
  756. ModBase.Log("[Java] Java 搜索完成,发现 " + Conversions.ToString(ModJava.interceptor.Count) + " 个 Java", ModBase.LogLevel.Normal, "出现错误");
  757. if (ModMain._PolicyIterator != null)
  758. {
  759. ModBase.RunInUi((ModJava._Closure$__.$I16-3 == null) ? (ModJava._Closure$__.$I16-3 = delegate()
  760. {
  761. ModMain._PolicyIterator.RefreshJavaComboBox();
  762. }) : ModJava._Closure$__.$I16-3, false);
  763. }
  764. if (ModMain.composerRepository != null)
  765. {
  766. ModBase.RunInUi((ModJava._Closure$__.$I16-4 == null) ? (ModJava._Closure$__.$I16-4 = delegate()
  767. {
  768. ModMain.composerRepository.RefreshJavaComboBox();
  769. }) : ModJava._Closure$__.$I16-4, false);
  770. }
  771. }
  772. // Token: 0x06000267 RID: 615 RVA: 0x0001BFC8 File Offset: 0x0001A1C8
  773. private static List<ModJava.JavaEntry> JavaCheckList(List<ModJava.JavaEntry> JavaEntries)
  774. {
  775. ModJava._Closure$__17-1 CS$<>8__locals1 = new ModJava._Closure$__17-1(CS$<>8__locals1);
  776. ModBase.Log("[Java] 开始确认列表 Java 状态,共 " + Conversions.ToString(JavaEntries.Count) + " 项", ModBase.LogLevel.Normal, "出现错误");
  777. CS$<>8__locals1.$VB$Local_JavaCheckList = new List<ModJava.JavaEntry>();
  778. CS$<>8__locals1.$VB$Local_ListLock = RuntimeHelpers.GetObjectValue(new object());
  779. List<Thread> list = new List<Thread>();
  780. try
  781. {
  782. List<ModJava.JavaEntry>.Enumerator enumerator = JavaEntries.GetEnumerator();
  783. while (enumerator.MoveNext())
  784. {
  785. ModJava._Closure$__17-0 CS$<>8__locals2 = new ModJava._Closure$__17-0(CS$<>8__locals2);
  786. CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2 = CS$<>8__locals1;
  787. CS$<>8__locals2.$VB$Local_Entry = enumerator.Current;
  788. Thread thread = new Thread(delegate()
  789. {
  790. try
  791. {
  792. CS$<>8__locals2.$VB$Local_Entry.Check();
  793. if (ModBase._TokenRepository)
  794. {
  795. ModBase.Log("[Java] - " + CS$<>8__locals2.$VB$Local_Entry.ToString(), ModBase.LogLevel.Normal, "出现错误");
  796. }
  797. object $VB$Local_ListLock = CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_ListLock;
  798. ObjectFlowControl.CheckForSyncLockOnValueType($VB$Local_ListLock);
  799. lock ($VB$Local_ListLock)
  800. {
  801. CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_JavaCheckList.Add(CS$<>8__locals2.$VB$Local_Entry);
  802. }
  803. }
  804. catch (ThreadInterruptedException ex)
  805. {
  806. }
  807. catch (Exception ex2)
  808. {
  809. if (CS$<>8__locals2.$VB$Local_Entry._ClassRepository)
  810. {
  811. ModBase.Log(ex2, "位于 " + CS$<>8__locals2.$VB$Local_Entry._UtilsRepository + " 的 Java 存在异常,将被自动移除", ModBase.LogLevel.Hint, "出现错误");
  812. }
  813. else
  814. {
  815. ModBase.Log(ex2, "位于 " + CS$<>8__locals2.$VB$Local_Entry._UtilsRepository + " 的 Java 存在异常", ModBase.LogLevel.Debug, "出现错误");
  816. }
  817. }
  818. });
  819. list.Add(thread);
  820. thread.Start();
  821. }
  822. goto IL_DF;
  823. }
  824. finally
  825. {
  826. List<ModJava.JavaEntry>.Enumerator enumerator;
  827. ((IDisposable)enumerator).Dispose();
  828. }
  829. try
  830. {
  831. IL_AC:
  832. List<Thread>.Enumerator enumerator2 = list.GetEnumerator();
  833. while (enumerator2.MoveNext())
  834. {
  835. if (enumerator2.Current.IsAlive)
  836. {
  837. goto IL_DF;
  838. }
  839. }
  840. goto IL_E8;
  841. }
  842. finally
  843. {
  844. List<Thread>.Enumerator enumerator2;
  845. ((IDisposable)enumerator2).Dispose();
  846. }
  847. goto IL_DF;
  848. IL_E8:
  849. return CS$<>8__locals1.$VB$Local_JavaCheckList;
  850. IL_DF:
  851. Thread.Sleep(10);
  852. goto IL_AC;
  853. }
  854. // Token: 0x06000268 RID: 616 RVA: 0x0001C0E0 File Offset: 0x0001A2E0
  855. private static void JavaSearchFolder(string OriginalPath, ref Dictionary<string, bool> Results, bool Source, bool IsFullSearch = false)
  856. {
  857. try
  858. {
  859. ModBase.Log("[Java] 开始" + (IsFullSearch ? "完全" : "部分") + "遍历查找:" + OriginalPath, ModBase.LogLevel.Normal, "出现错误");
  860. ModJava.JavaSearchFolder(new DirectoryInfo(OriginalPath), ref Results, Source, IsFullSearch);
  861. }
  862. catch (UnauthorizedAccessException ex)
  863. {
  864. ModBase.Log("[Java] 遍历查找 Java 时遭遇无权限的文件夹:" + OriginalPath, ModBase.LogLevel.Normal, "出现错误");
  865. }
  866. catch (Exception ex2)
  867. {
  868. ModBase.Log(ex2, "遍历查找 Java 时出错(" + OriginalPath + ")", ModBase.LogLevel.Debug, "出现错误");
  869. }
  870. }
  871. // Token: 0x06000269 RID: 617 RVA: 0x0001C194 File Offset: 0x0001A394
  872. private static void JavaSearchFolder(DirectoryInfo OriginalPath, ref Dictionary<string, bool> Results, bool Source, bool IsFullSearch = false)
  873. {
  874. try
  875. {
  876. if (OriginalPath.Exists)
  877. {
  878. string text = OriginalPath.FullName.Replace("\\\\", "\\");
  879. if (!text.EndsWithF("\\", false))
  880. {
  881. text += "\\";
  882. }
  883. if (File.Exists(text + "javaw.exe"))
  884. {
  885. Results[text] = Source;
  886. }
  887. string[] array = new string[]
  888. {
  889. "java",
  890. "jdk",
  891. "env",
  892. "环境",
  893. "run",
  894. "软件",
  895. "jre",
  896. "mc",
  897. "dragon",
  898. "soft",
  899. "cache",
  900. "temp",
  901. "corretto",
  902. "roaming",
  903. "users",
  904. "craft",
  905. "program",
  906. "世界",
  907. "net",
  908. "游戏",
  909. "oracle",
  910. "game",
  911. "file",
  912. "data",
  913. "jvm",
  914. "服务",
  915. "server",
  916. "客户",
  917. "client",
  918. "整合",
  919. "应用",
  920. "运行",
  921. "前置",
  922. "mojang",
  923. "官启",
  924. "新建文件夹",
  925. "eclipse",
  926. "microsoft",
  927. "hotspot",
  928. "runtime",
  929. "x86",
  930. "x64",
  931. "forge",
  932. "原版",
  933. "optifine",
  934. "官方",
  935. "启动",
  936. "hmcl",
  937. "mod",
  938. "高清",
  939. "download",
  940. "launch",
  941. "程序",
  942. "path",
  943. "version",
  944. "baka",
  945. "pcl",
  946. "zulu",
  947. "local",
  948. "packages",
  949. "4297127d64ec6",
  950. "国服",
  951. "网易",
  952. "ext",
  953. "netease",
  954. "1.",
  955. "启动"
  956. };
  957. try
  958. {
  959. foreach (DirectoryInfo directoryInfo in OriginalPath.EnumerateDirectories())
  960. {
  961. ModJava._Closure$__19-0 CS$<>8__locals1 = new ModJava._Closure$__19-0(CS$<>8__locals1);
  962. if (!directoryInfo.Attributes.HasFlag(FileAttributes.ReparsePoint))
  963. {
  964. CS$<>8__locals1.$VB$Local_SearchEntry = ModBase.GetFolderNameFromPath(directoryInfo.Name).ToLower();
  965. if (IsFullSearch || Operators.CompareString(directoryInfo.Parent.Name.ToLower(), "users", false) == 0 || ModBase.Val(CS$<>8__locals1.$VB$Local_SearchEntry) > 0.0 || Enumerable.Any<string>(array, (string w) => CS$<>8__locals1.$VB$Local_SearchEntry.Contains(w)) || Operators.CompareString(CS$<>8__locals1.$VB$Local_SearchEntry, "bin", false) == 0)
  966. {
  967. ModJava.JavaSearchFolder(directoryInfo, ref Results, Source, false);
  968. }
  969. }
  970. }
  971. }
  972. finally
  973. {
  974. IEnumerator<DirectoryInfo> enumerator;
  975. if (enumerator != null)
  976. {
  977. enumerator.Dispose();
  978. }
  979. }
  980. }
  981. }
  982. catch (UnauthorizedAccessException ex)
  983. {
  984. ModBase.Log("[Java] 遍历查找 Java 时遭遇无权限的文件夹:" + OriginalPath.FullName, ModBase.LogLevel.Normal, "出现错误");
  985. }
  986. catch (Exception ex2)
  987. {
  988. ModBase.Log(ex2, "遍历查找 Java 时出错(" + OriginalPath.FullName + ")", ModBase.LogLevel.Debug, "出现错误");
  989. }
  990. }
  991. // Token: 0x0600026A RID: 618 RVA: 0x0001C5D4 File Offset: 0x0001A7D4
  992. public static bool JavaDownloadConfirm(string VersionDescription, bool ForcedManualDownload = false)
  993. {
  994. bool result;
  995. if (ForcedManualDownload)
  996. {
  997. ModMain.MyMsgBox(string.Format("PCL 未找到 {0}。", VersionDescription) + "\r\n" + string.Format("请自行搜索并安装 {0},安装后在 设置 → 启动选项 → 游戏 Java 中重新搜索或导入。", VersionDescription), "未找到 Java", "确定", "", "", false, true, false, null, null, null);
  998. result = false;
  999. }
  1000. else
  1001. {
  1002. result = (ModMain.MyMsgBox(string.Format("PCL 未找到 {0},是否需要 PCL 自动下载?", VersionDescription) + "\r\n" + string.Format("如果你已经安装了 {0},请在 设置 → 启动选项 → 游戏 Java 中手动导入。", VersionDescription), "未找到 Java", "自动下载", "取消", "", false, true, false, null, null, null) == 1);
  1003. }
  1004. return result;
  1005. }
  1006. // Token: 0x0600026B RID: 619 RVA: 0x0001C66C File Offset: 0x0001A86C
  1007. public static ModLoader.LoaderCombo<int> JavaFixLoaders(int Version)
  1008. {
  1009. ModNet.LoaderDownload loaderDownload = new ModNet.LoaderDownload("下载 Java 文件", new List<ModNet.NetFile>())
  1010. {
  1011. ProgressWeight = 10.0
  1012. };
  1013. ModLoader.LoaderCombo<int> result = new ModLoader.LoaderCombo<int>(string.Format("下载 Java {0}", Version), new ModLoader.LoaderBase[]
  1014. {
  1015. new ModLoader.LoaderTask<int, List<ModNet.NetFile>>("获取 Java 下载信息", new Action<ModLoader.LoaderTask<int, List<ModNet.NetFile>>>(ModJava.JavaFileList), null, ThreadPriority.Normal)
  1016. {
  1017. ProgressWeight = 2.0
  1018. },
  1019. loaderDownload,
  1020. ModJava._Process
  1021. });
  1022. loaderDownload.OnStateChangedThread += ((ModJava._Closure$__.$I21-0 == null) ? (ModJava._Closure$__.$I21-0 = delegate(ModLoader.LoaderBase Raw, ModBase.LoadState NewState, ModBase.LoadState OldState)
  1023. {
  1024. if ((NewState == ModBase.LoadState.Failed || NewState == ModBase.LoadState.Aborted) && ModJava._Parameter != null)
  1025. {
  1026. ModBase.Log(string.Format("[Java] 由于下载未完成,清理未下载完成的 Java 文件:{0}", ModJava._Parameter), ModBase.LogLevel.Debug, "出现错误");
  1027. ModBase.DeleteDirectory(ModJava._Parameter, false);
  1028. return;
  1029. }
  1030. if (NewState == ModBase.LoadState.Finished)
  1031. {
  1032. ModJava._Parameter = null;
  1033. }
  1034. }) : ModJava._Closure$__.$I21-0);
  1035. loaderDownload.HasOnStateChangedThread = true;
  1036. return result;
  1037. }
  1038. // Token: 0x0600026C RID: 620 RVA: 0x0001C71C File Offset: 0x0001A91C
  1039. private static void JavaFileList(ModLoader.LoaderTask<int, List<ModNet.NetFile>> Loader)
  1040. {
  1041. ModJava._Closure$__23-1 CS$<>8__locals1 = new ModJava._Closure$__23-1(CS$<>8__locals1);
  1042. CS$<>8__locals1.$VB$Local_Loader = Loader;
  1043. ModBase.Log("[Java] 开始获取 Java 下载信息", ModBase.LogLevel.Normal, "出现错误");
  1044. KeyValuePair<string, JObject> keyValuePair = Enumerable.First<KeyValuePair<string, JObject>>(Enumerable.SelectMany<JToken, KeyValuePair<string, JObject>>(Enumerable.Reverse<JToken>((IEnumerable<JToken>)((JObject)((JObject)ModBase.GetJson(ModNet.NetGetCodeByDownload(new string[]
  1045. {
  1046. "https://bmclapi2.bangbang93.com/v1/products/java-runtime/2ec0cc96c44e5a76b9c8b7c39df7210883d12871/all.json",
  1047. "https://piston-meta.mojang.com/v1/products/java-runtime/2ec0cc96c44e5a76b9c8b7c39df7210883d12871/all.json"
  1048. }, 45000, true, false)))[string.Format("windows-x{0}", ModBase.m_StubRepository ? "86" : "64")]).Children()), (ModJava._Closure$__.$IR23-1 == null) ? (ModJava._Closure$__.$IR23-1 = ((JToken a0) => ((ModJava._Closure$__.$I23-0 == null) ? (ModJava._Closure$__.$I23-0 = delegate(JProperty e)
  1049. {
  1050. ModJava._Closure$__23-0 CS$<>8__locals2 = new ModJava._Closure$__23-0(CS$<>8__locals2);
  1051. CS$<>8__locals2.$VB$Local_e = e;
  1052. return Enumerable.Select<JToken, KeyValuePair<string, JObject>>((JArray)CS$<>8__locals2.$VB$Local_e.Value, (JToken v) => new KeyValuePair<string, JObject>(CS$<>8__locals2.$VB$Local_e.Name, (JObject)v));
  1053. }) : ModJava._Closure$__.$I23-0)((JProperty)a0))) : ModJava._Closure$__.$IR23-1), (KeyValuePair<string, JObject> t) => t.Value["version"]["name"].ToString().StartsWithF(Conversions.ToString(CS$<>8__locals1.$VB$Local_Loader.Input), false));
  1054. string text = (string)keyValuePair.Value["manifest"]["url"];
  1055. ModBase.Log(string.Format("[Java] 准备下载 Java {0}({1}):{2}", keyValuePair.Value["version"]["name"], keyValuePair.Key, text), ModBase.LogLevel.Normal, "出现错误");
  1056. string data = ModNet.NetGetCodeByDownload(new string[]
  1057. {
  1058. text.Replace("piston-meta.mojang.com", "bmclapi2.bangbang93.com"),
  1059. text
  1060. }, 45000, true, false);
  1061. ModJava._Parameter = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\.minecraft\\runtime\\" + keyValuePair.Key + "\\";
  1062. List<ModNet.NetFile> list = new List<ModNet.NetFile>();
  1063. try
  1064. {
  1065. foreach (JToken jtoken in ((JObject)ModBase.GetJson(data))["files"])
  1066. {
  1067. JProperty jproperty = (JProperty)jtoken;
  1068. JToken jtoken2 = ((JObject)jproperty.Value)["downloads"];
  1069. if (((jtoken2 != null) ? jtoken2["raw"] : null) != null)
  1070. {
  1071. JObject jobject = (JObject)((JObject)jproperty.Value)["downloads"]["raw"];
  1072. ModBase.FileChecker fileChecker = new ModBase.FileChecker(-1L, (long)jobject["size"], (string)jobject["sha1"], true, false);
  1073. if (Operators.CompareString(fileChecker.specificationError, "12976a6c2b227cbac58969c1455444596c894656", false) != 0 && Operators.CompareString(fileChecker.specificationError, "c80e4bab46e34d02826eab226a4441d0970f2aba", false) != 0 && Operators.CompareString(fileChecker.specificationError, "84d2102ad171863db04e7ee22a259d1f6c5de4a5", false) != 0 && fileChecker.Check(ModJava._Parameter + jproperty.Name) != null)
  1074. {
  1075. string text2 = (string)jobject["url"];
  1076. list.Add(new ModNet.NetFile(new string[]
  1077. {
  1078. text2.Replace("piston-data.mojang.com", "bmclapi2.bangbang93.com"),
  1079. text2
  1080. }, ModJava._Parameter + jproperty.Name, fileChecker, false));
  1081. }
  1082. }
  1083. }
  1084. }
  1085. finally
  1086. {
  1087. IEnumerator<JToken> enumerator;
  1088. if (enumerator != null)
  1089. {
  1090. enumerator.Dispose();
  1091. }
  1092. }
  1093. CS$<>8__locals1.$VB$Local_Loader.Output = list;
  1094. ModBase.Log(string.Format("[Java] 需要下载 {0} 个文件,目标文件夹:{1}", list.Count, ModJava._Parameter), ModBase.LogLevel.Normal, "出现错误");
  1095. }
  1096. // Token: 0x04000163 RID: 355
  1097. public static int m_Page = 7;
  1098. // Token: 0x04000164 RID: 356
  1099. public static List<ModJava.JavaEntry> interceptor = new List<ModJava.JavaEntry>();
  1100. // Token: 0x04000165 RID: 357
  1101. private static string m_Container = null;
  1102. // Token: 0x04000166 RID: 358
  1103. private static string @params = null;
  1104. // Token: 0x04000167 RID: 359
  1105. public static object m_Dispatcher = RuntimeHelpers.GetObjectValue(new object());
  1106. // Token: 0x04000168 RID: 360
  1107. public static ModLoader.LoaderTask<int, int> _Process = new ModLoader.LoaderTask<int, int>("查找 Java", new Action<ModLoader.LoaderTask<int, int>>(ModJava.JavaSearchLoaderSub), null, ThreadPriority.Normal)
  1108. {
  1109. ProgressWeight = 2.0
  1110. };
  1111. // Token: 0x04000169 RID: 361
  1112. private static string _Parameter = null;
  1113. // Token: 0x02000066 RID: 102
  1114. public class JavaEntry
  1115. {
  1116. // Token: 0x0600026D RID: 621 RVA: 0x000037B1 File Offset: 0x000019B1
  1117. public string StartTests()
  1118. {
  1119. return this._UtilsRepository + "java.exe";
  1120. }
  1121. // Token: 0x0600026E RID: 622 RVA: 0x000037C3 File Offset: 0x000019C3
  1122. public string PrintTests()
  1123. {
  1124. return this._UtilsRepository + "javaw.exe";
  1125. }
  1126. // Token: 0x0600026F RID: 623 RVA: 0x000037D5 File Offset: 0x000019D5
  1127. public int PostTests()
  1128. {
  1129. return this.policyRepository.Minor;
  1130. }
  1131. // Token: 0x06000270 RID: 624 RVA: 0x0001CA64 File Offset: 0x0001AC64
  1132. public bool CompareTests()
  1133. {
  1134. return this._UtilsRepository != null && ModJava.InitBroadcaster() != null && ModJava.InitBroadcaster().Replace("\\", "").Replace("/", "").ContainsF(this._UtilsRepository.Replace("\\", ""), true);
  1135. }
  1136. // Token: 0x06000271 RID: 625 RVA: 0x0001CAC4 File Offset: 0x0001ACC4
  1137. public JObject ToJson()
  1138. {
  1139. return new JObject(new object[]
  1140. {
  1141. new JProperty("Path", this._UtilsRepository),
  1142. new JProperty("VersionString", this.policyRepository.ToString()),
  1143. new JProperty("IsJre", this.orderRepository),
  1144. new JProperty("Is64Bit", this.producerRepository),
  1145. new JProperty("IsUserImport", this._ClassRepository)
  1146. });
  1147. }
  1148. // Token: 0x06000272 RID: 626 RVA: 0x0001CB50 File Offset: 0x0001AD50
  1149. public static ModJava.JavaEntry FromJson(JObject Data)
  1150. {
  1151. return new ModJava.JavaEntry((string)Data["Path"], (bool)Data["IsUserImport"])
  1152. {
  1153. policyRepository = new Version((string)Data["VersionString"]),
  1154. orderRepository = (bool)Data["IsJre"],
  1155. producerRepository = (bool)Data["Is64Bit"]
  1156. };
  1157. }
  1158. // Token: 0x06000273 RID: 627 RVA: 0x0001CBCC File Offset: 0x0001ADCC
  1159. public override string ToString()
  1160. {
  1161. string text = this.policyRepository.ToString();
  1162. if (text.StartsWithF("1.", false))
  1163. {
  1164. text = Strings.Mid(text, 3);
  1165. }
  1166. return string.Concat(new string[]
  1167. {
  1168. this.orderRepository ? "JRE " : "JDK ",
  1169. Conversions.ToString(this.PostTests()),
  1170. " (",
  1171. text,
  1172. ")",
  1173. this.producerRepository ? "" : ",32 位",
  1174. this._ClassRepository ? ",手动导入" : "",
  1175. ":",
  1176. this._UtilsRepository
  1177. });
  1178. }
  1179. // Token: 0x06000274 RID: 628 RVA: 0x0001CC80 File Offset: 0x0001AE80
  1180. public JavaEntry(string Folder, bool IsUserImport)
  1181. {
  1182. this.IsChecked = false;
  1183. if (!Folder.EndsWithF("\\", false))
  1184. {
  1185. Folder += "\\";
  1186. }
  1187. this._UtilsRepository = Folder.Replace("/", "\\");
  1188. this._ClassRepository = IsUserImport;
  1189. }
  1190. // Token: 0x06000275 RID: 629 RVA: 0x0001CCD4 File Offset: 0x0001AED4
  1191. public void Check()
  1192. {
  1193. if (!this.IsChecked)
  1194. {
  1195. string text = null;
  1196. try
  1197. {
  1198. if (!File.Exists(this.PrintTests()))
  1199. {
  1200. throw new FileNotFoundException("未找到 javaw.exe 文件", this.PrintTests());
  1201. }
  1202. if (!File.Exists(this._UtilsRepository + "java.exe"))
  1203. {
  1204. throw new FileNotFoundException("未找到 java.exe 文件", this._UtilsRepository + "java.exe");
  1205. }
  1206. this.orderRepository = !File.Exists(this._UtilsRepository + "javac.exe");
  1207. text = ModBase.ShellAndGetOutput(this._UtilsRepository + "java.exe", "-version", 15000, null).ToLower();
  1208. if (Operators.CompareString(text, "", false) == 0)
  1209. {
  1210. throw new ApplicationException("尝试运行该 Java 失败");
  1211. }
  1212. if (ModBase._TokenRepository)
  1213. {
  1214. ModBase.Log("[Java] Java 检查输出:" + this._UtilsRepository + "java.exe\r\n" + text, ModBase.LogLevel.Normal, "出现错误");
  1215. }
  1216. if (text.Contains("/lib/ext exists"))
  1217. {
  1218. throw new ApplicationException("无法运行该 Java,请在删除 Java 文件夹中的 /lib/ext 文件夹后再试");
  1219. }
  1220. string text2;
  1221. if ((text2 = ModBase.RegexSeek(text, "(?<=version \")[^\"]+", 0)) == null)
  1222. {
  1223. text2 = (ModBase.RegexSeek(text, "(?<=openjdk )[0-9]+", 0) ?? "");
  1224. }
  1225. string text3 = Enumerable.First<string>(text2.Replace("_", ".").Split("-"));
  1226. if (Enumerable.Count<string>(text3.Split(".")) > 4)
  1227. {
  1228. text3 = text3.Replace(".0.", ".");
  1229. }
  1230. while (Enumerable.Count<string>(text3.Split(".")) < 4)
  1231. {
  1232. if (text3.StartsWithF("1.", false))
  1233. {
  1234. text3 += ".0";
  1235. }
  1236. else
  1237. {
  1238. text3 = "1." + text3;
  1239. }
  1240. }
  1241. if (Operators.CompareString(text3, "", false) == 0)
  1242. {
  1243. throw new ApplicationException(string.Format("未找到该 Java 的版本号{0}", (text.Length < 500) ? string.Format("{0}输出为:{1}{2}", "\r\n", "\r\n", text) : ""));
  1244. }
  1245. this.policyRepository = new Version(text3);
  1246. if (this.policyRepository.Minor == 0)
  1247. {
  1248. ModBase.Log("[Java] 疑似 X.0.X.X 格式版本号:" + this.policyRepository.ToString(), ModBase.LogLevel.Normal, "出现错误");
  1249. this.policyRepository = new Version(1, this.policyRepository.Major, this.policyRepository.Build, this.policyRepository.Revision);
  1250. }
  1251. this.producerRepository = text.Contains("64-bit");
  1252. if (this.policyRepository.Minor <= 4 || this.policyRepository.Minor >= 25)
  1253. {
  1254. throw new ApplicationException("分析详细信息失败,获取的版本为 " + this.policyRepository.ToString());
  1255. }
  1256. if (!this.producerRepository && !ModBase.m_StubRepository)
  1257. {
  1258. throw new Exception("该 Java 为 32 位版本,请安装 64 位的 Java");
  1259. }
  1260. if (this.orderRepository && this.PostTests() >= 16)
  1261. {
  1262. throw new Exception("由于高版本 JRE 对游戏的兼容性很差,因此不再允许使用。你可以使用对应版本的 JDK,而非 JRE!");
  1263. }
  1264. }
  1265. catch (ApplicationException ex)
  1266. {
  1267. throw ex;
  1268. }
  1269. catch (ThreadInterruptedException ex2)
  1270. {
  1271. throw ex2;
  1272. }
  1273. catch (Exception innerException)
  1274. {
  1275. ModBase.Log("[Java] 检查失败的 Java 输出:" + this._UtilsRepository + "java.exe\r\n" + (text ?? "无程序输出"), ModBase.LogLevel.Normal, "出现错误");
  1276. throw new Exception("检查 Java 失败(" + (this.PrintTests() ?? "Nothing") + ")", innerException);
  1277. }
  1278. this.IsChecked = true;
  1279. }
  1280. }
  1281. // Token: 0x0400016A RID: 362
  1282. public string _UtilsRepository;
  1283. // Token: 0x0400016B RID: 363
  1284. public bool _ClassRepository;
  1285. // Token: 0x0400016C RID: 364
  1286. public Version policyRepository;
  1287. // Token: 0x0400016D RID: 365
  1288. public bool orderRepository;
  1289. // Token: 0x0400016E RID: 366
  1290. public bool producerRepository;
  1291. // Token: 0x0400016F RID: 367
  1292. private bool IsChecked;
  1293. }
  1294. }
  1295. }