diff --git a/CTZLauncher/MainWindow.xaml.cs b/CTZLauncher/MainWindow.xaml.cs index 79b8736..4daa28d 100644 --- a/CTZLauncher/MainWindow.xaml.cs +++ b/CTZLauncher/MainWindow.xaml.cs @@ -1,287 +1,296 @@ -using CTZLauncher.Modules.CTZServer; -using CTZLauncher.Tools; -using KMCCC.Authentication; -using KMCCC.Launcher; -using KMCCC.Tools; -using LitJson; -using System; -using System.Collections.Generic; -using System.Configuration; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Animation; - -namespace CTZLauncher -{ - /// - /// MainWindow.xaml 的交互逻辑 - /// - public partial class MainWindow : Window - { - LauncherCore launcher = null; - LaunchOptions option = new LaunchOptions(); - string serveraddress = ConfigurationManager.AppSettings["Server"]; - int serverport = 25580; - - #region 初始化部分 - public MainWindow() - { - InitializeComponent(); - } - - private void Window_Initialized(object sender, EventArgs e) - { - if (!Directory.Exists(".minecraft")) - { - Directory.CreateDirectory(".minecraft"); - } - launcher = LauncherCore.Create(".minecraft"); - } - #endregion - - #region 登录界面 - private void barclick_MouseDown(object sender, MouseButtonEventArgs e) - { - Label bar = (Label)sender; - MessageBox.Show(bar.Name); - switch (bar.Name.Substring(4)) - { - case "l1": - break; - case "l2": - break; - case "l3": - break; - case "l4": - break; - case "r1": - break; - case "r2": - break; - case "r3": - break; - case "r4": - break; - } - } - - private void Login_Click(object sender, RoutedEventArgs e) - { - if (username.Text.Length == 0 || password.Text.Length == 0) - { - MessageBox.Show("请输入账号密码!"); - return; - } - Login.IsEnabled = false; - CTZAuthenticator auth = new CTZAuthenticator(username.Text, password.Text, serveraddress, serverport); - try - { - if (auth.isLogin()) - { - MessageBox.Show("当前玩家已登录服务器!"); - } - else - { - if (!auth.Login()) - { - if (!auth.isRegistered()) - MessageBox.Show("该用户名未注册 请先注册!"); - else - MessageBox.Show("登录失败 账号不存在 或 密码错误 !"); - } - else - { - ServerWindow.Visibility = Visibility.Visible; - RotateTransform rtf = new RotateTransform(); - ServerWindow.RenderTransform = rtf; - LoginWindow.RenderTransform = rtf; - DoubleAnimation dbAscending = new DoubleAnimation(0, 360, new Duration(TimeSpan.FromSeconds(0.75))); - dbAscending.RepeatBehavior = new RepeatBehavior(1); - rtf.BeginAnimation(RotateTransform.AngleProperty, dbAscending); - CTZServer areas = JsonMapper.ToObject(auth.getServerList().ToLower()); - LoadAreas(areas); - } - } - } - catch (ArgumentNullException ex) - { - MessageBox.Show(ex.Message); - } - finally - { - Login.IsEnabled = true; - } - } - - private void outline_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) - { - if (e.LeftButton == MouseButtonState.Pressed) - this.DragMove(); - } - - private void close_Click(object sender, RoutedEventArgs e) - { - this.Close(); - } - - private void maxmem_TextChanged(object sender, TextChangedEventArgs e) - { - //屏蔽中文输入和非法字符粘贴输入 - TextBox textBox = sender as TextBox; - TextChange[] change = new TextChange[e.Changes.Count]; - e.Changes.CopyTo(change, 0); - - int offset = change[0].Offset; - if (change[0].AddedLength > 0) - { - double num = 0; - if (!Double.TryParse(textBox.Text, out num)) - { - textBox.Text = textBox.Text.Remove(offset, change[0].AddedLength); - textBox.Select(offset, 0); - } - } - } - - private void register_Click(object sender, RoutedEventArgs e) - { - register.IsEnabled = false; - if (username.Text.Length == 0 || password.Text.Length == 0) - { - MessageBox.Show("请输入账号密码!"); - return; - } - CTZAuthenticator auth = new CTZAuthenticator(username.Text, password.Text, serveraddress, serverport); - try - { - if (auth.isRegistered()) - { - MessageBox.Show("该用户名已注册 请更换用户名!"); - return; - } - if (auth.Register()) - { - MessageBox.Show("注册成功!"); - auth.Login(); - ServerWindow.Visibility = System.Windows.Visibility.Visible; - } - else - MessageBox.Show("注册失败!"); - } - catch (ArgumentNullException ex) - { - MessageBox.Show(ex.Message); - } - finally - { - register.IsEnabled = true; - } - - } - #endregion - - #region 服务器选择与启动 - private void LoadAreas(CTZServer areas) - { - for (int i = 0; i < areas.Areas.Count; i++) - { - Area area = areas.Areas[i]; - Button arearb = GameArea.FindName("a" + i) as Button; - arearb.Content = area.Name; - arearb.Visibility = Visibility.Visible; - arearb.Tag = area.Servers; - } - for (int i = areas.Areas.Count; i < 8; i++) - { - Button arearb = GameArea.FindName("a" + i) as Button; - arearb.Visibility = Visibility.Hidden; - } - } - - private void LoadServers(List servers) - { - for (int i = 0; i < servers.Count; i++) - { - Server server = servers[i]; - Button serverrb = GameArea.FindName("s" + i) as Button; - serverrb.Content = server.Name; - serverrb.Visibility = Visibility.Visible; - serverrb.Tag = server; - } - for (int i = servers.Count; i < 12; i++) - { - Button serverrb = GameArea.FindName("s" + i) as Button; - serverrb.Visibility = Visibility.Hidden; - } - } - - private void area_Click(object sender, RoutedEventArgs e) - { - Button arb = (Button)sender; - LoadServers((List)arb.Tag); - } - - private void server_Click(object sender, RoutedEventArgs e) - { - Button srb = (Button)sender; - Server server = (Server)srb.Tag; - option.Server = new ServerInfo - { - Address = server.Address, - Port = server.Port - }; - option.Version = launcher.GetVersion(server.Version); - serverinfo.Content = server.Info; - selserver.Content = server.Name; - needclient.Content = server.Version; - online.Content = "获取中..."; - MinecraftServer ms = new MinecraftServer(server.Address, server.Port); - var info = ms.DoAsync(); - if (info != null) - online.Content = info.Players.Online + "/" + info.Players.Max; - else - online.Content = "获取失败!"; - } - - private void StartGame_Click(object sender, RoutedEventArgs e) - { - Console.WriteLine("启动游戏"); - option.Mode = LaunchMode.MCLauncher; - option.MaxMemory = 2048; - option.Authenticator = new OfflineAuthenticator(username.Text); // 离线模式 - launcher.JavaPath = SystemTools.FindJava().First(); - launcher.GameLog += launcher_GameLog; - launcher.GameStart += Launcher_GameStart; - launcher.Launch(option); - } - - private void Launcher_GameStart(LaunchHandle arg1, string arg2) - { - string title = selserver.Content.ToString() + " - " + username.Text; - arg1.SetTitle(title); - } - - void launcher_GameLog(LaunchHandle arg1, string log) - { - Console.WriteLine(log); - } - #endregion - - private void username_KeyDown(object sender, KeyEventArgs e) - { - if (e.Key == Key.Enter) - password.Focus(); - } - - private void password_KeyDown(object sender, KeyEventArgs e) - { - if (e.Key == Key.Enter) - Login_Click(sender, e); - } - } -} +using CTZLauncher.Modules.CTZServer; +using CTZLauncher.Tools; +using KMCCC.Authentication; +using KMCCC.Launcher; +using KMCCC.Tools; +using LitJson; +using System; +using System.Collections.Generic; +using System.Configuration; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Animation; + +namespace CTZLauncher +{ + /// + /// MainWindow.xaml 的交互逻辑 + /// + public partial class MainWindow : Window + { + LauncherCore launcher = null; + LaunchOptions option = new LaunchOptions(); + string serveraddress = ConfigurationManager.AppSettings["Server"]; + int serverport = 25580; + + #region 初始化部分 + public MainWindow() + { + InitializeComponent(); + } + + private void Window_Initialized(object sender, EventArgs e) + { + if (!Directory.Exists(".minecraft")) + { + Directory.CreateDirectory(".minecraft"); + } + launcher = LauncherCore.Create(".minecraft"); + } + #endregion + + #region 登录界面 + private void barclick_MouseDown(object sender, MouseButtonEventArgs e) + { + Label bar = (Label)sender; + MessageBox.Show(bar.Name); + switch (bar.Name.Substring(4)) + { + case "l1": + break; + case "l2": + break; + case "l3": + break; + case "l4": + break; + case "r1": + break; + case "r2": + break; + case "r3": + break; + case "r4": + break; + } + } + + private void Login_Click(object sender, RoutedEventArgs e) + { + if (username.Text.Length == 0 || password.Text.Length == 0) + { + MessageBox.Show("请输入账号密码!"); + return; + } + Login.IsEnabled = false; + CTZAuthenticator auth = new CTZAuthenticator(username.Text, password.Text, serveraddress, serverport); + try + { + if (auth.isLogin()) + { + MessageBox.Show("当前玩家已登录服务器!"); + } + else + { + if (!auth.Login()) + { + if (!auth.isRegistered()) + MessageBox.Show("该用户名未注册 请先注册!"); + else + MessageBox.Show("登录失败 账号不存在 或 密码错误 !"); + } + else + { + ServerWindow.Visibility = Visibility.Visible; + RotateTransform rtf = new RotateTransform(); + ServerWindow.RenderTransform = rtf; + LoginWindow.RenderTransform = rtf; + DoubleAnimation dbAscending = new DoubleAnimation(0, 360, new Duration(TimeSpan.FromSeconds(0.75))); + dbAscending.RepeatBehavior = new RepeatBehavior(1); + rtf.BeginAnimation(RotateTransform.AngleProperty, dbAscending); + CTZServer areas = JsonMapper.ToObject(auth.getServerList().ToLower()); + LoadAreas(areas); + } + } + } + catch (ArgumentNullException ex) + { + MessageBox.Show(ex.Message); + } + finally + { + Login.IsEnabled = true; + } + } + + private void outline_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) + { + if (e.LeftButton == MouseButtonState.Pressed) + this.DragMove(); + } + + private void close_Click(object sender, RoutedEventArgs e) + { + this.Close(); + } + + private void maxmem_TextChanged(object sender, TextChangedEventArgs e) + { + //屏蔽中文输入和非法字符粘贴输入 + TextBox textBox = sender as TextBox; + TextChange[] change = new TextChange[e.Changes.Count]; + e.Changes.CopyTo(change, 0); + + int offset = change[0].Offset; + if (change[0].AddedLength > 0) + { + double num = 0; + if (!Double.TryParse(textBox.Text, out num)) + { + textBox.Text = textBox.Text.Remove(offset, change[0].AddedLength); + textBox.Select(offset, 0); + } + } + } + + private void register_Click(object sender, RoutedEventArgs e) + { + register.IsEnabled = false; + if (username.Text.Length == 0 || password.Text.Length == 0) + { + MessageBox.Show("请输入账号密码!"); + return; + } + CTZAuthenticator auth = new CTZAuthenticator(username.Text, password.Text, serveraddress, serverport); + try + { + if (auth.isRegistered()) + { + MessageBox.Show("该用户名已注册 请更换用户名!"); + return; + } + if (auth.Register()) + { + MessageBox.Show("注册成功!"); + auth.Login(); + ServerWindow.Visibility = System.Windows.Visibility.Visible; + } + else + MessageBox.Show("注册失败!"); + } + catch (ArgumentNullException ex) + { + MessageBox.Show(ex.Message); + } + finally + { + register.IsEnabled = true; + } + + } + #endregion + + #region 服务器选择与启动 + private void LoadAreas(CTZServer areas) + { + for (int i = 0; i < areas.Areas.Count; i++) + { + Area area = areas.Areas[i]; + Button arearb = GameArea.FindName("a" + i) as Button; + arearb.Content = area.Name; + arearb.Visibility = Visibility.Visible; + arearb.Tag = area.Servers; + } + for (int i = areas.Areas.Count; i < 8; i++) + { + Button arearb = GameArea.FindName("a" + i) as Button; + arearb.Visibility = Visibility.Hidden; + } + } + + private void LoadServers(List servers) + { + for (int i = 0; i < servers.Count; i++) + { + Server server = servers[i]; + Button serverrb = GameArea.FindName("s" + i) as Button; + serverrb.Content = server.Name; + serverrb.Visibility = Visibility.Visible; + serverrb.Tag = server; + } + for (int i = servers.Count; i < 12; i++) + { + Button serverrb = GameArea.FindName("s" + i) as Button; + serverrb.Visibility = Visibility.Hidden; + } + } + + private void area_Click(object sender, RoutedEventArgs e) + { + Button arb = (Button)sender; + LoadServers((List)arb.Tag); + } + + private void server_Click(object sender, RoutedEventArgs e) + { + Button srb = (Button)sender; + Server server = (Server)srb.Tag; + option.Server = new ServerInfo + { + Address = server.Address, + Port = server.Port + }; + option.Version = launcher.GetVersion(server.Version); + serverinfo.Content = server.Info; + selserver.Content = server.Name; + needclient.Content = server.Version; + online.Content = "获取中..."; + MinecraftServer ms = new MinecraftServer(server.Address, server.Port); + var info = ms.DoAsync(); + if (info != null) + online.Content = info.Players.Online + "/" + info.Players.Max; + else + online.Content = "获取失败!"; + } + + private void StartGame_Click(object sender, RoutedEventArgs e) + { + if (option.Version == null) + { + MessageBoxResult result = MessageBox.Show("是否下载服务器所需要的客户端版本?", "缺少客户端", MessageBoxButton.OKCancel, MessageBoxImage.Question); + if (result == MessageBoxResult.Yes) + { + + } + return; + } + Console.WriteLine("启动游戏"); + option.Mode = LaunchMode.MCLauncher; + option.MaxMemory = 2048; + option.Authenticator = new OfflineAuthenticator(username.Text); // 离线模式 + launcher.JavaPath = SystemTools.FindJava().First(); + launcher.GameLog += launcher_GameLog; + launcher.GameStart += Launcher_GameStart; + launcher.Launch(option); + } + + private void Launcher_GameStart(LaunchHandle arg1, string arg2) + { + string title = selserver.Content.ToString() + " - " + username.Text; + arg1.SetTitle(title); + } + + void launcher_GameLog(LaunchHandle arg1, string log) + { + Console.WriteLine(log); + } + #endregion + + private void username_KeyDown(object sender, KeyEventArgs e) + { + if (e.Key == Key.Enter) + password.Focus(); + } + + private void password_KeyDown(object sender, KeyEventArgs e) + { + if (e.Key == Key.Enter) + Login_Click(sender, e); + } + } +} diff --git a/CTZLauncher/Properties/app.manifest b/CTZLauncher/Properties/app.manifest index b50be99..c4e95de 100644 --- a/CTZLauncher/Properties/app.manifest +++ b/CTZLauncher/Properties/app.manifest @@ -16,7 +16,7 @@ 如果要利用文件和注册表虚拟化实现向后 兼容性,则删除 requestedExecutionLevel 节点。 --> - +