summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/release-notes.md1
-rw-r--r--src/SMAPI/Framework/ModHelpers/ContentHelper.cs14
-rw-r--r--src/SMAPI/IContentHelper.cs6
3 files changed, 21 insertions, 0 deletions
diff --git a/docs/release-notes.md b/docs/release-notes.md
index cde3a50d..1eac1d62 100644
--- a/docs/release-notes.md
+++ b/docs/release-notes.md
@@ -17,6 +17,7 @@
* For modders:
* Added map patching to the content API (via `asset.AsMap()`).
+ * Added support for using patch helpers (e.g. for image/map patching) with arbitrary data (via `helper.Content.GetPatchHelper`).
* Added `SDate` fields/methods: `SeasonIndex`, `FromDaysSinceStart`, `FromWorldDate`, `ToWorldDate`, and `ToLocaleString` (thanks to kdau!).
* Added `SDate` translations taken from the Lookup Anything mod.ยน
* Fixed asset propagation on Linux/Mac for monster sprites, NPC dialogue, and NPC schedules.
diff --git a/src/SMAPI/Framework/ModHelpers/ContentHelper.cs b/src/SMAPI/Framework/ModHelpers/ContentHelper.cs
index e9b70845..23e45fd1 100644
--- a/src/SMAPI/Framework/ModHelpers/ContentHelper.cs
+++ b/src/SMAPI/Framework/ModHelpers/ContentHelper.cs
@@ -7,6 +7,7 @@ using System.IO;
using System.Linq;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
+using StardewModdingAPI.Framework.Content;
using StardewModdingAPI.Framework.ContentManagers;
using StardewModdingAPI.Framework.Exceptions;
using StardewValley;
@@ -164,6 +165,19 @@ namespace StardewModdingAPI.Framework.ModHelpers
return this.ContentCore.InvalidateCache(predicate).Any();
}
+ /// <summary>Get a patch helper for arbitrary data.</summary>
+ /// <typeparam name="T">The data type.</typeparam>
+ /// <param name="data">The asset data.</param>
+ /// <param name="assetName">The asset name. This is only used for tracking purposes and has no effect on the patch helper.</param>
+ public IAssetData GetPatchHelper<T>(T data, string assetName = null)
+ {
+ if (data == null)
+ throw new ArgumentNullException(nameof(data), "Can't get a patch helper for a null value.");
+
+ assetName ??= $"temp/{Guid.NewGuid():N}";
+ return new AssetDataForObject(this.CurrentLocale, assetName, data, this.NormalizeAssetName);
+ }
+
/*********
** Private methods
diff --git a/src/SMAPI/IContentHelper.cs b/src/SMAPI/IContentHelper.cs
index dd7eb758..2936ecfb 100644
--- a/src/SMAPI/IContentHelper.cs
+++ b/src/SMAPI/IContentHelper.cs
@@ -64,5 +64,11 @@ namespace StardewModdingAPI
/// <param name="predicate">A predicate matching the assets to invalidate.</param>
/// <returns>Returns whether any cache entries were invalidated.</returns>
bool InvalidateCache(Func<IAssetInfo, bool> predicate);
+
+ /// <summary>Get a patch helper for arbitrary data.</summary>
+ /// <typeparam name="T">The data type.</typeparam>
+ /// <param name="data">The asset data.</param>
+ /// <param name="assetName">The asset name. This is only used for tracking purposes and has no effect on the patch helper.</param>
+ IAssetData GetPatchHelper<T>(T data, string assetName = null);
}
}