Files
PCL2/pcl2_full/Plain Craft Launcher 2/PageSelectLeft.cs
1989-06-04 00:00:04 +09:00

1768 lines
63 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Microsoft.VisualBasic.CompilerServices;
using Newtonsoft.Json.Linq;
using PCL.My;
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Markup;
namespace PCL
{
// Token: 0x0200012F RID: 303
[DesignerGenerated]
public class PageSelectLeft : MyPageLeft, IComponentConnector
{
// Token: 0x06000AEC RID: 2796 RVA: 0x00008087 File Offset: 0x00006287
// Note: this type is marked as 'beforefieldinit'.
static PageSelectLeft()
{
PageSelectLeft.repositoryExpression = false;
PageSelectLeft.m_SystemExpression = false;
}
// Token: 0x06000AED RID: 2797 RVA: 0x00008095 File Offset: 0x00006295
public PageSelectLeft()
{
this.InitializeComponent();
}
// Token: 0x06000AEE RID: 2798 RVA: 0x0005C1D0 File Offset: 0x0005A3D0
public static void StartInstall()
{
string File = ModBase.SelectFile("压缩包文件(*.rar;*.zip)|*.rar;*.zip", "选择整合包压缩文件");
if (!string.IsNullOrEmpty(File))
{
ModBase.RunInThread(delegate
{
PageSelectLeft.StartInstall(File, null, true);
});
}
}
// Token: 0x06000AEF RID: 2799 RVA: 0x0005C218 File Offset: 0x0005A418
public static object StartInstall(string File, string VersionName = null, bool ShowHint = true)
{
ZipArchive zipArchive = null;
string archiveBaseFolder = "";
object result;
try
{
int num = -1;
try
{
zipArchive = new ZipArchive(new FileStream(File, FileMode.Open));
if (zipArchive.GetEntry("manifest.json") != null)
{
if (((JObject)ModBase.GetJson(ModBase.ReadFile(zipArchive.GetEntry("manifest.json").Open(), Encoding.UTF8)))["addons"] == null)
{
num = 0;
}
else
{
num = 3;
}
}
else if (zipArchive.GetEntry("modpack.json") != null)
{
num = 1;
}
else if (zipArchive.GetEntry("mmc-pack.json") != null)
{
num = 2;
}
else if (zipArchive.GetEntry("mcbbs.packmeta") != null)
{
num = 3;
}
else
{
try
{
foreach (ZipArchiveEntry zipArchiveEntry in zipArchive.Entries)
{
string[] array = zipArchiveEntry.FullName.Split(new char[]
{
'/'
});
archiveBaseFolder = array[0] + "/";
if (zipArchiveEntry.FullName.EndsWith("/versions/") && array.Count<string>() == 3)
{
num = 9;
break;
}
if (array.Count<string>() == 2)
{
if (Operators.CompareString(array[1], "manifest.json", true) != 0)
{
if (Operators.CompareString(array[1], "modpack.json", true) == 0)
{
num = 1;
break;
}
if (Operators.CompareString(array[1], "mmc-pack.json", true) == 0)
{
num = 2;
break;
}
if (Operators.CompareString(array[1], "mcbbs.packmeta", true) == 0)
{
num = 3;
break;
}
}
else
{
if (((JObject)ModBase.GetJson(ModBase.ReadFile(zipArchiveEntry.Open(), Encoding.UTF8)))["addons"] == null)
{
num = 0;
break;
}
num = 3;
archiveBaseFolder = "overrides/";
break;
}
}
}
}
finally
{
IEnumerator<ZipArchiveEntry> enumerator;
if (enumerator != null)
{
enumerator.Dispose();
}
}
}
}
catch (Exception ex)
{
ModBase.Log(ex, "打开整合包文件失败,文件可能损坏或为不支持的压缩包格式", ShowHint ? ModBase.LogLevel.Hint : ModBase.LogLevel.Normal, "出现错误");
return false;
}
switch (num)
{
case 0:
ModBase.Log("[Download] 整合包种类CurseForge", ModBase.LogLevel.Normal, "出现错误");
PageSelectLeft.InstallPackCurseForge(File, zipArchive, archiveBaseFolder, VersionName);
break;
case 1:
ModBase.Log("[Download] 整合包种类HMCL", ModBase.LogLevel.Normal, "出现错误");
PageSelectLeft.InstallPackHMCL(File, zipArchive, archiveBaseFolder);
break;
case 2:
ModBase.Log("[Download] 整合包种类MMC", ModBase.LogLevel.Normal, "出现错误");
PageSelectLeft.InstallPackMMC(File, zipArchive, archiveBaseFolder);
break;
case 3:
ModBase.Log("[Download] 整合包种类MCBBS", ModBase.LogLevel.Normal, "出现错误");
PageSelectLeft.InstallPackMCBBS(File, zipArchive, archiveBaseFolder);
break;
default:
if (num != 9)
{
if (ShowHint)
{
ModMain.Hint("未能识别该整合包的种类,无法安装!", ModMain.HintType.Critical, true);
}
else
{
ModBase.Log("[Download] 未能识别该整合包的种类,无法安装!", ModBase.LogLevel.Normal, "出现错误");
}
return false;
}
ModBase.Log("[Download] 整合包种类:压缩包", ModBase.LogLevel.Normal, "出现错误");
zipArchive.Dispose();
zipArchive = null;
PageSelectLeft.InstallPackCompress(File, archiveBaseFolder);
break;
}
result = true;
}
catch (Exception ex2)
{
ModBase.Log(ex2, "准备安装整合包失败", ModBase.LogLevel.Feedback, "出现错误");
result = false;
}
finally
{
if (zipArchive != null)
{
zipArchive.Dispose();
}
}
return result;
}
// Token: 0x06000AF0 RID: 2800 RVA: 0x0005C57C File Offset: 0x0005A77C
private static void UnpackFiles(string InstallTemp, string FileAddress)
{
if (!PageSelectLeft.repositoryExpression)
{
PageSelectLeft.repositoryExpression = true;
PageSelectLeft.m_SystemExpression = true;
try
{
ModBase.Log("[Download] 开始清理整合包安装缓存", ModBase.LogLevel.Normal, "出现错误");
ModBase.DeleteDirectory(ModBase.m_GlobalRule + "PackInstall\\", false);
ModBase.Log("[Download] 已清理整合包安装缓存", ModBase.LogLevel.Normal, "出现错误");
goto IL_86;
}
catch (Exception ex)
{
ModBase.Log(ex, "清理整合包安装缓存失败", ModBase.LogLevel.Debug, "出现错误");
goto IL_86;
}
finally
{
PageSelectLeft.m_SystemExpression = false;
}
}
if (PageSelectLeft.m_SystemExpression)
{
while (PageSelectLeft.m_SystemExpression)
{
Thread.Sleep(1);
}
}
IL_86:
Directory.CreateDirectory(InstallTemp + "modsinfo\\");
int num = 1;
Encoding entryNameEncoding = Encoding.Default;
checked
{
try
{
IL_9F:
Directory.CreateDirectory(InstallTemp);
ModBase.DeleteDirectory(InstallTemp, false);
ZipFile.ExtractToDirectory(FileAddress, InstallTemp, entryNameEncoding);
}
catch (Exception ex2)
{
ModBase.Log(ex2, "第 " + Conversions.ToString(num) + " 次解压尝试失败", ModBase.LogLevel.Debug, "出现错误");
if (ex2 is ArgumentException)
{
entryNameEncoding = Encoding.UTF8;
ModBase.Log("[Download] 已切换压缩包解压编码", ModBase.LogLevel.Normal, "出现错误");
}
if (num >= 5)
{
throw;
}
Thread.Sleep(num * 0x7D0);
num++;
goto IL_9F;
}
}
}
// Token: 0x06000AF1 RID: 2801 RVA: 0x0005C6CC File Offset: 0x0005A8CC
private static ModLoader.LoaderCombo<string> InstallPackCurseForgeLoader(string FileAddress, ZipArchive Archive, string ArchiveBaseFolder, string VersionName)
{
PageSelectLeft._Closure$__7-0 CS$<>8__locals1 = new PageSelectLeft._Closure$__7-0(CS$<>8__locals1);
CS$<>8__locals1.$VB$Local_FileAddress = FileAddress;
CS$<>8__locals1.$VB$Local_ArchiveBaseFolder = ArchiveBaseFolder;
CS$<>8__locals1.$VB$Local_VersionName = VersionName;
JObject jobject;
try
{
jobject = (JObject)ModBase.GetJson(ModBase.ReadFile(Archive.GetEntry(CS$<>8__locals1.$VB$Local_ArchiveBaseFolder + "manifest.json").Open(), null));
if (jobject["minecraft"] == null || jobject["minecraft"]["version"] == null)
{
throw new Exception("整合包未提供 Minecraft 版本信息");
}
}
catch (Exception ex)
{
ModBase.Log(ex, "整合包安装信息存在问题", ModBase.LogLevel.Hint, "出现错误");
return null;
}
string dispatcherRule = null;
string initializerRule = null;
try
{
foreach (JToken jtoken in ((IEnumerable<JToken>)(jobject["minecraft"]["modLoaders"] ?? new byte[0])))
{
string text = (jtoken["id"] ?? "").ToString().ToLower();
if (text.StartsWith("forge-"))
{
if (text.Contains("recommended"))
{
ModBase.Log("[Download] 该整合包版本过老,已不支持进行安装!", ModBase.LogLevel.Hint, "出现错误");
return null;
}
try
{
ModBase.Log("[Download] 整合包 Forge 版本:" + text, ModBase.LogLevel.Normal, "出现错误");
dispatcherRule = text.Split(new char[]
{
'-'
})[1];
break;
}
catch (Exception ex2)
{
ModBase.Log(ex2, "读取整合包 Forge 版本失败:" + text, ModBase.LogLevel.Debug, "出现错误");
continue;
}
}
if (text.StartsWith("fabric-"))
{
try
{
ModBase.Log("[Download] 整合包 Fabric 版本:" + text, ModBase.LogLevel.Normal, "出现错误");
initializerRule = text.Split(new char[]
{
'-'
})[1];
break;
}
catch (Exception ex3)
{
ModBase.Log(ex3, "读取整合包 Fabric 版本失败:" + text, ModBase.LogLevel.Debug, "出现错误");
}
}
}
}
finally
{
IEnumerator<JToken> enumerator;
if (enumerator != null)
{
enumerator.Dispose();
}
}
CS$<>8__locals1.$VB$Local_InstallTemp = ModBase.m_GlobalRule + "PackInstall\\" + Conversions.ToString(ModBase.RandomInteger(0, 0x186A0)) + "\\";
ArrayList arrayList = new ArrayList();
CS$<>8__locals1.$VB$Local_OverrideHome = (string)(jobject["overrides"] ?? "");
if (Operators.CompareString(CS$<>8__locals1.$VB$Local_OverrideHome, "", true) != 0)
{
arrayList.Add(new ModLoader.LoaderTask<string, int>("解压整合包文件", delegate(ModLoader.LoaderTask<string, int> Task)
{
PageSelectLeft.UnpackFiles(CS$<>8__locals1.$VB$Local_InstallTemp, CS$<>8__locals1.$VB$Local_FileAddress);
Task.Progress = 0.5;
if (Directory.Exists(CS$<>8__locals1.$VB$Local_InstallTemp + CS$<>8__locals1.$VB$Local_ArchiveBaseFolder + CS$<>8__locals1.$VB$Local_OverrideHome))
{
MyWpfExtension.RunFactory().FileSystem.CopyDirectory(CS$<>8__locals1.$VB$Local_InstallTemp + CS$<>8__locals1.$VB$Local_ArchiveBaseFolder + CS$<>8__locals1.$VB$Local_OverrideHome, ModMinecraft.m_ResolverIterator + "versions\\" + CS$<>8__locals1.$VB$Local_VersionName);
}
else
{
ModBase.Log("[Download] 整合包中未找到 override 目录,已跳过", ModBase.LogLevel.Normal, "出现错误");
}
Task.Progress = 0.9;
ModBase.WriteIni(ModMinecraft.m_ResolverIterator + "versions\\" + CS$<>8__locals1.$VB$Local_VersionName + "\\PCL\\Setup.ini", "VersionArgumentIndie", Conversions.ToString(1));
}, null, ThreadPriority.Normal)
{
ProgressWeight = (double)new FileInfo(CS$<>8__locals1.$VB$Local_FileAddress).Length / 1024.0 / 1024.0 / 6.0,
Block = false
});
}
CS$<>8__locals1.$VB$Local_ModFileList = new List<ModNet.NetFile>();
try
{
foreach (JToken jtoken2 in ((IEnumerable<JToken>)(jobject["files"] ?? new byte[0])))
{
if (jtoken2["projectID"] != null && jtoken2["fileID"] != null)
{
if (jtoken2["required"] == null || jtoken2["required"].ToObject<bool>())
{
int value = (int)jtoken2["projectID"];
int value2 = (int)jtoken2["fileID"];
if (ModBase.errorRule)
{
ModBase.Log("[Download] 需要的 Mod" + Conversions.ToString(value) + "-" + Conversions.ToString(value2), ModBase.LogLevel.Normal, "出现错误");
}
CS$<>8__locals1.$VB$Local_ModFileList.Add(new ModNet.NetFile(new string[]
{
string.Concat(new string[]
{
"https://addons-ecs.forgesvc.net/api/v2/addon/",
Conversions.ToString(value),
"/file/",
Conversions.ToString(value2),
"/"
}),
string.Concat(new string[]
{
"https://cursemeta.dries007.net/",
Conversions.ToString(value),
"/",
Conversions.ToString(value2),
".json"
})
}, string.Concat(new string[]
{
CS$<>8__locals1.$VB$Local_InstallTemp,
"modsinfo\\",
Conversions.ToString(value),
"-",
Conversions.ToString(value2),
".json"
}), null));
}
}
else
{
ModMain.Hint("某项 Mod 缺少必要信息,已跳过:" + jtoken2.ToString(), ModMain.HintType.Info, true);
}
}
}
finally
{
IEnumerator<JToken> enumerator2;
if (enumerator2 != null)
{
enumerator2.Dispose();
}
}
if (CS$<>8__locals1.$VB$Local_ModFileList.Count > 0)
{
arrayList.Add(new ModLoader.LoaderTask<int, List<JObject>>("获取 Mod 下载信息", delegate(ModLoader.LoaderTask<int, List<JObject>> Task)
{
Directory.CreateDirectory(CS$<>8__locals1.$VB$Local_InstallTemp + "modsinfo\\");
int count = CS$<>8__locals1.$VB$Local_ModFileList.Count;
List<ModNet.NetFile> list = new List<ModNet.NetFile>();
List<JObject> list2 = new List<JObject>();
list.AddRange(CS$<>8__locals1.$VB$Local_ModFileList);
int num4 = 1;
while (list.Count > 0)
{
List<ModNet.NetFile> list3 = new List<ModNet.NetFile>();
try
{
foreach (ModNet.NetFile netFile in list)
{
list3.Add(new ModNet.NetFile(new string[]
{
netFile.identifierRule[0].regRule
}, netFile.mapRule, netFile.iteratorAlgo));
}
}
finally
{
List<ModNet.NetFile>.Enumerator enumerator5;
((IDisposable)enumerator5).Dispose();
}
list = list3;
ModBase.Log(string.Format("[Download] 开始第 {0} 次 Mod 信息读取,剩余 {1} 个文件", num4, list.Count), ModBase.LogLevel.Normal, "出现错误");
ModNet.LoaderDownload loaderDownload = new ModNet.LoaderDownload("获取 Mod 下载信息(内部)", list);
loaderDownload.Start(null, false);
while (loaderDownload.State == ModBase.LoadState.Loading)
{
Task.Progress = (double)list2.Count / (double)count + (double)list.Count / (double)count * loaderDownload.Progress * 0.85;
Thread.Sleep(0xA);
}
if (loaderDownload.State == ModBase.LoadState.Failed)
{
throw loaderDownload.Error;
}
List<ModNet.NetFile> list4 = new List<ModNet.NetFile>();
list4.AddRange(list);
try
{
foreach (ModNet.NetFile netFile2 in list4)
{
string text3 = ModBase.ReadFile(netFile2.mapRule);
if (text3.EndsWith("}"))
{
try
{
JObject item = (JObject)ModBase.GetJson(text3);
list2.Add(item);
list.Remove(netFile2);
}
catch (Exception ex4)
{
ModBase.Log("[Download] 错误的 Mod 文件信息:" + netFile2.m_ComposerRule, ModBase.LogLevel.Normal, "出现错误");
}
}
}
}
finally
{
List<ModNet.NetFile>.Enumerator enumerator6;
((IDisposable)enumerator6).Dispose();
}
checked
{
num4++;
if (num4 > 0xA)
{
throw new Exception("无法获取 Mod 下载信息,十次重试后文件仍有 " + Conversions.ToString(list.Count) + " 个损坏文件!");
}
}
}
Task.Output = list2;
}, null, ThreadPriority.Normal)
{
ProgressWeight = (double)CS$<>8__locals1.$VB$Local_ModFileList.Count / 2.0
});
arrayList.Add(new ModLoader.LoaderTask<List<JObject>, List<ModNet.NetFile>>("构造 Mod 下载信息", delegate(ModLoader.LoaderTask<List<JObject>, List<ModNet.NetFile>> Task)
{
List<ModNet.NetFile> list = new List<ModNet.NetFile>();
try
{
foreach (JObject data in Task.Input)
{
list.Add(new ModDownload.DlCfFile(data, false).GetDownloadFile(ModMinecraft.m_ResolverIterator + "versions\\" + CS$<>8__locals1.$VB$Local_VersionName + "\\mods\\", false));
Task.Progress += 1.0 / (double)(checked(1 + CS$<>8__locals1.$VB$Local_ModFileList.Count));
}
}
finally
{
List<JObject>.Enumerator enumerator5;
((IDisposable)enumerator5).Dispose();
}
Task.Output = list;
}, null, ThreadPriority.Normal)
{
ProgressWeight = (double)CS$<>8__locals1.$VB$Local_ModFileList.Count / 30.0,
Show = false
});
arrayList.Add(new ModNet.LoaderDownload("下载 Mod", new List<ModNet.NetFile>())
{
ProgressWeight = (double)CS$<>8__locals1.$VB$Local_ModFileList.Count * 1.5
});
}
ModDownloadLib.McInstallRequest request = new ModDownloadLib.McInstallRequest
{
m_CandidateRule = CS$<>8__locals1.$VB$Local_VersionName,
m_DescriptorRule = jobject["minecraft"]["version"].ToString(),
_DispatcherRule = dispatcherRule,
_InitializerRule = initializerRule
};
double num = 0.0;
try
{
foreach (object obj in arrayList)
{
object objectValue = RuntimeHelpers.GetObjectValue(obj);
num = Conversions.ToDouble(Operators.AddObject(num, NewLateBinding.LateGet(objectValue, null, "ProgressWeight", new object[0], null, null, null)));
}
}
finally
{
IEnumerator enumerator3;
if (enumerator3 is IDisposable)
{
(enumerator3 as IDisposable).Dispose();
}
}
ArrayList arrayList2 = ModDownloadLib.McInstallLoader(request, true);
checked
{
ModLoader.LoaderCombo<string> result;
if (arrayList2 == null)
{
result = null;
}
else
{
double num2 = 0.0;
try
{
foreach (object obj2 in arrayList2)
{
object objectValue2 = RuntimeHelpers.GetObjectValue(obj2);
num2 = Conversions.ToDouble(Operators.AddObject(num2, NewLateBinding.LateGet(objectValue2, null, "ProgressWeight", new object[0], null, null, null)));
}
}
finally
{
IEnumerator enumerator4;
if (enumerator4 is IDisposable)
{
(enumerator4 as IDisposable).Dispose();
}
}
ArrayList arrayList3 = new ArrayList();
arrayList3.Add(new ModLoader.LoaderTask<string, List<ModNet.NetFile>>("分析游戏支持库文件(副加载器)", delegate(ModLoader.LoaderTask<string, List<ModNet.NetFile>> Task)
{
Task.Output = ModMinecraft.McLibFix(new ModMinecraft.McVersion(CS$<>8__locals1.$VB$Local_VersionName), false);
}, null, ThreadPriority.Normal)
{
ProgressWeight = 1.0,
Show = false
});
arrayList3.Add(new ModNet.LoaderDownload("下载游戏支持库文件(副加载器)", new List<ModNet.NetFile>())
{
ProgressWeight = 7.0,
Show = false
});
ArrayList arrayList4 = new ArrayList();
arrayList4.Add(new ModLoader.LoaderCombo<string>("整合包安装", arrayList)
{
Show = false,
Block = false,
ProgressWeight = num
});
arrayList4.Add(new ModLoader.LoaderCombo<string>("游戏安装", arrayList2)
{
Show = false,
ProgressWeight = num2
});
arrayList4.Add(new ModLoader.LoaderCombo<string>("下载游戏支持库文件", arrayList3)
{
ProgressWeight = 8.0
});
string text2 = "CurseForge 整合包安装:" + CS$<>8__locals1.$VB$Local_VersionName + " ";
object loaderTaskbarLock = ModLoader.LoaderTaskbarLock;
ObjectFlowControl.CheckForSyncLockOnValueType(loaderTaskbarLock);
lock (loaderTaskbarLock)
{
int num3 = ModLoader.LoaderTaskbar.Count - 1;
for (int i = 0; i <= num3; i++)
{
if (Operators.ConditionalCompareObjectEqual(NewLateBinding.LateGet(ModLoader.LoaderTaskbar[i], null, "Name", new object[0], null, null, null), text2, true))
{
ModMain.Hint("该整合包正在安装中!", ModMain.HintType.Critical, true);
return null;
}
}
}
result = new ModLoader.LoaderCombo<string>(text2, arrayList4)
{
OnStateChanged = new ModLoader.LoaderStateDelegate(ModDownloadLib.McInstallState)
};
}
return result;
}
}
// Token: 0x06000AF2 RID: 2802 RVA: 0x0005CFD0 File Offset: 0x0005B1D0
private static void InstallPackCurseForge(string FileAddress, ZipArchive Archive, string ArchiveBaseFolder, string VersionName = null)
{
bool flag = VersionName == null;
if (VersionName == null)
{
JObject jobject;
try
{
jobject = (JObject)ModBase.GetJson(ModBase.ReadFile(Archive.GetEntry(ArchiveBaseFolder + "manifest.json").Open(), null));
if (jobject["minecraft"] == null || jobject["minecraft"]["version"] == null)
{
throw new Exception("整合包未提供 Minecraft 版本信息");
}
}
catch (Exception ex)
{
ModBase.Log(ex, "整合包安装信息存在问题", ModBase.LogLevel.Hint, "出现错误");
return;
}
string text = (string)(jobject["name"] ?? "");
ValidateFolderName validateFolderName = new ValidateFolderName(ModMinecraft.m_ResolverIterator + "versions", true, true);
if (Operators.CompareString(validateFolderName.Validate(text), "", true) != 0)
{
text = "";
}
VersionName = ModMain.MyMsgBoxInput(text, new Collection<Validate>
{
validateFolderName
}, "", "输入版本名", "确定", "取消", false);
if (string.IsNullOrEmpty(VersionName))
{
return;
}
}
ModLoader.LoaderCombo<string> loaderCombo = PageSelectLeft.InstallPackCurseForgeLoader(FileAddress, Archive, ArchiveBaseFolder, VersionName);
if (loaderCombo != null)
{
loaderCombo.Start(ModMinecraft.m_ResolverIterator + "versions\\" + VersionName + "\\", false);
ModLoader.LoaderTaskbarAdd(loaderCombo);
ModMain.m_GetterFilter.BtnExtraDownload.ShowRefresh();
if (flag)
{
ModMain.m_GetterFilter.BtnExtraDownload.Ribble();
}
}
}
// Token: 0x06000AF3 RID: 2803 RVA: 0x0005D148 File Offset: 0x0005B348
private static void InstallPackHMCL(string FileAddress, ZipArchive Archive, string ArchiveBaseFolder)
{
PageSelectLeft._Closure$__9-0 CS$<>8__locals1 = new PageSelectLeft._Closure$__9-0(CS$<>8__locals1);
CS$<>8__locals1.$VB$Local_FileAddress = FileAddress;
CS$<>8__locals1.$VB$Local_ArchiveBaseFolder = ArchiveBaseFolder;
JObject jobject;
try
{
jobject = (JObject)ModBase.GetJson(ModBase.ReadFile(Archive.GetEntry(CS$<>8__locals1.$VB$Local_ArchiveBaseFolder + "modpack.json").Open(), Encoding.UTF8));
}
catch (Exception ex)
{
ModBase.Log(ex, "整合包安装信息存在问题", ModBase.LogLevel.Hint, "出现错误");
return;
}
string text = (string)(jobject["name"] ?? "");
ValidateFolderName validateFolderName = new ValidateFolderName(ModMinecraft.m_ResolverIterator + "versions", true, true);
if (Operators.CompareString(validateFolderName.Validate(text), "", true) != 0)
{
text = "";
}
CS$<>8__locals1.$VB$Local_VersionName = ModMain.MyMsgBoxInput(text, new Collection<Validate>
{
validateFolderName
}, "", "输入版本名", "确定", "取消", false);
checked
{
if (CS$<>8__locals1.$VB$Local_VersionName != null)
{
CS$<>8__locals1.$VB$Local_InstallTemp = ModBase.m_GlobalRule + "PackInstall\\" + Conversions.ToString(ModBase.RandomInteger(0, 0x186A0)) + "\\";
ArrayList arrayList = new ArrayList();
arrayList.Add(new ModLoader.LoaderTask<string, int>("解压整合包文件", delegate(ModLoader.LoaderTask<string, int> Task)
{
PageSelectLeft.UnpackFiles(CS$<>8__locals1.$VB$Local_InstallTemp, CS$<>8__locals1.$VB$Local_FileAddress);
Task.Progress = 0.5;
if (Directory.Exists(CS$<>8__locals1.$VB$Local_InstallTemp + CS$<>8__locals1.$VB$Local_ArchiveBaseFolder + "minecraft"))
{
MyWpfExtension.RunFactory().FileSystem.CopyDirectory(CS$<>8__locals1.$VB$Local_InstallTemp + CS$<>8__locals1.$VB$Local_ArchiveBaseFolder + "minecraft", ModMinecraft.m_ResolverIterator + "versions\\" + CS$<>8__locals1.$VB$Local_VersionName);
}
else
{
ModBase.Log("[Download] 整合包中未找到 minecraft override 目录,已跳过", ModBase.LogLevel.Normal, "出现错误");
}
Task.Progress = 0.9;
ModBase.WriteIni(ModMinecraft.m_ResolverIterator + "versions\\" + CS$<>8__locals1.$VB$Local_VersionName + "\\PCL\\Setup.ini", "VersionArgumentIndie", Conversions.ToString(1));
}, null, ThreadPriority.Normal)
{
ProgressWeight = (double)new FileInfo(CS$<>8__locals1.$VB$Local_FileAddress).Length / 1024.0 / 1024.0 / 6.0,
Block = false
});
if (jobject["gameVersion"] == null)
{
throw new Exception("整合包未提供游戏版本信息");
}
ModDownloadLib.McInstallRequest request = new ModDownloadLib.McInstallRequest
{
m_CandidateRule = CS$<>8__locals1.$VB$Local_VersionName,
m_DescriptorRule = jobject["gameVersion"].ToString()
};
double num = 0.0;
try
{
foreach (object obj in arrayList)
{
object objectValue = RuntimeHelpers.GetObjectValue(obj);
num = Conversions.ToDouble(Operators.AddObject(num, NewLateBinding.LateGet(objectValue, null, "ProgressWeight", new object[0], null, null, null)));
}
}
finally
{
IEnumerator enumerator;
if (enumerator is IDisposable)
{
(enumerator as IDisposable).Dispose();
}
}
ArrayList arrayList2 = ModDownloadLib.McInstallLoader(request, true);
if (arrayList2 != null)
{
double num2 = 0.0;
try
{
foreach (object obj2 in arrayList2)
{
object objectValue2 = RuntimeHelpers.GetObjectValue(obj2);
num2 = Conversions.ToDouble(Operators.AddObject(num2, NewLateBinding.LateGet(objectValue2, null, "ProgressWeight", new object[0], null, null, null)));
}
}
finally
{
IEnumerator enumerator2;
if (enumerator2 is IDisposable)
{
(enumerator2 as IDisposable).Dispose();
}
}
ArrayList arrayList3 = new ArrayList();
arrayList3.Add(new ModLoader.LoaderTask<string, string>("重命名版本 Json副加载器", delegate(ModLoader.LoaderTask<string, string> a0)
{
base._Lambda$__1();
}, null, ThreadPriority.Normal)
{
ProgressWeight = 0.1,
Show = false
});
arrayList3.Add(new ModLoader.LoaderTask<string, List<ModNet.NetFile>>("分析游戏支持库文件(副加载器)", delegate(ModLoader.LoaderTask<string, List<ModNet.NetFile>> Task)
{
Task.Output = ModMinecraft.McLibFix(new ModMinecraft.McVersion(CS$<>8__locals1.$VB$Local_VersionName), false);
}, null, ThreadPriority.Normal)
{
ProgressWeight = 1.0,
Show = false
});
arrayList3.Add(new ModNet.LoaderDownload("下载游戏支持库文件(副加载器)", new List<ModNet.NetFile>())
{
ProgressWeight = 7.0,
Show = false
});
ArrayList arrayList4 = new ArrayList();
arrayList4.Add(new ModLoader.LoaderCombo<string>("游戏安装", arrayList2)
{
Show = false,
Block = false,
ProgressWeight = num2
});
arrayList4.Add(new ModLoader.LoaderCombo<string>("整合包安装", arrayList)
{
Show = false,
ProgressWeight = num
});
arrayList4.Add(new ModLoader.LoaderCombo<string>("下载游戏支持库文件", arrayList3)
{
ProgressWeight = 8.0
});
string text2 = "HMCL 整合包安装:" + CS$<>8__locals1.$VB$Local_VersionName + " ";
object loaderTaskbarLock = ModLoader.LoaderTaskbarLock;
ObjectFlowControl.CheckForSyncLockOnValueType(loaderTaskbarLock);
lock (loaderTaskbarLock)
{
int num3 = ModLoader.LoaderTaskbar.Count - 1;
for (int i = 0; i <= num3; i++)
{
if (Operators.ConditionalCompareObjectEqual(NewLateBinding.LateGet(ModLoader.LoaderTaskbar[i], null, "Name", new object[0], null, null, null), text2, true))
{
ModMain.Hint("该整合包正在安装中!", ModMain.HintType.Critical, true);
return;
}
}
}
ModLoader.LoaderCombo<string> loaderCombo = new ModLoader.LoaderCombo<string>(text2, arrayList4);
loaderCombo.OnStateChanged = new ModLoader.LoaderStateDelegate(ModDownloadLib.McInstallState);
loaderCombo.Start(ModMinecraft.m_ResolverIterator + "versions\\" + CS$<>8__locals1.$VB$Local_VersionName + "\\", false);
ModLoader.LoaderTaskbarAdd(loaderCombo);
ModMain.m_GetterFilter.BtnExtraDownload.ShowRefresh();
ModMain.m_GetterFilter.BtnExtraDownload.Ribble();
}
}
}
}
// Token: 0x06000AF4 RID: 2804 RVA: 0x0005D644 File Offset: 0x0005B844
private static void InstallPackMMC(string FileAddress, ZipArchive Archive, string ArchiveBaseFolder)
{
PageSelectLeft._Closure$__10-0 CS$<>8__locals1 = new PageSelectLeft._Closure$__10-0(CS$<>8__locals1);
CS$<>8__locals1.$VB$Local_FileAddress = FileAddress;
CS$<>8__locals1.$VB$Local_ArchiveBaseFolder = ArchiveBaseFolder;
JObject jobject;
string str;
try
{
jobject = (JObject)ModBase.GetJson(ModBase.ReadFile(Archive.GetEntry(CS$<>8__locals1.$VB$Local_ArchiveBaseFolder + "mmc-pack.json").Open(), Encoding.UTF8));
str = ModBase.ReadFile(Archive.GetEntry(CS$<>8__locals1.$VB$Local_ArchiveBaseFolder + "instance.cfg").Open(), Encoding.UTF8);
}
catch (Exception ex)
{
ModBase.Log(ex, "整合包安装信息存在问题", ModBase.LogLevel.Hint, "出现错误");
return;
}
string text = ModBase.RegexSeek(str, "(?<=\\nname\\=)[^\\n]+", RegexOptions.None) ?? "";
ValidateFolderName validateFolderName = new ValidateFolderName(ModMinecraft.m_ResolverIterator + "versions", true, true);
if (Operators.CompareString(validateFolderName.Validate(text), "", true) != 0)
{
text = "";
}
CS$<>8__locals1.$VB$Local_VersionName = ModMain.MyMsgBoxInput(text, new Collection<Validate>
{
validateFolderName
}, "", "输入版本名", "确定", "取消", false);
checked
{
if (CS$<>8__locals1.$VB$Local_VersionName != null)
{
CS$<>8__locals1.$VB$Local_InstallTemp = ModBase.m_GlobalRule + "PackInstall\\" + Conversions.ToString(ModBase.RandomInteger(0, 0x186A0)) + "\\";
ArrayList arrayList = new ArrayList();
arrayList.Add(new ModLoader.LoaderTask<string, int>("解压整合包文件", delegate(ModLoader.LoaderTask<string, int> Task)
{
PageSelectLeft.UnpackFiles(CS$<>8__locals1.$VB$Local_InstallTemp, CS$<>8__locals1.$VB$Local_FileAddress);
Task.Progress = 0.5;
if (Directory.Exists(CS$<>8__locals1.$VB$Local_InstallTemp + CS$<>8__locals1.$VB$Local_ArchiveBaseFolder + ".minecraft"))
{
MyWpfExtension.RunFactory().FileSystem.CopyDirectory(CS$<>8__locals1.$VB$Local_InstallTemp + CS$<>8__locals1.$VB$Local_ArchiveBaseFolder + ".minecraft", ModMinecraft.m_ResolverIterator + "versions\\" + CS$<>8__locals1.$VB$Local_VersionName);
}
else
{
ModBase.Log("[Download] 整合包中未找到 override .minecraft 目录,已跳过", ModBase.LogLevel.Normal, "出现错误");
}
Task.Progress = 0.9;
ModBase.WriteIni(ModMinecraft.m_ResolverIterator + "versions\\" + CS$<>8__locals1.$VB$Local_VersionName + "\\PCL\\Setup.ini", "VersionArgumentIndie", Conversions.ToString(1));
}, null, ThreadPriority.Normal)
{
ProgressWeight = (double)new FileInfo(CS$<>8__locals1.$VB$Local_FileAddress).Length / 1024.0 / 1024.0 / 6.0,
Block = false
});
if (jobject["components"] == null)
{
throw new Exception("整合包未提供游戏版本信息");
}
ModDownloadLib.McInstallRequest mcInstallRequest = new ModDownloadLib.McInstallRequest
{
m_CandidateRule = CS$<>8__locals1.$VB$Local_VersionName
};
try
{
foreach (JToken jtoken in ((IEnumerable<JToken>)jobject["components"]))
{
string left = (jtoken["uid"] ?? "").ToString();
if (Operators.CompareString(left, "org.lwjgl", true) == 0)
{
ModBase.Log("[Download] 已跳过 LWJGL 项", ModBase.LogLevel.Normal, "出现错误");
}
else if (Operators.CompareString(left, "net.minecraft", true) == 0)
{
mcInstallRequest.m_DescriptorRule = (string)jtoken["version"];
}
else if (Operators.CompareString(left, "net.minecraftforge", true) == 0)
{
mcInstallRequest._DispatcherRule = (string)jtoken["version"];
}
}
}
finally
{
IEnumerator<JToken> enumerator;
if (enumerator != null)
{
enumerator.Dispose();
}
}
double num = 0.0;
try
{
foreach (object obj in arrayList)
{
object objectValue = RuntimeHelpers.GetObjectValue(obj);
num = Conversions.ToDouble(Operators.AddObject(num, NewLateBinding.LateGet(objectValue, null, "ProgressWeight", new object[0], null, null, null)));
}
}
finally
{
IEnumerator enumerator2;
if (enumerator2 is IDisposable)
{
(enumerator2 as IDisposable).Dispose();
}
}
ArrayList arrayList2 = ModDownloadLib.McInstallLoader(mcInstallRequest, true);
if (arrayList2 != null)
{
double num2 = 0.0;
try
{
foreach (object obj2 in arrayList2)
{
object objectValue2 = RuntimeHelpers.GetObjectValue(obj2);
num2 = Conversions.ToDouble(Operators.AddObject(num2, NewLateBinding.LateGet(objectValue2, null, "ProgressWeight", new object[0], null, null, null)));
}
}
finally
{
IEnumerator enumerator3;
if (enumerator3 is IDisposable)
{
(enumerator3 as IDisposable).Dispose();
}
}
ArrayList arrayList3 = new ArrayList();
arrayList3.Add(new ModLoader.LoaderTask<string, List<ModNet.NetFile>>("分析游戏支持库文件(副加载器)", delegate(ModLoader.LoaderTask<string, List<ModNet.NetFile>> Task)
{
Task.Output = ModMinecraft.McLibFix(new ModMinecraft.McVersion(CS$<>8__locals1.$VB$Local_VersionName), false);
}, null, ThreadPriority.Normal)
{
ProgressWeight = 1.0,
Show = false
});
arrayList3.Add(new ModNet.LoaderDownload("下载游戏支持库文件(副加载器)", new List<ModNet.NetFile>())
{
ProgressWeight = 7.0,
Show = false
});
ArrayList arrayList4 = new ArrayList();
arrayList4.Add(new ModLoader.LoaderCombo<string>("游戏安装", arrayList2)
{
Show = false,
Block = false,
ProgressWeight = num2
});
arrayList4.Add(new ModLoader.LoaderCombo<string>("整合包安装", arrayList)
{
Show = false,
ProgressWeight = num
});
arrayList4.Add(new ModLoader.LoaderCombo<string>("下载游戏支持库文件", arrayList3)
{
ProgressWeight = 8.0
});
string text2 = "MMC 整合包安装:" + CS$<>8__locals1.$VB$Local_VersionName + " ";
object loaderTaskbarLock = ModLoader.LoaderTaskbarLock;
ObjectFlowControl.CheckForSyncLockOnValueType(loaderTaskbarLock);
lock (loaderTaskbarLock)
{
int num3 = ModLoader.LoaderTaskbar.Count - 1;
for (int i = 0; i <= num3; i++)
{
if (Operators.ConditionalCompareObjectEqual(NewLateBinding.LateGet(ModLoader.LoaderTaskbar[i], null, "Name", new object[0], null, null, null), text2, true))
{
ModMain.Hint("该整合包正在安装中!", ModMain.HintType.Critical, true);
return;
}
}
}
ModLoader.LoaderCombo<string> loaderCombo = new ModLoader.LoaderCombo<string>(text2, arrayList4);
loaderCombo.OnStateChanged = new ModLoader.LoaderStateDelegate(ModDownloadLib.McInstallState);
loaderCombo.Start(ModMinecraft.m_ResolverIterator + "versions\\" + CS$<>8__locals1.$VB$Local_VersionName + "\\", false);
ModLoader.LoaderTaskbarAdd(loaderCombo);
ModMain.m_GetterFilter.BtnExtraDownload.ShowRefresh();
ModMain.m_GetterFilter.BtnExtraDownload.Ribble();
}
}
}
}
// Token: 0x06000AF5 RID: 2805 RVA: 0x0005DBEC File Offset: 0x0005BDEC
private static void InstallPackMCBBS(string FileAddress, ZipArchive Archive, string ArchiveBaseFolder)
{
PageSelectLeft._Closure$__11-0 CS$<>8__locals1 = new PageSelectLeft._Closure$__11-0(CS$<>8__locals1);
CS$<>8__locals1.$VB$Local_FileAddress = FileAddress;
CS$<>8__locals1.$VB$Local_ArchiveBaseFolder = ArchiveBaseFolder;
JObject jobject;
try
{
jobject = (JObject)ModBase.GetJson(ModBase.ReadFile((Archive.GetEntry(CS$<>8__locals1.$VB$Local_ArchiveBaseFolder + "mcbbs.packmeta") ?? Archive.GetEntry(CS$<>8__locals1.$VB$Local_ArchiveBaseFolder + "manifest.json")).Open(), Encoding.UTF8));
}
catch (Exception ex)
{
ModBase.Log(ex, "整合包安装信息存在问题", ModBase.LogLevel.Hint, "出现错误");
return;
}
string text = (string)(jobject["name"] ?? "");
ValidateFolderName validateFolderName = new ValidateFolderName(ModMinecraft.m_ResolverIterator + "versions", true, true);
if (Operators.CompareString(validateFolderName.Validate(text), "", true) != 0)
{
text = "";
}
CS$<>8__locals1.$VB$Local_VersionName = ModMain.MyMsgBoxInput(text, new Collection<Validate>
{
validateFolderName
}, "", "输入版本名", "确定", "取消", false);
checked
{
if (CS$<>8__locals1.$VB$Local_VersionName != null)
{
CS$<>8__locals1.$VB$Local_InstallTemp = ModBase.m_GlobalRule + "PackInstall\\" + Conversions.ToString(ModBase.RandomInteger(0, 0x186A0)) + "\\";
ArrayList arrayList = new ArrayList();
arrayList.Add(new ModLoader.LoaderTask<string, int>("解压整合包文件", delegate(ModLoader.LoaderTask<string, int> Task)
{
PageSelectLeft.UnpackFiles(CS$<>8__locals1.$VB$Local_InstallTemp, CS$<>8__locals1.$VB$Local_FileAddress);
Task.Progress = 0.5;
if (Directory.Exists(CS$<>8__locals1.$VB$Local_InstallTemp + CS$<>8__locals1.$VB$Local_ArchiveBaseFolder + "overrides"))
{
MyWpfExtension.RunFactory().FileSystem.CopyDirectory(CS$<>8__locals1.$VB$Local_InstallTemp + CS$<>8__locals1.$VB$Local_ArchiveBaseFolder + "overrides", ModMinecraft.m_ResolverIterator + "versions\\" + CS$<>8__locals1.$VB$Local_VersionName);
}
else
{
ModBase.Log("[Download] 整合包中未找到 overrides 目录,已跳过", ModBase.LogLevel.Normal, "出现错误");
}
Task.Progress = 0.9;
ModBase.WriteIni(ModMinecraft.m_ResolverIterator + "versions\\" + CS$<>8__locals1.$VB$Local_VersionName + "\\PCL\\Setup.ini", "VersionArgumentIndie", Conversions.ToString(1));
}, null, ThreadPriority.Normal)
{
ProgressWeight = (double)new FileInfo(CS$<>8__locals1.$VB$Local_FileAddress).Length / 1024.0 / 1024.0 / 6.0,
Block = false
});
if (jobject["addons"] == null)
{
throw new Exception("整合包未提供游戏版本信息");
}
Dictionary<string, string> dictionary = new Dictionary<string, string>();
try
{
foreach (JToken jtoken in ((IEnumerable<JToken>)jobject["addons"]))
{
dictionary.Add((string)jtoken["id"], (string)jtoken["version"]);
}
}
finally
{
IEnumerator<JToken> enumerator;
if (enumerator != null)
{
enumerator.Dispose();
}
}
if (!dictionary.ContainsKey("game"))
{
throw new Exception("整合包未提供游戏版本信息");
}
ModDownloadLib.McInstallRequest request = new ModDownloadLib.McInstallRequest
{
m_CandidateRule = CS$<>8__locals1.$VB$Local_VersionName,
m_DescriptorRule = dictionary["game"],
m_ObserverRule = (dictionary.ContainsKey("optifine") ? dictionary["optifine"] : null),
_DispatcherRule = (dictionary.ContainsKey("forge") ? dictionary["forge"] : null),
_InitializerRule = (dictionary.ContainsKey("fabric") ? dictionary["fabric"] : null)
};
double num = 0.0;
try
{
foreach (object obj in arrayList)
{
object objectValue = RuntimeHelpers.GetObjectValue(obj);
num = Conversions.ToDouble(Operators.AddObject(num, NewLateBinding.LateGet(objectValue, null, "ProgressWeight", new object[0], null, null, null)));
}
}
finally
{
IEnumerator enumerator2;
if (enumerator2 is IDisposable)
{
(enumerator2 as IDisposable).Dispose();
}
}
ArrayList arrayList2 = ModDownloadLib.McInstallLoader(request, true);
if (arrayList2 != null)
{
double num2 = 0.0;
try
{
foreach (object obj2 in arrayList2)
{
object objectValue2 = RuntimeHelpers.GetObjectValue(obj2);
num2 = Conversions.ToDouble(Operators.AddObject(num2, NewLateBinding.LateGet(objectValue2, null, "ProgressWeight", new object[0], null, null, null)));
}
}
finally
{
IEnumerator enumerator3;
if (enumerator3 is IDisposable)
{
(enumerator3 as IDisposable).Dispose();
}
}
ArrayList arrayList3 = new ArrayList();
arrayList3.Add(new ModLoader.LoaderTask<string, List<ModNet.NetFile>>("分析游戏支持库文件(副加载器)", delegate(ModLoader.LoaderTask<string, List<ModNet.NetFile>> Task)
{
Task.Output = ModMinecraft.McLibFix(new ModMinecraft.McVersion(CS$<>8__locals1.$VB$Local_VersionName), false);
}, null, ThreadPriority.Normal)
{
ProgressWeight = 1.0,
Show = false
});
arrayList3.Add(new ModNet.LoaderDownload("下载游戏支持库文件(副加载器)", new List<ModNet.NetFile>())
{
ProgressWeight = 7.0,
Show = false
});
ArrayList arrayList4 = new ArrayList();
arrayList4.Add(new ModLoader.LoaderCombo<string>("游戏安装", arrayList2)
{
Show = false,
Block = false,
ProgressWeight = num2
});
arrayList4.Add(new ModLoader.LoaderCombo<string>("整合包安装", arrayList)
{
Show = false,
ProgressWeight = num
});
arrayList4.Add(new ModLoader.LoaderCombo<string>("下载游戏支持库文件", arrayList3)
{
ProgressWeight = 8.0
});
string text2 = "MCBBS 整合包安装:" + CS$<>8__locals1.$VB$Local_VersionName + " ";
object loaderTaskbarLock = ModLoader.LoaderTaskbarLock;
ObjectFlowControl.CheckForSyncLockOnValueType(loaderTaskbarLock);
lock (loaderTaskbarLock)
{
int num3 = ModLoader.LoaderTaskbar.Count - 1;
for (int i = 0; i <= num3; i++)
{
if (Operators.ConditionalCompareObjectEqual(NewLateBinding.LateGet(ModLoader.LoaderTaskbar[i], null, "Name", new object[0], null, null, null), text2, true))
{
ModMain.Hint("该整合包正在安装中!", ModMain.HintType.Critical, true);
return;
}
}
}
ModLoader.LoaderCombo<string> loaderCombo = new ModLoader.LoaderCombo<string>(text2, arrayList4);
loaderCombo.OnStateChanged = new ModLoader.LoaderStateDelegate(ModDownloadLib.McInstallState);
loaderCombo.Start(ModMinecraft.m_ResolverIterator + "versions\\" + CS$<>8__locals1.$VB$Local_VersionName + "\\", false);
ModLoader.LoaderTaskbarAdd(loaderCombo);
ModMain.m_GetterFilter.BtnExtraDownload.ShowRefresh();
ModMain.m_GetterFilter.BtnExtraDownload.Ribble();
}
}
}
}
// Token: 0x06000AF6 RID: 2806 RVA: 0x0005E1BC File Offset: 0x0005C3BC
private static void InstallPackCompress(string FileAddress, string ArchiveBaseFolder)
{
try
{
ModMain.MyMsgBox("请在接下来打开的窗口中选择想要安装的目标文件夹。", "安装提示", "继续", "", "", false, true, true);
string text = ModBase.SelectFolder("选择安装目标文件夹");
if (!string.IsNullOrEmpty(text))
{
if (!text.Contains("!") && !text.Contains(";"))
{
string text2 = ModMain.MyMsgBoxInput(ModBase.GetFolderNameFromPath(text), new Collection<Validate>
{
new ValidateNullOrWhiteSpace(),
new ValidateLength(1, 0x1E),
new ValidateExcept(new string[]
{
">",
"|"
}, "输入内容不能包含 %")
}, "", "输入它在列表中的显示名称", "确定", "取消", false);
if (!string.IsNullOrWhiteSpace(text2))
{
ModMain.Hint("正在解压压缩包……", ModMain.HintType.Info, true);
PageSelectLeft.UnpackFiles(text, FileAddress);
PageSelectLeft.AddFolder(text, text2, false);
ModMain.Hint("已加入游戏文件夹列表:" + text2, ModMain.HintType.Finish, true);
}
}
else
{
ModMain.Hint("Minecraft 文件夹路径中不能含有感叹号或分号!", ModMain.HintType.Critical, true);
}
}
}
catch (Exception ex)
{
ModBase.Log(ex, "解压游戏压缩包失败", ModBase.LogLevel.Feedback, "出现错误");
}
}
// Token: 0x06000AF7 RID: 2807 RVA: 0x0005E30C File Offset: 0x0005C50C
public void Add_Click()
{
string text = "";
if (ModNet.HasDownloadingTask(false))
{
ModMain.Hint("请不要在下载过程中添加游戏文件夹!", ModMain.HintType.Critical, true);
return;
}
try
{
text = ModBase.SelectFolder("选择文件夹");
if (Operators.CompareString(text, "", true) != 0)
{
if (!text.Contains("!") && !text.Contains(";"))
{
string text2 = ModMain.MyMsgBoxInput(ModBase.GetFolderNameFromPath(text), new Collection<Validate>
{
new ValidateNullOrWhiteSpace(),
new ValidateLength(1, 0x1E),
new ValidateExcept(new string[]
{
">",
"|"
}, "输入内容不能包含 %")
}, "", "输入显示名称", "确定", "取消", false);
if (!string.IsNullOrWhiteSpace(text2))
{
PageSelectLeft.AddFolder(text, text2, true);
}
}
else
{
ModMain.Hint("Minecraft 文件夹路径中不能含有感叹号或分号!", ModMain.HintType.Critical, true);
}
}
}
catch (Exception ex)
{
ModBase.Log(ex, "添加文件夹失败(" + text + "", ModBase.LogLevel.Feedback, "出现错误");
}
}
// Token: 0x06000AF8 RID: 2808 RVA: 0x0005E434 File Offset: 0x0005C634
private static void AddFolder(string FolderPath, string DisplayName, bool ShowHint)
{
PageSelectLeft._Closure$__14-0 CS$<>8__locals1 = new PageSelectLeft._Closure$__14-0(CS$<>8__locals1);
CS$<>8__locals1.$VB$Local_FolderPath = FolderPath;
if (!CS$<>8__locals1.$VB$Local_FolderPath.EndsWith("\\"))
{
CS$<>8__locals1.$VB$Local_FolderPath += "\\";
}
checked
{
if (ModBase.CheckPermission(CS$<>8__locals1.$VB$Local_FolderPath))
{
if (!ModBase.CheckPermission(CS$<>8__locals1.$VB$Local_FolderPath + "versions\\"))
{
foreach (DirectoryInfo directoryInfo in new DirectoryInfo(CS$<>8__locals1.$VB$Local_FolderPath).GetDirectories())
{
if (ModBase.CheckPermission(directoryInfo.FullName + "\\versions\\"))
{
CS$<>8__locals1.$VB$Local_FolderPath = directoryInfo.FullName + "\\";
break;
}
}
}
ArrayList arrayList = new ArrayList(ModBase._BaseRule.Get("LaunchFolders", null).ToString().Split(new char[]
{
'|'
}));
bool flag = false;
bool flag2 = false;
int num = arrayList.Count - 1;
for (int j = 0; j <= num; j++)
{
string text = Conversions.ToString(arrayList[j]);
if (Operators.CompareString(text, "", true) != 0 && Operators.CompareString(text.Split(new char[]
{
'>'
})[1], CS$<>8__locals1.$VB$Local_FolderPath, true) == 0)
{
flag = true;
if (Operators.CompareString(text.Split(new char[]
{
'>'
})[0], DisplayName, true) == 0)
{
if (ShowHint)
{
ModMain.Hint("此文件夹已在列表中!", ModMain.HintType.Info, true);
return;
}
}
else
{
arrayList[j] = DisplayName + ">" + CS$<>8__locals1.$VB$Local_FolderPath;
flag2 = true;
if (ShowHint)
{
ModMain.Hint("文件夹名称已更新为 " + DisplayName + " ", ModMain.HintType.Finish, true);
}
IL_1D0:
if (!flag)
{
arrayList.Add(DisplayName + ">" + CS$<>8__locals1.$VB$Local_FolderPath);
}
ModBase._BaseRule.Set("LaunchFolders", ModBase.Join(arrayList.ToArray(), "|"), false, null);
ModBase._BaseRule.Set("LaunchFolderSelect", CS$<>8__locals1.$VB$Local_FolderPath.Replace(ModBase.Path, "$"), false, null);
ModMinecraft._TestsIterator.Start(ModBase.GetUuid(), false);
if (!flag2)
{
if (ShowHint)
{
ModMain.Hint("文件夹 " + DisplayName + " 已添加!", ModMain.HintType.Finish, true);
}
ModBase.RunInThread(delegate
{
DirectoryInfo directoryInfo2 = new DirectoryInfo(CS$<>8__locals1.$VB$Local_FolderPath + "mods\\");
if (directoryInfo2.Exists && directoryInfo2.EnumerateFiles().Count<FileInfo>() >= 3)
{
DirectoryInfo directoryInfo3 = new DirectoryInfo(CS$<>8__locals1.$VB$Local_FolderPath + "versions\\");
if (directoryInfo3.Exists && directoryInfo3.EnumerateDirectories().Count<DirectoryInfo>() <= 3)
{
try
{
foreach (DirectoryInfo directoryInfo4 in directoryInfo3.EnumerateDirectories())
{
ModMinecraft.McVersion mcVersion = new ModMinecraft.McVersion(directoryInfo4.FullName);
mcVersion.Load();
if (mcVersion.Version.LoginUtils())
{
DirectoryInfo directoryInfo5 = new DirectoryInfo(mcVersion.Path + "mods\\");
if (directoryInfo5.Exists && directoryInfo5.EnumerateFiles().Count<FileInfo>() > 0)
{
break;
}
ModBase._BaseRule.Set("VersionArgumentIndie", 2, false, mcVersion);
ModBase.Log("[Setup] 已自动关闭单版本隔离:" + mcVersion.Name, ModBase.LogLevel.Debug, "出现错误");
}
}
}
finally
{
IEnumerator<DirectoryInfo> enumerator;
if (enumerator != null)
{
enumerator.Dispose();
}
}
}
}
});
}
}
return;
}
}
goto IL_1D0;
}
if (ShowHint)
{
ModMain.Hint("添加文件夹失败PCL 没有访问该文件夹的权限!", ModMain.HintType.Critical, true);
return;
}
throw new Exception("PCL 没有访问文件夹的权限:" + CS$<>8__locals1.$VB$Local_FolderPath);
}
}
// Token: 0x06000AF9 RID: 2809 RVA: 0x0005E6B4 File Offset: 0x0005C8B4
public void Create_Click()
{
if (ModNet.HasDownloadingTask(false))
{
ModMain.Hint("请不要在下载过程中创建游戏文件夹!", ModMain.HintType.Critical, true);
return;
}
if (!Directory.Exists(ModBase.Path + ".minecraft\\"))
{
Directory.CreateDirectory(ModBase.Path + ".minecraft\\");
Directory.CreateDirectory(ModBase.Path + ".minecraft\\versions\\");
ModBase._BaseRule.Set("LaunchFolderSelect", "$.minecraft\\", false, null);
ModMain.Hint("新建 .minecraft 文件夹成功!", ModMain.HintType.Finish, true);
}
ModMinecraft._TestsIterator.Start(ModBase.GetUuid(), false);
}
// Token: 0x06000AFA RID: 2810 RVA: 0x0005E748 File Offset: 0x0005C948
public void Remove_Click(object sender, RoutedEventArgs e)
{
checked
{
try
{
ModMinecraft.McFolder mcFolder = (ModMinecraft.McFolder)((MyListItem)((Popup)((ContextMenu)NewLateBinding.LateGet(sender, null, "Parent", new object[0], null, null, null)).Parent).PlacementTarget).Tag;
if (mcFolder.Type == ModMinecraft.McFolderType.Custom)
{
switch (ModMain.MyMsgBox("是否需要清理 PCL 在该文件夹中的配置文件?\r\n这包括各个版本的独立设置如自定义图标、第三方登录配置对游戏本身没有影响。", "配置文件清理", "删除", "保留", "取消", false, true, false))
{
case 1:
if (File.Exists(mcFolder.Path + "PCL.ini"))
{
File.Delete(mcFolder.Path + "PCL.ini");
}
if (!Directory.Exists(mcFolder.Path + "versions\\"))
{
goto IL_13A;
}
try
{
foreach (DirectoryInfo directoryInfo in new DirectoryInfo(mcFolder.Path + "versions\\").EnumerateDirectories())
{
if (Directory.Exists(directoryInfo.FullName + "\\PCL\\"))
{
Directory.Delete(directoryInfo.FullName + "\\PCL\\", true);
}
}
goto IL_13A;
}
finally
{
IEnumerator<DirectoryInfo> enumerator;
if (enumerator != null)
{
enumerator.Dispose();
}
}
break;
case 2:
goto IL_13A;
case 3:
break;
default:
goto IL_13A;
}
return;
}
IL_13A:
ArrayList arrayList = new ArrayList(ModBase._BaseRule.Get("LaunchFolders", null).ToString().Split(new char[]
{
'|'
}));
string str = "";
int num = arrayList.Count - 1;
int i = 0;
while (i <= num)
{
if (!Operators.ConditionalCompareObjectEqual(arrayList[i], "", true))
{
if (!arrayList[i].ToString().EndsWith(mcFolder.Path))
{
i++;
continue;
}
str = arrayList[i].ToString().Split(new char[]
{
'>'
})[0];
arrayList.RemoveAt(i);
}
IL_1DF:
ModBase._BaseRule.Set("LaunchFolders", (arrayList.Count == 0) ? "" : ModBase.Join(arrayList.ToArray(), "|"), false, null);
ModMain.Hint((mcFolder.Type == ModMinecraft.McFolderType.Custom) ? ("文件夹 " + str + " 已从列表中移除!") : "文件夹名称已复原!", ModMain.HintType.Finish, true);
ModMinecraft._TestsIterator.Start(ModBase.GetUuid(), false);
return;
}
goto IL_1DF;
}
catch (Exception ex)
{
ModBase.Log(ex, "从列表中移除游戏文件夹失败", ModBase.LogLevel.Feedback, "出现错误");
}
}
}
// Token: 0x06000AFB RID: 2811 RVA: 0x0005E9F4 File Offset: 0x0005CBF4
public void Delete_Click(object sender, RoutedEventArgs e)
{
PageSelectLeft._Closure$__17-0 CS$<>8__locals1 = new PageSelectLeft._Closure$__17-0(CS$<>8__locals1);
CS$<>8__locals1.$VB$Local_Folder = (ModMinecraft.McFolder)((MyListItem)((Popup)((ContextMenu)NewLateBinding.LateGet(sender, null, "Parent", new object[0], null, null, null)).Parent).PlacementTarget).Tag;
PageSelectLeft._Closure$__17-0 CS$<>8__locals2 = CS$<>8__locals1;
string $VB$Local_DeleteText;
if ((CS$<>8__locals1.$VB$Local_Folder.Type == ModMinecraft.McFolderType.Original || CS$<>8__locals1.$VB$Local_Folder.Type == ModMinecraft.McFolderType.RenamedOriginal) && Operators.CompareString(CS$<>8__locals1.$VB$Local_Folder.Path, ModBase.Path + ".minecraft\\", true) == 0)
{
if (ModMinecraft.collectionIterator.Count == 1)
{
$VB$Local_DeleteText = "清空";
goto IL_9E;
}
}
$VB$Local_DeleteText = "删除";
IL_9E:
CS$<>8__locals2.$VB$Local_DeleteText = $VB$Local_DeleteText;
checked
{
if (ModMain.MyMsgBox("你确定要" + CS$<>8__locals1.$VB$Local_DeleteText + "这个文件夹吗?\r\n这会导致该文件夹中的所有存档与其他文件永久消失且不可恢复", "删除警告", "取消", "继续", "", false, true, false) != 1 && ModMain.MyMsgBox(CS$<>8__locals1.$VB$Local_DeleteText + "这个文件夹会导致该文件夹中的所有文件永久消失,且不可恢复!\r\n这是最后一次警告", "删除警告", CS$<>8__locals1.$VB$Local_DeleteText, "取消", "", true, true, false) != 2)
{
if (CS$<>8__locals1.$VB$Local_Folder.Type == ModMinecraft.McFolderType.Custom)
{
ArrayList arrayList = new ArrayList(ModBase._BaseRule.Get("LaunchFolders", null).ToString().Split(new char[]
{
'|'
}));
int num = arrayList.Count - 1;
int i = 0;
while (i <= num)
{
if (!Operators.ConditionalCompareObjectEqual(arrayList[i], "", true))
{
if (!arrayList[i].ToString().EndsWith(CS$<>8__locals1.$VB$Local_Folder.Path))
{
i++;
continue;
}
arrayList.RemoveAt(i);
}
IL_199:
ModBase._BaseRule.Set("LaunchFolders", (arrayList.Count == 0) ? "" : ModBase.Join(arrayList.ToArray(), "|"), false, null);
goto IL_1C9;
}
goto IL_199;
}
IL_1C9:
ModBase.RunInNewThread(delegate
{
try
{
ModMain.Hint(string.Concat(new string[]
{
"正在",
CS$<>8__locals1.$VB$Local_DeleteText,
"文件夹 ",
CS$<>8__locals1.$VB$Local_Folder.Name,
""
}), ModMain.HintType.Info, true);
ModBase.DeleteDirectory(CS$<>8__locals1.$VB$Local_Folder.Path, false);
if (Operators.CompareString(CS$<>8__locals1.$VB$Local_DeleteText, "清空", true) == 0)
{
Directory.CreateDirectory(CS$<>8__locals1.$VB$Local_Folder.Path);
}
ModMain.Hint(string.Concat(new string[]
{
"已",
CS$<>8__locals1.$VB$Local_DeleteText,
"文件夹 ",
CS$<>8__locals1.$VB$Local_Folder.Name,
""
}), ModMain.HintType.Finish, true);
}
catch (Exception ex)
{
ModBase.Log(ex, CS$<>8__locals1.$VB$Local_DeleteText + "文件夹 " + CS$<>8__locals1.$VB$Local_Folder.Name + " 失败", ModBase.LogLevel.Hint, "出现错误");
}
finally
{
ModMinecraft._TestsIterator.Start(ModBase.GetUuid(), false);
}
}, "Folder Delete " + Conversions.ToString(ModBase.GetUuid()), ThreadPriority.BelowNormal);
}
}
}
// Token: 0x06000AFC RID: 2812 RVA: 0x0005EBF4 File Offset: 0x0005CDF4
public void Open_Click(object sender, RoutedEventArgs e)
{
ModBase.OpenExplorer("\"" + ((MyListItem)((Popup)((ContextMenu)NewLateBinding.LateGet(sender, null, "Parent", new object[0], null, null, null)).Parent).PlacementTarget).Info + "\"");
}
// Token: 0x06000AFD RID: 2813 RVA: 0x0005EC48 File Offset: 0x0005CE48
public void Refresh_Click(object sender, RoutedEventArgs e)
{
ModBase.WriteIni(((MyListItem)((Popup)((ContextMenu)NewLateBinding.LateGet(sender, null, "Parent", new object[0], null, null, null)).Parent).PlacementTarget).Info + "PCL.ini", "VersionCache", "");
ModMinecraft._TestsIterator.Start(ModBase.GetUuid(), false);
}
// Token: 0x06000AFE RID: 2814 RVA: 0x0005ECB4 File Offset: 0x0005CEB4
public void Rename_Click(object sender, RoutedEventArgs e)
{
ModMinecraft.McFolder mcFolder = (ModMinecraft.McFolder)((MyListItem)((Popup)((ContextMenu)NewLateBinding.LateGet(sender, null, "Parent", new object[0], null, null, null)).Parent).PlacementTarget).Tag;
checked
{
try
{
string text = ModMain.MyMsgBoxInput(mcFolder.Name, new Collection<Validate>
{
new ValidateNullOrWhiteSpace(),
new ValidateLength(1, 0x1E),
new ValidateExcept(new string[]
{
">",
"|"
}, "输入内容不能包含 %")
}, "", "输入新名称", "确定", "取消", false);
if (!string.IsNullOrWhiteSpace(text))
{
ArrayList arrayList = new ArrayList(ModBase._BaseRule.Get("LaunchFolders", null).ToString().Split(new char[]
{
'|'
}));
bool flag = false;
int num = arrayList.Count - 1;
int i = 0;
while (i <= num)
{
string text2 = Conversions.ToString(arrayList[i]);
if (Operators.CompareString(text2, "", true) == 0 || Operators.CompareString(text2.Split(new char[]
{
'>'
})[1], mcFolder.Path, true) != 0)
{
i++;
}
else
{
flag = true;
if (Operators.CompareString(text2.Split(new char[]
{
'>'
})[0], text, true) == 0)
{
return;
}
arrayList[i] = text + ">" + mcFolder.Path;
IL_179:
if (!flag)
{
arrayList.Add(text + ">" + mcFolder.Path);
}
ModMain.Hint("文件夹名称已更新为 " + text + " ", ModMain.HintType.Finish, true);
ModBase._BaseRule.Set("LaunchFolders", ModBase.Join(arrayList.ToArray(), "|"), false, null);
ModMinecraft._TestsIterator.Start(ModBase.GetUuid(), false);
return;
}
}
goto IL_179;
}
}
catch (Exception ex)
{
ModBase.Log(ex, "重命名文件夹失败", ModBase.LogLevel.Feedback, "出现错误");
}
}
}
// Token: 0x06000AFF RID: 2815 RVA: 0x0005EEDC File Offset: 0x0005D0DC
public void Folder_Change(MyListItem sender, ModBase.RouteEventArgs e)
{
if (e.schemaMapper && sender.Checked)
{
if (ModNet.HasDownloadingTask(true))
{
ModMain.Hint("请不要在下载过程中切换游戏文件夹!", ModMain.HintType.Critical, true);
e._HelperMapper = true;
return;
}
ModBase._BaseRule.Set("LaunchFolderSelect", ((ModMinecraft.McFolder)sender.Tag).Path.Replace(ModBase.Path, "$"), false, null);
ModMinecraft._TestsIterator.Start(ModBase.GetUuid(), false);
}
}
// Token: 0x170001B4 RID: 436
// (get) Token: 0x06000B00 RID: 2816 RVA: 0x000080A3 File Offset: 0x000062A3
// (set) Token: 0x06000B01 RID: 2817 RVA: 0x000080AB File Offset: 0x000062AB
internal virtual StackPanel PanList { get; [MethodImpl(MethodImplOptions.Synchronized)] set; }
// Token: 0x06000B02 RID: 2818 RVA: 0x0005EF58 File Offset: 0x0005D158
[GeneratedCode("PresentationBuildTasks", "4.0.0.0")]
[DebuggerNonUserCode]
public void InitializeComponent()
{
if (!this.m_PrototypeExpression)
{
this.m_PrototypeExpression = true;
Uri resourceLocator = new Uri("/Plain Craft Launcher 2;component/pages/pageselectleft.xaml", UriKind.Relative);
Application.LoadComponent(this, resourceLocator);
}
}
// Token: 0x06000B03 RID: 2819 RVA: 0x00003037 File Offset: 0x00001237
[GeneratedCode("PresentationBuildTasks", "4.0.0.0")]
[DebuggerNonUserCode]
internal Delegate _CreateDelegate(Type delegateType, string handler)
{
return Delegate.CreateDelegate(delegateType, this, handler);
}
// Token: 0x06000B04 RID: 2820 RVA: 0x000080B4 File Offset: 0x000062B4
[GeneratedCode("PresentationBuildTasks", "4.0.0.0")]
[DebuggerNonUserCode]
[EditorBrowsable(EditorBrowsableState.Never)]
public void System_Windows_Markup_IComponentConnector_Connect(int connectionId, object target)
{
if (connectionId == 1)
{
this.PanList = (StackPanel)target;
return;
}
this.m_PrototypeExpression = true;
}
// Token: 0x040005F9 RID: 1529
private static bool repositoryExpression;
// Token: 0x040005FA RID: 1530
private static bool m_SystemExpression;
// Token: 0x040005FB RID: 1531
[CompilerGenerated]
[AccessedThroughProperty("PanList")]
private StackPanel proccesorExpression;
// Token: 0x040005FC RID: 1532
private bool m_PrototypeExpression;
}
}