summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2019-12-14 22:11:25 -0500
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2019-12-14 22:11:25 -0500
commit5ea5932661316e2504833951188eae4118f460f3 (patch)
tree3bb6886aa4e17e6c2dbafa4ddb9579d1f25a8d99
parent16f986c51b9c87c2253a39fd771dcc24f7c43db4 (diff)
downloadSMAPI-5ea5932661316e2504833951188eae4118f460f3.tar.gz
SMAPI-5ea5932661316e2504833951188eae4118f460f3.tar.bz2
SMAPI-5ea5932661316e2504833951188eae4118f460f3.zip
add asset propagation for bundles
-rw-r--r--docs/release-notes.md5
-rw-r--r--src/SMAPI/Metadata/CoreAssetPropagator.cs25
2 files changed, 28 insertions, 2 deletions
diff --git a/docs/release-notes.md b/docs/release-notes.md
index 6f06d3d2..9ea7bfce 100644
--- a/docs/release-notes.md
+++ b/docs/release-notes.md
@@ -4,12 +4,13 @@
## Upcoming release
* For players:
- * Updated for the 'Force Off' gamepad mode added in Stardew Valley 1.4.0.1.
- * Fixed compatibility issue with Arch Linux.
+ * Updated for the 'Force Off' gamepad mode added in Stardew Valley 1.4.1.
+ * Fixed compatibility with Arch Linux.
* Internal optimizations.
* For modders:
* Added asset propagation for grass textures.
+ * Added asset propagation for `Data\Bundles` changes (for added bundles only).
* `helper.Read/WriteSaveData` can now be used while a save is being loaded (e.g. within a `Specialized.LoadStageChanged` event).
* Fixed private textures loaded from content packs not having their `Name` field set.
diff --git a/src/SMAPI/Metadata/CoreAssetPropagator.cs b/src/SMAPI/Metadata/CoreAssetPropagator.cs
index 84102828..97093636 100644
--- a/src/SMAPI/Metadata/CoreAssetPropagator.cs
+++ b/src/SMAPI/Metadata/CoreAssetPropagator.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using Microsoft.Xna.Framework.Graphics;
+using Netcode;
using StardewModdingAPI.Framework.Reflection;
using StardewValley;
using StardewValley.BellsAndWhistles;
@@ -11,6 +12,7 @@ using StardewValley.Characters;
using StardewValley.GameData.Movies;
using StardewValley.Locations;
using StardewValley.Menus;
+using StardewValley.Network;
using StardewValley.Objects;
using StardewValley.Projectiles;
using StardewValley.TerrainFeatures;
@@ -227,6 +229,29 @@ namespace StardewModdingAPI.Metadata
Game1.bigCraftablesInformation = content.Load<Dictionary<int, string>>(key);
return true;
+ case "data\\bundles": // NetWorldState constructor
+ {
+ var bundles = this.Reflection.GetField<NetBundles>(Game1.netWorldState.Value, "bundles").GetValue();
+ var rewards = this.Reflection.GetField<NetIntDictionary<bool, NetBool>>(Game1.netWorldState.Value, "bundleRewards").GetValue();
+ foreach (var pair in content.Load<Dictionary<string, string>>(key))
+ {
+ int bundleKey = int.Parse(pair.Key.Split('/')[1]);
+ int rewardsCount = pair.Value.Split('/')[2].Split(' ').Length;
+
+ // add bundles
+ if (bundles.TryGetValue(bundleKey, out bool[] values))
+ bundles.Remove(bundleKey);
+ else
+ values = new bool[0];
+ bundles[bundleKey] = values.Concat(Enumerable.Repeat(false, rewardsCount - values.Length)).ToArray();
+
+ // add bundle rewards
+ if (!rewards.ContainsKey(bundleKey))
+ rewards[bundleKey] = false;
+ }
+ }
+ break;
+
case "data\\clothinginformation": // Game1.LoadContent
Game1.clothingInformation = content.Load<Dictionary<int, string>>(key);
return true;