From 9dd702a16228a245247371866d8074ffc1539ba5 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sun, 26 Mar 2023 18:05:29 -0400 Subject: [PATCH 01/19] embed debug symbols for Linux/macOS compatibility This fixes error stack traces not having line numbers on Linux/macOS. --- build/common.targets | 3 +++ build/deploy-local-smapi.targets | 4 ---- build/unix/prepare-install-package.sh | 5 ++--- build/windows/prepare-install-package.ps1 | 5 ++--- docs/release-notes.md | 4 ++++ src/SMAPI.Installer/InteractiveInstaller.cs | 4 ++-- 6 files changed, 13 insertions(+), 12 deletions(-) diff --git a/build/common.targets b/build/common.targets index 1ead1508..bb13a26a 100644 --- a/build/common.targets +++ b/build/common.targets @@ -14,6 +14,9 @@ repo. It imports the other MSBuild files as needed. $(DefineConstants);SMAPI_DEPRECATED true + + embedded + enable $(NoWarn);CS8632 diff --git a/build/deploy-local-smapi.targets b/build/deploy-local-smapi.targets index 6ea5f0a2..e6c01800 100644 --- a/build/deploy-local-smapi.targets +++ b/build/deploy-local-smapi.targets @@ -18,7 +18,6 @@ This assumes `find-game-folder.targets` has already been imported and validated. - @@ -62,7 +61,6 @@ This assumes `find-game-folder.targets` has already been imported and validated. - @@ -70,12 +68,10 @@ This assumes `find-game-folder.targets` has already been imported and validated. - - diff --git a/build/unix/prepare-install-package.sh b/build/unix/prepare-install-package.sh index 304579b9..3e33c277 100755 --- a/build/unix/prepare-install-package.sh +++ b/build/unix/prepare-install-package.sh @@ -122,7 +122,7 @@ for folder in ${folders[@]}; do fi # bundle root files - for name in "StardewModdingAPI" "StardewModdingAPI.dll" "StardewModdingAPI.pdb" "StardewModdingAPI.xml" "steam_appid.txt"; do + for name in "StardewModdingAPI" "StardewModdingAPI.dll" "StardewModdingAPI.xml" "steam_appid.txt"; do if [ $name == "StardewModdingAPI" ] && [ $folder == "windows" ]; then name="$name.exe" fi @@ -134,7 +134,7 @@ for folder in ${folders[@]}; do cp -r "$smapiBin/i18n" "$bundlePath/smapi-internal" # bundle smapi-internal - for name in "0Harmony.dll" "0Harmony.xml" "Mono.Cecil.dll" "Mono.Cecil.Mdb.dll" "Mono.Cecil.Pdb.dll" "MonoMod.Common.dll" "Newtonsoft.Json.dll" "Pathoschild.Http.Client.dll" "Pintail.dll" "TMXTile.dll" "SMAPI.Toolkit.dll" "SMAPI.Toolkit.pdb" "SMAPI.Toolkit.xml" "SMAPI.Toolkit.CoreInterfaces.dll" "SMAPI.Toolkit.CoreInterfaces.pdb" "SMAPI.Toolkit.CoreInterfaces.xml" "System.Net.Http.Formatting.dll"; do + for name in "0Harmony.dll" "0Harmony.xml" "Mono.Cecil.dll" "Mono.Cecil.Mdb.dll" "Mono.Cecil.Pdb.dll" "MonoMod.Common.dll" "Newtonsoft.Json.dll" "Pathoschild.Http.Client.dll" "Pintail.dll" "TMXTile.dll" "SMAPI.Toolkit.dll" "SMAPI.Toolkit.xml" "SMAPI.Toolkit.CoreInterfaces.dll" "SMAPI.Toolkit.CoreInterfaces.xml" "System.Net.Http.Formatting.dll"; do cp "$smapiBin/$name" "$bundlePath/smapi-internal" done @@ -164,7 +164,6 @@ for folder in ${folders[@]}; do mkdir "$targetPath" --parents cp "$fromPath/$modName.dll" "$targetPath" - cp "$fromPath/$modName.pdb" "$targetPath" cp "$fromPath/manifest.json" "$targetPath" if [ -d "$fromPath/i18n" ]; then cp -r "$fromPath/i18n" "$targetPath" diff --git a/build/windows/prepare-install-package.ps1 b/build/windows/prepare-install-package.ps1 index 71de1154..434d2466 100644 --- a/build/windows/prepare-install-package.ps1 +++ b/build/windows/prepare-install-package.ps1 @@ -142,7 +142,7 @@ foreach ($folder in $folders) { } # bundle root files - foreach ($name in @("StardewModdingAPI", "StardewModdingAPI.dll", "StardewModdingAPI.pdb", "StardewModdingAPI.xml", "steam_appid.txt")) { + foreach ($name in @("StardewModdingAPI", "StardewModdingAPI.dll", "StardewModdingAPI.xml", "steam_appid.txt")) { if ($name -eq "StardewModdingAPI" -and $folder -eq "windows") { $name = "$name.exe" } @@ -154,7 +154,7 @@ foreach ($folder in $folders) { cp -Recurse "$smapiBin/i18n" "$bundlePath/smapi-internal" # bundle smapi-internal - foreach ($name in @("0Harmony.dll", "0Harmony.xml", "Mono.Cecil.dll", "Mono.Cecil.Mdb.dll", "Mono.Cecil.Pdb.dll", "MonoMod.Common.dll", "Newtonsoft.Json.dll", "Pathoschild.Http.Client.dll", "Pintail.dll", "TMXTile.dll", "SMAPI.Toolkit.dll", "SMAPI.Toolkit.pdb", "SMAPI.Toolkit.xml", "SMAPI.Toolkit.CoreInterfaces.dll", "SMAPI.Toolkit.CoreInterfaces.pdb", "SMAPI.Toolkit.CoreInterfaces.xml", "System.Net.Http.Formatting.dll")) { + foreach ($name in @("0Harmony.dll", "0Harmony.xml", "Mono.Cecil.dll", "Mono.Cecil.Mdb.dll", "Mono.Cecil.Pdb.dll", "MonoMod.Common.dll", "Newtonsoft.Json.dll", "Pathoschild.Http.Client.dll", "Pintail.dll", "TMXTile.dll", "SMAPI.Toolkit.dll", "SMAPI.Toolkit.xml", "SMAPI.Toolkit.CoreInterfaces.dll", "SMAPI.Toolkit.CoreInterfaces.xml", "System.Net.Http.Formatting.dll")) { cp "$smapiBin/$name" "$bundlePath/smapi-internal" } @@ -189,7 +189,6 @@ foreach ($folder in $folders) { mkdir "$targetPath" > $null cp "$fromPath/$modName.dll" "$targetPath" - cp "$fromPath/$modName.pdb" "$targetPath" cp "$fromPath/manifest.json" "$targetPath" if (Test-Path "$fromPath/i18n" -PathType Container) { cp -Recurse "$fromPath/i18n" "$targetPath" diff --git a/docs/release-notes.md b/docs/release-notes.md index e99218bd..d091d153 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -7,6 +7,10 @@ _If needed, you can update to SMAPI 3.16.0 first and then install the latest version._ --> +## Upcoming release +* For players: + * Fixed logged SMAPI errors not having line numbers on Linux/macOS. + ## 3.18.3 Released 09 April 2023 for Stardew Valley 1.5.6 or later. diff --git a/src/SMAPI.Installer/InteractiveInstaller.cs b/src/SMAPI.Installer/InteractiveInstaller.cs index d00a5df4..32a4e6e5 100644 --- a/src/SMAPI.Installer/InteractiveInstaller.cs +++ b/src/SMAPI.Installer/InteractiveInstaller.cs @@ -47,8 +47,8 @@ namespace StardewModdingApi.Installer yield return GetInstallPath("StardewModdingAPI.dll"); yield return GetInstallPath("StardewModdingAPI.exe"); yield return GetInstallPath("StardewModdingAPI.exe.config"); - yield return GetInstallPath("StardewModdingAPI.exe.mdb"); // Linux/macOS only - yield return GetInstallPath("StardewModdingAPI.pdb"); // Windows only + yield return GetInstallPath("StardewModdingAPI.exe.mdb"); // before 3.18.4 (Linux/macOS only) + yield return GetInstallPath("StardewModdingAPI.pdb"); // before 3.18.4 (Windows only) yield return GetInstallPath("StardewModdingAPI.runtimeconfig.json"); yield return GetInstallPath("StardewModdingAPI.xml"); yield return GetInstallPath("smapi-internal"); From 445370b75b71ae27a974a6bc746db707653aee8c Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sat, 24 Jun 2023 11:50:05 -0400 Subject: [PATCH 02/19] embed debug symbols for Linux/macOS compatibility in mod build package --- docs/technical/mod-package.md | 3 +++ src/SMAPI.ModBuildConfig/build/smapi.targets | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/technical/mod-package.md b/docs/technical/mod-package.md index ab8a2c95..023ef070 100644 --- a/docs/technical/mod-package.md +++ b/docs/technical/mod-package.md @@ -416,6 +416,9 @@ The NuGet package is generated automatically in `StardewModdingAPI.ModBuildConfi when you compile it. ## Release notes +## Upcoming release +* Replaced `.pdb` files with embedded symbols by default. This fixes logged SMAPI errors not having line numbers on Linux/macOS. + ### 4.1.0 Released 08 January 2023. diff --git a/src/SMAPI.ModBuildConfig/build/smapi.targets b/src/SMAPI.ModBuildConfig/build/smapi.targets index b4fd312e..41b5bc86 100644 --- a/src/SMAPI.ModBuildConfig/build/smapi.targets +++ b/src/SMAPI.ModBuildConfig/build/smapi.targets @@ -8,8 +8,9 @@ ** Set build options **********************************************--> - + true + embedded false From 342b91ff804c682717c25c6908d1033b799445b6 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sat, 22 Apr 2023 11:55:39 -0400 Subject: [PATCH 03/19] add multiplayer player type to window titles --- docs/release-notes.md | 1 + src/SMAPI/Framework/SCore.cs | 17 ++++++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/docs/release-notes.md b/docs/release-notes.md index d091d153..49545d50 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -9,6 +9,7 @@ ## Upcoming release * For players: + * In multiplayer, the game/SMAPI window titles now show whether you're the main player or a farmhand. * Fixed logged SMAPI errors not having line numbers on Linux/macOS. ## 3.18.3 diff --git a/src/SMAPI/Framework/SCore.cs b/src/SMAPI/Framework/SCore.cs index abba7f3b..d16f7248 100644 --- a/src/SMAPI/Framework/SCore.cs +++ b/src/SMAPI/Framework/SCore.cs @@ -852,6 +852,9 @@ namespace StardewModdingAPI.Framework this.Monitor.Log(context); + // add context to window titles + this.UpdateWindowTitles(); + // raise events this.OnLoadStageChanged(LoadStage.Ready); events.SaveLoaded.RaiseEmpty(); @@ -1203,6 +1206,7 @@ namespace StardewModdingAPI.Framework case LoadStage.None: this.JustReturnedToTitle = true; + this.UpdateWindowTitles(); break; case LoadStage.Loaded: @@ -1450,15 +1454,14 @@ namespace StardewModdingAPI.Framework string consoleTitle = $"SMAPI {Constants.ApiVersion} - running Stardew Valley {Constants.GameVersion}"; string gameTitle = $"Stardew Valley {Constants.GameVersion} - running SMAPI {Constants.ApiVersion}"; + string suffix = ""; if (this.ModRegistry.AreAllModsLoaded) - { - int modsLoaded = this.ModRegistry.GetAll().Count(); - consoleTitle += $" with {modsLoaded} mods"; - gameTitle += $" with {modsLoaded} mods"; - } + suffix += $" with {this.ModRegistry.GetAll().Count()} mods"; + if (Context.IsMultiplayer) + suffix += $" [{(Context.IsMainPlayer ? "main player" : "farmhand")}]"; - this.Game.Window.Title = gameTitle; - this.LogManager.SetConsoleTitle(consoleTitle); + this.Game.Window.Title = gameTitle + suffix; + this.LogManager.SetConsoleTitle(consoleTitle + suffix); } /// Log a warning if software known to cause issues is installed. From 76a0497684c9773d1e27f7c88e17bdaaeb9bde39 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sun, 30 Apr 2023 13:41:43 -0400 Subject: [PATCH 04/19] fix ModFolder not being JSON-serializable --- docs/release-notes.md | 3 ++ .../Framework/ModScanning/ModFolder.cs | 35 +++++++++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/docs/release-notes.md b/docs/release-notes.md index 49545d50..0b0a37d8 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -12,6 +12,9 @@ * In multiplayer, the game/SMAPI window titles now show whether you're the main player or a farmhand. * Fixed logged SMAPI errors not having line numbers on Linux/macOS. +* For SMAPI toolkit users: + * Fixed `ModFolder` not being JSON-serializable. + ## 3.18.3 Released 09 April 2023 for Stardew Valley 1.5.6 or later. diff --git a/src/SMAPI.Toolkit/Framework/ModScanning/ModFolder.cs b/src/SMAPI.Toolkit/Framework/ModScanning/ModFolder.cs index da2a3c85..106e3622 100644 --- a/src/SMAPI.Toolkit/Framework/ModScanning/ModFolder.cs +++ b/src/SMAPI.Toolkit/Framework/ModScanning/ModFolder.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using Newtonsoft.Json; using StardewModdingAPI.Toolkit.Serialization.Models; using StardewModdingAPI.Toolkit.Utilities; @@ -9,14 +10,25 @@ namespace StardewModdingAPI.Toolkit.Framework.ModScanning /// The info about a mod read from its folder. public class ModFolder { + /********* + ** Fields + *********/ + /// The backing field for . + private DirectoryInfo? DirectoryImpl; + + /********* ** Accessors *********/ /// A suggested display name for the mod folder. public string DisplayName { get; } + /// The folder path containing the mod's manifest.json. + public string DirectoryPath { get; } + /// The folder containing the mod's manifest.json. - public DirectoryInfo Directory { get; } + [JsonIgnore] + public DirectoryInfo Directory => this.DirectoryImpl ??= new DirectoryInfo(this.DirectoryPath); /// The mod type. public ModType Type { get; } @@ -52,7 +64,8 @@ namespace StardewModdingAPI.Toolkit.Framework.ModScanning public ModFolder(DirectoryInfo root, DirectoryInfo directory, ModType type, Manifest? manifest, ModParseError manifestParseError, string? manifestParseErrorText) { // save info - this.Directory = directory; + this.DirectoryImpl = directory; + this.DirectoryPath = directory.FullName; this.Type = type; this.Manifest = manifest; this.ManifestParseError = manifestParseError; @@ -64,6 +77,24 @@ namespace StardewModdingAPI.Toolkit.Framework.ModScanning : PathUtilities.GetRelativePath(root.FullName, directory.FullName); } + /// Construct an instance. + /// A suggested display name for the mod folder. + /// The folder path containing the mod's manifest.json. + /// The mod type. + /// The mod manifest. + /// The error which occurred parsing the manifest, if any. + /// A human-readable message for the , if any. + [JsonConstructor] + public ModFolder(string displayName, string directoryPath, ModType type, Manifest? manifest, ModParseError manifestParseError, string? manifestParseErrorText) + { + this.DisplayName = displayName; + this.DirectoryPath = directoryPath; + this.Type = type; + this.Manifest = manifest; + this.ManifestParseError = manifestParseError; + this.ManifestParseErrorText = manifestParseErrorText; + } + /// Get the update keys for a mod. /// The mod manifest. public IEnumerable GetUpdateKeys(Manifest manifest) From 5d2afc0aa4eabe6afc7ee24f4ee4e044aea24d6e Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sun, 30 Apr 2023 13:43:23 -0400 Subject: [PATCH 05/19] fix error deserializing null semantic version --- docs/release-notes.md | 5 ++++- .../Serialization/Converters/SemanticVersionConverter.cs | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/release-notes.md b/docs/release-notes.md index 0b0a37d8..c957484a 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -12,6 +12,9 @@ * In multiplayer, the game/SMAPI window titles now show whether you're the main player or a farmhand. * Fixed logged SMAPI errors not having line numbers on Linux/macOS. +* For mod authors: + * Fixed error loading a mod if it sets `"MinimumApiVersion": null` explicitly. + * For SMAPI toolkit users: * Fixed `ModFolder` not being JSON-serializable. @@ -23,7 +26,7 @@ Released 09 April 2023 for Stardew Valley 1.5.6 or later. * Fixed installer error for some Linux players due to a non-portable shebang (thanks to freyacoded!). * Fixed error using load order overrides when there are broken mods installed (thanks to atravita!). * Removed `LargeAddressAware` flag on SMAPI (no longer needed since it's 64-bit now). - * Improved translations. Thganks to stylemate (updated Korean)! + * Improved translations. Thanks to stylemate (updated Korean)! * For mod authors: * Added `IsActiveForScreen()` method to `PerScreen`. diff --git a/src/SMAPI.Toolkit/Serialization/Converters/SemanticVersionConverter.cs b/src/SMAPI.Toolkit/Serialization/Converters/SemanticVersionConverter.cs index 913d54e0..650815b5 100644 --- a/src/SMAPI.Toolkit/Serialization/Converters/SemanticVersionConverter.cs +++ b/src/SMAPI.Toolkit/Serialization/Converters/SemanticVersionConverter.cs @@ -44,6 +44,9 @@ namespace StardewModdingAPI.Toolkit.Serialization.Converters string path = reader.Path; switch (reader.TokenType) { + case JsonToken.Null: + return null; + case JsonToken.StartObject: return this.ReadObject(JObject.Load(reader)); From 3c46bdaeb3e9b484f9f93754e74fe4b30c2d7eaf Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sun, 14 May 2023 16:10:59 -0400 Subject: [PATCH 06/19] fix install error if a game folder has an invalid symlink --- docs/release-notes.md | 1 + src/SMAPI.Toolkit/Framework/GameScanning/GameScanner.cs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/release-notes.md b/docs/release-notes.md index c957484a..34090bf8 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -11,6 +11,7 @@ * For players: * In multiplayer, the game/SMAPI window titles now show whether you're the main player or a farmhand. * Fixed logged SMAPI errors not having line numbers on Linux/macOS. + * Fixed install error if a game folder has an invalid symlink. * For mod authors: * Fixed error loading a mod if it sets `"MinimumApiVersion": null` explicitly. diff --git a/src/SMAPI.Toolkit/Framework/GameScanning/GameScanner.cs b/src/SMAPI.Toolkit/Framework/GameScanning/GameScanner.cs index 88142805..45f3e203 100644 --- a/src/SMAPI.Toolkit/Framework/GameScanning/GameScanner.cs +++ b/src/SMAPI.Toolkit/Framework/GameScanning/GameScanner.cs @@ -73,7 +73,7 @@ namespace StardewModdingAPI.Toolkit.Framework.GameScanning return GameFolderType.NoGameFound; // apparently valid - if (dir.EnumerateFiles("Stardew Valley.dll").Any()) + if (File.Exists(Path.Combine(dir.FullName, "Stardew Valley.dll"))) return GameFolderType.Valid; // doesn't contain any version of Stardew Valley From 2f1f274b2dbc41e41098bed384b0014cfa62e756 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Fri, 16 Jun 2023 22:38:08 -0400 Subject: [PATCH 07/19] fix Context.HasRemotePlayers being true when there's no farmhands --- docs/release-notes.md | 1 + src/SMAPI/Context.cs | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/release-notes.md b/docs/release-notes.md index 34090bf8..832feb92 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -14,6 +14,7 @@ * Fixed install error if a game folder has an invalid symlink. * For mod authors: + * Fixed `Context.HasRemotePlayers` being true when there's no farmhands connected. * Fixed error loading a mod if it sets `"MinimumApiVersion": null` explicitly. * For SMAPI toolkit users: diff --git a/src/SMAPI/Context.cs b/src/SMAPI/Context.cs index 978459e8..3e3ee784 100644 --- a/src/SMAPI/Context.cs +++ b/src/SMAPI/Context.cs @@ -88,7 +88,7 @@ namespace StardewModdingAPI public static bool IsSplitScreen => LocalMultiplayer.IsLocalMultiplayer(); /// Whether there are players connected over the network. - public static bool HasRemotePlayers => Context.IsMultiplayer && !Game1.hasLocalClientsOnly; + public static bool HasRemotePlayers => Context.IsMultiplayer && !Game1.hasLocalClientsOnly && Game1.getOnlineFarmers().Count > 1; /// Whether the current player is the main player. This is always true in single-player, and true when hosting in multiplayer. public static bool IsMainPlayer => Game1.IsMasterGame && Context.ScreenId == 0 && TitleMenu.subMenu is not FarmhandMenu; @@ -97,8 +97,7 @@ namespace StardewModdingAPI /********* ** Public methods *********/ - /// Get whether a screen ID is still active. - /// The screen ID. + /// Get whether a screen ID is still active. The screen ID. public static bool HasScreenId(int id) { return Context.ActiveScreenIds.Contains(id); From 251d83472cd15982b150a1c58ec7b960d6a35e60 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sat, 24 Jun 2023 12:01:49 -0400 Subject: [PATCH 08/19] update dependencies --- docs/release-notes.md | 1 + .../SMAPI.ModBuildConfig.Analyzer.Tests.csproj | 4 ++-- .../SMAPI.ModBuildConfig.csproj | 2 +- src/SMAPI.Tests/SMAPI.Tests.csproj | 8 ++++---- src/SMAPI.Toolkit/SMAPI.Toolkit.csproj | 4 ++-- src/SMAPI.Web/SMAPI.Web.csproj | 14 +++++++------- src/SMAPI/SMAPI.csproj | 4 ++-- 7 files changed, 19 insertions(+), 18 deletions(-) diff --git a/docs/release-notes.md b/docs/release-notes.md index 832feb92..449e3791 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -16,6 +16,7 @@ * For mod authors: * Fixed `Context.HasRemotePlayers` being true when there's no farmhands connected. * Fixed error loading a mod if it sets `"MinimumApiVersion": null` explicitly. + * Updated Newtonsoft.Json 13.0.2 → 13.0.3 (see [changes](https://github.com/JamesNK/Newtonsoft.Json/releases/tag/13.0.3)) and Pintail 2.2.2 → 2.3.0 (see [changes](https://github.com/Nanoray-pl/Pintail/blob/master/docs/release-notes.md#230)). * For SMAPI toolkit users: * Fixed `ModFolder` not being JSON-serializable. diff --git a/src/SMAPI.ModBuildConfig.Analyzer.Tests/SMAPI.ModBuildConfig.Analyzer.Tests.csproj b/src/SMAPI.ModBuildConfig.Analyzer.Tests/SMAPI.ModBuildConfig.Analyzer.Tests.csproj index 1719d39b..454f2ecf 100644 --- a/src/SMAPI.ModBuildConfig.Analyzer.Tests/SMAPI.ModBuildConfig.Analyzer.Tests.csproj +++ b/src/SMAPI.ModBuildConfig.Analyzer.Tests/SMAPI.ModBuildConfig.Analyzer.Tests.csproj @@ -6,9 +6,9 @@ - + - + diff --git a/src/SMAPI.ModBuildConfig/SMAPI.ModBuildConfig.csproj b/src/SMAPI.ModBuildConfig/SMAPI.ModBuildConfig.csproj index badabfc7..6d9a0d9e 100644 --- a/src/SMAPI.ModBuildConfig/SMAPI.ModBuildConfig.csproj +++ b/src/SMAPI.ModBuildConfig/SMAPI.ModBuildConfig.csproj @@ -24,7 +24,7 @@ - + - 3.18.3 + 3.18.4 SMAPI latest $(AssemblySearchPaths);{GAC} diff --git a/docs/release-notes.md b/docs/release-notes.md index 3aca6f9b..40392ce5 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -7,20 +7,22 @@ _If needed, you can update to SMAPI 3.16.0 first and then install the latest version._ --> -## Upcoming release +## 3.18.4 +Released 24 June 2023 for Stardew Valley 1.5.6 or later. + * For players: * In multiplayer, the game/SMAPI window titles now show whether you're the main player or a farmhand. - * The `test_input` console command now logs player input until the command is run again, instead of only 30 seconds. - * Fixed wezterm terminal support on Linux/macoS (thanks to romangraef!). + * The `test_input` console command now logs input until the command is run again (instead of for 30 seconds). * Fixed logged SMAPI errors not having line numbers on Linux/macOS. + * Fixed wezterm terminal support on Linux/macoS (thanks to romangraef!). * Fixed install error if a game folder has an invalid symlink. * For mod authors: - * Added `--no-prompt` command-line argument for the installer, to better support running it automatically (thanks to NyCodeGHG!). + * Added `--no-prompt` installer command-line argument for automated tools (thanks to NyCodeGHG!). * Added clearer error message when a map tilesheet has no image source (thanks to atravita!). * Fixed `Context.HasRemotePlayers` being true when there's no farmhands connected. - * Fixed error loading a mod if it sets `"MinimumApiVersion": null` explicitly. - * Updated Newtonsoft.Json 13.0.2 → 13.0.3 (see [changes](https://github.com/JamesNK/Newtonsoft.Json/releases/tag/13.0.3)) and Pintail 2.2.2 → 2.3.0 (see [changes](https://github.com/Nanoray-pl/Pintail/blob/master/docs/release-notes.md#230)). + * Fixed error loading a mod if it explicitly sets `"MinimumApiVersion": null`. + * Updated Newtonsoft.Json 13.0.2 → 13.0.3 (see [changes](https://github.com/JamesNK/Newtonsoft.Json/releases/tag/13.0.3)) and Pintail 2.2.2 → 2.3.0 (see [changes](https://github.com/Nanoray-pl/Pintail/blob/master/docs/release-notes.md#230)). * For SMAPI toolkit users: * Fixed `ModFolder` not being JSON-serializable. diff --git a/docs/technical/mod-package.md b/docs/technical/mod-package.md index 023ef070..20e8c834 100644 --- a/docs/technical/mod-package.md +++ b/docs/technical/mod-package.md @@ -416,31 +416,33 @@ The NuGet package is generated automatically in `StardewModdingAPI.ModBuildConfi when you compile it. ## Release notes -## Upcoming release -* Replaced `.pdb` files with embedded symbols by default. This fixes logged SMAPI errors not having line numbers on Linux/macOS. +## 4.1.1 +Released 24 June 2023 for SMAPI 3.13.0 or later. + +* Replaced `.pdb` files with embedded symbols by default. This fixes logged errors not having line numbers on Linux/macOS. ### 4.1.0 -Released 08 January 2023. +Released 08 January 2023 for SMAPI 3.13.0 or later. * Added `manifest.json` format validation on build (thanks to tylergibbs2!). * Fixed game DLLs not excluded from the release zip when they're referenced explicitly but `BundleExtraAssemblies` isn't set. ### 4.0.2 -Released 09 October 2022. +Released 09 October 2022 for SMAPI 3.13.0 or later. * Switched to the newer crossplatform `portable` debug symbols (thanks to lanturnalis!). * Fixed `BundleExtraAssemblies` option being partly case-sensitive. * Fixed `BundleExtraAssemblies` not applying `All` value to game assemblies. ### 4.0.1 -Released 14 April 2022. +Released 14 April 2022 for SMAPI 3.13.0 or later. * Added detection for Xbox app game folders. * Fixed "_conflicts between different versions of Microsoft.Win32.Registry_" warnings in recent SMAPI versions. * Internal refactoring. ### 4.0.0 -Released 30 November 2021. +Released 30 November 2021 for SMAPI 3.13.0 or later. * Updated for Stardew Valley 1.5.5 and SMAPI 3.13.0. (Older versions are no longer supported.) * Added `IgnoreModFilePaths` option to ignore literal paths. @@ -462,7 +464,7 @@ Released 30 November 2021. documentation](#configure). ### 3.3.0 -Released 30 March 2021. +Released 30 March 2021 for SMAPI 3.0.0 or later. * Added a build warning when the mod isn't compiled for `Any CPU`. * Added a `GameFramework` build property set to `MonoGame` or `Xna` based on the platform. This can @@ -471,32 +473,32 @@ Released 30 March 2021. * The package now suppresses the misleading 'processor architecture mismatch' warnings. ### 3.2.2 -Released 23 September 2020. +Released 23 September 2020 for SMAPI 3.0.0 or later. * Reworked and streamlined how the package is compiled. * Added [SMAPI-ModTranslationClassBuilder](https://github.com/Pathoschild/SMAPI-ModTranslationClassBuilder) files to the ignore list. ### 3.2.1 -Released 11 September 2020. +Released 11 September 2020 for SMAPI 3.0.0 or later. * Added more detailed logging. * Fixed _path's format is not supported_ error when using default `Mods` path in 3.2. ### 3.2.0 -Released 07 September 2020. +Released 07 September 2020 for SMAPI 3.0.0 or later. * Added option to change `Mods` folder path. * Rewrote documentation to make it easier to read. ### 3.1.0 -Released 01 February 2020. +Released 01 February 2020 for SMAPI 3.0.0 or later. * Added support for semantic versioning 2.0. * `0Harmony.dll` is now ignored if the mod references Harmony directly (it's bundled with SMAPI). ### 3.0.0 -Released 26 November 2019. +Released 26 November 2019 for SMAPI 3.0.0 or later. * Updated for SMAPI 3.0 and Stardew Valley 1.4. * Added automatic support for `assets` folders. diff --git a/src/SMAPI.ModBuildConfig/SMAPI.ModBuildConfig.csproj b/src/SMAPI.ModBuildConfig/SMAPI.ModBuildConfig.csproj index 6d9a0d9e..2e97d53f 100644 --- a/src/SMAPI.ModBuildConfig/SMAPI.ModBuildConfig.csproj +++ b/src/SMAPI.ModBuildConfig/SMAPI.ModBuildConfig.csproj @@ -10,7 +10,7 @@ Pathoschild.Stardew.ModBuildConfig Build package for SMAPI mods - 4.1.0 + 4.1.1 Pathoschild Automates the build configuration for crossplatform Stardew Valley SMAPI mods. For SMAPI 3.13.0 or later. MIT diff --git a/src/SMAPI.Mods.ConsoleCommands/manifest.json b/src/SMAPI.Mods.ConsoleCommands/manifest.json index 2447c5c3..9e70936f 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.18.3", + "Version": "3.18.4", "Description": "Adds SMAPI console commands that let you manipulate the game.", "UniqueID": "SMAPI.ConsoleCommands", "EntryDll": "ConsoleCommands.dll", - "MinimumApiVersion": "3.18.3" + "MinimumApiVersion": "3.18.4" } diff --git a/src/SMAPI.Mods.ErrorHandler/manifest.json b/src/SMAPI.Mods.ErrorHandler/manifest.json index 306c92fc..b007b672 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.18.3", + "Version": "3.18.4", "Description": "Handles some common vanilla errors to log more useful info or avoid breaking the game.", "UniqueID": "SMAPI.ErrorHandler", "EntryDll": "ErrorHandler.dll", - "MinimumApiVersion": "3.18.3" + "MinimumApiVersion": "3.18.4" } diff --git a/src/SMAPI.Mods.SaveBackup/manifest.json b/src/SMAPI.Mods.SaveBackup/manifest.json index c5075c57..7b819ec6 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.18.3", + "Version": "3.18.4", "Description": "Automatically backs up all your saves once per day into its folder.", "UniqueID": "SMAPI.SaveBackup", "EntryDll": "SaveBackup.dll", - "MinimumApiVersion": "3.18.3" + "MinimumApiVersion": "3.18.4" } diff --git a/src/SMAPI/Constants.cs b/src/SMAPI/Constants.cs index 77a19964..416e1ec7 100644 --- a/src/SMAPI/Constants.cs +++ b/src/SMAPI/Constants.cs @@ -52,7 +52,7 @@ namespace StardewModdingAPI internal static int? LogScreenId { get; set; } /// SMAPI's current raw semantic version. - internal static string RawApiVersion = "3.18.3"; + internal static string RawApiVersion = "3.18.4"; } /// Contains SMAPI's constants and assumptions.