Skip to content

Commit

Permalink
Merge branch 'develop' into stable
Browse files Browse the repository at this point in the history
  • Loading branch information
Pathoschild committed Sep 18, 2021
2 parents c5b8cd6 + 6643da4 commit ebe4118
Show file tree
Hide file tree
Showing 15 changed files with 140 additions and 65 deletions.
2 changes: 1 addition & 1 deletion build/common.targets
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<!--set general build properties -->
<Version>3.12.6</Version>
<Version>3.12.7</Version>
<Product>SMAPI</Product>
<LangVersion>latest</LangVersion>
<AssemblySearchPaths>$(AssemblySearchPaths);{GAC}</AssemblySearchPaths>
Expand Down
49 changes: 33 additions & 16 deletions docs/release-notes.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,25 @@
[README](README.md)

# Release notes
## 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.
* Simplified exception logs.
* 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:
* The mod compatibility list now shows the beta status by default (if any).
* 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.
Expand All @@ -26,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.
Expand All @@ -56,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.
Expand All @@ -67,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.
Expand All @@ -78,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_).
Expand All @@ -96,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.
Expand All @@ -120,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.
Expand All @@ -151,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)_.
Expand All @@ -172,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.
Expand All @@ -194,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.
Expand All @@ -217,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.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
using System;
using System.Reflection;
using System.Text.RegularExpressions;

namespace StardewModdingAPI.Internal
{
/// <summary>Provides extension methods for handling exceptions.</summary>
internal static class ExceptionExtensions
internal static class ExceptionHelper
{
/*********
** Public methods
Expand All @@ -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() ?? $"<null exception>\n{Environment.StackTrace}";
message = exception?.ToString() ?? $"<null exception>\n{Environment.StackTrace}";
break;
}

return ExceptionHelper.SimplifyExtensionMessage(message);
}
catch (Exception ex)
{
Expand All @@ -44,5 +51,26 @@ public static Exception GetInnermostException(this Exception exception)
exception = exception.InnerException;
return exception;
}

/// <summary>Simplify common patterns in exception log messages that don't convey useful info.</summary>
/// <param name="message">The log message to simplify.</param>
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(@"<filename unknown>:0", "");
}
}
}
2 changes: 1 addition & 1 deletion src/SMAPI.Internal/SMAPI.Internal.projitems
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@
<Compile Include="$(MSBuildThisFileDirectory)ConsoleWriting\ConsoleLogLevel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ConsoleWriting\IConsoleWriter.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ConsoleWriting\MonitorColorScheme.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ExceptionExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ExceptionHelper.cs" />
</ItemGroup>
</Project>
4 changes: 2 additions & 2 deletions src/SMAPI.Mods.ConsoleCommands/manifest.json
Original file line number Diff line number Diff line change
@@ -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"
}
4 changes: 2 additions & 2 deletions src/SMAPI.Mods.ErrorHandler/manifest.json
Original file line number Diff line number Diff line change
@@ -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"
}
4 changes: 2 additions & 2 deletions src/SMAPI.Mods.SaveBackup/manifest.json
Original file line number Diff line number Diff line change
@@ -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"
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ internal abstract class SimpleReadOnlyConverter<T> : JsonConverter
/// <param name="objectType">The object type.</param>
public override bool CanConvert(Type objectType)
{
return objectType == typeof(T);
return objectType == typeof(T) || Nullable.GetUnderlyingType(objectType) == typeof(T);
}

/// <summary>Writes the JSON representation of the object.</summary>
Expand All @@ -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<string>(), path);

default:
throw new SParseException($"Can't parse {typeof(T).Name} from {reader.TokenType} node (path: {reader.Path}).");
}
Expand Down
26 changes: 16 additions & 10 deletions src/SMAPI.Web/Controllers/JsonValidatorController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -90,21 +90,27 @@ public async Task<ViewResult> 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")
Expand Down
4 changes: 2 additions & 2 deletions src/SMAPI.Web/Views/Mods/Index.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ else
@if (hasBeta)
{
<p id="beta-blurb" v-show="showAdvanced"><strong>Note:</strong> "@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.</p>
<p id="beta-blurb"><strong>Note:</strong> "@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.</p>
}
</div>
Expand Down Expand Up @@ -99,7 +99,7 @@ else
</td>
<td>
<div v-html="mod.Compatibility.Summary"></div>
<div v-if="mod.BetaCompatibility" v-show="showAdvanced">
<div v-if="mod.BetaCompatibility">
<strong v-if="mod.BetaCompatibility">@betaLabel:</strong>
<span v-html="mod.BetaCompatibility.Summary"></span>
</div>
Expand Down
2 changes: 1 addition & 1 deletion src/SMAPI/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ internal static class EarlyConstants
internal static int? LogScreenId { get; set; }

/// <summary>SMAPI's current raw semantic version.</summary>
internal static string RawApiVersion = "3.12.6";
internal static string RawApiVersion = "3.12.7";
}

/// <summary>Contains SMAPI's constants and assumptions.</summary>
Expand Down
Loading

0 comments on commit ebe4118

Please sign in to comment.