formGuild.xaml.vb 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. Public Class formGuild
  2. '切换页面
  3. Private Sub ShowPage(Page As Grid)
  4. frmMain.Dispatcher.Invoke(Sub()
  5. log("[Guild] 显示页面:" & Page.Name)
  6. CType(Page.RenderTransform, ScaleTransform).ScaleX = 0.96
  7. CType(Page.RenderTransform, ScaleTransform).ScaleY = 0.96
  8. Page.Opacity = 0
  9. Page.Visibility = Visibility.Visible
  10. AniStart({
  11. AaScaleTransform(Page, 1 - CType(Page.RenderTransform, ScaleTransform).ScaleX, 200, 130, New AniEaseJumpEnd(0.8)),
  12. AaOpacity(Page, 1 - Page.Opacity, 150, 130)
  13. }, "GuildChangePage" & GetUUID())
  14. End Sub)
  15. End Sub
  16. Private Sub HidePage(Page As Grid)
  17. frmMain.Dispatcher.Invoke(Sub()
  18. log("[Guild] 隐藏页面:" & Page.Name)
  19. AniStart({
  20. AaScaleTransform(Page, 0.96 - CType(Page.RenderTransform, ScaleTransform).ScaleX, 200,, New AniEaseEnd),
  21. AaOpacity(Page, -Page.Opacity, 150),
  22. AaCode({"Visible", Page, False}, 200)
  23. }, "GuildChangePage" & GetUUID())
  24. End Sub)
  25. End Sub
  26. '检测启动器更新与 Java
  27. Private Sub formGuild_Loaded(sender As Object, e As RoutedEventArgs) Handles panMain.Loaded
  28. panJava.Visibility = Visibility.Collapsed
  29. panPlayer.Visibility = Visibility.Collapsed
  30. panTheme.Visibility = Visibility.Collapsed
  31. panMinecraft.Visibility = Visibility.Collapsed
  32. panVersion.Visibility = Visibility.Collapsed
  33. ShowPage(panLoad)
  34. Dim th As New Thread(Sub()
  35. '启动器更新
  36. frmMain.Dispatcher.Invoke(Sub() labLoad.Content = "检查启动器更新中")
  37. Do While NeedUpdate = LoadState.Loading Or NeedUpdate = LoadState.Waiting
  38. Thread.Sleep(10)
  39. Loop
  40. If NeedUpdate = LoadState.Loaded Then
  41. '需要更新
  42. frmMain.Dispatcher.Invoke(Sub() labLoad.Content = "启动器更新中")
  43. WriteIni("setup", "LastVersionCode", "0")
  44. Dim th2 As New Thread(AddressOf DownloadUpdate)
  45. th2.Start()
  46. Do While UpdateState = LoadState.Loading Or UpdateState = LoadState.Waiting
  47. Thread.Sleep(20)
  48. Loop
  49. End If
  50. 'Java 检测
  51. frmMain.Dispatcher.Invoke(Sub() labLoad.Content = "检测 Java 中")
  52. PoolJavaFolder(True)
  53. If PATH_JAVA = "" Then
  54. '未找到 Java
  55. HidePage(panLoad)
  56. ShowPage(panJava)
  57. Exit Sub
  58. End If
  59. frmMain.Dispatcher.Invoke(Sub() labLoad.Content = "准备中")
  60. HidePage(panLoad)
  61. ShowPage(panTheme)
  62. End Sub)
  63. th.Start()
  64. End Sub
  65. 'Java 页面
  66. Private Sub btnJavaClick(sender As Object, e As RoutedEventArgs) Handles btnJava.Click
  67. Process.Start("https://www.java.com/winoffline_installer/")
  68. MyMsgbox("请在下载、安装结束后重启电脑。", "提示")
  69. End Sub
  70. Private Sub btnJavaSelectClick(sender As Object, e As RoutedEventArgs) Handles btnJavaSelect.Click
  71. Using fileDialog As New Forms.OpenFileDialog
  72. fileDialog.AddExtension = True
  73. fileDialog.AutoUpgradeEnabled = True
  74. fileDialog.CheckFileExists = True
  75. fileDialog.Filter = "JavaW|javaw.exe"
  76. fileDialog.Multiselect = False
  77. fileDialog.Title = "选择 javaw.exe"
  78. fileDialog.ShowDialog()
  79. '选择文件结束
  80. If Not fileDialog.FileName = "" Then
  81. PATH_JAVA = Mid(fileDialog.FileName, 1, fileDialog.FileName.LastIndexOf("\"))
  82. WriteReg("SetupJavaPath", PATH_JAVA)
  83. log("[Guild] 人工指定的新的Java路径:" & PATH_JAVA)
  84. Dim th As New Thread(AddressOf SetJavaEnvironment)
  85. th.Priority = ThreadPriority.AboveNormal
  86. th.Start()
  87. HidePage(panJava)
  88. ShowPage(panTheme)
  89. End If
  90. End Using
  91. End Sub
  92. '主题配色
  93. Private Sub ThemeChange(sender As Object, e As EventArgs) Handles rectTheme0.MouseUp, rectTheme1.MouseUp, rectTheme2.MouseUp, rectTheme3.MouseUp
  94. WriteIni("setup", "UiTheme", sender.Tag)
  95. RefreshTheme()
  96. End Sub
  97. Private Sub btnTheme_Loaded(sender As Object, e As RoutedEventArgs) Handles btnTheme.Click
  98. HidePage(panTheme)
  99. ShowPage(panPlayer)
  100. End Sub
  101. '玩家种类
  102. Private IsNewPlayer As Boolean
  103. Private Sub btnPlayerClickNew() Handles btnPlayerNew.Click
  104. IsNewPlayer = True
  105. WriteIni("setup", "DownForgeAction", "0")
  106. WriteIni("setup", "HomeUpdateRelease", "True")
  107. HidePage(panPlayer)
  108. MinecraftFolder()
  109. End Sub
  110. Private Sub btnPlayerClickOld() Handles btnPlayerOld.Click
  111. IsNewPlayer = False
  112. HidePage(panPlayer)
  113. MinecraftFolder()
  114. End Sub
  115. 'Minecraft 文件夹
  116. Private Sub MinecraftFolder()
  117. Try
  118. '优先尝试设置为当前文件夹
  119. If CheckDirectoryPermission(PATH & ".minecraft\versions") Then MinecraftThere() : Exit Sub
  120. '获取官启目录下的版本数量
  121. Dim MojangPathCount As Integer = 0
  122. Dim MojangPath As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\.minecraft\"
  123. If CheckDirectoryPermission(MojangPath & "versions\") Then MojangPathCount = Directory.GetDirectories(MojangPath & "versions\").Length
  124. '如果官启目录下有版本的话就进行询问
  125. If IsNewPlayer Then MinecraftThere() : Exit Sub
  126. If MojangPathCount > 0 Then
  127. HidePage(panPlayer)
  128. ShowPage(panMinecraft)
  129. Else
  130. MinecraftThere()
  131. End If
  132. Catch ex As Exception
  133. MinecraftThere()
  134. End Try
  135. End Sub
  136. Private Sub MinecraftMojang() Handles btnMinecraftMojang.Click
  137. WriteIni("setup", "LaunchFolderSelect", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\.minecraft\")
  138. HidePage(panMinecraft)
  139. PoolMinecraftFolder()
  140. VersionCheck()
  141. End Sub
  142. Private Sub MinecraftThere() Handles btnMinecraftThere.Click
  143. WriteIni("setup", "LaunchFolderSelect", PATH & ".minecraft\")
  144. HidePage(panMinecraft)
  145. PoolMinecraftFolder()
  146. VersionCheck()
  147. End Sub
  148. '版本隔离
  149. Private Sub VersionCheck()
  150. '检查根目录与版本文件夹内是否有 mod
  151. Dim IsRoot As Boolean = Directory.Exists(PATH_MC & "mods")
  152. Dim IsVersion As Boolean = False
  153. Try
  154. If Directory.Exists(PATH_MC & "versions/") Then
  155. For Each Dir As DirectoryInfo In New DirectoryInfo(PATH_MC & "versions/").GetDirectories
  156. If Directory.Exists(Dir.FullName & "/mods/") Then
  157. IsVersion = True
  158. GoTo FindEnd
  159. End If
  160. Next
  161. End If
  162. Catch
  163. End Try
  164. FindEnd:
  165. '判断情况
  166. If IsRoot Then
  167. If IsVersion Then
  168. '根目录和版本文件夹都有
  169. GoTo RequireCheck
  170. Else
  171. '根目录有,版本文件夹没有
  172. GoTo DirectNo
  173. End If
  174. Else
  175. If IsVersion Then
  176. '根目录没有,版本文件夹有
  177. GoTo DirectSplit
  178. Else
  179. '两边都没有
  180. If IsNewPlayer Then
  181. GoTo DirectNo
  182. Else
  183. GoTo RequireCheck
  184. End If
  185. End If
  186. End If
  187. Exit Sub
  188. '各种处理
  189. RequireCheck:
  190. ShowPage(panVersion)
  191. Exit Sub
  192. DirectSplit:
  193. WriteIni("setup", "LaunchSplit", "1")
  194. GuildExit()
  195. Exit Sub
  196. DirectNo:
  197. WriteIni("setup", "LaunchSplit", "0")
  198. GuildExit()
  199. Exit Sub
  200. End Sub
  201. Private Sub labVersionAll_Click(sender As Object, e As EventArgs) Handles labVersionAll.Click
  202. WriteIni("setup", "LaunchSplit", "2")
  203. GuildExit()
  204. End Sub
  205. Private Sub labVersionForge_Click(sender As Object, e As EventArgs) Handles labVersionForge.Click
  206. WriteIni("setup", "LaunchSplit", "1")
  207. GuildExit()
  208. End Sub
  209. Private Sub labVersionNo_Click(sender As Object, e As EventArgs) Handles labVersionNo.Click
  210. WriteIni("setup", "LaunchSplit", "0")
  211. GuildExit()
  212. End Sub
  213. '退出设置向导
  214. Private Sub GuildExit()
  215. ShowHint(New HintConverter("配置完成,欢迎使用 PCL!", HintState.Finish))
  216. frmMain.panTopSelect.Visibility = Visibility.Visible
  217. frmMain.panTopSelect.Opacity = 0
  218. frmMain.panGuild.IsHitTestVisible = False
  219. frmMain.labTopVer.Visibility = Visibility.Visible
  220. frmMain.labTopVer.Opacity = 0
  221. AniStart({
  222. AaHeight(frmMain.panTop, 52, 200),
  223. AaOpacity(frmMain.labFirst, -1, 200),
  224. AaOpacity(frmMain.panTopSelect, 1, 150, 150),
  225. AaOpacity(frmMain.labTopVer, 0.23, 150, 150),
  226. AaOpacity(frmMain.panGuild, -1, 300)
  227. }, "ExitGuild")
  228. End Sub
  229. End Class