summaryrefslogtreecommitdiff
path: root/src/StardewModdingAPI/Framework
diff options
context:
space:
mode:
Diffstat (limited to 'src/StardewModdingAPI/Framework')
-rw-r--r--src/StardewModdingAPI/Framework/InternalExtensions.cs16
-rw-r--r--src/StardewModdingAPI/Framework/Monitor.cs9
-rw-r--r--src/StardewModdingAPI/Framework/RequestExitDelegate.cs7
3 files changed, 28 insertions, 4 deletions
diff --git a/src/StardewModdingAPI/Framework/InternalExtensions.cs b/src/StardewModdingAPI/Framework/InternalExtensions.cs
index c4bd2d35..4ca79518 100644
--- a/src/StardewModdingAPI/Framework/InternalExtensions.cs
+++ b/src/StardewModdingAPI/Framework/InternalExtensions.cs
@@ -9,8 +9,22 @@ namespace StardewModdingAPI.Framework
internal static class InternalExtensions
{
/*********
+ ** Properties
+ *********/
+ /// <summary>Tracks the installed mods.</summary>
+ private static ModRegistry ModRegistry;
+
+
+ /*********
** Public methods
*********/
+ /// <summary>Injects types required for backwards compatibility.</summary>
+ /// <param name="modRegistry">Tracks the installed mods.</param>
+ internal static void Shim(ModRegistry modRegistry)
+ {
+ InternalExtensions.ModRegistry = modRegistry;
+ }
+
/****
** IMonitor
****/
@@ -103,7 +117,7 @@ namespace StardewModdingAPI.Framework
foreach (Delegate handler in handlers)
{
- string modName = Program.ModRegistry.GetModFrom(handler) ?? "an unknown mod"; // suppress stack trace for unknown mods, not helpful here
+ string modName = InternalExtensions.ModRegistry.GetModFrom(handler) ?? "an unknown mod"; // suppress stack trace for unknown mods, not helpful here
deprecationManager.Warn(modName, nounPhrase, version, severity);
}
}
diff --git a/src/StardewModdingAPI/Framework/Monitor.cs b/src/StardewModdingAPI/Framework/Monitor.cs
index c1735917..64075f2f 100644
--- a/src/StardewModdingAPI/Framework/Monitor.cs
+++ b/src/StardewModdingAPI/Framework/Monitor.cs
@@ -34,6 +34,9 @@ namespace StardewModdingAPI.Framework
[LogLevel.Alert] = ConsoleColor.Magenta
};
+ /// <summary>A delegate which requests that SMAPI immediately exit the game. This should only be invoked when an irrecoverable fatal error happens that risks save corruption or game-breaking bugs.</summary>
+ private RequestExitDelegate RequestExit;
+
/*********
** Accessors
@@ -55,7 +58,8 @@ namespace StardewModdingAPI.Framework
/// <param name="source">The name of the module which logs messages using this instance.</param>
/// <param name="consoleManager">Manages access to the console output.</param>
/// <param name="logFile">The log file to which to write messages.</param>
- public Monitor(string source, ConsoleInterceptionManager consoleManager, LogFileManager logFile)
+ /// <param name="requestExitDelegate">A delegate which requests that SMAPI immediately exit the game.</param>
+ public Monitor(string source, ConsoleInterceptionManager consoleManager, LogFileManager logFile, RequestExitDelegate requestExitDelegate)
{
// validate
if (string.IsNullOrWhiteSpace(source))
@@ -81,8 +85,7 @@ namespace StardewModdingAPI.Framework
/// <param name="reason">The reason for the shutdown.</param>
public void ExitGameImmediately(string reason)
{
- Program.ExitGameImmediately(this.Source, reason);
- Program.GameInstance.Exit();
+ this.RequestExit(this.Source, reason);
}
/// <summary>Log a fatal error message.</summary>
diff --git a/src/StardewModdingAPI/Framework/RequestExitDelegate.cs b/src/StardewModdingAPI/Framework/RequestExitDelegate.cs
new file mode 100644
index 00000000..12d0ea0c
--- /dev/null
+++ b/src/StardewModdingAPI/Framework/RequestExitDelegate.cs
@@ -0,0 +1,7 @@
+namespace StardewModdingAPI.Framework
+{
+ /// <summary>A delegate which requests that SMAPI immediately exit the game. This should only be invoked when an irrecoverable fatal error happens that risks save corruption or game-breaking bugs.</summary>
+ /// <param name="module">The module which requested an immediate exit.</param>
+ /// <param name="reason">The reason provided for the shutdown.</param>
+ internal delegate void RequestExitDelegate(string module, string reason);
+} \ No newline at end of file