更新...

master
502647092 2015-09-17 20:39:26 +08:00
parent 63475476e3
commit 478921db6b
2 changed files with 297 additions and 288 deletions

View File

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

View File

@ -16,7 +16,7 @@
如果要利用文件和注册表虚拟化实现向后 如果要利用文件和注册表虚拟化实现向后
兼容性,则删除 requestedExecutionLevel 节点。 兼容性,则删除 requestedExecutionLevel 节点。
--> -->
<requestedExecutionLevel level="asInvoker" uiAccess="false" /> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges> </requestedPrivileges>
<applicationRequestMinimum> <applicationRequestMinimum>
<PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" /> <PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" />