ModComp.cs 103 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Runtime.CompilerServices;
  6. using System.Text;
  7. using System.Threading;
  8. using System.Windows;
  9. using System.Windows.Controls;
  10. using System.Windows.Controls.Primitives;
  11. using Microsoft.VisualBasic.CompilerServices;
  12. using Newtonsoft.Json.Linq;
  13. namespace PCL
  14. {
  15. // Token: 0x02000054 RID: 84
  16. [StandardModule]
  17. public sealed class ModComp
  18. {
  19. // Token: 0x060001E6 RID: 486 RVA: 0x00015074 File Offset: 0x00013274
  20. private static List<ModComp.CompDatabaseEntry> RestartBroadcaster()
  21. {
  22. checked
  23. {
  24. List<ModComp.CompDatabaseEntry> predicate;
  25. if (ModComp.m_Predicate != null)
  26. {
  27. predicate = ModComp.m_Predicate;
  28. }
  29. else
  30. {
  31. ModComp.m_Predicate = new List<ModComp.CompDatabaseEntry>();
  32. int num = 0;
  33. foreach (string text in ModBase.DecodeBytes(ModBase.GetResources("ModData")).Replace("\r\n", "\n").Replace("\r", "").Split("\n"))
  34. {
  35. num++;
  36. if (Operators.CompareString(text, "", false) != 0)
  37. {
  38. foreach (string fullStr in text.Split("¨"))
  39. {
  40. ModComp.CompDatabaseEntry compDatabaseEntry = new ModComp.CompDatabaseEntry();
  41. string[] array3 = fullStr.Split("|");
  42. if (array3[0].StartsWithF("@", false))
  43. {
  44. compDatabaseEntry.adapterRepository = null;
  45. compDatabaseEntry.m_FacadeRepository = array3[0].Replace("@", "");
  46. }
  47. else if (array3[0].EndsWithF("@", false))
  48. {
  49. compDatabaseEntry.adapterRepository = array3[0].TrimEnd(new char[]
  50. {
  51. '@'
  52. });
  53. compDatabaseEntry.m_FacadeRepository = compDatabaseEntry.adapterRepository;
  54. }
  55. else if (array3[0].Contains("@"))
  56. {
  57. compDatabaseEntry.adapterRepository = array3[0].Split("@")[0];
  58. compDatabaseEntry.m_FacadeRepository = array3[0].Split("@")[1];
  59. }
  60. else
  61. {
  62. compDatabaseEntry.adapterRepository = array3[0];
  63. compDatabaseEntry.m_FacadeRepository = null;
  64. }
  65. compDatabaseEntry.annotationRepository = num;
  66. if (Enumerable.Count<string>(array3) >= 2)
  67. {
  68. compDatabaseEntry.infoRepository = array3[1];
  69. if (compDatabaseEntry.infoRepository.Contains("*"))
  70. {
  71. compDatabaseEntry.infoRepository = compDatabaseEntry.infoRepository.Replace("*", " (" + string.Join(" ", Enumerable.Select<string, string>((compDatabaseEntry.adapterRepository ?? compDatabaseEntry.m_FacadeRepository).Split("-"), (ModComp._Closure$__.$I6-0 == null) ? (ModComp._Closure$__.$I6-0 = ((string w) => w.Substring(0, 1).ToUpper() + w.Substring(1, w.Length - 1))) : ModComp._Closure$__.$I6-0)) + ")");
  72. }
  73. }
  74. ModComp.m_Predicate.Add(compDatabaseEntry);
  75. }
  76. }
  77. }
  78. predicate = ModComp.m_Predicate;
  79. }
  80. return predicate;
  81. }
  82. }
  83. // Token: 0x060001E7 RID: 487 RVA: 0x000152C8 File Offset: 0x000134C8
  84. public static void CompProjectsGet(ModLoader.LoaderTask<ModComp.CompProjectRequest, int> Task)
  85. {
  86. ModComp._Closure$__13-1 CS$<>8__locals1 = new ModComp._Closure$__13-1(CS$<>8__locals1);
  87. CS$<>8__locals1.$VB$Local_Task = Task;
  88. CS$<>8__locals1.$VB$Local_Storage = CS$<>8__locals1.$VB$Local_Task.Input.m_ParamsRepository;
  89. if (CS$<>8__locals1.$VB$Local_Task.Input.m_ParamsRepository._CreatorRepository.Count >= CS$<>8__locals1.$VB$Local_Task.Input.m_DispatcherRepository)
  90. {
  91. ModBase.Log(string.Format("[Comp] 已有 {0} 个结果,多于所需的 {1} 个结果,结束处理", CS$<>8__locals1.$VB$Local_Task.Input.m_ParamsRepository._CreatorRepository.Count, CS$<>8__locals1.$VB$Local_Task.Input.m_DispatcherRepository), ModBase.LogLevel.Normal, "出现错误");
  92. return;
  93. }
  94. if (!CS$<>8__locals1.$VB$Local_Task.Input.EnableTests())
  95. {
  96. if (!Enumerable.Any<ModComp.CompProject>(CS$<>8__locals1.$VB$Local_Task.Input.m_ParamsRepository._CreatorRepository))
  97. {
  98. throw new Exception("没有符合条件的结果");
  99. }
  100. ModBase.Log(string.Format("[Comp] 已有 {0} 个结果,少于所需的 {1} 个结果,但无法继续获取,结束处理", CS$<>8__locals1.$VB$Local_Task.Input.m_ParamsRepository._CreatorRepository.Count, CS$<>8__locals1.$VB$Local_Task.Input.m_DispatcherRepository), ModBase.LogLevel.Normal, "出现错误");
  101. return;
  102. }
  103. else
  104. {
  105. if (CS$<>8__locals1.$VB$Local_Task.Input.processRepository == ModComp.CompModLoaderType.Quilt && ModMinecraft.VersionSortInteger(CS$<>8__locals1.$VB$Local_Task.Input.m_ParameterRepository ?? "1.15", "1.14") == -1)
  106. {
  107. throw new Exception("Quilt 不支持 Minecraft " + CS$<>8__locals1.$VB$Local_Task.Input.m_ParameterRepository);
  108. }
  109. string text = (CS$<>8__locals1.$VB$Local_Task.Input._RecordRepository ?? "").Trim();
  110. CS$<>8__locals1.$VB$Local_Task.Input._RecordRepository = text;
  111. text = text.ToLower();
  112. ModBase.Log("[Comp] 工程列表搜索原始文本:" + text, ModBase.LogLevel.Normal, "出现错误");
  113. bool flag;
  114. Dictionary<ModComp.CompProject, double> dictionary;
  115. List<ModBase.SearchEntry<ModComp.CompProject>> list4;
  116. checked
  117. {
  118. if ((flag = (ModBase.RegexCheck(text, "[\\u4e00-\\u9fbb]", 0) && !string.IsNullOrEmpty(text))) && CS$<>8__locals1.$VB$Local_Task.Input.Type == ModComp.CompType.Mod)
  119. {
  120. List<ModBase.SearchEntry<ModComp.CompDatabaseEntry>> list = new List<ModBase.SearchEntry<ModComp.CompDatabaseEntry>>();
  121. try
  122. {
  123. foreach (ModComp.CompDatabaseEntry compDatabaseEntry in ModComp.RestartBroadcaster())
  124. {
  125. if (!compDatabaseEntry.infoRepository.Contains("动态的树"))
  126. {
  127. list.Add(new ModBase.SearchEntry<ModComp.CompDatabaseEntry>
  128. {
  129. m_DicError = compDatabaseEntry,
  130. helperError = new List<KeyValuePair<string, double>>
  131. {
  132. new KeyValuePair<string, double>(compDatabaseEntry.infoRepository + compDatabaseEntry.adapterRepository + compDatabaseEntry.m_FacadeRepository, 1.0)
  133. }
  134. });
  135. }
  136. }
  137. }
  138. finally
  139. {
  140. List<ModComp.CompDatabaseEntry>.Enumerator enumerator;
  141. ((IDisposable)enumerator).Dispose();
  142. }
  143. List<ModBase.SearchEntry<ModComp.CompDatabaseEntry>> list2 = ModBase.Search<ModComp.CompDatabaseEntry>(list, CS$<>8__locals1.$VB$Local_Task.Input._RecordRepository, 3, 0.1);
  144. if (!Enumerable.Any<ModBase.SearchEntry<ModComp.CompDatabaseEntry>>(list2))
  145. {
  146. throw new Exception("无搜索结果,请尝试搜索英文名称");
  147. }
  148. string text2 = "";
  149. int num = Math.Min(4, list2.Count - 1);
  150. int num2 = 0;
  151. while (num2 <= num && (list2[num2].indexerError || num2 < Math.Min(2, list2.Count - 1)))
  152. {
  153. if (list2[num2].m_DicError.adapterRepository != null)
  154. {
  155. text2 = text2 + list2[num2].m_DicError.adapterRepository.Replace("-", " ").Replace("/", " ") + " ";
  156. }
  157. if (list2[num2].m_DicError.m_FacadeRepository != null)
  158. {
  159. text2 = text2 + list2[num2].m_DicError.m_FacadeRepository.Replace("-", " ").Replace("/", " ") + " ";
  160. }
  161. text2 = text2 + list2[num2].m_DicError.infoRepository.AfterLast(" (", false).TrimEnd(new char[]
  162. {
  163. ')'
  164. }).BeforeFirst(" - ", false).Replace(":", "").Replace("(", "").Replace(")", "").ToLower().Replace("/", " ") + " ";
  165. num2++;
  166. }
  167. ModBase.Log("[Comp] 中文搜索原始关键词:" + text2, ModBase.LogLevel.Developer, "出现错误");
  168. string text3 = "";
  169. foreach (string text4 in text2.Split(" "))
  170. {
  171. if (!Enumerable.Contains<string>(new string[]
  172. {
  173. "the",
  174. "of",
  175. "a",
  176. "mod",
  177. "and"
  178. }, text4.ToLowerInvariant()) && ModBase.Val(text4) <= 0.0 && (Enumerable.Count<string>(text2.Split(" ")) <= 3 || !Enumerable.Contains<string>(new string[]
  179. {
  180. "ftb"
  181. }, text4.ToLower())))
  182. {
  183. text3 = text3 + text4.TrimStart(new char[]
  184. {
  185. '{'
  186. }).TrimEnd(new char[]
  187. {
  188. '}'
  189. }) + " ";
  190. }
  191. }
  192. CS$<>8__locals1.$VB$Local_Task.Input._RecordRepository = text3;
  193. ModBase.Log("[Comp] 中文搜索最终关键词:" + text3, ModBase.LogLevel.Developer, "出现错误");
  194. }
  195. string str = ModBase.RegexReplace(CS$<>8__locals1.$VB$Local_Task.Input._RecordRepository, "$& ", "([A-Z]+|[a-z]+?)(?=[A-Z]+[a-z]+[a-z ]*)", 0);
  196. string str2 = CS$<>8__locals1.$VB$Local_Task.Input._RecordRepository.Replace(" ", "");
  197. string fullStr = (str + " " + (flag ? CS$<>8__locals1.$VB$Local_Task.Input._RecordRepository : (str2 + " " + text))).ToLower();
  198. List<string> list3 = new List<string>();
  199. foreach (string text5 in fullStr.Split(" "))
  200. {
  201. text5 = text5.Trim(new char[]
  202. {
  203. '[',
  204. ']'
  205. });
  206. if (Operators.CompareString(text5, "", false) != 0)
  207. {
  208. if (Enumerable.Contains<string>(new string[]
  209. {
  210. "forge",
  211. "fabric",
  212. "for",
  213. "mod",
  214. "quilt"
  215. }, text5))
  216. {
  217. ModBase.Log("[Comp] 已跳过搜索关键词:" + text5, ModBase.LogLevel.Developer, "出现错误");
  218. }
  219. else
  220. {
  221. list3.Add(text5);
  222. }
  223. }
  224. }
  225. if (text.Length > 0 && !Enumerable.Any<string>(list3))
  226. {
  227. CS$<>8__locals1.$VB$Local_Task.Input._RecordRepository = text;
  228. }
  229. else
  230. {
  231. CS$<>8__locals1.$VB$Local_Task.Input._RecordRepository = Enumerable.ToList<string>(Enumerable.Distinct<string>(list3)).Join(" ").ToLower();
  232. }
  233. if (text.Replace(" ", "").ContainsF("optiforge", true))
  234. {
  235. CS$<>8__locals1.$VB$Local_Task.Input._RecordRepository = "optiforge";
  236. }
  237. if (text.Replace(" ", "").ContainsF("optifabric", true))
  238. {
  239. CS$<>8__locals1.$VB$Local_Task.Input._RecordRepository = "optifabric";
  240. }
  241. ModBase.Log("[Comp] 工程列表搜索最终文本:" + CS$<>8__locals1.$VB$Local_Task.Input._RecordRepository, ModBase.LogLevel.Debug, "出现错误");
  242. CS$<>8__locals1.$VB$Local_Task.Progress = 0.1;
  243. CS$<>8__locals1.$VB$Local_RealResults = new List<ModComp.CompProject>();
  244. for (;;)
  245. {
  246. CS$<>8__locals1.$VB$Local_RawResults = new List<ModComp.CompProject>();
  247. CS$<>8__locals1.$VB$Local_Error = null;
  248. Thread thread = null;
  249. Thread thread2 = null;
  250. CS$<>8__locals1.$VB$Local_ResultsLock = RuntimeHelpers.GetObjectValue(new object());
  251. try
  252. {
  253. ModComp._Closure$__13-0 CS$<>8__locals2 = new ModComp._Closure$__13-0(CS$<>8__locals2);
  254. CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2 = CS$<>8__locals1;
  255. CS$<>8__locals2.$VB$Local_CurseForgeUrl = CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Task.Input.GetCurseForgeAddress();
  256. CS$<>8__locals2.$VB$Local_CurseForgeFailed = false;
  257. if (CS$<>8__locals2.$VB$Local_CurseForgeUrl != null)
  258. {
  259. thread = ModBase.RunInNewThread(delegate
  260. {
  261. try
  262. {
  263. ModBase.Log("[Comp] 开始从 CurseForge 获取工程列表:" + CS$<>8__locals2.$VB$Local_CurseForgeUrl, ModBase.LogLevel.Normal, "出现错误");
  264. JObject jobject = (JObject)ModDownload.DlModRequest(CS$<>8__locals2.$VB$Local_CurseForgeUrl, true);
  265. ModLoader.LoaderTask<ModComp.CompProjectRequest, int> $VB$Local_Task;
  266. ($VB$Local_Task = CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Task).Progress = unchecked($VB$Local_Task.Progress + 0.2);
  267. List<ModComp.CompProject> list6 = new List<ModComp.CompProject>();
  268. try
  269. {
  270. foreach (JToken jtoken in jobject["data"])
  271. {
  272. JObject data = (JObject)jtoken;
  273. list6.Add(new ModComp.CompProject(data));
  274. }
  275. }
  276. finally
  277. {
  278. IEnumerator<JToken> enumerator5;
  279. if (enumerator5 != null)
  280. {
  281. enumerator5.Dispose();
  282. }
  283. }
  284. object $VB$Local_ResultsLock = CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_ResultsLock;
  285. ObjectFlowControl.CheckForSyncLockOnValueType($VB$Local_ResultsLock);
  286. lock ($VB$Local_ResultsLock)
  287. {
  288. CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_RawResults.AddRange(list6);
  289. }
  290. ModComp.CompProjectStorage $VB$Local_Storage = CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Storage;
  291. ref int ptr = ref $VB$Local_Storage.m_ServiceRepository;
  292. $VB$Local_Storage.m_ServiceRepository = ptr + list6.Count;
  293. CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Storage.m_InvocationRepository = jobject["pagination"]["totalCount"].ToObject<int>();
  294. ModBase.Log(string.Format("[Comp] 从 CurseForge 获取到了 {0} 个工程(已获取 {1} 个,共 {2} 个)", list6.Count, CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Storage.m_ServiceRepository, CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Storage.m_InvocationRepository), ModBase.LogLevel.Normal, "出现错误");
  295. }
  296. catch (Exception ex)
  297. {
  298. ModBase.Log(ex, "从 CurseForge 获取工程列表失败", ModBase.LogLevel.Debug, "出现错误");
  299. CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Storage.m_InvocationRepository = -1;
  300. CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Error = ex;
  301. CS$<>8__locals2.$VB$Local_CurseForgeFailed = true;
  302. }
  303. }, "CurseForge Project Request", ThreadPriority.Normal);
  304. }
  305. CS$<>8__locals2.$VB$Local_ModrinthUrl = CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Task.Input.GetModrinthAddress();
  306. CS$<>8__locals2.$VB$Local_ModrinthFailed = false;
  307. if (CS$<>8__locals2.$VB$Local_ModrinthUrl != null)
  308. {
  309. thread2 = ModBase.RunInNewThread(delegate
  310. {
  311. try
  312. {
  313. ModBase.Log("[Comp] 开始从 Modrinth 获取工程列表:" + CS$<>8__locals2.$VB$Local_ModrinthUrl, ModBase.LogLevel.Normal, "出现错误");
  314. JObject jobject = (JObject)ModDownload.DlModRequest(CS$<>8__locals2.$VB$Local_ModrinthUrl, true);
  315. ModLoader.LoaderTask<ModComp.CompProjectRequest, int> $VB$Local_Task;
  316. ($VB$Local_Task = CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Task).Progress = unchecked($VB$Local_Task.Progress + 0.2);
  317. List<ModComp.CompProject> list6 = new List<ModComp.CompProject>();
  318. try
  319. {
  320. foreach (JToken jtoken in jobject["hits"])
  321. {
  322. JObject data = (JObject)jtoken;
  323. list6.Add(new ModComp.CompProject(data));
  324. }
  325. }
  326. finally
  327. {
  328. IEnumerator<JToken> enumerator5;
  329. if (enumerator5 != null)
  330. {
  331. enumerator5.Dispose();
  332. }
  333. }
  334. object $VB$Local_ResultsLock = CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_ResultsLock;
  335. ObjectFlowControl.CheckForSyncLockOnValueType($VB$Local_ResultsLock);
  336. lock ($VB$Local_ResultsLock)
  337. {
  338. try
  339. {
  340. foreach (ModComp.CompProject compProject3 in list6)
  341. {
  342. if (CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Task.Input.Type != ModComp.CompType.Mod || Enumerable.Any<ModComp.CompModLoaderType>(compProject3.predicateRepository))
  343. {
  344. CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_RawResults.Add(compProject3);
  345. }
  346. }
  347. }
  348. finally
  349. {
  350. List<ModComp.CompProject>.Enumerator enumerator6;
  351. ((IDisposable)enumerator6).Dispose();
  352. }
  353. }
  354. ModComp.CompProjectStorage $VB$Local_Storage = CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Storage;
  355. ref int ptr = ref $VB$Local_Storage.m_ProxyRepository;
  356. $VB$Local_Storage.m_ProxyRepository = ptr + list6.Count;
  357. CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Storage.m_MessageRepository = jobject["total_hits"].ToObject<int>();
  358. ModBase.Log(string.Format("[Comp] 从 Modrinth 获取到了 {0} 个工程(已获取 {1} 个,共 {2} 个)", list6.Count, CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Storage.m_ProxyRepository, CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Storage.m_MessageRepository), ModBase.LogLevel.Normal, "出现错误");
  359. }
  360. catch (Exception ex)
  361. {
  362. ModBase.Log(ex, "从 Modrinth 获取工程列表失败", ModBase.LogLevel.Debug, "出现错误");
  363. CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Storage.m_MessageRepository = -1;
  364. CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Error = ex;
  365. CS$<>8__locals2.$VB$Local_ModrinthFailed = true;
  366. }
  367. }, "Modrinth Project Request", ThreadPriority.Normal);
  368. }
  369. if (thread != null)
  370. {
  371. thread.Join();
  372. }
  373. if (CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Task.IsAborted)
  374. {
  375. return;
  376. }
  377. if (thread2 != null)
  378. {
  379. thread2.Join();
  380. }
  381. if (CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Task.IsAborted)
  382. {
  383. return;
  384. }
  385. CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Storage._InitializerRepository = null;
  386. if (!Enumerable.Any<ModComp.CompProject>(CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_RawResults))
  387. {
  388. if (CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Error != null)
  389. {
  390. throw CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Error;
  391. }
  392. if (flag && CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Task.Input.Type != ModComp.CompType.Mod)
  393. {
  394. throw new Exception(string.Format("{0}搜索仅支持英文", (CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Task.Input.Type == ModComp.CompType.ModPack) ? "整合包" : "资源包"));
  395. }
  396. if (CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Task.Input.Source == ModComp.CompSourceType.CurseForge && CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Task.Input.Tag.StartsWithF("/", false))
  397. {
  398. throw new Exception("CurseForge 不兼容所选的类型");
  399. }
  400. if (CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Task.Input.Source == ModComp.CompSourceType.Modrinth && CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Task.Input.Tag.EndsWithF("/", false))
  401. {
  402. throw new Exception("Modrinth 不兼容所选的类型");
  403. }
  404. throw new Exception("没有搜索结果");
  405. }
  406. else if (CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Error != null)
  407. {
  408. if (CS$<>8__locals2.$VB$Local_CurseForgeFailed)
  409. {
  410. CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Storage._InitializerRepository = string.Format("无法连接到 CurseForge,所以目前仅显示了来自 Modrinth 的内容,结果可能不全。{0}请尝试使用 VPN 或加速器以改善网络。", "\r\n");
  411. }
  412. else
  413. {
  414. CS$<>8__locals2.$VB$NonLocal_$VB$Closure_2.$VB$Local_Storage._InitializerRepository = string.Format("无法连接到 Modrinth,所以目前仅显示了来自 CurseForge 的内容,结果可能不全。{0}请尝试使用 VPN 或加速器以改善网络。", "\r\n");
  415. }
  416. }
  417. }
  418. finally
  419. {
  420. if (thread != null)
  421. {
  422. thread.Interrupt();
  423. }
  424. if (thread2 != null)
  425. {
  426. thread2.Interrupt();
  427. }
  428. }
  429. CS$<>8__locals1.$VB$Local_RawResults = Enumerable.ToList<ModComp.CompProject>(Enumerable.Concat<ModComp.CompProject>(Enumerable.Where<ModComp.CompProject>(CS$<>8__locals1.$VB$Local_RawResults, (ModComp._Closure$__.$I13-2 == null) ? (ModComp._Closure$__.$I13-2 = ((ModComp.CompProject x) => !x.listRepository)) : ModComp._Closure$__.$I13-2), Enumerable.Where<ModComp.CompProject>(CS$<>8__locals1.$VB$Local_RawResults, (ModComp._Closure$__.$I13-3 == null) ? (ModComp._Closure$__.$I13-3 = ((ModComp.CompProject x) => x.listRepository)) : ModComp._Closure$__.$I13-3)));
  430. CS$<>8__locals1.$VB$Local_RawResults = CS$<>8__locals1.$VB$Local_RawResults.Distinct((ModComp._Closure$__.$I13-4 == null) ? (ModComp._Closure$__.$I13-4 = ((ModComp.CompProject a, ModComp.CompProject b) => a.IsLike(b))) : ModComp._Closure$__.$I13-4);
  431. CS$<>8__locals1.$VB$Local_RawResults = Enumerable.ToList<ModComp.CompProject>(Enumerable.Where<ModComp.CompProject>(CS$<>8__locals1.$VB$Local_RawResults, delegate(ModComp.CompProject r)
  432. {
  433. ModComp._Closure$__13-2 CS$<>8__locals3 = new ModComp._Closure$__13-2(CS$<>8__locals3);
  434. CS$<>8__locals3.$VB$Local_r = r;
  435. return !Enumerable.Any<ModComp.CompProject>(CS$<>8__locals1.$VB$Local_RealResults, (ModComp.CompProject b) => CS$<>8__locals3.$VB$Local_r.IsLike(b)) && !Enumerable.Any<ModComp.CompProject>(CS$<>8__locals1.$VB$Local_Storage._CreatorRepository, (ModComp.CompProject b) => CS$<>8__locals3.$VB$Local_r.IsLike(b));
  436. }));
  437. CS$<>8__locals1.$VB$Local_RealResults.AddRange(CS$<>8__locals1.$VB$Local_RawResults);
  438. ModBase.Log(string.Format("[Comp] 去重、筛选后累计新增结果 {0} 个", CS$<>8__locals1.$VB$Local_RealResults.Count), ModBase.LogLevel.Normal, "出现错误");
  439. if (CS$<>8__locals1.$VB$Local_RealResults.Count + CS$<>8__locals1.$VB$Local_Storage._CreatorRepository.Count >= CS$<>8__locals1.$VB$Local_Task.Input.m_DispatcherRepository)
  440. {
  441. goto IL_BE6;
  442. }
  443. ModBase.Log(string.Format("[Comp] 总结果数需求最少 {0} 个,仅获得了 {1} 个", CS$<>8__locals1.$VB$Local_Task.Input.m_DispatcherRepository, CS$<>8__locals1.$VB$Local_RealResults.Count + CS$<>8__locals1.$VB$Local_Storage._CreatorRepository.Count), ModBase.LogLevel.Normal, "出现错误");
  444. if (!CS$<>8__locals1.$VB$Local_Task.Input.EnableTests())
  445. {
  446. break;
  447. }
  448. ModBase.Log("[Comp] 将继续尝试加载下一页", ModBase.LogLevel.Normal, "出现错误");
  449. }
  450. ModBase.Log("[Comp] 无法继续加载,将强制结束", ModBase.LogLevel.Normal, "出现错误");
  451. IL_BE6:
  452. dictionary = new Dictionary<ModComp.CompProject, double>();
  453. if (string.IsNullOrEmpty(CS$<>8__locals1.$VB$Local_Task.Input._RecordRepository))
  454. {
  455. try
  456. {
  457. foreach (ModComp.CompProject compProject in CS$<>8__locals1.$VB$Local_RealResults)
  458. {
  459. dictionary.Add(compProject, (double)(compProject.databaseRepository * (compProject.listRepository ? 1 : 10)));
  460. }
  461. goto IL_DC0;
  462. }
  463. finally
  464. {
  465. List<ModComp.CompProject>.Enumerator enumerator2;
  466. ((IDisposable)enumerator2).Dispose();
  467. }
  468. }
  469. list4 = new List<ModBase.SearchEntry<ModComp.CompProject>>();
  470. }
  471. try
  472. {
  473. foreach (ModComp.CompProject compProject2 in CS$<>8__locals1.$VB$Local_RealResults)
  474. {
  475. dictionary.Add(compProject2, ((compProject2.FlushTests() > 0) ? 0.2 : 0.0) + Math.Log10((double)(checked(Math.Max(compProject2.databaseRepository, 1) * (compProject2.listRepository ? 1 : 10)))) / 9.0);
  476. list4.Add(new ModBase.SearchEntry<ModComp.CompProject>
  477. {
  478. m_DicError = compProject2,
  479. helperError = new List<KeyValuePair<string, double>>
  480. {
  481. new KeyValuePair<string, double>(flag ? compProject2.RemoveTests() : compProject2.comparatorRepository, 1.0),
  482. new KeyValuePair<string, double>(compProject2.mappingRepository, 0.05)
  483. }
  484. });
  485. }
  486. }
  487. finally
  488. {
  489. List<ModComp.CompProject>.Enumerator enumerator3;
  490. ((IDisposable)enumerator3).Dispose();
  491. }
  492. List<ModBase.SearchEntry<ModComp.CompProject>> list5 = ModBase.Search<ModComp.CompProject>(list4, text, 101, -1.0);
  493. try
  494. {
  495. foreach (ModBase.SearchEntry<ModComp.CompProject> searchEntry in list5)
  496. {
  497. Dictionary<ModComp.CompProject, double> dictionary2;
  498. ModComp.CompProject dicError;
  499. (dictionary2 = dictionary)[dicError = searchEntry.m_DicError] = dictionary2[dicError] + searchEntry.m_IssuerError / list5[0].m_IssuerError;
  500. }
  501. }
  502. finally
  503. {
  504. List<ModBase.SearchEntry<ModComp.CompProject>>.Enumerator enumerator4;
  505. ((IDisposable)enumerator4).Dispose();
  506. }
  507. IL_DC0:
  508. CS$<>8__locals1.$VB$Local_Storage._CreatorRepository.AddRange(Enumerable.ToList<ModComp.CompProject>(Enumerable.Select<KeyValuePair<ModComp.CompProject, double>, ModComp.CompProject>(Enumerable.ToList<KeyValuePair<ModComp.CompProject, double>>(dictionary).Sort((ModComp._Closure$__.$I13-8 == null) ? (ModComp._Closure$__.$I13-8 = ((KeyValuePair<ModComp.CompProject, double> a, KeyValuePair<ModComp.CompProject, double> b) => a.Value > b.Value)) : ModComp._Closure$__.$I13-8), (ModComp._Closure$__.$I13-9 == null) ? (ModComp._Closure$__.$I13-9 = ((KeyValuePair<ModComp.CompProject, double> r) => r.Key)) : ModComp._Closure$__.$I13-9)));
  509. return;
  510. }
  511. }
  512. // Token: 0x060001E8 RID: 488 RVA: 0x00016180 File Offset: 0x00014380
  513. public static List<ModComp.CompFile> CompFilesGet(string ProjectId, bool FromCurseForge)
  514. {
  515. ModComp._Closure$__17-0 CS$<>8__locals1 = new ModComp._Closure$__17-0(CS$<>8__locals1);
  516. if (ModComp.pool.ContainsKey(ProjectId))
  517. {
  518. CS$<>8__locals1.$VB$Local_TargetProject = ModComp.pool[ProjectId];
  519. }
  520. else if (FromCurseForge)
  521. {
  522. CS$<>8__locals1.$VB$Local_TargetProject = new ModComp.CompProject((JObject)NewLateBinding.LateIndexGet(ModDownload.DlModRequest("https://api.curseforge.com/v1/mods/" + ProjectId, true), new object[]
  523. {
  524. "data"
  525. }, null));
  526. }
  527. else
  528. {
  529. CS$<>8__locals1.$VB$Local_TargetProject = new ModComp.CompProject((JObject)ModDownload.DlModRequest("https://api.modrinth.com/v2/project/" + ProjectId, true));
  530. }
  531. if (!ModComp.customer.ContainsKey(ProjectId))
  532. {
  533. ModBase.Log("[Comp] 开始获取文件列表:" + ProjectId, ModBase.LogLevel.Normal, "出现错误");
  534. JArray jarray;
  535. if (FromCurseForge)
  536. {
  537. if (CS$<>8__locals1.$VB$Local_TargetProject.Type == ModComp.CompType.Mod)
  538. {
  539. jarray = (JArray)NewLateBinding.LateIndexGet(ModBase.GetJson(ModDownload.DlModRequest("https://api.curseforge.com/v1/mods/files", "POST", "{\"fileIds\": [" + CS$<>8__locals1.$VB$Local_TargetProject.m_AlgoRepository.Join(",") + "]}", "application/json")), new object[]
  540. {
  541. "data"
  542. }, null);
  543. }
  544. else
  545. {
  546. jarray = (JArray)NewLateBinding.LateIndexGet(ModDownload.DlModRequest(string.Format("https://api.curseforge.com/v1/mods/{0}/files?pageSize=999", ProjectId), true), new object[]
  547. {
  548. "data"
  549. }, null);
  550. }
  551. }
  552. else
  553. {
  554. jarray = (JArray)ModDownload.DlModRequest(string.Format("https://api.modrinth.com/v2/project/{0}/version", ProjectId), true);
  555. }
  556. ModComp.customer[ProjectId] = Enumerable.ToList<ModComp.CompFile>(Enumerable.Where<ModComp.CompFile>(Enumerable.Select<JToken, ModComp.CompFile>(jarray, (JToken a) => new ModComp.CompFile((JObject)a, CS$<>8__locals1.$VB$Local_TargetProject.Type)), (ModComp._Closure$__.$I17-1 == null) ? (ModComp._Closure$__.$I17-1 = ((ModComp.CompFile a) => a.ExcludeTests())) : ModComp._Closure$__.$I17-1)).Distinct((ModComp._Closure$__.$I17-2 == null) ? (ModComp._Closure$__.$I17-2 = ((ModComp.CompFile a, ModComp.CompFile b) => Operators.CompareString(a.m_RegRepository, b.m_RegRepository, false) == 0)) : ModComp._Closure$__.$I17-2);
  557. }
  558. List<ModComp.CompFile> result;
  559. if (CS$<>8__locals1.$VB$Local_TargetProject.Type != ModComp.CompType.Mod)
  560. {
  561. result = ModComp.customer[ProjectId];
  562. }
  563. else
  564. {
  565. List<string> list = Enumerable.ToList<string>(Enumerable.Distinct<string>(Enumerable.SelectMany<ModComp.CompFile, string>(ModComp.customer[ProjectId], (ModComp._Closure$__.$I17-3 == null) ? (ModComp._Closure$__.$I17-3 = ((ModComp.CompFile f) => f.m_GlobalRepository)) : ModComp._Closure$__.$I17-3)));
  566. List<string> list2 = Enumerable.ToList<string>(Enumerable.Where<string>(list, (ModComp._Closure$__.$I17-4 == null) ? (ModComp._Closure$__.$I17-4 = ((string f) => !ModComp.pool.ContainsKey(f))) : ModComp._Closure$__.$I17-4));
  567. if (Enumerable.Any<string>(list2))
  568. {
  569. ModBase.Log(string.Format("[Comp] {0} 文件列表中还需要获取信息的前置 Mod:{1}", ProjectId, list2.Join(",")), ModBase.LogLevel.Normal, "出现错误");
  570. JArray jarray2;
  571. if (CS$<>8__locals1.$VB$Local_TargetProject.listRepository)
  572. {
  573. jarray2 = (JArray)NewLateBinding.LateIndexGet(ModBase.GetJson(ModDownload.DlModRequest("https://api.curseforge.com/v1/mods", "POST", "{\"modIds\": [" + list2.Join(",") + "]}", "application/json")), new object[]
  574. {
  575. "data"
  576. }, null);
  577. }
  578. else
  579. {
  580. jarray2 = (JArray)ModDownload.DlModRequest(string.Format("https://api.modrinth.com/v2/projects?ids=[\"{0}\"]", list2.Join("\",\"")), true);
  581. }
  582. try
  583. {
  584. foreach (JToken jtoken in jarray2)
  585. {
  586. new ModComp.CompProject((JObject)jtoken);
  587. }
  588. }
  589. finally
  590. {
  591. IEnumerator<JToken> enumerator;
  592. if (enumerator != null)
  593. {
  594. enumerator.Dispose();
  595. }
  596. }
  597. }
  598. if (Enumerable.Any<string>(list))
  599. {
  600. try
  601. {
  602. foreach (ModComp.CompProject compProject in Enumerable.Select<string, ModComp.CompProject>(Enumerable.Where<string>(list, (ModComp._Closure$__.$I17-5 == null) ? (ModComp._Closure$__.$I17-5 = ((string id) => ModComp.pool.ContainsKey(id))) : ModComp._Closure$__.$I17-5), (ModComp._Closure$__.$I17-6 == null) ? (ModComp._Closure$__.$I17-6 = ((string id) => ModComp.pool[id])) : ModComp._Closure$__.$I17-6))
  603. {
  604. try
  605. {
  606. foreach (ModComp.CompFile compFile in ModComp.customer[ProjectId])
  607. {
  608. if (compFile.m_GlobalRepository.Contains(compProject._AuthenticationRepository) && Operators.CompareString(compProject._AuthenticationRepository, ProjectId, false) != 0)
  609. {
  610. compFile.exceptionRepository.Add(compProject._AuthenticationRepository);
  611. }
  612. }
  613. }
  614. finally
  615. {
  616. List<ModComp.CompFile>.Enumerator enumerator3;
  617. ((IDisposable)enumerator3).Dispose();
  618. }
  619. }
  620. }
  621. finally
  622. {
  623. IEnumerator<ModComp.CompProject> enumerator2;
  624. if (enumerator2 != null)
  625. {
  626. enumerator2.Dispose();
  627. }
  628. }
  629. }
  630. result = ModComp.customer[ProjectId];
  631. }
  632. return result;
  633. }
  634. // Token: 0x060001E9 RID: 489 RVA: 0x000165F8 File Offset: 0x000147F8
  635. public static void CompFilesCardPreload(StackPanel Stack, List<ModComp.CompFile> Files)
  636. {
  637. List<string> list = Enumerable.ToList<string>(Enumerable.Distinct<string>(Enumerable.SelectMany<ModComp.CompFile, string>(Files, (ModComp._Closure$__.$I18-0 == null) ? (ModComp._Closure$__.$I18-0 = ((ModComp.CompFile f) => f.exceptionRepository)) : ModComp._Closure$__.$I18-0)));
  638. list.Sort();
  639. if (Enumerable.Any<string>(list))
  640. {
  641. list = Enumerable.ToList<string>(Enumerable.Where<string>(list, (ModComp._Closure$__.$I18-1 == null) ? (ModComp._Closure$__.$I18-1 = delegate(string dep)
  642. {
  643. if (!ModComp.pool.ContainsKey(dep))
  644. {
  645. ModBase.Log(string.Format("[Comp] 未找到 ID {0} 的前置 Mod 信息", dep), ModBase.LogLevel.Debug, "出现错误");
  646. }
  647. return ModComp.pool.ContainsKey(dep);
  648. }) : ModComp._Closure$__.$I18-1));
  649. Stack.Children.Add(new TextBlock
  650. {
  651. Text = "前置 Mod",
  652. FontSize = 14.0,
  653. HorizontalAlignment = HorizontalAlignment.Left,
  654. Margin = new Thickness(6.0, 2.0, 0.0, 5.0)
  655. });
  656. try
  657. {
  658. foreach (string key in list)
  659. {
  660. MyCompItem element = ModComp.pool[key].ToCompItem(false, false);
  661. Stack.Children.Add(element);
  662. }
  663. }
  664. finally
  665. {
  666. List<string>.Enumerator enumerator;
  667. ((IDisposable)enumerator).Dispose();
  668. }
  669. Stack.Children.Add(new TextBlock
  670. {
  671. Text = "可选版本",
  672. FontSize = 14.0,
  673. HorizontalAlignment = HorizontalAlignment.Left,
  674. Margin = new Thickness(6.0, 12.0, 0.0, 5.0)
  675. });
  676. }
  677. }
  678. // Token: 0x040000D1 RID: 209
  679. private static List<ModComp.CompDatabaseEntry> m_Predicate = null;
  680. // Token: 0x040000D2 RID: 210
  681. public static Dictionary<string, ModComp.CompProject> pool = new Dictionary<string, ModComp.CompProject>();
  682. // Token: 0x040000D3 RID: 211
  683. public static Dictionary<string, List<ModComp.CompFile>> customer = new Dictionary<string, List<ModComp.CompFile>>();
  684. // Token: 0x02000055 RID: 85
  685. public enum CompType
  686. {
  687. // Token: 0x040000D5 RID: 213
  688. Mod,
  689. // Token: 0x040000D6 RID: 214
  690. ModPack,
  691. // Token: 0x040000D7 RID: 215
  692. ResourcePack
  693. }
  694. // Token: 0x02000056 RID: 86
  695. public enum CompModLoaderType
  696. {
  697. // Token: 0x040000D9 RID: 217
  698. Any,
  699. // Token: 0x040000DA RID: 218
  700. Forge,
  701. // Token: 0x040000DB RID: 219
  702. LiteLoader = 3,
  703. // Token: 0x040000DC RID: 220
  704. Fabric,
  705. // Token: 0x040000DD RID: 221
  706. Quilt,
  707. // Token: 0x040000DE RID: 222
  708. NeoForge
  709. }
  710. // Token: 0x02000057 RID: 87
  711. [Flags]
  712. public enum CompSourceType
  713. {
  714. // Token: 0x040000E0 RID: 224
  715. CurseForge = 1,
  716. // Token: 0x040000E1 RID: 225
  717. Modrinth = 2,
  718. // Token: 0x040000E2 RID: 226
  719. Any = 3
  720. }
  721. // Token: 0x02000058 RID: 88
  722. private class CompDatabaseEntry
  723. {
  724. // Token: 0x060001EA RID: 490 RVA: 0x00003261 File Offset: 0x00001461
  725. public CompDatabaseEntry()
  726. {
  727. this.infoRepository = "";
  728. this.adapterRepository = null;
  729. this.m_FacadeRepository = null;
  730. }
  731. // Token: 0x060001EB RID: 491 RVA: 0x00016798 File Offset: 0x00014998
  732. public override string ToString()
  733. {
  734. return string.Concat(new string[]
  735. {
  736. this.adapterRepository,
  737. "&",
  738. this.m_FacadeRepository,
  739. "|",
  740. Conversions.ToString(this.annotationRepository),
  741. "|",
  742. this.infoRepository
  743. });
  744. }
  745. // Token: 0x040000E3 RID: 227
  746. public int annotationRepository;
  747. // Token: 0x040000E4 RID: 228
  748. public string infoRepository;
  749. // Token: 0x040000E5 RID: 229
  750. public string adapterRepository;
  751. // Token: 0x040000E6 RID: 230
  752. public string m_FacadeRepository;
  753. }
  754. // Token: 0x02000059 RID: 89
  755. public class CompProject
  756. {
  757. // Token: 0x060001ED RID: 493 RVA: 0x00003283 File Offset: 0x00001483
  758. private ModComp.CompDatabaseEntry AddTests()
  759. {
  760. if (!this.m_InterceptorRepository)
  761. {
  762. this.m_InterceptorRepository = true;
  763. if (this.Type == ModComp.CompType.Mod)
  764. {
  765. this._ContainerRepository = Enumerable.FirstOrDefault<ModComp.CompDatabaseEntry>(ModComp.RestartBroadcaster(), (ModComp.CompDatabaseEntry c) => Operators.CompareString(this.listRepository ? c.adapterRepository : c.m_FacadeRepository, this.m_MerchantRepository, false) == 0);
  766. }
  767. }
  768. return this._ContainerRepository;
  769. }
  770. // Token: 0x060001EE RID: 494 RVA: 0x000032BE File Offset: 0x000014BE
  771. private void InstantiateTests(ModComp.CompDatabaseEntry value)
  772. {
  773. this.m_InterceptorRepository = true;
  774. this._ContainerRepository = value;
  775. }
  776. // Token: 0x060001EF RID: 495 RVA: 0x000032CE File Offset: 0x000014CE
  777. public int FlushTests()
  778. {
  779. if (this.AddTests() != null)
  780. {
  781. return this.AddTests().annotationRepository;
  782. }
  783. return 0;
  784. }
  785. // Token: 0x060001F0 RID: 496 RVA: 0x000032E5 File Offset: 0x000014E5
  786. public string RemoveTests()
  787. {
  788. if (this.AddTests() != null && Operators.CompareString(this.AddTests().infoRepository, "", false) != 0)
  789. {
  790. return this.AddTests().infoRepository;
  791. }
  792. return this.comparatorRepository;
  793. }
  794. // Token: 0x060001F1 RID: 497 RVA: 0x000167F4 File Offset: 0x000149F4
  795. public CompProject(JObject Data)
  796. {
  797. this._FilterRepository = null;
  798. this._CustomerRepository = null;
  799. this.m_InterceptorRepository = false;
  800. this._ContainerRepository = null;
  801. checked
  802. {
  803. if (Data.ContainsKey("Tags"))
  804. {
  805. this.listRepository = ((string)Data["DataSource"] == "CurseForge");
  806. this.Type = (ModComp.CompType)Data["Type"].ToObject<int>();
  807. this.m_MerchantRepository = (string)Data["Slug"];
  808. this._AuthenticationRepository = (string)Data["Id"];
  809. if (Data.ContainsKey("CurseForgeFileIds"))
  810. {
  811. this.m_AlgoRepository = Enumerable.ToList<int>(Enumerable.Select<JToken, int>((JArray)Data["CurseForgeFileIds"], (ModComp.CompProject._Closure$__.$I23-0 == null) ? (ModComp.CompProject._Closure$__.$I23-0 = ((JToken t) => t.ToObject<int>())) : ModComp.CompProject._Closure$__.$I23-0));
  812. }
  813. this.comparatorRepository = (string)Data["RawName"];
  814. this.mappingRepository = (string)Data["Description"];
  815. this.m_TokenizerRepository = (string)Data["Website"];
  816. if (Data.ContainsKey("LastUpdate"))
  817. {
  818. this._FilterRepository = (DateTime?)Data["LastUpdate"];
  819. }
  820. this.databaseRepository = (int)Data["DownloadCount"];
  821. if (Data.ContainsKey("ModLoaders"))
  822. {
  823. this.predicateRepository = Enumerable.ToList<ModComp.CompModLoaderType>(Enumerable.Select<JToken, ModComp.CompModLoaderType>((JArray)Data["ModLoaders"], (ModComp.CompProject._Closure$__.$I23-1 == null) ? (ModComp.CompProject._Closure$__.$I23-1 = ((JToken t) => (ModComp.CompModLoaderType)t.ToObject<int>())) : ModComp.CompProject._Closure$__.$I23-1));
  824. }
  825. else
  826. {
  827. this.predicateRepository = new List<ModComp.CompModLoaderType>();
  828. }
  829. this.m_PoolRepository = Enumerable.ToList<string>(Enumerable.Select<JToken, string>((JArray)Data["Tags"], (ModComp.CompProject._Closure$__.$I23-2 == null) ? (ModComp.CompProject._Closure$__.$I23-2 = ((JToken t) => t.ToString())) : ModComp.CompProject._Closure$__.$I23-2));
  830. if (Data.ContainsKey("LogoUrl"))
  831. {
  832. this._CustomerRepository = (string)Data["LogoUrl"];
  833. }
  834. if (Data.ContainsKey("GameVersions"))
  835. {
  836. this.pageRepository = Enumerable.ToList<int>(Enumerable.Select<JToken, int>((JArray)Data["GameVersions"], (ModComp.CompProject._Closure$__.$I23-3 == null) ? (ModComp.CompProject._Closure$__.$I23-3 = ((JToken t) => t.ToObject<int>())) : ModComp.CompProject._Closure$__.$I23-3));
  837. }
  838. else
  839. {
  840. this.pageRepository = new List<int>();
  841. }
  842. }
  843. else
  844. {
  845. this.listRepository = Data.ContainsKey("summary");
  846. if (this.listRepository)
  847. {
  848. this._AuthenticationRepository = (string)Data["id"];
  849. this.m_MerchantRepository = (string)Data["slug"];
  850. this.comparatorRepository = (string)Data["name"];
  851. this.mappingRepository = (string)Data["summary"];
  852. this.m_TokenizerRepository = Data["links"]["websiteUrl"].ToString().TrimEnd(new char[]
  853. {
  854. '/'
  855. });
  856. this._FilterRepository = (DateTime?)Data["dateReleased"];
  857. this.databaseRepository = (int)Data["downloadCount"];
  858. if (Enumerable.Count<JToken>(Data["logo"]) > 0)
  859. {
  860. if (Data["logo"]["thumbnailUrl"] != null && !((string)Data["logo"]["thumbnailUrl"] == ""))
  861. {
  862. this._CustomerRepository = (string)Data["logo"]["thumbnailUrl"];
  863. }
  864. else
  865. {
  866. this._CustomerRepository = (string)Data["logo"]["url"];
  867. }
  868. }
  869. this.predicateRepository = new List<ModComp.CompModLoaderType>();
  870. List<KeyValuePair<int, List<string>>> list = new List<KeyValuePair<int, List<string>>>();
  871. try
  872. {
  873. foreach (JToken jtoken in (Data["latestFiles"] ?? new JArray()))
  874. {
  875. ModComp.CompFile compFile = new ModComp.CompFile((JObject)jtoken, this.Type);
  876. if (compFile.ExcludeTests())
  877. {
  878. this.predicateRepository.AddRange(compFile._VisitorRepository);
  879. List<string> list2 = jtoken["gameVersions"].ToObject<List<string>>();
  880. if (Enumerable.Any<string>(list2, (ModComp.CompProject._Closure$__.$I23-4 == null) ? (ModComp.CompProject._Closure$__.$I23-4 = ((string v) => v.StartsWithF("1.", false))) : ModComp.CompProject._Closure$__.$I23-4))
  881. {
  882. list.Add(new KeyValuePair<int, List<string>>((int)jtoken["id"], list2));
  883. }
  884. }
  885. }
  886. }
  887. finally
  888. {
  889. IEnumerator<JToken> enumerator;
  890. if (enumerator != null)
  891. {
  892. enumerator.Dispose();
  893. }
  894. }
  895. try
  896. {
  897. foreach (JToken jtoken2 in (Data["latestFilesIndexes"] ?? new JArray()))
  898. {
  899. if (jtoken2["gameVersion"].ToString().StartsWithF("1.", false))
  900. {
  901. list.Add(new KeyValuePair<int, List<string>>((int)jtoken2["fileId"], Enumerable.ToList<string>(new string[]
  902. {
  903. jtoken2["gameVersion"].ToString()
  904. })));
  905. }
  906. }
  907. }
  908. finally
  909. {
  910. IEnumerator<JToken> enumerator2;
  911. if (enumerator2 != null)
  912. {
  913. enumerator2.Dispose();
  914. }
  915. }
  916. this.m_AlgoRepository = Enumerable.ToList<int>(Enumerable.Distinct<int>(Enumerable.Select<KeyValuePair<int, List<string>>, int>(list, (ModComp.CompProject._Closure$__.$I23-5 == null) ? (ModComp.CompProject._Closure$__.$I23-5 = ((KeyValuePair<int, List<string>> f) => f.Key)) : ModComp.CompProject._Closure$__.$I23-5)));
  917. this.pageRepository = Enumerable.ToList<int>(Enumerable.OrderByDescending<int, int>(Enumerable.Distinct<int>(Enumerable.Where<int>(Enumerable.Select<string, int>(Enumerable.Where<string>(Enumerable.SelectMany<KeyValuePair<int, List<string>>, string>(list, (ModComp.CompProject._Closure$__.$I23-6 == null) ? (ModComp.CompProject._Closure$__.$I23-6 = ((KeyValuePair<int, List<string>> f) => f.Value)) : ModComp.CompProject._Closure$__.$I23-6), (ModComp.CompProject._Closure$__.$I23-7 == null) ? (ModComp.CompProject._Closure$__.$I23-7 = ((string v) => v.StartsWithF("1.", false))) : ModComp.CompProject._Closure$__.$I23-7), (ModComp.CompProject._Closure$__.$I23-8 == null) ? (ModComp.CompProject._Closure$__.$I23-8 = ((string v) => (int)Math.Round(ModBase.Val(v.Split(".")[1].BeforeFirst("-", false))))) : ModComp.CompProject._Closure$__.$I23-8), (ModComp.CompProject._Closure$__.$I23-9 == null) ? (ModComp.CompProject._Closure$__.$I23-9 = ((int v) => v > 0)) : ModComp.CompProject._Closure$__.$I23-9)), (ModComp.CompProject._Closure$__.$I23-10 == null) ? (ModComp.CompProject._Closure$__.$I23-10 = ((int v) => v)) : ModComp.CompProject._Closure$__.$I23-10));
  918. this.predicateRepository = Enumerable.ToList<ModComp.CompModLoaderType>(Enumerable.OrderBy<ModComp.CompModLoaderType, int>(Enumerable.Distinct<ModComp.CompModLoaderType>(this.predicateRepository), (ModComp.CompProject._Closure$__.$I23-11 == null) ? (ModComp.CompProject._Closure$__.$I23-11 = ((ModComp.CompModLoaderType t) => (int)t)) : ModComp.CompProject._Closure$__.$I23-11));
  919. if (!this.m_TokenizerRepository.Contains("/mc-mods/") && !this.m_TokenizerRepository.Contains("/mod/"))
  920. {
  921. if (this.m_TokenizerRepository.Contains("/modpacks/"))
  922. {
  923. this.Type = ModComp.CompType.ModPack;
  924. }
  925. else
  926. {
  927. this.Type = ModComp.CompType.ResourcePack;
  928. }
  929. }
  930. else
  931. {
  932. this.Type = ModComp.CompType.Mod;
  933. }
  934. this.m_PoolRepository = new List<string>();
  935. try
  936. {
  937. foreach (int num in Enumerable.OrderByDescending<int, int>(Enumerable.Distinct<int>(Enumerable.Select<JToken, int>(Data["categories"] ?? new JArray(), (ModComp.CompProject._Closure$__.$I23-12 == null) ? (ModComp.CompProject._Closure$__.$I23-12 = ((JToken t) => (int)t["id"])) : ModComp.CompProject._Closure$__.$I23-12)), (ModComp.CompProject._Closure$__.$I23-13 == null) ? (ModComp.CompProject._Closure$__.$I23-13 = ((int c) => c)) : ModComp.CompProject._Closure$__.$I23-13))
  938. {
  939. if (num <= 4558)
  940. {
  941. switch (num)
  942. {
  943. case 406:
  944. this.m_PoolRepository.Add("世界元素");
  945. break;
  946. case 407:
  947. this.m_PoolRepository.Add("生物群系");
  948. break;
  949. case 408:
  950. this.m_PoolRepository.Add("矿物/资源");
  951. break;
  952. case 409:
  953. this.m_PoolRepository.Add("天然结构");
  954. break;
  955. case 410:
  956. this.m_PoolRepository.Add("维度");
  957. break;
  958. case 411:
  959. this.m_PoolRepository.Add("生物");
  960. break;
  961. case 412:
  962. this.m_PoolRepository.Add("科技");
  963. break;
  964. case 413:
  965. case 418:
  966. case 425:
  967. case 426:
  968. case 427:
  969. case 428:
  970. case 429:
  971. case 430:
  972. case 431:
  973. case 432:
  974. case 433:
  975. break;
  976. case 414:
  977. this.m_PoolRepository.Add("运输");
  978. break;
  979. case 415:
  980. this.m_PoolRepository.Add("管道/物流");
  981. break;
  982. case 416:
  983. this.m_PoolRepository.Add("农业");
  984. break;
  985. case 417:
  986. this.m_PoolRepository.Add("能源");
  987. break;
  988. case 419:
  989. this.m_PoolRepository.Add("魔法");
  990. break;
  991. case 420:
  992. this.m_PoolRepository.Add("仓储");
  993. break;
  994. case 421:
  995. this.m_PoolRepository.Add("支持库");
  996. break;
  997. case 422:
  998. this.m_PoolRepository.Add("冒险");
  999. break;
  1000. case 423:
  1001. this.m_PoolRepository.Add("信息显示");
  1002. break;
  1003. case 424:
  1004. this.m_PoolRepository.Add("装饰");
  1005. break;
  1006. case 434:
  1007. this.m_PoolRepository.Add("装备");
  1008. break;
  1009. case 435:
  1010. this.m_PoolRepository.Add("服务器");
  1011. break;
  1012. case 436:
  1013. this.m_PoolRepository.Add("食物/烹饪");
  1014. break;
  1015. default:
  1016. switch (num)
  1017. {
  1018. case 4471:
  1019. this.m_PoolRepository.Add("科幻");
  1020. break;
  1021. case 4472:
  1022. this.m_PoolRepository.Add("科技");
  1023. break;
  1024. case 4473:
  1025. this.m_PoolRepository.Add("魔法");
  1026. break;
  1027. case 4474:
  1028. case 4485:
  1029. case 4486:
  1030. break;
  1031. case 4475:
  1032. this.m_PoolRepository.Add("冒险");
  1033. break;
  1034. case 4476:
  1035. this.m_PoolRepository.Add("探索");
  1036. break;
  1037. case 4477:
  1038. this.m_PoolRepository.Add("小游戏");
  1039. break;
  1040. case 4478:
  1041. this.m_PoolRepository.Add("任务");
  1042. break;
  1043. case 4479:
  1044. this.m_PoolRepository.Add("硬核");
  1045. break;
  1046. case 4480:
  1047. this.m_PoolRepository.Add("基于地图");
  1048. break;
  1049. case 4481:
  1050. this.m_PoolRepository.Add("轻量");
  1051. break;
  1052. case 4482:
  1053. this.m_PoolRepository.Add("大型");
  1054. break;
  1055. case 4483:
  1056. this.m_PoolRepository.Add("战斗");
  1057. break;
  1058. case 4484:
  1059. this.m_PoolRepository.Add("多人");
  1060. break;
  1061. case 4487:
  1062. this.m_PoolRepository.Add("FTB");
  1063. break;
  1064. default:
  1065. if (num == 4558)
  1066. {
  1067. this.m_PoolRepository.Add("红石");
  1068. }
  1069. break;
  1070. }
  1071. break;
  1072. }
  1073. }
  1074. else if (num <= 4843)
  1075. {
  1076. if (num != 4736)
  1077. {
  1078. if (num == 4843)
  1079. {
  1080. this.m_PoolRepository.Add("自动化");
  1081. }
  1082. }
  1083. else
  1084. {
  1085. this.m_PoolRepository.Add("空岛");
  1086. }
  1087. }
  1088. else if (num != 5128)
  1089. {
  1090. if (num == 5191)
  1091. {
  1092. this.m_PoolRepository.Add("改良");
  1093. }
  1094. }
  1095. else
  1096. {
  1097. this.m_PoolRepository.Add("原版改良");
  1098. }
  1099. }
  1100. }
  1101. finally
  1102. {
  1103. IEnumerator<int> enumerator3;
  1104. if (enumerator3 != null)
  1105. {
  1106. enumerator3.Dispose();
  1107. }
  1108. }
  1109. if (!Enumerable.Any<string>(this.m_PoolRepository))
  1110. {
  1111. this.m_PoolRepository.Add("杂项");
  1112. }
  1113. }
  1114. else
  1115. {
  1116. this._AuthenticationRepository = (string)(Data["project_id"] ?? Data["id"]);
  1117. this.m_MerchantRepository = (string)Data["slug"];
  1118. this.comparatorRepository = (string)Data["title"];
  1119. this.mappingRepository = (string)Data["description"];
  1120. this._FilterRepository = (DateTime?)Data["date_modified"];
  1121. this.databaseRepository = (int)Data["downloads"];
  1122. this._CustomerRepository = (string)Data["icon_url"];
  1123. if (Operators.CompareString(this._CustomerRepository, "", false) == 0)
  1124. {
  1125. this._CustomerRepository = null;
  1126. }
  1127. this.m_TokenizerRepository = string.Format("https://modrinth.com/{0}/{1}", Data["project_type"], this.m_MerchantRepository);
  1128. this.pageRepository = Enumerable.ToList<int>(Enumerable.OrderByDescending<int, int>(Enumerable.Distinct<int>(Enumerable.Where<int>(Enumerable.Select<string, int>(Enumerable.Where<string>(Enumerable.Select<JToken, string>(((JArray)(Data["game_versions"] ?? Data["versions"])) ?? new JArray(), (ModComp.CompProject._Closure$__.$I23-14 == null) ? (ModComp.CompProject._Closure$__.$I23-14 = ((JToken v) => v.ToString())) : ModComp.CompProject._Closure$__.$I23-14), (ModComp.CompProject._Closure$__.$I23-15 == null) ? (ModComp.CompProject._Closure$__.$I23-15 = ((string v) => v.StartsWithF("1.", false))) : ModComp.CompProject._Closure$__.$I23-15), (ModComp.CompProject._Closure$__.$I23-16 == null) ? (ModComp.CompProject._Closure$__.$I23-16 = ((string v) => (int)Math.Round(ModBase.Val(v.Split(".")[1].BeforeFirst("-", false))))) : ModComp.CompProject._Closure$__.$I23-16), (ModComp.CompProject._Closure$__.$I23-17 == null) ? (ModComp.CompProject._Closure$__.$I23-17 = ((int v) => v > 0)) : ModComp.CompProject._Closure$__.$I23-17)), (ModComp.CompProject._Closure$__.$I23-18 == null) ? (ModComp.CompProject._Closure$__.$I23-18 = ((int v) => v)) : ModComp.CompProject._Closure$__.$I23-18));
  1129. string left = Data["project_type"].ToString();
  1130. if (Operators.CompareString(left, "mod", false) != 0)
  1131. {
  1132. if (Operators.CompareString(left, "modpack", false) != 0)
  1133. {
  1134. if (Operators.CompareString(left, "resourcepack", false) == 0)
  1135. {
  1136. this.Type = ModComp.CompType.ResourcePack;
  1137. }
  1138. }
  1139. else
  1140. {
  1141. this.Type = ModComp.CompType.ModPack;
  1142. }
  1143. }
  1144. else
  1145. {
  1146. this.Type = ModComp.CompType.Mod;
  1147. }
  1148. this.m_PoolRepository = new List<string>();
  1149. this.predicateRepository = new List<ModComp.CompModLoaderType>();
  1150. try
  1151. {
  1152. foreach (string text in Enumerable.Select<JToken, string>(Data["categories"], (ModComp.CompProject._Closure$__.$I23-19 == null) ? (ModComp.CompProject._Closure$__.$I23-19 = ((JToken t) => t.ToString())) : ModComp.CompProject._Closure$__.$I23-19))
  1153. {
  1154. uint num2 = <PrivateImplementationDetails>.ComputeStringHash(text);
  1155. if (num2 <= 2310183952U)
  1156. {
  1157. if (num2 <= 889035115U)
  1158. {
  1159. if (num2 <= 484666913U)
  1160. {
  1161. if (num2 != 30055014U)
  1162. {
  1163. if (num2 != 126402435U)
  1164. {
  1165. if (num2 == 484666913U)
  1166. {
  1167. if (Operators.CompareString(text, "combat", false) == 0)
  1168. {
  1169. this.m_PoolRepository.Add("战斗");
  1170. }
  1171. }
  1172. }
  1173. else if (Operators.CompareString(text, "decoration", false) == 0)
  1174. {
  1175. this.m_PoolRepository.Add("装饰");
  1176. }
  1177. }
  1178. else if (Operators.CompareString(text, "storage", false) == 0)
  1179. {
  1180. this.m_PoolRepository.Add("仓储");
  1181. }
  1182. }
  1183. else if (num2 != 564424733U)
  1184. {
  1185. if (num2 != 659651964U)
  1186. {
  1187. if (num2 == 889035115U)
  1188. {
  1189. if (Operators.CompareString(text, "lightweight", false) == 0)
  1190. {
  1191. this.m_PoolRepository.Add("轻量");
  1192. }
  1193. }
  1194. }
  1195. else if (Operators.CompareString(text, "neoforge", false) == 0)
  1196. {
  1197. this.predicateRepository.Add(ModComp.CompModLoaderType.NeoForge);
  1198. }
  1199. }
  1200. else if (Operators.CompareString(text, "game-mechanics", false) == 0)
  1201. {
  1202. this.m_PoolRepository.Add("游戏机制");
  1203. }
  1204. }
  1205. else if (num2 <= 1446847267U)
  1206. {
  1207. if (num2 != 1028682697U)
  1208. {
  1209. if (num2 != 1418100143U)
  1210. {
  1211. if (num2 == 1446847267U)
  1212. {
  1213. if (Operators.CompareString(text, "transportation", false) == 0)
  1214. {
  1215. this.m_PoolRepository.Add("运输");
  1216. }
  1217. }
  1218. }
  1219. else if (Operators.CompareString(text, "technology", false) == 0)
  1220. {
  1221. this.m_PoolRepository.Add("科技");
  1222. }
  1223. }
  1224. else if (Operators.CompareString(text, "food", false) == 0)
  1225. {
  1226. this.m_PoolRepository.Add("食物/烹饪");
  1227. }
  1228. }
  1229. else if (num2 != 1743038524U)
  1230. {
  1231. if (num2 != 1955283044U)
  1232. {
  1233. if (num2 == 2310183952U)
  1234. {
  1235. if (Operators.CompareString(text, "forge", false) == 0)
  1236. {
  1237. this.predicateRepository.Add(ModComp.CompModLoaderType.Forge);
  1238. }
  1239. }
  1240. }
  1241. else if (Operators.CompareString(text, "optimization", false) == 0)
  1242. {
  1243. this.m_PoolRepository.Add("性能优化");
  1244. }
  1245. }
  1246. else if (Operators.CompareString(text, "fabric", false) == 0)
  1247. {
  1248. this.predicateRepository.Add(ModComp.CompModLoaderType.Fabric);
  1249. }
  1250. }
  1251. else if (num2 <= 3249952714U)
  1252. {
  1253. if (num2 <= 3001865938U)
  1254. {
  1255. if (num2 != 2432105424U)
  1256. {
  1257. if (num2 != 2898550409U)
  1258. {
  1259. if (num2 == 3001865938U)
  1260. {
  1261. if (Operators.CompareString(text, "social", false) == 0)
  1262. {
  1263. this.m_PoolRepository.Add("服务器");
  1264. }
  1265. }
  1266. }
  1267. else if (Operators.CompareString(text, "challenging", false) == 0)
  1268. {
  1269. this.m_PoolRepository.Add("硬核");
  1270. }
  1271. }
  1272. else if (Operators.CompareString(text, "library", false) == 0)
  1273. {
  1274. this.m_PoolRepository.Add("支持库");
  1275. }
  1276. }
  1277. else if (num2 != 3037049615U)
  1278. {
  1279. if (num2 != 3217471839U)
  1280. {
  1281. if (num2 == 3249952714U)
  1282. {
  1283. if (Operators.CompareString(text, "quests", false) == 0)
  1284. {
  1285. this.m_PoolRepository.Add("任务");
  1286. }
  1287. }
  1288. }
  1289. else if (Operators.CompareString(text, "utility", false) == 0)
  1290. {
  1291. this.m_PoolRepository.Add("改良");
  1292. }
  1293. }
  1294. else if (Operators.CompareString(text, "worldgen", false) == 0)
  1295. {
  1296. this.m_PoolRepository.Add("世界元素");
  1297. }
  1298. }
  1299. else if (num2 <= 3463588087U)
  1300. {
  1301. if (num2 != 3302598349U)
  1302. {
  1303. if (num2 != 3306152395U)
  1304. {
  1305. if (num2 == 3463588087U)
  1306. {
  1307. if (Operators.CompareString(text, "equipment", false) == 0)
  1308. {
  1309. this.m_PoolRepository.Add("装备");
  1310. }
  1311. }
  1312. }
  1313. else if (Operators.CompareString(text, "adventure", false) == 0)
  1314. {
  1315. this.m_PoolRepository.Add("冒险");
  1316. }
  1317. }
  1318. else if (Operators.CompareString(text, "kitchen-sink", false) == 0)
  1319. {
  1320. this.m_PoolRepository.Add("大杂烩");
  1321. }
  1322. }
  1323. else if (num2 <= 3964042846U)
  1324. {
  1325. if (num2 != 3840615820U)
  1326. {
  1327. if (num2 == 3964042846U)
  1328. {
  1329. if (Operators.CompareString(text, "quilt", false) == 0)
  1330. {
  1331. this.predicateRepository.Add(ModComp.CompModLoaderType.Quilt);
  1332. }
  1333. }
  1334. }
  1335. else if (Operators.CompareString(text, "magic", false) == 0)
  1336. {
  1337. this.m_PoolRepository.Add("魔法");
  1338. }
  1339. }
  1340. else if (num2 != 4053708971U)
  1341. {
  1342. if (num2 == 4269569010U)
  1343. {
  1344. if (Operators.CompareString(text, "mobs", false) == 0)
  1345. {
  1346. this.m_PoolRepository.Add("生物");
  1347. }
  1348. }
  1349. }
  1350. else if (Operators.CompareString(text, "multiplayer", false) == 0)
  1351. {
  1352. this.m_PoolRepository.Add("多人");
  1353. }
  1354. }
  1355. }
  1356. finally
  1357. {
  1358. IEnumerator<string> enumerator4;
  1359. if (enumerator4 != null)
  1360. {
  1361. enumerator4.Dispose();
  1362. }
  1363. }
  1364. if (!Enumerable.Any<string>(this.m_PoolRepository))
  1365. {
  1366. this.m_PoolRepository.Add("杂项");
  1367. }
  1368. this.m_PoolRepository.Sort();
  1369. this.predicateRepository.Sort();
  1370. }
  1371. }
  1372. ModComp.pool[this._AuthenticationRepository] = this;
  1373. }
  1374. }
  1375. // Token: 0x060001F2 RID: 498 RVA: 0x00017CA0 File Offset: 0x00015EA0
  1376. public JObject ToJson()
  1377. {
  1378. JObject jobject = new JObject();
  1379. jobject["DataSource"] = (this.listRepository ? "CurseForge" : "Modrinth");
  1380. jobject["Type"] = (int)this.Type;
  1381. jobject["Slug"] = this.m_MerchantRepository;
  1382. jobject["Id"] = this._AuthenticationRepository;
  1383. if (this.m_AlgoRepository != null)
  1384. {
  1385. jobject["CurseForgeFileIds"] = new JArray(this.m_AlgoRepository);
  1386. }
  1387. jobject["RawName"] = this.comparatorRepository;
  1388. jobject["Description"] = this.mappingRepository;
  1389. jobject["Website"] = this.m_TokenizerRepository;
  1390. if (this._FilterRepository != null)
  1391. {
  1392. jobject["LastUpdate"] = this._FilterRepository;
  1393. }
  1394. jobject["DownloadCount"] = this.databaseRepository;
  1395. if (this.predicateRepository != null && Enumerable.Any<ModComp.CompModLoaderType>(this.predicateRepository))
  1396. {
  1397. jobject["ModLoaders"] = new JArray(Enumerable.Select<ModComp.CompModLoaderType, int>(this.predicateRepository, (ModComp.CompProject._Closure$__.$I24-0 == null) ? (ModComp.CompProject._Closure$__.$I24-0 = ((ModComp.CompModLoaderType m) => (int)m)) : ModComp.CompProject._Closure$__.$I24-0));
  1398. }
  1399. jobject["Tags"] = new JArray(this.m_PoolRepository);
  1400. if (!string.IsNullOrEmpty(this._CustomerRepository))
  1401. {
  1402. jobject["LogoUrl"] = this._CustomerRepository;
  1403. }
  1404. if (Enumerable.Any<int>(this.pageRepository))
  1405. {
  1406. jobject["GameVersions"] = new JArray(this.pageRepository);
  1407. }
  1408. jobject["CacheTime"] = DateTime.Now;
  1409. return jobject;
  1410. }
  1411. // Token: 0x060001F3 RID: 499 RVA: 0x00017E7C File Offset: 0x0001607C
  1412. public MyCompItem ToCompItem(bool ShowMcVersionDesc, bool ShowLoaderDesc)
  1413. {
  1414. checked
  1415. {
  1416. string text;
  1417. if (this.pageRepository != null && Enumerable.Any<int>(this.pageRepository))
  1418. {
  1419. List<string> list = new List<string>();
  1420. bool flag = false;
  1421. int num = this.pageRepository.Count - 1;
  1422. int i = 0;
  1423. while (i <= num)
  1424. {
  1425. int num2 = this.pageRepository[i];
  1426. int num3 = this.pageRepository[i];
  1427. if (num2 < 10)
  1428. {
  1429. if (Enumerable.Any<string>(list) && !flag)
  1430. {
  1431. break;
  1432. }
  1433. flag = true;
  1434. }
  1435. int num4 = i + 1;
  1436. int num5 = this.pageRepository.Count - 1;
  1437. int num6 = num4;
  1438. while (num6 <= num5 && this.pageRepository[num6] == num3 - 1)
  1439. {
  1440. num3 = this.pageRepository[num6];
  1441. i = num6;
  1442. num6++;
  1443. }
  1444. if (num2 == num3)
  1445. {
  1446. list.Add("1." + Conversions.ToString(num2));
  1447. }
  1448. else if (ModDownloadLib.m_StructField > -1 && num2 >= ModDownloadLib.m_StructField)
  1449. {
  1450. if (num3 < 10)
  1451. {
  1452. list.Clear();
  1453. list.Add("全版本");
  1454. break;
  1455. }
  1456. list.Add("1." + Conversions.ToString(num3) + "+");
  1457. }
  1458. else
  1459. {
  1460. if (num3 < 10)
  1461. {
  1462. list.Add("1." + Conversions.ToString(num2) + "-");
  1463. break;
  1464. }
  1465. if (num2 - num3 == 1)
  1466. {
  1467. list.Add("1." + Conversions.ToString(num2) + ", 1." + Conversions.ToString(num3));
  1468. }
  1469. else
  1470. {
  1471. list.Add("1." + Conversions.ToString(num2) + "~1." + Conversions.ToString(num3));
  1472. }
  1473. }
  1474. i++;
  1475. continue;
  1476. IL_1B4:
  1477. text = list.Join(", ");
  1478. goto IL_1C9;
  1479. }
  1480. goto IL_1B4;
  1481. }
  1482. text = "未知";
  1483. IL_1C9:
  1484. List<ModComp.CompModLoaderType> list2 = new List<ModComp.CompModLoaderType>(this.predicateRepository);
  1485. if (Conversions.ToBoolean(ModBase.m_IdentifierRepository.Get("ToolDownloadIgnoreQuilt", null)))
  1486. {
  1487. list2.Remove(ModComp.CompModLoaderType.Quilt);
  1488. }
  1489. int count = list2.Count;
  1490. string text2;
  1491. string text3;
  1492. if (count != 0)
  1493. {
  1494. if (count != 1)
  1495. {
  1496. if (Conversions.ToBoolean(this.predicateRepository.Contains(ModComp.CompModLoaderType.Forge) && (Enumerable.Max(this.pageRepository) < 14 || this.predicateRepository.Contains(ModComp.CompModLoaderType.Fabric)) && (Enumerable.Max(this.pageRepository) < 20 || this.predicateRepository.Contains(ModComp.CompModLoaderType.NeoForge)) && (Enumerable.Max(this.pageRepository) < 14 || this.predicateRepository.Contains(ModComp.CompModLoaderType.Quilt) || Conversions.ToBoolean(ModBase.m_IdentifierRepository.Get("ToolDownloadIgnoreQuilt", null)))))
  1497. {
  1498. text2 = "任意";
  1499. text3 = "";
  1500. }
  1501. else
  1502. {
  1503. text2 = list2.Join(" / ");
  1504. text3 = list2.Join(" / ");
  1505. }
  1506. }
  1507. else
  1508. {
  1509. text2 = "仅 " + Enumerable.Single<ModComp.CompModLoaderType>(list2).ToString();
  1510. text3 = Enumerable.Single<ModComp.CompModLoaderType>(list2).ToString();
  1511. }
  1512. }
  1513. else if (this.predicateRepository.Count == 1)
  1514. {
  1515. text2 = "仅 " + Enumerable.Single<ModComp.CompModLoaderType>(this.predicateRepository).ToString();
  1516. text3 = Enumerable.Single<ModComp.CompModLoaderType>(this.predicateRepository).ToString();
  1517. }
  1518. else
  1519. {
  1520. text2 = "未知";
  1521. text3 = "";
  1522. }
  1523. MyCompItem myCompItem = new MyCompItem
  1524. {
  1525. Tag = this,
  1526. Logo = this.GetControlLogo()
  1527. };
  1528. KeyValuePair<string, string> controlTitle = this.GetControlTitle(true);
  1529. myCompItem.Title = controlTitle.Key;
  1530. if (Operators.CompareString(controlTitle.Value, "", false) == 0)
  1531. {
  1532. ((StackPanel)myCompItem.LabTitleRaw.Parent).Children.Remove(myCompItem.LabTitleRaw);
  1533. }
  1534. else
  1535. {
  1536. myCompItem.RestartReader(controlTitle.Value);
  1537. }
  1538. myCompItem.Tags = this.m_PoolRepository;
  1539. myCompItem.Description = this.mappingRepository.Replace("\r", "").Replace("\n", "");
  1540. if (!ShowMcVersionDesc && !ShowLoaderDesc)
  1541. {
  1542. ((Grid)myCompItem.PathVersion.Parent).Children.Remove(myCompItem.PathVersion);
  1543. ((Grid)myCompItem.LabVersion.Parent).Children.Remove(myCompItem.LabVersion);
  1544. myCompItem.ColumnVersion1.Width = new GridLength(0.0);
  1545. myCompItem.ColumnVersion2.MaxWidth = 0.0;
  1546. myCompItem.ColumnVersion3.Width = new GridLength(0.0);
  1547. }
  1548. else if (ShowMcVersionDesc && ShowMcVersionDesc)
  1549. {
  1550. myCompItem.LabVersion.Text = ((Operators.CompareString(text3, "", false) == 0) ? "" : (text3 + " ")) + text;
  1551. }
  1552. else if (ShowMcVersionDesc)
  1553. {
  1554. myCompItem.LabVersion.Text = text;
  1555. }
  1556. else
  1557. {
  1558. myCompItem.LabVersion.Text = text2;
  1559. }
  1560. myCompItem.LabSource.Text = (this.listRepository ? "CurseForge" : "Modrinth");
  1561. if (this._FilterRepository != null)
  1562. {
  1563. myCompItem.LabTime.Text = ModBase.GetTimeSpanString((this._FilterRepository - DateTime.Now).Value, true);
  1564. }
  1565. else
  1566. {
  1567. myCompItem.LabTime.Visibility = Visibility.Collapsed;
  1568. myCompItem.ColumnTime1.Width = new GridLength(0.0);
  1569. myCompItem.ColumnTime2.Width = new GridLength(0.0);
  1570. myCompItem.ColumnTime3.Width = new GridLength(0.0);
  1571. }
  1572. myCompItem.LabDownload.Text = Conversions.ToString((this.databaseRepository > 100000000) ? (Conversions.ToString(Math.Round((double)this.databaseRepository / 100000000.0, 2)) + " 亿") : ((this.databaseRepository > 100000) ? (Conversions.ToString(Math.Floor((double)this.databaseRepository / 10000.0)) + " 万") : this.databaseRepository));
  1573. return myCompItem;
  1574. }
  1575. }
  1576. // Token: 0x060001F4 RID: 500 RVA: 0x000184EC File Offset: 0x000166EC
  1577. public string GetControlLogo()
  1578. {
  1579. string result;
  1580. if (string.IsNullOrEmpty(this._CustomerRepository))
  1581. {
  1582. result = ModBase.m_SerializerRepository + "Icons/NoIcon.png";
  1583. }
  1584. else
  1585. {
  1586. result = this._CustomerRepository;
  1587. }
  1588. return result;
  1589. }
  1590. // Token: 0x060001F5 RID: 501 RVA: 0x00018520 File Offset: 0x00016720
  1591. public KeyValuePair<string, string> GetControlTitle(bool HasModLoaderDescription)
  1592. {
  1593. string text = this.comparatorRepository;
  1594. List<string> list2;
  1595. if (Operators.CompareString(this.RemoveTests(), this.comparatorRepository, false) == 0)
  1596. {
  1597. List<string> list = Enumerable.ToList<string>(Enumerable.Where<string>(Enumerable.Select<string, string>(this.RemoveTests().Split(new string[]
  1598. {
  1599. " | ",
  1600. " - ",
  1601. "(",
  1602. ")",
  1603. "[",
  1604. "]",
  1605. "{",
  1606. "}"
  1607. }, StringSplitOptions.RemoveEmptyEntries), (ModComp.CompProject._Closure$__.$I27-0 == null) ? (ModComp.CompProject._Closure$__.$I27-0 = ((string s) => s.Trim(" /\\".ToCharArray()))) : ModComp.CompProject._Closure$__.$I27-0), (ModComp.CompProject._Closure$__.$I27-1 == null) ? (ModComp.CompProject._Closure$__.$I27-1 = ((string w) => !string.IsNullOrEmpty(w))) : ModComp.CompProject._Closure$__.$I27-1));
  1608. if (list.Count == 1)
  1609. {
  1610. goto IL_571;
  1611. }
  1612. list2 = new List<string>();
  1613. List<string> list3 = new List<string>();
  1614. try
  1615. {
  1616. foreach (string text2 in list)
  1617. {
  1618. string text3 = text2.ToLower();
  1619. if (Operators.CompareString(text2.ToUpper(), text2, false) == 0 && Operators.CompareString(text2, "FPS", false) != 0 && Operators.CompareString(text2, "HUD", false) != 0)
  1620. {
  1621. list2.Add(text2);
  1622. }
  1623. else if ((text3.Contains("forge") || text3.Contains("fabric") || text3.Contains("quilt")) && !ModBase.RegexCheck(text3.Replace("forge", "").Replace("fabric", "").Replace("quilt", ""), "[a-z]+", 0))
  1624. {
  1625. list2.Add(text2);
  1626. }
  1627. else
  1628. {
  1629. list3.Add(text2);
  1630. }
  1631. }
  1632. }
  1633. finally
  1634. {
  1635. List<string>.Enumerator enumerator;
  1636. ((IDisposable)enumerator).Dispose();
  1637. }
  1638. if (!Enumerable.Any<string>(list3) || !Enumerable.Any<string>(list2))
  1639. {
  1640. goto IL_571;
  1641. }
  1642. text = list3.Join(" - ");
  1643. }
  1644. else
  1645. {
  1646. text = this.RemoveTests().BeforeFirst(" (", false).BeforeFirst(" - ", false);
  1647. string text4 = "";
  1648. if (this.RemoveTests().AfterLast(")", false).Contains(" - "))
  1649. {
  1650. text4 = this.RemoveTests().AfterLast(")", false).AfterLast(" - ", false);
  1651. }
  1652. string text5 = this.RemoveTests();
  1653. if (Operators.CompareString(text4, "", false) != 0)
  1654. {
  1655. text5 = text5.Replace(" - " + text4, "");
  1656. }
  1657. text5 = text5.Replace(text, "").Trim(new char[]
  1658. {
  1659. '(',
  1660. ')',
  1661. ' '
  1662. });
  1663. list2 = Enumerable.ToList<string>(Enumerable.Where<string>(Enumerable.Select<string, string>(text5.Split(new string[]
  1664. {
  1665. " | ",
  1666. " - ",
  1667. "(",
  1668. ")",
  1669. "[",
  1670. "]",
  1671. "{",
  1672. "}"
  1673. }, StringSplitOptions.RemoveEmptyEntries), (ModComp.CompProject._Closure$__.$I27-2 == null) ? (ModComp.CompProject._Closure$__.$I27-2 = ((string s) => s.Trim(" /".ToCharArray()))) : ModComp.CompProject._Closure$__.$I27-2), (ModComp.CompProject._Closure$__.$I27-3 == null) ? (ModComp.CompProject._Closure$__.$I27-3 = ((string w) => !string.IsNullOrEmpty(w))) : ModComp.CompProject._Closure$__.$I27-3));
  1674. if (list2.Count > 1 && !Enumerable.Any<string>(list2, (ModComp.CompProject._Closure$__.$I27-4 == null) ? (ModComp.CompProject._Closure$__.$I27-4 = ((string s) => s.ToLower().Contains("forge") || s.ToLower().Contains("fabric") || s.ToLower().Contains("quilt"))) : ModComp.CompProject._Closure$__.$I27-4) && (list2.Count != 2 || Operators.CompareString(Enumerable.Last<string>(list2).ToUpper(), Enumerable.Last<string>(list2), false) != 0))
  1675. {
  1676. list2 = new List<string>
  1677. {
  1678. text5
  1679. };
  1680. }
  1681. if (Operators.CompareString(text4, "", false) != 0)
  1682. {
  1683. list2.Add(text4);
  1684. }
  1685. }
  1686. list2 = Enumerable.ToList<string>(Enumerable.Distinct<string>(list2));
  1687. string text6 = "";
  1688. if (Enumerable.Any<string>(list2))
  1689. {
  1690. try
  1691. {
  1692. foreach (string text7 in list2)
  1693. {
  1694. bool flag = text7.ToLower().Contains("forge") || text7.ToLower().Contains("fabric") || text7.ToLower().Contains("quilt");
  1695. if ((HasModLoaderDescription || !flag) && (text7.Length >= 16 || !text7.ToLower().Contains("fabric") || !text7.ToLower().Contains("forge")))
  1696. {
  1697. if (flag && !text7.Contains("版") && text7.ToLower().Replace("forge", "").Replace("fabric", "").Replace("quilt", "").Length <= 3)
  1698. {
  1699. text7 = text7.Replace("Edition", "").Replace("edition", "").Trim().Capitalize() + " 版";
  1700. }
  1701. text7 = text7.Replace("forge", "Forge").Replace("neo", "Neo").Replace("fabric", "Fabric").Replace("quilt", "Quilt");
  1702. text6 = text6 + " | " + text7.Trim();
  1703. }
  1704. }
  1705. goto IL_577;
  1706. }
  1707. finally
  1708. {
  1709. List<string>.Enumerator enumerator2;
  1710. ((IDisposable)enumerator2).Dispose();
  1711. }
  1712. }
  1713. IL_571:
  1714. text6 = "";
  1715. IL_577:
  1716. return new KeyValuePair<string, string>(text, text6);
  1717. }
  1718. // Token: 0x060001F6 RID: 502 RVA: 0x00018AE0 File Offset: 0x00016CE0
  1719. public bool IsLike(ModComp.CompProject Project)
  1720. {
  1721. bool result;
  1722. if (Operators.CompareString(this._AuthenticationRepository, Project._AuthenticationRepository, false) == 0)
  1723. {
  1724. result = true;
  1725. }
  1726. else
  1727. {
  1728. VB$AnonymousDelegate_0<string, string> vb$AnonymousDelegate_ = (ModComp.CompProject._Closure$__.$I28-0 == null) ? (ModComp.CompProject._Closure$__.$I28-0 = delegate(string Data)
  1729. {
  1730. StringBuilder stringBuilder = new StringBuilder();
  1731. try
  1732. {
  1733. foreach (char value in Enumerable.Where<char>(Data, (ModComp.CompProject._Closure$__.$I28-1 == null) ? (ModComp.CompProject._Closure$__.$I28-1 = ((char c) => char.IsLetterOrDigit(c))) : ModComp.CompProject._Closure$__.$I28-1))
  1734. {
  1735. stringBuilder.Append(value);
  1736. }
  1737. }
  1738. finally
  1739. {
  1740. IEnumerator<char> enumerator;
  1741. if (enumerator != null)
  1742. {
  1743. enumerator.Dispose();
  1744. }
  1745. }
  1746. return stringBuilder.ToString().ToLower();
  1747. }) : ModComp.CompProject._Closure$__.$I28-0;
  1748. if (this.listRepository == Project.listRepository)
  1749. {
  1750. result = false;
  1751. }
  1752. else if (this.predicateRepository.Count == Project.predicateRepository.Count && !Enumerable.Any<ModComp.CompModLoaderType>(Enumerable.Except<ModComp.CompModLoaderType>(this.predicateRepository, Project.predicateRepository)))
  1753. {
  1754. if (this.pageRepository.Count == Project.pageRepository.Count && !Enumerable.Any<int>(Enumerable.Except<int>(this.pageRepository, Project.pageRepository)))
  1755. {
  1756. if (Operators.CompareString(this.RemoveTests(), Project.RemoveTests(), false) != 0 && Operators.CompareString(this.comparatorRepository, Project.comparatorRepository, false) != 0 && Operators.CompareString(this.mappingRepository, Project.mappingRepository, false) != 0 && Operators.CompareString(vb$AnonymousDelegate_(this.m_MerchantRepository), vb$AnonymousDelegate_(Project.m_MerchantRepository), false) != 0)
  1757. {
  1758. result = false;
  1759. }
  1760. else
  1761. {
  1762. ModBase.Log(string.Format("[Comp] 将 {0} ({1}) 与 {2} ({3}) 认定为相似工程", new object[]
  1763. {
  1764. this.comparatorRepository,
  1765. this.m_MerchantRepository,
  1766. Project.comparatorRepository,
  1767. Project.m_MerchantRepository
  1768. }), ModBase.LogLevel.Normal, "出现错误");
  1769. if (this.AddTests() == null && Project.AddTests() != null)
  1770. {
  1771. this.InstantiateTests(Project.AddTests());
  1772. }
  1773. if (this.AddTests() != null && Project.AddTests() == null)
  1774. {
  1775. Project.InstantiateTests(this.AddTests());
  1776. }
  1777. result = true;
  1778. }
  1779. }
  1780. else
  1781. {
  1782. result = false;
  1783. }
  1784. }
  1785. else
  1786. {
  1787. result = false;
  1788. }
  1789. }
  1790. return result;
  1791. }
  1792. // Token: 0x060001F7 RID: 503 RVA: 0x00003319 File Offset: 0x00001519
  1793. public override string ToString()
  1794. {
  1795. return string.Format("{0} ({1}): {2}", this._AuthenticationRepository, this.m_MerchantRepository, this.comparatorRepository);
  1796. }
  1797. // Token: 0x060001F8 RID: 504 RVA: 0x00018C94 File Offset: 0x00016E94
  1798. public override bool Equals(object obj)
  1799. {
  1800. ModComp.CompProject compProject = obj as ModComp.CompProject;
  1801. return compProject != null && Operators.CompareString(this._AuthenticationRepository, compProject._AuthenticationRepository, false) == 0;
  1802. }
  1803. // Token: 0x060001F9 RID: 505 RVA: 0x00003337 File Offset: 0x00001537
  1804. public static bool operator ==(ModComp.CompProject left, ModComp.CompProject right)
  1805. {
  1806. return EqualityComparer<ModComp.CompProject>.Default.Equals(left, right);
  1807. }
  1808. // Token: 0x060001FA RID: 506 RVA: 0x00003345 File Offset: 0x00001545
  1809. public static bool operator !=(ModComp.CompProject left, ModComp.CompProject right)
  1810. {
  1811. return !(left == right);
  1812. }
  1813. // Token: 0x040000E7 RID: 231
  1814. public readonly bool listRepository;
  1815. // Token: 0x040000E8 RID: 232
  1816. public readonly ModComp.CompType Type;
  1817. // Token: 0x040000E9 RID: 233
  1818. public readonly string m_MerchantRepository;
  1819. // Token: 0x040000EA RID: 234
  1820. public readonly string _AuthenticationRepository;
  1821. // Token: 0x040000EB RID: 235
  1822. public readonly List<int> m_AlgoRepository;
  1823. // Token: 0x040000EC RID: 236
  1824. public readonly string comparatorRepository;
  1825. // Token: 0x040000ED RID: 237
  1826. public readonly string mappingRepository;
  1827. // Token: 0x040000EE RID: 238
  1828. public readonly string m_TokenizerRepository;
  1829. // Token: 0x040000EF RID: 239
  1830. public readonly DateTime? _FilterRepository;
  1831. // Token: 0x040000F0 RID: 240
  1832. public readonly int databaseRepository;
  1833. // Token: 0x040000F1 RID: 241
  1834. public readonly List<ModComp.CompModLoaderType> predicateRepository;
  1835. // Token: 0x040000F2 RID: 242
  1836. public readonly List<string> m_PoolRepository;
  1837. // Token: 0x040000F3 RID: 243
  1838. public string _CustomerRepository;
  1839. // Token: 0x040000F4 RID: 244
  1840. public readonly List<int> pageRepository;
  1841. // Token: 0x040000F5 RID: 245
  1842. private bool m_InterceptorRepository;
  1843. // Token: 0x040000F6 RID: 246
  1844. private ModComp.CompDatabaseEntry _ContainerRepository;
  1845. }
  1846. // Token: 0x0200005B RID: 91
  1847. public class CompProjectRequest
  1848. {
  1849. // Token: 0x0600021B RID: 539 RVA: 0x00018D48 File Offset: 0x00016F48
  1850. public bool EnableTests()
  1851. {
  1852. if (this.Tag.StartsWithF("/", false) || !this.Source.HasFlag(ModComp.CompSourceType.CurseForge))
  1853. {
  1854. this.m_ParamsRepository.m_InvocationRepository = 0;
  1855. }
  1856. if (this.Tag.EndsWithF("/", false) || !this.Source.HasFlag(ModComp.CompSourceType.Modrinth))
  1857. {
  1858. this.m_ParamsRepository.m_MessageRepository = 0;
  1859. }
  1860. if (this.m_ParamsRepository.m_InvocationRepository != -1)
  1861. {
  1862. if (this.m_ParamsRepository.m_MessageRepository != -1)
  1863. {
  1864. return this.m_ParamsRepository.m_ServiceRepository < this.m_ParamsRepository.m_InvocationRepository || this.m_ParamsRepository.m_ProxyRepository < this.m_ParamsRepository.m_MessageRepository;
  1865. }
  1866. }
  1867. return true;
  1868. }
  1869. // Token: 0x0600021C RID: 540 RVA: 0x00018E1C File Offset: 0x0001701C
  1870. public CompProjectRequest(ModComp.CompType Type, ModComp.CompProjectStorage Storage, int TargetResultCount)
  1871. {
  1872. this.Tag = "";
  1873. this.processRepository = ModComp.CompModLoaderType.Any;
  1874. this.m_ParameterRepository = null;
  1875. this._RecordRepository = null;
  1876. this.Source = ModComp.CompSourceType.Any;
  1877. this.Type = Type;
  1878. this.m_ParamsRepository = Storage;
  1879. this.m_DispatcherRepository = TargetResultCount;
  1880. }
  1881. // Token: 0x0600021D RID: 541 RVA: 0x00018E6C File Offset: 0x0001706C
  1882. public string GetCurseForgeAddress()
  1883. {
  1884. string result;
  1885. if (!this.Source.HasFlag(ModComp.CompSourceType.CurseForge))
  1886. {
  1887. result = null;
  1888. }
  1889. else
  1890. {
  1891. if (this.Tag.StartsWithF("/", false))
  1892. {
  1893. this.m_ParamsRepository.m_InvocationRepository = 0;
  1894. }
  1895. if (this.m_ParamsRepository.m_InvocationRepository > -1 && this.m_ParamsRepository.m_InvocationRepository <= this.m_ParamsRepository.m_ServiceRepository)
  1896. {
  1897. result = null;
  1898. }
  1899. else
  1900. {
  1901. string text = string.Format("https://api.curseforge.com/v1/mods/search?gameId=432&sortField=2&sortOrder=desc&pageSize={0}", 40);
  1902. switch (this.Type)
  1903. {
  1904. case ModComp.CompType.Mod:
  1905. text += "&classId=6";
  1906. break;
  1907. case ModComp.CompType.ModPack:
  1908. text += "&classId=4471";
  1909. break;
  1910. }
  1911. text = text + "&categoryId=" + ((Operators.CompareString(this.Tag, "", false) == 0) ? "0" : this.Tag.BeforeFirst("/", false));
  1912. if (this.processRepository != ModComp.CompModLoaderType.Any)
  1913. {
  1914. text = text + "&modLoaderType=" + Conversions.ToString((int)this.processRepository);
  1915. }
  1916. if (!string.IsNullOrEmpty(this.m_ParameterRepository))
  1917. {
  1918. text = text + "&gameVersion=" + this.m_ParameterRepository;
  1919. }
  1920. if (!string.IsNullOrEmpty(this._RecordRepository))
  1921. {
  1922. text = text + "&searchFilter=" + WebUtility.UrlEncode(this._RecordRepository);
  1923. }
  1924. if (this.m_ParamsRepository.m_ServiceRepository > 0)
  1925. {
  1926. text = text + "&index=" + Conversions.ToString(this.m_ParamsRepository.m_ServiceRepository);
  1927. }
  1928. result = text;
  1929. }
  1930. }
  1931. return result;
  1932. }
  1933. // Token: 0x0600021E RID: 542 RVA: 0x00018FF4 File Offset: 0x000171F4
  1934. public string GetModrinthAddress()
  1935. {
  1936. string result;
  1937. if (!this.Source.HasFlag(ModComp.CompSourceType.Modrinth))
  1938. {
  1939. result = null;
  1940. }
  1941. else
  1942. {
  1943. if (this.Tag.EndsWithF("/", false))
  1944. {
  1945. this.m_ParamsRepository.m_MessageRepository = 0;
  1946. }
  1947. if (this.m_ParamsRepository.m_MessageRepository > -1 && this.m_ParamsRepository.m_MessageRepository <= this.m_ParamsRepository.m_ProxyRepository)
  1948. {
  1949. result = null;
  1950. }
  1951. else
  1952. {
  1953. string text = string.Format("https://api.modrinth.com/v2/search?limit={0}&index=relevance", 40);
  1954. if (!string.IsNullOrEmpty(this._RecordRepository))
  1955. {
  1956. text = text + "&query=" + WebUtility.UrlEncode(this._RecordRepository);
  1957. }
  1958. if (this.m_ParamsRepository.m_ProxyRepository > 0)
  1959. {
  1960. text = text + "&offset=" + Conversions.ToString(this.m_ParamsRepository.m_ProxyRepository);
  1961. }
  1962. List<string> list = new List<string>();
  1963. list.Add(string.Format("[\"project_type:{0}\"]", ModBase.GetStringFromEnum(this.Type).ToLower()));
  1964. if (!string.IsNullOrEmpty(this.Tag))
  1965. {
  1966. list.Add(string.Format("[\"categories:'{0}'\"]", this.Tag.AfterLast("/", false)));
  1967. }
  1968. if (this.processRepository != ModComp.CompModLoaderType.Any)
  1969. {
  1970. list.Add(string.Format("[\"categories:'{0}'\"]", ModBase.GetStringFromEnum(this.processRepository).ToLower()));
  1971. }
  1972. if (!string.IsNullOrEmpty(this.m_ParameterRepository))
  1973. {
  1974. list.Add(string.Format("[\"versions:'{0}'\"]", this.m_ParameterRepository));
  1975. }
  1976. text = text + "&facets=[" + string.Join(",", list) + "]";
  1977. result = text;
  1978. }
  1979. }
  1980. return result;
  1981. }
  1982. // Token: 0x0600021F RID: 543 RVA: 0x00019194 File Offset: 0x00017394
  1983. public override bool Equals(object obj)
  1984. {
  1985. ModComp.CompProjectRequest compProjectRequest = obj as ModComp.CompProjectRequest;
  1986. return compProjectRequest != null && this.Type == compProjectRequest.Type && this.m_DispatcherRepository == compProjectRequest.m_DispatcherRepository && Operators.CompareString(this.Tag, compProjectRequest.Tag, false) == 0 && this.processRepository == compProjectRequest.processRepository && this.Source == compProjectRequest.Source && Operators.CompareString(this.m_ParameterRepository, compProjectRequest.m_ParameterRepository, false) == 0 && Operators.CompareString(this._RecordRepository, compProjectRequest._RecordRepository, false) == 0;
  1987. }
  1988. // Token: 0x06000220 RID: 544 RVA: 0x00003466 File Offset: 0x00001666
  1989. public static bool operator ==(ModComp.CompProjectRequest left, ModComp.CompProjectRequest right)
  1990. {
  1991. return EqualityComparer<ModComp.CompProjectRequest>.Default.Equals(left, right);
  1992. }
  1993. // Token: 0x06000221 RID: 545 RVA: 0x00003474 File Offset: 0x00001674
  1994. public static bool operator !=(ModComp.CompProjectRequest left, ModComp.CompProjectRequest right)
  1995. {
  1996. return !(left == right);
  1997. }
  1998. // Token: 0x04000114 RID: 276
  1999. public ModComp.CompProjectStorage m_ParamsRepository;
  2000. // Token: 0x04000115 RID: 277
  2001. public int m_DispatcherRepository;
  2002. // Token: 0x04000116 RID: 278
  2003. public ModComp.CompType Type;
  2004. // Token: 0x04000117 RID: 279
  2005. public string Tag;
  2006. // Token: 0x04000118 RID: 280
  2007. public ModComp.CompModLoaderType processRepository;
  2008. // Token: 0x04000119 RID: 281
  2009. public string m_ParameterRepository;
  2010. // Token: 0x0400011A RID: 282
  2011. public string _RecordRepository;
  2012. // Token: 0x0400011B RID: 283
  2013. public ModComp.CompSourceType Source;
  2014. }
  2015. // Token: 0x0200005C RID: 92
  2016. public class CompProjectStorage
  2017. {
  2018. // Token: 0x06000223 RID: 547 RVA: 0x00003480 File Offset: 0x00001680
  2019. public CompProjectStorage()
  2020. {
  2021. this.m_ServiceRepository = 0;
  2022. this.m_InvocationRepository = -1;
  2023. this.m_ProxyRepository = 0;
  2024. this.m_MessageRepository = -1;
  2025. this._CreatorRepository = new List<ModComp.CompProject>();
  2026. this._InitializerRepository = null;
  2027. }
  2028. // Token: 0x0400011C RID: 284
  2029. public int m_ServiceRepository;
  2030. // Token: 0x0400011D RID: 285
  2031. public int m_InvocationRepository;
  2032. // Token: 0x0400011E RID: 286
  2033. public int m_ProxyRepository;
  2034. // Token: 0x0400011F RID: 287
  2035. public int m_MessageRepository;
  2036. // Token: 0x04000120 RID: 288
  2037. public List<ModComp.CompProject> _CreatorRepository;
  2038. // Token: 0x04000121 RID: 289
  2039. public string _InitializerRepository;
  2040. }
  2041. // Token: 0x0200005D RID: 93
  2042. public enum CompFileStatus
  2043. {
  2044. // Token: 0x04000123 RID: 291
  2045. Release = 1,
  2046. // Token: 0x04000124 RID: 292
  2047. Beta,
  2048. // Token: 0x04000125 RID: 293
  2049. Alpha
  2050. }
  2051. // Token: 0x0200005E RID: 94
  2052. public class CompFile
  2053. {
  2054. // Token: 0x06000225 RID: 549 RVA: 0x00019224 File Offset: 0x00017424
  2055. public string CountTests()
  2056. {
  2057. ModComp.CompFileStatus objectRepository = this.m_ObjectRepository;
  2058. string result;
  2059. if (objectRepository != ModComp.CompFileStatus.Release)
  2060. {
  2061. if (objectRepository != ModComp.CompFileStatus.Beta)
  2062. {
  2063. result = (ModBase._TokenRepository ? "Alpha 版" : "测试版");
  2064. }
  2065. else
  2066. {
  2067. result = (ModBase._TokenRepository ? "Beta 版" : "测试版");
  2068. }
  2069. }
  2070. else
  2071. {
  2072. result = "正式版";
  2073. }
  2074. return result;
  2075. }
  2076. // Token: 0x06000226 RID: 550 RVA: 0x000034B7 File Offset: 0x000016B7
  2077. public bool ExcludeTests()
  2078. {
  2079. return this._BridgeRepository != null && this._ItemRepository != null;
  2080. }
  2081. // Token: 0x06000227 RID: 551 RVA: 0x00019274 File Offset: 0x00017474
  2082. public ModNet.NetFile ToNetFile(string LocalAddress)
  2083. {
  2084. return new ModNet.NetFile(this._ItemRepository, LocalAddress + (LocalAddress.EndsWithF("\\", false) ? this._BridgeRepository : ""), new ModBase.FileChecker(-1L, -1L, this.m_ReponseRepository, true, false), true);
  2085. }
  2086. // Token: 0x06000228 RID: 552 RVA: 0x000192D0 File Offset: 0x000174D0
  2087. public CompFile(JObject Data, ModComp.CompType Type)
  2088. {
  2089. this._BridgeRepository = null;
  2090. this.m_ReponseRepository = null;
  2091. this.m_GlobalRepository = new List<string>();
  2092. this.exceptionRepository = new List<string>();
  2093. this.Type = Type;
  2094. if (Data.ContainsKey("FromCurseForge"))
  2095. {
  2096. this.singletonRepository = Data["FromCurseForge"].ToObject<bool>();
  2097. this.m_RegRepository = Data["Id"].ToString();
  2098. this._ProductRepository = Data["DisplayName"].ToString();
  2099. this._ListenerRepository = Data["ReleaseDate"].ToObject<DateTime>();
  2100. this._CollectionRepository = Data["DownloadCount"].ToObject<int>();
  2101. this.m_ObjectRepository = (ModComp.CompFileStatus)Data["Status"].ToObject<int>();
  2102. if (Data.ContainsKey("FileName"))
  2103. {
  2104. this._BridgeRepository = Data["FileName"].ToString();
  2105. }
  2106. if (Data.ContainsKey("DownloadUrls"))
  2107. {
  2108. this._ItemRepository = Data["DownloadUrls"].ToObject<List<string>>();
  2109. }
  2110. if (Data.ContainsKey("ModLoaders"))
  2111. {
  2112. this._VisitorRepository = Data["ModLoaders"].ToObject<List<ModComp.CompModLoaderType>>();
  2113. }
  2114. if (Data.ContainsKey("Hash"))
  2115. {
  2116. this.m_ReponseRepository = Data["Hash"].ToString();
  2117. }
  2118. if (Data.ContainsKey("GameVersions"))
  2119. {
  2120. this.m_ValueRepository = Data["GameVersions"].ToObject<List<string>>();
  2121. }
  2122. if (Data.ContainsKey("RawDependencies"))
  2123. {
  2124. this.m_GlobalRepository = Data["RawDependencies"].ToObject<List<string>>();
  2125. }
  2126. if (Data.ContainsKey("Dependencies"))
  2127. {
  2128. this.exceptionRepository = Data["Dependencies"].ToObject<List<string>>();
  2129. return;
  2130. }
  2131. }
  2132. else
  2133. {
  2134. this.singletonRepository = Data.ContainsKey("gameId");
  2135. if (this.singletonRepository)
  2136. {
  2137. this.m_RegRepository = (string)Data["id"];
  2138. this._ProductRepository = Data["displayName"].ToString().Replace("\t", "").Trim(new char[]
  2139. {
  2140. ' '
  2141. });
  2142. this._ListenerRepository = (DateTime)Data["fileDate"];
  2143. this.m_ObjectRepository = (ModComp.CompFileStatus)Data["releaseType"].ToObject<int>();
  2144. this._CollectionRepository = (int)Data["downloadCount"];
  2145. this._BridgeRepository = (string)Data["fileName"];
  2146. JToken jtoken = Enumerable.FirstOrDefault<JToken>(Enumerable.ToList<JToken>((JArray)Data["hashes"]), (ModComp.CompFile._Closure$__.$I19-0 == null) ? (ModComp.CompFile._Closure$__.$I19-0 = ((JToken s) => s["algo"].ToObject<int>() == 1)) : ModComp.CompFile._Closure$__.$I19-0);
  2147. this.m_ReponseRepository = (string)((jtoken != null) ? jtoken["value"] : null);
  2148. if (this.m_ReponseRepository == null)
  2149. {
  2150. JToken jtoken2 = Enumerable.FirstOrDefault<JToken>(Enumerable.ToList<JToken>((JArray)Data["hashes"]), (ModComp.CompFile._Closure$__.$I19-1 == null) ? (ModComp.CompFile._Closure$__.$I19-1 = ((JToken s) => s["algo"].ToObject<int>() == 2)) : ModComp.CompFile._Closure$__.$I19-1);
  2151. this.m_ReponseRepository = (string)((jtoken2 != null) ? jtoken2["value"] : null);
  2152. }
  2153. string text = Data["downloadUrl"].ToString();
  2154. if (Operators.CompareString(text, "", false) == 0)
  2155. {
  2156. text = string.Format("https://media.forgecdn.net/files/{0}/{1}/{2}", Conversions.ToInteger(this.m_RegRepository.ToString().Substring(0, 4)), Conversions.ToInteger(this.m_RegRepository.ToString().Substring(4)), this._BridgeRepository);
  2157. }
  2158. text = text.Replace(this._BridgeRepository, WebUtility.UrlEncode(this._BridgeRepository));
  2159. this._ItemRepository = Enumerable.ToList<string>(Enumerable.Distinct<string>(new List<string>
  2160. {
  2161. text.Replace("-service.overwolf.wtf", ".forgecdn.net").Replace("://edge", "://media"),
  2162. text.Replace("-service.overwolf.wtf", ".forgecdn.net"),
  2163. text.Replace("://edge", "://media"),
  2164. text
  2165. }));
  2166. this._ItemRepository.AddRange(Enumerable.ToList<string>(Enumerable.Select<string, string>(this._ItemRepository, (ModComp.CompFile._Closure$__.$I19-2 == null) ? (ModComp.CompFile._Closure$__.$I19-2 = ((string u) => ModDownload.DlSourceModGet(u))) : ModComp.CompFile._Closure$__.$I19-2)));
  2167. this._ItemRepository = Enumerable.ToList<string>(Enumerable.Distinct<string>(this._ItemRepository));
  2168. if (Type == ModComp.CompType.Mod)
  2169. {
  2170. this.m_GlobalRepository = Enumerable.ToList<string>(Enumerable.Select<JToken, string>(Enumerable.Where<JToken>(Data["dependencies"], (ModComp.CompFile._Closure$__.$I19-3 == null) ? (ModComp.CompFile._Closure$__.$I19-3 = ((JToken d) => d["relationType"].ToObject<int>() == 3 && d["modId"].ToObject<int>() != 306612 && d["modId"].ToObject<int>() != 634179)) : ModComp.CompFile._Closure$__.$I19-3), (ModComp.CompFile._Closure$__.$I19-4 == null) ? (ModComp.CompFile._Closure$__.$I19-4 = ((JToken d) => d["modId"].ToString())) : ModComp.CompFile._Closure$__.$I19-4));
  2171. }
  2172. List<string> list = Enumerable.ToList<string>(Enumerable.Select<JToken, string>(Data["gameVersions"], (ModComp.CompFile._Closure$__.$I19-5 == null) ? (ModComp.CompFile._Closure$__.$I19-5 = ((JToken t) => t.ToString().Trim().ToLower())) : ModComp.CompFile._Closure$__.$I19-5));
  2173. this.m_ValueRepository = Enumerable.ToList<string>(Enumerable.Select<string, string>(Enumerable.Where<string>(list, (ModComp.CompFile._Closure$__.$I19-6 == null) ? (ModComp.CompFile._Closure$__.$I19-6 = ((string v) => v.StartsWithF("1.", false))) : ModComp.CompFile._Closure$__.$I19-6), (ModComp.CompFile._Closure$__.$I19-7 == null) ? (ModComp.CompFile._Closure$__.$I19-7 = ((string v) => v.Replace("-snapshot", " 预览版"))) : ModComp.CompFile._Closure$__.$I19-7));
  2174. if (this.m_ValueRepository.Count > 1)
  2175. {
  2176. this.m_ValueRepository = Enumerable.ToList<string>(this.m_ValueRepository.Sort(new ModBase.CompareThreadStart<string>(ModMinecraft.VersionSortBoolean)));
  2177. if (Type == ModComp.CompType.ModPack)
  2178. {
  2179. this.m_ValueRepository = new List<string>
  2180. {
  2181. this.m_ValueRepository[0]
  2182. };
  2183. }
  2184. }
  2185. else if (this.m_ValueRepository.Count == 1)
  2186. {
  2187. this.m_ValueRepository = Enumerable.ToList<string>(this.m_ValueRepository);
  2188. }
  2189. else
  2190. {
  2191. this.m_ValueRepository = new List<string>
  2192. {
  2193. "未知版本"
  2194. };
  2195. }
  2196. this._VisitorRepository = new List<ModComp.CompModLoaderType>();
  2197. if (list.Contains("forge"))
  2198. {
  2199. this._VisitorRepository.Add(ModComp.CompModLoaderType.Forge);
  2200. }
  2201. if (list.Contains("fabric"))
  2202. {
  2203. this._VisitorRepository.Add(ModComp.CompModLoaderType.Fabric);
  2204. }
  2205. if (list.Contains("quilt"))
  2206. {
  2207. this._VisitorRepository.Add(ModComp.CompModLoaderType.Quilt);
  2208. }
  2209. if (list.Contains("neoforge"))
  2210. {
  2211. this._VisitorRepository.Add(ModComp.CompModLoaderType.NeoForge);
  2212. return;
  2213. }
  2214. }
  2215. else
  2216. {
  2217. this.m_RegRepository = (string)Data["id"];
  2218. this._ProductRepository = Data["name"].ToString().Replace("\t", "").Trim(new char[]
  2219. {
  2220. ' '
  2221. });
  2222. this._ListenerRepository = (DateTime)Data["date_published"];
  2223. this.m_ObjectRepository = ((Operators.CompareString(Data["version_type"].ToString(), "release", false) == 0) ? ModComp.CompFileStatus.Release : ((Operators.CompareString(Data["version_type"].ToString(), "beta", false) == 0) ? ModComp.CompFileStatus.Beta : ModComp.CompFileStatus.Alpha));
  2224. this._CollectionRepository = (int)Data["downloads"];
  2225. if (Enumerable.Any<JToken>((JArray)Data["files"]))
  2226. {
  2227. JToken jtoken3 = Data["files"][0];
  2228. this._BridgeRepository = (string)jtoken3["filename"];
  2229. this._ItemRepository = Enumerable.ToList<string>(Enumerable.Distinct<string>(new List<string>
  2230. {
  2231. (string)jtoken3["url"],
  2232. ModDownload.DlSourceModGet((string)jtoken3["url"])
  2233. }));
  2234. this.m_ReponseRepository = (string)jtoken3["hashes"]["sha1"];
  2235. }
  2236. if (Type == ModComp.CompType.Mod)
  2237. {
  2238. this.m_GlobalRepository = Enumerable.ToList<string>(Enumerable.Select<JToken, string>(Enumerable.Where<JToken>(Data["dependencies"], (ModComp.CompFile._Closure$__.$I19-8 == null) ? (ModComp.CompFile._Closure$__.$I19-8 = ((JToken d) => (string)d["dependency_type"] == "required" && (string)d["project_id"] != "P7dR8mSH" && (string)d["project_id"] != "qvIfYCYJ" && d["project_id"].ToString().Length > 0)) : ModComp.CompFile._Closure$__.$I19-8), (ModComp.CompFile._Closure$__.$I19-9 == null) ? (ModComp.CompFile._Closure$__.$I19-9 = ((JToken d) => d["project_id"].ToString())) : ModComp.CompFile._Closure$__.$I19-9));
  2239. }
  2240. List<string> list2 = Enumerable.ToList<string>(Enumerable.Select<JToken, string>(Data["game_versions"], (ModComp.CompFile._Closure$__.$I19-10 == null) ? (ModComp.CompFile._Closure$__.$I19-10 = ((JToken t) => t.ToString().Trim().ToLower())) : ModComp.CompFile._Closure$__.$I19-10));
  2241. this.m_ValueRepository = Enumerable.ToList<string>(Enumerable.Select<string, string>(Enumerable.Where<string>(list2, (ModComp.CompFile._Closure$__.$I19-11 == null) ? (ModComp.CompFile._Closure$__.$I19-11 = ((string v) => v.StartsWithF("1.", false) || v.StartsWithF("b1.", false))) : ModComp.CompFile._Closure$__.$I19-11), (ModComp.CompFile._Closure$__.$I19-12 == null) ? (ModComp.CompFile._Closure$__.$I19-12 = delegate(string v)
  2242. {
  2243. if (v.Contains("-"))
  2244. {
  2245. return v.BeforeFirst("-", false) + " 预览版";
  2246. }
  2247. if (!v.StartsWithF("b1.", false))
  2248. {
  2249. return v;
  2250. }
  2251. return "远古版本";
  2252. }) : ModComp.CompFile._Closure$__.$I19-12));
  2253. if (this.m_ValueRepository.Count > 1)
  2254. {
  2255. this.m_ValueRepository = Enumerable.ToList<string>(this.m_ValueRepository.Sort(new ModBase.CompareThreadStart<string>(ModMinecraft.VersionSortBoolean)));
  2256. if (Type == ModComp.CompType.ModPack)
  2257. {
  2258. this.m_ValueRepository = new List<string>
  2259. {
  2260. this.m_ValueRepository[0]
  2261. };
  2262. }
  2263. }
  2264. else if (this.m_ValueRepository.Count != 1)
  2265. {
  2266. if (Enumerable.Any<string>(list2, (ModComp.CompFile._Closure$__.$I19-13 == null) ? (ModComp.CompFile._Closure$__.$I19-13 = ((string v) => ModBase.RegexCheck(v, "[0-9]{2}w[0-9]{2}[a-z]{1}", 0))) : ModComp.CompFile._Closure$__.$I19-13))
  2267. {
  2268. this.m_ValueRepository = Enumerable.ToList<string>(Enumerable.Where<string>(list2, (ModComp.CompFile._Closure$__.$I19-14 == null) ? (ModComp.CompFile._Closure$__.$I19-14 = ((string v) => ModBase.RegexCheck(v, "[0-9]{2}w[0-9]{2}[a-z]{1}", 0))) : ModComp.CompFile._Closure$__.$I19-14));
  2269. }
  2270. else
  2271. {
  2272. this.m_ValueRepository = new List<string>
  2273. {
  2274. "未知版本"
  2275. };
  2276. }
  2277. }
  2278. List<string> list3 = Enumerable.ToList<string>(Enumerable.Select<JToken, string>(Data["loaders"], (ModComp.CompFile._Closure$__.$I19-15 == null) ? (ModComp.CompFile._Closure$__.$I19-15 = ((JToken v) => v.ToString())) : ModComp.CompFile._Closure$__.$I19-15));
  2279. this._VisitorRepository = new List<ModComp.CompModLoaderType>();
  2280. if (list3.Contains("forge"))
  2281. {
  2282. this._VisitorRepository.Add(ModComp.CompModLoaderType.Forge);
  2283. }
  2284. if (list3.Contains("neoforge"))
  2285. {
  2286. this._VisitorRepository.Add(ModComp.CompModLoaderType.NeoForge);
  2287. }
  2288. if (list3.Contains("fabric"))
  2289. {
  2290. this._VisitorRepository.Add(ModComp.CompModLoaderType.Fabric);
  2291. }
  2292. if (list3.Contains("quilt"))
  2293. {
  2294. this._VisitorRepository.Add(ModComp.CompModLoaderType.Quilt);
  2295. }
  2296. }
  2297. }
  2298. }
  2299. // Token: 0x06000229 RID: 553 RVA: 0x00019D50 File Offset: 0x00017F50
  2300. public JObject ToJson()
  2301. {
  2302. JObject jobject = new JObject();
  2303. jobject.Add("FromCurseForge", this.singletonRepository);
  2304. jobject.Add("Id", this.m_RegRepository);
  2305. jobject.Add("DisplayName", this._ProductRepository);
  2306. jobject.Add("ReleaseDate", this._ListenerRepository);
  2307. jobject.Add("DownloadCount", this._CollectionRepository);
  2308. jobject.Add("ModLoaders", new JArray(Enumerable.Select<ModComp.CompModLoaderType, int>(this._VisitorRepository, (ModComp.CompFile._Closure$__.$I20-0 == null) ? (ModComp.CompFile._Closure$__.$I20-0 = ((ModComp.CompModLoaderType m) => (int)m)) : ModComp.CompFile._Closure$__.$I20-0)));
  2309. jobject.Add("GameVersions", new JArray(this.m_ValueRepository));
  2310. jobject.Add("Status", (int)this.m_ObjectRepository);
  2311. if (this._BridgeRepository != null)
  2312. {
  2313. jobject.Add("FileName", this._BridgeRepository);
  2314. }
  2315. if (this._ItemRepository != null)
  2316. {
  2317. jobject.Add("DownloadUrls", new JArray(this._ItemRepository));
  2318. }
  2319. if (this.m_ReponseRepository != null)
  2320. {
  2321. jobject.Add("Hash", this.m_ReponseRepository);
  2322. }
  2323. jobject.Add("RawDependencies", new JArray(this.m_GlobalRepository));
  2324. jobject.Add("Dependencies", new JArray(this.exceptionRepository));
  2325. return jobject;
  2326. }
  2327. // Token: 0x0600022A RID: 554 RVA: 0x00019EC4 File Offset: 0x000180C4
  2328. public MyListItem ToListItem(MyListItem.ClickEventHandler OnClick, MyIconButton.ClickEventHandler OnSaveClick = null, bool BadDisplayName = false)
  2329. {
  2330. string text = BadDisplayName ? this._BridgeRepository : this._ProductRepository;
  2331. List<string> list = new List<string>();
  2332. if (Operators.CompareString(text, this._BridgeRepository.BeforeLast(".", false), false) != 0)
  2333. {
  2334. list.Add(this._BridgeRepository.BeforeLast(".", false));
  2335. }
  2336. ModComp.CompType type = this.Type;
  2337. if (type != ModComp.CompType.Mod)
  2338. {
  2339. if (type == ModComp.CompType.ModPack)
  2340. {
  2341. if (Enumerable.All<string>(this.m_ValueRepository, (ModComp.CompFile._Closure$__.$I21-0 == null) ? (ModComp.CompFile._Closure$__.$I21-0 = ((string v) => v.Contains("w"))) : ModComp.CompFile._Closure$__.$I21-0))
  2342. {
  2343. list.Add(string.Format("游戏版本 {0}", this.m_ValueRepository.Join("、")));
  2344. }
  2345. }
  2346. }
  2347. else if (Enumerable.Any<string>(this.exceptionRepository))
  2348. {
  2349. list.Add(Conversions.ToString(this.exceptionRepository.Count) + " 个前置 Mod");
  2350. }
  2351. if (this._CollectionRepository > 0)
  2352. {
  2353. list.Add("下载 " + ((this._CollectionRepository > 100000) ? (Conversions.ToString(Math.Round((double)this._CollectionRepository / 10000.0)) + " 万次") : (Conversions.ToString(this._CollectionRepository) + " 次")));
  2354. }
  2355. list.Add("更新于 " + ModBase.GetTimeSpanString(this._ListenerRepository - DateTime.Now, false));
  2356. if (this.m_ObjectRepository != ModComp.CompFileStatus.Release)
  2357. {
  2358. list.Add(this.CountTests());
  2359. }
  2360. MyListItem myListItem = new MyListItem
  2361. {
  2362. Title = text,
  2363. SnapsToDevicePixels = true,
  2364. Height = 42.0,
  2365. Type = MyListItem.CheckType.Clickable,
  2366. Tag = this,
  2367. Info = list.Join(",")
  2368. };
  2369. ModComp.CompFileStatus objectRepository = this.m_ObjectRepository;
  2370. if (objectRepository != ModComp.CompFileStatus.Release)
  2371. {
  2372. if (objectRepository != ModComp.CompFileStatus.Beta)
  2373. {
  2374. myListItem.Logo = ModBase.m_SerializerRepository + "Icons/A.png";
  2375. }
  2376. else
  2377. {
  2378. myListItem.Logo = ModBase.m_SerializerRepository + "Icons/B.png";
  2379. }
  2380. }
  2381. else
  2382. {
  2383. myListItem.Logo = ModBase.m_SerializerRepository + "Icons/R.png";
  2384. }
  2385. myListItem.Click += OnClick;
  2386. if (OnSaveClick != null)
  2387. {
  2388. MyIconButton myIconButton = new MyIconButton
  2389. {
  2390. Logo = "M819.392 0L1024 202.752v652.16a168.96 168.96 0 0 1-168.832 168.768h-104.192a47.296 47.296 0 0 1-10.752 0H283.776a47.232 47.232 0 0 1-10.752 0H168.832A168.96 168.96 0 0 1 0 854.912V168.768A168.96 168.96 0 0 1 168.832 0h650.56z m110.208 854.912V242.112l-149.12-147.776H168.896c-41.088 0-74.432 33.408-74.432 74.432v686.144c0 41.024 33.344 74.432 74.432 74.432h62.4v-190.528c0-33.408 27.136-60.544 60.544-60.544h440.448c33.408 0 60.544 27.136 60.544 60.544v190.528h62.4c41.088 0 74.432-33.408 74.432-74.432z m-604.032 74.432h372.864v-156.736H325.568v156.736z m403.52-596.48a47.168 47.168 0 1 1 0 94.336H287.872a47.168 47.168 0 1 1 0-94.336h441.216z m0-153.728a47.168 47.168 0 1 1 0 94.4H287.872a47.168 47.168 0 1 1 0-94.4h441.216z",
  2391. ToolTip = "另存为"
  2392. };
  2393. ToolTipService.SetPlacement(myIconButton, PlacementMode.Center);
  2394. ToolTipService.SetVerticalOffset(myIconButton, 30.0);
  2395. ToolTipService.SetHorizontalOffset(myIconButton, 2.0);
  2396. myIconButton.Click += OnSaveClick;
  2397. myListItem.Buttons = new MyIconButton[]
  2398. {
  2399. myIconButton
  2400. };
  2401. }
  2402. return myListItem;
  2403. }
  2404. // Token: 0x0600022B RID: 555 RVA: 0x000034CC File Offset: 0x000016CC
  2405. public override string ToString()
  2406. {
  2407. return string.Format("{0}: {1}", this.m_RegRepository, this._BridgeRepository);
  2408. }
  2409. // Token: 0x04000126 RID: 294
  2410. public readonly ModComp.CompType Type;
  2411. // Token: 0x04000127 RID: 295
  2412. public readonly bool singletonRepository;
  2413. // Token: 0x04000128 RID: 296
  2414. public readonly string m_RegRepository;
  2415. // Token: 0x04000129 RID: 297
  2416. public string _ProductRepository;
  2417. // Token: 0x0400012A RID: 298
  2418. public readonly DateTime _ListenerRepository;
  2419. // Token: 0x0400012B RID: 299
  2420. public readonly int _CollectionRepository;
  2421. // Token: 0x0400012C RID: 300
  2422. public readonly List<ModComp.CompModLoaderType> _VisitorRepository;
  2423. // Token: 0x0400012D RID: 301
  2424. public readonly List<string> m_ValueRepository;
  2425. // Token: 0x0400012E RID: 302
  2426. public readonly ModComp.CompFileStatus m_ObjectRepository;
  2427. // Token: 0x0400012F RID: 303
  2428. public readonly string _BridgeRepository;
  2429. // Token: 0x04000130 RID: 304
  2430. public List<string> _ItemRepository;
  2431. // Token: 0x04000131 RID: 305
  2432. public readonly string m_ReponseRepository;
  2433. // Token: 0x04000132 RID: 306
  2434. public readonly List<string> m_GlobalRepository;
  2435. // Token: 0x04000133 RID: 307
  2436. public readonly List<string> exceptionRepository;
  2437. }
  2438. }
  2439. }