summaryrefslogtreecommitdiff
path: root/src/SMAPI.Web
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2021-11-30 17:14:03 -0500
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2021-11-30 17:14:03 -0500
commit3342502993c39efec6734c68e4800d29073eeeec (patch)
treea96f1b62b3aeba3d5b12ad7496de06a94d39c977 /src/SMAPI.Web
parentd578345cfd53df8a91ae8e0e1346b711332a999a (diff)
parentb294ac1203aa78575f8c72f0be1ee9d3edff15ab (diff)
downloadSMAPI-3342502993c39efec6734c68e4800d29073eeeec.tar.gz
SMAPI-3342502993c39efec6734c68e4800d29073eeeec.tar.bz2
SMAPI-3342502993c39efec6734c68e4800d29073eeeec.zip
Merge branch 'develop' into stable
Diffstat (limited to 'src/SMAPI.Web')
-rw-r--r--src/SMAPI.Web/Controllers/IndexController.cs52
-rw-r--r--src/SMAPI.Web/Controllers/ModsApiController.cs7
-rw-r--r--src/SMAPI.Web/Framework/ConfigModels/ModUpdateCheckConfig.cs3
-rw-r--r--src/SMAPI.Web/Framework/ConfigModels/SiteConfig.cs7
-rw-r--r--src/SMAPI.Web/Framework/ConfigModels/SmapiInfoConfig.cs15
-rw-r--r--src/SMAPI.Web/SMAPI.Web.csproj18
-rw-r--r--src/SMAPI.Web/ViewModels/IndexModel.cs15
-rw-r--r--src/SMAPI.Web/Views/Index/Index.cshtml57
-rw-r--r--src/SMAPI.Web/appsettings.json10
-rw-r--r--src/SMAPI.Web/wwwroot/Content/css/index.css4
-rw-r--r--src/SMAPI.Web/wwwroot/SMAPI.metadata.json65
-rw-r--r--src/SMAPI.Web/wwwroot/schemas/content-patcher.json6
12 files changed, 133 insertions, 126 deletions
diff --git a/src/SMAPI.Web/Controllers/IndexController.cs b/src/SMAPI.Web/Controllers/IndexController.cs
index 080285ab..f2f4c342 100644
--- a/src/SMAPI.Web/Controllers/IndexController.cs
+++ b/src/SMAPI.Web/Controllers/IndexController.cs
@@ -57,21 +57,16 @@ namespace StardewModdingAPI.Web.Controllers
{
// choose versions
ReleaseVersion[] versions = await this.GetReleaseVersionsAsync();
- ReleaseVersion stableVersion = versions.LastOrDefault(version => !version.IsBeta && !version.IsForDevs);
- ReleaseVersion stableVersionForDevs = versions.LastOrDefault(version => !version.IsBeta && version.IsForDevs);
- ReleaseVersion betaVersion = versions.LastOrDefault(version => version.IsBeta && !version.IsForDevs);
- ReleaseVersion betaVersionForDevs = versions.LastOrDefault(version => version.IsBeta && version.IsForDevs);
+ ReleaseVersion stableVersion = versions.LastOrDefault(version => !version.IsForDevs);
+ ReleaseVersion stableVersionForDevs = versions.LastOrDefault(version => version.IsForDevs);
// render view
IndexVersionModel stableVersionModel = stableVersion != null
? new IndexVersionModel(stableVersion.Version.ToString(), stableVersion.Release.Body, stableVersion.Asset.DownloadUrl, stableVersionForDevs?.Asset.DownloadUrl)
- : new IndexVersionModel("unknown", "", "https://github.com/Pathoschild/SMAPI/releases", null); // just in case something goes wrong)
- IndexVersionModel betaVersionModel = betaVersion != null && this.SiteConfig.BetaEnabled
- ? new IndexVersionModel(betaVersion.Version.ToString(), betaVersion.Release.Body, betaVersion.Asset.DownloadUrl, betaVersionForDevs?.Asset.DownloadUrl)
- : null;
+ : new IndexVersionModel("unknown", "", "https://github.com/Pathoschild/SMAPI/releases", null); // just in case something goes wrong
// render view
- var model = new IndexModel(stableVersionModel, betaVersionModel, this.SiteConfig.BetaBlurb, this.SiteConfig.SupporterList);
+ var model = new IndexModel(stableVersionModel, this.SiteConfig.OtherBlurb, this.SiteConfig.SupporterList);
return this.View(model);
}
@@ -93,27 +88,12 @@ namespace StardewModdingAPI.Web.Controllers
{
entry.AbsoluteExpiration = DateTimeOffset.UtcNow.Add(this.CacheTime);
- // get latest release (whether preview or stable)
- GitRelease stableRelease = await this.GitHub.GetLatestReleaseAsync(this.RepositoryName, includePrerelease: true);
+ // get latest stable release
+ GitRelease release = await this.GitHub.GetLatestReleaseAsync(this.RepositoryName, includePrerelease: false);
- // split stable/prerelease if applicable
- GitRelease betaRelease = null;
- if (stableRelease.IsPrerelease)
+ // strip 'noinclude' blocks from release description
+ if (release != null)
{
- GitRelease result = await this.GitHub.GetLatestReleaseAsync(this.RepositoryName, includePrerelease: false);
- if (result != null)
- {
- betaRelease = stableRelease;
- stableRelease = result;
- }
- }
-
- // strip 'noinclude' blocks from release descriptions
- foreach (GitRelease release in new[] { stableRelease, betaRelease })
- {
- if (release == null)
- continue;
-
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(release.Body);
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//*[@class='noinclude']")?.ToArray() ?? new HtmlNode[0])
@@ -122,10 +102,8 @@ namespace StardewModdingAPI.Web.Controllers
}
// get versions
- ReleaseVersion[] stableVersions = this.ParseReleaseVersions(stableRelease).ToArray();
- ReleaseVersion[] betaVersions = this.ParseReleaseVersions(betaRelease).ToArray();
- return stableVersions
- .Concat(betaVersions)
+ return this
+ .ParseReleaseVersions(release)
.OrderBy(p => p.Version)
.ToArray();
});
@@ -146,10 +124,9 @@ namespace StardewModdingAPI.Web.Controllers
Match match = Regex.Match(asset.FileName, @"SMAPI-(?<version>[\d\.]+(?:-.+)?)-installer(?<forDevs>-for-developers)?.zip");
if (!match.Success || !SemanticVersion.TryParse(match.Groups["version"].Value, out ISemanticVersion version))
continue;
- bool isBeta = version.IsPrerelease();
bool isForDevs = match.Groups["forDevs"].Success;
- yield return new ReleaseVersion(release, asset, version, isBeta, isForDevs);
+ yield return new ReleaseVersion(release, asset, version, isForDevs);
}
}
@@ -168,9 +145,6 @@ namespace StardewModdingAPI.Web.Controllers
/// <summary>The SMAPI version.</summary>
public ISemanticVersion Version { get; }
- /// <summary>Whether this is a beta download.</summary>
- public bool IsBeta { get; }
-
/// <summary>Whether this is a 'for developers' download.</summary>
public bool IsForDevs { get; }
@@ -182,14 +156,12 @@ namespace StardewModdingAPI.Web.Controllers
/// <param name="release">The underlying GitHub release.</param>
/// <param name="asset">The underlying download asset.</param>
/// <param name="version">The SMAPI version.</param>
- /// <param name="isBeta">Whether this is a beta download.</param>
/// <param name="isForDevs">Whether this is a 'for developers' download.</param>
- public ReleaseVersion(GitRelease release, GitAsset asset, ISemanticVersion version, bool isBeta, bool isForDevs)
+ public ReleaseVersion(GitRelease release, GitAsset asset, ISemanticVersion version, bool isForDevs)
{
this.Release = release;
this.Asset = asset;
this.Version = version;
- this.IsBeta = isBeta;
this.IsForDevs = isForDevs;
}
}
diff --git a/src/SMAPI.Web/Controllers/ModsApiController.cs b/src/SMAPI.Web/Controllers/ModsApiController.cs
index dcddaf10..37d763cc 100644
--- a/src/SMAPI.Web/Controllers/ModsApiController.cs
+++ b/src/SMAPI.Web/Controllers/ModsApiController.cs
@@ -81,6 +81,8 @@ namespace StardewModdingAPI.Web.Controllers
if (model?.Mods == null)
return new ModEntryModel[0];
+ ModUpdateCheckConfig config = this.Config.Value;
+
// fetch wiki data
WikiModEntry[] wikiData = this.WikiCache.GetWikiMods().Select(p => p.Data).ToArray();
IDictionary<string, ModEntryModel> mods = new Dictionary<string, ModEntryModel>(StringComparer.CurrentCultureIgnoreCase);
@@ -89,6 +91,11 @@ namespace StardewModdingAPI.Web.Controllers
if (string.IsNullOrWhiteSpace(mod.ID))
continue;
+ // special case: if this is an update check for the official SMAPI repo, check the Nexus mod page for beta versions
+ if (mod.ID == config.SmapiInfo.ID && mod.UpdateKeys?.Any(key => key == config.SmapiInfo.DefaultUpdateKey) == true && mod.InstalledVersion?.IsPrerelease() == true)
+ mod.UpdateKeys = mod.UpdateKeys.Concat(config.SmapiInfo.AddBetaUpdateKeys).ToArray();
+
+ // fetch result
ModEntryModel result = await this.GetModData(mod, wikiData, model.IncludeExtendedMetadata, model.ApiVersion);
if (!model.IncludeExtendedMetadata && (model.ApiVersion == null || mod.InstalledVersion == null))
{
diff --git a/src/SMAPI.Web/Framework/ConfigModels/ModUpdateCheckConfig.cs b/src/SMAPI.Web/Framework/ConfigModels/ModUpdateCheckConfig.cs
index bd58dba0..aea695b8 100644
--- a/src/SMAPI.Web/Framework/ConfigModels/ModUpdateCheckConfig.cs
+++ b/src/SMAPI.Web/Framework/ConfigModels/ModUpdateCheckConfig.cs
@@ -14,5 +14,8 @@ namespace StardewModdingAPI.Web.Framework.ConfigModels
/// <summary>Update-check metadata to override.</summary>
public ModOverrideConfig[] ModOverrides { get; set; }
+
+ /// <summary>The update-check config for SMAPI's own update checks.</summary>
+ public SmapiInfoConfig SmapiInfo { get; set; }
}
}
diff --git a/src/SMAPI.Web/Framework/ConfigModels/SiteConfig.cs b/src/SMAPI.Web/Framework/ConfigModels/SiteConfig.cs
index 43969f51..664dbef3 100644
--- a/src/SMAPI.Web/Framework/ConfigModels/SiteConfig.cs
+++ b/src/SMAPI.Web/Framework/ConfigModels/SiteConfig.cs
@@ -6,11 +6,8 @@ namespace StardewModdingAPI.Web.Framework.ConfigModels
/*********
** Accessors
*********/
- /// <summary>Whether to show SMAPI beta versions on the main page, if any.</summary>
- public bool BetaEnabled { get; set; }
-
- /// <summary>A short sentence shown under the beta download button, if any.</summary>
- public string BetaBlurb { get; set; }
+ /// <summary>A message to show below the download button (e.g. for details on downloading a beta version), in Markdown format.</summary>
+ public string OtherBlurb { get; set; }
/// <summary>A list of supports to credit on the main page, in Markdown format.</summary>
public string SupporterList { get; set; }
diff --git a/src/SMAPI.Web/Framework/ConfigModels/SmapiInfoConfig.cs b/src/SMAPI.Web/Framework/ConfigModels/SmapiInfoConfig.cs
new file mode 100644
index 00000000..d69fabb3
--- /dev/null
+++ b/src/SMAPI.Web/Framework/ConfigModels/SmapiInfoConfig.cs
@@ -0,0 +1,15 @@
+namespace StardewModdingAPI.Web.Framework.ConfigModels
+{
+ /// <summary>The update-check config for SMAPI's own update checks.</summary>
+ internal class SmapiInfoConfig
+ {
+ /// <summary>The mod ID used for SMAPI update checks.</summary>
+ public string ID { get; set; }
+
+ /// <summary>The default update key used for SMAPI update checks.</summary>
+ public string DefaultUpdateKey { get; set; }
+
+ /// <summary>The update keys to add for SMAPI update checks when the player has a beta version installed.</summary>
+ public string[] AddBetaUpdateKeys { get; set; }
+ }
+}
diff --git a/src/SMAPI.Web/SMAPI.Web.csproj b/src/SMAPI.Web/SMAPI.Web.csproj
index 4c8465a6..f1400e62 100644
--- a/src/SMAPI.Web/SMAPI.Web.csproj
+++ b/src/SMAPI.Web/SMAPI.Web.csproj
@@ -2,27 +2,29 @@
<PropertyGroup>
<AssemblyName>SMAPI.Web</AssemblyName>
<RootNamespace>StardewModdingAPI.Web</RootNamespace>
- <TargetFramework>net5.0</TargetFramework>
+ <TargetFramework>net6.0</TargetFramework>
<LangVersion>latest</LangVersion>
</PropertyGroup>
<Import Project="..\..\build\common.targets" />
<ItemGroup>
+ <None Remove="Properties\PublishProfiles\**" />
+ <None Remove="Properties\ServiceDependencies\**" />
<Content Remove="aws-beanstalk-tools-defaults.json" />
</ItemGroup>
<ItemGroup>
- <PackageReference Include="Azure.Storage.Blobs" Version="12.8.3" />
- <PackageReference Include="Hangfire.AspNetCore" Version="1.7.22" />
+ <PackageReference Include="Azure.Storage.Blobs" Version="12.10.0" />
+ <PackageReference Include="Hangfire.AspNetCore" Version="1.7.27" />
<PackageReference Include="Hangfire.MemoryStorage" Version="1.7.0" />
<PackageReference Include="HtmlAgilityPack" Version="1.11.33" />
- <PackageReference Include="Humanizer.Core" Version="2.9.9" />
- <PackageReference Include="JetBrains.Annotations" Version="2021.1.0" />
- <PackageReference Include="Markdig" Version="0.24.0" />
- <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.8" />
+ <PackageReference Include="Humanizer.Core" Version="2.13.14" />
+ <PackageReference Include="JetBrains.Annotations" Version="2021.3.0" />
+ <PackageReference Include="Markdig" Version="0.26.0" />
+ <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.0" />
<PackageReference Include="Newtonsoft.Json.Schema" Version="3.0.14" />
- <PackageReference Include="Pathoschild.FluentNexus" Version="1.0.2" />
+ <PackageReference Include="Pathoschild.FluentNexus" Version="1.0.5" />
<PackageReference Include="Pathoschild.Http.FluentClient" Version="4.1.0" />
</ItemGroup>
<ItemGroup>
diff --git a/src/SMAPI.Web/ViewModels/IndexModel.cs b/src/SMAPI.Web/ViewModels/IndexModel.cs
index 450fdc0e..d8d2d27f 100644
--- a/src/SMAPI.Web/ViewModels/IndexModel.cs
+++ b/src/SMAPI.Web/ViewModels/IndexModel.cs
@@ -9,11 +9,8 @@ namespace StardewModdingAPI.Web.ViewModels
/// <summary>The latest stable SMAPI version.</summary>
public IndexVersionModel StableVersion { get; set; }
- /// <summary>The latest prerelease SMAPI version (if newer than <see cref="StableVersion"/>).</summary>
- public IndexVersionModel BetaVersion { get; set; }
-
- /// <summary>A short sentence shown under the beta download button, if any.</summary>
- public string BetaBlurb { get; set; }
+ /// <summary>A message to show below the download button (e.g. for details on downloading a beta version), in Markdown format.</summary>
+ public string OtherBlurb { get; set; }
/// <summary>A list of supports to credit on the main page, in Markdown format.</summary>
public string SupporterList { get; set; }
@@ -27,14 +24,12 @@ namespace StardewModdingAPI.Web.ViewModels
/// <summary>Construct an instance.</summary>
/// <param name="stableVersion">The latest stable SMAPI version.</param>
- /// <param name="betaVersion">The latest prerelease SMAPI version (if newer than <paramref name="stableVersion"/>).</param>
- /// <param name="betaBlurb">A short sentence shown under the beta download button, if any.</param>
+ /// <param name="otherBlurb">A message to show below the download button (e.g. for details on downloading a beta version), in Markdown format.</param>
/// <param name="supporterList">A list of supports to credit on the main page, in Markdown format.</param>
- internal IndexModel(IndexVersionModel stableVersion, IndexVersionModel betaVersion, string betaBlurb, string supporterList)
+ internal IndexModel(IndexVersionModel stableVersion, string otherBlurb, string supporterList)
{
this.StableVersion = stableVersion;
- this.BetaVersion = betaVersion;
- this.BetaBlurb = betaBlurb;
+ this.OtherBlurb = otherBlurb;
this.SupporterList = supporterList;
}
}
diff --git a/src/SMAPI.Web/Views/Index/Index.cshtml b/src/SMAPI.Web/Views/Index/Index.cshtml
index 9d6e4bed..669cfd99 100644
--- a/src/SMAPI.Web/Views/Index/Index.cshtml
+++ b/src/SMAPI.Web/Views/Index/Index.cshtml
@@ -8,9 +8,9 @@
ViewData["ViewTitle"] = string.Empty;
}
@section Head {
- <link rel="stylesheet" href="~/Content/css/index.css?r=20200105" />
+ <link rel="stylesheet" href="~/Content/css/index.css" />
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1" crossorigin="anonymous"></script>
- <script src="~/Content/js/index.js?r=20200105"></script>
+ <script src="~/Content/js/index.js"></script>
}
<h1>
@@ -29,25 +29,12 @@
<a href="https://www.nexusmods.com/stardewvalley/mods/2400"><img src="Content/images/nexus-icon.png" /> Download from Nexus</a>
<a href="@Model.StableVersion.DownloadUrl"><img src="Content/images/direct-download-icon.png" /> Direct download</a>
</div>
- </div><br />
-
- @if (Model.BetaVersion != null)
+ </div>
+ <div><a href="https://stardewvalleywiki.com/Modding:Player_Guide" class="secondary-cta">Player guide</a></div>
+ @if (Model.OtherBlurb != null)
{
- <div class="cta-dropdown secondary-cta-dropdown">
- <a href="@Model.BetaVersion.DownloadUrl" class="secondary-cta download">
- Download SMAPI @Model.BetaVersion.Version
- @if (!string.IsNullOrWhiteSpace(Model.BetaBlurb))
- {
- <br /><small>@Model.BetaBlurb</small>
- }
- </a><br />
- <div class="dropdown-content">
- <a href="https://www.nexusmods.com/stardewvalley/mods/2400"><img src="Content/images/nexus-icon.png" /> Download from Nexus</a>
- <a href="@Model.BetaVersion.DownloadUrl"><img src="Content/images/direct-download-icon.png" /> Direct download</a>
- </div>
- </div><br />
+ <div>@Html.Raw(Markdig.Markdown.ToHtml(Model.OtherBlurb))</div>
}
- <div><a href="https://stardewvalleywiki.com/Modding:Player_Guide" class="secondary-cta">Player guide</a></div>
</div>
<div class="area">
@@ -61,29 +48,11 @@
</div>
<div class="area">
- @if (Model.BetaVersion == null)
- {
- <h2 id="whatsnew">What's new</h2>
- <div class="github-description">
- @Html.Raw(Markdig.Markdown.ToHtml(Model.StableVersion.Description))
- </div>
- <p>See the <a href="https://github.com/Pathoschild/SMAPI/blob/develop/docs/release-notes.md#release-notes">release notes</a> and <a href="@Url.PlainAction("Index", "Mods")">mod compatibility list</a> for more info.</p>
- }
- else
- {
- <h2 id="whatsnew">What's new in...</h2>
- <h3>SMAPI @Model.StableVersion.Version?</h3>
- <div class="github-description">
- @Html.Raw(Markdig.Markdown.ToHtml(Model.StableVersion.Description))
- </div>
- <p>See the <a href="https://github.com/Pathoschild/SMAPI/blob/develop/docs/release-notes.md#release-notes">release notes</a> and <a href="@Url.PlainAction("Index", "Mods")">mod compatibility list</a> for more info.</p>
-
- <h3>SMAPI @Model.BetaVersion.Version?</h3>
- <div class="github-description">
- @Html.Raw(Markdig.Markdown.ToHtml(Model.BetaVersion.Description))
- </div>
- <p>See the <a href="https://github.com/Pathoschild/SMAPI/blob/develop/docs/release-notes.md#release-notes">release notes</a> and <a href="@Url.PlainAction("Index", "Mods")">mod compatibility list</a> for more info.</p>
- }
+ <h2 id="whatsnew">What's new</h2>
+ <div class="github-description">
+ @Html.Raw(Markdig.Markdown.ToHtml(Model.StableVersion.Description))
+ </div>
+ <p>See the <a href="https://github.com/Pathoschild/SMAPI/blob/develop/docs/release-notes.md#release-notes">release notes</a> and <a href="@Url.PlainAction("Index", "Mods")">mod compatibility list</a> for more info.</p>
</div>
<div class="area">
@@ -122,10 +91,6 @@
<h2 id="modcreators">For mod creators</h2>
<ul>
<li><a href="@Model.StableVersion.DevDownloadUrl">SMAPI @Model.StableVersion.Version for developers</a> (includes <a href="https://docs.microsoft.com/en-us/visualstudio/ide/using-intellisense">intellisense</a> and full console output)</li>
- @if (Model.BetaVersion != null)
- {
- <li><a href="@Model.BetaVersion.DevDownloadUrl">SMAPI @Model.BetaVersion.Version for developers</a> (includes <a href="https://docs.microsoft.com/en-us/visualstudio/ide/using-intellisense">intellisense</a> and full console output)</li>
- }
<li><a href="https://stardewvalleywiki.com/Modding:Index">Modding documentation</a></li>
<li><a href="https://github.com/Pathoschild/SMAPI">Source code</a></li>
</ul>
diff --git a/src/SMAPI.Web/appsettings.json b/src/SMAPI.Web/appsettings.json
index 22fd7396..0265a928 100644
--- a/src/SMAPI.Web/appsettings.json
+++ b/src/SMAPI.Web/appsettings.json
@@ -17,8 +17,7 @@
"Site": {
"BetaEnabled": false,
- "BetaBlurb": null,
- "SupporterList": null
+ "OtherBlurb": null
},
"ApiClients": {
@@ -76,6 +75,11 @@
"ID": "MartyrPher.SMAPI-Android-Installer",
"AllowNonStandardVersions": true
}
- ]
+ ],
+ "SmapiInfo": {
+ "ID": "Pathoschild.SMAPI",
+ "DefaultUpdateKey": "GitHub:Pathoschild/SMAPI",
+ "AddBetaUpdateKeys": [ "Nexus:2400" ]
+ }
}
}
diff --git a/src/SMAPI.Web/wwwroot/Content/css/index.css b/src/SMAPI.Web/wwwroot/Content/css/index.css
index 1cf8d261..150ccc0a 100644
--- a/src/SMAPI.Web/wwwroot/Content/css/index.css
+++ b/src/SMAPI.Web/wwwroot/Content/css/index.css
@@ -97,6 +97,10 @@ h1 {
display: block;
}
+.cta-blurb {
+ font-size: 0.85em;
+}
+
.sublinks {
font-size: 0.9em;
margin-bottom: 1em;
diff --git a/src/SMAPI.Web/wwwroot/SMAPI.metadata.json b/src/SMAPI.Web/wwwroot/SMAPI.metadata.json
index dcdd6298..bb166017 100644
--- a/src/SMAPI.Web/wwwroot/SMAPI.metadata.json
+++ b/src/SMAPI.Web/wwwroot/SMAPI.metadata.json
@@ -168,6 +168,60 @@
},
/*********
+ ** Broke in SDV 1.5.5
+ *********/
+ "Animated Portrait Framework": {
+ "ID": "akai.AnimatedPortrait",
+ "~1.0.0 | Status": "AssumeBroken",
+ "~1.0.0 | StatusReasonDetails": "requires the 'System.Windows.Forms' API, which isn't available in .NET 5"
+ },
+ "Audio Devices": {
+ "ID": "maxvollmer.audiodevices",
+ "~3.0.1 | Status": "AssumeBroken",
+ "~3.0.1 | StatusReasonDetails": "fails to load due to an outdated implementation of the game's 'IAudioEngine' interface"
+ },
+ "Battery Warning": {
+ "ID": "Husky110.BatteryWarningMod",
+ "~1.0.4 | Status": "AssumeBroken",
+ "~1.0.4 | StatusReasonDetails": "requires the 'System.Management' API, which is a different DLL in .NET 5"
+ },
+ "Junimo Studio": {
+ "ID": "Becks723.JunimoStudio",
+ "~2.0.1 | Status": "AssumeBroken",
+ "~2.0.1 | StatusReasonDetails": "requires 'Microsoft.Xna.Framework.Audio.AudioCategory' which doesn't exist in MonoGame"
+ },
+ "Skip Intro": {
+ "ID": "Pathoschild.SkipIntro",
+ "~1.9.1 | Status": "AssumeBroken",
+ "~1.9.1 | StatusReasonDetails": "causes freeze during game launch"
+ },
+ "Stardew Hack": {
+ "ID": "bcmpinc.StardewHack",
+ "~5.1.0 | Status": "AssumeBroken",
+ "~5.1.0 | StatusReasonDetails": "runtime error when initializing due to an API change between .NET Framework and .NET 5"
+ },
+ "Stardew Valley Expanded": {
+ "ID": "FlashShifter.SVECode",
+ "~1.13.11 | Status": "AssumeBroken",
+ "~1.13.11 | StatusReasonDetails": "fails to load due to an outdated implementation of the game's 'ICue' interface"
+ },
+ "Stardew Web": {
+ "ID": "prism99.stardewweb",
+ "~0.7.2 | Status": "AssumeBroken",
+ "~0.7.2 | StatusReasonDetails": "requires the 'System.Drawing' API, which isn't available in .NET 5"
+ },
+ "Sundrop City": {
+ "ID": "SundropTeam.SundropCity",
+ "~0.4.1 | Status": "AssumeBroken",
+ "~0.4.1 | StatusReasonDetails": "causes freeze during game launch"
+ },
+ "Video Player": {
+ "ID": "aedenthorn.VideoPlayer",
+ "~0.2.5 | Status": "AssumeBroken",
+ "~0.2.5 | StatusReasonDetails": "requires an XNA Framework API that's not available in MonoGame and causes a crash to desktop"
+ },
+
+ /*********
** Broke in SMAPI 3.12.0
*********/
"Always Scroll Map": {
@@ -205,11 +259,6 @@
"~1.9.3 | Status": "AssumeBroken",
"~1.9.3 | StatusReasonDetails": "fails to load with 'ReflectionTypeLoadException' error"
},
- "Stardew Hack": {
- "ID": "bcmpinc.StardewHack",
- "~5.0.0 | Status": "AssumeBroken",
- "~5.0.0 | StatusReasonDetails": "causes Harmony patching errors for other mods"
- },
"Tilled Soil Decay": {
"ID": "bcmpinc.TilledSoilDecay",
"~4.1.0 | Status": "AssumeBroken",
@@ -238,12 +287,6 @@
/*********
** Broke in SDV 1.5 (SMAPI mods)
*********/
- "Audio Devices": {
- "ID": "maxvollmer.audiodevices",
- "~2.0.0 | Status": "AssumeBroken",
- "~2.0.0 | StatusReasonDetails": "causes crash to desktop when starting the game"
- },
-
"ChestEx": {
"ID": "berkayylmao.ChestEx",
"~1.3.4 | Status": "AssumeBroken",
diff --git a/src/SMAPI.Web/wwwroot/schemas/content-patcher.json b/src/SMAPI.Web/wwwroot/schemas/content-patcher.json
index aac4ff0f..d39574ef 100644
--- a/src/SMAPI.Web/wwwroot/schemas/content-patcher.json
+++ b/src/SMAPI.Web/wwwroot/schemas/content-patcher.json
@@ -12,11 +12,11 @@
"properties": {
"Format": {
"title": "Format version",
- "description": "The format version. You should always use the latest version to enable the latest features and avoid obsolete behavior.",
+ "description": "The format version. You should always use the latest version to enable the latest features, avoid obsolete behavior, and reduce load times.",
"type": "string",
- "const": "1.23.0",
+ "const": "1.24.0",
"@errorMessages": {
- "const": "Incorrect value '@value'. This should be set to the latest format version, currently '1.23.0'."
+ "const": "Incorrect value '@value'. You should always use the latest format version (currently 1.24.0) to enable the latest features, avoid obsolete behavior, and reduce load times."
}
},
"ConfigSchema": {