Decompiled source of BuildLimitMod v1.1.0

BuildLimitMod.dll

Decompiled 4 days ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using MelonLoader;
using UnityEngine.SceneManagement;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: MelonInfo(typeof(BuildLimitMod), "Increase Build Limit", "1.1.0", "Grace", null)]
[assembly: MelonGame(null, null)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("BuildLimitMod")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("BuildLimitMod")]
[assembly: AssemblyTitle("BuildLimitMod")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
public class BuildLimitMod : MelonMod
{
	private bool _limitIncreased = false;

	public override void OnInitializeMelon()
	{
		((MelonBase)this).LoggerInstance.Msg("Grace's Mod loaded!");
	}

	public override void OnUpdate()
	{
		//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)
		Scene activeScene = SceneManager.GetActiveScene();
		if (((Scene)(ref activeScene)).name != "Main Mountain Scene" || _limitIncreased)
		{
			return;
		}
		try
		{
			Type type = FindTypeByShortName("LobbySettingsManager");
			if (type == null)
			{
				return;
			}
			MethodInfo method = type.GetMethod("get_Instance", BindingFlags.Static | BindingFlags.Public);
			if (method == null)
			{
				return;
			}
			object obj = method.Invoke(null, null);
			if (obj == null)
			{
				return;
			}
			PropertyInfo property = type.GetProperty("IsServerStarted", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			bool flag = false;
			if (property != null)
			{
				flag = (bool)property.GetValue(obj);
			}
			if (!flag)
			{
				return;
			}
			MethodInfo method2 = type.GetMethod("Server_UpdateMaxBuildableItems", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			if (method2 == null)
			{
				((MelonBase)this).LoggerInstance.Warning("Could not find Server_UpdateMaxBuildableItems");
				return;
			}
			method2.Invoke(obj, new object[1] { 1000 });
			MethodInfo method3 = type.GetMethod("GetLobbySettings", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			if (method3 != null)
			{
				object obj2 = method3.Invoke(obj, null);
				if (obj2 != null)
				{
					Type type2 = obj2.GetType();
					FieldInfo field = type2.GetField("maxBuildableItems", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
					if (field != null)
					{
						field.SetValue(obj2, 1000);
					}
					else
					{
						PropertyInfo property2 = type2.GetProperty("maxBuildableItems", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
						if (property2 != null && property2.CanWrite)
						{
							property2.SetValue(obj2, 1000);
						}
					}
				}
			}
			_limitIncreased = true;
			((MelonBase)this).LoggerInstance.Msg("Build limit increased to 1000!");
		}
		catch (Exception value)
		{
			((MelonBase)this).LoggerInstance.Error($"Failed to increase build limit: {value}");
		}
	}

	private static Type FindTypeByShortName(string shortName)
	{
		try
		{
			Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
			foreach (Assembly assembly in assemblies)
			{
				Type[] types;
				try
				{
					types = assembly.GetTypes();
				}
				catch
				{
					continue;
				}
				Type[] array = types;
				foreach (Type type in array)
				{
					if (type != null && type.Name == shortName)
					{
						return type;
					}
				}
			}
		}
		catch
		{
		}
		return null;
	}
}