更新...
parent
63475476e3
commit
478921db6b
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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" />
|
||||||
|
|
Loading…
Reference in New Issue