using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.NET.Common; using BepInExResoniteShim; using Elements.Core; using FrooxEngine; using FrooxEngine.ProtoFlux; using HarmonyLib; using SkyFrost.Base; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(/*Could not decode attribute arguments.*/)] [assembly: TargetFramework(".NETCoreApp,Version=v10.0", FrameworkDisplayName = ".NET 10.0")] [assembly: AssemblyCompany("badhaloninja")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyCopyright("Copyright © badhaloninja 2024")] [assembly: AssemblyFileVersion("2.1.1.0")] [assembly: AssemblyInformationalVersion("2.1.1+203c7717e79342402ded369d13df53d9558f70cb")] [assembly: AssemblyProduct("DeselectOwnGizmos")] [assembly: AssemblyTitle("DeselectOwnGizmos")] [assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/Gyztor/BepisDelesectOwnGizmos")] [assembly: AssemblyVersion("2.1.1.0")] [module: RefSafetyRules(11)] namespace DeselectOwnGizmos; [ResonitePlugin("dev.badhaloninja.deselectowngizmos", "DeselectOwnGizmos", "2.1.1", "badhaloninja", "https://github.com/Gyztor/BepisDelesectOwnGizmos")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class DeselectOwnGizmos : BasePlugin { [HarmonyPatch] private static class ToolPatches { [HarmonyPostfix] [HarmonyPatch(typeof(DevTool), "GenerateMenuItems")] public static void AddDeselectButton(DevTool __instance, ContextMenu menu, SyncRef ____currentGizmo, SyncRef ____previousGizmo) { //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Expected O, but got Unknown Uri val = ((SkyFrostInterface)((Worker)__instance).Cloud).Assets.GenerateURL("6c6fe0b17b9f9fc07d9c47363988eb98560ff2daf81132bc041bb4ef6a487c18"); LocaleString val2 = LocaleString.op_Implicit("Deselect Own"); colorX? val3 = colorX.White; menu.AddItem(ref val2, val, ref val3).Button.LocalPressed += (ButtonEventHandler)delegate { Deselect((Tool)(object)__instance, ____currentGizmo, ____previousGizmo); }; } [HarmonyPostfix] [HarmonyPatch(typeof(ProtoFluxTool), "GenerateMenuItems")] public static void FluxAddDeselectButton(ProtoFluxTool __instance, ContextMenu menu) { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown if (ShowOnProtoFluxTool.Value) { Uri val = ((SkyFrostInterface)((Worker)__instance).Cloud).Assets.GenerateURL("6c6fe0b17b9f9fc07d9c47363988eb98560ff2daf81132bc041bb4ef6a487c18"); LocaleString val2 = LocaleString.op_Implicit("Deselect Own"); colorX? val3 = colorX.White; menu.AddItem(ref val2, val, ref val3).Button.LocalPressed += (ButtonEventHandler)delegate { Deselect((Tool)(object)__instance); }; } } private static void Deselect(Tool tool, SyncRef currentGizmo = null, SyncRef previousGizmo = null) { ((Worker)tool).World.RootSlot.GetComponentsInChildren((Predicate)IsLocalUserGizmo, false, false, (Predicate)null).ForEach((Action)delegate(SlotGizmo s) { ((Component)s).Slot.Destroy(); }); InteractionHandler activeHandler = tool.ActiveHandler; if (activeHandler != null) { activeHandler.CloseContextMenu(); } DevTool val = (DevTool)(object)((tool is DevTool) ? tool : null); if (val != null) { currentGizmo.Target = null; previousGizmo.Target = null; SelectAnchor(val, null); } } private static bool IsLocalUserGizmo(SlotGizmo gizmo) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) World world = ((Worker)gizmo).World; RefID referenceID = ((Worker)gizmo).ReferenceID; return world.GetUserByAllocationID(((RefID)(ref referenceID)).User).IsLocalUser; } [HarmonyReversePatch(/*Could not decode attribute arguments.*/)] [HarmonyPatch(typeof(DevTool), "SelectAnchor")] public static void SelectAnchor(DevTool instance, PointAnchor pointAnchor) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) throw new NotImplementedException("It's a stub"); } } [HarmonyPatch(typeof(SlotRecord), "Pressed")] private static class GenerateGizmoFromInspector { public static void Prefix(SlotRecord __instance, ref double ____lastPress) { if (!((Worker)__instance).World.IsAuthority && ((Worker)__instance).Time.WorldTime - ____lastPress < 0.35 && __instance.TargetSlot.Target != null && !__instance.TargetSlot.Target.IsRootSlot) { Slot target = __instance.TargetSlot.Target; if (target != null) { GizmoHelper.GetGizmo((Worker)(object)target, false); } } } } [HarmonyPatch(typeof(DevCreateNewForm), "OpenInspector")] private static class GenerateGizmoCreateNew { public static void Prefix(Slot slot) { if (!((Worker)slot).World.IsAuthority) { GizmoHelper.GetGizmo((Worker)(object)slot, false); } } } private static ConfigEntry? ShowOnProtoFluxTool; private const string DeselectOwnIcon = "6c6fe0b17b9f9fc07d9c47363988eb98560ff2daf81132bc041bb4ef6a487c18"; public override void Load() { ShowOnProtoFluxTool = ((BasePlugin)this).Config.Bind("General", "ShowOnProtoFluxTool", false, "Adds deselect button to the Protoflux tool"); ((BasePlugin)this).HarmonyInstance.PatchAll(); ((BasePlugin)this).Log.LogInfo((object)"DeselectOwnGizmos mod loaded!"); } } public static class PluginMetadata { public const string GUID = "dev.badhaloninja.deselectowngizmos"; public const string NAME = "DeselectOwnGizmos"; public const string VERSION = "2.1.1"; public const string AUTHORS = "badhaloninja"; public const string REPOSITORY_URL = "https://github.com/Gyztor/BepisDelesectOwnGizmos"; }