From 69b371879d3cdd4ccfde2675e2aa6e9ce3484209 Mon Sep 17 00:00:00 2001 From: DOMI Date: Fri, 13 Feb 2026 13:39:22 +0800 Subject: [PATCH] feat: support fmt version --- .../BedrockLauncher.Core.csproj | 4 +- BedrockLauncher.Core/Utils/ManifestEditor.cs | 4 +- .../VersionJsons/VersionsHelper.cs | 42 +++++++++++++++++++ CoreTest/InstallTest.cs | 24 +++++------ CoreTest/VersionTest.cs | 25 +++++++++++ 5 files changed, 84 insertions(+), 15 deletions(-) create mode 100644 CoreTest/VersionTest.cs diff --git a/BedrockLauncher.Core/BedrockLauncher.Core.csproj b/BedrockLauncher.Core/BedrockLauncher.Core.csproj index d731d6f..4d0dc9a 100644 --- a/BedrockLauncher.Core/BedrockLauncher.Core.csproj +++ b/BedrockLauncher.Core/BedrockLauncher.Core.csproj @@ -20,11 +20,11 @@ true - 2.0.3 + 2.0.4-dev - 2.0.2 + 2.0.4 diff --git a/BedrockLauncher.Core/Utils/ManifestEditor.cs b/BedrockLauncher.Core/Utils/ManifestEditor.cs index 84875ad..8cef8cf 100644 --- a/BedrockLauncher.Core/Utils/ManifestEditor.cs +++ b/BedrockLauncher.Core/Utils/ManifestEditor.cs @@ -7,6 +7,7 @@ using System.Text.RegularExpressions; using System.Xml.Linq; using BedrockLauncher.Core.BackGround; +using BedrockLauncher.Core.VersionJsons; namespace BedrockLauncher.Core.Utils { @@ -47,7 +48,8 @@ public async static Task EditManifest(string directory, string gameName, B XElement application = applications?.Element(ns + "Application"); XElement extenElement = application?.Element(ns + "Extensions"); XElement identElement = package?.Element(ns + "Identity"); - identElement.SetAttributeValue("Version", TimeBasedVersion.GetVersion()); + string version = identElement?.Attribute("Version")?.Value; + identElement.SetAttributeValue("Version",VersionsHelper.GetNextVersion(new Version(version))); extenElement.RemoveAll(); application.SetAttributeValue(desktop4 + "SupportsMultipleInstances", "true"); XElement? xElement = application.Element(uap + "VisualElements"); diff --git a/BedrockLauncher.Core/VersionJsons/VersionsHelper.cs b/BedrockLauncher.Core/VersionJsons/VersionsHelper.cs index cea2dd3..65004bd 100644 --- a/BedrockLauncher.Core/VersionJsons/VersionsHelper.cs +++ b/BedrockLauncher.Core/VersionJsons/VersionsHelper.cs @@ -8,6 +8,48 @@ namespace BedrockLauncher.Core.VersionJsons; public static class VersionsHelper { + private static readonly object _lock = new object(); + public static string GetNextVersion(Version currentVersion) + { + lock (_lock) + { + + long ticks = DateTime.Now.Ticks; + int seed = (int)(ticks & 0xFFFFFFFF) ^ (int)(ticks >> 32) ^ Environment.TickCount; + Random rand = new Random(seed); + int sevenDigitNumber = rand.Next(1_000_000, 10_000_000); + string sevenDigitStr = sevenDigitNumber.ToString(); + + + int[] positions = Enumerable.Range(0, 7).OrderBy(x => rand.Next()).Take(2).ToArray(); + Array.Sort(positions); + int buildSuffix = int.Parse(sevenDigitStr[positions[0]].ToString() + sevenDigitStr[positions[1]]); + + + string originalBuildStr = currentVersion.Build.ToString(); + + string paddedBuild = originalBuildStr.PadRight(5, '0'); + string buildPrefix = paddedBuild.Substring(0, 3); + + + string newBuildStr = buildPrefix + buildSuffix.ToString().PadLeft(2, '0'); + int newBuild = int.Parse(newBuildStr); + + if (newBuild > 65535) newBuild = newBuild % 65535; + if (newBuild == 0) newBuild = 1; + + + var remainingIndices = Enumerable.Range(0, 7).Except(positions).OrderBy(i => i).ToArray(); + string revisionStr = new string(remainingIndices.Select(i => sevenDigitStr[i]).ToArray()); + int revision = int.Parse(revisionStr); + + if (revision > 65535) revision = revision % 65535; + if (revision == 0) revision = 1; + + + return $"{currentVersion.Major}.{currentVersion.Minor}.{newBuild}.{revision}"; + } + } /// /// Asynchronously retrieves and deserializes a build database from the specified HTTP address(e.g. mcappx). /// diff --git a/CoreTest/InstallTest.cs b/CoreTest/InstallTest.cs index d9bc7a9..4cfa086 100644 --- a/CoreTest/InstallTest.cs +++ b/CoreTest/InstallTest.cs @@ -24,19 +24,19 @@ public void Test() }))), Type = MinecraftBuildTypeVersion.UWP, GameTypeVersion = MinecraftGameTypeVersion.Release, - InstallDstFolder = Path.GetFullPath("./Test7"), - GameName = "8899", - FileFullPath = @"D:\Windows11\Download\Microsoft.MinecraftUWP_0.140.1.0_x64__8wekyb3d8bbwe.Appx" + InstallDstFolder = Path.GetFullPath("./Test7829"), + GameName = "88991", + FileFullPath = @"D:\Windows11\Download\Microsoft.MinecraftUWP_1.7.100.0_x64__8wekyb3d8bbwe.Appx" }; - //bedrockCore.InstallPackageAsync(localGamePackageOptions).Wait(); - var launchOptions = new LaunchOptions() - { - GameFolder = Path.GetFullPath("./Test7"), - GameType = MinecraftGameTypeVersion.Release, - MinecraftBuildType = MinecraftBuildTypeVersion.UWP, - }; - var process = bedrockCore.LaunchGameAsync(launchOptions).Result; - Assert.IsNotNull(process); + bedrockCore.InstallPackageAsync(localGamePackageOptions).Wait(); + //var launchOptions = new LaunchOptions() + //{ + // GameFolder = Path.GetFullPath("./Test78"), + // GameType = MinecraftGameTypeVersion.Release, + // MinecraftBuildType = MinecraftBuildTypeVersion.UWP, + //}; + //var process = bedrockCore.LaunchGameAsync(launchOptions).Result; + //Assert.IsNotNull(process); } } } diff --git a/CoreTest/VersionTest.cs b/CoreTest/VersionTest.cs new file mode 100644 index 0000000..9be5655 --- /dev/null +++ b/CoreTest/VersionTest.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Text; +using BedrockLauncher.Core.Utils; + +namespace CoreTest +{ + [TestClass] + public class VersionTest + { + + + [TestMethod] + public void Test() + { + + + for (long i = 0; i < 1000; i++) + { + + Console.WriteLine(VersionHelper.GetNextVersion(new Version("1.21.10006.0"))); + } + } + } +}