From 3e02cf8092da6caf2f7d610720265b846d7c6cc2 Mon Sep 17 00:00:00 2001 From: KlaasWhite <45828001+KlaasWhite@users.noreply.github.com> Date: Sat, 15 Nov 2025 19:47:50 +0100 Subject: [PATCH 1/2] Fix package release --- .github/workflows/release-zip.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/release-zip.yml b/.github/workflows/release-zip.yml index 46b6c20..f4cc563 100644 --- a/.github/workflows/release-zip.yml +++ b/.github/workflows/release-zip.yml @@ -141,5 +141,4 @@ jobs: /p:Version=${{ steps.version.outputs.new }} \ /p:AssemblyVersion=${{ steps.version.outputs.new }} \ /p:FileVersion=${{ steps.version.outputs.new }} - dotnet nuget add source --username "${{ github.actor }}" --password "${{ secrets.GITHUB_TOKEN }}" --store-password-in-clear-text --name github "${{ env.NUGET_SOURCE }}" dotnet nuget push ./nupkg/*.nupkg --source github --api-key "${{ secrets.GITHUB_TOKEN }}" --skip-duplicate From fd45ae1f423bda2571f69686c9cd750d314303ac Mon Sep 17 00:00:00 2001 From: Jeremy Harrington Date: Sat, 25 Jul 2026 20:00:23 -0500 Subject: [PATCH 2/2] Added the ability to switch which directory StarMap looks at for the manifest and mod loading. Also redirects KSA to the new instance folder. --- .../ModRepository/DocumentsPathPatch.cs | 47 +++++++++++++++++++ StarMap.Core/ModRepository/ModLoader.cs | 3 +- StarMap.Loader/Program.cs | 29 +++++++++++- 3 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 StarMap.Core/ModRepository/DocumentsPathPatch.cs diff --git a/StarMap.Core/ModRepository/DocumentsPathPatch.cs b/StarMap.Core/ModRepository/DocumentsPathPatch.cs new file mode 100644 index 0000000..c2a9cfd --- /dev/null +++ b/StarMap.Core/ModRepository/DocumentsPathPatch.cs @@ -0,0 +1,47 @@ +using HarmonyLib; +using KSA; + +namespace StarMap.Core.ModRepository +{ + internal static class DocumentsPathPatch + { + private const string CliFlag = "-InstancePath"; + private const string EnvVarName = "INSTANCE_PATH"; + private const string HarmonyId = "com.starmap.core.documentspathoverride"; + + public static void Apply() + { + // Check if an override path is provided via command-line argument or environment variable + var overridePath = TryGetOverride(); + if (string.IsNullOrEmpty(overridePath)) + return; + + // Apply the Harmony patch to override the DocumentsFolderPath property + var harmony = new Harmony(HarmonyId); + var original = AccessTools.PropertyGetter(typeof(Constants), nameof(Constants.DocumentsFolderPath)); + var prefix = new HarmonyMethod(typeof(DocumentsPathPatch), nameof(Prefix)); + harmony.Patch(original, prefix: prefix); + Console.WriteLine($"StarMap - Using Instance Path: {overridePath}"); + } + + private static bool Prefix(ref string __result) + { + __result = TryGetOverride()!; + return false; + } + + private static string? TryGetOverride() + { + var args = Environment.GetCommandLineArgs(); + for (int i = 0; i < args.Length - 1; i++) + { + if (string.Equals(args[i], CliFlag, StringComparison.OrdinalIgnoreCase)) + { + return args[i + 1]; + } + } + + return Environment.GetEnvironmentVariable(EnvVarName); + } + } +} diff --git a/StarMap.Core/ModRepository/ModLoader.cs b/StarMap.Core/ModRepository/ModLoader.cs index 5c8714d..5c4b326 100644 --- a/StarMap.Core/ModRepository/ModLoader.cs +++ b/StarMap.Core/ModRepository/ModLoader.cs @@ -44,6 +44,7 @@ public ModLoader(AssemblyLoadContext coreAssemblyLoadContext) public void Init() { + DocumentsPathPatch.Apply(); PrepareMods(); } @@ -60,7 +61,7 @@ private void PrepareMods() { if (!mod.Enabled) { - Console.WriteLine($"StarMap - Nod loading mod: {mod.Id} because it is disable in manifest"); + Console.WriteLine($"StarMap - Not loading mod: {mod.Id} because it is disabled in manifest"); continue; } diff --git a/StarMap.Loader/Program.cs b/StarMap.Loader/Program.cs index 63b75c7..a93b2a0 100644 --- a/StarMap.Loader/Program.cs +++ b/StarMap.Loader/Program.cs @@ -8,7 +8,9 @@ internal class Program { static void Main(string[] args) { - if (args.Length < 1) + var (instanceOverrideArgs, remainingArgs) = ExtractInstanceOverride(args); + + if (remainingArgs.Length < 1) { Console.WriteLine("StarMap - Running Starmap in solo mode!"); SoleModeInner(); @@ -17,12 +19,35 @@ static void Main(string[] args) Console.WriteLine("StarMap - Running Starmap in loader mode."); - var pipeName = args[0]; + var pipeName = remainingArgs[0]; Console.WriteLine($"StarMap - Connection to pipe: {pipeName}"); MainInner(pipeName).GetAwaiter().GetResult(); } + private static (string[] instanceOverrideArgs, string[] remainingArgs) ExtractInstanceOverride(string[] args) + { + const string CliFlag = "-InstancePath"; + + var remaining = new List(); + var extracted = new List(); + + for (int i = 0; i < args.Length; i++) + { + if (string.Equals(args[i], CliFlag, StringComparison.OrdinalIgnoreCase) && i + 1 < args.Length) + { + extracted.Add(args[i]); + extracted.Add(args[i + 1]); + i++; // skip the value too + continue; + } + + remaining.Add(args[i]); + } + + return (extracted.ToArray(), remaining.ToArray()); + } + static void SoleModeInner() { var gameConfig = new LoaderConfig();