summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/StardewModdingAPI/Context.cs3
-rw-r--r--src/StardewModdingAPI/Framework/SGame.cs10
2 files changed, 13 insertions, 0 deletions
diff --git a/src/StardewModdingAPI/Context.cs b/src/StardewModdingAPI/Context.cs
index d737bd58..415b4aac 100644
--- a/src/StardewModdingAPI/Context.cs
+++ b/src/StardewModdingAPI/Context.cs
@@ -11,6 +11,9 @@ namespace StardewModdingAPI
/// <summary>Whether a player save has been loaded.</summary>
public static bool IsSaveLoaded => Game1.hasLoadedGame && !string.IsNullOrEmpty(Game1.player.name);
+ /// <summary>Whether the game is currently writing to the save file.</summary>
+ public static bool IsSaving => SaveGame.IsProcessing;
+
/// <summary>Whether the game is currently running the draw loop.</summary>
public static bool IsInDrawLoop { get; set; }
}
diff --git a/src/StardewModdingAPI/Framework/SGame.cs b/src/StardewModdingAPI/Framework/SGame.cs
index 7e04c391..fe7d3aa3 100644
--- a/src/StardewModdingAPI/Framework/SGame.cs
+++ b/src/StardewModdingAPI/Framework/SGame.cs
@@ -223,6 +223,16 @@ namespace StardewModdingAPI.Framework
return;
}
+ // While the game is writing to the save file in the background, mods can unexpectedly
+ // fail since they don't have exclusive access to resources (e.g. collection changed
+ // during enumeration errors). To avoid problems, events are not invoked while a save
+ // is in progress.
+ if (Context.IsSaving)
+ {
+ base.Update(gameTime);
+ return;
+ }
+
// raise game loaded
if (this.FirstUpdate)
{