From f52edf9e0b267e79f88c492e7d7e34f63744f21c Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sat, 29 Apr 2017 21:46:01 -0400 Subject: fix mod events triggering during game save in Stardew Valley 1.2 --- src/StardewModdingAPI/Context.cs | 3 +++ src/StardewModdingAPI/Framework/SGame.cs | 10 ++++++++++ 2 files changed, 13 insertions(+) (limited to 'src/StardewModdingAPI') 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 /// Whether a player save has been loaded. public static bool IsSaveLoaded => Game1.hasLoadedGame && !string.IsNullOrEmpty(Game1.player.name); + /// Whether the game is currently writing to the save file. + public static bool IsSaving => SaveGame.IsProcessing; + /// Whether the game is currently running the draw loop. 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) { -- cgit