From 5256b738b486aa1591c6b25b41410973f1feaf46 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Mon, 2 Aug 2021 21:14:22 -0400 Subject: use more reliable method to get save folder name SMAPI now tracks the actual folder name being loaded to avoid edge cases where the folder name doesn't match the save ID. --- src/SMAPI/Patches/SaveGamePatcher.cs | 55 ++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/SMAPI/Patches/SaveGamePatcher.cs (limited to 'src/SMAPI/Patches') diff --git a/src/SMAPI/Patches/SaveGamePatcher.cs b/src/SMAPI/Patches/SaveGamePatcher.cs new file mode 100644 index 00000000..969c514e --- /dev/null +++ b/src/SMAPI/Patches/SaveGamePatcher.cs @@ -0,0 +1,55 @@ +using System; +using System.Diagnostics.CodeAnalysis; +using HarmonyLib; +using StardewModdingAPI.Internal.Patching; +using StardewValley; +using StardewValley.Menus; + +namespace StardewModdingAPI.Patches +{ + /// Harmony patches for which track the last loaded save ID. + /// Patch methods must be static for Harmony to work correctly. See the Harmony documentation before renaming patch arguments. + [SuppressMessage("ReSharper", "InconsistentNaming", Justification = "Argument names are defined by Harmony and methods are named for clarity.")] + [SuppressMessage("ReSharper", "IdentifierTypo", Justification = "Argument names are defined by Harmony and methods are named for clarity.")] + internal class SaveGamePatcher : BasePatcher + { + /********* + ** Fields + *********/ + /// A callback to invoke when a save file is being loaded. + private static Action OnSaveFileReading; + + + /********* + ** Public methods + *********/ + /// Construct an instance. + /// A callback to invoke when a save file is being loaded. + public SaveGamePatcher(Action onSaveFileReading) + { + SaveGamePatcher.OnSaveFileReading = onSaveFileReading; + } + + /// + public override void Apply(Harmony harmony, IMonitor monitor) + { + harmony.Patch( + original: this.RequireMethod(nameof(SaveGame.getLoadEnumerator)), + prefix: this.GetHarmonyMethod(nameof(SaveGamePatcher.Before_GetLoadEnumerator)) + ); + } + + + /********* + ** Private methods + *********/ + /// The method to call before . + /// Returns whether to execute the original method. + /// This method must be static for Harmony to work correctly. See the Harmony documentation before renaming arguments. + private static bool Before_GetLoadEnumerator(string file) + { + SaveGamePatcher.OnSaveFileReading(file); + return true; + } + } +} -- cgit