Decompiled source of HandsReequip v1.0.0

HandsReequip.dll

Decompiled 11 hours ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using Lightbug.CharacterControllerPro.Implementation;
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("HandsReequip")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+0ed5a62a044756c91e4267a9f5cc0f6ffb654d07")]
[assembly: AssemblyProduct("HandsReequip")]
[assembly: AssemblyTitle("HandsReequip")]
[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 HandsReequip
{
	[BepInPlugin("com.ttr.handsreequip", "HandsReequip", "1.0.0")]
	public class HandsReequipPlugin : BaseUnityPlugin
	{
		public const string PluginGuid = "com.ttr.handsreequip";

		public const string PluginName = "HandsReequip";

		public const string PluginVersion = "1.0.0";

		internal static ManualLogSource Log;

		private void Awake()
		{
			Log = ((BaseUnityPlugin)this).Logger;
			Harmony.CreateAndPatchAll(typeof(Patches), "com.ttr.handsreequip");
			Log.LogInfo((object)"HandsReequip v1.0.0 loaded.");
		}
	}
	internal static class Patches
	{
		private static int _savedSlot = -1;

		private static bool _wasPushing;

		[HarmonyPatch(typeof(NormalMovement), "HandleEquipping")]
		[HarmonyPrefix]
		internal static void HandleEquippingPrefix(NormalMovement __instance)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0140: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				bool value = ((CharacterState)__instance).CharacterActions.push.value;
				if (value && !_wasPushing)
				{
					object? obj = AccessTools.Field(typeof(NormalMovement), "equipmentController")?.GetValue(__instance);
					EquipmentController val = (EquipmentController)((obj is EquipmentController) ? obj : null);
					object? obj2 = AccessTools.Field(typeof(NormalMovement), "player")?.GetValue(__instance);
					PlayerNetworking val2 = (PlayerNetworking)((obj2 is PlayerNetworking) ? obj2 : null);
					if ((Object)(object)val != (Object)null && (Object)(object)val2 != (Object)null)
					{
						_savedSlot = val.ActiveSelectedItemSlot;
						HandsReequipPlugin.Log.LogDebug((object)$"Push started: saved slot {_savedSlot}");
					}
				}
				else if (!value && _wasPushing && _savedSlot != -1)
				{
					object? obj3 = AccessTools.Field(typeof(NormalMovement), "equipmentController")?.GetValue(__instance);
					EquipmentController val3 = (EquipmentController)((obj3 is EquipmentController) ? obj3 : null);
					object? obj4 = AccessTools.Field(typeof(NormalMovement), "player")?.GetValue(__instance);
					PlayerNetworking val4 = (PlayerNetworking)((obj4 is PlayerNetworking) ? obj4 : null);
					if ((Object)(object)val3 != (Object)null && (Object)(object)val4 != (Object)null)
					{
						InventoryItem itemInSlot = ((InventoryBase)val4.Inventory).GetItemInSlot(_savedSlot + 2);
						if (((InventoryItem)(ref itemInSlot)).IsValidItem)
						{
							val3.SetActiveHandSlot(_savedSlot);
							HandsReequipPlugin.Log.LogDebug((object)$"Push released: restored slot {_savedSlot}");
						}
						else
						{
							HandsReequipPlugin.Log.LogDebug((object)$"Push released: slot {_savedSlot} no longer has an item");
						}
					}
					_savedSlot = -1;
				}
				_wasPushing = value;
			}
			catch (Exception arg)
			{
				HandsReequipPlugin.Log.LogWarning((object)$"HandleEquipping prefix error: {arg}");
			}
		}
	}
}