@@ -2180,6 +2180,7 @@ Retry:
2180
2180
Select Case Loader.State
2181
2181
Case LoadState.Finished
2182
2182
WriteIni(PathMcFolder & "PCL.ini" , "VersionCache" , "" ) '清空缓存(合并安装会先生成文件夹,这会在刷新时误判为可以使用缓存)
2183
+ DeleteDirectory(Loader.Input & "PCLInstallBackups\" )
2183
2184
Hint(Loader.Name & "成功!" , HintType.Finish)
2184
2185
Case LoadState.Failed
2185
2186
Hint(Loader.Name & "失败:" & GetExceptionSummary(Loader.Error), HintType.Critical)
@@ -2188,7 +2189,12 @@ Retry:
2188
2189
Case LoadState.Loading
2189
2190
Exit Sub '不重新加载版本列表
2190
2191
End Select
2191
- McInstallFailedClearFolder(Loader)
2192
+ If Not Loader.State = LoadState.Finished AndAlso Directory.Exists(Loader.Input & "PCLInstallBackups\" ) Then '版本修改失败回滚
2193
+ CopyDirectory(Loader.Input & "PCLInstallBackups\" , Loader.Input)
2194
+ File.Delete(Loader.Input & ".pclignore" )
2195
+ Else
2196
+ McInstallFailedClearFolder(Loader)
2197
+ End If
2192
2198
LoaderFolderRun(McVersionListLoader, PathMcFolder, LoaderFolderRunType.ForceRun, MaxDepth:= 1 , ExtraPath:= "versions\" )
2193
2199
End Sub
2194
2200
''' <summary>
@@ -2211,7 +2217,7 @@ Retry:
2211
2217
Thread.Sleep( 1000 ) '防止存在尚未完全释放的文件,导致清理失败(例如整合包安装)
2212
2218
If Loader.State = LoadState.Failed OrElse Loader.State = LoadState.Aborted Then
2213
2219
'删除版本文件夹
2214
- If Directory.Exists(Loader.Input & "saves\" ) OrElse Directory.Exists(Loader.Input & "versions\" ) Then
2220
+ If Directory.Exists(Loader.Input & "saves\" ) OrElse Directory.Exists(Loader.Input & "versions\" ) OrElse Directory.Exists(Loader.Input & "mods\" ) OrElse File.Exists(Loader.Input & "server.dat" ) Then
2215
2221
Log( "[Download] 由于版本已被独立启动,不清理版本文件夹:" & Loader.Input, LogLevel.Developer)
2216
2222
Else
2217
2223
Log( "[Download] 由于下载失败或取消,清理版本文件夹:" & Loader.Input, LogLevel.Developer)
@@ -2226,11 +2232,11 @@ Retry:
2226
2232
''' <summary>
2227
2233
''' 进行合并安装。返回是否已经开始安装(例如如果没有安装 Java 则会进行提示并返回 False)
2228
2234
''' </summary>
2229
- Public Function McInstall(Request As McInstallRequest) As Boolean
2235
+ Public Function McInstall(Request As McInstallRequest, Optional IsEdit As Boolean = False ) As Boolean
2230
2236
Try
2231
- Dim SubLoaders = McInstallLoader(Request)
2237
+ Dim SubLoaders = McInstallLoader(Request, IgnoreDump:=IsEdit )
2232
2238
If SubLoaders Is Nothing Then Return False
2233
- Dim Loader As New LoaderCombo( Of String )(Request.TargetVersionName & " 安装", SubLoaders) With {.OnStateChanged = AddressOf McInstallState}
2239
+ Dim Loader As New LoaderCombo( Of String )(Request.TargetVersionName & If (IsEdit, " 修改" , " 安装") , SubLoaders) With {.OnStateChanged = AddressOf McInstallState}
2234
2240
2235
2241
'启动
2236
2242
Loader.Start(Request.TargetVersionFolder)
@@ -2250,7 +2256,7 @@ Retry:
2250
2256
''' 获取合并安装加载器列表,并进行前期的缓存清理与 Java 检查工作。
2251
2257
''' </summary>
2252
2258
''' <exception cref="CancelledException" />
2253
- Public Function McInstallLoader(Request As McInstallRequest, Optional DontFixLibraries As Boolean = False ) As List( Of LoaderBase)
2259
+ Public Function McInstallLoader(Request As McInstallRequest, Optional DontFixLibraries As Boolean = False , Optional IgnoreDump As Boolean = False ) As List( Of LoaderBase)
2254
2260
'获取缓存目录
2255
2261
Dim PathInstallTemp As String
2256
2262
If PathTemp.Contains( " " ) AndAlso (Request.OptiFineEntry IsNot Nothing OrElse Request.ForgeEntry IsNot Nothing OrElse Request.NeoForgeEntry IsNot Nothing ) Then
@@ -2321,7 +2327,7 @@ Retry:
2321
2327
Log( "[Download] 对应的原版版本:" & Request.MinecraftName)
2322
2328
2323
2329
'重复版本检查
2324
- If File.Exists(OutputFolder & Request.TargetVersionName & ".json" ) Then
2330
+ If File.Exists(OutputFolder & Request.TargetVersionName & ".json" ) AndAlso Not IgnoreDump Then
2325
2331
Hint( "版本 " & Request.TargetVersionName & " 已经存在!" , HintType.Critical)
2326
2332
Throw New CancelledException
2327
2333
End If
0 commit comments