Files
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

121 lines
4.4 KiB
C#

using System.Collections;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using PCL.Network;
using PCL.Core.App.Localization;
namespace PCL;
public partial class PageDownloadClient
{
public PageDownloadClient()
{
Initialized += (_, _) => LoaderInit();
Loaded += (_, _) => Init();
InitializeComponent();
}
private void LoaderInit()
{
PageLoaderInit(Load, PanLoad, PanBack, null, ModDownload.dlClientListLoader, _ => Load_OnFinish());
}
private void Init()
{
PanBack.ScrollToHome();
}
private void Load_OnFinish()
{
// 结果数据化
try
{
var categoryOrder = new[]
{
McVersionCategory.Release,
McVersionCategory.Snapshot,
McVersionCategory.BeforeRelease,
McVersionCategory.AprilFools
};
var dict = categoryOrder.ToDictionary(
category => category,
_ => new List<JsonObject>()
);
var versions = (JsonArray)ModDownload.dlClientListLoader.output.Value["versions"];
foreach (JsonObject Version in versions)
{
var cat = McVersionClassifier.ClassifyVersion(Version);
dict[cat].Add(Version);
}
foreach (var category in categoryOrder)
dict[category] = dict[category]
.OrderByDescending(McVersionClassifier.GetReleaseTime)
.ToList();
PanMain.Children.Clear();
var cardInfo = new MyCard { Title = Lang.Text("Download.Version.Latest.Title"), Margin = new Thickness(0d, 0d, 0d, 15d) };
var topestVersions = new List<JsonObject>();
var release = (JsonObject)dict[McVersionCategory.Release][0].DeepClone();
release["lore"] = Lang.Text("Download.Version.Latest.Release", Lang.Date(McVersionClassifier.GetReleaseTime(release), "g"));
topestVersions.Add(release);
if (McVersionClassifier.GetReleaseTime(dict[McVersionCategory.Release][0]) < McVersionClassifier.GetReleaseTime(dict[McVersionCategory.Snapshot][0]))
{
var snapshot = (JsonObject)dict[McVersionCategory.Snapshot][0].DeepClone();
snapshot["lore"] = Lang.Text("Download.Version.Latest.Development",
Lang.Date(McVersionClassifier.GetReleaseTime(snapshot), "g"));
topestVersions.Add(snapshot);
}
var panInfo = new StackPanel
{
Margin = new Thickness(20d, MyCard.SwapedHeight, 18d, 0d), VerticalAlignment = VerticalAlignment.Top,
RenderTransform = new TranslateTransform(0d, 0d), Tag = topestVersions
};
void PutMethod(StackPanel stack)
{
foreach (var item in (IEnumerable)stack.Tag)
stack.Children.Add(ModDownloadLib.McDownloadListItem((JsonObject)item,
ModDownloadLib.McDownloadMenuSave, true));
}
;
MyCard.StackInstall(ref panInfo, PutMethod);
cardInfo.Children.Add(panInfo);
PanMain.Children.Add(cardInfo);
foreach (var Pair in dict)
{
if (!Pair.Value.Any())
continue;
var newCard = new MyCard
{ Title = McVersionClassifier.GetCategoryDisplayName(Pair.Key) + " (" + Pair.Value.Count + ")", Margin = new Thickness(0d, 0d, 0d, 15d) };
var newStack = new StackPanel
{
Margin = new Thickness(20d, MyCard.SwapedHeight, 18d, 0d),
VerticalAlignment = VerticalAlignment.Top, RenderTransform = new TranslateTransform(0d, 0d),
Tag = Pair.Value
};
newCard.Children.Add(newStack);
newCard.SwapControl = newStack;
newCard.InstallMethod = PutMethod;
newCard.IsSwapped = true;
PanMain.Children.Add(newCard);
}
}
catch (Exception ex)
{
ModBase.Log(
ex,
"可视化 MC 版本列表出错",
ModBase.LogLevel.Feedback,
userSummary: Lang.Text("Download.Error.OperationFailed"));
}
}
}