Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of HideWater v1.0.0
plugins/HideWater/HideWater.dll
Decompiled a week agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("HideWater")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("HideWater")] [assembly: AssemblyTitle("HideWater")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace LocalMods { [BepInPlugin("com.local.valheim.hidewater", "HideWater", "1.0.0")] public sealed class HideWater : BaseUnityPlugin { private ConfigEntry<KeyboardShortcut> toggleKey; private ConfigEntry<bool> startHidden; private readonly HashSet<Renderer> renderers = new HashSet<Renderer>(); private readonly Dictionary<Renderer, bool> savedStates = new Dictionary<Renderer, bool>(); private readonly List<Renderer> stale = new List<Renderer>(); private ZNetScene world; private bool hidden; private bool loggedScan; private float nextScan; private void Awake() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) toggleKey = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("General", "ToggleKey", new KeyboardShortcut((KeyCode)290, Array.Empty<KeyCode>()), "Toggle water rendering. Supports modifier keys; F8 is reserved for Fish Tracker."); startHidden = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "StartHidden", false, "Hide water automatically on each world entry."); } private void Update() { //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) ZNetScene instance = ZNetScene.instance; if (world != instance) { Restore(); renderers.Clear(); world = instance; hidden = startHidden.Value; loggedScan = false; nextScan = 0f; if (Object.op_Implicit((Object)(object)world) && hidden) { LogState(); } } if (!Object.op_Implicit((Object)(object)world)) { return; } if (Time.unscaledTime >= nextScan) { Scan(); nextScan = Time.unscaledTime + 2f; } if (!Object.op_Implicit((Object)(object)Player.m_localPlayer)) { return; } KeyboardShortcut value = toggleKey.Value; if (((KeyboardShortcut)(ref value)).IsDown()) { hidden = !hidden; if (hidden) { Scan(); } else { Restore(); } LogState(); } } private void Scan() { renderers.RemoveWhere((Renderer renderer) => !Object.op_Implicit((Object)(object)renderer)); stale.Clear(); foreach (KeyValuePair<Renderer, bool> savedState in savedStates) { if (!Object.op_Implicit((Object)(object)savedState.Key)) { stale.Add(savedState.Key); } } foreach (Renderer item in stale) { savedStates.Remove(item); } foreach (WaterVolume instance in WaterVolume.Instances) { if (Object.op_Implicit((Object)(object)instance) && Object.op_Implicit((Object)(object)instance.m_waterSurface)) { renderers.Add((Renderer)(object)instance.m_waterSurface); } } foreach (Water instance2 in Water.Instances) { if (Object.op_Implicit((Object)(object)instance2)) { MeshRenderer component = ((Component)instance2).GetComponent<MeshRenderer>(); if (Object.op_Implicit((Object)(object)component)) { renderers.Add((Renderer)(object)component); } } } if (!loggedScan && renderers.Count > 0) { ((BaseUnityPlugin)this).Logger.LogInfo((object)$"Found {renderers.Count} water renderers"); loggedScan = true; } if (hidden) { HideRenderers(); } } private void LateUpdate() { if (Object.op_Implicit((Object)(object)world) && hidden) { HideRenderers(); } } private void HideRenderers() { foreach (Renderer renderer in renderers) { if (Object.op_Implicit((Object)(object)renderer)) { if (!savedStates.ContainsKey(renderer)) { savedStates.Add(renderer, renderer.enabled); } if (renderer.enabled) { renderer.enabled = false; } } } } private void Restore() { foreach (KeyValuePair<Renderer, bool> savedState in savedStates) { if (Object.op_Implicit((Object)(object)savedState.Key)) { savedState.Key.enabled = savedState.Value; } } savedStates.Clear(); } private void LogState() { ((BaseUnityPlugin)this).Logger.LogInfo((object)(hidden ? "Water rendering disabled" : "Water rendering enabled")); } private void OnDisable() { Restore(); renderers.Clear(); world = null; } private void OnDestroy() { Restore(); } } }