- ShrinkModComponentDiscovery.Discover 公开:只发现、不执行生命周期 - ShrinkModLoader.LoadComposed / ShrinkModCordisRuntime.ApplyComposedAsync:宿主提供元数据组合加载,支持纯数据包与 IShrinkModWrapper 公开真实实例 - 公开 TryAttachEventBusInstance,随生命周期逆操作释放 - 依赖新增 VersionRange(Maven/Forge 区间语法)与 Ordering(Before/After) - AssemblyResolvePolicy 可限制跨模组程序集解析
48 lines
1.5 KiB
C#
48 lines
1.5 KiB
C#
using System;
|
|
|
|
namespace ShrinkModFramework
|
|
{
|
|
internal static class ShrinkVersionUtility
|
|
{
|
|
public static int Compare(string left, string right)
|
|
{
|
|
if (ReferenceEquals(left, right)) return 0;
|
|
if (left == null) return -1;
|
|
if (right == null) return 1;
|
|
|
|
var leftParts = left.Split('.');
|
|
var rightParts = right.Split('.');
|
|
var max = Math.Max(leftParts.Length, rightParts.Length);
|
|
|
|
for (var i = 0; i < max; i++)
|
|
{
|
|
var leftValue = i < leftParts.Length ? ParseSegment(leftParts[i]) : 0;
|
|
var rightValue = i < rightParts.Length ? ParseSegment(rightParts[i]) : 0;
|
|
|
|
if (leftValue != rightValue)
|
|
return leftValue.CompareTo(rightValue);
|
|
}
|
|
|
|
if (System.Text.RegularExpressions.Regex.IsMatch(left, @"^[0-9]+(?:[.][0-9]+)*$") &&
|
|
System.Text.RegularExpressions.Regex.IsMatch(right, @"^[0-9]+(?:[.][0-9]+)*$")) return 0;
|
|
return string.CompareOrdinal(left, right);
|
|
}
|
|
|
|
private static int ParseSegment(string segment)
|
|
{
|
|
if (string.IsNullOrEmpty(segment))
|
|
return 0;
|
|
|
|
var digits = "";
|
|
for (var i = 0; i < segment.Length; i++)
|
|
{
|
|
if (!char.IsDigit(segment[i]))
|
|
break;
|
|
digits += segment[i];
|
|
}
|
|
|
|
return int.TryParse(digits, out var value) ? value : 0;
|
|
}
|
|
}
|
|
}
|