2.6.3
This commit is contained in:
@@ -466,9 +466,9 @@
|
|||||||
</Style>
|
</Style>
|
||||||
<Style TargetType="ComboBoxItem" x:Key="MyComboBoxItem">
|
<Style TargetType="ComboBoxItem" x:Key="MyComboBoxItem">
|
||||||
<Setter Property="OverridesDefaultStyle" Value="True" />
|
<Setter Property="OverridesDefaultStyle" Value="True" />
|
||||||
<Setter Property="ToolTipService.Placement" Value="Right" />
|
<Setter Property="ToolTipService.Placement" Value="Relative" />
|
||||||
<Setter Property="ToolTipService.VerticalOffset" Value="-2" />
|
<Setter Property="ToolTipService.VerticalOffset" Value="-2" />
|
||||||
<Setter Property="ToolTipService.HorizontalOffset" Value="-250" />
|
<Setter Property="ToolTipService.HorizontalOffset" Value="200" />
|
||||||
<Setter Property="ToolTipService.InitialShowDelay" Value="150" />
|
<Setter Property="ToolTipService.InitialShowDelay" Value="150" />
|
||||||
<Setter Property="ToolTipService.BetweenShowDelay" Value="150" />
|
<Setter Property="ToolTipService.BetweenShowDelay" Value="150" />
|
||||||
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
|
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
MinHeight="16" UseLayoutRounding="False" SnapsToDevicePixels="False" BorderBrush="{DynamicResource ColorBrushBg0}" Name="PanBack" Background="{StaticResource ColorBrushSemiTransparent}" Focusable="True">
|
MinHeight="16" UseLayoutRounding="False" SnapsToDevicePixels="False" BorderBrush="{DynamicResource ColorBrushBg0}" Name="PanBack" Background="{StaticResource ColorBrushSemiTransparent}" Focusable="True">
|
||||||
<Grid x:Name="PanMain" MinHeight="16" MaxHeight="16" IsHitTestVisible="False">
|
<Grid x:Name="PanMain" MinHeight="16" MaxHeight="16" IsHitTestVisible="False">
|
||||||
<Line Height="4" Name="LineBack" Stroke="{DynamicResource ColorBrushBg0}" Opacity="0.3" StrokeThickness="1" X2="10000" Y1="2" Y2="2" HorizontalAlignment="Right" Width="0" SnapsToDevicePixels="True" Margin="0,0,1,0" />
|
<Line Height="4" Name="LineBack" Stroke="{DynamicResource ColorBrushBg0}" Opacity="0.3" StrokeThickness="1" X2="10000" Y1="2" Y2="2" HorizontalAlignment="Right" Width="0" SnapsToDevicePixels="True" Margin="0,0,1,0" />
|
||||||
<Line Height="4" Name="LineFore" Stroke="{Binding ElementName=PanBack, Path=BorderBrush}" StrokeThickness="1" X2="10000" Y1="2" Y2="2" Width="0" HorizontalAlignment="Left" SnapsToDevicePixels="True" Margin="1,0,0,0" />
|
<Line Height="4" Name="LineFore" Stroke="{Binding ElementName=PanBack, Path=BorderBrush}" StrokeThickness="2" X2="10000" Y1="2" Y2="2" Width="0" HorizontalAlignment="Left" SnapsToDevicePixels="True" Margin="1,0,0,0" />
|
||||||
<Ellipse HorizontalAlignment="Left" Width="10" Height="10"
|
<Ellipse HorizontalAlignment="Left" Width="10" Height="10"
|
||||||
Stroke="{Binding BorderBrush, ElementName=PanBack}" StrokeThickness="1.2"
|
Stroke="{Binding BorderBrush, ElementName=PanBack}" StrokeThickness="1.2"
|
||||||
Fill="{DynamicResource ColorBrushBg0}" Name="ShapeDot" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5">
|
Fill="{DynamicResource ColorBrushBg0}" Name="ShapeDot" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5">
|
||||||
|
|||||||
@@ -10,6 +10,13 @@ Public Class FormMain
|
|||||||
Dim FeatureList As New List(Of KeyValuePair(Of Integer, String))
|
Dim FeatureList As New List(Of KeyValuePair(Of Integer, String))
|
||||||
'统计更新日志条目
|
'统计更新日志条目
|
||||||
#If BETA Then
|
#If BETA Then
|
||||||
|
If LastVersion < 296 Then 'Release 2.6.3
|
||||||
|
FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "新增内存优化功能,可以将所有程序的物理内存占用降低约 1/3"))
|
||||||
|
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "在选择 OptiFine 与 Fabric 后会自动选择 OptiFabric"))
|
||||||
|
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化崩溃分析,添加多种崩溃情况的判断"))
|
||||||
|
FeatureCount += 21
|
||||||
|
BugCount += 30
|
||||||
|
End If
|
||||||
If LastVersion < 293 Then 'Release 2.6.1
|
If LastVersion < 293 Then 'Release 2.6.1
|
||||||
BugCount += 1
|
BugCount += 1
|
||||||
End If
|
End If
|
||||||
@@ -109,6 +116,11 @@ Public Class FormMain
|
|||||||
'3:BUG+ IMP* FEAT-
|
'3:BUG+ IMP* FEAT-
|
||||||
'2:BUG* IMP-
|
'2:BUG* IMP-
|
||||||
'1:BUG-
|
'1:BUG-
|
||||||
|
If LastVersion < 295 Then 'Snapshot 2.6.3
|
||||||
|
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化崩溃分析,添加多种崩溃情况的判断"))
|
||||||
|
FeatureCount += 12
|
||||||
|
BugCount += 14
|
||||||
|
End If
|
||||||
If LastVersion < 294 Then 'Snapshot 2.6.2
|
If LastVersion < 294 Then 'Snapshot 2.6.2
|
||||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "新增内存优化功能,可以将所有程序的物理内存占用降低约 1/3"))
|
FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "新增内存优化功能,可以将所有程序的物理内存占用降低约 1/3"))
|
||||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "在选择 OptiFine 与 Fabric 后会自动选择 OptiFabric"))
|
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "在选择 OptiFine 与 Fabric 后会自动选择 OptiFabric"))
|
||||||
@@ -366,8 +378,14 @@ Public Class FormMain
|
|||||||
End If
|
End If
|
||||||
'加载窗口
|
'加载窗口
|
||||||
ThemeRefreshMain()
|
ThemeRefreshMain()
|
||||||
Height = ReadReg("WindowHeight", MinHeight + 50)
|
Try
|
||||||
Width = ReadReg("WindowWidth", MinWidth + 50)
|
Height = ReadReg("WindowHeight", MinHeight + 50)
|
||||||
|
Width = ReadReg("WindowWidth", MinWidth + 50)
|
||||||
|
Catch ex As Exception '修复 #2019
|
||||||
|
Log(ex, "读取窗口默认大小失败", LogLevel.Hint)
|
||||||
|
Height = MinHeight + 50
|
||||||
|
Width = MinWidth + 50
|
||||||
|
End Try
|
||||||
Topmost = False
|
Topmost = False
|
||||||
If FrmStart IsNot Nothing Then FrmStart.Close(New TimeSpan(0, 0, 0, 0, 400 / AniSpeed))
|
If FrmStart IsNot Nothing Then FrmStart.Close(New TimeSpan(0, 0, 0, 0, 400 / AniSpeed))
|
||||||
'更改窗口
|
'更改窗口
|
||||||
@@ -585,6 +603,7 @@ Public Class FormMain
|
|||||||
Process.GetCurrentProcess.Kill()
|
Process.GetCurrentProcess.Kill()
|
||||||
Else
|
Else
|
||||||
Environment.Exit(ReturnCode)
|
Environment.Exit(ReturnCode)
|
||||||
|
Process.GetCurrentProcess.Kill()
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub BtnTitleClose_Click(sender As Object, e As RoutedEventArgs) Handles BtnTitleClose.Click
|
Private Sub BtnTitleClose_Click(sender As Object, e As RoutedEventArgs) Handles BtnTitleClose.Click
|
||||||
@@ -612,6 +631,7 @@ Public Class FormMain
|
|||||||
PanForm.Height = BorderForm.ActualHeight + 0.001
|
PanForm.Height = BorderForm.ActualHeight + 0.001
|
||||||
PanMain.Width = PanForm.Width
|
PanMain.Width = PanForm.Width
|
||||||
PanMain.Height = Math.Max(0, PanForm.Height - PanTitle.ActualHeight)
|
PanMain.Height = Math.Max(0, PanForm.Height - PanTitle.ActualHeight)
|
||||||
|
If WindowState = WindowState.Maximized Then WindowState = WindowState.Normal '修复 #1938
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
'最小化
|
'最小化
|
||||||
|
|||||||
@@ -11,12 +11,12 @@ Public Module ModBase
|
|||||||
#Region "声明"
|
#Region "声明"
|
||||||
|
|
||||||
'下列版本信息由更新器自动修改
|
'下列版本信息由更新器自动修改
|
||||||
Public Const VersionBaseName As String = "2.6.2" '不含分支前缀的显示用版本名
|
Public Const VersionBaseName As String = "2.6.3" '不含分支前缀的显示用版本名
|
||||||
Public Const VersionStandardCode As String = "2.6.2." & VersionBranchCode '标准格式的四段式版本号
|
Public Const VersionStandardCode As String = "2.6.3." & VersionBranchCode '标准格式的四段式版本号
|
||||||
#If BETA Then
|
#If BETA Then
|
||||||
Public Const VersionCode As Integer = 293 'Release
|
Public Const VersionCode As Integer = 293 'Release
|
||||||
#Else
|
#Else
|
||||||
Public Const VersionCode As Integer = 294 'Snapshot
|
Public Const VersionCode As Integer = 295 'Snapshot
|
||||||
#End If
|
#End If
|
||||||
'自动生成的版本信息
|
'自动生成的版本信息
|
||||||
Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName
|
Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName
|
||||||
|
|||||||
@@ -468,8 +468,10 @@ NoExName:
|
|||||||
'去除 “Forge/Fabric” 这一无意义提示
|
'去除 “Forge/Fabric” 这一无意义提示
|
||||||
If Ex.Length < 19 AndAlso Ex.ToLower.Contains("fabric") AndAlso Ex.ToLower.Contains("forge") Then Continue For
|
If Ex.Length < 19 AndAlso Ex.ToLower.Contains("fabric") AndAlso Ex.ToLower.Contains("forge") Then Continue For
|
||||||
'将 “Forge” 等提示改为 “Forge 版”
|
'将 “Forge” 等提示改为 “Forge 版”
|
||||||
If (Ex.ToLower.Contains("forge") OrElse Ex.ToLower.Contains("fabric") OrElse Ex.ToLower.Contains("quilt")) AndAlso
|
If (Ex.ToLower.Contains("forge") OrElse Ex.ToLower.Contains("fabric") OrElse Ex.ToLower.Contains("quilt")) AndAlso Not Ex.Contains("版") AndAlso
|
||||||
Not Ex.Contains("版") AndAlso Ex.Length < 19 Then Ex = Ex.Replace("Edition", "").Trim.Capitalize & " 版"
|
Ex.ToLower.Replace("forge", "").Replace("fabric", "").Replace("quilt", "").Length <= 3 Then
|
||||||
|
Ex = Ex.Replace("Edition", "").Trim.Capitalize & " 版"
|
||||||
|
End If
|
||||||
ExName &= " | " & Ex.Trim
|
ExName &= " | " & Ex.Trim
|
||||||
Next
|
Next
|
||||||
If ExName = "" Then GoTo NoExName
|
If ExName = "" Then GoTo NoExName
|
||||||
|
|||||||
@@ -165,37 +165,37 @@
|
|||||||
DirectFile = Nothing
|
DirectFile = Nothing
|
||||||
Dim TotalFiles As New List(Of KeyValuePair(Of AnalyzeFileType, KeyValuePair(Of String, String())))
|
Dim TotalFiles As New List(Of KeyValuePair(Of AnalyzeFileType, KeyValuePair(Of String, String())))
|
||||||
For Each LogFile In AnalyzeRawFiles
|
For Each LogFile In AnalyzeRawFiles
|
||||||
Dim FileName As String = GetFileNameFromPath(LogFile.Key)
|
Dim MatchName As String = GetFileNameFromPath(LogFile.Key).ToLower
|
||||||
Dim TargetType As AnalyzeFileType
|
Dim TargetType As AnalyzeFileType
|
||||||
If FileName.StartsWith("hs_err") Then
|
If MatchName.StartsWith("hs_err") Then
|
||||||
TargetType = AnalyzeFileType.HsErr
|
TargetType = AnalyzeFileType.HsErr
|
||||||
DirectFile = LogFile
|
DirectFile = LogFile
|
||||||
ElseIf FileName.StartsWith("crash-") Then
|
ElseIf MatchName.StartsWith("crash-") Then
|
||||||
TargetType = AnalyzeFileType.CrashReport
|
TargetType = AnalyzeFileType.CrashReport
|
||||||
DirectFile = LogFile
|
DirectFile = LogFile
|
||||||
ElseIf FileName = "latest.log" OrElse FileName = "latest log.txt" OrElse
|
ElseIf MatchName = "latest.log" OrElse MatchName = "latest log.txt" OrElse
|
||||||
FileName = "debug.log" OrElse FileName = "debug log.txt" OrElse
|
MatchName = "debug.log" OrElse MatchName = "debug log.txt" OrElse
|
||||||
FileName = "游戏崩溃前的输出.txt" OrElse FileName = "rawoutput.log" Then
|
MatchName = "游戏崩溃前的输出.txt" OrElse MatchName = "rawoutput.log" Then
|
||||||
TargetType = AnalyzeFileType.MinecraftLog
|
TargetType = AnalyzeFileType.MinecraftLog
|
||||||
If DirectFile Is Nothing Then DirectFile = LogFile
|
If DirectFile Is Nothing Then DirectFile = LogFile
|
||||||
ElseIf FileName = "启动器日志.txt" OrElse FileName = "PCL2 启动器日志.txt" OrElse FileName = "PCL 启动器日志.txt" OrElse FileName = "log1.txt" Then
|
ElseIf MatchName = "启动器日志.txt" OrElse MatchName = "PCL2 启动器日志.txt" OrElse MatchName = "PCL 启动器日志.txt" OrElse MatchName = "log1.txt" Then
|
||||||
If LogFile.Value.Any(Function(s) s.Contains("以下为游戏输出的最后一段内容")) Then
|
If LogFile.Value.Any(Function(s) s.Contains("以下为游戏输出的最后一段内容")) Then
|
||||||
TargetType = AnalyzeFileType.MinecraftLog
|
TargetType = AnalyzeFileType.MinecraftLog
|
||||||
If DirectFile Is Nothing Then DirectFile = LogFile
|
If DirectFile Is Nothing Then DirectFile = LogFile
|
||||||
Else
|
Else
|
||||||
TargetType = AnalyzeFileType.ExtraLog
|
TargetType = AnalyzeFileType.ExtraLog
|
||||||
End If
|
End If
|
||||||
ElseIf FileName.EndsWith(".log") OrElse FileName.EndsWith(".txt") Then
|
ElseIf MatchName.EndsWith(".log") OrElse MatchName.EndsWith(".txt") Then
|
||||||
TargetType = AnalyzeFileType.ExtraLog
|
TargetType = AnalyzeFileType.ExtraLog
|
||||||
Else
|
Else
|
||||||
Log("[Crash] " & FileName & " 分类为 Ignore")
|
Log("[Crash] " & MatchName & " 分类为 Ignore")
|
||||||
Continue For
|
Continue For
|
||||||
End If
|
End If
|
||||||
If LogFile.Value.Count = 0 Then
|
If LogFile.Value.Count = 0 Then
|
||||||
Log("[Crash] " & FileName & " 由于内容为空跳过")
|
Log("[Crash] " & MatchName & " 由于内容为空跳过")
|
||||||
Else
|
Else
|
||||||
TotalFiles.Add(New KeyValuePair(Of AnalyzeFileType, KeyValuePair(Of String, String()))(TargetType, LogFile))
|
TotalFiles.Add(New KeyValuePair(Of AnalyzeFileType, KeyValuePair(Of String, String()))(TargetType, LogFile))
|
||||||
Log("[Crash] " & FileName & " 分类为 " & GetStringFromEnum(TargetType))
|
Log("[Crash] " & MatchName & " 分类为 " & GetStringFromEnum(TargetType))
|
||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
|
|
||||||
@@ -364,6 +364,7 @@
|
|||||||
NightConfig的Bug
|
NightConfig的Bug
|
||||||
ShadersMod与Optifine同时安装
|
ShadersMod与Optifine同时安装
|
||||||
Forge安装不完整
|
Forge安装不完整
|
||||||
|
Mod需要Java11
|
||||||
End Enum
|
End Enum
|
||||||
''' <summary>
|
''' <summary>
|
||||||
''' 根据 AnalyzeLogs 与可能的版本信息分析崩溃原因。
|
''' 根据 AnalyzeLogs 与可能的版本信息分析崩溃原因。
|
||||||
@@ -469,6 +470,7 @@ Done:
|
|||||||
If LogMc.Contains("java.lang.ClassCastException: class jdk.") Then AppendReason(CrashReason.使用JDK)
|
If LogMc.Contains("java.lang.ClassCastException: class jdk.") Then AppendReason(CrashReason.使用JDK)
|
||||||
If LogMc.Contains("TRANSFORMER/net.optifine/net.optifine.reflect.Reflector.<clinit>(Reflector.java") Then AppendReason(CrashReason.OptiFine与Forge不兼容)
|
If LogMc.Contains("TRANSFORMER/net.optifine/net.optifine.reflect.Reflector.<clinit>(Reflector.java") Then AppendReason(CrashReason.OptiFine与Forge不兼容)
|
||||||
If LogMc.Contains("java.lang.NoSuchMethodError: 'void net.minecraft.client.renderer.texture.SpriteContents.<init>(net.minecraft.resources.ResourceLocation, ") Then AppendReason(CrashReason.OptiFine与Forge不兼容)
|
If LogMc.Contains("java.lang.NoSuchMethodError: 'void net.minecraft.client.renderer.texture.SpriteContents.<init>(net.minecraft.resources.ResourceLocation, ") Then AppendReason(CrashReason.OptiFine与Forge不兼容)
|
||||||
|
If LogMc.Contains("java.lang.NoSuchMethodError: 'java.lang.String com.mojang.blaze3d.systems.RenderSystem.getBackendDescription") Then AppendReason(CrashReason.OptiFine与Forge不兼容)
|
||||||
If LogMc.Contains("java.lang.NoSuchMethodError: 'void net.minecraft.client.renderer.block.model.BakedQuad.<init>(int[], int, net.minecraft.core.Direction, net.minecraft.client.renderer.texture.TextureAtlasSprite, boolean, boolean)'") Then AppendReason(CrashReason.OptiFine与Forge不兼容)
|
If LogMc.Contains("java.lang.NoSuchMethodError: 'void net.minecraft.client.renderer.block.model.BakedQuad.<init>(int[], int, net.minecraft.core.Direction, net.minecraft.client.renderer.texture.TextureAtlasSprite, boolean, boolean)'") Then AppendReason(CrashReason.OptiFine与Forge不兼容)
|
||||||
If LogMc.Contains("java.lang.NoSuchMethodError: 'void net.minecraft.server.level.DistanceManager.addRegionTicket(net.minecraft.server.level.TicketType, net.minecraft.world.level.ChunkPos, int, java.lang.Object, boolean)'") Then AppendReason(CrashReason.OptiFine与Forge不兼容)
|
If LogMc.Contains("java.lang.NoSuchMethodError: 'void net.minecraft.server.level.DistanceManager.addRegionTicket(net.minecraft.server.level.TicketType, net.minecraft.world.level.ChunkPos, int, java.lang.Object, boolean)'") Then AppendReason(CrashReason.OptiFine与Forge不兼容)
|
||||||
If LogMc.Contains("java.lang.NoSuchMethodError: 'void net.minecraft.server.level.DistanceManager.removeRegionTicket(net.minecraft.server.level.TicketType, net.minecraft.world.level.ChunkPos, int, java.lang.Object, boolean)'") Then AppendReason(CrashReason.OptiFine与Forge不兼容)
|
If LogMc.Contains("java.lang.NoSuchMethodError: 'void net.minecraft.server.level.DistanceManager.removeRegionTicket(net.minecraft.server.level.TicketType, net.minecraft.world.level.ChunkPos, int, java.lang.Object, boolean)'") Then AppendReason(CrashReason.OptiFine与Forge不兼容)
|
||||||
@@ -492,7 +494,10 @@ Done:
|
|||||||
If LogMc.Contains("com.electronwill.nightconfig.core.io.ParsingException: Not enough data available") Then AppendReason(CrashReason.NightConfig的Bug)
|
If LogMc.Contains("com.electronwill.nightconfig.core.io.ParsingException: Not enough data available") Then AppendReason(CrashReason.NightConfig的Bug)
|
||||||
If LogMc.Contains("Cannot find launch target fmlclient, unable to launch") Then AppendReason(CrashReason.Forge安装不完整)
|
If LogMc.Contains("Cannot find launch target fmlclient, unable to launch") Then AppendReason(CrashReason.Forge安装不完整)
|
||||||
If LogMc.Contains("Invalid module name: '' is not a Java identifier") Then AppendReason(CrashReason.Mod名称包含特殊字符)
|
If LogMc.Contains("Invalid module name: '' is not a Java identifier") Then AppendReason(CrashReason.Mod名称包含特殊字符)
|
||||||
|
If LogMc.Contains("has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to") Then AppendReason(CrashReason.Mod需要Java11)
|
||||||
|
If LogMc.Contains("java.lang.RuntimeException: java.lang.NoSuchMethodException: no such method: sun.misc.Unsafe.defineAnonymousClass(Class,byte[],Object[])Class/invokeVirtual") Then AppendReason(CrashReason.Mod需要Java11)
|
||||||
If LogMc.Contains("java.lang.UnsupportedClassVersionError: net/fabricmc/loader/impl/launch/knot/KnotClient : Unsupported major.minor version") Then AppendReason(CrashReason.Java版本不兼容)
|
If LogMc.Contains("java.lang.UnsupportedClassVersionError: net/fabricmc/loader/impl/launch/knot/KnotClient : Unsupported major.minor version") Then AppendReason(CrashReason.Java版本不兼容)
|
||||||
|
If LogMc.Contains("Invalid maximum heap size") Then AppendReason(CrashReason.使用32位Java导致JVM无法分配足够多的内存)
|
||||||
If LogMc.Contains("Could not reserve enough space") Then
|
If LogMc.Contains("Could not reserve enough space") Then
|
||||||
If LogMc.Contains("for 1048576KB object heap") Then
|
If LogMc.Contains("for 1048576KB object heap") Then
|
||||||
AppendReason(CrashReason.使用32位Java导致JVM无法分配足够多的内存)
|
AppendReason(CrashReason.使用32位Java导致JVM无法分配足够多的内存)
|
||||||
@@ -505,16 +510,15 @@ Done:
|
|||||||
If LogMc.Contains("Found a duplicate mod") Then AppendReason(CrashReason.Mod重复安装, RegexSearch(If(RegexSeek(LogMc, "Found a duplicate mod[^\n]+"), ""), "[^\\/]+.jar", RegularExpressions.RegexOptions.IgnoreCase))
|
If LogMc.Contains("Found a duplicate mod") Then AppendReason(CrashReason.Mod重复安装, RegexSearch(If(RegexSeek(LogMc, "Found a duplicate mod[^\n]+"), ""), "[^\\/]+.jar", RegularExpressions.RegexOptions.IgnoreCase))
|
||||||
If LogMc.Contains("ModResolutionException: Duplicate") Then AppendReason(CrashReason.Mod重复安装, RegexSearch(If(RegexSeek(LogMc, "ModResolutionException: Duplicate[^\n]+"), ""), "[^\\/]+.jar", RegularExpressions.RegexOptions.IgnoreCase))
|
If LogMc.Contains("ModResolutionException: Duplicate") Then AppendReason(CrashReason.Mod重复安装, RegexSearch(If(RegexSeek(LogMc, "ModResolutionException: Duplicate[^\n]+"), ""), "[^\\/]+.jar", RegularExpressions.RegexOptions.IgnoreCase))
|
||||||
'Mod 导致的崩溃
|
'Mod 导致的崩溃
|
||||||
If LogMc.Contains("Mixin prepare failed ") OrElse LogMc.Contains("Mixin apply failed ") OrElse
|
If LogMc.Contains("Mixin prepare failed ") OrElse LogMc.Contains("Mixin apply failed ") OrElse LogMc.Contains("MixinApplyError") OrElse
|
||||||
LogMc.Contains("mixin.injection.throwables.") OrElse LogMc.Contains(".mixins.json] FAILED during )") Then
|
LogMc.Contains("mixin.injection.throwables.") OrElse LogMc.Contains(".mixins.json] FAILED during )") Then
|
||||||
Dim ModId As String = RegexSeek(LogMc, "(?<=in )[^./ ]+(?=.mixins.json.+failed injection check)")
|
Dim ModId As String = RegexSeek(LogMc, "(?<=in )[^./ ]+(?=.mixins.json.+failed injection check)")
|
||||||
If ModId Is Nothing Then ModId = RegexSeek(LogMc, "(?<=in mixins.)[^./ ]+(?=.json.+failed injection check)")
|
If ModId Is Nothing Then ModId = RegexSeek(LogMc, "(?<=in mixins.)[^./ ]+(?=.json.+failed injection check)")
|
||||||
If ModId Is Nothing Then ModId = RegexSeek(LogMc, "(?<= failed .+ in )[^./ ]+(?=.mixins.json)")
|
If ModId Is Nothing Then ModId = RegexSeek(LogMc, "(?<= failed .+ in )[^./ ]+(?=.mixins.json)")
|
||||||
If ModId Is Nothing Then ModId = RegexSeek(LogMc, "(?<= failed .+ in mixins.)[^./ ]+(?=.json)")
|
If ModId Is Nothing Then ModId = RegexSeek(LogMc, "(?<= failed .+ in mixins.)[^./ ]+(?=.json)")
|
||||||
If ModId Is Nothing Then ModId = RegexSeek(LogMc, "(?<= in config \[)[^./ ]+(?=.mixins.json\] FAILED during )")
|
If ModId Is Nothing Then ModId = RegexSeek(LogMc, "(?<= in config \[)[^./ ]+(?=.mixins.json\] FAILED during )")
|
||||||
If ModId Is Nothing Then ModId = RegexSeek(LogMc, "(?<= in config \[mixins.)[^./ ]+(?=.json\] FAILED during )")
|
If ModId Is Nothing Then ModId = RegexSeek(LogMc, "(?<= in config \[mixins.)[^./ ]+(?=.json\] FAILED during )")
|
||||||
If ModId Is Nothing Then ModId = RegexSeek(LogMc, "(?<= in callback )[^./ ]+(?=.mixins.json:)")
|
If ModId Is Nothing Then ModId = RegexSeek(LogMc, "(?<=from mod )[^./ ]+(?=\] from)")
|
||||||
If ModId Is Nothing Then ModId = RegexSeek(LogMc, "(?<=from mod )[^\] ]+(?=\] from phase)")
|
|
||||||
If ModId Is Nothing Then ModId = RegexSeek(LogMc, "(?<=for mod )[^./ ]+(?= failed)")
|
If ModId Is Nothing Then ModId = RegexSeek(LogMc, "(?<=for mod )[^./ ]+(?= failed)")
|
||||||
'兜底名称判断
|
'兜底名称判断
|
||||||
If ModId Is Nothing Then ModId = RegexSeek(LogMc, "[^./ \]]+(?=.mixins.json")
|
If ModId Is Nothing Then ModId = RegexSeek(LogMc, "[^./ \]]+(?=.mixins.json")
|
||||||
@@ -622,11 +626,11 @@ NextStack:
|
|||||||
Dim Word As String = Splited(i)
|
Dim Word As String = Splited(i)
|
||||||
If Word.Length <= 2 OrElse Word.StartsWith("func_") Then Continue For
|
If Word.Length <= 2 OrElse Word.StartsWith("func_") Then Continue For
|
||||||
If {"com", "org", "net", "asm", "fml", "mod", "jar", "sun", "lib", "map", "gui", "dev", "nio", "api", "dsi", "top",
|
If {"com", "org", "net", "asm", "fml", "mod", "jar", "sun", "lib", "map", "gui", "dev", "nio", "api", "dsi", "top",
|
||||||
"core", "init", "mods", "main", "file", "game", "load", "read", "done", "util", "tile", "item", "base",
|
"core", "init", "mods", "main", "file", "game", "load", "read", "done", "util", "tile", "item", "base", "oshi",
|
||||||
"forge", "setup", "block", "model", "mixin", "event", "unimi", "netty",
|
"forge", "setup", "block", "model", "mixin", "event", "unimi", "netty",
|
||||||
"common", "server", "config", "loader", "launch", "entity", "assist", "client", "plugin", "modapi", "mojang", "shader", "events", "github", "recipe",
|
"common", "server", "config", "loader", "launch", "entity", "assist", "client", "plugin", "modapi", "mojang", "shader", "events", "github", "recipe",
|
||||||
"preinit", "preload", "machine", "reflect", "channel", "general", "handler", "content",
|
"preinit", "preload", "machine", "reflect", "channel", "general", "handler", "content",
|
||||||
"fastutil", "optifine", "scheduler", "minecraft", "transformers", "universal", "internal", "multipart", "minecraftforge", "override", "blockentity"
|
"fastutil", "optifine", "scheduler", "minecraft", "transformers", "universal", "internal", "multipart", "minecraftforge", "override", "blockentity", "platform"
|
||||||
}.Contains(Word.ToLower) Then Continue For
|
}.Contains(Word.ToLower) Then Continue For
|
||||||
PossibleWords.Add(Word.Trim)
|
PossibleWords.Add(Word.Trim)
|
||||||
Next
|
Next
|
||||||
@@ -818,9 +822,9 @@ NextStack:
|
|||||||
Results.Add("由于有 Mod 的名称包含特殊字符,导致游戏崩溃。\n请尝试修改 Mod 文件名,让它只包含英文字母、数字、减号(-)、下划线(_)和小数点,然后再启动游戏。")
|
Results.Add("由于有 Mod 的名称包含特殊字符,导致游戏崩溃。\n请尝试修改 Mod 文件名,让它只包含英文字母、数字、减号(-)、下划线(_)和小数点,然后再启动游戏。")
|
||||||
Case CrashReason.使用32位Java导致JVM无法分配足够多的内存
|
Case CrashReason.使用32位Java导致JVM无法分配足够多的内存
|
||||||
If Environment.Is64BitOperatingSystem Then
|
If Environment.Is64BitOperatingSystem Then
|
||||||
Results.Add("你似乎正在使用 32 位 Java,这会导致 Minecraft 无法使用 1GB 以上的内存,进而造成崩溃。\n\n请在启动设置的 Java 选择一项中改用 64 位的 Java 再启动游戏,然后再启动游戏。\n如果你没有安装 64 位的 Java,你可以从网络中下载、安装一个。")
|
Results.Add("你似乎正在使用 32 位 Java,这会导致 Minecraft 无法使用所需的内存,进而造成崩溃。\n\n请在启动设置的 Java 选择一项中改用 64 位的 Java 再启动游戏,然后再启动游戏。\n如果你没有安装 64 位的 Java,你可以从网络中下载、安装一个。")
|
||||||
Else
|
Else
|
||||||
Results.Add("你正在使用 32 位的操作系统,这会导致 Minecraft 无法使用 1GB 以上的内存,进而造成崩溃。\n\n你或许只能重装 64 位的操作系统来解决此问题。\n如果你的电脑内存在 2GB 以内,那或许只能换台电脑了……\h")
|
Results.Add("你正在使用 32 位的操作系统,这会导致 Minecraft 无法使用所需的内存,进而造成崩溃。\n\n你或许只能重装 64 位的操作系统来解决此问题。\n如果你的电脑内存在 2GB 以内,那或许只能换台电脑了……\h")
|
||||||
End If
|
End If
|
||||||
Case CrashReason.崩溃日志堆栈分析发现关键字, CrashReason.MC日志堆栈分析发现关键字
|
Case CrashReason.崩溃日志堆栈分析发现关键字, CrashReason.MC日志堆栈分析发现关键字
|
||||||
If Additional.Count = 1 Then
|
If Additional.Count = 1 Then
|
||||||
@@ -886,6 +890,8 @@ NextStack:
|
|||||||
Results.Add("可能由于使用其他启动器修改了 Forge 版本,当前版本的文件存在异常,导致了游戏崩溃。\n请尝试重新全新安装 Forge,而非使用其他启动器修改 Forge 版本。")
|
Results.Add("可能由于使用其他启动器修改了 Forge 版本,当前版本的文件存在异常,导致了游戏崩溃。\n请尝试重新全新安装 Forge,而非使用其他启动器修改 Forge 版本。")
|
||||||
Case CrashReason.玩家手动触发调试崩溃
|
Case CrashReason.玩家手动触发调试崩溃
|
||||||
Results.Add("* 事实上,你的游戏没有任何问题,这是你自己触发的崩溃。\n* 你难道没有更重要的事要做吗?")
|
Results.Add("* 事实上,你的游戏没有任何问题,这是你自己触发的崩溃。\n* 你难道没有更重要的事要做吗?")
|
||||||
|
Case CrashReason.Mod需要Java11
|
||||||
|
Results.Add("你所安装的部分 Mod 似乎需要使用 Java 11 启动。\n请在启动设置的 Java 选择一项中改用 Java 11,然后再启动游戏。\n如果你没有安装 Java 11,你可以从网络中下载、安装一个。")
|
||||||
Case CrashReason.极短的程序输出
|
Case CrashReason.极短的程序输出
|
||||||
Results.Add($"程序返回了以下信息:\n{Additional.First}\n\h")
|
Results.Add($"程序返回了以下信息:\n{Additional.First}\n\h")
|
||||||
Case CrashReason.OptiFine导致无法加载世界 'https://www.minecraftforum.net/forums/support/java-edition-support/3051132-exception-ticking-world
|
Case CrashReason.OptiFine导致无法加载世界 'https://www.minecraftforum.net/forums/support/java-edition-support/3051132-exception-ticking-world
|
||||||
@@ -947,8 +953,10 @@ NextStack:
|
|||||||
Replace("\e", If(IsHandAnalyze, "", vbCrLf & "你可以查看错误报告了解错误具体是如何发生的。")).
|
Replace("\e", If(IsHandAnalyze, "", vbCrLf & "你可以查看错误报告了解错误具体是如何发生的。")).
|
||||||
Replace(vbCrLf, vbCr).Replace(vbLf, vbCr).Replace(vbCr, vbCrLf).
|
Replace(vbCrLf, vbCr).Replace(vbLf, vbCr).Replace(vbCr, vbCrLf).
|
||||||
Trim(vbCrLf.ToCharArray) &
|
Trim(vbCrLf.ToCharArray) &
|
||||||
If(Results.Any(Function(r) r.EndsWith("\h")),
|
If(Not Results.Any(Function(r) r.EndsWith("\h")) OrElse IsHandAnalyze, "",
|
||||||
If(IsHandAnalyze, "", vbCrLf & "如果要寻求帮助,请向他人发送错误报告文件,而不是发送这个窗口的截图。"), "")
|
vbCrLf & "如果要寻求帮助,请向他人发送错误报告文件,而不是发送这个窗口的截图。" &
|
||||||
|
If(If(PageSetupSystem.IsLauncherNewest(), True), "",
|
||||||
|
vbCrLf & vbCrLf & "此外,你正在使用老版本 PCL,更新到最新版可能会修复这个问题。" & vbCrLf & "你可以点击 设置 → 启动器 → 检查更新 来更新 PCL。"))
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
End Class
|
End Class
|
||||||
|
|||||||
@@ -182,7 +182,8 @@
|
|||||||
Log("[Java] 初始化未找到可用的 Java,将自动触发搜索", LogLevel.Developer)
|
Log("[Java] 初始化未找到可用的 Java,将自动触发搜索", LogLevel.Developer)
|
||||||
JavaSearchLoader.Start(0)
|
JavaSearchLoader.Start(0)
|
||||||
Else
|
Else
|
||||||
Log("[Java] 缓存中有 " & JavaList.Count & " 个可用的 Java")
|
Log("[Java] 缓存中有 " & JavaList.Count & " 个可用的 Java:")
|
||||||
|
JavaList.ForEach(Sub(j) Log($"[Java] - {j}"))
|
||||||
End If
|
End If
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Log(ex, "初始化 Java 列表失败", LogLevel.Feedback)
|
Log(ex, "初始化 Java 列表失败", LogLevel.Feedback)
|
||||||
@@ -201,7 +202,9 @@
|
|||||||
|
|
||||||
'添加特定的 Java
|
'添加特定的 Java
|
||||||
Dim JavaPreList As New Dictionary(Of String, Boolean)
|
Dim JavaPreList As New Dictionary(Of String, Boolean)
|
||||||
If PathMcFolder.Split("\").Count > 3 Then JavaSearchFolder(GetPathFromFullPath(PathMcFolder), JavaPreList, False, True) 'Minecraft 文件夹的父文件夹(如果不是根目录的话)
|
If PathMcFolder.Split("\").Count > 3 Then
|
||||||
|
JavaSearchFolder(GetPathFromFullPath(PathMcFolder), JavaPreList, False, True) 'Minecraft 文件夹的父文件夹(如果不是根目录的话)
|
||||||
|
End If
|
||||||
JavaSearchFolder(PathMcFolder, JavaPreList, False, True) 'Minecraft 文件夹
|
JavaSearchFolder(PathMcFolder, JavaPreList, False, True) 'Minecraft 文件夹
|
||||||
If RelatedVersion IsNot Nothing Then JavaSearchFolder(RelatedVersion.Path, JavaPreList, False, True) '所选版本文件夹
|
If RelatedVersion IsNot Nothing Then JavaSearchFolder(RelatedVersion.Path, JavaPreList, False, True) '所选版本文件夹
|
||||||
Dim TargetJavaList As New List(Of JavaEntry)
|
Dim TargetJavaList As New List(Of JavaEntry)
|
||||||
@@ -209,6 +212,15 @@
|
|||||||
TargetJavaList.Add(New JavaEntry(Entry.Key, Entry.Value))
|
TargetJavaList.Add(New JavaEntry(Entry.Key, Entry.Value))
|
||||||
Next
|
Next
|
||||||
|
|
||||||
|
'检查特定的 Java
|
||||||
|
If TargetJavaList.Count > 0 Then
|
||||||
|
TargetJavaList = JavaCheckList(TargetJavaList)
|
||||||
|
Log("[Java] 检查后找到 " & TargetJavaList.Count & " 个特定路径下的 Java:")
|
||||||
|
For Each Java In TargetJavaList
|
||||||
|
Log($"[Java] - {Java}")
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
|
||||||
#Region "添加用户指定的 Java,储存到 UserJava 中"
|
#Region "添加用户指定的 Java,储存到 UserJava 中"
|
||||||
|
|
||||||
Dim UserJava As JavaEntry = Nothing
|
Dim UserJava As JavaEntry = Nothing
|
||||||
@@ -217,13 +229,7 @@
|
|||||||
If RelatedVersion IsNot Nothing AndAlso Setup.Get("VersionArgumentJavaSelect", Version:=RelatedVersion).ToString.StartsWith("{") Then
|
If RelatedVersion IsNot Nothing AndAlso Setup.Get("VersionArgumentJavaSelect", Version:=RelatedVersion).ToString.StartsWith("{") Then
|
||||||
Try
|
Try
|
||||||
UserJava = JavaEntry.FromJson(GetJson(Setup.Get("VersionArgumentJavaSelect", Version:=RelatedVersion)))
|
UserJava = JavaEntry.FromJson(GetJson(Setup.Get("VersionArgumentJavaSelect", Version:=RelatedVersion)))
|
||||||
'确保版本独立设置中指定的 Java 在 Java 列表中(#978)
|
UserJava.Check()
|
||||||
If Not JavaList.Any(Function(j) j.PathFolder = UserJava.PathFolder) Then
|
|
||||||
UserJava = Nothing
|
|
||||||
Setup.Reset("VersionArgumentJavaSelect", Version:=RelatedVersion)
|
|
||||||
Log("版本独立设置中指定的 Java 不在主 Java 列表中,此设置已重置", LogLevel.Debug)
|
|
||||||
Exit Try
|
|
||||||
End If
|
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
UserJava = Nothing
|
UserJava = Nothing
|
||||||
Setup.Reset("VersionArgumentJavaSelect", Version:=RelatedVersion)
|
Setup.Reset("VersionArgumentJavaSelect", Version:=RelatedVersion)
|
||||||
@@ -235,10 +241,11 @@
|
|||||||
If UserJava Is Nothing AndAlso Setup.Get("LaunchArgumentJavaSelect") <> "" Then
|
If UserJava Is Nothing AndAlso Setup.Get("LaunchArgumentJavaSelect") <> "" Then
|
||||||
Try
|
Try
|
||||||
UserJava = JavaEntry.FromJson(GetJson(Setup.Get("LaunchArgumentJavaSelect")))
|
UserJava = JavaEntry.FromJson(GetJson(Setup.Get("LaunchArgumentJavaSelect")))
|
||||||
|
UserJava.Check()
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
UserJava = Nothing
|
UserJava = Nothing
|
||||||
Setup.Reset("LaunchArgumentJavaSelect")
|
Setup.Reset("LaunchArgumentJavaSelect")
|
||||||
Log(ex, "设置中指定的 Java 已无法使用,此设置已重置", LogLevel.Hint)
|
Log(ex, "全局设置中指定的 Java 已无法使用,此设置已重置", LogLevel.Hint)
|
||||||
End Try
|
End Try
|
||||||
End If
|
End If
|
||||||
|
|
||||||
@@ -250,12 +257,6 @@
|
|||||||
|
|
||||||
#End Region
|
#End Region
|
||||||
|
|
||||||
'检查特定的 Java
|
|
||||||
If TargetJavaList.Count > 0 Then
|
|
||||||
TargetJavaList = JavaCheckList(TargetJavaList)
|
|
||||||
Log("[Java] 检查后找到 " & TargetJavaList.Count & " 个特定的 Java")
|
|
||||||
End If
|
|
||||||
|
|
||||||
RetryGet:
|
RetryGet:
|
||||||
'等待进行中的搜索结束
|
'等待进行中的搜索结束
|
||||||
If JavaSearchLoader.State <> LoadState.Finished AndAlso JavaSearchLoader.State <> LoadState.Waiting Then JavaSearchLoader.WaitForExit()
|
If JavaSearchLoader.State <> LoadState.Finished AndAlso JavaSearchLoader.State <> LoadState.Waiting Then JavaSearchLoader.WaitForExit()
|
||||||
@@ -298,8 +299,9 @@ RetryGet:
|
|||||||
|
|
||||||
'指定的 Java 不可用,弹窗要求选择
|
'指定的 Java 不可用,弹窗要求选择
|
||||||
Log("[Java] 发现用户指定的不兼容 Java:" & UserJava.ToString)
|
Log("[Java] 发现用户指定的不兼容 Java:" & UserJava.ToString)
|
||||||
|
Log($"[Java] 目前实际可用的 Java 列表:")
|
||||||
For Each Java In AllowedJavaList
|
For Each Java In AllowedJavaList
|
||||||
Log($"[Java] 实际可用的 Java:{Java.ToString}")
|
Log($"[Java] - {Java}")
|
||||||
Next
|
Next
|
||||||
Dim Requirement As String = ""
|
Dim Requirement As String = ""
|
||||||
Dim ShowRevision As Boolean = False
|
Dim ShowRevision As Boolean = False
|
||||||
@@ -344,10 +346,12 @@ ExitUserJavaCheck:
|
|||||||
|
|
||||||
'优先使用特定目录下的 Java
|
'优先使用特定目录下的 Java
|
||||||
For Each Java In AllowedJavaList
|
For Each Java In AllowedJavaList
|
||||||
|
'如果在官启文件夹启动,会将官启自带 Java 错误视作 MC 文件夹指定 Java,导致了 #2054 的第二例
|
||||||
|
If Java.PathFolder.Contains(".minecraft\cache\java") Then Continue For
|
||||||
If TargetJavaList.Contains(Java) Then
|
If TargetJavaList.Contains(Java) Then
|
||||||
'直接使用指定的 Java
|
'直接使用指定的 Java
|
||||||
AllowedJavaList = New List(Of JavaEntry) From {Java}
|
AllowedJavaList = New List(Of JavaEntry) From {Java}
|
||||||
Log("[Java] 优先使用特定的 Java:" & Java.ToString)
|
Log("[Java] 优先使用特定路径下的 Java:" & Java.ToString)
|
||||||
GoTo UserPass
|
GoTo UserPass
|
||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
@@ -355,6 +359,10 @@ UserPass:
|
|||||||
|
|
||||||
'对适合的 Java 进行排序
|
'对适合的 Java 进行排序
|
||||||
AllowedJavaList = Sort(AllowedJavaList, AddressOf JavaSorter)
|
AllowedJavaList = Sort(AllowedJavaList, AddressOf JavaSorter)
|
||||||
|
Log($"[Java] 排序后的 Java 优先顺序:")
|
||||||
|
For Each Java In AllowedJavaList
|
||||||
|
Log($"[Java] - {Java}")
|
||||||
|
Next
|
||||||
|
|
||||||
'检查选定的 Java,若测试失败则尝试进行搜索
|
'检查选定的 Java,若测试失败则尝试进行搜索
|
||||||
Dim SelectedJava = AllowedJavaList.First
|
Dim SelectedJava = AllowedJavaList.First
|
||||||
@@ -364,14 +372,14 @@ UserPass:
|
|||||||
Throw
|
Throw
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
If ex.InnerException IsNot Nothing AndAlso TypeOf (ex.InnerException) Is ThreadInterruptedException Then Throw ex.InnerException
|
If ex.InnerException IsNot Nothing AndAlso TypeOf (ex.InnerException) Is ThreadInterruptedException Then Throw ex.InnerException
|
||||||
Log(ex, "找到的 Java 已无法使用,尝试进行搜索")
|
Log(ex, "最终选定的 Java 已无法使用,尝试进行搜索")
|
||||||
AllowedJavaList = New List(Of JavaEntry)
|
AllowedJavaList = New List(Of JavaEntry)
|
||||||
JavaSearchLoader.Start(IsForceRestart:=True)
|
JavaSearchLoader.Start(IsForceRestart:=True)
|
||||||
GoTo RetryGet
|
GoTo RetryGet
|
||||||
End Try
|
End Try
|
||||||
|
|
||||||
'返回
|
'返回
|
||||||
Log("[Java] 选定的 Java:" & SelectedJava.ToString)
|
Log("[Java] 最终选定的 Java:" & AllowedJavaList.First.ToString)
|
||||||
Return SelectedJava
|
Return SelectedJava
|
||||||
|
|
||||||
Catch ex As ThreadInterruptedException
|
Catch ex As ThreadInterruptedException
|
||||||
@@ -442,7 +450,7 @@ NoUserJava:
|
|||||||
'4. Java 大版本
|
'4. Java 大版本
|
||||||
If Left.VersionCode <> Right.VersionCode Then
|
If Left.VersionCode <> Right.VersionCode Then
|
||||||
' Java 7 8 9 10 11 12 13 14 15 16 17 18 19 20...
|
' Java 7 8 9 10 11 12 13 14 15 16 17 18 19 20...
|
||||||
Dim Weight = {0, 1, 2, 3, 4, 5, 6, 14, 29, 10, 11, 12, 13, 9, 8, 7, 15, 31, 30, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28}
|
Dim Weight = {0, 1, 2, 3, 4, 5, 6, 14, 29, 10, 12, 15, 13, 9, 8, 7, 11, 31, 30, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28}
|
||||||
Return Weight.ElementAtOrDefault(Left.VersionCode) >= Weight.ElementAtOrDefault(Right.VersionCode)
|
Return Weight.ElementAtOrDefault(Left.VersionCode) >= Weight.ElementAtOrDefault(Right.VersionCode)
|
||||||
End If
|
End If
|
||||||
'5. 最次级版本号更接近 51
|
'5. 最次级版本号更接近 51
|
||||||
@@ -585,7 +593,7 @@ NoUserJava:
|
|||||||
Dim CheckThread As New Thread(Sub()
|
Dim CheckThread As New Thread(Sub()
|
||||||
Try
|
Try
|
||||||
Entry.Check()
|
Entry.Check()
|
||||||
Log("[Java] " & Entry.ToString)
|
If ModeDebug Then Log("[Java] - " & Entry.ToString)
|
||||||
SyncLock ListLock
|
SyncLock ListLock
|
||||||
JavaCheckList.Add(Entry)
|
JavaCheckList.Add(Entry)
|
||||||
End SyncLock
|
End SyncLock
|
||||||
|
|||||||
@@ -1115,11 +1115,14 @@ SystemBrowser:
|
|||||||
'OptiFine 检测
|
'OptiFine 检测
|
||||||
If McVersionCurrent.Version.HasOptiFine Then
|
If McVersionCurrent.Version.HasOptiFine Then
|
||||||
If McVersionCurrent.Version.McCodeMain <= 7 AndAlso McVersionCurrent.Version.McCodeMain > 0 Then
|
If McVersionCurrent.Version.McCodeMain <= 7 AndAlso McVersionCurrent.Version.McCodeMain > 0 Then
|
||||||
'<1.7:至多 Java 8(Java 9 - 10 未测试)
|
'<1.7:至多 Java 8
|
||||||
MaxVer = New Version(1, 8, 999, 999)
|
MaxVer = New Version(1, 8, 999, 999)
|
||||||
ElseIf McVersionCurrent.Version.McCodeMain >= 8 AndAlso McVersionCurrent.Version.McCodeMain <= 11 Then
|
ElseIf McVersionCurrent.Version.McCodeMain >= 8 AndAlso McVersionCurrent.Version.McCodeMain <= 11 Then
|
||||||
'1.8 - 1.11:必须恰好 Java 8(Java 9 - 10 未测试)
|
'1.8 - 1.11:必须恰好 Java 8
|
||||||
MinVer = New Version(1, 8, 0, 0) : MaxVer = New Version(1, 8, 999, 999)
|
MinVer = New Version(1, 8, 0, 0) : MaxVer = New Version(1, 8, 999, 999)
|
||||||
|
ElseIf McVersionCurrent.Version.McCodeMain = 12 AndAlso McVersionCurrent.Version.HasForge Then
|
||||||
|
'1.12:若安装了 Forge,最高 Java 8
|
||||||
|
MaxVer = New Version(1, 8, 999, 999)
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
|
|
||||||
@@ -1129,12 +1132,12 @@ SystemBrowser:
|
|||||||
'1.7.2:必须 Java 7
|
'1.7.2:必须 Java 7
|
||||||
MinVer = New Version(1, 7, 0, 0) : MaxVer = New Version(1, 7, 999, 999)
|
MinVer = New Version(1, 7, 0, 0) : MaxVer = New Version(1, 7, 999, 999)
|
||||||
ElseIf McVersionCurrent.Version.McCodeMain <= 12 AndAlso McVersionCurrent.Version.McCodeMain > 0 AndAlso VersionSortBoolean("14.23.5.2855", McVersionCurrent.Version.ForgeVersion) Then
|
ElseIf McVersionCurrent.Version.McCodeMain <= 12 AndAlso McVersionCurrent.Version.McCodeMain > 0 AndAlso VersionSortBoolean("14.23.5.2855", McVersionCurrent.Version.ForgeVersion) Then
|
||||||
'<1.12,Forge 14.23.5.2855 及更低:Java 8
|
'<=1.12,Forge 14.23.5.2855 及更低:Java 8
|
||||||
MaxVer = New Version(1, 8, 999, 999)
|
MaxVer = New Version(1, 8, 999, 999)
|
||||||
ElseIf McVersionCurrent.Version.McCodeMain <= 14 AndAlso McVersionCurrent.Version.McCodeMain > 0 AndAlso VersionSortBoolean("28.2.23", McVersionCurrent.Version.ForgeVersion) Then
|
ElseIf McVersionCurrent.Version.McCodeMain <= 14 AndAlso McVersionCurrent.Version.McCodeMain >= 13 AndAlso VersionSortBoolean("28.2.23", McVersionCurrent.Version.ForgeVersion) Then
|
||||||
'1.13 - 1.14,Forge 28.2.23 及更低:Java 8 - 10
|
'1.13 - 1.14,Forge 28.2.23 及更低:Java 8 - 10
|
||||||
MinVer = New Version(1, 8, 0, 0) : MaxVer = New Version(1, 10, 999, 999)
|
MinVer = New Version(1, 8, 0, 0) : MaxVer = New Version(1, 10, 999, 999)
|
||||||
ElseIf McVersionCurrent.Version.McCodeMain <= 15 AndAlso McVersionCurrent.Version.McCodeMain > 0 Then
|
ElseIf McVersionCurrent.Version.McCodeMain = 15 Then
|
||||||
'1.15:Java 8 - 15
|
'1.15:Java 8 - 15
|
||||||
MinVer = New Version(1, 8, 0, 0) : MaxVer = New Version(1, 15, 999, 999)
|
MinVer = New Version(1, 8, 0, 0) : MaxVer = New Version(1, 15, 999, 999)
|
||||||
ElseIf VersionSortBoolean(McVersionCurrent.Version.ForgeVersion, "34.0.0") AndAlso VersionSortBoolean("36.2.25", McVersionCurrent.Version.ForgeVersion) Then
|
ElseIf VersionSortBoolean(McVersionCurrent.Version.ForgeVersion, "34.0.0") AndAlso VersionSortBoolean("36.2.25", McVersionCurrent.Version.ForgeVersion) Then
|
||||||
|
|||||||
@@ -3105,7 +3105,10 @@ VersionFindFail:
|
|||||||
'弹窗结果
|
'弹窗结果
|
||||||
If MsgResult = 2 Then
|
If MsgResult = 2 Then
|
||||||
'下载
|
'下载
|
||||||
McDownloadClient(NetPreDownloadBehaviour.HintWhileExists, VersionName, Version("url").ToString)
|
RunInUi(Sub()
|
||||||
|
PageDownloadInstall.McVersionWaitingForSelect = VersionName
|
||||||
|
FrmMain.PageChange(FormMain.PageType.Download, FormMain.PageSubType.DownloadInstall)
|
||||||
|
End Sub)
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
|
|||||||
@@ -640,6 +640,9 @@ Retry:
|
|||||||
Request.ForgeVersion = Component("version")
|
Request.ForgeVersion = Component("version")
|
||||||
Case "net.fabricmc.fabric-loader"
|
Case "net.fabricmc.fabric-loader"
|
||||||
Request.FabricVersion = Component("version")
|
Request.FabricVersion = Component("version")
|
||||||
|
Case "org.quiltmc.quilt-loader" 'eg. 1.0.0
|
||||||
|
Hint("PCL 暂不支持安装需要 Quilt 的整合包!", HintType.Critical)
|
||||||
|
Exit Sub
|
||||||
End Select
|
End Select
|
||||||
Next
|
Next
|
||||||
'构造加载器
|
'构造加载器
|
||||||
@@ -729,6 +732,10 @@ Retry:
|
|||||||
Hint("该整合包未提供游戏版本信息,无法安装!", HintType.Critical)
|
Hint("该整合包未提供游戏版本信息,无法安装!", HintType.Critical)
|
||||||
Exit Sub
|
Exit Sub
|
||||||
End If
|
End If
|
||||||
|
If Addons.ContainsKey("quilt") Then
|
||||||
|
Hint("PCL 暂不支持安装需要 Quilt 的整合包!", HintType.Critical)
|
||||||
|
Exit Sub
|
||||||
|
End If
|
||||||
Dim Request As New McInstallRequest With {
|
Dim Request As New McInstallRequest With {
|
||||||
.TargetVersionName = VersionName,
|
.TargetVersionName = VersionName,
|
||||||
.MinecraftName = Addons("game"),
|
.MinecraftName = Addons("game"),
|
||||||
|
|||||||
@@ -51,6 +51,6 @@ Imports System.Runtime.InteropServices
|
|||||||
' 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
|
' 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
|
||||||
' 方法是按如下所示使用“*”
|
' 方法是按如下所示使用“*”
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("2.6.2.0")>
|
<Assembly: AssemblyVersion("2.6.3.0")>
|
||||||
<Assembly: AssemblyFileVersion("2.6.2.0")>
|
<Assembly: AssemblyFileVersion("2.6.3.0")>
|
||||||
<Assembly: NeutralResourcesLanguage("")>
|
<Assembly: NeutralResourcesLanguage("")>
|
||||||
|
|||||||
@@ -553,7 +553,7 @@ Public Module ModDownloadLib
|
|||||||
'拷贝原版文件
|
'拷贝原版文件
|
||||||
If Not IsCustomFolder Then Exit Sub
|
If Not IsCustomFolder Then Exit Sub
|
||||||
SyncLock VanillaSyncLock
|
SyncLock VanillaSyncLock
|
||||||
Dim ClientName As String = New DirectoryInfo(ClientDownloadLoader.Input).Name
|
Dim ClientName As String = New DirectoryInfo(ClientDownloadLoader.Input).Name '#2031 报告了此处 ClientDownloadLoader.Input 为 null 的问题,但无法复现
|
||||||
Directory.CreateDirectory(McFolder & "versions\" & DownloadInfo.Inherit)
|
Directory.CreateDirectory(McFolder & "versions\" & DownloadInfo.Inherit)
|
||||||
If Not File.Exists(McFolder & "versions\" & DownloadInfo.Inherit & "\" & DownloadInfo.Inherit & ".json") Then
|
If Not File.Exists(McFolder & "versions\" & DownloadInfo.Inherit & "\" & DownloadInfo.Inherit & ".json") Then
|
||||||
CopyFile(ClientDownloadLoader.Input & ClientName & ".json",
|
CopyFile(ClientDownloadLoader.Input & ClientName & ".json",
|
||||||
|
|||||||
@@ -571,10 +571,23 @@
|
|||||||
NewCard.IsSwaped = True
|
NewCard.IsSwaped = True
|
||||||
PanMinecraft.Children.Add(NewCard)
|
PanMinecraft.Children.Add(NewCard)
|
||||||
Next
|
Next
|
||||||
|
'自动选择版本
|
||||||
|
If McVersionWaitingForSelect Is Nothing Then Exit Try
|
||||||
|
Log("[Download] 自动选择 MC 版本:" & McVersionWaitingForSelect)
|
||||||
|
For Each Version As JObject In Versions
|
||||||
|
If Version("id").ToString <> McVersionWaitingForSelect Then Continue For
|
||||||
|
Dim Item = McDownloadListItem(Version, Sub()
|
||||||
|
End Sub, False)
|
||||||
|
MinecraftSelected(Item, Nothing)
|
||||||
|
Next
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Log(ex, "可视化安装版本列表出错", LogLevel.Feedback)
|
Log(ex, "可视化安装版本列表出错", LogLevel.Feedback)
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
|
''' <summary>
|
||||||
|
''' 当 MC 版本列表加载完时,立即自动选择的版本。用于外部调用。
|
||||||
|
''' </summary>
|
||||||
|
Public Shared McVersionWaitingForSelect As String = Nothing
|
||||||
|
|
||||||
#End Region
|
#End Region
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
<TextBlock VerticalAlignment="Center" Grid.Row="2" HorizontalAlignment="Left" Text="版本" Margin="0,0,18,0" />
|
<TextBlock VerticalAlignment="Center" Grid.Row="2" HorizontalAlignment="Left" Text="版本" Margin="0,0,18,0" />
|
||||||
<local:MyComboBox x:Name="TextSearchVersion" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" IsEditable="True" MaxDropDownHeight="320">
|
<local:MyComboBox x:Name="TextSearchVersion" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" IsEditable="True" MaxDropDownHeight="320">
|
||||||
<local:MyComboBoxItem Content="全部 (也可自行输入)" IsSelected="True" />
|
<local:MyComboBoxItem Content="全部 (也可自行输入)" IsSelected="True" />
|
||||||
|
<local:MyComboBoxItem Content="1.20.1" />
|
||||||
<local:MyComboBoxItem Content="1.20" />
|
<local:MyComboBoxItem Content="1.20" />
|
||||||
<local:MyComboBoxItem Content="1.19.4" />
|
<local:MyComboBoxItem Content="1.19.4" />
|
||||||
<local:MyComboBoxItem Content="1.18.2" />
|
<local:MyComboBoxItem Content="1.18.2" />
|
||||||
|
|||||||
@@ -32,6 +32,7 @@
|
|||||||
<TextBlock VerticalAlignment="Center" Grid.Row="2" HorizontalAlignment="Left" Text="版本" Margin="0,0,18,0" />
|
<TextBlock VerticalAlignment="Center" Grid.Row="2" HorizontalAlignment="Left" Text="版本" Margin="0,0,18,0" />
|
||||||
<local:MyComboBox x:Name="TextSearchVersion" Grid.Row="2" Grid.Column="1" IsEditable="True" MaxDropDownHeight="320">
|
<local:MyComboBox x:Name="TextSearchVersion" Grid.Row="2" Grid.Column="1" IsEditable="True" MaxDropDownHeight="320">
|
||||||
<local:MyComboBoxItem Content="全部 (也可自行输入)" IsSelected="True" />
|
<local:MyComboBoxItem Content="全部 (也可自行输入)" IsSelected="True" />
|
||||||
|
<local:MyComboBoxItem Content="1.20.1" />
|
||||||
<local:MyComboBoxItem Content="1.20" />
|
<local:MyComboBoxItem Content="1.20" />
|
||||||
<local:MyComboBoxItem Content="1.19.4" />
|
<local:MyComboBoxItem Content="1.19.4" />
|
||||||
<local:MyComboBoxItem Content="1.18.2" />
|
<local:MyComboBoxItem Content="1.18.2" />
|
||||||
@@ -65,7 +66,7 @@
|
|||||||
<local:MyComboBoxItem Tag="4736/" Content="空岛" />
|
<local:MyComboBoxItem Tag="4736/" Content="空岛" />
|
||||||
<local:MyComboBoxItem Tag="5128/" Content="原版改良" />
|
<local:MyComboBoxItem Tag="5128/" Content="原版改良" />
|
||||||
<local:MyComboBoxItem Tag="4487/" Content="FTB"
|
<local:MyComboBoxItem Tag="4487/" Content="FTB"
|
||||||
ToolTip="该整合包由 FTB 官方发布" ToolTipService.InitialShowDelay="150" ToolTipService.Placement="Right" ToolTipService.VerticalOffset="-1" ToolTipService.HorizontalOffset="-40" />
|
ToolTip="由 FTB 官方发布" ToolTipService.HorizontalOffset="70" />
|
||||||
<local:MyComboBoxItem Tag="4480/" Content="基于地图" />
|
<local:MyComboBoxItem Tag="4480/" Content="基于地图" />
|
||||||
<local:MyComboBoxItem Tag="4481/lightweight" Content="轻量整合" />
|
<local:MyComboBoxItem Tag="4481/lightweight" Content="轻量整合" />
|
||||||
<local:MyComboBoxItem Tag="4482/" Content="大型整合" />
|
<local:MyComboBoxItem Tag="4482/" Content="大型整合" />
|
||||||
|
|||||||
@@ -356,7 +356,7 @@ Finish:
|
|||||||
Select Case Type
|
Select Case Type
|
||||||
Case 0
|
Case 0
|
||||||
If FrmLoginLegacy IsNot Nothing AndAlso FrmLoginLegacy.IsReloaded Then
|
If FrmLoginLegacy IsNot Nothing AndAlso FrmLoginLegacy.IsReloaded Then
|
||||||
Return New EqualableList(Of String) From {0, If(FrmLoginLegacy.ComboName.Text, "")}
|
Return New EqualableList(Of String) From {0, If(FrmLoginLegacy.ComboName.Text.Trim, "")}
|
||||||
ElseIf Setup.Get("LoginLegacyName") = "" Then
|
ElseIf Setup.Get("LoginLegacyName") = "" Then
|
||||||
Return New EqualableList(Of String) From {0, ""}
|
Return New EqualableList(Of String) From {0, ""}
|
||||||
Else
|
Else
|
||||||
@@ -526,11 +526,12 @@ Finish:
|
|||||||
|
|
||||||
'版本选择按钮
|
'版本选择按钮
|
||||||
Private Sub BtnVersion_Click(sender As Object, e As EventArgs) Handles BtnVersion.Click
|
Private Sub BtnVersion_Click(sender As Object, e As EventArgs) Handles BtnVersion.Click
|
||||||
|
If McLaunchLoader.State = LoadState.Loading Then Exit Sub
|
||||||
FrmMain.PageChange(FormMain.PageType.VersionSelect)
|
FrmMain.PageChange(FormMain.PageType.VersionSelect)
|
||||||
End Sub
|
End Sub
|
||||||
'启动按钮
|
'启动按钮
|
||||||
Public Sub LaunchButtonClick() Handles BtnLaunch.Click
|
Public Sub LaunchButtonClick() Handles BtnLaunch.Click
|
||||||
If McLaunchLoader.State = LoadState.Loading OrElse Not BtnLaunch.IsEnabled Then Exit Sub
|
If McLaunchLoader.State = LoadState.Loading OrElse Not BtnLaunch.IsEnabled OrElse FrmMain.PageRight.PageState <> MyPageRight.PageStates.ContentStay Then Exit Sub
|
||||||
'愚人节处理
|
'愚人节处理
|
||||||
If IsAprilEnabled AndAlso Not IsAprilGiveup Then
|
If IsAprilEnabled AndAlso Not IsAprilGiveup Then
|
||||||
ThemeUnlock(12, False, "隐藏主题 滑稽彩 已解锁!")
|
ThemeUnlock(12, False, "隐藏主题 滑稽彩 已解锁!")
|
||||||
@@ -625,8 +626,9 @@ ExitRefresh:
|
|||||||
End Try
|
End Try
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
'更多按钮
|
'版本设置按钮
|
||||||
Private Sub BtnMore_Click(sender As Object, e As EventArgs) Handles BtnMore.Click
|
Private Sub BtnMore_Click(sender As Object, e As EventArgs) Handles BtnMore.Click
|
||||||
|
If McLaunchLoader.State = LoadState.Loading Then Exit Sub
|
||||||
McVersionCurrent.Load()
|
McVersionCurrent.Load()
|
||||||
PageVersionLeft.Version = McVersionCurrent
|
PageVersionLeft.Version = McVersionCurrent
|
||||||
FrmMain.PageChange(FormMain.PageType.VersionSetup, 0)
|
FrmMain.PageChange(FormMain.PageType.VersionSetup, 0)
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ Public Class PageLoginLegacy
|
|||||||
Public Sub Reload(KeepInput As Boolean)
|
Public Sub Reload(KeepInput As Boolean)
|
||||||
If KeepInput AndAlso IsReloaded Then '避免第一次就以 KeepInput 的方式加载,导致文本框里没东西
|
If KeepInput AndAlso IsReloaded Then '避免第一次就以 KeepInput 的方式加载,导致文本框里没东西
|
||||||
'保留输入,只刷新下拉框列表
|
'保留输入,只刷新下拉框列表
|
||||||
Dim Input As String = ComboName.Text
|
Dim Input As String = ComboName.Text.Trim
|
||||||
ComboName.ItemsSource = If(Setup.Get("LoginLegacyName") = "", Nothing, Setup.Get("LoginLegacyName").ToString.Split("¨"))
|
ComboName.ItemsSource = If(Setup.Get("LoginLegacyName") = "", Nothing, Setup.Get("LoginLegacyName").ToString.Split("¨"))
|
||||||
ComboName.Text = Input
|
ComboName.Text = Input
|
||||||
Else
|
Else
|
||||||
@@ -26,7 +26,7 @@ Public Class PageLoginLegacy
|
|||||||
ComboName.ItemsSource = Nothing
|
ComboName.ItemsSource = Nothing
|
||||||
Else
|
Else
|
||||||
ComboName.ItemsSource = Setup.Get("LoginLegacyName").ToString.Split("¨")
|
ComboName.ItemsSource = Setup.Get("LoginLegacyName").ToString.Split("¨")
|
||||||
ComboName.Text = Setup.Get("LoginLegacyName").ToString.Split("¨")(0)
|
ComboName.Text = Setup.Get("LoginLegacyName").ToString.Split("¨")(0).Trim
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
IsReloaded = True
|
IsReloaded = True
|
||||||
@@ -50,17 +50,14 @@ Public Class PageLoginLegacy
|
|||||||
Return IsVaild(GetLoginData())
|
Return IsVaild(GetLoginData())
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
Private Sub ComboName_PreviewKeyDown(sender As Object, e As Input.KeyEventArgs) Handles ComboName.PreviewKeyDown
|
||||||
|
If e.Key = Key.Space Then
|
||||||
|
Dim Index = CType(ComboName.Template.FindName("PART_EditableTextBox", ComboName), MyTextBox).CaretIndex
|
||||||
|
If Index = ComboName.Text.Length OrElse Index = 0 Then e.Handled = True
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
Private Sub ComboLegacy_TextChanged(sender As Object, e As TextChangedEventArgs) Handles ComboName.TextChanged
|
Private Sub ComboLegacy_TextChanged(sender As Object, e As TextChangedEventArgs) Handles ComboName.TextChanged
|
||||||
If ComboName.Text.EndsWith(" ") Then
|
If Setup.Get("LaunchSkinType") = 0 Then PageLaunchLeft.SkinLegacy.Start(IsForceRestart:=True)
|
||||||
ComboName.Text = ComboName.Text.Trim()
|
|
||||||
SendKeys.SendWait("{END}")
|
|
||||||
ElseIf ComboName.Text.StartsWith(" ") Then
|
|
||||||
ComboName.Text = ComboName.Text.Trim()
|
|
||||||
SendKeys.SendWait("{HOME}")
|
|
||||||
End If
|
|
||||||
If Setup.Get("LaunchSkinType") = 0 Then
|
|
||||||
PageLaunchLeft.SkinLegacy.Start(IsForceRestart:=True)
|
|
||||||
End If
|
|
||||||
HintChinese.Visibility = If(RegexCheck(ComboName.Text, "^[0-9A-Za-z_]*$"), Visibility.Collapsed, Visibility.Visible)
|
HintChinese.Visibility = If(RegexCheck(ComboName.Text, "^[0-9A-Za-z_]*$"), Visibility.Collapsed, Visibility.Visible)
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub Skin_Click() Handles Skin.Click
|
Private Sub Skin_Click() Handles Skin.Click
|
||||||
|
|||||||
@@ -259,6 +259,7 @@
|
|||||||
Directory.CreateDirectory(Path & ".minecraft\")
|
Directory.CreateDirectory(Path & ".minecraft\")
|
||||||
Directory.CreateDirectory(Path & ".minecraft\versions\")
|
Directory.CreateDirectory(Path & ".minecraft\versions\")
|
||||||
Setup.Set("LaunchFolderSelect", "$.minecraft\")
|
Setup.Set("LaunchFolderSelect", "$.minecraft\")
|
||||||
|
McFolderLauncherProfilesJsonCreate(Path & ".minecraft\")
|
||||||
Hint("新建 .minecraft 文件夹成功!", HintType.Finish)
|
Hint("新建 .minecraft 文件夹成功!", HintType.Finish)
|
||||||
End If
|
End If
|
||||||
McFolderListLoader.Start(IsForceRestart:=True)
|
McFolderListLoader.Start(IsForceRestart:=True)
|
||||||
|
|||||||
@@ -223,7 +223,7 @@
|
|||||||
DeleteDirectory(Version.Path)
|
DeleteDirectory(Version.Path)
|
||||||
Hint("版本 " & Version.Name & " 已永久删除!", HintType.Finish)
|
Hint("版本 " & Version.Name & " 已永久删除!", HintType.Finish)
|
||||||
Else
|
Else
|
||||||
FileIO.FileSystem.DeleteDirectory(Version.Path, FileIO.UIOption.AllDialogs, FileIO.RecycleOption.SendToRecycleBin)
|
FileIO.FileSystem.DeleteDirectory(Version.Path, FileIO.UIOption.OnlyErrorDialogs, FileIO.RecycleOption.SendToRecycleBin)
|
||||||
Hint("版本 " & Version.Name & " 已删除到回收站!", HintType.Finish)
|
Hint("版本 " & Version.Name & " 已删除到回收站!", HintType.Finish)
|
||||||
End If
|
End If
|
||||||
Case 2
|
Case 2
|
||||||
@@ -251,6 +251,8 @@
|
|||||||
'同时出现在当前卡片与收藏夹
|
'同时出现在当前卡片与收藏夹
|
||||||
LoaderFolderRun(McVersionListLoader, PathMcFolder, LoaderFolderRunType.ForceRun, MaxDepth:=1, ExtraPath:="versions\")
|
LoaderFolderRun(McVersionListLoader, PathMcFolder, LoaderFolderRunType.ForceRun, MaxDepth:=1, ExtraPath:="versions\")
|
||||||
End If
|
End If
|
||||||
|
Catch ex As OperationCanceledException
|
||||||
|
Log(ex, "删除版本 " & Version.Name & " 被主动取消")
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Log(ex, "删除版本 " & Version.Name & " 失败", LogLevel.Msgbox)
|
Log(ex, "删除版本 " & Version.Name & " 失败", LogLevel.Msgbox)
|
||||||
End Try
|
End Try
|
||||||
|
|||||||
@@ -127,7 +127,7 @@
|
|||||||
<local:MyComboBoxItem Content="全屏" />
|
<local:MyComboBoxItem Content="全屏" />
|
||||||
<local:MyComboBoxItem Content="默认大小" IsSelected="True" ToolTip="以 854×480 的默认窗口大小启动 Minecraft" />
|
<local:MyComboBoxItem Content="默认大小" IsSelected="True" ToolTip="以 854×480 的默认窗口大小启动 Minecraft" />
|
||||||
<local:MyComboBoxItem Content="与启动器窗口大小一致" />
|
<local:MyComboBoxItem Content="与启动器窗口大小一致" />
|
||||||
<local:MyComboBoxItem Content="自定义大小" ToolTip="注意:Forge 1.12.2 等个别版本存在 Bug,会导致高度设定无效" />
|
<local:MyComboBoxItem Content="自定义大小" ToolTip="注意:Forge 1.12 存在 Bug,会导致高度设定无效" />
|
||||||
<local:MyComboBoxItem Content="最大化" />
|
<local:MyComboBoxItem Content="最大化" />
|
||||||
<local:MyComboBoxItem Content="保持游戏默认" />
|
<local:MyComboBoxItem Content="保持游戏默认" />
|
||||||
</local:MyComboBox>
|
</local:MyComboBox>
|
||||||
|
|||||||
@@ -433,7 +433,7 @@ PreFin:
|
|||||||
Try
|
Try
|
||||||
For Each Java In Sort(JavaList.Clone(), Function(l, r) l.VersionCode < r.VersionCode)
|
For Each Java In Sort(JavaList.Clone(), Function(l, r) l.VersionCode < r.VersionCode)
|
||||||
Dim ListItem = New MyComboBoxItem With {.Content = Java.ToString, .ToolTip = Java.PathFolder, .Tag = Java}
|
Dim ListItem = New MyComboBoxItem With {.Content = Java.ToString, .ToolTip = Java.PathFolder, .Tag = Java}
|
||||||
ToolTipService.SetHorizontalOffset(ListItem, 0)
|
ToolTipService.SetHorizontalOffset(ListItem, 400)
|
||||||
ComboArgumentJava.Items.Add(ListItem)
|
ComboArgumentJava.Items.Add(ListItem)
|
||||||
'判断人为选中
|
'判断人为选中
|
||||||
If SelectedBySetup = "" Then Continue For
|
If SelectedBySetup = "" Then Continue For
|
||||||
|
|||||||
@@ -345,6 +345,8 @@
|
|||||||
End If
|
End If
|
||||||
LoaderFolderRun(McModLoader, PageVersionLeft.Version.PathIndie & "mods\", LoaderFolderRunType.UpdateOnly)
|
LoaderFolderRun(McModLoader, PageVersionLeft.Version.PathIndie & "mods\", LoaderFolderRunType.UpdateOnly)
|
||||||
|
|
||||||
|
Catch ex As OperationCanceledException
|
||||||
|
Log(ex, "删除 Mod 被主动取消")
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Log(ex, "删除 Mod 失败", LogLevel.Feedback)
|
Log(ex, "删除 Mod 失败", LogLevel.Feedback)
|
||||||
End Try
|
End Try
|
||||||
|
|||||||
@@ -41,8 +41,7 @@
|
|||||||
<TextBlock VerticalAlignment="Center" Grid.Row="2" HorizontalAlignment="Left" Text="分类" Margin="0,0,25,0" />
|
<TextBlock VerticalAlignment="Center" Grid.Row="2" HorizontalAlignment="Left" Text="分类" Margin="0,0,25,0" />
|
||||||
<local:MyComboBox Grid.Column="1" Grid.Row="2" x:Name="ComboDisplayType">
|
<local:MyComboBox Grid.Column="1" Grid.Row="2" x:Name="ComboDisplayType">
|
||||||
<local:MyComboBoxItem Content="自动" IsSelected="True" />
|
<local:MyComboBoxItem Content="自动" IsSelected="True" />
|
||||||
<local:MyComboBoxItem Content="从版本列表中隐藏"
|
<local:MyComboBoxItem Content="从版本列表中隐藏" ToolTip="该版本默认将不会在版本列表中显示。
在版本列表页面按下 F11,即可查看所有隐藏的版本。" />
|
||||||
ToolTip="该版本默认将不会在版本列表中显示。
在版本列表页面按下 F11,即可查看所有隐藏的版本。" ToolTipService.HorizontalOffset="-350" />
|
|
||||||
<local:MyComboBoxItem Content="可安装 Mod 的版本" />
|
<local:MyComboBoxItem Content="可安装 Mod 的版本" />
|
||||||
<local:MyComboBoxItem Content="常规版本" />
|
<local:MyComboBoxItem Content="常规版本" />
|
||||||
<local:MyComboBoxItem Content="不常用版本" />
|
<local:MyComboBoxItem Content="不常用版本" />
|
||||||
|
|||||||
@@ -325,7 +325,7 @@
|
|||||||
DeleteDirectory(PageVersionLeft.Version.Path)
|
DeleteDirectory(PageVersionLeft.Version.Path)
|
||||||
Hint("版本 " & PageVersionLeft.Version.Name & " 已永久删除!", HintType.Finish)
|
Hint("版本 " & PageVersionLeft.Version.Name & " 已永久删除!", HintType.Finish)
|
||||||
Else
|
Else
|
||||||
FileIO.FileSystem.DeleteDirectory(PageVersionLeft.Version.Path, FileIO.UIOption.AllDialogs, FileIO.RecycleOption.SendToRecycleBin)
|
FileIO.FileSystem.DeleteDirectory(PageVersionLeft.Version.Path, FileIO.UIOption.OnlyErrorDialogs, FileIO.RecycleOption.SendToRecycleBin)
|
||||||
Hint("版本 " & PageVersionLeft.Version.Name & " 已删除到回收站!", HintType.Finish)
|
Hint("版本 " & PageVersionLeft.Version.Name & " 已删除到回收站!", HintType.Finish)
|
||||||
End If
|
End If
|
||||||
Case 2
|
Case 2
|
||||||
@@ -333,6 +333,8 @@
|
|||||||
End Select
|
End Select
|
||||||
LoaderFolderRun(McVersionListLoader, PathMcFolder, LoaderFolderRunType.ForceRun, MaxDepth:=1, ExtraPath:="versions\")
|
LoaderFolderRun(McVersionListLoader, PathMcFolder, LoaderFolderRunType.ForceRun, MaxDepth:=1, ExtraPath:="versions\")
|
||||||
FrmMain.PageBack()
|
FrmMain.PageBack()
|
||||||
|
Catch ex As OperationCanceledException
|
||||||
|
Log(ex, "删除版本 " & PageVersionLeft.Version.Name & " 被主动取消")
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Log(ex, "删除版本 " & PageVersionLeft.Version.Name & " 失败", LogLevel.Msgbox)
|
Log(ex, "删除版本 " & PageVersionLeft.Version.Name & " 失败", LogLevel.Msgbox)
|
||||||
End Try
|
End Try
|
||||||
|
|||||||
@@ -44,9 +44,9 @@
|
|||||||
<local:MyComboBox x:Name="ComboArgumentIndie" Grid.Row="4" Grid.ColumnSpan="2" Tag="VersionArgumentIndie" Grid.Column="1">
|
<local:MyComboBox x:Name="ComboArgumentIndie" Grid.Row="4" Grid.ColumnSpan="2" Tag="VersionArgumentIndie" Grid.Column="1">
|
||||||
<local:MyComboBoxItem Content="使用全局设置" IsSelected="True" />
|
<local:MyComboBoxItem Content="使用全局设置" IsSelected="True" />
|
||||||
<local:MyComboBoxItem Content="开启"
|
<local:MyComboBoxItem Content="开启"
|
||||||
ToolTip="让这个版本与其他版本的存档、Mod 等档案相互独立,互不干涉" ToolTipService.HorizontalOffset="-350"/>
|
ToolTip="让这个版本与其他版本的存档、Mod 等档案相互独立,互不干涉" ToolTipService.HorizontalOffset="100"/>
|
||||||
<local:MyComboBoxItem Content="关闭"
|
<local:MyComboBoxItem Content="关闭"
|
||||||
ToolTip="与其余未开启隔离的版本均使用同一档案,存档、Mod 等均为公用。
若存在不同版本的 Forge 或 Fabric,可能会由于 Mod 与版本冲突导致未知问题。" ToolTipService.HorizontalOffset="-350"/>
|
ToolTip="与其余未开启隔离的版本均使用同一档案,存档、Mod 等均为公用。
若存在不同版本的 Forge 或 Fabric,可能会由于 Mod 与版本冲突导致未知问题。" ToolTipService.HorizontalOffset="100"/>
|
||||||
</local:MyComboBox>
|
</local:MyComboBox>
|
||||||
<TextBlock VerticalAlignment="Center" Grid.Row="6" HorizontalAlignment="Left" Text="游戏 Java" Margin="0,0,25,0" />
|
<TextBlock VerticalAlignment="Center" Grid.Row="6" HorizontalAlignment="Left" Text="游戏 Java" Margin="0,0,25,0" />
|
||||||
<local:MyComboBox x:Name="ComboArgumentJava" Grid.ColumnSpan="2" Grid.Row="6" Grid.Column="1" MaxDropDownHeight="240"
|
<local:MyComboBox x:Name="ComboArgumentJava" Grid.ColumnSpan="2" Grid.Row="6" Grid.Column="1" MaxDropDownHeight="240"
|
||||||
@@ -203,9 +203,9 @@
|
|||||||
<local:MyComboBox x:Name="ComboAdvanceAssets" Grid.Row="4" Grid.ColumnSpan="2" Tag="VersionAdvanceAssets" Grid.Column="1">
|
<local:MyComboBox x:Name="ComboAdvanceAssets" Grid.Row="4" Grid.ColumnSpan="2" Tag="VersionAdvanceAssets" Grid.Column="1">
|
||||||
<local:MyComboBoxItem Content="使用全局设置" IsSelected="True" />
|
<local:MyComboBoxItem Content="使用全局设置" IsSelected="True" />
|
||||||
<local:MyComboBoxItem Content="开启"
|
<local:MyComboBoxItem Content="开启"
|
||||||
ToolTip="在启动 Minecraft 时,简单校验并下载缺失或错误的文件" ToolTipService.HorizontalOffset="-300" />
|
ToolTip="在启动 Minecraft 时,简单校验并下载缺失或错误的文件" ToolTipService.HorizontalOffset="100" />
|
||||||
<local:MyComboBoxItem Content="关闭"
|
<local:MyComboBoxItem Content="关闭"
|
||||||
ToolTip="完全不更改 assets;不校验 libraries、第三方登录库与版本主 jar 文件是否被修改。
如果你没有修改相关文件,请勿勾选此项。" ToolTipService.HorizontalOffset="-300" />
|
ToolTip="完全不更改 assets;不校验 libraries、第三方登录库与版本主 jar 文件是否被修改。
如果你没有修改相关文件,请勿勾选此项。" ToolTipService.HorizontalOffset="100" />
|
||||||
</local:MyComboBox>
|
</local:MyComboBox>
|
||||||
<TextBlock Grid.Row="6" VerticalAlignment="Center" HorizontalAlignment="Left" Text="启动前执行命令" Margin="0,0,25,3" />
|
<TextBlock Grid.Row="6" VerticalAlignment="Center" HorizontalAlignment="Left" Text="启动前执行命令" Margin="0,0,25,3" />
|
||||||
<local:MyTextBox x:Name="TextAdvanceRun" Grid.Row="6" Grid.ColumnSpan="2" Tag="VersionAdvanceRun" Grid.Column="1" HintText="" Margin="0,0,0,3"
|
<local:MyTextBox x:Name="TextAdvanceRun" Grid.Row="6" Grid.ColumnSpan="2" Tag="VersionAdvanceRun" Grid.Column="1" HintText="" Margin="0,0,0,3"
|
||||||
|
|||||||
@@ -420,7 +420,7 @@ PreFin:
|
|||||||
Try
|
Try
|
||||||
For Each Java In Sort(JavaList.Clone(), Function(l, r) l.VersionCode < r.VersionCode)
|
For Each Java In Sort(JavaList.Clone(), Function(l, r) l.VersionCode < r.VersionCode)
|
||||||
Dim ListItem = New MyComboBoxItem With {.Content = Java.ToString, .ToolTip = Java.PathFolder, .Tag = Java}
|
Dim ListItem = New MyComboBoxItem With {.Content = Java.ToString, .ToolTip = Java.PathFolder, .Tag = Java}
|
||||||
ToolTipService.SetHorizontalOffset(ListItem, 0)
|
ToolTipService.SetHorizontalOffset(ListItem, 400)
|
||||||
ComboArgumentJava.Items.Add(ListItem)
|
ComboArgumentJava.Items.Add(ListItem)
|
||||||
'判断人为选中
|
'判断人为选中
|
||||||
If SelectedBySetup = "" OrElse SelectedBySetup = "使用全局设置" Then Continue For
|
If SelectedBySetup = "" OrElse SelectedBySetup = "使用全局设置" Then Continue For
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user