diff --git a/BedrockLauncher.Core/BedrockLauncher.Core.csproj b/BedrockLauncher.Core/BedrockLauncher.Core.csproj
index 3940f15..4d0dc9a 100644
--- a/BedrockLauncher.Core/BedrockLauncher.Core.csproj
+++ b/BedrockLauncher.Core/BedrockLauncher.Core.csproj
@@ -20,11 +20,11 @@
true
- 2.0.3-dev
+ 2.0.4-dev
- 2.0.3
+ 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")));
+ }
+ }
+ }
+}