PageVersionSetup.xaml.vb 25 KB

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