PageVersionSetup.xaml.vb 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514
  1. Public Class PageVersionSetup
  2. Private Shadows IsLoaded As Boolean = False
  3. Private Sub PageSetupSystem_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
  4. '重复加载部分
  5. PanBack.ScrollToHome()
  6. RefreshRam(False)
  7. '由于各个版本不同,每次都需要重新加载
  8. AniControlEnabled += 1
  9. Reload()
  10. AniControlEnabled -= 1
  11. '非重复加载部分
  12. If IsLoaded Then Exit Sub
  13. IsLoaded = True
  14. '内存自动刷新
  15. Dim timer As New Threading.DispatcherTimer With {.Interval = New TimeSpan(0, 0, 0, 1)}
  16. AddHandler timer.Tick, AddressOf RefreshRam
  17. timer.Start()
  18. End Sub
  19. Public Sub Reload()
  20. Try
  21. '启动参数
  22. TextArgumentTitle.Text = Setup.Get("VersionArgumentTitle", Version:=PageVersionLeft.Version)
  23. TextArgumentInfo.Text = Setup.Get("VersionArgumentInfo", Version:=PageVersionLeft.Version)
  24. Dim Indie As Integer = Setup.Get("VersionArgumentIndie", Version:=PageVersionLeft.Version)
  25. If Indie = -1 Then
  26. Dim ModFolder As New DirectoryInfo(PageVersionLeft.Version.Path & "mods\")
  27. Dim SaveFolder As New DirectoryInfo(PageVersionLeft.Version.Path & "saves\")
  28. If (ModFolder.Exists AndAlso ModFolder.EnumerateFiles.Any) OrElse (SaveFolder.Exists AndAlso SaveFolder.EnumerateFiles.Any) Then
  29. '自动开启
  30. Setup.Set("VersionArgumentIndie", 1, Version:=PageVersionLeft.Version)
  31. Log("[Setup] 已自动开启单版本隔离:" & PageVersionLeft.Version.Name)
  32. Indie = 1
  33. Else
  34. '使用全局设置
  35. Setup.Set("VersionArgumentIndie", 0, Version:=PageVersionLeft.Version)
  36. Log("[Setup] 版本隔离使用全局设置:" & PageVersionLeft.Version.Name)
  37. Indie = 0
  38. End If
  39. End If
  40. ComboArgumentIndie.SelectedIndex = Indie
  41. RefreshJavaComboBox()
  42. '游戏内存
  43. CType(FindName("RadioRamType" & Setup.Load("VersionRamType", Version:=PageVersionLeft.Version)), MyRadioBox).Checked = True
  44. SliderRamCustom.Value = Setup.Get("VersionRamCustom", Version:=PageVersionLeft.Version)
  45. ComboRamOptimize.SelectedIndex = Setup.Get("VersionRamOptimize", Version:=PageVersionLeft.Version)
  46. '服务器
  47. TextServerEnter.Text = Setup.Get("VersionServerEnter", Version:=PageVersionLeft.Version)
  48. ComboServerLogin.SelectedIndex = Setup.Get("VersionServerLogin", Version:=PageVersionLeft.Version)
  49. ComboServerLoginLast = ComboServerLogin.SelectedIndex
  50. ServerLogin(ComboServerLogin.SelectedIndex)
  51. TextServerNide.Text = Setup.Get("VersionServerNide", Version:=PageVersionLeft.Version)
  52. TextServerAuthServer.Text = Setup.Get("VersionServerAuthServer", Version:=PageVersionLeft.Version)
  53. TextServerAuthName.Text = Setup.Get("VersionServerAuthName", Version:=PageVersionLeft.Version)
  54. TextServerAuthRegister.Text = Setup.Get("VersionServerAuthRegister", Version:=PageVersionLeft.Version)
  55. '高级设置
  56. TextAdvanceJvm.Text = Setup.Get("VersionAdvanceJvm", Version:=PageVersionLeft.Version)
  57. TextAdvanceGame.Text = Setup.Get("VersionAdvanceGame", Version:=PageVersionLeft.Version)
  58. TextAdvanceRun.Text = Setup.Get("VersionAdvanceRun", Version:=PageVersionLeft.Version)
  59. CheckAdvanceRunWait.Checked = Setup.Get("VersionAdvanceRunWait", Version:=PageVersionLeft.Version)
  60. If Setup.Get("VersionAdvanceAssets", Version:=PageVersionLeft.Version) = 2 Then
  61. Log("[Setup] 已迁移老版本的关闭文件校验设置")
  62. Setup.Reset("VersionAdvanceAssets", Version:=PageVersionLeft.Version)
  63. Setup.Set("VersionAdvanceAssetsV2", True, Version:=PageVersionLeft.Version)
  64. End If
  65. CheckAdvanceAssetsV2.Checked = Setup.Get("VersionAdvanceAssetsV2", Version:=PageVersionLeft.Version)
  66. CheckAdvanceJava.Checked = Setup.Get("VersionAdvanceJava", Version:=PageVersionLeft.Version)
  67. Catch ex As Exception
  68. Log(ex, "重载版本独立设置时出错", LogLevel.Feedback)
  69. End Try
  70. End Sub
  71. '初始化
  72. Public Sub Reset()
  73. Try
  74. Setup.Reset("VersionServerEnter", Version:=PageVersionLeft.Version)
  75. Setup.Reset("VersionServerLogin", Version:=PageVersionLeft.Version)
  76. Setup.Reset("VersionServerNide", Version:=PageVersionLeft.Version)
  77. Setup.Reset("VersionServerAuthServer", Version:=PageVersionLeft.Version)
  78. Setup.Reset("VersionServerAuthRegister", Version:=PageVersionLeft.Version)
  79. Setup.Reset("VersionServerAuthName", Version:=PageVersionLeft.Version)
  80. Setup.Reset("VersionArgumentTitle", Version:=PageVersionLeft.Version)
  81. Setup.Reset("VersionArgumentInfo", Version:=PageVersionLeft.Version)
  82. Setup.Set("VersionArgumentIndie", 0, Version:=PageVersionLeft.Version)
  83. Setup.Reset("VersionRamType", Version:=PageVersionLeft.Version)
  84. Setup.Reset("VersionRamCustom", Version:=PageVersionLeft.Version)
  85. Setup.Reset("VersionRamOptimize", Version:=PageVersionLeft.Version)
  86. Setup.Reset("VersionAdvanceJvm", Version:=PageVersionLeft.Version)
  87. Setup.Reset("VersionAdvanceGame", Version:=PageVersionLeft.Version)
  88. Setup.Reset("VersionAdvanceAssets", Version:=PageVersionLeft.Version)
  89. Setup.Reset("VersionAdvanceAssetsV2", Version:=PageVersionLeft.Version)
  90. Setup.Reset("VersionAdvanceJava", Version:=PageVersionLeft.Version)
  91. Setup.Reset("VersionAdvanceRun", Version:=PageVersionLeft.Version)
  92. Setup.Reset("VersionAdvanceRunWait", Version:=PageVersionLeft.Version)
  93. Setup.Reset("VersionArgumentJavaSelect", Version:=PageVersionLeft.Version)
  94. JavaSearchLoader.Start(IsForceRestart:=True)
  95. Log("[Setup] 已初始化版本独立设置")
  96. Hint("已初始化版本独立设置!", HintType.Finish, False)
  97. Catch ex As Exception
  98. Log(ex, "初始化版本独立设置失败", LogLevel.Msgbox)
  99. End Try
  100. Reload()
  101. End Sub
  102. '将控件改变路由到设置改变
  103. Private Shared Sub RadioBoxChange(sender As MyRadioBox, e As Object) Handles RadioRamType0.Check, RadioRamType1.Check, RadioRamType2.Check
  104. If AniControlEnabled = 0 Then Setup.Set(sender.Tag.ToString.Split("/")(0), Val(sender.Tag.ToString.Split("/")(1)), Version:=PageVersionLeft.Version)
  105. End Sub
  106. Private Shared Sub TextBoxChange(sender As MyTextBox, e As Object) Handles TextServerEnter.ValidatedTextChanged, TextArgumentInfo.ValidatedTextChanged, TextAdvanceGame.ValidatedTextChanged, TextAdvanceJvm.ValidatedTextChanged, TextServerNide.ValidatedTextChanged, TextServerAuthName.ValidatedTextChanged, TextServerAuthRegister.ValidatedTextChanged, TextServerAuthServer.ValidatedTextChanged, TextArgumentTitle.ValidatedTextChanged, TextAdvanceRun.ValidatedTextChanged
  107. If AniControlEnabled = 0 Then
  108. '#3194,不能删减 /
  109. 'Dim HandledText As String = sender.Text
  110. 'If sender.Tag = "VersionServerAuthServer" OrElse sender.Tag = "VersionServerAuthRegister" Then HandledText = HandledText.TrimEnd("/")
  111. Setup.Set(sender.Tag, sender.Text, Version:=PageVersionLeft.Version)
  112. End If
  113. End Sub
  114. Private Shared Sub SliderChange(sender As MySlider, e As Object) Handles SliderRamCustom.Change
  115. If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Value, Version:=PageVersionLeft.Version)
  116. End Sub
  117. Private Shared Sub ComboChange(sender As MyComboBox, e As Object) Handles ComboArgumentIndie.SelectionChanged, ComboRamOptimize.SelectionChanged
  118. If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.SelectedIndex, Version:=PageVersionLeft.Version)
  119. End Sub
  120. Private Shared Sub CheckBoxChange(sender As MyCheckBox, e As Object) Handles CheckAdvanceRunWait.Change, CheckAdvanceAssetsV2.Change, CheckAdvanceJava.Change
  121. If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Checked, Version:=PageVersionLeft.Version)
  122. End Sub
  123. #Region "游戏内存"
  124. Public Sub RamType(Type As Integer)
  125. If SliderRamCustom Is Nothing Then Exit Sub
  126. SliderRamCustom.IsEnabled = (Type = 1)
  127. End Sub
  128. ''' <summary>
  129. ''' 刷新 UI 上的 RAM 显示。
  130. ''' </summary>
  131. Public Sub RefreshRam(ShowAnim As Boolean)
  132. If LabRamGame Is Nothing OrElse LabRamUsed Is Nothing OrElse FrmMain.PageCurrent <> FormMain.PageType.VersionSetup OrElse FrmVersionLeft.PageID <> FormMain.PageSubType.VersionSetup Then Exit Sub
  133. '获取内存情况
  134. Dim RamGame As Double = GetRam(PageVersionLeft.Version)
  135. Dim RamTotal As Double = Math.Round(My.Computer.Info.TotalPhysicalMemory / 1024 / 1024 / 1024 * 10) / 10
  136. Dim RamAvailable As Double = Math.Round(My.Computer.Info.AvailablePhysicalMemory / 1024 / 1024 / 1024 * 10) / 10
  137. Dim RamGameActual As Double = Math.Min(RamGame, RamAvailable)
  138. Dim RamUsed As Double = RamTotal - RamAvailable
  139. Dim RamEmpty As Double = Math.Round(MathClamp(RamTotal - RamUsed - RamGame, 0, 1000) * 10) / 10
  140. '设置最大可用内存
  141. If RamTotal <= 1.5 Then
  142. SliderRamCustom.MaxValue = Math.Max(Math.Floor((RamTotal - 0.3) / 0.1), 1)
  143. ElseIf RamTotal <= 8 Then
  144. SliderRamCustom.MaxValue = Math.Floor((RamTotal - 1.5) / 0.5) + 12
  145. ElseIf RamTotal <= 16 Then
  146. SliderRamCustom.MaxValue = Math.Floor((RamTotal - 8) / 1) + 25
  147. Else
  148. SliderRamCustom.MaxValue = Math.Min(Math.Floor((RamTotal - 16) / 2) + 33, 41)
  149. End If
  150. '设置文本
  151. LabRamGame.Text = If(RamGame = Math.Floor(RamGame), RamGame & ".0", RamGame) & " GB" &
  152. If(RamGame <> RamGameActual, " (可用 " & If(RamGameActual = Math.Floor(RamGameActual), RamGameActual & ".0", RamGameActual) & " GB)", "")
  153. LabRamUsed.Text = If(RamUsed = Math.Floor(RamUsed), RamUsed & ".0", RamUsed) & " GB"
  154. LabRamTotal.Text = " / " & If(RamTotal = Math.Floor(RamTotal), RamTotal & ".0", RamTotal) & " GB"
  155. LabRamWarn.Visibility = If(RamGame = 1 AndAlso Not JavaIs64Bit(PageVersionLeft.Version) AndAlso Not Is32BitSystem, Visibility.Visible, Visibility.Collapsed)
  156. If ShowAnim Then
  157. '宽度动画
  158. AniStart({
  159. AaGridLengthWidth(ColumnRamUsed, RamUsed - ColumnRamUsed.Width.Value, 800,, New AniEaseOutFluent(AniEasePower.Strong)),
  160. AaGridLengthWidth(ColumnRamGame, RamGameActual - ColumnRamGame.Width.Value, 800,, New AniEaseOutFluent(AniEasePower.Strong)),
  161. AaGridLengthWidth(ColumnRamEmpty, RamEmpty - ColumnRamEmpty.Width.Value, 800,, New AniEaseOutFluent(AniEasePower.Strong))
  162. }, "VersionSetup Ram Grid")
  163. Else
  164. '宽度设置
  165. ColumnRamUsed.Width = New GridLength(RamUsed, GridUnitType.Star)
  166. ColumnRamGame.Width = New GridLength(RamGameActual, GridUnitType.Star)
  167. ColumnRamEmpty.Width = New GridLength(RamEmpty, GridUnitType.Star)
  168. End If
  169. End Sub
  170. Private Sub RefreshRam() Handles SliderRamCustom.Change, RadioRamType0.Check, RadioRamType1.Check, RadioRamType2.Check
  171. RefreshRam(True)
  172. End Sub
  173. Private RamTextLeft As Integer = 2, RamTextRight As Integer = 1
  174. ''' <summary>
  175. ''' 刷新 UI 上的文本位置。
  176. ''' </summary>
  177. Private Sub RefreshRamText() Handles RectRamGame.SizeChanged, RectRamEmpty.SizeChanged, LabRamGame.SizeChanged
  178. '获取宽度信息
  179. Dim RectUsedWidth = RectRamUsed.ActualWidth
  180. Dim TotalWidth = PanRamDisplay.ActualWidth
  181. Dim LabGameWidth = LabRamGame.ActualWidth, LabUsedWidth = LabRamUsed.ActualWidth, LabTotalWidth = LabRamTotal.ActualWidth
  182. Dim LabGameTitleWidth = LabRamGameTitle.ActualWidth, LabUsedTitleWidth = LabRamUsedTitle.ActualWidth
  183. '左侧
  184. Dim Left As Integer
  185. If RectUsedWidth - 30 < LabUsedWidth OrElse RectUsedWidth - 30 < LabUsedTitleWidth Then
  186. '全写不下了
  187. Left = 0
  188. ElseIf RectUsedWidth - 25 < (LabUsedWidth + LabTotalWidth) Then
  189. '显示不下完整数据
  190. Left = 1
  191. Else
  192. '正常
  193. Left = 2
  194. End If
  195. If RamTextLeft <> Left Then
  196. RamTextLeft = Left
  197. Select Case Left
  198. Case 0
  199. AniStart({
  200. AaOpacity(LabRamUsed, -LabRamUsed.Opacity, 100),
  201. AaOpacity(LabRamTotal, -LabRamTotal.Opacity, 100),
  202. AaOpacity(LabRamUsedTitle, -LabRamUsedTitle.Opacity, 100)
  203. }, "VersionSetup Ram TextLeft")
  204. Case 1
  205. AniStart({
  206. AaOpacity(LabRamUsed, 1 - LabRamUsed.Opacity, 100),
  207. AaOpacity(LabRamTotal, -LabRamTotal.Opacity, 100),
  208. AaOpacity(LabRamUsedTitle, 0.7 - LabRamUsedTitle.Opacity, 100)
  209. }, "VersionSetup Ram TextLeft")
  210. Case 2
  211. AniStart({
  212. AaOpacity(LabRamUsed, 1 - LabRamUsed.Opacity, 100),
  213. AaOpacity(LabRamTotal, 1 - LabRamTotal.Opacity, 100),
  214. AaOpacity(LabRamUsedTitle, 0.7 - LabRamUsedTitle.Opacity, 100)
  215. }, "VersionSetup Ram TextLeft")
  216. End Select
  217. End If
  218. '右侧
  219. Dim Right As Integer
  220. If TotalWidth < LabGameWidth + 2 + RectUsedWidth OrElse TotalWidth < LabGameTitleWidth + 2 + RectUsedWidth Then
  221. '挤到最右边
  222. Right = 0
  223. Else
  224. '正常情况
  225. Right = 1
  226. End If
  227. If Right = 0 Then
  228. If AniControlEnabled = 0 AndAlso (RamTextRight <> Right OrElse AniIsRun("VersionSetup Ram TextRight")) Then
  229. '需要动画
  230. AniStart({
  231. AaX(LabRamGame, TotalWidth - LabGameWidth - LabRamGame.Margin.Left, 100,, New AniEaseOutFluent(AniEasePower.Weak)),
  232. AaX(LabRamGameTitle, TotalWidth - LabGameTitleWidth - LabRamGameTitle.Margin.Left, 100,, New AniEaseOutFluent(AniEasePower.Weak))
  233. }, "VersionSetup Ram TextRight")
  234. Else
  235. '不需要动画
  236. LabRamGame.Margin = New Thickness(TotalWidth - LabGameWidth, 3, 0, 0)
  237. LabRamGameTitle.Margin = New Thickness(TotalWidth - LabGameTitleWidth, 0, 0, 5)
  238. End If
  239. Else
  240. If AniControlEnabled = 0 AndAlso (RamTextRight <> Right OrElse AniIsRun("VersionSetup Ram TextRight")) Then
  241. '需要动画
  242. AniStart({
  243. AaX(LabRamGame, 2 + RectUsedWidth - LabRamGame.Margin.Left, 100,, New AniEaseOutFluent(AniEasePower.Weak)),
  244. AaX(LabRamGameTitle, 2 + RectUsedWidth - LabRamGameTitle.Margin.Left, 100,, New AniEaseOutFluent(AniEasePower.Weak))
  245. }, "VersionSetup Ram TextRight")
  246. Else
  247. '不需要动画
  248. LabRamGame.Margin = New Thickness(2 + RectUsedWidth, 3, 0, 0)
  249. LabRamGameTitle.Margin = New Thickness(2 + RectUsedWidth, 0, 0, 5)
  250. End If
  251. End If
  252. RamTextRight = Right
  253. End Sub
  254. ''' <summary>
  255. ''' 获取当前设置的 RAM 值。单位为 GB。
  256. ''' </summary>
  257. Public Shared Function GetRam(Version As McVersion, Optional Is32BitJava As Boolean? = Nothing) As Double
  258. '使用全局设置
  259. If Setup.Get("VersionRamType", Version:=Version) = 2 Then
  260. Return PageSetupLaunch.GetRam(Version, True, Is32BitJava)
  261. End If
  262. '------------------------------------------
  263. ' 修改下方代码时需要一并修改 PageSetupLaunch
  264. '------------------------------------------
  265. '使用当前版本的设置
  266. Dim RamGive As Double
  267. If Setup.Get("VersionRamType", Version:=Version) = 0 Then
  268. '自动配置
  269. Dim RamAvailable As Double = Math.Round(My.Computer.Info.AvailablePhysicalMemory / 1024 / 1024 / 1024 * 10) / 10
  270. '确定需求的内存值
  271. Dim RamMininum As Double '无论如何也需要保证的最低限度内存
  272. Dim RamTarget1 As Double '估计能勉强带动了的内存
  273. Dim RamTarget2 As Double '估计没啥问题了的内存
  274. Dim RamTarget3 As Double '安装过多附加组件需要的内存
  275. If Version IsNot Nothing AndAlso Not Version.IsLoaded Then Version.Load()
  276. If Version IsNot Nothing AndAlso Version.Modable Then
  277. '可安装 Mod 的版本
  278. Dim ModDir As New DirectoryInfo(Version.PathIndie & "mods\")
  279. Dim ModCount As Integer = If(ModDir.Exists, ModDir.GetFiles.Length, 0)
  280. RamMininum = 0.5 + ModCount / 150
  281. RamTarget1 = 1.5 + ModCount / 90
  282. RamTarget2 = 2.7 + ModCount / 50
  283. RamTarget3 = 4.5 + ModCount / 25
  284. ElseIf Version IsNot Nothing AndAlso Version.Version.HasOptiFine Then
  285. 'OptiFine 版本
  286. RamMininum = 0.5
  287. RamTarget1 = 1.5
  288. RamTarget2 = 3
  289. RamTarget3 = 5
  290. Else
  291. '普通版本
  292. RamMininum = 0.5
  293. RamTarget1 = 1.5
  294. RamTarget2 = 2.5
  295. RamTarget3 = 4
  296. End If
  297. Dim RamDelta As Double
  298. '预分配内存,阶段一,0 ~ T1,100%
  299. RamDelta = RamTarget1
  300. RamGive += Math.Min(RamAvailable, RamDelta)
  301. RamAvailable -= RamDelta
  302. If RamAvailable < 0.1 Then GoTo PreFin
  303. '预分配内存,阶段二,T1 ~ T2,70%
  304. RamDelta = RamTarget2 - RamTarget1
  305. RamGive += Math.Min(RamAvailable * 0.7, RamDelta)
  306. RamAvailable -= RamDelta / 0.7
  307. If RamAvailable < 0.1 Then GoTo PreFin
  308. '预分配内存,阶段三,T2 ~ T3,40%
  309. RamDelta = RamTarget3 - RamTarget2
  310. RamGive += Math.Min(RamAvailable * 0.4, RamDelta)
  311. RamAvailable -= RamDelta / 0.4
  312. If RamAvailable < 0.1 Then GoTo PreFin
  313. '预分配内存,阶段四,T3 ~ T3 * 2,15%
  314. RamDelta = RamTarget3
  315. RamGive += Math.Min(RamAvailable * 0.15, RamDelta)
  316. RamAvailable -= RamDelta / 0.15
  317. If RamAvailable < 0.1 Then GoTo PreFin
  318. PreFin:
  319. '不低于最低值
  320. RamGive = Math.Round(Math.Max(RamGive, RamMininum), 1)
  321. Else
  322. '手动配置
  323. Dim Value As Integer = Setup.Get("VersionRamCustom", Version:=Version)
  324. If Value <= 12 Then
  325. RamGive = Value * 0.1 + 0.3
  326. ElseIf Value <= 25 Then
  327. RamGive = (Value - 12) * 0.5 + 1.5
  328. ElseIf Value <= 33 Then
  329. RamGive = (Value - 25) * 1 + 8
  330. Else
  331. RamGive = (Value - 33) * 2 + 16
  332. End If
  333. End If
  334. '若使用 32 位 Java,则限制为 1G
  335. If If(Is32BitJava, Not JavaIs64Bit(PageVersionLeft.Version)) Then RamGive = Math.Min(1, RamGive)
  336. '封顶 32G
  337. Return Math.Min(32, RamGive)
  338. End Function
  339. #End Region
  340. #Region "服务器"
  341. '全局
  342. Private ComboServerLoginLast As Integer
  343. Private Sub ComboServerLogin_Changed() Handles ComboServerLogin.SelectionChanged, TextServerNide.ValidatedTextChanged, TextServerAuthServer.ValidatedTextChanged, TextServerAuthRegister.ValidatedTextChanged
  344. If AniControlEnabled <> 0 Then Exit Sub
  345. ServerLogin(ComboServerLogin.SelectedIndex)
  346. '检查是否输入正确,正确才触发设置改变
  347. If ComboServerLogin.SelectedIndex = 3 AndAlso TextServerNide.ValidateResult <> "" Then Exit Sub
  348. If ComboServerLogin.SelectedIndex = 4 AndAlso TextServerAuthServer.ValidateResult <> "" Then Exit Sub
  349. '检查结果是否发生改变,未改变则不触发设置改变
  350. If ComboServerLoginLast = ComboServerLogin.SelectedIndex Then Exit Sub
  351. '触发
  352. ComboServerLoginLast = ComboServerLogin.SelectedIndex
  353. ComboChange(ComboServerLogin, Nothing)
  354. End Sub
  355. Public Sub ServerLogin(Type As Integer)
  356. If LabServerNide Is Nothing Then Exit Sub
  357. LabServerNide.Visibility = If(Type = 3, Visibility.Visible, Visibility.Collapsed)
  358. TextServerNide.Visibility = If(Type = 3, Visibility.Visible, Visibility.Collapsed)
  359. PanServerNide.Visibility = If(Type = 3, Visibility.Visible, Visibility.Collapsed)
  360. LabServerAuthName.Visibility = If(Type = 4, Visibility.Visible, Visibility.Collapsed)
  361. TextServerAuthName.Visibility = If(Type = 4, Visibility.Visible, Visibility.Collapsed)
  362. LabServerAuthRegister.Visibility = If(Type = 4, Visibility.Visible, Visibility.Collapsed)
  363. TextServerAuthRegister.Visibility = If(Type = 4, Visibility.Visible, Visibility.Collapsed)
  364. LabServerAuthServer.Visibility = If(Type = 4, Visibility.Visible, Visibility.Collapsed)
  365. TextServerAuthServer.Visibility = If(Type = 4, Visibility.Visible, Visibility.Collapsed)
  366. BtnServerAuthLittle.Visibility = If(Type = 4, Visibility.Visible, Visibility.Collapsed)
  367. CardServer.TriggerForceResize()
  368. End Sub
  369. '统一通行证
  370. Private Sub BtnServerNideWeb_Click(sender As Object, e As EventArgs) Handles BtnServerNideWeb.Click
  371. OpenWebsite("https://login.mc-user.com:233/server/intro")
  372. End Sub
  373. 'LittleSkin
  374. Private Sub BtnServerAuthLittle_Click(sender As Object, e As EventArgs) Handles BtnServerAuthLittle.Click
  375. If TextServerAuthServer.Text <> "" AndAlso TextServerAuthServer.Text <> "https://littleskin.cn/api/yggdrasil" AndAlso
  376. MyMsgBox("即将把第三方登录设置覆盖为 LittleSkin 登录。" & vbCrLf & "除非你是服主,或者服主要求你这样做,否则请不要继续。" & vbCrLf & vbCrLf & "是否确实需要覆盖当前设置?",
  377. "设置覆盖确认", "继续", "取消") = 2 Then Exit Sub
  378. TextServerAuthServer.Text = "https://littleskin.cn/api/yggdrasil"
  379. TextServerAuthRegister.Text = "https://littleskin.cn/auth/register"
  380. TextServerAuthName.Text = "LittleSkin 登录"
  381. End Sub
  382. #End Region
  383. #Region "Java 选择"
  384. '刷新 Java 下拉框显示
  385. Public Sub RefreshJavaComboBox()
  386. If ComboArgumentJava Is Nothing Then Exit Sub
  387. '初始化列表
  388. ComboArgumentJava.Items.Clear()
  389. ComboArgumentJava.Items.Add(New MyComboBoxItem With {.Content = "使用全局设置", .Tag = "使用全局设置"})
  390. ComboArgumentJava.Items.Add(New MyComboBoxItem With {.Content = "自动选择合适的 Java", .Tag = "自动选择"})
  391. '更新列表
  392. Dim SelectedItem As MyComboBoxItem = Nothing
  393. Dim SelectedBySetup As String = Setup.Get("VersionArgumentJavaSelect", Version:=PageVersionLeft.Version)
  394. Try
  395. For Each Java In Sort(JavaList.Clone(), Function(l, r) l.VersionCode < r.VersionCode)
  396. Dim ListItem = New MyComboBoxItem With {.Content = Java.ToString, .ToolTip = Java.PathFolder, .Tag = Java}
  397. ToolTipService.SetHorizontalOffset(ListItem, 400)
  398. ComboArgumentJava.Items.Add(ListItem)
  399. '判断人为选中
  400. If SelectedBySetup = "" OrElse SelectedBySetup = "使用全局设置" Then Continue For
  401. If JavaEntry.FromJson(GetJson(SelectedBySetup)).PathFolder = Java.PathFolder Then SelectedItem = ListItem
  402. Next
  403. Catch ex As Exception
  404. Setup.Set("VersionArgumentJavaSelect", "使用全局设置", Version:=PageVersionLeft.Version)
  405. Log(ex, "更新版本设置 Java 下拉框失败", LogLevel.Feedback)
  406. End Try
  407. '更新选择项
  408. If SelectedItem Is Nothing AndAlso JavaList.Any Then
  409. If SelectedBySetup = "" Then
  410. SelectedItem = ComboArgumentJava.Items(1) '选中 “自动选择”
  411. Else
  412. SelectedItem = ComboArgumentJava.Items(0) '选中 “使用全局设置”
  413. End If
  414. End If
  415. ComboArgumentJava.SelectedItem = SelectedItem
  416. '结束处理
  417. If SelectedItem Is Nothing Then
  418. ComboArgumentJava.Items.Clear()
  419. ComboArgumentJava.Items.Add(New ComboBoxItem With {.Content = "未找到可用的 Java", .IsSelected = True})
  420. End If
  421. RefreshRam(True)
  422. End Sub
  423. '阻止在特定情况下展开下拉框
  424. Private Sub ComboArgumentJava_DropDownOpened(sender As Object, e As EventArgs) Handles ComboArgumentJava.DropDownOpened
  425. If ComboArgumentJava.SelectedItem Is Nothing OrElse ComboArgumentJava.Items(0).Content = "未找到可用的 Java" OrElse ComboArgumentJava.Items(0).Content = "加载中……" Then
  426. ComboArgumentJava.IsDropDownOpen = False
  427. End If
  428. End Sub
  429. '下拉框选择更改
  430. Private Sub JavaSelectionUpdate() Handles ComboArgumentJava.SelectionChanged
  431. If AniControlEnabled <> 0 Then Exit Sub
  432. 'Java 不可用时也不清空,会导致刷新时找不到对象
  433. If ComboArgumentJava.SelectedItem Is Nothing OrElse ComboArgumentJava.SelectedItem.Tag Is Nothing Then Exit Sub
  434. '设置新的 Java
  435. Dim SelectedJava = ComboArgumentJava.SelectedItem.Tag
  436. If "使用全局设置".Equals(SelectedJava) Then
  437. '选择 “自动”
  438. Setup.Set("VersionArgumentJavaSelect", "使用全局设置", Version:=PageVersionLeft.Version)
  439. Log("[Java] 修改版本 Java 选择设置:使用全局设置")
  440. ElseIf "自动选择".Equals(SelectedJava) Then
  441. '选择 “自动”
  442. Setup.Set("VersionArgumentJavaSelect", "", Version:=PageVersionLeft.Version)
  443. Log("[Java] 修改版本 Java 选择设置:自动选择")
  444. Else
  445. '选择指定项
  446. Setup.Set("VersionArgumentJavaSelect", CType(SelectedJava.ToJson(), JObject).ToString(Newtonsoft.Json.Formatting.None), Version:=PageVersionLeft.Version)
  447. Log("[Java] 修改版本 Java 选择设置:" & SelectedJava.ToString)
  448. End If
  449. RefreshRam(True)
  450. End Sub
  451. #End Region
  452. #Region "其他设置"
  453. '版本隔离警告
  454. Private IsReverting As Boolean = False
  455. Private Sub ComboArgumentIndie_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles ComboArgumentIndie.SelectionChanged
  456. If AniControlEnabled <> 0 Then Exit Sub
  457. If MyMsgBox("调整版本隔离后,你可能得把游戏存档、Mod 等文件手动迁移到新的游戏文件夹中。" & vbCrLf &
  458. "如果修改后发现存档消失,把这项设置改回来就能恢复。" & vbCrLf &
  459. "如果你不会迁移存档,不建议修改这项设置!",
  460. "警告", "我知道我在做什么", "取消", IsWarn:=True) = 2 Then
  461. IsReverting = True
  462. ComboArgumentIndie.SelectedItem = e.RemovedItems(0)
  463. IsReverting = False
  464. End If
  465. End Sub
  466. #End Region
  467. #Region "高级设置"
  468. Private Sub TextAdvanceRun_TextChanged(sender As Object, e As TextChangedEventArgs) Handles TextAdvanceRun.TextChanged
  469. CheckAdvanceRunWait.Visibility = If(TextAdvanceRun.Text = "", Visibility.Collapsed, Visibility.Visible)
  470. End Sub
  471. #End Region
  472. End Class