using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Unity.IL2CPP; using Fishing; using HarmonyLib; using Microsoft.CodeAnalysis; using Riverboat.Players; using Riverboat.UI; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("HabitatInfo")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("HabitatInfo")] [assembly: AssemblyTitle("HabitatInfo")] [assembly: AssemblyVersion("1.0.0.0")] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace HabitatInfo { [BepInPlugin("com.habitat.info", "HabitatInfo", "1.0.0")] public class Plugin : BasePlugin { public static Plugin? Instance; public static string CurrentTags = ""; public override void Load() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown Instance = this; ((BasePlugin)this).Log.LogInfo((object)"HabitatInfo loaded!"); Harmony val = new Harmony("com.habitat.info"); val.PatchAll(); } public static string LoadTagsFromArea(FishingArea area) { try { MethodInfo method = typeof(FishingArea).GetMethod("get_EnvironmentTags", BindingFlags.Instance | BindingFlags.Public); if (method != null) { object obj = method.Invoke(area, null); if (obj != null) { Type type = obj.GetType(); int num = (int)(type.GetProperty("Count")?.GetValue(obj) ?? ((object)0)); PropertyInfo property = type.GetProperty("Item"); List list = new List(); for (int i = 0; i < num; i++) { object obj2 = property?.GetValue(obj, new object[1] { i }); if (obj2 != null) { string text = obj2.GetType().GetProperty("tagName", BindingFlags.Instance | BindingFlags.Public)?.GetValue(obj2)?.ToString(); if (!string.IsNullOrEmpty(text)) { list.Add(text); } } } if (list.Count > 0) { return string.Join(" | ", list); } } } } catch { } return ""; } } [HarmonyPatch(typeof(PlayerCasting), "Update")] public class PlayerCastingUpdatePatch { private static bool _wasInWater; private static void Postfix(PlayerCasting __instance) { //IL_0098: Unknown result type (might be due to invalid IL or missing references) try { if (!__instance.HasBobber() && _wasInWater) { _wasInWater = false; Plugin.CurrentTags = ""; GameNotification instance = GameNotification.Instance; if (instance != null) { instance.HideNotification(); } return; } Bobber bobber = __instance.Bobber; if ((Object)(object)bobber == (Object)null) { return; } bool flag = bobber.IsInWater(); if (flag && !_wasInWater) { _wasInWater = true; FishingManager val = Object.FindObjectOfType(); if ((Object)(object)val != (Object)null) { FishingArea val2 = val.FindFishingArea(((Component)bobber).transform.position); if ((Object)(object)val2 != (Object)null) { Plugin.CurrentTags = Plugin.LoadTagsFromArea(val2); } } string text = (string.IsNullOrEmpty(Plugin.CurrentTags) ? "Loading habitat..." : Plugin.CurrentTags); GameNotification instance2 = GameNotification.Instance; if (instance2 != null) { instance2.ShowPersistentNotification(text); } } else if (!flag && _wasInWater) { _wasInWater = false; Plugin.CurrentTags = ""; GameNotification instance3 = GameNotification.Instance; if (instance3 != null) { instance3.HideNotification(); } } } catch { } } } }