ModMinecraft.cs 129 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Globalization;
  5. using System.IO;
  6. using System.IO.Compression;
  7. using System.Linq;
  8. using System.Runtime.CompilerServices;
  9. using System.Text;
  10. using System.Threading;
  11. using Microsoft.VisualBasic;
  12. using Microsoft.VisualBasic.CompilerServices;
  13. using Newtonsoft.Json.Linq;
  14. using PCL.My;
  15. namespace PCL
  16. {
  17. // Token: 0x0200016E RID: 366
  18. [StandardModule]
  19. public sealed class ModMinecraft
  20. {
  21. // Token: 0x06000E57 RID: 3671 RVA: 0x00067A1C File Offset: 0x00065C1C
  22. private static void McFolderListLoadSub()
  23. {
  24. try
  25. {
  26. List<ModMinecraft.McFolder> list = new List<ModMinecraft.McFolder>();
  27. try
  28. {
  29. if (Directory.Exists(ModBase.Path + "versions\\"))
  30. {
  31. list.Add(new ModMinecraft.McFolder
  32. {
  33. Name = "当前文件夹",
  34. Path = ModBase.Path,
  35. Type = ModMinecraft.McFolderType.Original
  36. });
  37. }
  38. foreach (DirectoryInfo directoryInfo in new DirectoryInfo(ModBase.Path).GetDirectories())
  39. {
  40. if (Directory.Exists(directoryInfo.FullName + "versions\\") || Operators.CompareString(directoryInfo.Name, ".minecraft", false) == 0)
  41. {
  42. list.Add(new ModMinecraft.McFolder
  43. {
  44. Name = "当前文件夹",
  45. Path = directoryInfo.FullName + "\\",
  46. Type = ModMinecraft.McFolderType.Original
  47. });
  48. }
  49. }
  50. }
  51. catch (Exception ex)
  52. {
  53. ModBase.Log(ex, "扫描 PCL 所在文件夹中是否有 MC 文件夹失败", ModBase.LogLevel.Debug, "出现错误");
  54. }
  55. string text = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\.minecraft\\";
  56. if ((!Enumerable.Any<ModMinecraft.McFolder>(list) || Operators.CompareString(text, list[0].Path, false) != 0) && Directory.Exists(text + "versions\\"))
  57. {
  58. list.Add(new ModMinecraft.McFolder
  59. {
  60. Name = "官方启动器文件夹",
  61. Path = text,
  62. Type = ModMinecraft.McFolderType.Original
  63. });
  64. }
  65. try
  66. {
  67. foreach (object value in ((IEnumerable)NewLateBinding.LateGet(ModBase.m_IdentifierRepository.Get("LaunchFolders", null), null, "Split", new object[]
  68. {
  69. "|"
  70. }, null, null, null)))
  71. {
  72. string text2 = Conversions.ToString(value);
  73. if (Operators.CompareString(text2, "", false) != 0)
  74. {
  75. if (text2.Contains(">") && text2.EndsWithF("\\", false))
  76. {
  77. string name = text2.Split(">")[0];
  78. string text3 = text2.Split(">")[1];
  79. if (ModBase.CheckPermission(text3))
  80. {
  81. bool flag = false;
  82. try
  83. {
  84. foreach (ModMinecraft.McFolder mcFolder in list)
  85. {
  86. if (Operators.CompareString(mcFolder.Path, text3, false) == 0)
  87. {
  88. mcFolder.Name = name;
  89. mcFolder.Type = ModMinecraft.McFolderType.RenamedOriginal;
  90. flag = true;
  91. }
  92. }
  93. }
  94. finally
  95. {
  96. List<ModMinecraft.McFolder>.Enumerator enumerator2;
  97. ((IDisposable)enumerator2).Dispose();
  98. }
  99. if (!flag)
  100. {
  101. list.Add(new ModMinecraft.McFolder
  102. {
  103. Name = name,
  104. Path = text3,
  105. Type = ModMinecraft.McFolderType.Custom
  106. });
  107. }
  108. }
  109. else
  110. {
  111. ModMain.Hint("无法访问 Minecraft 文件夹:" + text3, ModMain.HintType.Critical, true);
  112. }
  113. }
  114. else
  115. {
  116. ModMain.Hint("无效的 Minecraft 文件夹:" + text2, ModMain.HintType.Critical, true);
  117. }
  118. }
  119. }
  120. }
  121. finally
  122. {
  123. IEnumerator enumerator;
  124. if (enumerator is IDisposable)
  125. {
  126. (enumerator as IDisposable).Dispose();
  127. }
  128. }
  129. List<string> list2 = new List<string>();
  130. try
  131. {
  132. foreach (ModMinecraft.McFolder mcFolder2 in list)
  133. {
  134. if (mcFolder2.Type != ModMinecraft.McFolderType.Original)
  135. {
  136. list2.Add(mcFolder2.Name + ">" + mcFolder2.Path);
  137. }
  138. }
  139. }
  140. finally
  141. {
  142. List<ModMinecraft.McFolder>.Enumerator enumerator3;
  143. ((IDisposable)enumerator3).Dispose();
  144. }
  145. if (!Enumerable.Any<string>(list2))
  146. {
  147. list2.Add("");
  148. }
  149. ModBase.m_IdentifierRepository.Set("LaunchFolders", list2.Join("|"), false, null);
  150. if (!Enumerable.Any<ModMinecraft.McFolder>(list))
  151. {
  152. Directory.CreateDirectory(ModBase.Path + ".minecraft\\versions\\");
  153. list.Add(new ModMinecraft.McFolder
  154. {
  155. Name = "当前文件夹",
  156. Path = ModBase.Path + ".minecraft\\",
  157. Type = ModMinecraft.McFolderType.Original
  158. });
  159. }
  160. try
  161. {
  162. foreach (ModMinecraft.McFolder mcFolder3 in list)
  163. {
  164. ModMinecraft.McFolderLauncherProfilesJsonCreate(mcFolder3.Path);
  165. }
  166. }
  167. finally
  168. {
  169. List<ModMinecraft.McFolder>.Enumerator enumerator4;
  170. ((IDisposable)enumerator4).Dispose();
  171. }
  172. if (Conversions.ToBoolean(ModBase.m_IdentifierRepository.Get("SystemDebugDelay", null)))
  173. {
  174. Thread.Sleep(ModBase.RandomInteger(200, 2000));
  175. }
  176. ModMinecraft.messageTests = list;
  177. }
  178. catch (Exception ex2)
  179. {
  180. ModBase.Log(ex2, "加载 Minecraft 文件夹列表失败", ModBase.LogLevel.Feedback, "出现错误");
  181. }
  182. }
  183. // Token: 0x06000E58 RID: 3672 RVA: 0x00067EE4 File Offset: 0x000660E4
  184. public static void McFolderLauncherProfilesJsonCreate(string Folder)
  185. {
  186. try
  187. {
  188. if (!File.Exists(Folder + "launcher_profiles.json"))
  189. {
  190. string text = string.Concat(new string[]
  191. {
  192. "{\r\n \"profiles\": {\r\n \"PCL\": {\r\n \"icon\": \"Grass\",\r\n \"name\": \"PCL\",\r\n \"lastVersionId\": \"latest-release\",\r\n \"type\": \"latest-release\",\r\n \"lastUsed\": \"",
  193. DateTime.Now.ToString("yyyy'-'MM'-'dd"),
  194. "T",
  195. DateTime.Now.ToString("HH':'mm':'ss"),
  196. ".0000Z\"\r\n }\r\n },\r\n \"selectedProfile\": \"PCL\",\r\n \"clientToken\": \"23323323323323323323323323323333\"\r\n}"
  197. });
  198. ModBase.WriteFile(Folder + "launcher_profiles.json", text, false, Encoding.GetEncoding("GB18030"));
  199. ModBase.Log("[Minecraft] 已创建 launcher_profiles.json:" + Folder, ModBase.LogLevel.Normal, "出现错误");
  200. }
  201. }
  202. catch (Exception ex)
  203. {
  204. ModBase.Log(ex, "创建 launcher_profiles.json 失败(" + Folder + ")", ModBase.LogLevel.Feedback, "出现错误");
  205. }
  206. }
  207. // Token: 0x06000E59 RID: 3673 RVA: 0x00008F58 File Offset: 0x00007158
  208. public static ModMinecraft.McVersion AddClient()
  209. {
  210. return ModMinecraft.initializerTests;
  211. }
  212. // Token: 0x06000E5A RID: 3674 RVA: 0x00067FC4 File Offset: 0x000661C4
  213. public static void InstantiateClient(ModMinecraft.McVersion value)
  214. {
  215. if (!object.ReferenceEquals(RuntimeHelpers.GetObjectValue(ModMinecraft._SingletonTests), value))
  216. {
  217. ModMinecraft.initializerTests = value;
  218. ModMinecraft._SingletonTests = value;
  219. if (value != null)
  220. {
  221. PageDownloadCompDetail.parameterReader = null;
  222. if (ModAnimation.CalcParser() == 0 && Operators.ConditionalCompareObjectNotEqual(ModBase.m_IdentifierRepository.Get("VersionServerNide", value), ModBase.m_IdentifierRepository.Get("CacheNideServer", null), false) && Operators.ConditionalCompareObjectEqual(ModBase.m_IdentifierRepository.Get("VersionServerLogin", value), 3, false))
  223. {
  224. ModBase.m_IdentifierRepository.Set("CacheNideAccess", "", false, null);
  225. ModBase.Log("[Launch] 服务器改变,要求重新登录统一通行证", ModBase.LogLevel.Normal, "出现错误");
  226. }
  227. if (Operators.ConditionalCompareObjectEqual(ModBase.m_IdentifierRepository.Get("VersionServerLogin", value), 3, false))
  228. {
  229. ModBase.m_IdentifierRepository.Set("CacheNideServer", RuntimeHelpers.GetObjectValue(ModBase.m_IdentifierRepository.Get("VersionServerNide", value)), false, null);
  230. }
  231. if (ModAnimation.CalcParser() == 0 && Operators.ConditionalCompareObjectNotEqual(ModBase.m_IdentifierRepository.Get("VersionServerAuthServer", value), ModBase.m_IdentifierRepository.Get("CacheAuthServerServer", null), false) && Operators.ConditionalCompareObjectEqual(ModBase.m_IdentifierRepository.Get("VersionServerLogin", value), 4, false))
  232. {
  233. ModBase.m_IdentifierRepository.Set("CacheAuthAccess", "", false, null);
  234. ModBase.Log("[Launch] 服务器改变,要求重新登录 Authlib-Injector", ModBase.LogLevel.Normal, "出现错误");
  235. }
  236. if (Operators.ConditionalCompareObjectEqual(ModBase.m_IdentifierRepository.Get("VersionServerLogin", value), 4, false))
  237. {
  238. ModBase.m_IdentifierRepository.Set("CacheAuthServerServer", RuntimeHelpers.GetObjectValue(ModBase.m_IdentifierRepository.Get("VersionServerAuthServer", value)), false, null);
  239. ModBase.m_IdentifierRepository.Set("CacheAuthServerName", RuntimeHelpers.GetObjectValue(ModBase.m_IdentifierRepository.Get("VersionServerAuthName", value)), false, null);
  240. ModBase.m_IdentifierRepository.Set("CacheAuthServerRegister", RuntimeHelpers.GetObjectValue(ModBase.m_IdentifierRepository.Get("VersionServerAuthRegister", value)), false, null);
  241. }
  242. }
  243. }
  244. }
  245. // Token: 0x06000E5B RID: 3675 RVA: 0x000681B8 File Offset: 0x000663B8
  246. public static string GetMcFoolName(string Name)
  247. {
  248. Name = Name.ToLower();
  249. string result;
  250. if (Name.StartsWithF("2.0", false))
  251. {
  252. result = "2013 | 这个秘密计划了两年的更新将游戏推向了一个新高度!";
  253. }
  254. else if (Operators.CompareString(Name, "15w14a", false) == 0)
  255. {
  256. result = "2015 | 作为一款全年龄向的游戏,我们需要和平,需要爱与拥抱。";
  257. }
  258. else if (Operators.CompareString(Name, "1.rv-pre1", false) == 0)
  259. {
  260. result = "2016 | 是时候将现代科技带入 Minecraft 了!";
  261. }
  262. else if (Operators.CompareString(Name, "3d shareware v1.34", false) == 0)
  263. {
  264. result = "2019 | 我们从地下室的废墟里找到了这个开发于 1994 年的杰作!";
  265. }
  266. else if (!Name.StartsWithF("20w14inf", false) && Operators.CompareString(Name, "20w14∞", false) != 0)
  267. {
  268. if (Operators.CompareString(Name, "22w13oneblockatatime", false) == 0)
  269. {
  270. result = "2022 | 一次一个方块更新!迎接全新的挖掘、合成与骑乘玩法吧!";
  271. }
  272. else if (Operators.CompareString(Name, "23w13a_or_b", false) == 0)
  273. {
  274. result = "2023 | 研究表明:玩家喜欢作出选择——越多越好!";
  275. }
  276. else if (Operators.CompareString(Name, "24w14potato", false) == 0)
  277. {
  278. result = "2024 | 毒马铃薯一直都被大家忽视和低估,于是我们超级加强了它!";
  279. }
  280. else
  281. {
  282. result = "";
  283. }
  284. }
  285. else
  286. {
  287. result = "2020 | 我们加入了 20 亿个新的维度,让无限的想象变成了现实!";
  288. }
  289. return result;
  290. }
  291. // Token: 0x06000E5C RID: 3676 RVA: 0x0006829C File Offset: 0x0006649C
  292. private static void McVersionListLoad(ModLoader.LoaderTask<string, int> Loader)
  293. {
  294. string input = Loader.Input;
  295. try
  296. {
  297. ModMinecraft._RegTests = new Dictionary<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>>();
  298. List<string> list = new List<string>();
  299. if (Directory.Exists(input + "versions"))
  300. {
  301. try
  302. {
  303. foreach (DirectoryInfo directoryInfo in new DirectoryInfo(input + "versions").GetDirectories())
  304. {
  305. list.Add(directoryInfo.Name);
  306. }
  307. }
  308. catch (Exception innerException)
  309. {
  310. throw new Exception("无法读取版本文件夹,可能是由于没有权限(" + input + "versions)", innerException);
  311. }
  312. }
  313. if (!Enumerable.Any<string>(list))
  314. {
  315. ModBase.WriteIni(input + "PCL.ini", "VersionCache", "");
  316. }
  317. else
  318. {
  319. int num = Convert.ToInt32(decimal.Remainder(new decimal(ModBase.GetHash(Conversions.ToString(30) + "#" + list.ToArray().Join("#"))), 2147483646m));
  320. if (!ModMinecraft.m_ProductTests && ModBase.Val(ModBase.ReadIni(input + "PCL.ini", "VersionCache", "")) == (double)num)
  321. {
  322. Dictionary<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>> dictionary = ModMinecraft.McVersionListLoadCache(input);
  323. if (dictionary != null)
  324. {
  325. ModMinecraft._RegTests = dictionary;
  326. goto IL_16C;
  327. }
  328. }
  329. ModMinecraft.m_ProductTests = false;
  330. ModBase.Log("[Minecraft] 文件夹列表变更,重载所有版本", ModBase.LogLevel.Normal, "出现错误");
  331. ModBase.WriteIni(input + "PCL.ini", "VersionCache", Conversions.ToString(num));
  332. ModMinecraft._RegTests = ModMinecraft.McVersionListLoadNoCache(input);
  333. IL_16C:
  334. ModMinecraft.collectionTests = false;
  335. if (Loader.IsAborted)
  336. {
  337. return;
  338. }
  339. }
  340. if (Enumerable.Any<KeyValuePair<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>>>(ModMinecraft._RegTests, (ModMinecraft._Closure$__.$I22-0 == null) ? (ModMinecraft._Closure$__.$I22-0 = ((KeyValuePair<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>> v) => v.Key != ModMinecraft.McVersionCardType.Error)) : ModMinecraft._Closure$__.$I22-0))
  341. {
  342. string text = ModBase.ReadIni(input + "PCL.ini", "Version", "");
  343. if (Operators.CompareString(text, "", false) != 0)
  344. {
  345. try
  346. {
  347. foreach (KeyValuePair<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>> keyValuePair in ModMinecraft._RegTests)
  348. {
  349. try
  350. {
  351. foreach (ModMinecraft.McVersion mcVersion in keyValuePair.Value)
  352. {
  353. if (Operators.CompareString(mcVersion.Name, text, false) == 0 && mcVersion._ConfigurationMap != ModMinecraft.McVersionState.Error)
  354. {
  355. ModMinecraft.InstantiateClient(mcVersion);
  356. ModBase.m_IdentifierRepository.Set("LaunchVersionSelect", ModMinecraft.initializerTests.Name, false, null);
  357. ModBase.Log("[Minecraft] 选择该文件夹储存的 Minecraft 版本:" + ModMinecraft.initializerTests.Path, ModBase.LogLevel.Normal, "出现错误");
  358. return;
  359. }
  360. }
  361. }
  362. finally
  363. {
  364. List<ModMinecraft.McVersion>.Enumerator enumerator2;
  365. ((IDisposable)enumerator2).Dispose();
  366. }
  367. }
  368. }
  369. finally
  370. {
  371. Dictionary<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>>.Enumerator enumerator;
  372. ((IDisposable)enumerator).Dispose();
  373. }
  374. }
  375. if (Enumerable.First<KeyValuePair<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>>>(ModMinecraft._RegTests).Value[0]._ConfigurationMap != ModMinecraft.McVersionState.Error)
  376. {
  377. ModMinecraft.InstantiateClient(Enumerable.First<KeyValuePair<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>>>(ModMinecraft._RegTests).Value[0]);
  378. ModBase.m_IdentifierRepository.Set("LaunchVersionSelect", ModMinecraft.initializerTests.Name, false, null);
  379. ModBase.Log("[Launch] 自动选择 Minecraft 版本:" + ModMinecraft.initializerTests.Path, ModBase.LogLevel.Normal, "出现错误");
  380. }
  381. }
  382. else
  383. {
  384. ModMinecraft.InstantiateClient(null);
  385. ModBase.m_IdentifierRepository.Set("LaunchVersionSelect", "", false, null);
  386. ModBase.Log("[Minecraft] 未找到可用 Minecraft 版本", ModBase.LogLevel.Normal, "出现错误");
  387. }
  388. if (Conversions.ToBoolean(ModBase.m_IdentifierRepository.Get("SystemDebugDelay", null)))
  389. {
  390. Thread.Sleep(ModBase.RandomInteger(200, 3000));
  391. }
  392. }
  393. catch (ThreadInterruptedException ex)
  394. {
  395. }
  396. catch (Exception ex2)
  397. {
  398. ModBase.WriteIni(input + "PCL.ini", "VersionCache", "");
  399. ModBase.Log(ex2, "加载 .minecraft 版本列表失败", ModBase.LogLevel.Feedback, "出现错误");
  400. }
  401. }
  402. // Token: 0x06000E5D RID: 3677 RVA: 0x000686EC File Offset: 0x000668EC
  403. private static Dictionary<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>> McVersionListLoadCache(string Path)
  404. {
  405. Dictionary<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>> dictionary = new Dictionary<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>>();
  406. checked
  407. {
  408. Dictionary<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>> result;
  409. try
  410. {
  411. int num = Conversions.ToInteger(ModBase.ReadIni(Path + "PCL.ini", "CardCount", Conversions.ToString(-1)));
  412. if (num == -1)
  413. {
  414. result = null;
  415. }
  416. else
  417. {
  418. int num2 = num - 1;
  419. for (int i = 0; i <= num2; i++)
  420. {
  421. ModMinecraft.McVersionCardType key = (ModMinecraft.McVersionCardType)Conversions.ToInteger(ModBase.ReadIni(Path + "PCL.ini", "CardKey" + Conversions.ToString(i + 1), ":"));
  422. List<ModMinecraft.McVersion> list = new List<ModMinecraft.McVersion>();
  423. foreach (string text in ModBase.ReadIni(Path + "PCL.ini", "CardValue" + Conversions.ToString(i + 1), ":").Split(":"))
  424. {
  425. if (Operators.CompareString(text, "", false) != 0)
  426. {
  427. string text2 = string.Format("{0}versions\\{1}\\", Path, text);
  428. if (File.Exists(text2 + ".pclignore"))
  429. {
  430. if (!ModMinecraft.collectionTests)
  431. {
  432. ModBase.Log("[Minecraft] 跳过要求忽略的项目:" + text2, ModBase.LogLevel.Normal, "出现错误");
  433. goto IL_5AC;
  434. }
  435. ModBase.Log("[Minecraft] 清理残留的忽略项目:" + text2, ModBase.LogLevel.Normal, "出现错误");
  436. File.Delete(text2 + ".pclignore");
  437. }
  438. try
  439. {
  440. ModMinecraft.McVersion mcVersion = new ModMinecraft.McVersion(text2);
  441. list.Add(mcVersion);
  442. mcVersion._ConsumerMap = ModBase.ReadIni(mcVersion.Path + "PCL\\Setup.ini", "CustomInfo", "");
  443. if (Operators.CompareString(mcVersion._ConsumerMap, "", false) == 0)
  444. {
  445. mcVersion._ConsumerMap = ModBase.ReadIni(mcVersion.Path + "PCL\\Setup.ini", "Info", mcVersion._ConsumerMap);
  446. }
  447. mcVersion.getterMap = ModBase.ReadIni(mcVersion.Path + "PCL\\Setup.ini", "Logo", mcVersion.getterMap);
  448. mcVersion._RegistryMap = Conversions.ToDate(ModBase.ReadIni(mcVersion.Path + "PCL\\Setup.ini", "ReleaseTime", Conversions.ToString(mcVersion._RegistryMap)));
  449. mcVersion._ConfigurationMap = (ModMinecraft.McVersionState)Conversions.ToInteger(ModBase.ReadIni(mcVersion.Path + "PCL\\Setup.ini", "State", Conversions.ToString((int)mcVersion._ConfigurationMap)));
  450. mcVersion._TokenMap = Conversions.ToBoolean(ModBase.ReadIni(mcVersion.Path + "PCL\\Setup.ini", "IsStar", Conversions.ToString(false)));
  451. mcVersion.expressionMap = (ModMinecraft.McVersionCardType)Conversions.ToInteger(ModBase.ReadIni(Path + "PCL\\Setup.ini", "DisplayType", Conversions.ToString(0)));
  452. if (mcVersion._ConfigurationMap != ModMinecraft.McVersionState.Error && Operators.CompareString(ModBase.ReadIni(mcVersion.Path + "PCL\\Setup.ini", "VersionOriginal", "Unknown"), "Unknown", false) != 0)
  453. {
  454. ModMinecraft.McVersionInfo mcVersionInfo = new ModMinecraft.McVersionInfo();
  455. mcVersionInfo._AdvisorMap = ModBase.ReadIni(mcVersion.Path + "PCL\\Setup.ini", "VersionFabric", "");
  456. mcVersionInfo.printerMap = ModBase.ReadIni(mcVersion.Path + "PCL\\Setup.ini", "VersionForge", "");
  457. mcVersionInfo.m_AttrMap = ModBase.ReadIni(mcVersion.Path + "PCL\\Setup.ini", "VersionNeoForge", "");
  458. mcVersionInfo._RoleMap = ModBase.ReadIni(mcVersion.Path + "PCL\\Setup.ini", "VersionOptiFine", "");
  459. mcVersionInfo._AccountMap = Conversions.ToBoolean(ModBase.ReadIni(mcVersion.Path + "PCL\\Setup.ini", "VersionLiteLoader", Conversions.ToString(false)));
  460. mcVersionInfo.LogoutThread(Conversions.ToInteger(ModBase.ReadIni(mcVersion.Path + "PCL\\Setup.ini", "VersionApiCode", Conversions.ToString(-1))));
  461. mcVersionInfo._ConnectionMap = ModBase.ReadIni(mcVersion.Path + "PCL\\Setup.ini", "VersionOriginal", "Unknown");
  462. mcVersionInfo._ServerMap = Conversions.ToInteger(ModBase.ReadIni(mcVersion.Path + "PCL\\Setup.ini", "VersionOriginalMain", Conversions.ToString(-1)));
  463. mcVersionInfo.m_ResolverMap = Conversions.ToInteger(ModBase.ReadIni(mcVersion.Path + "PCL\\Setup.ini", "VersionOriginalSub", Conversions.ToString(-1)));
  464. mcVersionInfo.workerMap = true;
  465. ModMinecraft.McVersionInfo mcVersionInfo2 = mcVersionInfo;
  466. mcVersionInfo2._CandidateMap = Enumerable.Any<char>(mcVersionInfo2._AdvisorMap);
  467. mcVersionInfo2.m_StructMap = Enumerable.Any<char>(mcVersionInfo2.printerMap);
  468. mcVersionInfo2._ValMap = Enumerable.Any<char>(mcVersionInfo2.m_AttrMap);
  469. mcVersionInfo2._StatusMap = Enumerable.Any<char>(mcVersionInfo2._RoleMap);
  470. mcVersion.Version = mcVersionInfo2;
  471. }
  472. if (mcVersion._ConfigurationMap == ModMinecraft.McVersionState.Error)
  473. {
  474. string consumerMap = mcVersion._ConsumerMap;
  475. mcVersion._ConfigurationMap = ModMinecraft.McVersionState.Original;
  476. mcVersion.Check();
  477. string left = ModBase.ReadIni(mcVersion.Path + "PCL\\Setup.ini", "CustomInfo", "");
  478. if (mcVersion._ConfigurationMap == ModMinecraft.McVersionState.Original || (Operators.CompareString(left, "", false) == 0 && Operators.CompareString(consumerMap, mcVersion._ConsumerMap, false) != 0))
  479. {
  480. ModBase.Log("[Minecraft] 版本 " + mcVersion.Name + " 的错误状态已变更,新的状态为:" + mcVersion._ConsumerMap, ModBase.LogLevel.Normal, "出现错误");
  481. return null;
  482. }
  483. }
  484. if (Operators.CompareString(mcVersion.getterMap, "", false) == 0)
  485. {
  486. ModBase.Log("[Minecraft] 版本 " + mcVersion.Name + " 未被加载", ModBase.LogLevel.Normal, "出现错误");
  487. return null;
  488. }
  489. }
  490. catch (Exception ex)
  491. {
  492. ModBase.Log(ex, "读取版本加载缓存失败(" + text + ")", ModBase.LogLevel.Debug, "出现错误");
  493. return null;
  494. }
  495. }
  496. IL_5AC:;
  497. }
  498. if (Enumerable.Any<ModMinecraft.McVersion>(list))
  499. {
  500. dictionary.Add(key, list);
  501. }
  502. }
  503. result = dictionary;
  504. }
  505. }
  506. catch (Exception ex2)
  507. {
  508. ModBase.Log(ex2, "读取版本缓存失败", ModBase.LogLevel.Debug, "出现错误");
  509. result = null;
  510. }
  511. return result;
  512. }
  513. }
  514. // Token: 0x06000E5E RID: 3678 RVA: 0x00068D34 File Offset: 0x00066F34
  515. private static Dictionary<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>> McVersionListLoadNoCache(string Path)
  516. {
  517. List<ModMinecraft.McVersion> list = new List<ModMinecraft.McVersion>();
  518. foreach (DirectoryInfo directoryInfo in new DirectoryInfo(Path + "versions").GetDirectories())
  519. {
  520. if (directoryInfo.Exists && Enumerable.Any<FileInfo>(directoryInfo.EnumerateFiles()))
  521. {
  522. if ((Operators.CompareString(directoryInfo.Name, "cache", false) == 0 || Operators.CompareString(directoryInfo.Name, "BLClient", false) == 0 || Operators.CompareString(directoryInfo.Name, "PCL", false) == 0) && !File.Exists(directoryInfo.FullName + "\\" + directoryInfo.Name + ".json"))
  523. {
  524. ModBase.Log("[Minecraft] 跳过可能不是版本文件夹的项目:" + directoryInfo.FullName, ModBase.LogLevel.Normal, "出现错误");
  525. }
  526. else
  527. {
  528. string text = directoryInfo.FullName + "\\";
  529. if (File.Exists(text + ".pclignore"))
  530. {
  531. if (!ModMinecraft.collectionTests)
  532. {
  533. ModBase.Log("[Minecraft] 跳过要求忽略的项目:" + text, ModBase.LogLevel.Normal, "出现错误");
  534. goto IL_16F;
  535. }
  536. ModBase.Log("[Minecraft] 清理残留的忽略项目:" + text, ModBase.LogLevel.Normal, "出现错误");
  537. File.Delete(text + ".pclignore");
  538. }
  539. ModMinecraft.McVersion mcVersion = new ModMinecraft.McVersion(text);
  540. list.Add(mcVersion);
  541. mcVersion.Load();
  542. }
  543. }
  544. else
  545. {
  546. ModBase.Log("[Minecraft] 跳过空文件夹:" + directoryInfo.FullName, ModBase.LogLevel.Normal, "出现错误");
  547. }
  548. IL_16F:;
  549. }
  550. Dictionary<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>> dictionary = new Dictionary<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>>();
  551. try
  552. {
  553. Dictionary<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>> dictionary2 = new Dictionary<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>>();
  554. List<ModMinecraft.McVersion> list2 = new List<ModMinecraft.McVersion>();
  555. try
  556. {
  557. foreach (ModMinecraft.McVersion mcVersion2 in Enumerable.ToList<ModMinecraft.McVersion>(list))
  558. {
  559. if (mcVersion2._TokenMap && mcVersion2.expressionMap != ModMinecraft.McVersionCardType.Hidden)
  560. {
  561. list2.Add(mcVersion2);
  562. list.Remove(mcVersion2);
  563. }
  564. }
  565. }
  566. finally
  567. {
  568. List<ModMinecraft.McVersion>.Enumerator enumerator;
  569. ((IDisposable)enumerator).Dispose();
  570. }
  571. if (Enumerable.Any<ModMinecraft.McVersion>(list2))
  572. {
  573. dictionary2.Add(ModMinecraft.McVersionCardType.Star, list2);
  574. }
  575. ModMinecraft.McVersionFilter(ref list, ref dictionary2, new ModMinecraft.McVersionState[1], ModMinecraft.McVersionCardType.Error);
  576. ModMinecraft.McVersionFilter(ref list, ref dictionary2, new ModMinecraft.McVersionState[]
  577. {
  578. ModMinecraft.McVersionState.Fool
  579. }, ModMinecraft.McVersionCardType.Fool);
  580. ModMinecraft.McVersionFilter(ref list, ref dictionary2, new ModMinecraft.McVersionState[]
  581. {
  582. ModMinecraft.McVersionState.Forge,
  583. ModMinecraft.McVersionState.NeoForge,
  584. ModMinecraft.McVersionState.LiteLoader,
  585. ModMinecraft.McVersionState.Fabric
  586. }, ModMinecraft.McVersionCardType.API);
  587. List<ModMinecraft.McVersion> list3 = new List<ModMinecraft.McVersion>();
  588. List<ModMinecraft.McVersion> list4 = new List<ModMinecraft.McVersion>();
  589. ModMinecraft.McVersionFilter(ref list, new ModMinecraft.McVersionState[]
  590. {
  591. ModMinecraft.McVersionState.Old
  592. }, ref list4);
  593. ModMinecraft.McVersion mcVersion3 = null;
  594. try
  595. {
  596. foreach (ModMinecraft.McVersion mcVersion4 in list)
  597. {
  598. if ((mcVersion4._ConfigurationMap == ModMinecraft.McVersionState.Original || mcVersion4._ConfigurationMap == ModMinecraft.McVersionState.Snapshot) && (mcVersion3 == null || DateTime.Compare(mcVersion4._RegistryMap, mcVersion3._RegistryMap) > 0))
  599. {
  600. mcVersion3 = mcVersion4;
  601. }
  602. }
  603. }
  604. finally
  605. {
  606. List<ModMinecraft.McVersion>.Enumerator enumerator2;
  607. ((IDisposable)enumerator2).Dispose();
  608. }
  609. if (mcVersion3 != null && mcVersion3._ConfigurationMap == ModMinecraft.McVersionState.Snapshot)
  610. {
  611. list3.Add(mcVersion3);
  612. list.Remove(mcVersion3);
  613. }
  614. ModMinecraft.McVersionFilter(ref list, new ModMinecraft.McVersionState[]
  615. {
  616. ModMinecraft.McVersionState.Snapshot
  617. }, ref list4);
  618. Dictionary<string, ModMinecraft.McVersion> dictionary3 = new Dictionary<string, ModMinecraft.McVersion>();
  619. List<int> list5 = new List<int>();
  620. try
  621. {
  622. foreach (ModMinecraft.McVersion mcVersion5 in list)
  623. {
  624. if (mcVersion5.Version._ServerMap >= 2)
  625. {
  626. if (!list5.Contains(mcVersion5.Version._ServerMap))
  627. {
  628. list5.Add(mcVersion5.Version._ServerMap);
  629. }
  630. if (dictionary3.ContainsKey(Conversions.ToString(mcVersion5.Version._ServerMap) + "-" + Conversions.ToString((int)mcVersion5._ConfigurationMap)))
  631. {
  632. if (mcVersion5.Version._StatusMap)
  633. {
  634. if (mcVersion5.Version.ReadThread() > dictionary3[Conversions.ToString(mcVersion5.Version._ServerMap) + "-" + Conversions.ToString((int)mcVersion5._ConfigurationMap)].Version.ReadThread())
  635. {
  636. dictionary3[Conversions.ToString(mcVersion5.Version._ServerMap) + "-" + Conversions.ToString((int)mcVersion5._ConfigurationMap)] = mcVersion5;
  637. }
  638. }
  639. else if (DateTime.Compare(mcVersion5._RegistryMap, dictionary3[Conversions.ToString(mcVersion5.Version._ServerMap) + "-" + Conversions.ToString((int)mcVersion5._ConfigurationMap)]._RegistryMap) > 0)
  640. {
  641. dictionary3[Conversions.ToString(mcVersion5.Version._ServerMap) + "-" + Conversions.ToString((int)mcVersion5._ConfigurationMap)] = mcVersion5;
  642. }
  643. }
  644. else
  645. {
  646. dictionary3.Add(Conversions.ToString(mcVersion5.Version._ServerMap) + "-" + Conversions.ToString((int)mcVersion5._ConfigurationMap), mcVersion5);
  647. }
  648. }
  649. }
  650. }
  651. finally
  652. {
  653. List<ModMinecraft.McVersion>.Enumerator enumerator3;
  654. ((IDisposable)enumerator3).Dispose();
  655. }
  656. try
  657. {
  658. foreach (int value in list5)
  659. {
  660. if (dictionary3.ContainsKey(Conversions.ToString(value) + "-" + Conversions.ToString(4)) && dictionary3.ContainsKey(Conversions.ToString(value) + "-" + Conversions.ToString(1)))
  661. {
  662. ModMinecraft.McVersion mcVersion6 = dictionary3[Conversions.ToString(value) + "-" + Conversions.ToString(1)];
  663. ModMinecraft.McVersion mcVersion7 = dictionary3[Conversions.ToString(value) + "-" + Conversions.ToString(4)];
  664. if (mcVersion6.Version.m_ResolverMap > mcVersion7.Version.m_ResolverMap)
  665. {
  666. list3.Add(mcVersion6);
  667. list.Remove(mcVersion6);
  668. }
  669. list3.Add(mcVersion7);
  670. list.Remove(mcVersion7);
  671. }
  672. else if (dictionary3.ContainsKey(Conversions.ToString(value) + "-" + Conversions.ToString(4)))
  673. {
  674. list3.Add(dictionary3[Conversions.ToString(value) + "-" + Conversions.ToString(4)]);
  675. list.Remove(dictionary3[Conversions.ToString(value) + "-" + Conversions.ToString(4)]);
  676. }
  677. else if (dictionary3.ContainsKey(Conversions.ToString(value) + "-" + Conversions.ToString(1)))
  678. {
  679. list3.Add(dictionary3[Conversions.ToString(value) + "-" + Conversions.ToString(1)]);
  680. list.Remove(dictionary3[Conversions.ToString(value) + "-" + Conversions.ToString(1)]);
  681. }
  682. }
  683. }
  684. finally
  685. {
  686. List<int>.Enumerator enumerator4;
  687. ((IDisposable)enumerator4).Dispose();
  688. }
  689. list4.AddRange(list);
  690. if (Enumerable.Any<ModMinecraft.McVersion>(list3))
  691. {
  692. dictionary2.Add(ModMinecraft.McVersionCardType.OriginalLike, list3);
  693. }
  694. if (Enumerable.Any<ModMinecraft.McVersion>(list4))
  695. {
  696. dictionary2.Add(ModMinecraft.McVersionCardType.Rubbish, list4);
  697. }
  698. try
  699. {
  700. foreach (KeyValuePair<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>> keyValuePair in dictionary2)
  701. {
  702. try
  703. {
  704. foreach (ModMinecraft.McVersion mcVersion8 in keyValuePair.Value)
  705. {
  706. ModMinecraft.McVersionCardType key = (mcVersion8.expressionMap == ModMinecraft.McVersionCardType.Auto || keyValuePair.Key == ModMinecraft.McVersionCardType.Star) ? keyValuePair.Key : mcVersion8.expressionMap;
  707. if (!dictionary.ContainsKey(key))
  708. {
  709. dictionary.Add(key, new List<ModMinecraft.McVersion>());
  710. }
  711. dictionary[key].Add(mcVersion8);
  712. }
  713. }
  714. finally
  715. {
  716. List<ModMinecraft.McVersion>.Enumerator enumerator6;
  717. ((IDisposable)enumerator6).Dispose();
  718. }
  719. }
  720. }
  721. finally
  722. {
  723. Dictionary<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>>.Enumerator enumerator5;
  724. ((IDisposable)enumerator5).Dispose();
  725. }
  726. }
  727. catch (Exception ex)
  728. {
  729. dictionary.Clear();
  730. ModBase.Log(ex, "分类版本列表失败", ModBase.LogLevel.Feedback, "出现错误");
  731. }
  732. Dictionary<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>> dictionary4 = new Dictionary<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>>();
  733. ModMinecraft.McVersionCardType[] array = new ModMinecraft.McVersionCardType[]
  734. {
  735. ModMinecraft.McVersionCardType.Star,
  736. ModMinecraft.McVersionCardType.API,
  737. ModMinecraft.McVersionCardType.OriginalLike,
  738. ModMinecraft.McVersionCardType.Rubbish,
  739. ModMinecraft.McVersionCardType.Fool,
  740. ModMinecraft.McVersionCardType.Error,
  741. ModMinecraft.McVersionCardType.Hidden
  742. };
  743. checked
  744. {
  745. for (int j = 0; j < array.Length; j++)
  746. {
  747. string value2 = Conversions.ToString((int)array[j]);
  748. if (dictionary.ContainsKey((ModMinecraft.McVersionCardType)Conversions.ToInteger(value2)))
  749. {
  750. dictionary4.Add((ModMinecraft.McVersionCardType)Conversions.ToInteger(value2), dictionary[(ModMinecraft.McVersionCardType)Conversions.ToInteger(value2)]);
  751. }
  752. }
  753. dictionary = dictionary4;
  754. if (dictionary.ContainsKey(ModMinecraft.McVersionCardType.OriginalLike))
  755. {
  756. List<ModMinecraft.McVersion> list6 = dictionary[ModMinecraft.McVersionCardType.OriginalLike];
  757. ModMinecraft.McVersion mcVersion9 = null;
  758. try
  759. {
  760. foreach (ModMinecraft.McVersion mcVersion10 in list6)
  761. {
  762. if (mcVersion10._ConfigurationMap == ModMinecraft.McVersionState.Snapshot)
  763. {
  764. mcVersion9 = mcVersion10;
  765. break;
  766. }
  767. }
  768. }
  769. finally
  770. {
  771. List<ModMinecraft.McVersion>.Enumerator enumerator7;
  772. ((IDisposable)enumerator7).Dispose();
  773. }
  774. if (!Information.IsNothing(mcVersion9))
  775. {
  776. list6.Remove(mcVersion9);
  777. }
  778. List<ModMinecraft.McVersion> list7 = list6.Sort((ModMinecraft._Closure$__.$I24-0 == null) ? (ModMinecraft._Closure$__.$I24-0 = ((ModMinecraft.McVersion Left, ModMinecraft.McVersion Right) => Left.Version._ServerMap > Right.Version._ServerMap)) : ModMinecraft._Closure$__.$I24-0);
  779. if (!Information.IsNothing(mcVersion9))
  780. {
  781. list7.Insert(0, mcVersion9);
  782. }
  783. dictionary[ModMinecraft.McVersionCardType.OriginalLike] = list7;
  784. }
  785. if (dictionary.ContainsKey(ModMinecraft.McVersionCardType.Rubbish))
  786. {
  787. dictionary[ModMinecraft.McVersionCardType.Rubbish] = dictionary[ModMinecraft.McVersionCardType.Rubbish].Sort((ModMinecraft._Closure$__.$I24-1 == null) ? (ModMinecraft._Closure$__.$I24-1 = delegate(ModMinecraft.McVersion Left, ModMinecraft.McVersion Right)
  788. {
  789. int year = Left._RegistryMap.Year;
  790. int year2 = Right._RegistryMap.Year;
  791. bool result;
  792. if (year > 2000 && year2 > 2000)
  793. {
  794. if (year != year2)
  795. {
  796. result = (year > year2);
  797. }
  798. else
  799. {
  800. result = (DateTime.Compare(Left._RegistryMap, Right._RegistryMap) > 0);
  801. }
  802. }
  803. else
  804. {
  805. result = ((year > 2000 && year2 < 2000) || ((year >= 2000 || year2 <= 2000) && Operators.CompareString(Left.Name, Right.Name, false) > 0));
  806. }
  807. return result;
  808. }) : ModMinecraft._Closure$__.$I24-1);
  809. }
  810. if (dictionary.ContainsKey(ModMinecraft.McVersionCardType.API))
  811. {
  812. dictionary[ModMinecraft.McVersionCardType.API] = dictionary[ModMinecraft.McVersionCardType.API].Sort((ModMinecraft._Closure$__.$I24-2 == null) ? (ModMinecraft._Closure$__.$I24-2 = delegate(ModMinecraft.McVersion Left, ModMinecraft.McVersion Right)
  813. {
  814. int num2 = ModMinecraft.VersionSortInteger(Left.Version._ConnectionMap, Right.Version._ConnectionMap);
  815. bool result;
  816. if (num2 != 0)
  817. {
  818. result = (num2 > 0);
  819. }
  820. else if (Left.Version._CandidateMap ^ Right.Version._CandidateMap)
  821. {
  822. result = Left.Version._CandidateMap;
  823. }
  824. else if (Left.Version._ValMap ^ Right.Version._ValMap)
  825. {
  826. result = Left.Version._ValMap;
  827. }
  828. else if (Left.Version.m_StructMap ^ Right.Version.m_StructMap)
  829. {
  830. result = Left.Version.m_StructMap;
  831. }
  832. else if (Left.Version.ReadThread() == Right.Version.ReadThread())
  833. {
  834. result = (Left.Version.ReadThread() > Right.Version.ReadThread());
  835. }
  836. else
  837. {
  838. result = (Operators.CompareString(Left.Name, Right.Name, false) > 0);
  839. }
  840. return result;
  841. }) : ModMinecraft._Closure$__.$I24-2);
  842. }
  843. ModBase.WriteIni(Path + "PCL.ini", "CardCount", Conversions.ToString(dictionary.Count));
  844. int num = dictionary.Count - 1;
  845. for (int k = 0; k <= num; k++)
  846. {
  847. ModBase.WriteIni(Path + "PCL.ini", "CardKey" + Conversions.ToString(k + 1), Conversions.ToString((int)Enumerable.ElementAtOrDefault<ModMinecraft.McVersionCardType>(dictionary.Keys, k)));
  848. string text2 = "";
  849. try
  850. {
  851. foreach (ModMinecraft.McVersion mcVersion11 in Enumerable.ElementAtOrDefault<List<ModMinecraft.McVersion>>(dictionary.Values, k))
  852. {
  853. text2 = text2 + mcVersion11.Name + ":";
  854. }
  855. }
  856. finally
  857. {
  858. List<ModMinecraft.McVersion>.Enumerator enumerator8;
  859. ((IDisposable)enumerator8).Dispose();
  860. }
  861. ModBase.WriteIni(Path + "PCL.ini", "CardValue" + Conversions.ToString(k + 1), text2);
  862. }
  863. return dictionary;
  864. }
  865. }
  866. // Token: 0x06000E5F RID: 3679 RVA: 0x0006984C File Offset: 0x00067A4C
  867. private static void McVersionFilter(ref List<ModMinecraft.McVersion> VersionList, ref Dictionary<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>> Target, ModMinecraft.McVersionState[] Formula, ModMinecraft.McVersionCardType CardType)
  868. {
  869. ModMinecraft._Closure$__25-0 CS$<>8__locals1 = new ModMinecraft._Closure$__25-0(CS$<>8__locals1);
  870. CS$<>8__locals1.$VB$Local_Formula = Formula;
  871. List<ModMinecraft.McVersion> list = Enumerable.ToList<ModMinecraft.McVersion>(Enumerable.Where<ModMinecraft.McVersion>(VersionList, (ModMinecraft.McVersion v) => Enumerable.Contains<ModMinecraft.McVersionState>(CS$<>8__locals1.$VB$Local_Formula, v._ConfigurationMap)));
  872. if (Enumerable.Any<ModMinecraft.McVersion>(list))
  873. {
  874. Target.Add(CardType, list);
  875. try
  876. {
  877. foreach (ModMinecraft.McVersion item in list)
  878. {
  879. VersionList.Remove(item);
  880. }
  881. }
  882. finally
  883. {
  884. List<ModMinecraft.McVersion>.Enumerator enumerator;
  885. ((IDisposable)enumerator).Dispose();
  886. }
  887. }
  888. }
  889. // Token: 0x06000E60 RID: 3680 RVA: 0x000698D4 File Offset: 0x00067AD4
  890. private static void McVersionFilter(ref List<ModMinecraft.McVersion> VersionList, ModMinecraft.McVersionState[] Formula, ref List<ModMinecraft.McVersion> KeepList)
  891. {
  892. ModMinecraft._Closure$__26-0 CS$<>8__locals1 = new ModMinecraft._Closure$__26-0(CS$<>8__locals1);
  893. CS$<>8__locals1.$VB$Local_Formula = Formula;
  894. KeepList.AddRange(Enumerable.Where<ModMinecraft.McVersion>(VersionList, (ModMinecraft.McVersion v) => Enumerable.Contains<ModMinecraft.McVersionState>(CS$<>8__locals1.$VB$Local_Formula, v._ConfigurationMap)));
  895. if (Enumerable.Any<ModMinecraft.McVersion>(KeepList))
  896. {
  897. try
  898. {
  899. foreach (ModMinecraft.McVersion item in KeepList)
  900. {
  901. VersionList.Remove(item);
  902. }
  903. }
  904. finally
  905. {
  906. List<ModMinecraft.McVersion>.Enumerator enumerator;
  907. ((IDisposable)enumerator).Dispose();
  908. }
  909. }
  910. }
  911. // Token: 0x06000E61 RID: 3681 RVA: 0x00069958 File Offset: 0x00067B58
  912. public static ModMinecraft.McSkinInfo McSkinSelect()
  913. {
  914. string text = ModBase.SelectFile("皮肤文件(*.png;*.jpg;*.webp)|*.png;*.jpg;*.webp", "选择皮肤文件");
  915. ModMinecraft.McSkinInfo result;
  916. if (Operators.CompareString(text, "", false) == 0)
  917. {
  918. result = new ModMinecraft.McSkinInfo
  919. {
  920. _ModelMap = false
  921. };
  922. }
  923. else
  924. {
  925. try
  926. {
  927. MyBitmap myBitmap = new MyBitmap(text);
  928. if (myBitmap._ContainerIterator.Width == 64)
  929. {
  930. if (myBitmap._ContainerIterator.Height == 32 || myBitmap._ContainerIterator.Height == 64)
  931. {
  932. FileInfo fileInfo = new FileInfo(text);
  933. if (fileInfo.Length > 24576L)
  934. {
  935. ModMain.Hint("皮肤文件大小需小于 24 KB,而所选文件大小为 " + Conversions.ToString(Math.Round((double)fileInfo.Length / 1024.0, 2)) + " KB", ModMain.HintType.Critical, true);
  936. return new ModMinecraft.McSkinInfo
  937. {
  938. _ModelMap = false
  939. };
  940. }
  941. goto IL_130;
  942. }
  943. }
  944. ModMain.Hint("皮肤图片大小应为 64x32 像素或 64x64 像素!", ModMain.HintType.Critical, true);
  945. return new ModMinecraft.McSkinInfo
  946. {
  947. _ModelMap = false
  948. };
  949. }
  950. catch (Exception ex)
  951. {
  952. ModBase.Log(ex, "皮肤文件存在错误", ModBase.LogLevel.Hint, "出现错误");
  953. return new ModMinecraft.McSkinInfo
  954. {
  955. _ModelMap = false
  956. };
  957. }
  958. IL_130:
  959. int num = ModMain.MyMsgBox("此皮肤为 Steve 模型(粗手臂)还是 Alex 模型(细手臂)?", "选择皮肤种类", "Steve 模型", "Alex 模型", "我不知道", false, false, false, null, null, null);
  960. if (num == 3)
  961. {
  962. ModMain.Hint("请在皮肤下载页面确认皮肤种类后再使用此皮肤!", ModMain.HintType.Info, true);
  963. result = new ModMinecraft.McSkinInfo
  964. {
  965. _ModelMap = false
  966. };
  967. }
  968. else
  969. {
  970. result = new ModMinecraft.McSkinInfo
  971. {
  972. _ModelMap = true,
  973. eventMap = (num == 2),
  974. managerMap = text
  975. };
  976. }
  977. }
  978. return result;
  979. }
  980. // Token: 0x06000E62 RID: 3682 RVA: 0x00069B14 File Offset: 0x00067D14
  981. public static string McSkinGetAddress(string Uuid, string Type)
  982. {
  983. if (Operators.CompareString(Uuid, "", false) == 0)
  984. {
  985. throw new Exception("Uuid 为空。");
  986. }
  987. if (Uuid.StartsWithF("00000", false))
  988. {
  989. throw new Exception("离线 Uuid 无正版皮肤文件。");
  990. }
  991. string text = ModBase.ReadIni(ModBase.m_DecoratorRepository + "Cache\\Skin\\Index" + Type + ".ini", Uuid, "");
  992. string result;
  993. if (Operators.CompareString(text, "", false) != 0)
  994. {
  995. result = text;
  996. }
  997. else
  998. {
  999. string str;
  1000. if (Operators.CompareString(Type, "Mojang", false) != 0 && Operators.CompareString(Type, "Ms", false) != 0)
  1001. {
  1002. if (Operators.CompareString(Type, "Nide", false) != 0)
  1003. {
  1004. if (Operators.CompareString(Type, "Auth", false) != 0)
  1005. {
  1006. throw new ArgumentException("皮肤地址种类无效:" + (Type ?? "null"));
  1007. }
  1008. str = Conversions.ToString(Operators.ConcatenateObject((ModMinecraft.initializerTests == null) ? ModBase.m_IdentifierRepository.Get("CacheAuthServerServer", null) : ModBase.m_IdentifierRepository.Get("VersionServerAuthServer", ModMinecraft.initializerTests), "/sessionserver/session/minecraft/profile/"));
  1009. }
  1010. else
  1011. {
  1012. str = Conversions.ToString(Operators.ConcatenateObject(Operators.ConcatenateObject("https://auth.mc-user.com:233/", (ModMinecraft.initializerTests == null) ? ModBase.m_IdentifierRepository.Get("CacheNideServer", null) : ModBase.m_IdentifierRepository.Get("VersionServerNide", ModMinecraft.initializerTests)), "/sessionserver/session/minecraft/profile/"));
  1013. }
  1014. }
  1015. else
  1016. {
  1017. str = "https://sessionserver.mojang.com/session/minecraft/profile/";
  1018. }
  1019. object obj = RuntimeHelpers.GetObjectValue(ModNet.NetGetCodeByRequestRetry(str + Uuid, null, "", false, null, false));
  1020. if (Operators.ConditionalCompareObjectEqual(obj, "", false))
  1021. {
  1022. throw new Exception("皮肤返回值为空,可能是未设置自定义皮肤的用户");
  1023. }
  1024. string text2;
  1025. try
  1026. {
  1027. try
  1028. {
  1029. foreach (object obj2 in ((IEnumerable)NewLateBinding.LateIndexGet(ModBase.GetJson(Conversions.ToString(obj)), new object[]
  1030. {
  1031. "properties"
  1032. }, null)))
  1033. {
  1034. object objectValue = RuntimeHelpers.GetObjectValue(obj2);
  1035. if (Operators.ConditionalCompareObjectEqual(NewLateBinding.LateIndexGet(objectValue, new object[]
  1036. {
  1037. "name"
  1038. }, null), "textures", false))
  1039. {
  1040. text2 = Conversions.ToString(NewLateBinding.LateIndexGet(objectValue, new object[]
  1041. {
  1042. "value"
  1043. }, null));
  1044. goto IL_265;
  1045. }
  1046. }
  1047. }
  1048. finally
  1049. {
  1050. IEnumerator enumerator;
  1051. if (enumerator is IDisposable)
  1052. {
  1053. (enumerator as IDisposable).Dispose();
  1054. }
  1055. }
  1056. throw new Exception("未从皮肤返回值中找到符合条件的 Property");
  1057. }
  1058. catch (Exception ex)
  1059. {
  1060. ModBase.Log(ex, Conversions.ToString(Operators.ConcatenateObject("无法完成解析的皮肤返回值,可能是未设置自定义皮肤的用户:", obj)), ModBase.LogLevel.Developer, "出现错误");
  1061. throw new Exception("皮肤返回值中不包含皮肤数据项,可能是未设置自定义皮肤的用户", ex);
  1062. }
  1063. IL_265:
  1064. obj = Encoding.GetEncoding("utf-8").GetString(Convert.FromBase64String(text2));
  1065. JObject jobject = (JObject)ModBase.GetJson(Conversions.ToString(NewLateBinding.LateGet(obj, null, "ToLower", new object[0], null, null, null)));
  1066. if (jobject["textures"] == null || jobject["textures"]["skin"] == null || jobject["textures"]["skin"]["url"] == null)
  1067. {
  1068. throw new Exception("用户未设置自定义皮肤");
  1069. }
  1070. text2 = jobject["textures"]["skin"]["url"].ToString();
  1071. ModBase.WriteIni(ModBase.m_DecoratorRepository + "Cache\\Skin\\Index" + Type + ".ini", Uuid, text2);
  1072. ModBase.Log("[Skin] UUID " + Uuid + " 对应的皮肤文件为 " + text2, ModBase.LogLevel.Normal, "出现错误");
  1073. result = text2;
  1074. }
  1075. return result;
  1076. }
  1077. // Token: 0x06000E63 RID: 3683 RVA: 0x00069EA0 File Offset: 0x000680A0
  1078. public static string McSkinDownload(string Address)
  1079. {
  1080. ModBase.GetFileNameFromPath(Address);
  1081. string text = ModBase.m_DecoratorRepository + "Cache\\Skin\\" + Conversions.ToString(ModBase.GetHash(Address)) + ".png";
  1082. object obj = ModMinecraft.visitorTests;
  1083. ObjectFlowControl.CheckForSyncLockOnValueType(obj);
  1084. string result;
  1085. lock (obj)
  1086. {
  1087. if (!File.Exists(text))
  1088. {
  1089. ModNet.NetDownload(Address, text + ".PCLDownloading", false);
  1090. File.Delete(text);
  1091. FileSystem.Rename(text + ".PCLDownloading", text);
  1092. ModBase.Log("[Minecraft] 皮肤下载成功:" + text, ModBase.LogLevel.Normal, "出现错误");
  1093. }
  1094. result = text;
  1095. }
  1096. return result;
  1097. }
  1098. // Token: 0x06000E64 RID: 3684 RVA: 0x00069F50 File Offset: 0x00068150
  1099. public static string McSkinSex(string Uuid)
  1100. {
  1101. string result;
  1102. if (Uuid.Length != 32)
  1103. {
  1104. result = "Steve";
  1105. }
  1106. else
  1107. {
  1108. int num = int.Parse(Conversions.ToString(Uuid[7]), NumberStyles.AllowHexSpecifier);
  1109. int num2 = int.Parse(Conversions.ToString(Uuid[15]), NumberStyles.AllowHexSpecifier);
  1110. int num3 = int.Parse(Conversions.ToString(Uuid[23]), NumberStyles.AllowHexSpecifier);
  1111. int num4 = int.Parse(Conversions.ToString(Uuid[31]), NumberStyles.AllowHexSpecifier);
  1112. result = (((num ^ num2 ^ num3 ^ num4) % 2 != 0) ? "Alex" : "Steve");
  1113. }
  1114. return result;
  1115. }
  1116. // Token: 0x06000E65 RID: 3685 RVA: 0x00069FE8 File Offset: 0x000681E8
  1117. public static bool McJsonRuleCheck(JToken RuleToken)
  1118. {
  1119. bool result;
  1120. if (RuleToken == null)
  1121. {
  1122. result = true;
  1123. }
  1124. else
  1125. {
  1126. bool flag = false;
  1127. try
  1128. {
  1129. foreach (JToken jtoken in RuleToken)
  1130. {
  1131. bool flag2 = true;
  1132. if (jtoken["os"] != null)
  1133. {
  1134. if (jtoken["os"]["name"] != null)
  1135. {
  1136. string left = jtoken["os"]["name"].ToString();
  1137. if (Operators.CompareString(left, "unknown", false) != 0)
  1138. {
  1139. if (Operators.CompareString(left, "windows", false) == 0)
  1140. {
  1141. if (jtoken["os"]["version"] != null)
  1142. {
  1143. string regex = jtoken["os"]["version"].ToString();
  1144. flag2 = (flag2 && ModBase.RegexCheck(ModMinecraft.valueTests, regex, 0));
  1145. }
  1146. }
  1147. else
  1148. {
  1149. flag2 = false;
  1150. }
  1151. }
  1152. }
  1153. if (jtoken["os"]["arch"] != null)
  1154. {
  1155. flag2 = (flag2 && Operators.CompareString(jtoken["os"]["arch"].ToString(), "x86", false) == 0 == ModBase.m_StubRepository);
  1156. }
  1157. }
  1158. if (!Information.IsNothing(jtoken["features"]))
  1159. {
  1160. flag2 = (flag2 && Information.IsNothing(jtoken["features"]["is_demo_user"]));
  1161. if (Enumerable.Any<JToken>((IEnumerable<JToken>)((JObject)jtoken["features"]).Children(), (ModMinecraft._Closure$__.$IR35-2 == null) ? (ModMinecraft._Closure$__.$IR35-2 = ((JToken a0) => ((ModMinecraft._Closure$__.$I35-0 == null) ? (ModMinecraft._Closure$__.$I35-0 = ((JProperty j) => j.Name.Contains("quick_play"))) : ModMinecraft._Closure$__.$I35-0)((JProperty)a0))) : ModMinecraft._Closure$__.$IR35-2))
  1162. {
  1163. flag2 = false;
  1164. }
  1165. }
  1166. if (Operators.CompareString(jtoken["action"].ToString(), "allow", false) == 0)
  1167. {
  1168. if (flag2)
  1169. {
  1170. flag = true;
  1171. }
  1172. }
  1173. else if (flag2)
  1174. {
  1175. flag = false;
  1176. }
  1177. }
  1178. }
  1179. finally
  1180. {
  1181. IEnumerator<JToken> enumerator;
  1182. if (enumerator != null)
  1183. {
  1184. enumerator.Dispose();
  1185. }
  1186. }
  1187. result = flag;
  1188. }
  1189. return result;
  1190. }
  1191. // Token: 0x06000E66 RID: 3686 RVA: 0x0006A1FC File Offset: 0x000683FC
  1192. public static List<ModMinecraft.McLibToken> McLibListGet(ModMinecraft.McVersion Version, bool IncludeVersionJar)
  1193. {
  1194. ModBase.Log("[Minecraft] 获取支持库列表:" + Version.Name, ModBase.LogLevel.Normal, "出现错误");
  1195. List<ModMinecraft.McLibToken> list = ModMinecraft.McLibListGetWithJson(Version.NewThread(), false, null, Version.ChangeMapper() + ".jumploader\\");
  1196. if (IncludeVersionJar)
  1197. {
  1198. JToken jtoken = Version.NewThread()["jar"];
  1199. string text = (jtoken != null) ? jtoken.ToString() : null;
  1200. ModMinecraft.McVersion mcVersion;
  1201. if (!Version.InvokeThread() && text != null)
  1202. {
  1203. mcVersion = new ModMinecraft.McVersion(text);
  1204. }
  1205. else
  1206. {
  1207. ModMinecraft.McVersion mcVersion2 = Version;
  1208. if (Version.Version.m_StructMap || Version.Version._ValMap)
  1209. {
  1210. if (Version.Version._ServerMap >= 17)
  1211. {
  1212. goto IL_EE;
  1213. }
  1214. }
  1215. while (Operators.CompareString(mcVersion2.CallThread(), "", false) != 0 && Operators.CompareString(mcVersion2.CallThread(), mcVersion2.Name, false) != 0)
  1216. {
  1217. mcVersion2 = new ModMinecraft.McVersion(ModMinecraft.m_ProxyTests + "versions\\" + mcVersion2.CallThread() + "\\");
  1218. }
  1219. IL_EE:
  1220. mcVersion = new ModMinecraft.McVersion(mcVersion2.Path);
  1221. }
  1222. if (!File.Exists(mcVersion.Path + mcVersion.Name + ".json"))
  1223. {
  1224. mcVersion = Version;
  1225. ModBase.Log("[Minecraft] 可能缺少前置版本 " + mcVersion.Name + ",找不到对应的 json 文件", ModBase.LogLevel.Debug, "出现错误");
  1226. }
  1227. string value;
  1228. string codeMap;
  1229. if (mcVersion.NewThread()["downloads"] != null && mcVersion.NewThread()["downloads"]["client"] != null)
  1230. {
  1231. value = (string)mcVersion.NewThread()["downloads"]["client"]["url"];
  1232. codeMap = (string)mcVersion.NewThread()["downloads"]["client"]["sha1"];
  1233. }
  1234. else
  1235. {
  1236. value = null;
  1237. codeMap = null;
  1238. }
  1239. List<ModMinecraft.McLibToken> list2 = list;
  1240. ModMinecraft.McLibToken mcLibToken = new ModMinecraft.McLibToken();
  1241. mcLibToken._WrapperMap = mcVersion.Path + mcVersion.Name + ".jar";
  1242. mcLibToken.m_BaseMap = 0L;
  1243. mcLibToken.attributeMap = false;
  1244. mcLibToken.ForgotThread(value);
  1245. mcLibToken.codeMap = codeMap;
  1246. list2.Add(mcLibToken);
  1247. }
  1248. return list;
  1249. }
  1250. // Token: 0x06000E67 RID: 3687 RVA: 0x0006A41C File Offset: 0x0006861C
  1251. public static List<ModMinecraft.McLibToken> McLibListGetWithJson(JObject JsonObject, bool KeepSameNameDifferentVersionResult = false, string CustomMcFolder = null, string JumpLoaderFolder = null)
  1252. {
  1253. CustomMcFolder = (CustomMcFolder ?? ModMinecraft.m_ProxyTests);
  1254. List<ModMinecraft.McLibToken> list = new List<ModMinecraft.McLibToken>();
  1255. JArray jarray = (JArray)JsonObject["libraries"];
  1256. if (JsonObject["jumploader"] != null && JsonObject["jumploader"]["jars"] != null && JsonObject["jumploader"]["jars"]["maven"] != null)
  1257. {
  1258. try
  1259. {
  1260. foreach (JToken jtoken in JsonObject["jumploader"]["jars"]["maven"])
  1261. {
  1262. jarray.Add(jtoken);
  1263. }
  1264. }
  1265. finally
  1266. {
  1267. IEnumerator<JToken> enumerator;
  1268. if (enumerator != null)
  1269. {
  1270. enumerator.Dispose();
  1271. }
  1272. }
  1273. }
  1274. checked
  1275. {
  1276. try
  1277. {
  1278. foreach (JToken jtoken2 in jarray.Children())
  1279. {
  1280. JObject jobject = (JObject)jtoken2;
  1281. for (int i = Enumerable.Count<JProperty>(jobject.Properties()) - 1; i >= 0; i += -1)
  1282. {
  1283. if (Enumerable.ElementAtOrDefault<JProperty>(jobject.Properties(), i).Value.Type == 10)
  1284. {
  1285. jobject.Remove(Enumerable.ElementAtOrDefault<JProperty>(jobject.Properties(), i).Name);
  1286. }
  1287. }
  1288. if (ModMinecraft.McJsonRuleCheck(jobject["rules"]))
  1289. {
  1290. bool flag = false;
  1291. if (jobject["mavenPath"] != null)
  1292. {
  1293. flag = true;
  1294. if (jobject["name"] == null)
  1295. {
  1296. jobject.Add("name", jobject["mavenPath"]);
  1297. }
  1298. if (jobject["repoUrl"] != null && jobject["url"] == null)
  1299. {
  1300. jobject.Add("url", jobject["repoUrl"]);
  1301. }
  1302. }
  1303. string text = (string)jobject["url"];
  1304. if (text != null)
  1305. {
  1306. text += ModMinecraft.McLibGet((string)jobject["name"], false, true, CustomMcFolder).Replace("\\", "/");
  1307. }
  1308. if (jobject["natives"] == null)
  1309. {
  1310. string wrapperMap;
  1311. if (flag)
  1312. {
  1313. wrapperMap = ModMinecraft.McLibGet((string)jobject["name"], true, false, JumpLoaderFolder ?? CustomMcFolder);
  1314. }
  1315. else
  1316. {
  1317. wrapperMap = ModMinecraft.McLibGet((string)jobject["name"], true, false, CustomMcFolder);
  1318. }
  1319. try
  1320. {
  1321. if (jobject["downloads"] != null && jobject["downloads"]["artifact"] != null)
  1322. {
  1323. List<ModMinecraft.McLibToken> list2 = list;
  1324. ModMinecraft.McLibToken mcLibToken = new ModMinecraft.McLibToken();
  1325. mcLibToken.m_InfoMap = flag;
  1326. mcLibToken._AnnotationMap = (string)jobject["name"];
  1327. mcLibToken.ForgotThread((string)((text != null) ? text : jobject["downloads"]["artifact"]["url"]));
  1328. mcLibToken._WrapperMap = ((jobject["downloads"]["artifact"]["path"] == null) ? ModMinecraft.McLibGet((string)jobject["name"], true, false, CustomMcFolder) : (CustomMcFolder + "libraries\\" + jobject["downloads"]["artifact"]["path"].ToString().Replace("/", "\\")));
  1329. mcLibToken.m_BaseMap = (long)Math.Round(ModBase.Val(jobject["downloads"]["artifact"]["size"].ToString()));
  1330. mcLibToken.attributeMap = false;
  1331. ModMinecraft.McLibToken mcLibToken2 = mcLibToken;
  1332. JToken jtoken3 = jobject["downloads"]["artifact"]["sha1"];
  1333. mcLibToken2.codeMap = ((jtoken3 != null) ? jtoken3.ToString() : null);
  1334. list2.Add(mcLibToken);
  1335. }
  1336. else
  1337. {
  1338. List<ModMinecraft.McLibToken> list3 = list;
  1339. ModMinecraft.McLibToken mcLibToken3 = new ModMinecraft.McLibToken();
  1340. mcLibToken3.m_InfoMap = flag;
  1341. mcLibToken3._AnnotationMap = (string)jobject["name"];
  1342. mcLibToken3.ForgotThread(text);
  1343. mcLibToken3._WrapperMap = wrapperMap;
  1344. mcLibToken3.m_BaseMap = 0L;
  1345. mcLibToken3.attributeMap = false;
  1346. mcLibToken3.codeMap = null;
  1347. list3.Add(mcLibToken3);
  1348. }
  1349. continue;
  1350. }
  1351. catch (Exception ex)
  1352. {
  1353. ModBase.Log(ex, "处理实际支持库列表失败(无 Natives," + (jobject["name"] ?? "Nothing").ToString() + ")", ModBase.LogLevel.Debug, "出现错误");
  1354. List<ModMinecraft.McLibToken> list4 = list;
  1355. ModMinecraft.McLibToken mcLibToken4 = new ModMinecraft.McLibToken();
  1356. mcLibToken4.m_InfoMap = flag;
  1357. mcLibToken4._AnnotationMap = (string)jobject["name"];
  1358. mcLibToken4.ForgotThread(text);
  1359. mcLibToken4._WrapperMap = wrapperMap;
  1360. mcLibToken4.m_BaseMap = 0L;
  1361. mcLibToken4.attributeMap = false;
  1362. mcLibToken4.codeMap = null;
  1363. list4.Add(mcLibToken4);
  1364. continue;
  1365. }
  1366. }
  1367. if (jobject["natives"]["windows"] != null)
  1368. {
  1369. try
  1370. {
  1371. if (jobject["downloads"] != null && jobject["downloads"]["classifiers"] != null && jobject["downloads"]["classifiers"]["natives-windows"] != null)
  1372. {
  1373. List<ModMinecraft.McLibToken> list5 = list;
  1374. ModMinecraft.McLibToken mcLibToken5 = new ModMinecraft.McLibToken();
  1375. mcLibToken5.m_InfoMap = flag;
  1376. mcLibToken5._AnnotationMap = (string)jobject["name"];
  1377. mcLibToken5.ForgotThread((string)((text != null) ? text : jobject["downloads"]["classifiers"]["natives-windows"]["url"]));
  1378. mcLibToken5._WrapperMap = ((jobject["downloads"]["classifiers"]["natives-windows"]["path"] == null) ? ModMinecraft.McLibGet((string)jobject["name"], true, false, CustomMcFolder).Replace(".jar", "-" + jobject["natives"]["windows"].ToString() + ".jar").Replace("${arch}", Environment.Is64BitOperatingSystem ? "64" : "32") : (CustomMcFolder + "libraries\\" + jobject["downloads"]["classifiers"]["natives-windows"]["path"].ToString().Replace("/", "\\")));
  1379. mcLibToken5.m_BaseMap = (long)Math.Round(ModBase.Val(jobject["downloads"]["classifiers"]["natives-windows"]["size"].ToString()));
  1380. mcLibToken5.attributeMap = true;
  1381. mcLibToken5.codeMap = jobject["downloads"]["classifiers"]["natives-windows"]["sha1"].ToString();
  1382. list5.Add(mcLibToken5);
  1383. }
  1384. else
  1385. {
  1386. List<ModMinecraft.McLibToken> list6 = list;
  1387. ModMinecraft.McLibToken mcLibToken6 = new ModMinecraft.McLibToken();
  1388. mcLibToken6.m_InfoMap = flag;
  1389. mcLibToken6._AnnotationMap = (string)jobject["name"];
  1390. mcLibToken6.ForgotThread(text);
  1391. mcLibToken6._WrapperMap = ModMinecraft.McLibGet((string)jobject["name"], true, false, CustomMcFolder).Replace(".jar", "-" + jobject["natives"]["windows"].ToString() + ".jar").Replace("${arch}", Environment.Is64BitOperatingSystem ? "64" : "32");
  1392. mcLibToken6.m_BaseMap = 0L;
  1393. mcLibToken6.attributeMap = true;
  1394. mcLibToken6.codeMap = null;
  1395. list6.Add(mcLibToken6);
  1396. }
  1397. }
  1398. catch (Exception ex2)
  1399. {
  1400. ModBase.Log(ex2, "处理实际支持库列表失败(有 Natives," + (jobject["name"] ?? "Nothing").ToString() + ")", ModBase.LogLevel.Debug, "出现错误");
  1401. List<ModMinecraft.McLibToken> list7 = list;
  1402. ModMinecraft.McLibToken mcLibToken7 = new ModMinecraft.McLibToken();
  1403. mcLibToken7.m_InfoMap = flag;
  1404. mcLibToken7._AnnotationMap = (string)jobject["name"];
  1405. mcLibToken7.ForgotThread(text);
  1406. mcLibToken7._WrapperMap = ModMinecraft.McLibGet((string)jobject["name"], true, false, CustomMcFolder).Replace(".jar", "-" + jobject["natives"]["windows"].ToString() + ".jar").Replace("${arch}", Environment.Is64BitOperatingSystem ? "64" : "32");
  1407. mcLibToken7.m_BaseMap = 0L;
  1408. mcLibToken7.attributeMap = true;
  1409. mcLibToken7.codeMap = null;
  1410. list7.Add(mcLibToken7);
  1411. }
  1412. }
  1413. }
  1414. }
  1415. }
  1416. finally
  1417. {
  1418. IEnumerator<JToken> enumerator2;
  1419. if (enumerator2 != null)
  1420. {
  1421. enumerator2.Dispose();
  1422. }
  1423. }
  1424. Dictionary<string, ModMinecraft.McLibToken> dictionary = new Dictionary<string, ModMinecraft.McLibToken>();
  1425. VB$AnonymousDelegate_10<ModMinecraft.McLibToken, string> vb$AnonymousDelegate_ = (ModMinecraft._Closure$__.$I38-0 == null) ? (ModMinecraft._Closure$__.$I38-0 = ((ModMinecraft.McLibToken Token) => ModBase.GetFolderNameFromPath(ModBase.GetPathFromFullPath(Token._WrapperMap)))) : ModMinecraft._Closure$__.$I38-0;
  1426. int num = list.Count - 1;
  1427. for (int j = 0; j <= num; j++)
  1428. {
  1429. string text2 = list[j].Name + list[j].attributeMap.ToString() + list[j].m_InfoMap.ToString();
  1430. if (dictionary.ContainsKey(text2))
  1431. {
  1432. string text3 = vb$AnonymousDelegate_(list[j]);
  1433. string text4 = vb$AnonymousDelegate_(dictionary[text2]);
  1434. if (Operators.CompareString(text3, text4, false) != 0 && KeepSameNameDifferentVersionResult)
  1435. {
  1436. ModBase.Log(string.Format("[Minecraft] 发现疑似重复的支持库:{0} ({1}) 与 {2} ({3})", new object[]
  1437. {
  1438. list[j],
  1439. text3,
  1440. dictionary[text2],
  1441. text4
  1442. }), ModBase.LogLevel.Normal, "出现错误");
  1443. dictionary.Add(text2 + Conversions.ToString(ModBase.GetUuid()), list[j]);
  1444. }
  1445. else
  1446. {
  1447. ModBase.Log(string.Format("[Minecraft] 发现重复的支持库:{0} ({1}) 与 {2} ({3}),已忽略其中之一", new object[]
  1448. {
  1449. list[j],
  1450. text3,
  1451. dictionary[text2],
  1452. text4
  1453. }), ModBase.LogLevel.Normal, "出现错误");
  1454. if (ModMinecraft.VersionSortBoolean(text3, text4))
  1455. {
  1456. dictionary[text2] = list[j];
  1457. }
  1458. }
  1459. }
  1460. else
  1461. {
  1462. dictionary.Add(text2, list[j]);
  1463. }
  1464. }
  1465. return Enumerable.ToList<ModMinecraft.McLibToken>(dictionary.Values);
  1466. }
  1467. }
  1468. // Token: 0x06000E68 RID: 3688 RVA: 0x0006AF24 File Offset: 0x00069124
  1469. public static List<ModNet.NetFile> McLibFix(ModMinecraft.McVersion Version)
  1470. {
  1471. if (!Version.importerMap)
  1472. {
  1473. Version.Load();
  1474. }
  1475. List<ModNet.NetFile> list = new List<ModNet.NetFile>();
  1476. try
  1477. {
  1478. ModNet.NetFile netFile = ModDownload.DlClientJarGet(Version, true);
  1479. if (netFile != null)
  1480. {
  1481. list.Add(netFile);
  1482. }
  1483. }
  1484. catch (Exception ex)
  1485. {
  1486. ModBase.Log(ex, "版本缺失主 jar 文件所必须的信息", ModBase.LogLevel.Developer, "出现错误");
  1487. }
  1488. list.AddRange(ModMinecraft.McLibFixFromLibToken(ModMinecraft.McLibListGet(Version, false), null, Version.ChangeMapper() + ".jumploader\\"));
  1489. if (Operators.ConditionalCompareObjectEqual(ModBase.m_IdentifierRepository.Get("VersionServerLogin", Version), 3, false))
  1490. {
  1491. string localPath = ModBase.m_InstanceRepository + "nide8auth.jar";
  1492. JObject jobject = null;
  1493. try
  1494. {
  1495. ModBase.Log("[Minecraft] 开始获取统一通行证下载信息", ModBase.LogLevel.Normal, "出现错误");
  1496. jobject = (JObject)ModBase.GetJson(ModNet.NetGetCodeByDownload(new string[]
  1497. {
  1498. Conversions.ToString(Operators.ConcatenateObject("https://auth.mc-user.com:233/", ModBase.m_IdentifierRepository.Get("VersionServerNide", Version)))
  1499. }, 45000, true, false));
  1500. }
  1501. catch (Exception ex2)
  1502. {
  1503. ModBase.Log(ex2, "获取统一通行证下载信息失败", ModBase.LogLevel.Debug, "出现错误");
  1504. }
  1505. if (jobject != null)
  1506. {
  1507. ModBase.FileChecker fileChecker = new ModBase.FileChecker(-1L, -1L, jobject["jarHash"].ToString(), true, false);
  1508. if (fileChecker.Check(localPath) != null)
  1509. {
  1510. ModBase.Log("[Minecraft] 统一通行证需要更新:Hash - " + fileChecker.specificationError, ModBase.LogLevel.Developer, "出现错误");
  1511. list.Add(new ModNet.NetFile(new string[]
  1512. {
  1513. "https://login.mc-user.com:233/index/jar"
  1514. }, localPath, fileChecker, false));
  1515. }
  1516. }
  1517. }
  1518. if (Operators.ConditionalCompareObjectEqual(ModBase.m_IdentifierRepository.Get("VersionServerLogin", Version), 4, false))
  1519. {
  1520. string localPath2 = ModBase._MethodRepository + "\\authlib-injector.jar";
  1521. JObject jobject2 = null;
  1522. try
  1523. {
  1524. ModBase.Log("[Minecraft] 开始获取 Authlib-Injector 下载信息", ModBase.LogLevel.Normal, "出现错误");
  1525. jobject2 = (JObject)ModBase.GetJson(ModNet.NetGetCodeByDownload(new string[]
  1526. {
  1527. "https://authlib-injector.yushi.moe/artifact/latest.json",
  1528. "https://bmclapi2.bangbang93.com/mirrors/authlib-injector/artifact/latest.json"
  1529. }, 45000, true, false));
  1530. }
  1531. catch (Exception ex3)
  1532. {
  1533. ModBase.Log(ex3, "获取 Authlib-Injector 下载信息失败", ModBase.LogLevel.Debug, "出现错误");
  1534. }
  1535. if (jobject2 != null && new ModBase.FileChecker(-1L, -1L, jobject2["checksums"]["sha256"].ToString(), true, false).Check(localPath2) != null)
  1536. {
  1537. string text = jobject2["download_url"].ToString().Replace("bmclapi2.bangbang93.com/mirrors/authlib-injector", "authlib-injector.yushi.moe");
  1538. ModBase.Log("[Minecraft] Authlib-Injector 需要更新:" + text, ModBase.LogLevel.Developer, "出现错误");
  1539. list.Add(new ModNet.NetFile(new string[]
  1540. {
  1541. text,
  1542. text.Replace("authlib-injector.yushi.moe", "bmclapi2.bangbang93.com/mirrors/authlib-injector")
  1543. }, localPath2, new ModBase.FileChecker(-1L, -1L, jobject2["checksums"]["sha256"].ToString(), true, false), false));
  1544. }
  1545. }
  1546. if (Conversions.ToBoolean(ModMinecraft.ShouldIgnoreFileCheck(Version)))
  1547. {
  1548. ModBase.Log("[Minecraft] 用户要求尽量忽略文件检查,这可能会保留有误的文件", ModBase.LogLevel.Normal, "出现错误");
  1549. list = Enumerable.ToList<ModNet.NetFile>(Enumerable.Where<ModNet.NetFile>(list, (ModMinecraft._Closure$__.$I39-0 == null) ? (ModMinecraft._Closure$__.$I39-0 = delegate(ModNet.NetFile f)
  1550. {
  1551. bool result;
  1552. if (File.Exists(f.m_AuthenticationTest))
  1553. {
  1554. ModBase.Log("[Minecraft] 跳过下载的支持库文件:" + f.m_AuthenticationTest, ModBase.LogLevel.Debug, "出现错误");
  1555. result = false;
  1556. }
  1557. else
  1558. {
  1559. result = true;
  1560. }
  1561. return result;
  1562. }) : ModMinecraft._Closure$__.$I39-0));
  1563. }
  1564. return list;
  1565. }
  1566. // Token: 0x06000E69 RID: 3689 RVA: 0x0006B2A4 File Offset: 0x000694A4
  1567. public static List<ModNet.NetFile> McLibFixFromLibToken(List<ModMinecraft.McLibToken> Libs, string CustomMcFolder = null, string JumpLoaderFolder = null)
  1568. {
  1569. CustomMcFolder = (CustomMcFolder ?? ModMinecraft.m_ProxyTests);
  1570. List<ModNet.NetFile> list = new List<ModNet.NetFile>();
  1571. try
  1572. {
  1573. foreach (ModMinecraft.McLibToken mcLibToken in Libs)
  1574. {
  1575. ModBase.FileChecker fileChecker = new ModBase.FileChecker(-1L, (mcLibToken.m_BaseMap == 0L) ? -1L : mcLibToken.m_BaseMap, mcLibToken.codeMap, true, false);
  1576. if (fileChecker.Check(mcLibToken._WrapperMap) != null)
  1577. {
  1578. List<string> list2 = new List<string>();
  1579. if (mcLibToken.ReflectThread() != null)
  1580. {
  1581. list2.Add(mcLibToken.ReflectThread());
  1582. if (mcLibToken.ReflectThread().Contains("launcher.mojang.com/v1/objects") || mcLibToken.ReflectThread().Contains("client.txt") || mcLibToken.ReflectThread().Contains(".tsrg"))
  1583. {
  1584. list2.AddRange(Enumerable.ToList<string>(ModDownload.DlSourceLauncherOrMetaGet(mcLibToken.ReflectThread())));
  1585. }
  1586. if (mcLibToken.ReflectThread().Contains("maven"))
  1587. {
  1588. list2.Insert(0, mcLibToken.ReflectThread().Replace(Strings.Mid(mcLibToken.ReflectThread(), 1, mcLibToken.ReflectThread().IndexOfF("maven", false)), "https://bmclapi2.bangbang93.com/").Replace("maven.fabricmc.net", "maven").Replace("maven.minecraftforge.net", "maven").Replace("maven.neoforged.net/releases", "maven"));
  1589. }
  1590. }
  1591. if (mcLibToken._WrapperMap.Contains("transformer-discovery-service"))
  1592. {
  1593. if (!File.Exists(mcLibToken._WrapperMap))
  1594. {
  1595. ModBase.WriteFile(mcLibToken._WrapperMap, ModBase.GetResources("Transformer"), false);
  1596. }
  1597. ModBase.Log("[Download] 已自动释放 Transformer Discovery Service", ModBase.LogLevel.Developer, "出现错误");
  1598. }
  1599. else
  1600. {
  1601. if (mcLibToken._WrapperMap.Contains("optifine\\OptiFine"))
  1602. {
  1603. string text = mcLibToken._WrapperMap.Replace((mcLibToken.m_InfoMap ? JumpLoaderFolder : CustomMcFolder) + "libraries\\optifine\\OptiFine\\", "").Split("_")[0] + "/" + ModBase.GetFileNameFromPath(mcLibToken._WrapperMap).Replace("-", "_");
  1604. text = "/maven/com/optifine/" + text;
  1605. if (text.Contains("_pre"))
  1606. {
  1607. text = text.Replace("com/optifine/", "com/optifine/preview_");
  1608. }
  1609. list2.Add("https://bmclapi2.bangbang93.com" + text);
  1610. }
  1611. else if (list2.Count <= 2)
  1612. {
  1613. list2.AddRange(ModDownload.DlSourceLibraryGet("https://libraries.minecraft.net" + mcLibToken._WrapperMap.Replace((mcLibToken.m_InfoMap ? JumpLoaderFolder : CustomMcFolder) + "libraries", "").Replace("\\", "/")));
  1614. }
  1615. list.Add(new ModNet.NetFile(Enumerable.Distinct<string>(list2), mcLibToken._WrapperMap, fileChecker, false));
  1616. }
  1617. }
  1618. }
  1619. }
  1620. finally
  1621. {
  1622. List<ModMinecraft.McLibToken>.Enumerator enumerator;
  1623. ((IDisposable)enumerator).Dispose();
  1624. }
  1625. return list.Distinct((ModMinecraft._Closure$__.$I40-0 == null) ? (ModMinecraft._Closure$__.$I40-0 = ((ModNet.NetFile a, ModNet.NetFile b) => Operators.CompareString(a.m_AuthenticationTest, b.m_AuthenticationTest, false) == 0)) : ModMinecraft._Closure$__.$I40-0);
  1626. }
  1627. // Token: 0x06000E6A RID: 3690 RVA: 0x0006B5C4 File Offset: 0x000697C4
  1628. public static string McLibGet(string Original, bool WithHead = true, bool IgnoreLiteLoader = false, string CustomMcFolder = null)
  1629. {
  1630. CustomMcFolder = (CustomMcFolder ?? ModMinecraft.m_ProxyTests);
  1631. string[] array = Original.Split(":");
  1632. string text = string.Concat(new string[]
  1633. {
  1634. WithHead ? (CustomMcFolder + "libraries\\") : "",
  1635. array[0].Replace(".", "\\"),
  1636. "\\",
  1637. array[1],
  1638. "\\",
  1639. array[2],
  1640. "\\",
  1641. array[1],
  1642. "-",
  1643. array[2],
  1644. ".jar"
  1645. });
  1646. if (text.Contains("optifine\\OptiFine\\1.12") && File.Exists(string.Concat(new string[]
  1647. {
  1648. CustomMcFolder,
  1649. "libraries\\",
  1650. array[0].Replace(".", "\\"),
  1651. "\\",
  1652. array[1],
  1653. "\\",
  1654. array[2],
  1655. "\\",
  1656. array[1],
  1657. "-",
  1658. array[2],
  1659. "-installer.jar"
  1660. })))
  1661. {
  1662. ModBase.Log("[Launch] 已将 " + Original + " 特判替换为对应的 Installer 文件", ModBase.LogLevel.Debug, "出现错误");
  1663. text = text.Replace(".jar", "-installer.jar");
  1664. }
  1665. return text;
  1666. }
  1667. // Token: 0x06000E6B RID: 3691 RVA: 0x0006B71C File Offset: 0x0006991C
  1668. public static object ShouldIgnoreFileCheck(ModMinecraft.McVersion Version)
  1669. {
  1670. return Conversions.ToBoolean(ModBase.m_IdentifierRepository.Get("LaunchAdvanceAssets", null)) || Conversions.ToBoolean(ModBase.m_IdentifierRepository.Get("VersionAdvanceAssetsV2", Version)) || Conversions.ToBoolean(Operators.CompareObjectEqual(ModBase.m_IdentifierRepository.Get("VersionAdvanceAssets", Version), 2, false));
  1671. }
  1672. // Token: 0x06000E6C RID: 3692 RVA: 0x0006B780 File Offset: 0x00069980
  1673. public static JToken McAssetsGetIndex(ModMinecraft.McVersion Version, bool ReturnLegacyOnError = false, bool CheckURLEmpty = false)
  1674. {
  1675. try
  1676. {
  1677. JToken jtoken;
  1678. for (;;)
  1679. {
  1680. jtoken = Version.NewThread()["assetIndex"];
  1681. if (jtoken != null && jtoken["id"] != null)
  1682. {
  1683. break;
  1684. }
  1685. if (Version.NewThread()["assets"] != null)
  1686. {
  1687. Version.NewThread()["assets"].ToString();
  1688. }
  1689. if (CheckURLEmpty && jtoken["url"] != null)
  1690. {
  1691. goto IL_8E;
  1692. }
  1693. if (Operators.CompareString(Version.CallThread(), "", false) == 0)
  1694. {
  1695. goto IL_92;
  1696. }
  1697. Version = new ModMinecraft.McVersion(ModMinecraft.m_ProxyTests + "versions\\" + Version.CallThread());
  1698. }
  1699. return jtoken;
  1700. IL_8E:
  1701. return jtoken;
  1702. IL_92:;
  1703. }
  1704. catch (Exception ex)
  1705. {
  1706. }
  1707. if (!ReturnLegacyOnError)
  1708. {
  1709. throw new Exception("该版本不存在资源文件索引信息");
  1710. }
  1711. ModBase.Log("[Minecraft] 无法获取资源文件索引下载地址,使用默认的 legacy 下载地址", ModBase.LogLevel.Normal, "出现错误");
  1712. return (JToken)ModBase.GetJson("{\r\n \"id\": \"legacy\",\r\n \"sha1\": \"c0fd82e8ce9fbc93119e40d96d5a4e62cfa3f729\",\r\n \"size\": 134284,\r\n \"url\": \"https://launchermeta.mojang.com/mc-staging/assets/legacy/c0fd82e8ce9fbc93119e40d96d5a4e62cfa3f729/legacy.json\",\r\n \"totalSize\": 111220701\r\n }");
  1713. }
  1714. // Token: 0x06000E6D RID: 3693 RVA: 0x0006B870 File Offset: 0x00069A70
  1715. public static string McAssetsGetIndexName(ModMinecraft.McVersion Version)
  1716. {
  1717. try
  1718. {
  1719. while (Version.NewThread()["assetIndex"] == null || Version.NewThread()["assetIndex"]["id"] == null)
  1720. {
  1721. if (Version.NewThread()["assets"] != null)
  1722. {
  1723. return Version.NewThread()["assets"].ToString();
  1724. }
  1725. if (Operators.CompareString(Version.CallThread(), "", false) == 0)
  1726. {
  1727. goto IL_CC;
  1728. }
  1729. Version = new ModMinecraft.McVersion(ModMinecraft.m_ProxyTests + "versions\\" + Version.CallThread());
  1730. }
  1731. return Version.NewThread()["assetIndex"]["id"].ToString();
  1732. }
  1733. catch (Exception ex)
  1734. {
  1735. ModBase.Log(ex, "获取资源文件索引名失败", ModBase.LogLevel.Debug, "出现错误");
  1736. }
  1737. IL_CC:
  1738. return "legacy";
  1739. }
  1740. // Token: 0x06000E6E RID: 3694 RVA: 0x0006B960 File Offset: 0x00069B60
  1741. private static List<ModMinecraft.McAssetsToken> McAssetsListGet(ModMinecraft.McVersion Version)
  1742. {
  1743. string text = ModMinecraft.McAssetsGetIndexName(Version);
  1744. List<ModMinecraft.McAssetsToken> result;
  1745. try
  1746. {
  1747. if (!File.Exists(string.Format("{0}assets\\indexes\\{1}.json", ModMinecraft.m_ProxyTests, text)))
  1748. {
  1749. throw new FileNotFoundException("未找到 Asset Index", ModMinecraft.m_ProxyTests + "assets\\indexes\\" + text + ".json");
  1750. }
  1751. List<ModMinecraft.McAssetsToken> list = new List<ModMinecraft.McAssetsToken>();
  1752. JObject jobject = (JObject)ModBase.GetJson(ModBase.ReadFile(string.Format("{0}assets\\indexes\\{1}.json", ModMinecraft.m_ProxyTests, text), null));
  1753. try
  1754. {
  1755. foreach (JToken jtoken in jobject["objects"].Children())
  1756. {
  1757. JProperty jproperty = (JProperty)jtoken;
  1758. string adapterMap;
  1759. if (jobject["map_to_resources"] != null && jobject["map_to_resources"].ToObject<bool>())
  1760. {
  1761. adapterMap = Version.ChangeMapper() + "resources\\" + jproperty.Name.Replace("/", "\\");
  1762. }
  1763. else if (jobject["virtual"] != null && jobject["virtual"].ToObject<bool>())
  1764. {
  1765. adapterMap = ModMinecraft.m_ProxyTests + "assets\\virtual\\legacy\\" + jproperty.Name.Replace("/", "\\");
  1766. }
  1767. else
  1768. {
  1769. adapterMap = string.Concat(new string[]
  1770. {
  1771. ModMinecraft.m_ProxyTests,
  1772. "assets\\objects\\",
  1773. Strings.Left(jproperty.Value["hash"].ToString(), 2),
  1774. "\\",
  1775. jproperty.Value["hash"].ToString()
  1776. });
  1777. }
  1778. list.Add(new ModMinecraft.McAssetsToken
  1779. {
  1780. m_AdapterMap = adapterMap,
  1781. _FacadeMap = jproperty.Name,
  1782. merchantMap = jproperty.Value["hash"].ToString(),
  1783. listMap = Conversions.ToLong(jproperty.Value["size"].ToString())
  1784. });
  1785. }
  1786. }
  1787. finally
  1788. {
  1789. IEnumerator<JToken> enumerator;
  1790. if (enumerator != null)
  1791. {
  1792. enumerator.Dispose();
  1793. }
  1794. }
  1795. result = list;
  1796. }
  1797. catch (Exception ex)
  1798. {
  1799. ModBase.Log(ex, "获取资源文件列表失败:" + text, ModBase.LogLevel.Debug, "出现错误");
  1800. throw;
  1801. }
  1802. return result;
  1803. }
  1804. // Token: 0x06000E6F RID: 3695 RVA: 0x0006BBCC File Offset: 0x00069DCC
  1805. public static List<ModNet.NetFile> McAssetsFixList(ModMinecraft.McVersion Version, bool CheckHash, ref ModLoader.LoaderBase ProgressFeed = null)
  1806. {
  1807. List<ModNet.NetFile> list = new List<ModNet.NetFile>();
  1808. checked
  1809. {
  1810. try
  1811. {
  1812. List<ModMinecraft.McAssetsToken> list2 = ModMinecraft.McAssetsListGet(Version);
  1813. if (ProgressFeed != null)
  1814. {
  1815. ProgressFeed.Progress = 0.04;
  1816. }
  1817. int num = list2.Count - 1;
  1818. for (int i = 0; i <= num; i++)
  1819. {
  1820. ModMinecraft.McAssetsToken mcAssetsToken = list2[i];
  1821. if (ProgressFeed != null)
  1822. {
  1823. ProgressFeed.Progress = unchecked(0.05 + 0.94 * (double)i / (double)list2.Count);
  1824. }
  1825. FileInfo fileInfo = new FileInfo(mcAssetsToken.m_AdapterMap);
  1826. if (!fileInfo.Exists || (mcAssetsToken.listMap != 0L && mcAssetsToken.listMap != fileInfo.Length) || (CheckHash && mcAssetsToken.merchantMap != null && Operators.CompareString(mcAssetsToken.merchantMap, ModBase.smethod_1(mcAssetsToken.m_AdapterMap), false) != 0))
  1827. {
  1828. list.Add(new ModNet.NetFile(ModDownload.DlSourceResourceGet("https://resources.download.minecraft.net/" + Strings.Left(mcAssetsToken.merchantMap, 2) + "/" + mcAssetsToken.merchantMap), mcAssetsToken.m_AdapterMap, new ModBase.FileChecker(-1L, (mcAssetsToken.listMap == 0L) ? -1L : mcAssetsToken.listMap, mcAssetsToken.merchantMap, true, false), false));
  1829. }
  1830. }
  1831. }
  1832. catch (Exception ex)
  1833. {
  1834. ModBase.Log(ex, "获取版本缺失的资源文件下载列表失败", ModBase.LogLevel.Debug, "出现错误");
  1835. }
  1836. if (ProgressFeed != null)
  1837. {
  1838. ProgressFeed.Progress = 0.99;
  1839. }
  1840. return list;
  1841. }
  1842. }
  1843. // Token: 0x06000E70 RID: 3696 RVA: 0x0006BD60 File Offset: 0x00069F60
  1844. public static void McDownloadClientUpdateHint(string VersionName, JObject Json)
  1845. {
  1846. ModMinecraft._Closure$__48-1 CS$<>8__locals1 = new ModMinecraft._Closure$__48-1(CS$<>8__locals1);
  1847. CS$<>8__locals1.$VB$Local_VersionName = VersionName;
  1848. try
  1849. {
  1850. ModMinecraft._Closure$__48-0 CS$<>8__locals2 = new ModMinecraft._Closure$__48-0(CS$<>8__locals2);
  1851. CS$<>8__locals2.$VB$Local_Version = null;
  1852. try
  1853. {
  1854. foreach (JToken jtoken in Json["versions"])
  1855. {
  1856. if (jtoken["id"] != null && Operators.CompareString(jtoken["id"].ToString(), CS$<>8__locals1.$VB$Local_VersionName, false) == 0)
  1857. {
  1858. CS$<>8__locals2.$VB$Local_Version = jtoken;
  1859. break;
  1860. }
  1861. }
  1862. }
  1863. finally
  1864. {
  1865. IEnumerator<JToken> enumerator;
  1866. if (enumerator != null)
  1867. {
  1868. enumerator.Dispose();
  1869. }
  1870. }
  1871. if (CS$<>8__locals2.$VB$Local_Version != null)
  1872. {
  1873. DateTime dateTime = (DateTime)CS$<>8__locals2.$VB$Local_Version["releaseTime"];
  1874. if (ModMain.MyMsgBox(string.Format("新版本:{0}{1}", CS$<>8__locals1.$VB$Local_VersionName, "\r\n") + (((DateTime.Now - dateTime).TotalDays > 1.0) ? ("更新时间:" + dateTime.ToString()) : ("更新于:" + ModBase.GetTimeSpanString(dateTime - DateTime.Now, false))), "Minecraft 更新提示", "确定", "下载", ((DateTime.Now - dateTime).TotalHours > 3.0) ? "更新日志" : "", false, true, false, null, null, delegate
  1875. {
  1876. ModDownloadLib.McUpdateLogShow(CS$<>8__locals2.$VB$Local_Version);
  1877. }) == 2)
  1878. {
  1879. ModBase.RunInUi(delegate()
  1880. {
  1881. PageDownloadInstall._ErrorReader = CS$<>8__locals1.$VB$Local_VersionName;
  1882. ModMain._ProcessIterator.PageChange(FormMain.PageType.Download, FormMain.PageSubType.DownloadInstall);
  1883. }, false);
  1884. }
  1885. }
  1886. }
  1887. catch (Exception ex)
  1888. {
  1889. ModBase.Log(ex, "Minecraft 更新提示发送失败(" + (CS$<>8__locals1.$VB$Local_VersionName ?? "Nothing") + ")", ModBase.LogLevel.Feedback, "出现错误");
  1890. }
  1891. }
  1892. // Token: 0x06000E71 RID: 3697 RVA: 0x00008F5F File Offset: 0x0000715F
  1893. public static bool VersionSortBoolean(string Left, string Right)
  1894. {
  1895. return ModMinecraft.VersionSortInteger(Left, Right) >= 0;
  1896. }
  1897. // Token: 0x06000E72 RID: 3698 RVA: 0x0006BF50 File Offset: 0x0006A150
  1898. public static int VersionSortInteger(string Left, string Right)
  1899. {
  1900. if (Operators.CompareString(Left, "未知版本", false) == 0 || Operators.CompareString(Right, "未知版本", false) == 0)
  1901. {
  1902. if (Operators.CompareString(Left, "未知版本", false) == 0 && Operators.CompareString(Right, "未知版本", false) != 0)
  1903. {
  1904. return 1;
  1905. }
  1906. if (Operators.CompareString(Left, "未知版本", false) == 0 && Operators.CompareString(Right, "未知版本", false) == 0)
  1907. {
  1908. return 0;
  1909. }
  1910. if (Operators.CompareString(Left, "未知版本", false) != 0 && Operators.CompareString(Right, "未知版本", false) == 0)
  1911. {
  1912. return -1;
  1913. }
  1914. }
  1915. Left = Left.ToLowerInvariant();
  1916. Right = Right.ToLowerInvariant();
  1917. List<string> list = ModBase.RegexSearch(Left.Replace("快照", "snapshot").Replace("预览版", "pre"), "[a-z]+|[0-9]+", 0);
  1918. List<string> list2 = ModBase.RegexSearch(Right.Replace("快照", "snapshot").Replace("预览版", "pre"), "[a-z]+|[0-9]+", 0);
  1919. int num = 0;
  1920. checked
  1921. {
  1922. while (list.Count - 1 >= num || list2.Count - 1 >= num)
  1923. {
  1924. string text = (list.Count - 1 < num) ? "-1" : list[num];
  1925. string text2 = (list2.Count - 1 < num) ? "-1" : list2[num];
  1926. if (Operators.CompareString(text, text2, false) != 0)
  1927. {
  1928. if (Operators.CompareString(text, "pre", false) == 0 || Operators.CompareString(text, "snapshot", false) == 0)
  1929. {
  1930. text = "-3";
  1931. }
  1932. if (Operators.CompareString(text, "rc", false) == 0)
  1933. {
  1934. text = "-2";
  1935. }
  1936. if (Operators.CompareString(text, "experimental", false) == 0)
  1937. {
  1938. text = "-4";
  1939. }
  1940. double num2 = ModBase.Val(text);
  1941. if (Operators.CompareString(text2, "pre", false) == 0 || Operators.CompareString(text2, "snapshot", false) == 0)
  1942. {
  1943. text2 = "-3";
  1944. }
  1945. if (Operators.CompareString(text2, "rc", false) == 0)
  1946. {
  1947. text2 = "-2";
  1948. }
  1949. if (Operators.CompareString(text2, "experimental", false) == 0)
  1950. {
  1951. text2 = "-4";
  1952. }
  1953. double num3 = ModBase.Val(text2);
  1954. if (num2 == 0.0 && num3 == 0.0)
  1955. {
  1956. if (Operators.CompareString(text, text2, false) > 0)
  1957. {
  1958. return 1;
  1959. }
  1960. if (Operators.CompareString(text, text2, false) < 0)
  1961. {
  1962. return -1;
  1963. }
  1964. }
  1965. else
  1966. {
  1967. if (num2 > num3)
  1968. {
  1969. return 1;
  1970. }
  1971. if (num2 < num3)
  1972. {
  1973. return -1;
  1974. }
  1975. }
  1976. }
  1977. num++;
  1978. }
  1979. int result;
  1980. if (Operators.CompareString(Left, Right, false) > 0)
  1981. {
  1982. result = 1;
  1983. }
  1984. else if (Operators.CompareString(Left, Right, false) < 0)
  1985. {
  1986. result = -1;
  1987. }
  1988. else
  1989. {
  1990. result = 0;
  1991. }
  1992. return result;
  1993. }
  1994. }
  1995. // Token: 0x06000E73 RID: 3699 RVA: 0x0006C1E4 File Offset: 0x0006A3E4
  1996. public static string AccountFilter(string Account)
  1997. {
  1998. string result;
  1999. if (Account.Contains("@"))
  2000. {
  2001. string[] array = Account.Split("@");
  2002. result = "".PadLeft(Enumerable.Count<char>(array[0]), '*') + "@" + array[1];
  2003. }
  2004. else if (Enumerable.Count<char>(Account) >= 6)
  2005. {
  2006. result = Strings.Mid(Account, 1, checked(Enumerable.Count<char>(Account) - 4)) + "****";
  2007. }
  2008. else
  2009. {
  2010. result = "".PadLeft(Enumerable.Count<char>(Account), '*');
  2011. }
  2012. return result;
  2013. }
  2014. // Token: 0x040007B0 RID: 1968
  2015. public static string m_ProxyTests;
  2016. // Token: 0x040007B1 RID: 1969
  2017. public static List<ModMinecraft.McFolder> messageTests = new List<ModMinecraft.McFolder>();
  2018. // Token: 0x040007B2 RID: 1970
  2019. public static ModLoader.LoaderTask<int, int> m_CreatorTests = new ModLoader.LoaderTask<int, int>("Minecraft Folder List", delegate(ModLoader.LoaderTask<int, int> a0)
  2020. {
  2021. ModMinecraft.McFolderListLoadSub();
  2022. }, null, ThreadPriority.AboveNormal);
  2023. // Token: 0x040007B3 RID: 1971
  2024. private static ModMinecraft.McVersion initializerTests;
  2025. // Token: 0x040007B4 RID: 1972
  2026. private static ModMinecraft.McVersion _SingletonTests = 0;
  2027. // Token: 0x040007B5 RID: 1973
  2028. public static Dictionary<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>> _RegTests = new Dictionary<ModMinecraft.McVersionCardType, List<ModMinecraft.McVersion>>();
  2029. // Token: 0x040007B6 RID: 1974
  2030. public static bool m_ProductTests = false;
  2031. // Token: 0x040007B7 RID: 1975
  2032. public static ModLoader.LoaderTask<string, int> _ListenerTests = new ModLoader.LoaderTask<string, int>("Minecraft Version List", new Action<ModLoader.LoaderTask<string, int>>(ModMinecraft.McVersionListLoad), null, ThreadPriority.Normal)
  2033. {
  2034. ReloadTimeout = 1
  2035. };
  2036. // Token: 0x040007B8 RID: 1976
  2037. private static bool collectionTests = true;
  2038. // Token: 0x040007B9 RID: 1977
  2039. private static readonly object visitorTests = RuntimeHelpers.GetObjectValue(new object());
  2040. // Token: 0x040007BA RID: 1978
  2041. private static string valueTests = MyWpfExtension.ManageParser().Info.OSVersion;
  2042. // Token: 0x0200016F RID: 367
  2043. public class McFolder
  2044. {
  2045. // Token: 0x06000E75 RID: 3701 RVA: 0x0006C268 File Offset: 0x0006A468
  2046. public override bool Equals(object obj)
  2047. {
  2048. bool result;
  2049. if (!(obj is ModMinecraft.McFolder))
  2050. {
  2051. result = false;
  2052. }
  2053. else
  2054. {
  2055. ModMinecraft.McFolder mcFolder = (ModMinecraft.McFolder)obj;
  2056. result = (Operators.CompareString(this.Name, mcFolder.Name, false) == 0 && Operators.CompareString(this.Path, mcFolder.Path, false) == 0 && this.Type == mcFolder.Type);
  2057. }
  2058. return result;
  2059. }
  2060. // Token: 0x06000E76 RID: 3702 RVA: 0x00008F6E File Offset: 0x0000716E
  2061. public override string ToString()
  2062. {
  2063. return this.Path;
  2064. }
  2065. // Token: 0x040007BB RID: 1979
  2066. public string Name;
  2067. // Token: 0x040007BC RID: 1980
  2068. public string Path;
  2069. // Token: 0x040007BD RID: 1981
  2070. public ModMinecraft.McFolderType Type;
  2071. }
  2072. // Token: 0x02000170 RID: 368
  2073. public enum McFolderType
  2074. {
  2075. // Token: 0x040007BF RID: 1983
  2076. Original,
  2077. // Token: 0x040007C0 RID: 1984
  2078. RenamedOriginal,
  2079. // Token: 0x040007C1 RID: 1985
  2080. Custom
  2081. }
  2082. // Token: 0x02000171 RID: 369
  2083. public class McVersion
  2084. {
  2085. // Token: 0x17000219 RID: 537
  2086. // (get) Token: 0x06000E78 RID: 3704 RVA: 0x00008F76 File Offset: 0x00007176
  2087. public string Path { get; }
  2088. // Token: 0x06000E79 RID: 3705 RVA: 0x00008F7E File Offset: 0x0000717E
  2089. public string ChangeMapper()
  2090. {
  2091. return this.GetPathIndie(this.RunThread());
  2092. }
  2093. // Token: 0x06000E7A RID: 3706 RVA: 0x0006C2C4 File Offset: 0x0006A4C4
  2094. public string GetPathIndie(bool Modable)
  2095. {
  2096. int num = Conversions.ToInteger(ModBase.m_IdentifierRepository.Get("LaunchArgumentIndie", null));
  2097. object left = ModBase.m_IdentifierRepository.Get("VersionArgumentIndie", this);
  2098. if (Operators.ConditionalCompareObjectEqual(left, -1, false))
  2099. {
  2100. DirectoryInfo directoryInfo = new DirectoryInfo(this.Path + "mods\\");
  2101. DirectoryInfo directoryInfo2 = new DirectoryInfo(this.Path + "saves\\");
  2102. if ((directoryInfo.Exists && Enumerable.Any<FileInfo>(directoryInfo.EnumerateFiles())) || (directoryInfo2.Exists && Enumerable.Any<FileInfo>(directoryInfo2.EnumerateFiles())))
  2103. {
  2104. ModBase.m_IdentifierRepository.Set("VersionArgumentIndie", 1, false, this);
  2105. ModBase.Log("[Setup] 已自动开启单版本隔离:" + this.Name, ModBase.LogLevel.Normal, "出现错误");
  2106. goto IL_1BF;
  2107. }
  2108. ModBase.m_IdentifierRepository.Set("VersionArgumentIndie", 0, false, this);
  2109. ModBase.Log("[Setup] 版本隔离使用全局设置:" + this.Name, ModBase.LogLevel.Normal, "出现错误");
  2110. }
  2111. else if (!Operators.ConditionalCompareObjectEqual(left, 0, false))
  2112. {
  2113. if (Operators.ConditionalCompareObjectEqual(left, 1, false))
  2114. {
  2115. goto IL_1BF;
  2116. }
  2117. if (Operators.ConditionalCompareObjectEqual(left, 2, false))
  2118. {
  2119. goto IL_1AE;
  2120. }
  2121. }
  2122. switch (num)
  2123. {
  2124. case 1:
  2125. if (Modable)
  2126. {
  2127. return this.Path;
  2128. }
  2129. break;
  2130. case 2:
  2131. if (this._ConfigurationMap == ModMinecraft.McVersionState.Fool || this._ConfigurationMap == ModMinecraft.McVersionState.Old || this._ConfigurationMap == ModMinecraft.McVersionState.Snapshot)
  2132. {
  2133. return this.Path;
  2134. }
  2135. break;
  2136. case 3:
  2137. if (Modable)
  2138. {
  2139. return this.Path;
  2140. }
  2141. if (this._ConfigurationMap != ModMinecraft.McVersionState.Fool && this._ConfigurationMap != ModMinecraft.McVersionState.Old)
  2142. {
  2143. if (this._ConfigurationMap != ModMinecraft.McVersionState.Snapshot)
  2144. {
  2145. break;
  2146. }
  2147. }
  2148. return this.Path;
  2149. case 4:
  2150. IL_1BF:
  2151. return this.Path;
  2152. }
  2153. IL_1AE:
  2154. return ModMinecraft.m_ProxyTests;
  2155. }
  2156. // Token: 0x1700021A RID: 538
  2157. // (get) Token: 0x06000E7B RID: 3707 RVA: 0x00008F8C File Offset: 0x0000718C
  2158. public string Name
  2159. {
  2160. get
  2161. {
  2162. if (this.taskMap == null && Operators.CompareString(this.Path, "", false) != 0)
  2163. {
  2164. this.taskMap = ModBase.GetFolderNameFromPath(this.Path);
  2165. }
  2166. return this.taskMap;
  2167. }
  2168. }
  2169. // Token: 0x06000E7C RID: 3708 RVA: 0x0006C498 File Offset: 0x0006A698
  2170. public bool RunThread()
  2171. {
  2172. if (!this.importerMap)
  2173. {
  2174. this.Load();
  2175. }
  2176. return this.Version._CandidateMap || this.Version.m_StructMap || this.Version._AccountMap || this.Version._ValMap || this.expressionMap == ModMinecraft.McVersionCardType.API;
  2177. }
  2178. // Token: 0x1700021B RID: 539
  2179. // (get) Token: 0x06000E7D RID: 3709 RVA: 0x0006C4F4 File Offset: 0x0006A6F4
  2180. // (set) Token: 0x06000E7E RID: 3710 RVA: 0x00008FC0 File Offset: 0x000071C0
  2181. public ModMinecraft.McVersionInfo Version
  2182. {
  2183. get
  2184. {
  2185. if (this.m_WriterMap == null)
  2186. {
  2187. this.m_WriterMap = new ModMinecraft.McVersionInfo();
  2188. try
  2189. {
  2190. try
  2191. {
  2192. if (this.NewThread()["releaseTime"] == null)
  2193. {
  2194. this._RegistryMap = new DateTime(1970, 1, 1, 15, 0, 0);
  2195. }
  2196. else
  2197. {
  2198. this._RegistryMap = this.NewThread()["releaseTime"].ToObject<DateTime>();
  2199. }
  2200. if (this._RegistryMap.Year > 2000 && this._RegistryMap.Year < 2013)
  2201. {
  2202. this.m_WriterMap._ConnectionMap = "Old";
  2203. goto IL_648;
  2204. }
  2205. }
  2206. catch (Exception ex)
  2207. {
  2208. this._RegistryMap = new DateTime(1970, 1, 1, 15, 0, 0);
  2209. }
  2210. if ((string)(this.NewThread()["type"] ?? "") == "pending")
  2211. {
  2212. this.m_WriterMap._ConnectionMap = "pending";
  2213. }
  2214. else
  2215. {
  2216. if (this.PrepareThread())
  2217. {
  2218. try
  2219. {
  2220. this.m_WriterMap._ConnectionMap = (string)this.NewThread()["jumploader"]["jars"]["minecraft"][0]["gameVersion"];
  2221. goto IL_648;
  2222. }
  2223. catch (Exception ex2)
  2224. {
  2225. }
  2226. }
  2227. if (this.NewThread()["clientVersion"] != null)
  2228. {
  2229. this.m_WriterMap._ConnectionMap = (string)this.NewThread()["clientVersion"];
  2230. }
  2231. else
  2232. {
  2233. if (this.NewThread()["patches"] != null)
  2234. {
  2235. try
  2236. {
  2237. foreach (JToken jtoken in this.NewThread()["patches"])
  2238. {
  2239. JObject jobject = (JObject)jtoken;
  2240. if (Operators.CompareString((jobject["id"] ?? "").ToString(), "game", false) == 0 && jobject["version"] != null)
  2241. {
  2242. this.m_WriterMap._ConnectionMap = jobject["version"].ToString();
  2243. goto IL_648;
  2244. }
  2245. }
  2246. }
  2247. finally
  2248. {
  2249. IEnumerator<JToken> enumerator;
  2250. if (enumerator != null)
  2251. {
  2252. enumerator.Dispose();
  2253. }
  2254. }
  2255. }
  2256. if (this.NewThread()["arguments"] != null && this.NewThread()["arguments"]["game"] != null)
  2257. {
  2258. bool flag = false;
  2259. try
  2260. {
  2261. foreach (JToken jtoken2 in this.NewThread()["arguments"]["game"])
  2262. {
  2263. if (flag)
  2264. {
  2265. this.m_WriterMap._ConnectionMap = jtoken2.ToString();
  2266. goto IL_648;
  2267. }
  2268. if (Operators.CompareString(jtoken2.ToString(), "--fml.mcVersion", false) == 0)
  2269. {
  2270. flag = true;
  2271. }
  2272. }
  2273. }
  2274. finally
  2275. {
  2276. IEnumerator<JToken> enumerator2;
  2277. if (enumerator2 != null)
  2278. {
  2279. enumerator2.Dispose();
  2280. }
  2281. }
  2282. }
  2283. if (Operators.CompareString(this.CallThread(), "", false) != 0)
  2284. {
  2285. this.m_WriterMap._ConnectionMap = (this.NewThread()["jar"] ?? "").ToString();
  2286. if (Operators.CompareString(this.m_WriterMap._ConnectionMap, "", false) == 0)
  2287. {
  2288. this.m_WriterMap._ConnectionMap = this.CallThread();
  2289. }
  2290. }
  2291. else
  2292. {
  2293. string text = ModBase.RegexSeek((this.NewThread()["downloads"] ?? "").ToString(), "(?<=launcher.mojang.com/mc/game/)[^/]*", 0);
  2294. if (text != null)
  2295. {
  2296. this.m_WriterMap._ConnectionMap = text;
  2297. }
  2298. else
  2299. {
  2300. string str = this.NewThread()["libraries"].ToString();
  2301. text = (ModBase.RegexSeek(str, "(?<=net.minecraftforge:forge:)1.[0-9+.]+", 0) ?? ModBase.RegexSeek(str, "(?<=net.minecraftforge:fmlloader:)1.[0-9+.]+", 0));
  2302. if (text != null)
  2303. {
  2304. this.m_WriterMap._ConnectionMap = text;
  2305. }
  2306. else
  2307. {
  2308. text = ModBase.RegexSeek(str, "(?<=optifine:OptiFine:)1.[0-9+.]+", 0);
  2309. if (text != null)
  2310. {
  2311. this.m_WriterMap._ConnectionMap = text;
  2312. }
  2313. else
  2314. {
  2315. text = ModBase.RegexSeek(str, "(?<=((fabricmc)|(quiltmc)):intermediary:)[^\"]*", 0);
  2316. if (text != null)
  2317. {
  2318. this.m_WriterMap._ConnectionMap = text;
  2319. }
  2320. else if (this.NewThread()["jar"] != null)
  2321. {
  2322. this.m_WriterMap._ConnectionMap = this.NewThread()["jar"].ToString();
  2323. }
  2324. else
  2325. {
  2326. if (File.Exists(this.Path + this.Name + ".jar"))
  2327. {
  2328. try
  2329. {
  2330. using (ZipArchive zipArchive = new ZipArchive(new FileStream(this.Path + this.Name + ".jar", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)))
  2331. {
  2332. ZipArchiveEntry entry = zipArchive.GetEntry("version.json");
  2333. if (entry != null)
  2334. {
  2335. using (StreamReader streamReader = new StreamReader(entry.Open()))
  2336. {
  2337. JObject jobject2 = (JObject)ModBase.GetJson(streamReader.ReadToEnd());
  2338. if (jobject2["id"] != null)
  2339. {
  2340. string text2 = jobject2["id"].ToString();
  2341. if (text2.Length < 32)
  2342. {
  2343. this.m_WriterMap._ConnectionMap = text2;
  2344. ModBase.Log("[Minecraft] 从版本 jar 中的 version.json 获取到版本号:" + text2, ModBase.LogLevel.Normal, "出现错误");
  2345. goto IL_648;
  2346. }
  2347. }
  2348. }
  2349. }
  2350. }
  2351. }
  2352. catch (Exception ex3)
  2353. {
  2354. ModBase.Log(ex3, "从版本 jar 中的 version.json 获取版本号失败", ModBase.LogLevel.Debug, "出现错误");
  2355. }
  2356. }
  2357. ModBase.Log("[Minecraft] 无法完全确认 MC 版本号的版本:" + this.Name, ModBase.LogLevel.Normal, "出现错误");
  2358. text = ModBase.RegexSeek(this.Name, "([0-9w]{5}[a-z]{1})|(1\\.[0-9]+(\\.[0-9]+)?(-(pre|rc)[1-9]?| Pre-Release( [1-9]{1})?)?)", 1);
  2359. if (text != null)
  2360. {
  2361. this.m_WriterMap._ConnectionMap = text;
  2362. }
  2363. else
  2364. {
  2365. JObject jobject3 = (JObject)this.NewThread().DeepClone();
  2366. jobject3.Remove("libraries");
  2367. text = ModBase.RegexSeek(jobject3.ToString(), "([0-9w]{5}[a-z]{1})|(1\\.[0-9]+(\\.[0-9]+)?(-(pre|rc)[1-9]?| Pre-Release( [1-9]{1})?)?)", 1);
  2368. if (text != null)
  2369. {
  2370. this.m_WriterMap._ConnectionMap = text;
  2371. }
  2372. else
  2373. {
  2374. this.m_WriterMap._ConnectionMap = "Unknown";
  2375. this._ConsumerMap = "PCL 无法识别该版本的 MC 版本号";
  2376. }
  2377. }
  2378. }
  2379. }
  2380. }
  2381. }
  2382. }
  2383. }
  2384. }
  2385. }
  2386. catch (Exception ex4)
  2387. {
  2388. ModBase.Log(ex4, "识别 Minecraft 版本时出错", ModBase.LogLevel.Debug, "出现错误");
  2389. this.m_WriterMap._ConnectionMap = "Unknown";
  2390. this._ConsumerMap = "无法识别:" + ex4.Message;
  2391. }
  2392. IL_648:
  2393. if (this.m_WriterMap._ConnectionMap.StartsWithF("1.", false))
  2394. {
  2395. string[] array = this.m_WriterMap._ConnectionMap.Split(new char[]
  2396. {
  2397. ' ',
  2398. '_',
  2399. '-',
  2400. '.'
  2401. });
  2402. string text3 = (Enumerable.Count<string>(array) >= 2) ? array[1] : "0";
  2403. this.m_WriterMap._ServerMap = Conversions.ToInteger((text3.Length <= 2) ? ModBase.Val(text3) : "0");
  2404. text3 = ((Enumerable.Count<string>(array) >= 3) ? array[2] : "0");
  2405. this.m_WriterMap.m_ResolverMap = Conversions.ToInteger((text3.Length <= 2) ? ModBase.Val(text3) : "0");
  2406. }
  2407. else if (this.m_WriterMap._ConnectionMap.Contains("w") || Operators.CompareString(this.m_WriterMap._ConnectionMap, "pending", false) == 0)
  2408. {
  2409. this.m_WriterMap._ServerMap = 99;
  2410. this.m_WriterMap.m_ResolverMap = 99;
  2411. }
  2412. }
  2413. return this.m_WriterMap;
  2414. }
  2415. set
  2416. {
  2417. this.m_WriterMap = value;
  2418. }
  2419. }
  2420. // Token: 0x06000E7F RID: 3711 RVA: 0x0006CD24 File Offset: 0x0006AF24
  2421. public string AwakeThread()
  2422. {
  2423. VB$AnonymousDelegate_8<string, bool> vb$AnonymousDelegate_ = (ModMinecraft.McVersion._Closure$__.$I22-0 == null) ? (ModMinecraft.McVersion._Closure$__.$I22-0 = delegate(string Json)
  2424. {
  2425. string str = Json.Trim();
  2426. return str.StartsWithF("{", false) && str.EndsWithF("}", false);
  2427. }) : ModMinecraft.McVersion._Closure$__.$I22-0;
  2428. if (this.m_RuleMap == null)
  2429. {
  2430. if (!File.Exists(this.Path + this.Name + ".json"))
  2431. {
  2432. throw new Exception(string.Format("未找到版本 JSON 文件:{0}{1}.json", this.Path, this.Name));
  2433. }
  2434. this.m_RuleMap = ModBase.ReadFile(this.Path + this.Name + ".json", null);
  2435. if (!vb$AnonymousDelegate_(this.m_RuleMap))
  2436. {
  2437. if (ModBase.RunInUi())
  2438. {
  2439. ModBase.Log("[Minecraft] 版本 JSON 文件为空或有误,由于代码在主线程运行,将不再进行重试", ModBase.LogLevel.Debug, "出现错误");
  2440. ModBase.GetJson(this.m_RuleMap);
  2441. }
  2442. else
  2443. {
  2444. ModBase.Log("[Minecraft] 版本 JSON 文件为空或有误,将在 2s 后重试读取(" + this.Path + this.Name + ".json)", ModBase.LogLevel.Debug, "出现错误");
  2445. Thread.Sleep(2000);
  2446. this.m_RuleMap = ModBase.ReadFile(this.Path + this.Name + ".json", null);
  2447. if (!vb$AnonymousDelegate_(this.m_RuleMap))
  2448. {
  2449. ModBase.GetJson(this.m_RuleMap);
  2450. }
  2451. }
  2452. }
  2453. }
  2454. return this.m_RuleMap;
  2455. }
  2456. // Token: 0x06000E80 RID: 3712 RVA: 0x00008FC9 File Offset: 0x000071C9
  2457. public void FillThread(string value)
  2458. {
  2459. this.m_RuleMap = value;
  2460. }
  2461. // Token: 0x06000E81 RID: 3713 RVA: 0x0006CE64 File Offset: 0x0006B064
  2462. public JObject NewThread()
  2463. {
  2464. if (this.proccesorMap == null)
  2465. {
  2466. string text = this.AwakeThread();
  2467. try
  2468. {
  2469. this.proccesorMap = (JObject)ModBase.GetJson(text);
  2470. if (this.proccesorMap.ContainsKey("patches") && !this.proccesorMap.ContainsKey("time"))
  2471. {
  2472. this.SetupThread(true);
  2473. JObject jobject = null;
  2474. List<JObject> list = new List<JObject>();
  2475. try
  2476. {
  2477. foreach (JToken jtoken in this.proccesorMap["patches"])
  2478. {
  2479. JObject item = (JObject)jtoken;
  2480. list.Add(item);
  2481. }
  2482. }
  2483. finally
  2484. {
  2485. IEnumerator<JToken> enumerator;
  2486. if (enumerator != null)
  2487. {
  2488. enumerator.Dispose();
  2489. }
  2490. }
  2491. list = list.Sort((ModMinecraft.McVersion._Closure$__.$I26-0 == null) ? (ModMinecraft.McVersion._Closure$__.$I26-0 = ((JObject Left, JObject Right) => ModBase.Val((Left["priority"] ?? "0").ToString()) < ModBase.Val((Right["priority"] ?? "0").ToString()))) : ModMinecraft.McVersion._Closure$__.$I26-0);
  2492. try
  2493. {
  2494. foreach (JObject jobject2 in list)
  2495. {
  2496. string text2 = (string)jobject2["id"];
  2497. if (text2 != null)
  2498. {
  2499. ModBase.Log("[Minecraft] 合并 HMCL 分支项:" + text2, ModBase.LogLevel.Normal, "出现错误");
  2500. if (jobject != null)
  2501. {
  2502. jobject.Merge(jobject2);
  2503. }
  2504. else
  2505. {
  2506. jobject = jobject2;
  2507. }
  2508. }
  2509. else
  2510. {
  2511. ModBase.Log("[Minecraft] 存在为空的 HMCL 分支项", ModBase.LogLevel.Normal, "出现错误");
  2512. }
  2513. }
  2514. }
  2515. finally
  2516. {
  2517. List<JObject>.Enumerator enumerator2;
  2518. ((IDisposable)enumerator2).Dispose();
  2519. }
  2520. this.proccesorMap = jobject;
  2521. this.proccesorMap["id"] = this.Name;
  2522. if (this.proccesorMap.ContainsKey("inheritsFrom"))
  2523. {
  2524. this.proccesorMap.Remove("inheritsFrom");
  2525. }
  2526. }
  2527. object obj = null;
  2528. try
  2529. {
  2530. obj = ((this.proccesorMap["inheritsFrom"] == null) ? "" : this.proccesorMap["inheritsFrom"].ToString());
  2531. if (Operators.ConditionalCompareObjectEqual(obj, this.Name, false))
  2532. {
  2533. ModBase.Log("[Minecraft] 自引用的继承版本:" + this.Name, ModBase.LogLevel.Debug, "出现错误");
  2534. obj = "";
  2535. }
  2536. else
  2537. {
  2538. while (Operators.ConditionalCompareObjectNotEqual(obj, "", false))
  2539. {
  2540. ModMinecraft.McVersion mcVersion = new ModMinecraft.McVersion(Conversions.ToString(obj));
  2541. if (Operators.ConditionalCompareObjectEqual(mcVersion.CallThread(), obj, false))
  2542. {
  2543. throw new Exception(Conversions.ToString(Operators.ConcatenateObject("版本依赖项出现嵌套:", obj)));
  2544. }
  2545. obj = mcVersion.CallThread();
  2546. mcVersion.NewThread().Merge(this.proccesorMap);
  2547. this.proccesorMap = mcVersion.NewThread();
  2548. }
  2549. }
  2550. }
  2551. catch (Exception ex)
  2552. {
  2553. ModBase.Log(ex, "合并版本依赖项 JSON 失败(" + (obj ?? "null").ToString() + ")", ModBase.LogLevel.Debug, "出现错误");
  2554. }
  2555. }
  2556. catch (Exception innerException)
  2557. {
  2558. throw new Exception("初始化版本 JSON 时失败(" + (this.Name ?? "null") + ")", innerException);
  2559. }
  2560. try
  2561. {
  2562. if (text.Contains("minecraftforge") && File.Exists(this.ChangeMapper() + "config\\jumploader.json"))
  2563. {
  2564. try
  2565. {
  2566. foreach (string filePath in Directory.EnumerateFiles(this.ChangeMapper() + "mods"))
  2567. {
  2568. string fileNameFromPath = ModBase.GetFileNameFromPath(filePath);
  2569. if (fileNameFromPath.EndsWithF(".jar", true) && fileNameFromPath.ContainsF("jumploader", true))
  2570. {
  2571. ModBase.Log("[Minecraft] 发现 JumpLoader 分支项:" + fileNameFromPath, ModBase.LogLevel.Normal, "出现错误");
  2572. this.CalculateThread(true);
  2573. break;
  2574. }
  2575. }
  2576. }
  2577. finally
  2578. {
  2579. IEnumerator<string> enumerator3;
  2580. if (enumerator3 != null)
  2581. {
  2582. enumerator3.Dispose();
  2583. }
  2584. }
  2585. }
  2586. if (this.PrepareThread())
  2587. {
  2588. this.proccesorMap.Remove("jumploader");
  2589. this.proccesorMap.Add("jumploader", (JToken)ModBase.GetJson(ModBase.ReadFile(this.ChangeMapper() + "config\\jumploader.json", null)));
  2590. }
  2591. }
  2592. catch (Exception ex2)
  2593. {
  2594. ModBase.Log(ex2, "处理 JumpLoader 失败", ModBase.LogLevel.Debug, "出现错误");
  2595. }
  2596. }
  2597. return this.proccesorMap;
  2598. }
  2599. // Token: 0x06000E82 RID: 3714 RVA: 0x00008FD2 File Offset: 0x000071D2
  2600. public void ComputeThread(JObject value)
  2601. {
  2602. this.proccesorMap = value;
  2603. }
  2604. // Token: 0x06000E83 RID: 3715 RVA: 0x00008FDB File Offset: 0x000071DB
  2605. public bool CloneThread()
  2606. {
  2607. return this.NewThread()["minecraftArguments"] != null && (string)this.NewThread()["minecraftArguments"] != "";
  2608. }
  2609. // Token: 0x06000E84 RID: 3716 RVA: 0x00009010 File Offset: 0x00007210
  2610. [CompilerGenerated]
  2611. public bool InvokeThread()
  2612. {
  2613. return this.m_SetterMap;
  2614. }
  2615. // Token: 0x06000E85 RID: 3717 RVA: 0x00009018 File Offset: 0x00007218
  2616. [CompilerGenerated]
  2617. public void SetupThread(bool AutoPropertyValue)
  2618. {
  2619. this.m_SetterMap = AutoPropertyValue;
  2620. }
  2621. // Token: 0x06000E86 RID: 3718 RVA: 0x00009021 File Offset: 0x00007221
  2622. [CompilerGenerated]
  2623. public bool PrepareThread()
  2624. {
  2625. return this._FactoryMap;
  2626. }
  2627. // Token: 0x06000E87 RID: 3719 RVA: 0x00009029 File Offset: 0x00007229
  2628. [CompilerGenerated]
  2629. public void CalculateThread(bool AutoPropertyValue)
  2630. {
  2631. this._FactoryMap = AutoPropertyValue;
  2632. }
  2633. // Token: 0x06000E88 RID: 3720 RVA: 0x0006D2F0 File Offset: 0x0006B4F0
  2634. public string CallThread()
  2635. {
  2636. if (this.m_ExporterMap == null)
  2637. {
  2638. this.m_ExporterMap = (this.NewThread()["inheritsFrom"] ?? "").ToString();
  2639. if (this.AwakeThread().Contains("liteloader") && Operators.CompareString(this.Version._ConnectionMap, this.Name, false) != 0 && !this.AwakeThread().Contains("logging") && Operators.CompareString((this.NewThread()["jar"] ?? this.Version._ConnectionMap).ToString(), this.Version._ConnectionMap, false) == 0)
  2640. {
  2641. this.m_ExporterMap = this.Version._ConnectionMap;
  2642. }
  2643. if (this.InvokeThread())
  2644. {
  2645. this.m_ExporterMap = "";
  2646. }
  2647. }
  2648. return this.m_ExporterMap;
  2649. }
  2650. // Token: 0x06000E89 RID: 3721 RVA: 0x0006D3D4 File Offset: 0x0006B5D4
  2651. public McVersion(string Path)
  2652. {
  2653. this.taskMap = null;
  2654. this._ConsumerMap = "该版本未被加载,请向作者反馈此问题";
  2655. this._ConfigurationMap = ModMinecraft.McVersionState.Error;
  2656. this._TokenMap = false;
  2657. this.expressionMap = ModMinecraft.McVersionCardType.Auto;
  2658. this.m_WriterMap = null;
  2659. this._RegistryMap = new DateTime(1970, 1, 1, 15, 0, 0);
  2660. this.m_RuleMap = null;
  2661. this.proccesorMap = null;
  2662. this.SetupThread(false);
  2663. this.CalculateThread(false);
  2664. this.m_ExporterMap = null;
  2665. this.importerMap = false;
  2666. this.Path = (Path.Contains(":") ? "" : (ModMinecraft.m_ProxyTests + "versions\\")) + Path + (Path.EndsWithF("\\", false) ? "" : "\\");
  2667. }
  2668. // Token: 0x06000E8A RID: 3722 RVA: 0x0006D4A0 File Offset: 0x0006B6A0
  2669. public bool Check()
  2670. {
  2671. bool result;
  2672. if (!Directory.Exists(this.Path))
  2673. {
  2674. this._ConfigurationMap = ModMinecraft.McVersionState.Error;
  2675. this._ConsumerMap = "未找到版本 " + this.Name;
  2676. result = false;
  2677. }
  2678. else
  2679. {
  2680. try
  2681. {
  2682. Directory.CreateDirectory(this.Path + "PCL\\");
  2683. ModBase.CheckPermissionWithException(this.Path + "PCL\\");
  2684. }
  2685. catch (Exception ex)
  2686. {
  2687. this._ConfigurationMap = ModMinecraft.McVersionState.Error;
  2688. this._ConsumerMap = "PCL 没有对该文件夹的访问权限,请右键以管理员身份运行 PCL";
  2689. ModBase.Log(ex, "没有访问版本文件夹的权限", ModBase.LogLevel.Debug, "出现错误");
  2690. return false;
  2691. }
  2692. try
  2693. {
  2694. this.NewThread();
  2695. }
  2696. catch (Exception ex2)
  2697. {
  2698. ModBase.Log(ex2, "版本 JSON 可用性检查失败(" + this.Path + ")", ModBase.LogLevel.Debug, "出现错误");
  2699. this.FillThread("");
  2700. this.ComputeThread(null);
  2701. this._ConsumerMap = ex2.Message;
  2702. this._ConfigurationMap = ModMinecraft.McVersionState.Error;
  2703. return false;
  2704. }
  2705. try
  2706. {
  2707. if (Operators.CompareString(this.CallThread(), "", false) != 0 && !File.Exists(string.Concat(new string[]
  2708. {
  2709. ModBase.GetPathFromFullPath(this.Path),
  2710. this.CallThread(),
  2711. "\\",
  2712. this.CallThread(),
  2713. ".json"
  2714. })))
  2715. {
  2716. this._ConfigurationMap = ModMinecraft.McVersionState.Error;
  2717. this._ConsumerMap = "需要安装 " + this.CallThread() + " 作为前置版本";
  2718. return false;
  2719. }
  2720. }
  2721. catch (Exception ex3)
  2722. {
  2723. ModBase.Log(ex3, "依赖版本检查出错(" + this.Name + ")", ModBase.LogLevel.Debug, "出现错误");
  2724. this._ConfigurationMap = ModMinecraft.McVersionState.Error;
  2725. this._ConsumerMap = "未知错误:" + ModBase.GetExceptionSummary(ex3);
  2726. return false;
  2727. }
  2728. this._ConfigurationMap = ModMinecraft.McVersionState.Original;
  2729. result = true;
  2730. }
  2731. return result;
  2732. }
  2733. // Token: 0x06000E8B RID: 3723 RVA: 0x0006D6A4 File Offset: 0x0006B8A4
  2734. public ModMinecraft.McVersion Load()
  2735. {
  2736. try
  2737. {
  2738. if (this.Check())
  2739. {
  2740. string connectionMap = this.Version._ConnectionMap;
  2741. if (Operators.CompareString(connectionMap, "Unknown", false) != 0)
  2742. {
  2743. if (Operators.CompareString(connectionMap, "Old", false) != 0)
  2744. {
  2745. string text = (this.NewThread() ?? this.AwakeThread()).ToString();
  2746. if (Operators.CompareString((this.NewThread()["type"] ?? "").ToString(), "fool", false) != 0 && Operators.CompareString(ModMinecraft.GetMcFoolName(this.Version._ConnectionMap), "", false) == 0)
  2747. {
  2748. if (this.Version._ConnectionMap.ContainsF("w", true) || this.Name.ContainsF("combat", true) || this.Version._ConnectionMap.ContainsF("rc", true) || this.Version._ConnectionMap.ContainsF("pre", true) || this.Version._ConnectionMap.ContainsF("experimental", true) || Operators.CompareString((this.NewThread()["type"] ?? "").ToString(), "snapshot", false) == 0 || Operators.CompareString((this.NewThread()["type"] ?? "").ToString(), "pending", false) == 0)
  2749. {
  2750. this._ConfigurationMap = ModMinecraft.McVersionState.Snapshot;
  2751. }
  2752. }
  2753. else
  2754. {
  2755. this._ConfigurationMap = ModMinecraft.McVersionState.Fool;
  2756. }
  2757. if (text.Contains("optifine"))
  2758. {
  2759. this._ConfigurationMap = ModMinecraft.McVersionState.OptiFine;
  2760. this.Version._StatusMap = true;
  2761. this.Version._RoleMap = (ModBase.RegexSeek(text, "(?<=HD_U_)[^\":/]+", 0) ?? "未知版本");
  2762. }
  2763. if (text.Contains("liteloader"))
  2764. {
  2765. this._ConfigurationMap = ModMinecraft.McVersionState.LiteLoader;
  2766. this.Version._AccountMap = true;
  2767. }
  2768. if (!text.Contains("net.fabricmc:fabric-loader") && !text.Contains("org.quiltmc:quilt-loader"))
  2769. {
  2770. if (text.Contains("minecraftforge") && !text.Contains("net.neoforge"))
  2771. {
  2772. this._ConfigurationMap = ModMinecraft.McVersionState.Forge;
  2773. this.Version.m_StructMap = true;
  2774. this.Version.printerMap = ModBase.RegexSeek(text, "(?<=forge:[0-9\\.]+(_pre[0-9]*)?\\-)[0-9\\.]+", 0);
  2775. if (this.Version.printerMap == null)
  2776. {
  2777. this.Version.printerMap = ModBase.RegexSeek(text, "(?<=net\\.minecraftforge:minecraftforge:)[0-9\\.]+", 0);
  2778. }
  2779. if (this.Version.printerMap == null)
  2780. {
  2781. this.Version.printerMap = (ModBase.RegexSeek(text, "(?<=net\\.minecraftforge:fmlloader:[0-9\\.]+-)[0-9\\.]+", 0) ?? "未知版本");
  2782. }
  2783. }
  2784. else if (text.Contains("net.neoforge"))
  2785. {
  2786. this._ConfigurationMap = ModMinecraft.McVersionState.NeoForge;
  2787. this.Version._ValMap = true;
  2788. this.Version.m_AttrMap = (ModBase.RegexSeek(text, "(?<=orgeVersion\",[^\"]*?\")[^\"]+(?=\",)", 0) ?? "未知版本");
  2789. }
  2790. }
  2791. else
  2792. {
  2793. this._ConfigurationMap = ModMinecraft.McVersionState.Fabric;
  2794. this.Version._CandidateMap = true;
  2795. this.Version._AdvisorMap = (ModBase.RegexSeek(text, "(?<=(net.fabricmc:fabric-loader:)|(org.quiltmc:quilt-loader:))[0-9\\.]+(\\+build.[0-9]+)?", 0) ?? "未知版本").Replace("+build", "");
  2796. }
  2797. this.Version.workerMap = true;
  2798. }
  2799. else
  2800. {
  2801. this._ConfigurationMap = ModMinecraft.McVersionState.Old;
  2802. }
  2803. }
  2804. else
  2805. {
  2806. this._ConfigurationMap = ModMinecraft.McVersionState.Error;
  2807. }
  2808. }
  2809. this.getterMap = ModBase.ReadIni(this.Path + "PCL\\Setup.ini", "Logo", "");
  2810. if (Operators.CompareString(this.getterMap, "", false) == 0 || !Conversions.ToBoolean(ModBase.ReadIni(this.Path + "PCL\\Setup.ini", "LogoCustom", Conversions.ToString(false))))
  2811. {
  2812. switch (this._ConfigurationMap)
  2813. {
  2814. case ModMinecraft.McVersionState.Original:
  2815. this.getterMap = ModBase.m_SerializerRepository + "Blocks/Grass.png";
  2816. break;
  2817. case ModMinecraft.McVersionState.Snapshot:
  2818. this.getterMap = ModBase.m_SerializerRepository + "Blocks/CommandBlock.png";
  2819. break;
  2820. case ModMinecraft.McVersionState.Fool:
  2821. this.getterMap = ModBase.m_SerializerRepository + "Blocks/GoldBlock.png";
  2822. break;
  2823. case ModMinecraft.McVersionState.OptiFine:
  2824. this.getterMap = ModBase.m_SerializerRepository + "Blocks/GrassPath.png";
  2825. break;
  2826. case ModMinecraft.McVersionState.Old:
  2827. this.getterMap = ModBase.m_SerializerRepository + "Blocks/CobbleStone.png";
  2828. break;
  2829. case ModMinecraft.McVersionState.Forge:
  2830. this.getterMap = ModBase.m_SerializerRepository + "Blocks/Anvil.png";
  2831. break;
  2832. case ModMinecraft.McVersionState.NeoForge:
  2833. this.getterMap = ModBase.m_SerializerRepository + "Blocks/NeoForge.png";
  2834. break;
  2835. case ModMinecraft.McVersionState.LiteLoader:
  2836. this.getterMap = ModBase.m_SerializerRepository + "Blocks/Egg.png";
  2837. break;
  2838. case ModMinecraft.McVersionState.Fabric:
  2839. this.getterMap = ModBase.m_SerializerRepository + "Blocks/Fabric.png";
  2840. break;
  2841. default:
  2842. this.getterMap = ModBase.m_SerializerRepository + "Blocks/RedstoneBlock.png";
  2843. break;
  2844. }
  2845. }
  2846. string text2 = ModBase.ReadIni(this.Path + "PCL\\Setup.ini", "CustomInfo", "");
  2847. if (Operators.CompareString(text2, "", false) == 0)
  2848. {
  2849. switch (this._ConfigurationMap)
  2850. {
  2851. case ModMinecraft.McVersionState.Error:
  2852. break;
  2853. case ModMinecraft.McVersionState.Original:
  2854. case ModMinecraft.McVersionState.OptiFine:
  2855. case ModMinecraft.McVersionState.Forge:
  2856. case ModMinecraft.McVersionState.NeoForge:
  2857. case ModMinecraft.McVersionState.LiteLoader:
  2858. case ModMinecraft.McVersionState.Fabric:
  2859. this._ConsumerMap = this.Version.ToString();
  2860. break;
  2861. case ModMinecraft.McVersionState.Snapshot:
  2862. if (this.Version._ConnectionMap.ContainsF("pre", true))
  2863. {
  2864. this._ConsumerMap = "预发布版 " + this.Version._ConnectionMap;
  2865. }
  2866. else if (this.Version._ConnectionMap.ContainsF("rc", true))
  2867. {
  2868. this._ConsumerMap = "发布候选 " + this.Version._ConnectionMap;
  2869. }
  2870. else if (!this.Version._ConnectionMap.Contains("experimental") && Operators.CompareString(this.Version._ConnectionMap, "pending", false) != 0)
  2871. {
  2872. this._ConsumerMap = "快照 " + this.Version._ConnectionMap;
  2873. }
  2874. else
  2875. {
  2876. this._ConsumerMap = "实验性快照";
  2877. }
  2878. break;
  2879. case ModMinecraft.McVersionState.Fool:
  2880. this._ConsumerMap = ModMinecraft.GetMcFoolName(this.Version._ConnectionMap);
  2881. break;
  2882. case ModMinecraft.McVersionState.Old:
  2883. this._ConsumerMap = "远古版本";
  2884. break;
  2885. default:
  2886. this._ConsumerMap = "发生了未知错误,请向作者反馈此问题";
  2887. break;
  2888. }
  2889. if (this._ConfigurationMap != ModMinecraft.McVersionState.Error)
  2890. {
  2891. if (this.PrepareThread())
  2892. {
  2893. ref string ptr = ref this._ConsumerMap;
  2894. this._ConsumerMap = ptr + ", JumpLoader";
  2895. }
  2896. if (Operators.ConditionalCompareObjectEqual(ModBase.m_IdentifierRepository.Get("VersionServerLogin", this), 3, false))
  2897. {
  2898. ref string ptr = ref this._ConsumerMap;
  2899. this._ConsumerMap = ptr + ", 统一通行证验证";
  2900. }
  2901. if (Operators.ConditionalCompareObjectEqual(ModBase.m_IdentifierRepository.Get("VersionServerLogin", this), 4, false))
  2902. {
  2903. ref string ptr = ref this._ConsumerMap;
  2904. this._ConsumerMap = ptr + ", Authlib 验证";
  2905. }
  2906. }
  2907. }
  2908. else
  2909. {
  2910. this._ConsumerMap = text2;
  2911. }
  2912. this._TokenMap = Conversions.ToBoolean(ModBase.ReadIni(this.Path + "PCL\\Setup.ini", "IsStar", Conversions.ToString(false)));
  2913. this.expressionMap = (ModMinecraft.McVersionCardType)Conversions.ToInteger(ModBase.ReadIni(this.Path + "PCL\\Setup.ini", "DisplayType", Conversions.ToString(0)));
  2914. if (Directory.Exists(this.Path))
  2915. {
  2916. ModBase.WriteIni(this.Path + "PCL\\Setup.ini", "State", Conversions.ToString((int)this._ConfigurationMap));
  2917. ModBase.WriteIni(this.Path + "PCL\\Setup.ini", "Info", this._ConsumerMap);
  2918. ModBase.WriteIni(this.Path + "PCL\\Setup.ini", "Logo", this.getterMap);
  2919. }
  2920. if (this._ConfigurationMap != ModMinecraft.McVersionState.Error)
  2921. {
  2922. ModBase.WriteIni(this.Path + "PCL\\Setup.ini", "ReleaseTime", this._RegistryMap.ToString("yyyy'-'MM'-'dd HH':'mm"));
  2923. ModBase.WriteIni(this.Path + "PCL\\Setup.ini", "VersionFabric", this.Version._AdvisorMap);
  2924. ModBase.WriteIni(this.Path + "PCL\\Setup.ini", "VersionOptiFine", this.Version._RoleMap);
  2925. ModBase.WriteIni(this.Path + "PCL\\Setup.ini", "VersionLiteLoader", Conversions.ToString(this.Version._AccountMap));
  2926. ModBase.WriteIni(this.Path + "PCL\\Setup.ini", "VersionForge", this.Version.printerMap);
  2927. ModBase.WriteIni(this.Path + "PCL\\Setup.ini", "VersionNeoForge", this.Version.m_AttrMap);
  2928. ModBase.WriteIni(this.Path + "PCL\\Setup.ini", "VersionApiCode", Conversions.ToString(this.Version.ReadThread()));
  2929. ModBase.WriteIni(this.Path + "PCL\\Setup.ini", "VersionOriginal", this.Version._ConnectionMap);
  2930. ModBase.WriteIni(this.Path + "PCL\\Setup.ini", "VersionOriginalMain", Conversions.ToString(this.Version._ServerMap));
  2931. ModBase.WriteIni(this.Path + "PCL\\Setup.ini", "VersionOriginalSub", Conversions.ToString(this.Version.m_ResolverMap));
  2932. }
  2933. }
  2934. catch (Exception ex)
  2935. {
  2936. this._ConsumerMap = "未知错误:" + ModBase.GetExceptionSummary(ex);
  2937. this.getterMap = ModBase.m_SerializerRepository + "Blocks/RedstoneBlock.png";
  2938. this._ConfigurationMap = ModMinecraft.McVersionState.Error;
  2939. ModBase.Log(ex, "加载版本失败(" + this.Name + ")", ModBase.LogLevel.Feedback, "出现错误");
  2940. }
  2941. finally
  2942. {
  2943. this.importerMap = true;
  2944. }
  2945. return this;
  2946. }
  2947. // Token: 0x06000E8C RID: 3724 RVA: 0x0006E0A0 File Offset: 0x0006C2A0
  2948. public override bool Equals(object obj)
  2949. {
  2950. ModMinecraft.McVersion mcVersion = obj as ModMinecraft.McVersion;
  2951. return mcVersion != null && Operators.CompareString(this.Path, mcVersion.Path, false) == 0;
  2952. }
  2953. // Token: 0x06000E8D RID: 3725 RVA: 0x0006E0D0 File Offset: 0x0006C2D0
  2954. public static bool operator ==(ModMinecraft.McVersion a, ModMinecraft.McVersion b)
  2955. {
  2956. return (a == null && b == null) || (a != null && b != null && Operators.CompareString(a.Path, b.Path, false) == 0);
  2957. }
  2958. // Token: 0x06000E8E RID: 3726 RVA: 0x00009032 File Offset: 0x00007232
  2959. public static bool operator !=(ModMinecraft.McVersion a, ModMinecraft.McVersion b)
  2960. {
  2961. return !(a == b);
  2962. }
  2963. // Token: 0x040007C2 RID: 1986
  2964. [CompilerGenerated]
  2965. private string _MethodMap;
  2966. // Token: 0x040007C3 RID: 1987
  2967. private string taskMap;
  2968. // Token: 0x040007C4 RID: 1988
  2969. public string _ConsumerMap;
  2970. // Token: 0x040007C5 RID: 1989
  2971. public ModMinecraft.McVersionState _ConfigurationMap;
  2972. // Token: 0x040007C6 RID: 1990
  2973. public string getterMap;
  2974. // Token: 0x040007C7 RID: 1991
  2975. public bool _TokenMap;
  2976. // Token: 0x040007C8 RID: 1992
  2977. public ModMinecraft.McVersionCardType expressionMap;
  2978. // Token: 0x040007C9 RID: 1993
  2979. private ModMinecraft.McVersionInfo m_WriterMap;
  2980. // Token: 0x040007CA RID: 1994
  2981. public DateTime _RegistryMap;
  2982. // Token: 0x040007CB RID: 1995
  2983. private string m_RuleMap;
  2984. // Token: 0x040007CC RID: 1996
  2985. private JObject proccesorMap;
  2986. // Token: 0x040007CD RID: 1997
  2987. [CompilerGenerated]
  2988. private bool m_SetterMap;
  2989. // Token: 0x040007CE RID: 1998
  2990. [CompilerGenerated]
  2991. private bool _FactoryMap;
  2992. // Token: 0x040007CF RID: 1999
  2993. private string m_ExporterMap;
  2994. // Token: 0x040007D0 RID: 2000
  2995. public bool importerMap;
  2996. }
  2997. // Token: 0x02000173 RID: 371
  2998. public enum McVersionState
  2999. {
  3000. // Token: 0x040007D5 RID: 2005
  3001. Error,
  3002. // Token: 0x040007D6 RID: 2006
  3003. Original,
  3004. // Token: 0x040007D7 RID: 2007
  3005. Snapshot,
  3006. // Token: 0x040007D8 RID: 2008
  3007. Fool,
  3008. // Token: 0x040007D9 RID: 2009
  3009. OptiFine,
  3010. // Token: 0x040007DA RID: 2010
  3011. Old,
  3012. // Token: 0x040007DB RID: 2011
  3013. Forge,
  3014. // Token: 0x040007DC RID: 2012
  3015. NeoForge,
  3016. // Token: 0x040007DD RID: 2013
  3017. LiteLoader,
  3018. // Token: 0x040007DE RID: 2014
  3019. Fabric
  3020. }
  3021. // Token: 0x02000174 RID: 372
  3022. public class McVersionInfo
  3023. {
  3024. // Token: 0x06000E94 RID: 3732 RVA: 0x0006E190 File Offset: 0x0006C390
  3025. public McVersionInfo()
  3026. {
  3027. this.workerMap = false;
  3028. this._ServerMap = -1;
  3029. this.m_ResolverMap = -1;
  3030. this._StatusMap = false;
  3031. this._RoleMap = "";
  3032. this.m_StructMap = false;
  3033. this.printerMap = "";
  3034. this._ValMap = false;
  3035. this.m_AttrMap = "";
  3036. this._CandidateMap = false;
  3037. this._AdvisorMap = "";
  3038. this._AccountMap = false;
  3039. this.queueMap = -2;
  3040. }
  3041. // Token: 0x06000E95 RID: 3733 RVA: 0x0006E210 File Offset: 0x0006C410
  3042. public override string ToString()
  3043. {
  3044. string text = "";
  3045. if (this.m_StructMap)
  3046. {
  3047. text = text + ", Forge" + ((Operators.CompareString(this.printerMap, "未知版本", false) == 0) ? "" : (" " + this.printerMap));
  3048. }
  3049. if (this._ValMap)
  3050. {
  3051. text = text + ", NeoForge" + ((Operators.CompareString(this.m_AttrMap, "未知版本", false) == 0) ? "" : (" " + this.m_AttrMap));
  3052. }
  3053. if (this._CandidateMap)
  3054. {
  3055. text = text + ", Fabric" + ((Operators.CompareString(this._AdvisorMap, "未知版本", false) == 0) ? "" : (" " + this._AdvisorMap));
  3056. }
  3057. if (this._StatusMap)
  3058. {
  3059. text = text + ", OptiFine" + ((Operators.CompareString(this._RoleMap, "未知版本", false) == 0) ? "" : (" " + this._RoleMap));
  3060. }
  3061. if (this._AccountMap)
  3062. {
  3063. text += ", LiteLoader";
  3064. }
  3065. if (Operators.CompareString(text, "", false) == 0)
  3066. {
  3067. text = "原版 " + this._ConnectionMap;
  3068. }
  3069. else
  3070. {
  3071. text = this._ConnectionMap + text + (ModBase._TokenRepository ? (" (" + Conversions.ToString(this.ReadThread()) + "#)") : "");
  3072. }
  3073. return text;
  3074. }
  3075. // Token: 0x06000E96 RID: 3734 RVA: 0x0006E388 File Offset: 0x0006C588
  3076. public int ReadThread()
  3077. {
  3078. checked
  3079. {
  3080. if (this.queueMap == -2)
  3081. {
  3082. try
  3083. {
  3084. if (this._CandidateMap)
  3085. {
  3086. if (Operators.CompareString(this._AdvisorMap, "未知版本", false) == 0)
  3087. {
  3088. return 0;
  3089. }
  3090. string[] array = this._AdvisorMap.Split(".");
  3091. if (array.Length < 3)
  3092. {
  3093. throw new Exception("无效的 Fabric 版本:" + this.printerMap);
  3094. }
  3095. this.queueMap = (int)Math.Round(unchecked(ModBase.Val(array[0]) * 10000.0 + ModBase.Val(array[1]) * 100.0 + ModBase.Val(array[2])));
  3096. }
  3097. else if (!this.m_StructMap && !this._ValMap)
  3098. {
  3099. if (this._StatusMap)
  3100. {
  3101. if (Operators.CompareString(this._RoleMap, "未知版本", false) == 0)
  3102. {
  3103. return 0;
  3104. }
  3105. this.queueMap = (int)Math.Round(unchecked((double)(checked(((this.m_ResolverMap >= 0) ? this.m_ResolverMap : 0) * 1000000 + (Strings.Asc(Conversions.ToChar(Strings.Left(this._RoleMap.ToUpper(), 1))) - 65 + 1) * 10000)) + ModBase.Val(ModBase.RegexSeek(Strings.Right(this._RoleMap, checked(this._RoleMap.Length - 1)), "[0-9]+", 0)) * 100.0));
  3106. if (this._RoleMap.ContainsF("pre", true))
  3107. {
  3108. ref int ptr = ref this.queueMap;
  3109. this.queueMap = ptr + 50;
  3110. }
  3111. if (!this._RoleMap.ContainsF("pre", true) && !this._RoleMap.ContainsF("beta", true))
  3112. {
  3113. ref int ptr = ref this.queueMap;
  3114. this.queueMap = ptr + 99;
  3115. }
  3116. else if (ModBase.Val(Strings.Right(this._RoleMap, 1)) == 0.0 && Operators.CompareString(Strings.Right(this._RoleMap, 1), "0", false) != 0)
  3117. {
  3118. ref int ptr = ref this.queueMap;
  3119. this.queueMap = ptr + 1;
  3120. }
  3121. else
  3122. {
  3123. ref int ptr = ref this.queueMap;
  3124. this.queueMap = (int)Math.Round(unchecked((double)ptr + ModBase.Val(ModBase.RegexSeek(this._RoleMap.ToLower(), "(?<=((pre)|(beta)))[0-9]+", 0))));
  3125. }
  3126. }
  3127. else
  3128. {
  3129. this.queueMap = -1;
  3130. }
  3131. }
  3132. else
  3133. {
  3134. if (Operators.CompareString(this.printerMap, "未知版本", false) == 0 && Operators.CompareString(this.m_AttrMap, "未知版本", false) == 0)
  3135. {
  3136. return 0;
  3137. }
  3138. string[] array2 = this.m_StructMap ? this.printerMap.Split(".") : this.m_AttrMap.Split(".");
  3139. if (array2.Length == 4)
  3140. {
  3141. this.queueMap = (int)Math.Round(unchecked(ModBase.Val(array2[0]) * 1000000.0 + ModBase.Val(array2[1]) * 10000.0 + ModBase.Val(array2[3])));
  3142. }
  3143. else
  3144. {
  3145. if (array2.Length != 3)
  3146. {
  3147. throw new Exception("无效的 Neo/Forge 版本:" + this.printerMap);
  3148. }
  3149. this.queueMap = (int)Math.Round(unchecked(ModBase.Val(array2[0]) * 1000000.0 + ModBase.Val(array2[1]) * 10000.0 + ModBase.Val(array2[2])));
  3150. }
  3151. }
  3152. }
  3153. catch (Exception ex)
  3154. {
  3155. this.queueMap = -1;
  3156. ModBase.Log(ex, "获取 API 版本信息失败:" + this.ToString(), ModBase.LogLevel.Debug, "出现错误");
  3157. }
  3158. }
  3159. return this.queueMap;
  3160. }
  3161. }
  3162. // Token: 0x06000E97 RID: 3735 RVA: 0x0000904D File Offset: 0x0000724D
  3163. public void LogoutThread(int value)
  3164. {
  3165. this.queueMap = value;
  3166. }
  3167. // Token: 0x040007DF RID: 2015
  3168. public bool workerMap;
  3169. // Token: 0x040007E0 RID: 2016
  3170. public string _ConnectionMap;
  3171. // Token: 0x040007E1 RID: 2017
  3172. public int _ServerMap;
  3173. // Token: 0x040007E2 RID: 2018
  3174. public int m_ResolverMap;
  3175. // Token: 0x040007E3 RID: 2019
  3176. public bool _StatusMap;
  3177. // Token: 0x040007E4 RID: 2020
  3178. public string _RoleMap;
  3179. // Token: 0x040007E5 RID: 2021
  3180. public bool m_StructMap;
  3181. // Token: 0x040007E6 RID: 2022
  3182. public string printerMap;
  3183. // Token: 0x040007E7 RID: 2023
  3184. public bool _ValMap;
  3185. // Token: 0x040007E8 RID: 2024
  3186. public string m_AttrMap;
  3187. // Token: 0x040007E9 RID: 2025
  3188. public bool _CandidateMap;
  3189. // Token: 0x040007EA RID: 2026
  3190. public string _AdvisorMap;
  3191. // Token: 0x040007EB RID: 2027
  3192. public bool _AccountMap;
  3193. // Token: 0x040007EC RID: 2028
  3194. private int queueMap;
  3195. }
  3196. // Token: 0x02000175 RID: 373
  3197. public enum McVersionCardType
  3198. {
  3199. // Token: 0x040007EE RID: 2030
  3200. Star = -1,
  3201. // Token: 0x040007EF RID: 2031
  3202. Auto,
  3203. // Token: 0x040007F0 RID: 2032
  3204. Hidden,
  3205. // Token: 0x040007F1 RID: 2033
  3206. API,
  3207. // Token: 0x040007F2 RID: 2034
  3208. OriginalLike,
  3209. // Token: 0x040007F3 RID: 2035
  3210. Rubbish,
  3211. // Token: 0x040007F4 RID: 2036
  3212. Fool,
  3213. // Token: 0x040007F5 RID: 2037
  3214. Error
  3215. }
  3216. // Token: 0x02000176 RID: 374
  3217. public struct McSkinInfo
  3218. {
  3219. // Token: 0x040007F6 RID: 2038
  3220. public bool eventMap;
  3221. // Token: 0x040007F7 RID: 2039
  3222. public string managerMap;
  3223. // Token: 0x040007F8 RID: 2040
  3224. public bool _ModelMap;
  3225. }
  3226. // Token: 0x02000177 RID: 375
  3227. public class McLibToken
  3228. {
  3229. // Token: 0x06000E99 RID: 3737 RVA: 0x00009056 File Offset: 0x00007256
  3230. public McLibToken()
  3231. {
  3232. this.m_BaseMap = 0L;
  3233. this.attributeMap = false;
  3234. this.codeMap = null;
  3235. this.m_InfoMap = false;
  3236. }
  3237. // Token: 0x06000E9A RID: 3738 RVA: 0x00009083 File Offset: 0x00007283
  3238. public string ReflectThread()
  3239. {
  3240. return this._PrototypeMap;
  3241. }
  3242. // Token: 0x06000E9B RID: 3739 RVA: 0x0000908B File Offset: 0x0000728B
  3243. public void ForgotThread(string value)
  3244. {
  3245. this._PrototypeMap = (string.IsNullOrWhiteSpace(value) ? null : value);
  3246. }
  3247. // Token: 0x1700021C RID: 540
  3248. // (get) Token: 0x06000E9C RID: 3740 RVA: 0x0006E718 File Offset: 0x0006C918
  3249. public string Name
  3250. {
  3251. get
  3252. {
  3253. string result;
  3254. if (this._AnnotationMap == null)
  3255. {
  3256. result = null;
  3257. }
  3258. else
  3259. {
  3260. List<string> list = new List<string>(this._AnnotationMap.Split(":"));
  3261. list.RemoveAt(2);
  3262. result = list.Join(":");
  3263. }
  3264. return result;
  3265. }
  3266. }
  3267. // Token: 0x06000E9D RID: 3741 RVA: 0x0000909F File Offset: 0x0000729F
  3268. public override string ToString()
  3269. {
  3270. return (this.attributeMap ? "[Native] " : "") + ModBase.GetString(this.m_BaseMap) + " | " + this._WrapperMap;
  3271. }
  3272. // Token: 0x040007F9 RID: 2041
  3273. public string _WrapperMap;
  3274. // Token: 0x040007FA RID: 2042
  3275. public long m_BaseMap;
  3276. // Token: 0x040007FB RID: 2043
  3277. public bool attributeMap;
  3278. // Token: 0x040007FC RID: 2044
  3279. public string codeMap;
  3280. // Token: 0x040007FD RID: 2045
  3281. private string _PrototypeMap;
  3282. // Token: 0x040007FE RID: 2046
  3283. public string _AnnotationMap;
  3284. // Token: 0x040007FF RID: 2047
  3285. public bool m_InfoMap;
  3286. }
  3287. // Token: 0x02000178 RID: 376
  3288. private struct McAssetsToken
  3289. {
  3290. // Token: 0x06000E9F RID: 3743 RVA: 0x000090D0 File Offset: 0x000072D0
  3291. public override string ToString()
  3292. {
  3293. return ModBase.GetString(this.listMap) + " | " + this.m_AdapterMap;
  3294. }
  3295. // Token: 0x04000800 RID: 2048
  3296. public string m_AdapterMap;
  3297. // Token: 0x04000801 RID: 2049
  3298. public string _FacadeMap;
  3299. // Token: 0x04000802 RID: 2050
  3300. public long listMap;
  3301. // Token: 0x04000803 RID: 2051
  3302. public string merchantMap;
  3303. }
  3304. // Token: 0x02000179 RID: 377
  3305. public class VersionComparer : IComparer<string>
  3306. {
  3307. // Token: 0x06000EA2 RID: 3746 RVA: 0x000090ED File Offset: 0x000072ED
  3308. public int Compare(string x, string y)
  3309. {
  3310. return ModMinecraft.VersionSortInteger(x, y);
  3311. }
  3312. }
  3313. }
  3314. }