Please disclose if your mod was created primarily 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 GenericObjectRemover v1.1.5
GenericObjectRemover.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("GenericObjectDestroyer")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("GenericObjectDestroyer")] [assembly: AssemblyCopyright("Copyright © 2021")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("215d162e-dea6-4c04-b4fa-bfcc7d711102")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.6.1", FrameworkDisplayName = ".NET Framework 4.6.1")] [assembly: AssemblyVersion("1.0.0.0")] namespace GenericObjectRemover; [BepInProcess("valheim.exe")] [BepInPlugin("juliandeclercq.GenericObjectRemover", "Generic Object Remover", "1.1.4")] public class GenericObjectRemover : BaseUnityPlugin { [HarmonyPatch(typeof(Terminal), "InitTerminal")] private static class InputText_Patch { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static ConsoleEvent <>9__2_0; public static ConsoleEvent <>9__2_1; internal void <Postfix>b__2_0(ConsoleEventArgs args) { switch (args.Length) { case 1: { ZNetView val = HoveringObjectRemovable(); ConsolePrint(((Object)(object)val == (Object)null) ? "Player is not hovering over a removable object." : ("Player is hovering over " + CustomFormat(((Object)((Component)val).gameObject).name) + ".")); break; } case 2: { if (int.TryParse(args[1], out var result)) { InspectRadius(result); } break; } default: ConsolePrint("Invalid amount of arguments for GORinspect. Expected syntax: |GORinspect| or |GORinspect [radius]|."); break; } } internal void <Postfix>b__2_1(ConsoleEventArgs args) { switch (args.Length) { case 2: RemoveObject(args[1].ToLower()); break; case 3: { if (int.TryParse(args[2], out var result)) { RemoveObjectRadius(args[1], result); } break; } default: ConsolePrint("Invalid amount of arguments for GORremove. Expected syntax: |GORremove [objectname]| or |GORremove [objectname] [radius]|."); break; } } } private const string inspect = "GORinspect"; private const string remove = "GORremove"; private static void Postfix(Terminal __instance) { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Expected O, but got Unknown //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected O, but got Unknown object obj = <>c.<>9__2_0; if (obj == null) { ConsoleEvent val = delegate(ConsoleEventArgs args) { switch (args.Length) { case 1: { ZNetView val3 = HoveringObjectRemovable(); ConsolePrint(((Object)(object)val3 == (Object)null) ? "Player is not hovering over a removable object." : ("Player is hovering over " + CustomFormat(((Object)((Component)val3).gameObject).name) + ".")); break; } case 2: { if (int.TryParse(args[1], out var result2)) { InspectRadius(result2); } break; } default: ConsolePrint("Invalid amount of arguments for GORinspect. Expected syntax: |GORinspect| or |GORinspect [radius]|."); break; } }; <>c.<>9__2_0 = val; obj = (object)val; } new ConsoleCommand("GORinspect", "Check the currently looked at object for removables. \nGORinspect [radius] - Check for removables in given radius around the player.", (ConsoleEvent)obj, false, false, false, false, false, (ConsoleOptionsFetcher)null, false, false, false); object obj2 = <>c.<>9__2_1; if (obj2 == null) { ConsoleEvent val2 = delegate(ConsoleEventArgs args) { switch (args.Length) { case 2: RemoveObject(args[1].ToLower()); break; case 3: { if (int.TryParse(args[2], out var result)) { RemoveObjectRadius(args[1], result); } break; } default: ConsolePrint("Invalid amount of arguments for GORremove. Expected syntax: |GORremove [objectname]| or |GORremove [objectname] [radius]|."); break; } }; <>c.<>9__2_1 = val2; obj2 = (object)val2; } new ConsoleCommand("GORremove", "[objectname] - Remove an object. (use GORinspect to retrieve a removable object's name) \nGORremove [objectname] [radius] - Remove all objects with given name in given radius around the player.", (ConsoleEvent)obj2, false, false, false, false, false, (ConsoleOptionsFetcher)null, false, false, false); } } private void Awake() { Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), (string)null); } private static ZNetView HoveringObjectRemovable() { object value = Traverse.Create((object)Player.m_localPlayer).Field("m_hovering").GetValue(); object obj = ((value is GameObject) ? value : null); if (obj == null) { return null; } return ((GameObject)obj).GetComponentInParent<ZNetView>(); } private static HashSet<ZNetView> RemovablesInRadius(int radius) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) HashSet<ZNetView> hashSet = new HashSet<ZNetView>(); Collider[] array = Physics.OverlapSphere(((Component)Player.m_localPlayer).transform.position, (float)radius, -1); for (int i = 0; i < array.Length; i++) { ZNetView componentInParent = ((Component)array[i]).GetComponentInParent<ZNetView>(); if ((Object)(object)componentInParent != (Object)null) { hashSet.Add(componentInParent); } } return hashSet; } private static void RemoveObject(string objectName) { ZNetView val = HoveringObjectRemovable(); if ((Object)(object)val == (Object)null) { ConsolePrint("Player is not hovering over a removable object."); return; } string text = CustomFormat(objectName); string text2 = CustomFormat(((Object)((Component)val).gameObject).name); if (!text.Equals(text2)) { ConsolePrint("Couldn't remove object. Received |" + text + "| expected |" + text2 + "|"); } else { val.Destroy(); ConsolePrint("Removed: " + objectName); } } private static void InspectRadius(int radius) { Dictionary<string, int> dictionary = new Dictionary<string, int>(); foreach (ZNetView item in RemovablesInRadius(radius)) { string key = CustomFormat(((Object)((Component)item).gameObject).name); dictionary.TryGetValue(key, out var value); dictionary[key] = value + 1; } foreach (KeyValuePair<string, int> item2 in dictionary) { ConsolePrint($"Found removable: {item2.Value}x {item2.Key} (radius = {radius})"); } } private static void RemoveObjectRadius(string objectName, int radius) { string target = CustomFormat(objectName); IEnumerable<ZNetView> enumerable = from x in RemovablesInRadius(radius) where CustomFormat(((Object)((Component)x).gameObject).name).Equals(target) select x; foreach (ZNetView item in enumerable) { item.Destroy(); } ConsolePrint($"Removed {enumerable.Count()}x {target} (radius = {radius})"); } private static string CustomFormat(string input) { int num = input.IndexOf('('); if (num == -1) { return input.ToLower(); } if (input.IndexOf(')') == -1) { return input.ToLower(); } return input.Substring(0, num).ToLower(); } private static void ConsolePrint(string line) { Traverse.Create((object)Console.instance).Method("Print", new object[1] { line }).GetValue(); } }