diff --git a/AbsorbentSoil/AbsorbentSoilMod.cs b/AbsorbentSoil/AbsorbentSoilMod.cs index 936251a..ee9a8ae 100644 --- a/AbsorbentSoil/AbsorbentSoilMod.cs +++ b/AbsorbentSoil/AbsorbentSoilMod.cs @@ -139,49 +139,31 @@ namespace AbsorbentSoil internal static class SoilHelper { + private static readonly FieldInfo RemainingSoilUsesField = + AccessTools.Field(typeof(GrowContainer), "_remainingSoilUses"); + public static bool IsRetainingSoil(Pot pot) { - string soilId = GetSoilId(pot); - if (string.IsNullOrWhiteSpace(soilId)) + if (pot == null || string.IsNullOrWhiteSpace(pot.SoilID)) return false; - soilId = soilId.ToLowerInvariant(); - return soilId.Contains("longlifesoil") || soilId.Contains("extralonglifesoil"); + string soilId = pot.SoilID.ToLowerInvariant(); + + return soilId.Contains("longlifesoil") || + soilId.Contains("extralonglifesoil"); } - public static string GetSoilId(Pot pot) + public static int GetRemainingSoilUses(Pot pot) { - if (pot == null) - return string.Empty; + if (pot == null || RemainingSoilUsesField == null) + return 0; - object soilId = ReadMember(pot, "SoilID") ?? ReadMember(pot, "soilID") ?? ReadMember(pot, "SoilId") ?? ReadMember(pot, "soilId"); - return soilId?.ToString() ?? string.Empty; + return (int)RemainingSoilUsesField.GetValue(pot); } - private static object ReadMember(object instance, string name) + public static bool CanRetainAdditives(Pot pot) { - if (instance == null || string.IsNullOrWhiteSpace(name)) - return null; - - Type type = instance.GetType(); - while (type != null) - { - PropertyInfo prop = AccessTools.Property(type, name); - if (prop != null) - { - try { return prop.GetValue(instance); } catch { } - } - - FieldInfo field = AccessTools.Field(type, name); - if (field != null) - { - try { return field.GetValue(instance); } catch { } - } - - type = type.BaseType; - } - - return null; + return IsRetainingSoil(pot) && GetRemainingSoilUses(pot) > 0; } } @@ -251,7 +233,7 @@ namespace AbsorbentSoil Pot pot = __instance.Pot; - if (!SoilHelper.IsRetainingSoil(pot)) + if (!SoilHelper.CanRetainAdditives(pot)) { AdditiveMemory.Forget(pot); return; @@ -276,21 +258,15 @@ namespace AbsorbentSoil [HarmonyPatch(typeof(Pot), "OnPlantFullyHarvested")] internal static class Pot_OnPlantFullyHarvested_Patch { - public static void Postfix(Pot __instance) + private static void Postfix(Pot __instance) { - try - { - if (__instance == null) - return; + if (__instance == null) + return; - // After the game's harvest logic runs, if soil was consumed/removed or is no longer retaining soil, - // clear the retained additives so freshly re-poured soil starts clean. - if (!SoilHelper.IsRetainingSoil(__instance)) - AdditiveMemory.Forget(__instance); - } - catch (Exception ex) + if (!SoilHelper.CanRetainAdditives(__instance)) { - MelonLogger.Warning($"OnPlantFullyHarvested postfix failed: {ex}"); + AdditiveMemory.Forget(__instance); + MelonLogger.Msg("[Absorbent Soil] Cleared retained additives because soil has no retaining uses left."); } } } diff --git a/AbsorbentSoil/bin/Release/net6.0/AbsorbentSoil.deps.json b/AbsorbentSoil/bin/Release/net6.0/AbsorbentSoil.deps.json deleted file mode 100644 index 074dff0..0000000 --- a/AbsorbentSoil/bin/Release/net6.0/AbsorbentSoil.deps.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v6.0", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v6.0": { - "AbsorbentSoil/1.0.0": { - "runtime": { - "AbsorbentSoil.dll": {} - } - } - } - }, - "libraries": { - "AbsorbentSoil/1.0.0": { - "type": "project", - "serviceable": false, - "sha512": "" - } - } -} \ No newline at end of file diff --git a/AbsorbentSoil/bin/Release/net6.0/AbsorbentSoil.pdb b/AbsorbentSoil/bin/Release/net6.0/AbsorbentSoil.pdb deleted file mode 100644 index 4e949ea..0000000 Binary files a/AbsorbentSoil/bin/Release/net6.0/AbsorbentSoil.pdb and /dev/null differ diff --git a/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.AssemblyInfo.cs b/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.AssemblyInfo.cs index 9d98a04..7b132cd 100644 --- a/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.AssemblyInfo.cs +++ b/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("AbsorbentSoil")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+1374b2e929263849b9362bc2032e73ac19079563")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+57f6a7917f7640bd65cefb3f66b24ea34b817e0c")] [assembly: System.Reflection.AssemblyProductAttribute("AbsorbentSoil")] [assembly: System.Reflection.AssemblyTitleAttribute("AbsorbentSoil")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.AssemblyInfoInputs.cache b/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.AssemblyInfoInputs.cache index de68f8b..d6bf4c6 100644 --- a/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.AssemblyInfoInputs.cache +++ b/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.AssemblyInfoInputs.cache @@ -1 +1 @@ -c2488a0a4e0149be33c85611dadce8edca6655bd5fdedcb3c238565f85b2d0ec +8a3855f139cd66387b0e747834f0fb38e6416f2dc381e733183dbdeaa1f21465 diff --git a/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.csproj.FileListAbsolute.txt b/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.csproj.FileListAbsolute.txt index 96cd45d..e6c9830 100644 --- a/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.csproj.FileListAbsolute.txt +++ b/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.csproj.FileListAbsolute.txt @@ -1,12 +1,5 @@ -/home/attila/Projects/Schedule-1/AbsorbentSoilMod/AbsorbentSoil/bin/Release/net6.0/AbsorbentSoil.deps.json -/home/attila/Projects/Schedule-1/AbsorbentSoilMod/AbsorbentSoil/bin/Release/net6.0/AbsorbentSoil.dll -/home/attila/Projects/Schedule-1/AbsorbentSoilMod/AbsorbentSoil/bin/Release/net6.0/AbsorbentSoil.pdb /home/attila/Projects/Schedule-1/AbsorbentSoilMod/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.csproj.AssemblyReference.cache /home/attila/Projects/Schedule-1/AbsorbentSoilMod/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.GeneratedMSBuildEditorConfig.editorconfig /home/attila/Projects/Schedule-1/AbsorbentSoilMod/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.AssemblyInfoInputs.cache /home/attila/Projects/Schedule-1/AbsorbentSoilMod/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.AssemblyInfo.cs /home/attila/Projects/Schedule-1/AbsorbentSoilMod/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.csproj.CoreCompileInputs.cache -/home/attila/Projects/Schedule-1/AbsorbentSoilMod/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.dll -/home/attila/Projects/Schedule-1/AbsorbentSoilMod/AbsorbentSoil/obj/Release/net6.0/refint/AbsorbentSoil.dll -/home/attila/Projects/Schedule-1/AbsorbentSoilMod/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.pdb -/home/attila/Projects/Schedule-1/AbsorbentSoilMod/AbsorbentSoil/obj/Release/net6.0/ref/AbsorbentSoil.dll diff --git a/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.dll b/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.dll deleted file mode 100644 index 454561f..0000000 Binary files a/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.dll and /dev/null differ diff --git a/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.pdb b/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.pdb deleted file mode 100644 index 4e949ea..0000000 Binary files a/AbsorbentSoil/obj/Release/net6.0/AbsorbentSoil.pdb and /dev/null differ diff --git a/AbsorbentSoil/obj/Release/net6.0/ref/AbsorbentSoil.dll b/AbsorbentSoil/obj/Release/net6.0/ref/AbsorbentSoil.dll deleted file mode 100644 index d376aeb..0000000 Binary files a/AbsorbentSoil/obj/Release/net6.0/ref/AbsorbentSoil.dll and /dev/null differ diff --git a/AbsorbentSoil/obj/Release/net6.0/refint/AbsorbentSoil.dll b/AbsorbentSoil/obj/Release/net6.0/refint/AbsorbentSoil.dll deleted file mode 100644 index d376aeb..0000000 Binary files a/AbsorbentSoil/obj/Release/net6.0/refint/AbsorbentSoil.dll and /dev/null differ