From a9fcbc686d203b20f8e4b127e213b7028b3a9ae1 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Wed, 8 Sep 2021 19:01:40 -0400 Subject: [PATCH 1/9] fix error when loading corrupted translation files --- docs/release-notes.md | 4 ++++ src/SMAPI/Framework/SCore.cs | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/release-notes.md b/docs/release-notes.md index 4e0a9df65..c04ac4e5b 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -1,6 +1,10 @@ ← [README](README.md) # Release notes +## Upcoming release +* For players: + * Fixed crash loading mods if they have corrupted translation files. + ## 3.12.6 Released 03 September 2021 for Stardew Valley 1.5.4 or later. diff --git a/src/SMAPI/Framework/SCore.cs b/src/SMAPI/Framework/SCore.cs index 5913430ef..df6cd1296 100644 --- a/src/SMAPI/Framework/SCore.cs +++ b/src/SMAPI/Framework/SCore.cs @@ -1891,9 +1891,9 @@ private IDictionary> ReadTranslationFiles(st string locale = Path.GetFileNameWithoutExtension(file.Name.ToLower().Trim()); try { - if (!jsonHelper.ReadJsonFileIfExists(file.FullName, out IDictionary data)) + if (!jsonHelper.ReadJsonFileIfExists(file.FullName, out IDictionary data) || data == null) { - errors.Add($"{file.Name} file couldn't be read"); // should never happen, since we're iterating files that exist + errors.Add($"{file.Name} file couldn't be read"); // mainly happens when the file is corrupted or empty continue; } From 4fccaa35709440f98e275f0da3d2b65204b7d6e2 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Mon, 13 Sep 2021 00:01:14 -0400 Subject: [PATCH 2/9] add nullable support in JSON converters --- docs/release-notes.md | 5 ++++- .../Serialization/Converters/SimpleReadOnlyConverter.cs | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/release-notes.md b/docs/release-notes.md index c04ac4e5b..0678f6e12 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -3,7 +3,10 @@ # Release notes ## Upcoming release * For players: - * Fixed crash loading mods if they have corrupted translation files. + * Fixed crash loading mods with corrupted translation files. + +* For mod authors: + * Improved SMAPI's crossplatform read/writing of `Color`, `Point`, `Rectangle`, and `Vector2` in JSON to support nullable fields too. ## 3.12.6 Released 03 September 2021 for Stardew Valley 1.5.4 or later. diff --git a/src/SMAPI.Toolkit/Serialization/Converters/SimpleReadOnlyConverter.cs b/src/SMAPI.Toolkit/Serialization/Converters/SimpleReadOnlyConverter.cs index 549f0c18e..ccc5158b0 100644 --- a/src/SMAPI.Toolkit/Serialization/Converters/SimpleReadOnlyConverter.cs +++ b/src/SMAPI.Toolkit/Serialization/Converters/SimpleReadOnlyConverter.cs @@ -22,7 +22,7 @@ internal abstract class SimpleReadOnlyConverter : JsonConverter /// The object type. public override bool CanConvert(Type objectType) { - return objectType == typeof(T); + return objectType == typeof(T) || Nullable.GetUnderlyingType(objectType) == typeof(T); } /// Writes the JSON representation of the object. @@ -44,10 +44,15 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist string path = reader.Path; switch (reader.TokenType) { + case JsonToken.Null when Nullable.GetUnderlyingType(objectType) != null: + return null; + case JsonToken.StartObject: return this.ReadObject(JObject.Load(reader), path); + case JsonToken.String: return this.ReadString(JToken.Load(reader).Value(), path); + default: throw new SParseException($"Can't parse {typeof(T).Name} from {reader.TokenType} node (path: {reader.Path})."); } From a40ef854f3769a0e5d3c2629de538e272a6fcecf Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Mon, 13 Sep 2021 18:20:36 -0400 Subject: [PATCH 3/9] fix JSON validator line numbers sometimes incorrect --- docs/release-notes.md | 3 +++ .../Controllers/JsonValidatorController.cs | 26 ++++++++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/docs/release-notes.md b/docs/release-notes.md index 0678f6e12..ddd0526b0 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -8,6 +8,9 @@ * For mod authors: * Improved SMAPI's crossplatform read/writing of `Color`, `Point`, `Rectangle`, and `Vector2` in JSON to support nullable fields too. +* For the web UI: + * Fixed JSON validator line numbers sometimes incorrect. + ## 3.12.6 Released 03 September 2021 for Stardew Valley 1.5.4 or later. diff --git a/src/SMAPI.Web/Controllers/JsonValidatorController.cs b/src/SMAPI.Web/Controllers/JsonValidatorController.cs index c77a3036e..e06c12360 100644 --- a/src/SMAPI.Web/Controllers/JsonValidatorController.cs +++ b/src/SMAPI.Web/Controllers/JsonValidatorController.cs @@ -90,21 +90,27 @@ public async Task Index(string schemaName = null, string id = null, // parse JSON JToken parsed; - try { - parsed = JToken.Parse(file.Content, new JsonLoadSettings + // load raw JSON + var settings = new JsonLoadSettings { DuplicatePropertyNameHandling = DuplicatePropertyNameHandling.Error, CommentHandling = CommentHandling.Load - }); - } - catch (JsonReaderException ex) - { - return this.View("Index", result.AddErrors(new JsonValidatorErrorModel(ex.LineNumber, ex.Path, ex.Message, ErrorType.None))); - } + }; + try + { + parsed = JToken.Parse(file.Content, settings); + } + catch (JsonReaderException ex) + { + return this.View("Index", result.AddErrors(new JsonValidatorErrorModel(ex.LineNumber, ex.Path, ex.Message, ErrorType.None))); + } - // format JSON - result.SetContent(parsed.ToString(Formatting.Indented), expiry: file.Expiry, uploadWarning: file.Warning); + // format JSON + string formatted = parsed.ToString(Formatting.Indented); + result.SetContent(formatted, expiry: file.Expiry, uploadWarning: file.Warning); + parsed = JToken.Parse(formatted); // update line number references + } // skip if no schema selected if (schemaName == "none") From f6f4470d955c75531d40a9dc3a353d261c715d4a Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Mon, 13 Sep 2021 18:30:59 -0400 Subject: [PATCH 4/9] enable beta info on the mod compatibility list by default --- docs/release-notes.md | 1 + src/SMAPI.Web/Views/Mods/Index.cshtml | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/release-notes.md b/docs/release-notes.md index ddd0526b0..c706619c5 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -9,6 +9,7 @@ * Improved SMAPI's crossplatform read/writing of `Color`, `Point`, `Rectangle`, and `Vector2` in JSON to support nullable fields too. * For the web UI: + * The mod compatibility list now shows the beta status by default (if any). * Fixed JSON validator line numbers sometimes incorrect. ## 3.12.6 diff --git a/src/SMAPI.Web/Views/Mods/Index.cshtml b/src/SMAPI.Web/Views/Mods/Index.cshtml index 7dcd0718e..5df49afbb 100644 --- a/src/SMAPI.Web/Views/Mods/Index.cshtml +++ b/src/SMAPI.Web/Views/Mods/Index.cshtml @@ -45,7 +45,7 @@ else @if (hasBeta) { -

Note: "@betaLabel" lines are for an unreleased version of SMAPI, not the stable version most players have. If a mod doesn't have that line, the info applies to both versions of SMAPI.

+

Note: "@betaLabel" lines are for the beta version of Stardew Valley, not the stable version most players have. If a mod doesn't have that line, the info applies to both versions.

} @@ -99,7 +99,7 @@ else
-
+
@betaLabel:
From 4a7eb97306c2663ff214cd1c914f910d269ea780 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Mon, 13 Sep 2021 18:48:22 -0400 Subject: [PATCH 5/9] add asset propagation for giftbox texture --- docs/release-notes.md | 1 + src/SMAPI/Metadata/CoreAssetPropagator.cs | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/docs/release-notes.md b/docs/release-notes.md index c706619c5..c51dec392 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -6,6 +6,7 @@ * Fixed crash loading mods with corrupted translation files. * For mod authors: + * Added asset propagation for `LooseSprites\Giftbox`. * Improved SMAPI's crossplatform read/writing of `Color`, `Point`, `Rectangle`, and `Vector2` in JSON to support nullable fields too. * For the web UI: diff --git a/src/SMAPI/Metadata/CoreAssetPropagator.cs b/src/SMAPI/Metadata/CoreAssetPropagator.cs index 708673c3f..35ae26b31 100644 --- a/src/SMAPI/Metadata/CoreAssetPropagator.cs +++ b/src/SMAPI/Metadata/CoreAssetPropagator.cs @@ -414,6 +414,10 @@ static ISet GetWarpSet(GameLocation location) SpriteText.coloredTexture = content.Load(key); return true; + case "loosesprites\\giftbox": // Game1.LoadContent + Game1.giftboxTexture = content.Load(key); + return true; + case "loosesprites\\nightbg": // Game1.LoadContent Game1.nightbg = content.Load(key); return true; From 54a7c1f9bde0f98d9f81aa9dcd7bd4c18e409877 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sat, 18 Sep 2021 11:07:06 -0400 Subject: [PATCH 6/9] add more visible log output for players during early startup --- docs/release-notes.md | 1 + src/SMAPI/Framework/SCore.cs | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/release-notes.md b/docs/release-notes.md index c51dec392..ab1209945 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -3,6 +3,7 @@ # Release notes ## Upcoming release * For players: + * Added more progress updates in the log during startup. * Fixed crash loading mods with corrupted translation files. * For mod authors: diff --git a/src/SMAPI/Framework/SCore.cs b/src/SMAPI/Framework/SCore.cs index df6cd1296..86b692395 100644 --- a/src/SMAPI/Framework/SCore.cs +++ b/src/SMAPI/Framework/SCore.cs @@ -289,7 +289,7 @@ public void RunInteractively() this.UpdateWindowTitles(); // start game - this.Monitor.Log("Starting game...", LogLevel.Debug); + this.Monitor.Log("Waiting for game to launch...", LogLevel.Debug); try { this.IsGameRunning = true; @@ -377,7 +377,7 @@ private void InitializeBeforeFirstAssetLoaded() // load mods { - this.Monitor.Log("Loading mod metadata..."); + this.Monitor.Log("Loading mod metadata...", LogLevel.Debug); ModResolver resolver = new ModResolver(); // log loose files @@ -1487,7 +1487,7 @@ private void VerifyPath(string path) /// Handles access to SMAPI's internal mod metadata list. private void LoadMods(IModMetadata[] mods, JsonHelper jsonHelper, ContentCoordinator contentCore, ModDatabase modDatabase) { - this.Monitor.Log("Loading mods..."); + this.Monitor.Log("Loading mods...", LogLevel.Debug); // load mods IList skippedMods = new List(); @@ -1523,6 +1523,7 @@ private void LoadMods(IModMetadata[] mods, JsonHelper jsonHelper, ContentCoordin this.ReloadTranslations(loaded); // initialize loaded non-content-pack mods + this.Monitor.Log("Launching mods...", LogLevel.Debug); foreach (IModMetadata metadata in loadedMods) { // add interceptors @@ -1572,6 +1573,8 @@ private void LoadMods(IModMetadata[] mods, JsonHelper jsonHelper, ContentCoordin // unlock mod integrations this.ModRegistry.AreAllModsInitialized = true; + + this.Monitor.Log("Mods loaded and ready!", LogLevel.Debug); } /// Raised after a mod adds or removes asset interceptors. From 8a117744608dfff970855defbffb1f40466ab755 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sat, 18 Sep 2021 11:48:20 -0400 Subject: [PATCH 7/9] add simpler error when an asset isn't found --- docs/release-notes.md | 1 + .../ContentManagers/GameContentManager.cs | 44 +++++++++++-------- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/docs/release-notes.md b/docs/release-notes.md index ab1209945..f330c6773 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -4,6 +4,7 @@ ## Upcoming release * For players: * Added more progress updates in the log during startup. + * Simplified common asset load error message. * Fixed crash loading mods with corrupted translation files. * For mod authors: diff --git a/src/SMAPI/Framework/ContentManagers/GameContentManager.cs b/src/SMAPI/Framework/ContentManagers/GameContentManager.cs index 63cd17591..38bcf1534 100644 --- a/src/SMAPI/Framework/ContentManagers/GameContentManager.cs +++ b/src/SMAPI/Framework/ContentManagers/GameContentManager.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Globalization; +using System.IO; using System.Linq; using System.Reflection; using Microsoft.Xna.Framework.Content; @@ -205,28 +206,35 @@ protected override void TrackAsset(string assetName, T value, LanguageCode la /// Derived from . private T RawLoad(string assetName, LanguageCode language, bool useCache) { - // use cached key - if (language == this.Language && this.LocalizedAssetNames.TryGetValue(assetName, out string cachedKey)) - return base.RawLoad(cachedKey, useCache); - - // try translated key - if (language != LocalizedContentManager.LanguageCode.en) + try { - string translatedKey = $"{assetName}.{this.GetLocale(language)}"; - try - { - T obj = base.RawLoad(translatedKey, useCache); - this.LocalizedAssetNames[assetName] = translatedKey; - return obj; - } - catch (ContentLoadException) + // use cached key + if (language == this.Language && this.LocalizedAssetNames.TryGetValue(assetName, out string cachedKey)) + return base.RawLoad(cachedKey, useCache); + + // try translated key + if (language != LocalizedContentManager.LanguageCode.en) { - this.LocalizedAssetNames[assetName] = assetName; + string translatedKey = $"{assetName}.{this.GetLocale(language)}"; + try + { + T obj = base.RawLoad(translatedKey, useCache); + this.LocalizedAssetNames[assetName] = translatedKey; + return obj; + } + catch (ContentLoadException) + { + this.LocalizedAssetNames[assetName] = assetName; + } } - } - // try base asset - return base.RawLoad(assetName, useCache); + // try base asset + return base.RawLoad(assetName, useCache); + } + catch (ContentLoadException ex) when (ex.InnerException is FileNotFoundException innerEx && innerEx.InnerException == null) + { + throw new SContentLoadException($"Error loading \"{assetName}\": it isn't in the Content folder and no mod provided it."); + } } /// Parse an asset key that contains an explicit language into its asset name and language, if applicable. From 6ac5ca090da088e96b0c6508866cebe7eedc439d Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sat, 18 Sep 2021 12:43:31 -0400 Subject: [PATCH 8/9] simplify exception logs --- docs/release-notes.md | 3 +- ...eptionExtensions.cs => ExceptionHelper.cs} | 36 ++++++++++++++++--- src/SMAPI.Internal/SMAPI.Internal.projitems | 2 +- src/SMAPI/Framework/Logging/LogManager.cs | 4 +++ 4 files changed, 39 insertions(+), 6 deletions(-) rename src/SMAPI.Internal/{ExceptionExtensions.cs => ExceptionHelper.cs} (51%) diff --git a/docs/release-notes.md b/docs/release-notes.md index f330c6773..f619623f4 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -4,7 +4,8 @@ ## Upcoming release * For players: * Added more progress updates in the log during startup. - * Simplified common asset load error message. + * Simplified asset load error message. + * Simplified exception logs. * Fixed crash loading mods with corrupted translation files. * For mod authors: diff --git a/src/SMAPI.Internal/ExceptionExtensions.cs b/src/SMAPI.Internal/ExceptionHelper.cs similarity index 51% rename from src/SMAPI.Internal/ExceptionExtensions.cs rename to src/SMAPI.Internal/ExceptionHelper.cs index d81890486..4bc55f95e 100644 --- a/src/SMAPI.Internal/ExceptionExtensions.cs +++ b/src/SMAPI.Internal/ExceptionHelper.cs @@ -1,10 +1,11 @@ using System; using System.Reflection; +using System.Text.RegularExpressions; namespace StardewModdingAPI.Internal { /// Provides extension methods for handling exceptions. - internal static class ExceptionExtensions + internal static class ExceptionHelper { /********* ** Public methods @@ -15,20 +16,26 @@ public static string GetLogSummary(this Exception exception) { try { + string message; switch (exception) { case TypeLoadException ex: - return $"Failed loading type '{ex.TypeName}': {exception}"; + message = $"Failed loading type '{ex.TypeName}': {exception}"; + break; case ReflectionTypeLoadException ex: string summary = ex.ToString(); foreach (Exception childEx in ex.LoaderExceptions ?? new Exception[0]) summary += $"\n\n{childEx?.GetLogSummary()}"; - return summary; + message = summary; + break; default: - return exception?.ToString() ?? $"\n{Environment.StackTrace}"; + message = exception?.ToString() ?? $"\n{Environment.StackTrace}"; + break; } + + return ExceptionHelper.SimplifyExtensionMessage(message); } catch (Exception ex) { @@ -44,5 +51,26 @@ public static Exception GetInnermostException(this Exception exception) exception = exception.InnerException; return exception; } + + /// Simplify common patterns in exception log messages that don't convey useful info. + /// The log message to simplify. + public static string SimplifyExtensionMessage(string message) + { + // remove namespace for core exception types + message = Regex.Replace( + message, + @"(?:StardewModdingAPI\.Framework\.Exceptions|Microsoft\.Xna\.Framework|System|System\.IO)\.([a-zA-Z]+Exception):", + "$1:" + ); + + // remove unneeded root build paths for SMAPI and Stardew Valley + message = message + .Replace(@"C:\source\_Stardew\SMAPI\src\", "") + .Replace(@"C:\GitlabRunner\builds\Gq5qA5P4\0\ConcernedApe\", ""); + + // remove placeholder info in Linux/macOS stack traces + return message + .Replace(@":0", ""); + } } } diff --git a/src/SMAPI.Internal/SMAPI.Internal.projitems b/src/SMAPI.Internal/SMAPI.Internal.projitems index 0ee94a5b7..41d356c0b 100644 --- a/src/SMAPI.Internal/SMAPI.Internal.projitems +++ b/src/SMAPI.Internal/SMAPI.Internal.projitems @@ -14,6 +14,6 @@ - + \ No newline at end of file diff --git a/src/SMAPI/Framework/Logging/LogManager.cs b/src/SMAPI/Framework/Logging/LogManager.cs index 6fe44d980..f28761469 100644 --- a/src/SMAPI/Framework/Logging/LogManager.cs +++ b/src/SMAPI/Framework/Logging/LogManager.cs @@ -406,6 +406,10 @@ private void HandleConsoleMessage(IMonitor gameMonitor, string message) } } + // simplify exception messages + if (level == LogLevel.Error) + message = ExceptionHelper.SimplifyExtensionMessage(message); + // forward to monitor gameMonitor.Log(message, level); } From 6643da4574bec2d71ac9c25a2c9ab15b8c855e2b Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sat, 18 Sep 2021 13:06:50 -0400 Subject: [PATCH 9/9] prepare for release --- build/common.targets | 2 +- docs/release-notes.md | 36 +++++++++++--------- src/SMAPI.Mods.ConsoleCommands/manifest.json | 4 +-- src/SMAPI.Mods.ErrorHandler/manifest.json | 4 +-- src/SMAPI.Mods.SaveBackup/manifest.json | 4 +-- src/SMAPI/Constants.cs | 2 +- 6 files changed, 27 insertions(+), 25 deletions(-) diff --git a/build/common.targets b/build/common.targets index 5eb699018..1f6cf0b66 100644 --- a/build/common.targets +++ b/build/common.targets @@ -1,7 +1,7 @@ - 3.12.6 + 3.12.7 SMAPI latest $(AssemblySearchPaths);{GAC} diff --git a/docs/release-notes.md b/docs/release-notes.md index f619623f4..8ed155bd9 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -1,7 +1,9 @@ ← [README](README.md) # Release notes -## Upcoming release +## 3.12.7 +Released 18 September 2021 for Stardew Valley 1.5.4. + * For players: * Added more progress updates in the log during startup. * Simplified asset load error message. @@ -17,7 +19,7 @@ * Fixed JSON validator line numbers sometimes incorrect. ## 3.12.6 -Released 03 September 2021 for Stardew Valley 1.5.4 or later. +Released 03 September 2021 for Stardew Valley 1.5.4. * For players: * Added friendly error when using SMAPI 3.2._x_ with Stardew Valley 1.5.5 or later. @@ -41,18 +43,18 @@ to format asset names, you should switch to `PathUtilities.NormalizeAssetName` n continue working in the next game update. ## 3.12.5 -Released 26 August 2021 for Stardew Valley 1.5.4 or later. +Released 26 August 2021 for Stardew Valley 1.5.4. * Fixed some mods in unofficial 64-bit mode no longer loading after SMAPI 3.12.3. ## 3.12.4 -Released 25 August 2021 for Stardew Valley 1.5.4 or later. +Released 25 August 2021 for Stardew Valley 1.5.4. * For players: * Fixed error loading some mods in SMAPI 3.12.3. ## 3.12.3 -Released 25 August 2021 for Stardew Valley 1.5.4 or later. +Released 25 August 2021 for Stardew Valley 1.5.4. * For players: * Added friendly error in 64-bit mode when a mod is 32-bit only. @@ -71,7 +73,7 @@ Released 25 August 2021 for Stardew Valley 1.5.4 or later. * Fixed update checks shown for prerelease mod versions if you have a working non-prerelease version. ## 3.12.2 -Released 05 August 2021 for Stardew Valley 1.5.4 or later. +Released 05 August 2021 for Stardew Valley 1.5.4. * For players: * Fixed error creating a new save or joining a multiplayer world in 3.12.1. @@ -82,7 +84,7 @@ Released 05 August 2021 for Stardew Valley 1.5.4 or later. * Fixed `NullReferenceException` in SMAPI's error-handling when trying to handle an invalid `ReflectionTypeLoadException`. ## 3.12.1 -Released 03 August 2021 for Stardew Valley 1.5.4 or later. +Released 03 August 2021 for Stardew Valley 1.5.4. * For players: * The software conflict message is now shown as a warning to simplify troubleshooting. @@ -93,7 +95,7 @@ Released 03 August 2021 for Stardew Valley 1.5.4 or later. * Fixed `Constants.Save*` fields incorrect if the save's folder name and ID don't match. ## 3.12.0 -Released 01 August 2021 for Stardew Valley 1.5.4 or later. See [release highlights](https://www.patreon.com/posts/54388616). +Released 01 August 2021 for Stardew Valley 1.5.4. See [release highlights](https://www.patreon.com/posts/54388616). * For players: * Added save recovery when content mods leave null objects in the save (in _Error Handler_). @@ -111,7 +113,7 @@ Released 01 August 2021 for Stardew Valley 1.5.4 or later. See [release highligh * Fixed reloading a map not correctly reapplying interior doors. ## 3.11.0 -Released 09 July 2021 for Stardew Valley 1.5.4 or later. See [release highlights](https://www.patreon.com/posts/53514295). +Released 09 July 2021 for Stardew Valley 1.5.4. See [release highlights](https://www.patreon.com/posts/53514295). * For players: * Updated for Stardew Valley 1.4.5 multiplayer hotfix on Linux/macOS. @@ -135,13 +137,13 @@ Released 09 July 2021 for Stardew Valley 1.5.4 or later. See [release highlights * Fixed JSON schema for `i18n` files requiring the wrong value for the `$schema` field. ## 3.10.1 -Released 03 May 2021 for Stardew Valley 1.5.4 or later. +Released 03 May 2021 for Stardew Valley 1.5.4. * For players: * Fixed installer leaving an unneeded `StardewModdingAPI-x64.exe` file in 32-bit game folders. ## 3.10 -Released 03 May 2021 for Stardew Valley 1.5.4 or later. See [release highlights](https://www.patreon.com/posts/50764911). +Released 03 May 2021 for Stardew Valley 1.5.4. See [release highlights](https://www.patreon.com/posts/50764911). * For players: * Added full support for the [unofficial 64-bit Stardew Valley patch](https://stardewvalleywiki.com/Modding:Migrate_to_64-bit_on_Windows), which removes memory limits. The installer detects which version of SMAPI you need, and SMAPI shows update alerts for Stardew64Installer if applicable. @@ -166,7 +168,7 @@ Released 03 May 2021 for Stardew Valley 1.5.4 or later. See [release highlights] * Fixed update subkeys not working in file descriptions for Nexus mods marked as adult content. ## 3.9.5 -Released 21 March 2021 for Stardew Valley 1.5.4 or later. +Released 21 March 2021 for Stardew Valley 1.5.4. * For players: * Added console command to reset community center bundles _(in Console Commands)_. @@ -187,13 +189,13 @@ Released 21 March 2021 for Stardew Valley 1.5.4 or later. _Note: mods don't need to handle the difference in most cases, but some players may use MonoGame on Windows in upcoming versions. Mods which check `Constants.TargetPlatform` should review usages as needed._ ## 3.9.4 -Released 07 March 2021 for Stardew Valley 1.5.4 or later. +Released 07 March 2021 for Stardew Valley 1.5.4. * For players: * Fixed installer error if the `Mods` folder doesn't exist in 3.9.3. ## 3.9.3 -Released 07 March 2021 for Stardew Valley 1.5.4 or later. +Released 07 March 2021 for Stardew Valley 1.5.4. * For players: * Added descriptive error if possible when a `PathTooLongException` crashes SMAPI or the installer. @@ -209,7 +211,7 @@ Released 07 March 2021 for Stardew Valley 1.5.4 or later. * Updated the JSON validator/schema for Content Patcher 1.21. ## 3.9.2 -Released 21 February 2021 for Stardew Valley 1.5.4 or later. +Released 21 February 2021 for Stardew Valley 1.5.4. * For players: * Added more aggressive memory optimization to reduce `OutOfMemoryException` errors with some mods. @@ -232,14 +234,14 @@ Released 21 February 2021 for Stardew Valley 1.5.4 or later. * Fixed SMAPI toolkit defaulting the mod type incorrectly if a mod's `manifest.json` has neither `EntryDll` nor `ContentPackFor`. This only affects external tools, since SMAPI itself validates those fields separately. ## 3.9.1 -Released 25 January 2021 for Stardew Valley 1.5.4 or later. +Released 25 January 2021 for Stardew Valley 1.5.4. * For players: * Fixed _tile contains an invalid TileSheet reference_ crash after mods change certain maps. * Fixed _patched game code_ issue shown for the bundled Error Handler mod. ## 3.9 -Released 22 January 2021 for Stardew Valley 1.5.4 or later. See [release highlights](https://www.patreon.com/posts/46553874). +Released 22 January 2021 for Stardew Valley 1.5.4. See [release highlights](https://www.patreon.com/posts/46553874). * For players: * Updated for Stardew Valley 1.5.4. diff --git a/src/SMAPI.Mods.ConsoleCommands/manifest.json b/src/SMAPI.Mods.ConsoleCommands/manifest.json index de223c017..e53bf9913 100644 --- a/src/SMAPI.Mods.ConsoleCommands/manifest.json +++ b/src/SMAPI.Mods.ConsoleCommands/manifest.json @@ -1,9 +1,9 @@ { "Name": "Console Commands", "Author": "SMAPI", - "Version": "3.12.6", + "Version": "3.12.7", "Description": "Adds SMAPI console commands that let you manipulate the game.", "UniqueID": "SMAPI.ConsoleCommands", "EntryDll": "ConsoleCommands.dll", - "MinimumApiVersion": "3.12.6" + "MinimumApiVersion": "3.12.7" } diff --git a/src/SMAPI.Mods.ErrorHandler/manifest.json b/src/SMAPI.Mods.ErrorHandler/manifest.json index fcb6d7eb0..37a7e9bf6 100644 --- a/src/SMAPI.Mods.ErrorHandler/manifest.json +++ b/src/SMAPI.Mods.ErrorHandler/manifest.json @@ -1,9 +1,9 @@ { "Name": "Error Handler", "Author": "SMAPI", - "Version": "3.12.6", + "Version": "3.12.7", "Description": "Handles some common vanilla errors to log more useful info or avoid breaking the game.", "UniqueID": "SMAPI.ErrorHandler", "EntryDll": "ErrorHandler.dll", - "MinimumApiVersion": "3.12.6" + "MinimumApiVersion": "3.12.7" } diff --git a/src/SMAPI.Mods.SaveBackup/manifest.json b/src/SMAPI.Mods.SaveBackup/manifest.json index 1c84b5c2a..28c7ec144 100644 --- a/src/SMAPI.Mods.SaveBackup/manifest.json +++ b/src/SMAPI.Mods.SaveBackup/manifest.json @@ -1,9 +1,9 @@ { "Name": "Save Backup", "Author": "SMAPI", - "Version": "3.12.6", + "Version": "3.12.7", "Description": "Automatically backs up all your saves once per day into its folder.", "UniqueID": "SMAPI.SaveBackup", "EntryDll": "SaveBackup.dll", - "MinimumApiVersion": "3.12.6" + "MinimumApiVersion": "3.12.7" } diff --git a/src/SMAPI/Constants.cs b/src/SMAPI/Constants.cs index d0c693bfb..fbc00d1d5 100644 --- a/src/SMAPI/Constants.cs +++ b/src/SMAPI/Constants.cs @@ -54,7 +54,7 @@ internal static class EarlyConstants internal static int? LogScreenId { get; set; } /// SMAPI's current raw semantic version. - internal static string RawApiVersion = "3.12.6"; + internal static string RawApiVersion = "3.12.7"; } /// Contains SMAPI's constants and assumptions.