summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build/common.targets2
-rw-r--r--build/prepare-nuget-package.targets23
-rw-r--r--docs/release-notes.md18
-rw-r--r--docs/technical/mod-package.md19
-rw-r--r--src/SMAPI.ModBuildConfig.Analyzer.Tests/SMAPI.ModBuildConfig.Analyzer.Tests.csproj2
-rw-r--r--src/SMAPI.ModBuildConfig/Framework/ModFileManager.cs5
-rw-r--r--src/SMAPI.ModBuildConfig/SMAPI.ModBuildConfig.csproj38
-rw-r--r--src/SMAPI.ModBuildConfig/package.nuspec27
-rw-r--r--src/SMAPI.Mods.ConsoleCommands/manifest.json4
-rw-r--r--src/SMAPI.Mods.SaveBackup/manifest.json4
-rw-r--r--src/SMAPI.Tests/SMAPI.Tests.csproj2
-rw-r--r--src/SMAPI.Web/Framework/Clients/Chucklefish/ChucklefishClient.cs6
-rw-r--r--src/SMAPI.Web/SMAPI.Web.csproj8
-rw-r--r--src/SMAPI.Web/wwwroot/schemas/content-patcher.json14
-rw-r--r--src/SMAPI.sln2
-rw-r--r--src/SMAPI/Constants.cs2
-rw-r--r--src/SMAPI/Framework/ContentPack.cs2
-rw-r--r--src/SMAPI/Framework/SCore.cs5
-rw-r--r--src/SMAPI/Framework/Serialization/RectangleConverter.cs2
-rw-r--r--src/SMAPI/Metadata/CoreAssetPropagator.cs2
-rw-r--r--src/SMAPI/SMAPI.csproj4
21 files changed, 93 insertions, 98 deletions
diff --git a/build/common.targets b/build/common.targets
index 7c2c5cad..171279a5 100644
--- a/build/common.targets
+++ b/build/common.targets
@@ -4,7 +4,7 @@
<!--set properties -->
<PropertyGroup>
- <Version>3.7.3</Version>
+ <Version>3.7.4</Version>
<Product>SMAPI</Product>
<LangVersion>latest</LangVersion>
diff --git a/build/prepare-nuget-package.targets b/build/prepare-nuget-package.targets
deleted file mode 100644
index 0682d9ff..00000000
--- a/build/prepare-nuget-package.targets
+++ /dev/null
@@ -1,23 +0,0 @@
-<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--
-
- This build task is run from the ModBuildConfig project after it's been compiled, and copies the
- package files to the bin\Pathoschild.Stardew.ModBuildConfig folder.
-
- -->
- <Target Name="PreparePackage" AfterTargets="AfterBuild">
- <PropertyGroup>
- <PackagePath>$(SolutionDir)\..\bin\Pathoschild.Stardew.ModBuildConfig</PackagePath>
- </PropertyGroup>
- <RemoveDir Directories="$(PackagePath)" />
- <Copy SourceFiles="$(ProjectDir)/package.nuspec" DestinationFolder="$(PackagePath)" />
- <Copy SourceFiles="$(SolutionDir)/../build/find-game-folder.targets" DestinationFolder="$(PackagePath)/build" />
- <Copy SourceFiles="$(ProjectDir)/build/smapi.targets" DestinationFiles="$(PackagePath)/build/Pathoschild.Stardew.ModBuildConfig.targets" />
- <Copy SourceFiles="$(TargetDir)/assets/nuget-icon.png" DestinationFiles="$(PackagePath)/images/icon.png" />
- <Copy SourceFiles="$(TargetDir)/Newtonsoft.Json.dll" DestinationFolder="$(PackagePath)/build" />
- <Copy SourceFiles="$(TargetDir)/SMAPI.ModBuildConfig.dll" DestinationFolder="$(PackagePath)/build" />
- <Copy SourceFiles="$(TargetDir)/SMAPI.Toolkit.dll" DestinationFolder="$(PackagePath)/build" />
- <Copy SourceFiles="$(TargetDir)/SMAPI.Toolkit.CoreInterfaces.dll" DestinationFolder="$(PackagePath)/build" />
- <Copy SourceFiles="$(SolutionDir)/SMAPI.ModBuildConfig.Analyzer/bin/netstandard2.0/SMAPI.ModBuildConfig.Analyzer.dll" DestinationFolder="$(PackagePath)/analyzers/dotnet/cs" />
- </Target>
-</Project>
diff --git a/docs/release-notes.md b/docs/release-notes.md
index 86817546..16afd637 100644
--- a/docs/release-notes.md
+++ b/docs/release-notes.md
@@ -7,6 +7,24 @@
* Migrated to Harmony 2.0 (see [_migrate to Harmony 2.0_](https://stardewvalleywiki.com/Modding:Migrate_to_Harmony_2.0) for more info).
-->
+## 3.7.4
+Released 03 October 2020 for Stardew Valley 1.4.1 or later.
+
+* For players:
+ * Improved performance on some older computers (thanks to millerscout!).
+ * Fixed update alerts for Chucklefish forum mods broken by a recent site change.
+
+* For modders:
+ * Updated dependencies (including Mono.Cecil 0.11.2 → 0.11.3 and Platonymous.TMXTile 1.3.8 → 1.5.6).
+ * Fixed asset propagation for `Data\MoviesReactions`.
+ * Fixed error in content pack path handling when you pass a null path.
+
+* For the web UI:
+ * Updated the JSON validator/schema for Content Patcher 1.18.
+
+* For SMAPI developers:
+ * Simplified preparing a mod build config package release.
+
## 3.7.3
Released 16 September 2020 for Stardew Valley 1.4.1 or later.
diff --git a/docs/technical/mod-package.md b/docs/technical/mod-package.md
index a1457405..f7475e37 100644
--- a/docs/technical/mod-package.md
+++ b/docs/technical/mod-package.md
@@ -343,19 +343,16 @@ project | purpose
`StardewModdingAPI.ModBuildConfig.Analyzer` | Adds C# analyzers which show code warnings in Visual Studio.
`StardewModdingAPI.ModBuildConfig.Analyzer.Tests` | Unit tests for the C# analyzers.
-To prepare a build of the NuGet package:
-1. Install the [NuGet CLI](https://docs.microsoft.com/en-us/nuget/install-nuget-client-tools#nugetexe-cli).
-1. Change the version and release notes in `package.nuspec`.
-2. Rebuild the solution in _Release_ mode.
-3. Open a terminal in the `bin/Pathoschild.Stardew.ModBuildConfig` folder and run this command:
- ```bash
- nuget.exe pack
- ```
-
-That will create a `Pathoschild.Stardew.ModBuildConfig-<version>.nupkg` file in the same directory
-which can be uploaded to NuGet or referenced directly.
+The NuGet package is generated automatically in `StardewModdingAPI.ModBuildConfig`'s `bin` folder
+when you compile it.
## Release notes
+## 3.2.2
+Released 23 September 2020.
+
+* 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.
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 9c230203..93eb476e 100644
--- a/src/SMAPI.ModBuildConfig.Analyzer.Tests/SMAPI.ModBuildConfig.Analyzer.Tests.csproj
+++ b/src/SMAPI.ModBuildConfig.Analyzer.Tests/SMAPI.ModBuildConfig.Analyzer.Tests.csproj
@@ -7,7 +7,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="2.10.0" />
- <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.6.1" />
+ <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.1" />
<PackageReference Include="NUnit" Version="3.12.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.17.0">
<PrivateAssets>all</PrivateAssets>
diff --git a/src/SMAPI.ModBuildConfig/Framework/ModFileManager.cs b/src/SMAPI.ModBuildConfig/Framework/ModFileManager.cs
index 636c3669..6dd595e5 100644
--- a/src/SMAPI.ModBuildConfig/Framework/ModFileManager.cs
+++ b/src/SMAPI.ModBuildConfig/Framework/ModFileManager.cs
@@ -164,6 +164,11 @@ namespace StardewModdingAPI.ModBuildConfig.Framework
|| this.EqualsInvariant(file.Name, "Newtonsoft.Json.pdb")
|| this.EqualsInvariant(file.Name, "Newtonsoft.Json.xml")
+ // mod translation class builder (not used at runtime)
+ || this.EqualsInvariant(file.Name, "Pathoschild.Stardew.ModTranslationClassBuilder.dll")
+ || this.EqualsInvariant(file.Name, "Pathoschild.Stardew.ModTranslationClassBuilder.pdb")
+ || this.EqualsInvariant(file.Name, "Pathoschild.Stardew.ModTranslationClassBuilder.xml")
+
// code analysis files
|| file.Name.EndsWith(".CodeAnalysisLog.xml", StringComparison.OrdinalIgnoreCase)
|| file.Name.EndsWith(".lastcodeanalysissucceeded", StringComparison.OrdinalIgnoreCase)
diff --git a/src/SMAPI.ModBuildConfig/SMAPI.ModBuildConfig.csproj b/src/SMAPI.ModBuildConfig/SMAPI.ModBuildConfig.csproj
index 605096d9..1813f58b 100644
--- a/src/SMAPI.ModBuildConfig/SMAPI.ModBuildConfig.csproj
+++ b/src/SMAPI.ModBuildConfig/SMAPI.ModBuildConfig.csproj
@@ -1,10 +1,26 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
+ <!--build-->
<RootNamespace>StardewModdingAPI.ModBuildConfig</RootNamespace>
- <Version>3.2.1</Version>
<TargetFramework>net45</TargetFramework>
<PlatformTarget>x86</PlatformTarget>
- <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
+ <LangVersion>latest</LangVersion>
+ <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
+
+ <!--NuGet package-->
+ <PackageId>Pathoschild.Stardew.ModBuildConfig</PackageId>
+ <Title>Build package for SMAPI mods</Title>
+ <Version>3.2.2</Version>
+ <Authors>Pathoschild</Authors>
+ <Description>Automates the build configuration for crossplatform Stardew Valley SMAPI mods. For SMAPI 3.0 or later.</Description>
+ <PackageLicenseExpression>MIT</PackageLicenseExpression>
+ <PackageIcon>images/icon.png</PackageIcon>
+ <PackageProjectUrl>https://smapi.io/package/readme</PackageProjectUrl>
+ <PackageReleaseNotes>
+ - Reworked and streamlined how the package is compiled.
+ - Added SMAPI-ModTranslationClassBuilder files to the ignore list.
+ </PackageReleaseNotes>
+ <IncludeBuildOutput>false</IncludeBuildOutput>
</PropertyGroup>
<ItemGroup>
@@ -16,16 +32,22 @@
</ItemGroup>
<ItemGroup>
- <ProjectReference Include="..\SMAPI.Toolkit\SMAPI.Toolkit.csproj" />
+ <ProjectReference Include="..\SMAPI.Toolkit\SMAPI.Toolkit.csproj" PrivateAssets="All" />
</ItemGroup>
<ItemGroup>
- <None Include="..\..\build\find-game-folder.targets" Link="build\find-game-folder.targets" />
+ <!--project files-->
<None Include="..\..\docs\technical\mod-package.md" Link="mod-package.md" />
- <None Update="assets\nuget-icon.png" CopyToOutputDirectory="PreserveNewest" />
+
+ <!--NuGet package files-->
+ <None PackagePath="analyzers/dotnet/cs" Include="$(SolutionDir)/SMAPI.ModBuildConfig.Analyzer/bin/netstandard2.0/SMAPI.ModBuildConfig.Analyzer.dll" Pack="true" Visible="false" />
+ <None PackagePath="build/" Include="..\..\build\find-game-folder.targets" Link="build/find-game-folder.targets" Pack="true" />
+ <None PackagePath="build/" Include="$(OutputPath)\Newtonsoft.Json.dll" Pack="true" Visible="false" />
+ <None PackagePath="build/" Include="$(OutputPath)\SMAPI.Toolkit.dll" Pack="true" Visible="false" />
+ <None PackagePath="build/" Include="$(OutputPath)\SMAPI.Toolkit.CoreInterfaces.dll" Pack="true" Visible="false" />
+ <None PackagePath="build/SMAPI.ModBuildConfig.dll" Include="$(OutputPath)\$(AssemblyName).dll" Pack="true" Visible="false" />
+ <None PackagePath="build/Pathoschild.Stardew.ModBuildConfig.targets" Include="build\smapi.targets" Pack="true" />
+ <None PackagePath="images/icon.png" Include="assets\nuget-icon.png" Pack="true" />
</ItemGroup>
- <Import Project="..\SMAPI.Internal\SMAPI.Internal.projitems" Label="Shared" />
- <Import Project="..\..\build\common.targets" />
- <Import Project="..\..\build\prepare-nuget-package.targets" />
</Project>
diff --git a/src/SMAPI.ModBuildConfig/package.nuspec b/src/SMAPI.ModBuildConfig/package.nuspec
deleted file mode 100644
index 05aed8f9..00000000
--- a/src/SMAPI.ModBuildConfig/package.nuspec
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
- <metadata>
- <id>Pathoschild.Stardew.ModBuildConfig</id>
- <version>3.2.1</version>
- <title>Build package for SMAPI mods</title>
- <authors>Pathoschild</authors>
- <owners>Pathoschild</owners>
- <requireLicenseAcceptance>false</requireLicenseAcceptance>
- <license type="expression">MIT</license>
- <repository type="git" url="https://github.com/Pathoschild/SMAPI" />
- <projectUrl>https://smapi.io/package/readme</projectUrl>
- <icon>images\icon.png</icon>
- <iconUrl>https://raw.githubusercontent.com/Pathoschild/SMAPI/develop/src/SMAPI.ModBuildConfig/assets/nuget-icon.png</iconUrl>
- <description>Automates the build configuration for crossplatform Stardew Valley SMAPI mods. For SMAPI 3.0 or later.</description>
- <releaseNotes>
- 3.2.1:
- - Added more detailed logging.
- - Fixed "path's format is not supported" error when using default Mods path in 3.2.
- </releaseNotes>
- </metadata>
- <files>
- <file src="analyzers\**" target="analyzers" />
- <file src="build\**" target="build" />
- <file src="images\**" target="images" />
- </files>
-</package>
diff --git a/src/SMAPI.Mods.ConsoleCommands/manifest.json b/src/SMAPI.Mods.ConsoleCommands/manifest.json
index e4506431..a8499ce2 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.7.3",
+ "Version": "3.7.4",
"Description": "Adds SMAPI console commands that let you manipulate the game.",
"UniqueID": "SMAPI.ConsoleCommands",
"EntryDll": "ConsoleCommands.dll",
- "MinimumApiVersion": "3.7.3"
+ "MinimumApiVersion": "3.7.4"
}
diff --git a/src/SMAPI.Mods.SaveBackup/manifest.json b/src/SMAPI.Mods.SaveBackup/manifest.json
index 34f553ba..ed0d94a9 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.7.3",
+ "Version": "3.7.4",
"Description": "Automatically backs up all your saves once per day into its folder.",
"UniqueID": "SMAPI.SaveBackup",
"EntryDll": "SaveBackup.dll",
- "MinimumApiVersion": "3.7.3"
+ "MinimumApiVersion": "3.7.4"
}
diff --git a/src/SMAPI.Tests/SMAPI.Tests.csproj b/src/SMAPI.Tests/SMAPI.Tests.csproj
index 6896808d..1e13edc3 100644
--- a/src/SMAPI.Tests/SMAPI.Tests.csproj
+++ b/src/SMAPI.Tests/SMAPI.Tests.csproj
@@ -16,7 +16,7 @@
</ItemGroup>
<ItemGroup>
- <PackageReference Include="Moq" Version="4.14.5" />
+ <PackageReference Include="Moq" Version="4.14.6" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
<PackageReference Include="NUnit" Version="3.12.0" />
</ItemGroup>
diff --git a/src/SMAPI.Web/Framework/Clients/Chucklefish/ChucklefishClient.cs b/src/SMAPI.Web/Framework/Clients/Chucklefish/ChucklefishClient.cs
index ca156da4..b8b05878 100644
--- a/src/SMAPI.Web/Framework/Clients/Chucklefish/ChucklefishClient.cs
+++ b/src/SMAPI.Web/Framework/Clients/Chucklefish/ChucklefishClient.cs
@@ -67,10 +67,10 @@ namespace StardewModdingAPI.Web.Framework.Clients.Chucklefish
// extract mod info
string url = this.GetModUrl(parsedId);
- string name = doc.DocumentNode.SelectSingleNode("//meta[@name='twitter:title']").Attributes["content"].Value;
- if (name.StartsWith("[SMAPI] "))
- name = name.Substring("[SMAPI] ".Length);
string version = doc.DocumentNode.SelectSingleNode("//h1/span")?.InnerText;
+ string name = doc.DocumentNode.SelectSingleNode("//h1").ChildNodes[0].InnerText.Trim();
+ if (name.StartsWith("[SMAPI]"))
+ name = name.Substring("[SMAPI]".Length).TrimStart();
// return info
return page.SetInfo(name: name, version: version, url: url, downloads: Array.Empty<IModDownload>());
diff --git a/src/SMAPI.Web/SMAPI.Web.csproj b/src/SMAPI.Web/SMAPI.Web.csproj
index 23e0340d..72cbc8a9 100644
--- a/src/SMAPI.Web/SMAPI.Web.csproj
+++ b/src/SMAPI.Web/SMAPI.Web.csproj
@@ -12,14 +12,14 @@
</ItemGroup>
<ItemGroup>
- <PackageReference Include="Azure.Storage.Blobs" Version="12.4.4" />
- <PackageReference Include="Hangfire.AspNetCore" Version="1.7.12" />
+ <PackageReference Include="Azure.Storage.Blobs" Version="12.6.0" />
+ <PackageReference Include="Hangfire.AspNetCore" Version="1.7.14" />
<PackageReference Include="Hangfire.MemoryStorage" Version="1.7.0" />
<PackageReference Include="HtmlAgilityPack" Version="1.11.24" />
<PackageReference Include="Humanizer.Core" Version="2.8.26" />
<PackageReference Include="JetBrains.Annotations" Version="2020.1.0" />
- <PackageReference Include="Markdig" Version="0.20.0" />
- <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.6" />
+ <PackageReference Include="Markdig" Version="0.21.1" />
+ <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.8" />
<PackageReference Include="Newtonsoft.Json.Schema" Version="3.0.13" />
<PackageReference Include="Pathoschild.FluentNexus" Version="1.0.1" />
<PackageReference Include="Pathoschild.Http.FluentClient" Version="4.0.0" />
diff --git a/src/SMAPI.Web/wwwroot/schemas/content-patcher.json b/src/SMAPI.Web/wwwroot/schemas/content-patcher.json
index 3fd24e4e..e52cd757 100644
--- a/src/SMAPI.Web/wwwroot/schemas/content-patcher.json
+++ b/src/SMAPI.Web/wwwroot/schemas/content-patcher.json
@@ -11,9 +11,9 @@
"title": "Format version",
"description": "The format version. You should always use the latest version to enable the latest features and avoid obsolete behavior.",
"type": "string",
- "const": "1.17.0",
+ "const": "1.18.0",
"@errorMessages": {
- "const": "Incorrect value '@value'. This should be set to the latest format version, currently '1.17.0'."
+ "const": "Incorrect value '@value'. This should be set to the latest format version, currently '1.18.0'."
}
},
"ConfigSchema": {
@@ -43,6 +43,11 @@
"description": "The default values when the field is missing. Can contain multiple comma-delimited values if AllowMultiple is true. If omitted, blank fields are left blank.",
"type": "string"
},
+ "Description": {
+ "title": "Description",
+ "description": "An optional explanation of the config field for players, shown in UIs like Generic Mod Config Menu.",
+ "type": "string"
+ },
"additionalProperties": false
},
@@ -383,7 +388,6 @@
"enum": [
"Action",
"Enabled",
- "FromFile",
"LogName",
"Target",
"Update",
@@ -391,7 +395,8 @@
"Entries",
"Fields",
- "MoveEntries"
+ "MoveEntries",
+ "TextOperations"
]
}
}
@@ -427,6 +432,7 @@
"FromArea",
"MapProperties",
"MapTiles",
+ "TextOperations",
"ToArea"
]
}
diff --git a/src/SMAPI.sln b/src/SMAPI.sln
index 92b0cd2c..aaf4d374 100644
--- a/src/SMAPI.sln
+++ b/src/SMAPI.sln
@@ -29,7 +29,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{09CF91E5
..\build\common.targets = ..\build\common.targets
..\build\find-game-folder.targets = ..\build\find-game-folder.targets
..\build\prepare-install-package.targets = ..\build\prepare-install-package.targets
- ..\build\prepare-nuget-package.targets = ..\build\prepare-nuget-package.targets
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{EB35A917-67B9-4EFA-8DFC-4FB49B3949BB}"
@@ -81,7 +80,6 @@ Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
SMAPI.Internal\SMAPI.Internal.projitems*{0634ea4c-3b8f-42db-aea6-ca9e4ef6e92f}*SharedItemsImports = 5
SMAPI.Internal\SMAPI.Internal.projitems*{0a9bb24f-15ff-4c26-b1a2-81f7ae316518}*SharedItemsImports = 5
- SMAPI.Internal\SMAPI.Internal.projitems*{1b3821e6-d030-402c-b3a1-7ca45c2800ea}*SharedItemsImports = 5
SMAPI.Internal\SMAPI.Internal.projitems*{80efd92f-728f-41e0-8a5b-9f6f49a91899}*SharedItemsImports = 5
SMAPI.Internal\SMAPI.Internal.projitems*{85208f8d-6fd1-4531-be05-7142490f59fe}*SharedItemsImports = 13
SMAPI.Internal\SMAPI.Internal.projitems*{cd53ad6f-97f4-4872-a212-50c2a0fd3601}*SharedItemsImports = 5
diff --git a/src/SMAPI/Constants.cs b/src/SMAPI/Constants.cs
index 48428420..3927d477 100644
--- a/src/SMAPI/Constants.cs
+++ b/src/SMAPI/Constants.cs
@@ -51,7 +51,7 @@ namespace StardewModdingAPI
** Public
****/
/// <summary>SMAPI's current semantic version.</summary>
- public static ISemanticVersion ApiVersion { get; } = new Toolkit.SemanticVersion("3.7.3");
+ public static ISemanticVersion ApiVersion { get; } = new Toolkit.SemanticVersion("3.7.4");
/// <summary>The minimum supported version of Stardew Valley.</summary>
public static ISemanticVersion MinimumGameVersion { get; } = new GameVersion("1.4.1");
diff --git a/src/SMAPI/Framework/ContentPack.cs b/src/SMAPI/Framework/ContentPack.cs
index 161fdbe4..a6835dbe 100644
--- a/src/SMAPI/Framework/ContentPack.cs
+++ b/src/SMAPI/Framework/ContentPack.cs
@@ -119,7 +119,7 @@ namespace StardewModdingAPI.Framework
if (!PathUtilities.IsSafeRelativePath(relativePath))
throw new InvalidOperationException($"You must call {nameof(IContentPack)} methods with a relative path.");
- return this.RelativePaths.TryGetValue(relativePath, out string caseInsensitivePath)
+ return !string.IsNullOrWhiteSpace(relativePath) && this.RelativePaths.TryGetValue(relativePath, out string caseInsensitivePath)
? caseInsensitivePath
: relativePath;
}
diff --git a/src/SMAPI/Framework/SCore.cs b/src/SMAPI/Framework/SCore.cs
index e64c2801..f07e41f0 100644
--- a/src/SMAPI/Framework/SCore.cs
+++ b/src/SMAPI/Framework/SCore.cs
@@ -278,15 +278,14 @@ namespace StardewModdingAPI.Framework
);
// add exit handler
- new Thread(() =>
+ this.CancellationToken.Token.Register(() =>
{
- this.CancellationToken.Token.WaitHandle.WaitOne();
if (this.IsGameRunning)
{
this.LogManager.WriteCrashLog();
this.Game.Exit();
}
- }).Start();
+ });
// set window titles
this.SetWindowTitles(
diff --git a/src/SMAPI/Framework/Serialization/RectangleConverter.cs b/src/SMAPI/Framework/Serialization/RectangleConverter.cs
index a5780d8a..8f7318b3 100644
--- a/src/SMAPI/Framework/Serialization/RectangleConverter.cs
+++ b/src/SMAPI/Framework/Serialization/RectangleConverter.cs
@@ -37,7 +37,7 @@ namespace StardewModdingAPI.Framework.Serialization
if (string.IsNullOrWhiteSpace(str))
return Rectangle.Empty;
- var match = Regex.Match(str, @"^\{X:(?<x>\d+) Y:(?<y>\d+) Width:(?<width>\d+) Height:(?<height>\d+)\}$", RegexOptions.IgnoreCase);
+ var match = Regex.Match(str, @"^\{X:(?<x>-?\d+) Y:(?<y>-?\d+) Width:(?<width>-?\d+) Height:(?<height>-?\d+)\}$", RegexOptions.IgnoreCase);
if (!match.Success)
throw new SParseException($"Can't parse {nameof(Rectangle)} from invalid value '{str}' (path: {path}).");
diff --git a/src/SMAPI/Metadata/CoreAssetPropagator.cs b/src/SMAPI/Metadata/CoreAssetPropagator.cs
index 71199d59..701bc9f2 100644
--- a/src/SMAPI/Metadata/CoreAssetPropagator.cs
+++ b/src/SMAPI/Metadata/CoreAssetPropagator.cs
@@ -263,7 +263,7 @@ namespace StardewModdingAPI.Metadata
case "data\\farmanimals": // FarmAnimal constructor
return this.ReloadFarmAnimalData();
- case "data\\moviereactions": // MovieTheater.GetMovieReactions
+ case "data\\moviesreactions": // MovieTheater.GetMovieReactions
this.Reflection
.GetField<List<MovieCharacterReaction>>(typeof(MovieTheater), "_genericReactions")
.SetValue(content.Load<List<MovieCharacterReaction>>(key));
diff --git a/src/SMAPI/SMAPI.csproj b/src/SMAPI/SMAPI.csproj
index 7d2b8199..969071cf 100644
--- a/src/SMAPI/SMAPI.csproj
+++ b/src/SMAPI/SMAPI.csproj
@@ -14,9 +14,9 @@
<ItemGroup>
<PackageReference Include="LargeAddressAware" Version="1.0.5" />
- <PackageReference Include="Mono.Cecil" Version="0.11.2" />
+ <PackageReference Include="Mono.Cecil" Version="0.11.3" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
- <PackageReference Include="Platonymous.TMXTile" Version="1.3.8" />
+ <PackageReference Include="Platonymous.TMXTile" Version="1.5.6" />
</ItemGroup>
<ItemGroup>