feat: 公开宿主组合加载 API、Forge 风格依赖版本区间与加载顺序、程序集解析策略
- ShrinkModComponentDiscovery.Discover 公开:只发现、不执行生命周期 - ShrinkModLoader.LoadComposed / ShrinkModCordisRuntime.ApplyComposedAsync:宿主提供元数据组合加载,支持纯数据包与 IShrinkModWrapper 公开真实实例 - 公开 TryAttachEventBusInstance,随生命周期逆操作释放 - 依赖新增 VersionRange(Maven/Forge 区间语法)与 Ordering(Before/After) - AssemblyResolvePolicy 可限制跨模组程序集解析
This commit is contained in:
1 parent
5398036d3b
commit
d15bf00512
29 files changed
+917
-132
No files matched your search
@@ -23,7 +23,9 @@ namespace ShrinkModFramework
|
||||
LoadOrder = loadOrder;
|
||||
EntryType = entryType;
|
||||
AutoApplyHarmonyPatches = autoApplyHarmonyPatches;
|
||||
Dependencies = dependencies;
|
||||
Dependencies = dependencies == null
|
||||
? Array.Empty<ShrinkModDependency>()
|
||||
: new List<ShrinkModDependency>(dependencies).AsReadOnly();
|
||||
}
|
||||
|
||||
public override string ToString() => $"{DisplayName} ({ModId}@{Version})";
|
||||
@@ -35,20 +37,27 @@ namespace ShrinkModFramework
|
||||
public string ModId { get; }
|
||||
public string MinimumVersion { get; }
|
||||
public bool Optional { get; }
|
||||
public string VersionRange { get; }
|
||||
public ShrinkModDependencyOrdering Ordering { get; }
|
||||
|
||||
public ShrinkModDependency(string modId, string minimumVersion, bool optional)
|
||||
: this(modId, minimumVersion, optional, ShrinkModDependencyOrdering.After, null) { }
|
||||
|
||||
public ShrinkModDependency(string modId, string minimumVersion, bool optional,
|
||||
ShrinkModDependencyOrdering ordering = ShrinkModDependencyOrdering.After, string versionRange = null)
|
||||
{
|
||||
ModId = modId;
|
||||
if (string.IsNullOrWhiteSpace(modId)) throw new ArgumentException("ModId must not be empty.", nameof(modId));
|
||||
if (!Enum.IsDefined(typeof(ShrinkModDependencyOrdering), ordering))
|
||||
throw new ArgumentOutOfRangeException(nameof(ordering));
|
||||
ModId = modId.Trim();
|
||||
MinimumVersion = minimumVersion;
|
||||
Optional = optional;
|
||||
VersionRange = versionRange ?? minimumVersion;
|
||||
Ordering = ordering;
|
||||
ShrinkModVersionRange.Parse(VersionRange);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
if (string.IsNullOrEmpty(MinimumVersion))
|
||||
return Optional ? $"{ModId} (optional)" : ModId;
|
||||
|
||||
return Optional ? $"{ModId} >= {MinimumVersion} (optional)" : $"{ModId} >= {MinimumVersion}";
|
||||
}
|
||||
public override string ToString() =>
|
||||
$"{ModId} {VersionRange ?? "*"} ({Ordering}{(Optional ? ", optional" : "")})";
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user