Decompiled source of AtlyssItemStackMod v1.0.1

AtlyssItemStackMod.dll

Decompiled 3 weeks ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using HarmonyLib;
using Microsoft.CodeAnalysis;
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("AtlyssItemStackMod")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.1.0")]
[assembly: AssemblyInformationalVersion("1.0.1+54dedd8bf84584f045bb5a856bbff10507f166fc")]
[assembly: AssemblyProduct("AtlyssItemStackMod")]
[assembly: AssemblyTitle("AtlyssItemStackMod")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.1.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.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 AtlyssItemStackMod
{
	[BepInPlugin("io.github.severnarch.atlyssitemstackmod", "AtlyssItemStackMod", "1.0.1")]
	public class AtlyssItemStackMod : BaseUnityPlugin
	{
		private Harmony _harmony;

		private static Dictionary<string, int> _originalMaxStack;

		public static AtlyssItemStackMod Instance { get; private set; }

		private void Awake()
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Expected O, but got Unknown
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Expected O, but got Unknown
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Expected O, but got Unknown
			Instance = this;
			_harmony = new Harmony("io.github.severnarch.atlyssitemstackmod");
			_originalMaxStack = new Dictionary<string, int>();
			ConstructorInfo constructorInfo = AccessTools.Constructor(typeof(ScriptableItem), (Type[])null, false);
			_harmony.Patch((MethodBase)constructorInfo, (HarmonyMethod)null, new HarmonyMethod(typeof(AtlyssItemStackMod).GetMethod("ScriptableItemCtorPostfix", BindingFlags.Static | BindingFlags.NonPublic)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
			MethodInfo methodInfo = AccessTools.Method(typeof(ItemMenuCell), "PromptCmd_DropItem", (Type[])null, (Type[])null);
			_harmony.Patch((MethodBase)methodInfo, new HarmonyMethod(typeof(AtlyssItemStackMod).GetMethod("DropItemPrefix", BindingFlags.Static | BindingFlags.NonPublic)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
			_harmony.PatchAll();
			((MonoBehaviour)this).StartCoroutine(GameplayLoop());
		}

		private static void ScriptableItemCtorPostfix(ScriptableItem __instance)
		{
			if (!((Object)(object)__instance == (Object)null) && __instance._maxStackAmount != 999)
			{
				if (!_originalMaxStack.ContainsKey(__instance._itemName))
				{
					_originalMaxStack.Add(__instance._itemName, __instance._maxStackAmount);
					((BaseUnityPlugin)Instance).Logger.LogDebug((object)$"Added {__instance._itemName} to stack cache with value of {__instance._maxStackAmount}.");
				}
				__instance._maxStackAmount = 999;
			}
		}

		private static bool DropItemPrefix(ref int _quantity, ItemData _itemData)
		{
			string itemName = _itemData._itemName;
			if (_quantity > _originalMaxStack[itemName])
			{
				_quantity = _originalMaxStack[itemName];
			}
			return true;
		}

		private void SetAllStackSizes()
		{
			try
			{
				ScriptableItem[] array = Resources.FindObjectsOfTypeAll<ScriptableItem>();
				int num = 0;
				foreach (ScriptableItem val in array)
				{
					if (!((Object)(object)val == (Object)null) && val._maxStackAmount != 999)
					{
						if (!_originalMaxStack.ContainsKey(val._itemName))
						{
							_originalMaxStack.Add(val._itemName, val._maxStackAmount);
							((BaseUnityPlugin)this).Logger.LogDebug((object)$"Added {val._itemName} to stack cache with value of {val._maxStackAmount}.");
						}
						val._maxStackAmount = 999;
						num++;
					}
				}
				((BaseUnityPlugin)this).Logger.LogDebug((object)$"Updated {num} ScriptableItems to stack at 999.");
			}
			catch (Exception arg)
			{
				((BaseUnityPlugin)this).Logger.LogError((object)$"Error updating stack sizes: {arg}");
			}
		}

		private IEnumerator GameplayLoop()
		{
			while (true)
			{
				yield return (object)new WaitForSeconds(10f);
				SetAllStackSizes();
			}
		}
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "AtlyssItemStackMod";

		public const string PLUGIN_NAME = "AtlyssItemStackMod";

		public const string PLUGIN_VERSION = "1.0.1";
	}
}