From 6b8cec8bc0283979b15f7436b527d3d9e25fcaed Mon Sep 17 00:00:00 2001 From: Amy Date: Wed, 9 Mar 2022 16:35:45 -0800 Subject: [PATCH 1/4] Add code to configure pregnancy-trigger item from JSON --- ButcherMod/animals/data/PregnancyData.cs | 35 +++++++++++++++++++ ButcherMod/common/DataLoader.cs | 5 +++ .../tools/InseminationSyringeOverrides.cs | 19 +++++++--- 3 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 ButcherMod/animals/data/PregnancyData.cs diff --git a/ButcherMod/animals/data/PregnancyData.cs b/ButcherMod/animals/data/PregnancyData.cs new file mode 100644 index 0000000..efb022f --- /dev/null +++ b/ButcherMod/animals/data/PregnancyData.cs @@ -0,0 +1,35 @@ +using StardewValley; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SObject = StardewValley.Object; + + +namespace AnimalHusbandryMod.animals.data +{ + public class PregnancyData + { + public Dictionary PreganancyItems; + + public PregnancyData() + { + PreganancyItems = new Dictionary(); + } + + public bool MatchingPregnancyItem(FarmAnimal animal, SObject o) + { + if (animal == null || o == null) + { + return false; + } + else if (!PreganancyItems.ContainsKey(animal.displayType)) + { + AnimalHusbandryModEntry.monitor.Log($"Dont know anything about {animal.displayType}"); + return false; + } + return PreganancyItems.ContainsKey(animal.displayType) && PreganancyItems[animal.displayType].Equals(o.Name); + } + } +} diff --git a/ButcherMod/common/DataLoader.cs b/ButcherMod/common/DataLoader.cs index 9ef971c..25625e0 100644 --- a/ButcherMod/common/DataLoader.cs +++ b/ButcherMod/common/DataLoader.cs @@ -30,6 +30,7 @@ public class DataLoader : IAssetEditor, IAssetLoader public static AnimalData AnimalData; public static AnimalBuildingData AnimalBuildingData; public static AnimalContestData AnimalContestData; + public static PregnancyData PregnancyData; public static String LooseSpritesName; public static Texture2D LooseSprites; @@ -93,6 +94,10 @@ public DataLoader(IModHelper helper, IManifest manifest) // load Livin' With The Animals channel TvController.AddChannel(new LivingWithTheAnimalsChannel()); + // load the pregnancy item config + PregnancyData = Helper.Data.ReadJsonFile("data\\pregnancyitems.json") ?? new PregnancyData(); + Helper.Data.WriteJsonFile("data\\pregnancyitems.json", PregnancyData); + // add editors (must happen *after* data is initialised above, since SMAPI may reload affected assets immediately) var editors = Helper.Content.AssetEditors; var loaders = Helper.Content.AssetLoaders; diff --git a/ButcherMod/tools/InseminationSyringeOverrides.cs b/ButcherMod/tools/InseminationSyringeOverrides.cs index a66f2de..6d3cfa3 100644 --- a/ButcherMod/tools/InseminationSyringeOverrides.cs +++ b/ButcherMod/tools/InseminationSyringeOverrides.cs @@ -235,7 +235,7 @@ public static bool canThisBeAttached(Tool __instance, SObject o, ref bool __resu { if (!IsInseminationSyringe(__instance)) return true; - __result = o == null || DataLoader.AnimalData.SyringeItemsIds.Contains(o.ParentSheetIndex); + __result = o == null || DataLoader.AnimalData.SyringeItemsIds.Contains(o.ParentSheetIndex) || DataLoader.PregnancyData.PreganancyItems.ContainsValue(o.Name); return false; } @@ -299,9 +299,20 @@ private static bool IsInseminationSyringe(Item tool) private static bool CheckCorrectProduct(FarmAnimal animal, SObject o) { - return animal.defaultProduceIndex.Value == o.ParentSheetIndex - || (((ImpregnatableAnimalItem)DataLoader.AnimalData.GetAnimalItem(animal)).CanUseDeluxeItemForPregnancy - && animal.deluxeProduceIndex.Value == o.ParentSheetIndex); + if (DataLoader.PregnancyData.PreganancyItems.ContainsKey(animal.displayType)) + { + return DataLoader.PregnancyData.MatchingPregnancyItem(animal, o); + } + else if (animal.defaultProduceIndex.Value == o.ParentSheetIndex) + { + return true; + } + else if (((ImpregnatableAnimalItem)DataLoader.AnimalData.GetAnimalItem(animal)).CanUseDeluxeItemForPregnancy + && animal.deluxeProduceIndex.Value == o.ParentSheetIndex) + { + return true; + } + return false; } public static bool IsEggAnimal(FarmAnimal animal) From 40c2c31db576b8056d36970d68b003836cfaad87 Mon Sep 17 00:00:00 2001 From: Amy Date: Wed, 9 Mar 2022 19:42:41 -0800 Subject: [PATCH 2/4] Move json file --- ButcherMod/common/DataLoader.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ButcherMod/common/DataLoader.cs b/ButcherMod/common/DataLoader.cs index 25625e0..8a402c5 100644 --- a/ButcherMod/common/DataLoader.cs +++ b/ButcherMod/common/DataLoader.cs @@ -95,8 +95,8 @@ public DataLoader(IModHelper helper, IManifest manifest) TvController.AddChannel(new LivingWithTheAnimalsChannel()); // load the pregnancy item config - PregnancyData = Helper.Data.ReadJsonFile("data\\pregnancyitems.json") ?? new PregnancyData(); - Helper.Data.WriteJsonFile("data\\pregnancyitems.json", PregnancyData); + PregnancyData = Helper.Data.ReadJsonFile("data\\pregnancydata.json") ?? new PregnancyData(); + Helper.Data.WriteJsonFile("data\\pregnancydata.json", PregnancyData); // add editors (must happen *after* data is initialised above, since SMAPI may reload affected assets immediately) var editors = Helper.Content.AssetEditors; From 8082d8d1be1be19646cfb86158a345c0e76ebf34 Mon Sep 17 00:00:00 2001 From: Amy Date: Wed, 9 Mar 2022 19:43:08 -0800 Subject: [PATCH 3/4] Use correct string when reporting required item for pregnancy --- ButcherMod/animals/data/PregnancyData.cs | 10 ++++++++++ ButcherMod/tools/InseminationSyringeOverrides.cs | 5 +++++ 2 files changed, 15 insertions(+) diff --git a/ButcherMod/animals/data/PregnancyData.cs b/ButcherMod/animals/data/PregnancyData.cs index efb022f..0d57425 100644 --- a/ButcherMod/animals/data/PregnancyData.cs +++ b/ButcherMod/animals/data/PregnancyData.cs @@ -31,5 +31,15 @@ public bool MatchingPregnancyItem(FarmAnimal animal, SObject o) } return PreganancyItems.ContainsKey(animal.displayType) && PreganancyItems[animal.displayType].Equals(o.Name); } + + public string GetPregnancyItemName(FarmAnimal animal) + { + if (PreganancyItems.ContainsKey(animal.displayType)) + { + return PreganancyItems[animal.displayType]; + } + AnimalHusbandryModEntry.monitor.Log($"Dont know anything about {animal.displayType}"); + return ""; + } } } diff --git a/ButcherMod/tools/InseminationSyringeOverrides.cs b/ButcherMod/tools/InseminationSyringeOverrides.cs index 6d3cfa3..4c380ec 100644 --- a/ButcherMod/tools/InseminationSyringeOverrides.cs +++ b/ButcherMod/tools/InseminationSyringeOverrides.cs @@ -135,6 +135,11 @@ public static bool beginUsing(MilkPail __instance, GameLocation location, int x, { var data = DataLoader.Helper.Content.Load>(@"Data\ObjectInformation.xnb", ContentSource.GameContent); string produceName = data[animal.defaultProduceIndex.Value].Split('/')[4]; + string customProduceName = DataLoader.PregnancyData.GetPregnancyItemName(animal); + if (customProduceName != "") + { + produceName = customProduceName; + } dialogue = DataLoader.i18n.Get("Tool.InseminationSyringe.CorrectItem", new { itemName = produceName }); } else if (PregnancyController.CheckBuildingLimit(animal)) From 6c6e1e0510d1d40133440b5cd93407d66f2cd387 Mon Sep 17 00:00:00 2001 From: Amy Date: Wed, 9 Mar 2022 20:18:20 -0800 Subject: [PATCH 4/4] Check for Male in displayNAme or displayType; validate produceIndex before using it to access data[] --- ButcherMod/tools/InseminationSyringeOverrides.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ButcherMod/tools/InseminationSyringeOverrides.cs b/ButcherMod/tools/InseminationSyringeOverrides.cs index 4c380ec..eec9b42 100644 --- a/ButcherMod/tools/InseminationSyringeOverrides.cs +++ b/ButcherMod/tools/InseminationSyringeOverrides.cs @@ -111,6 +111,10 @@ public static bool beginUsing(MilkPail __instance, GameLocation location, int x, { dialogue = DataLoader.i18n.Get("Tool.InseminationSyringe.EggAnimal", new { animalName = animal.displayName }); } + else if (animal.displayName.Contains("Male") || animal.displayType.Contains("Male")) + { + dialogue = DataLoader.i18n.Get("Tool.InseminationSyringe.CantBeInseminated", new { animalName = animal.displayName }); + } else if (!((ImpregnatableAnimalItem)DataLoader.AnimalData.GetAnimalItem(animal)).MinimumDaysUtillBirth.HasValue) { dialogue = DataLoader.i18n.Get("Tool.InseminationSyringe.CantBeInseminated", new { animalName = animal.displayName }); @@ -134,7 +138,11 @@ public static bool beginUsing(MilkPail __instance, GameLocation location, int x, else if (!CheckCorrectProduct(animal, __instance.attachments[0])) { var data = DataLoader.Helper.Content.Load>(@"Data\ObjectInformation.xnb", ContentSource.GameContent); - string produceName = data[animal.defaultProduceIndex.Value].Split('/')[4]; + string produceName = "the correct item"; + if (animal.defaultProduceIndex.Value > 0) + { + produceName = data[animal.defaultProduceIndex.Value].Split('/')[4]; + } string customProduceName = DataLoader.PregnancyData.GetPregnancyItemName(animal); if (customProduceName != "") {