Files
MRCC/launcher/PCL-CE/Plain Craft Launcher 2/Pages/PageSetup/PageSetupGameLink.xaml.cs
T
xyou f70b061d1a
CI / Go Backend (push) Canceled after 0s
feat: 项目初始化 + 3D方块世界原型 + AI助搭系统
初始化 monorepo: Go后端(7微服务) + Unity客户端(9模块) + 启动器

HTML5原型: Three.js 3D体素世界, Perlin噪声地形, 原版材质, 22种方块

Minecraft创造模式背包: 双栏布局, 拖拽移动物品, 方向性元件引脚

AI助搭策划文档 + 客户端/服务端骨架 + Docker Compose + CI
2026-08-08 14:07:56 +08:00

176 lines
6.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using PCL.Core.App;
using PCL.Core.App.Configuration;
using PCL.Core.App.Localization;
using PCL.Core.Link.Scaffolding.EasyTier;
namespace PCL;
public partial class PageSetupGameLink
{
private bool isFirstLoad = true;
private new bool isLoaded;
public PageSetupGameLink()
{
InitializeComponent();
TextUdpNatType.Text = Lang.Text("Setup.GameLink.NetworkTest.UdpNatType", Lang.Text("Setup.GameLink.NetworkTest.NotTested"));
TextTcpNatType.Text = Lang.Text("Setup.GameLink.NetworkTest.TcpNatType", Lang.Text("Setup.GameLink.NetworkTest.NotTested"));
TextIpv6Status.Text = Lang.Text("Setup.GameLink.NetworkTest.Ipv6Status", Lang.Text("Setup.GameLink.NetworkTest.NotTested"));
Loaded += PageSetupLink_Loaded;
Loaded += (_, _) => Reload();
}
private void PageSetupLink_Loaded(object sender, RoutedEventArgs e)
{
// 重复加载部分
PanBack.ScrollToHome();
// 非重复加载部分
if (isLoaded)
return;
isLoaded = true;
ModAnimation.AniControlEnabled += 1;
Reload();
ModAnimation.AniControlEnabled -= 1;
}
public void Reload()
{
TextLinkUsername.Text = Config.Link.Username;
// TextLinkRelay.Text = Config.Link.RelayServer
// ComboRelayType.SelectedIndex = Config.Link.RelayType
// ComboServerType.SelectedIndex = Config.Link.ServerType
CheckLatencyFirstMode.Checked = Config.Link.UseLatencyFirstMode;
ComboPreferProtocol.SelectedIndex = (int)Config.Link.ProtocolPreference;
CheckTryPunchSym.Checked = Config.Link.TryPunchSym;
CheckEnableIPv6.Checked = Config.Link.EnableIPv6;
CheckEnableCliOutput.Checked = Config.Link.EnableCliOutput;
// TextRelays.Text = "正在获取信息..."
// Do While Not (PageLinkLobby.LobbyAnnouncementLoader.State = LoadState.Finished OrElse PageLinkLobby.LobbyAnnouncementLoader.State = LoadState.Failed)
// Thread.Sleep(500)
// Loop
// If ETRelay.RelayList.Count > 0 Then
// TextRelays.Text = ""
// For Each Relay In ETRelay.RelayList
// Select Case Relay.Type
// Case ETRelayType.Community
// TextRelays.Text += "[社区] "
// Case ETRelayType.Selfhosted
// TextRelays.Text += "[自有] "
// Case Else 'ETRelayType.Custom
// TextRelays.Text += "[自定义] "
// End Select
// TextRelays.Text += Relay.Name & ""
// Next
// TextRelays.Text = TextRelays.Text.BeforeLast("")
// Else
// TextRelays.Text = "暂无,你可能需要手动添加中继服务器"
// End If
}
// 初始化
public void Reset()
{
try
{
Config.Link.Reset();
ModBase.Log("[Setup] 已初始化联机页设置");
HintService.Hint(Lang.Text("Setup.GameLink.Initialized"), HintType.Success, false);
Reload();
}
catch (Exception ex)
{
ModBase.Log(
ex,
Lang.Text("Setup.GameLink.Error.InitFailed"),
ModBase.LogLevel.Msgbox,
userSummary: Lang.Text("Setup.GameLink.Error.InitFailed"));
}
Reload();
}
// 将控件改变路由到设置改变
private void TextBoxChange(object senderRaw, TextChangedEventArgs e)
{
var sender = (MyTextBox)senderRaw;
if (ModAnimation.AniControlEnabled == 0)
SetByTag(sender.Tag?.ToString(), sender.Text);
}
private static void ComboBoxChange(MyComboBox sender, object e)
{
if (ModAnimation.AniControlEnabled == 0)
SetByTag(sender.Tag?.ToString(), sender.SelectedIndex);
}
private void CheckBoxChange(object senderRaw, bool user)
{
var sender = (MyCheckBox)senderRaw;
if (ModAnimation.AniControlEnabled == 0)
SetByTag(sender.Tag?.ToString(), sender.Checked);
}
private static void SetByTag(string tag, object value)
=> ConfigService.TrySetValue(tag, value);
private void LinkProtocolPerferenceChange(object sender, SelectionChangedEventArgs e)
{
if (ModAnimation.AniControlEnabled == 0)
try
{
var selection = (LinkProtocolPreference)((MyComboBox)sender).SelectedIndex;
Config.Link.ProtocolPreference = selection;
}
catch (Exception ex)
{
ModBase.Log(
ex,
Lang.Text("Setup.GameLink.Error.ConfigChangeFailed"),
ModBase.LogLevel.Hint,
userSummary: Lang.Text("Setup.GameLink.Error.ConfigChangeFailed"));
}
}
// 网络测试
private void BtnNetTest_Click(object sender, MouseButtonEventArgs e)
{
try
{
BtnNetTest.IsEnabled = false;
BtnNetTest.Text = Lang.Text("Setup.GameLink.NetworkTest.Testing");
ModBase.RunInNewThread(() =>
{
var status = CliNetTest.GetNetStatusAsync().GetAwaiter().GetResult();
ModBase.RunInUi(() =>
{
TextUdpNatType.Text =
Lang.Text("Setup.GameLink.NetworkTest.UdpNatType", CliNetTest.GetNatTypeString(status.UdpNatType));
TextTcpNatType.Text =
Lang.Text("Setup.GameLink.NetworkTest.TcpNatType", CliNetTest.GetNatTypeString(status.TcpNatType));
TextIpv6Status.Text = Lang.Text("Setup.GameLink.NetworkTest.Ipv6Status",
status.SupportIPv6
? Lang.Text("Setup.GameLink.NetworkTest.Supported")
: Lang.Text("Setup.GameLink.NetworkTest.Unsupported"));
BtnNetTest.IsEnabled = true;
BtnNetTest.Text = Lang.Text("Setup.GameLink.NetworkTest.Start");
});
});
}
catch (Exception ex)
{
ModBase.Log(ex,
"[Link] 获取网络测试结果失败",
ModBase.LogLevel.Hint,
userSummary: Lang.Text("Setup.GameLink.Error.NetworkTestFailed"));
BtnNetTest.IsEnabled = true;
BtnNetTest.Text = Lang.Text("Setup.GameLink.NetworkTest.Start");
}
}
}