Decompiled source of Improved Scoop v0.1.3

ImprovedScoop.dll

Decompiled 2 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using CG;
using CG.Game;
using CG.Objects;
using CG.Ship.Hull;
using CG.Ship.Modules;
using CG.Space;
using Gameplay.Carryables;
using Gameplay.Utilities;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Photon.Pun;
using ResourceAssets;
using UnityEngine;
using VoidManager;
using VoidManager.CustomGUI;
using VoidManager.MPModChecks;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyCompany("ImprovedScoop")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("Template")]
[assembly: AssemblyFileVersion("0.1.3.0")]
[assembly: AssemblyInformationalVersion("0.1.3+e4944ae9605a3a2619e1f13eee55f27e2ea9a5e0")]
[assembly: AssemblyProduct("ImprovedScoop")]
[assembly: AssemblyTitle("Increases Range, Radius, and Pull speed of gravity scoops. Ignores Mission Items. Inspired by Maverik's 'Better Scoop'. Session Mod.")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.1.3.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 ImprovedScoop
{
	[BepInPlugin("18107.ImprovedScoop", "Improved Scoop", "0.1.3")]
	[BepInProcess("Void Crew.exe")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class BepinPlugin : BaseUnityPlugin
	{
		internal static ManualLogSource Log;

		private void Awake()
		{
			Log = ((BaseUnityPlugin)this).Logger;
			Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "18107.ImprovedScoop");
			ScoopConfig.BindConfigs(this);
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin 18107.ImprovedScoop is loaded!");
		}
	}
	[HarmonyPatch(typeof(CarryableAttractor))]
	internal class CarryableAttractorPatch
	{
		internal static List<GUIDUnion> dotNotAttract = ScoopConfig.HexToGUIDs(ScoopConfig.ItemBlacklist.Value);

		private static readonly FieldInfo carryablesSocketProviderField = AccessTools.Field(typeof(CarryableAttractor), "_carryablesSocketProvider");

		[HarmonyPrefix]
		[HarmonyPatch("Awake")]
		private static void Awake(CarryableAttractor __instance, ref float ____catchRadius, ref ModifiableFloat ___MaxRange, ref ModifiableFloat ____pullVelocity)
		{
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			____catchRadius = 3f * ScoopConfig.CatchRadiusMultiplier.Value;
			___MaxRange = ModifiableFloat.op_Implicit(200f * ScoopConfig.MaxRangeMultiplier.Value);
			____pullVelocity = ModifiableFloat.op_Implicit(10f * TierModifier(__instance) * ScoopConfig.PullVelocityMultiplier.Value);
			foreach (CarryablesSocket socket in ((CarryablesSocketProvider)carryablesSocketProviderField.GetValue(__instance)).Sockets)
			{
				socket.OnAcquireCarryable += GravityScoopEject.SocketItemInserted;
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch("OnDestroy")]
		private static void OnDestroy(CarryableAttractor __instance)
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			foreach (CarryablesSocket socket in ((CarryablesSocketProvider)carryablesSocketProviderField.GetValue(__instance)).Sockets)
			{
				socket.OnAcquireCarryable -= GravityScoopEject.SocketItemInserted;
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch("GetPossibleItemsToAttrack")]
		private static void GetPossibleItemsToAttrack(ref List<AbstractCarryableObject> __result)
		{
			if (PhotonNetwork.IsMasterClient)
			{
				__result.RemoveAll((AbstractCarryableObject item) => dotNotAttract.Contains(((AbstractCloneStarObject)item).assetGuid));
			}
		}

		public static float TierModifier(CarryableAttractor attractor)
		{
			if (attractor != null && (((Object)attractor).name?.Contains("_02")).GetValueOrDefault())
			{
				return 2f;
			}
			if (attractor != null && (((Object)attractor).name?.Contains("_03")).GetValueOrDefault())
			{
				return 4f;
			}
			return 1f;
		}
	}
	internal class GravityScoopEject
	{
		internal static List<GUIDUnion> eject = ScoopConfig.HexToGUIDs(ScoopConfig.ItemEjectlist.Value);

		private static Dictionary<CarryablesSocket, DateTime> toEject = new Dictionary<CarryablesSocket, DateTime>();

		private const long EjectWaitTimeMs = 1000L;

		private const float distance = 4f;

		private const float speed = 100f;

		private static readonly FieldInfo attractPointField = AccessTools.Field(typeof(CarryableAttractor), "_attractPoint");

		internal static void CheckAndEject(object sender, EventArgs e)
		{
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Expected O, but got Unknown
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			for (int num = toEject.Count - 1; num >= 0; num--)
			{
				KeyValuePair<CarryablesSocket, DateTime> keyValuePair = toEject.ElementAt(num);
				CarryablesSocket key = keyValuePair.Key;
				DateTime value = keyValuePair.Value;
				if ((Object)(object)key.Payload == (Object)null)
				{
					toEject.Remove(key);
				}
				else if ((DateTime.Now - value).TotalMilliseconds > 1000.0)
				{
					toEject.Remove(key);
					Transform val = (Transform)attractPointField.GetValue(((AbstractCloneStarObject)key).GameObject.GetComponentInParent<CarryableAttractor>());
					Transform transform = ((Component)key.Payload).transform;
					transform.position += val.rotation * (Vector3.back * 4f);
					key.CarryableHandler.TryEjectCarryable(val.rotation * (Vector3.back * 100f));
				}
			}
			if (toEject.Count == 0)
			{
				Events.Instance.LateUpdate -= CheckAndEject;
			}
		}

		internal static void SocketItemInserted(ICarrier carrier, AbstractCarryableObject carryable, ICarrier previousCarrier)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Expected O, but got Unknown
			if (PhotonNetwork.IsMasterClient && eject.Contains(((AbstractCloneStarObject)carryable).assetGuid) && carrier is CarryablesSocket)
			{
				if (toEject.Count == 0)
				{
					Events.Instance.LateUpdate += CheckAndEject;
				}
				toEject.Add((CarryablesSocket)carrier, DateTime.Now);
			}
		}
	}
	internal class GUI : ModSettingsMenu
	{
		private readonly FieldInfo PullVelocityField = AccessTools.Field(typeof(CarryableAttractor), "_pullVelocity");

		private readonly FieldInfo CatchRadiusField = AccessTools.Field(typeof(CarryableAttractor), "_catchRadius");

		private string ItemBlacklistString;

		private string ItemEjectlistString;

		private string MaxRangeMultiplierString = $"{ScoopConfig.MaxRangeMultiplier.Value}";

		private string PullVelocityMultiplierString = $"{ScoopConfig.PullVelocityMultiplier.Value}";

		private string CatchRadiusMultiplierString = $"{ScoopConfig.CatchRadiusMultiplier.Value}";

		public override string Name()
		{
			return "ImprovedScoop";
		}

		public override void OnOpen()
		{
			ItemBlacklistString = GUIDManager.GetDisplayNameList(CarryableAttractorPatch.dotNotAttract);
			ItemEjectlistString = GUIDManager.GetDisplayNameList(GravityScoopEject.eject);
		}

		public override void Draw()
		{
			GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
			GUILayout.Label("Ignore these items:", Array.Empty<GUILayoutOption>());
			ItemBlacklistString = GUILayout.TextField(ItemBlacklistString, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.MinWidth(80f) });
			GUILayout.FlexibleSpace();
			if (GUILayout.Button("Apply", Array.Empty<GUILayoutOption>()))
			{
				CarryableAttractorPatch.dotNotAttract = GUIDManager.GetGUIDs(ItemBlacklistString);
				ItemBlacklistString = GUIDManager.GetDisplayNameList(CarryableAttractorPatch.dotNotAttract);
				ScoopConfig.ItemBlacklist.Value = ScoopConfig.GUIDsToHex(GUIDManager.GetGUIDs(ItemBlacklistString));
			}
			if (GUILayout.Button("Reset", Array.Empty<GUILayoutOption>()))
			{
				CarryableAttractorPatch.dotNotAttract = ScoopConfig.ItemBlacklistDefault;
				ScoopConfig.ItemBlacklist.Value = ScoopConfig.GUIDsToHex(CarryableAttractorPatch.dotNotAttract);
				ItemBlacklistString = GUIDManager.GetDisplayNameList(CarryableAttractorPatch.dotNotAttract);
			}
			GUILayout.EndHorizontal();
			GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
			GUILayout.Label("Eject these items:", Array.Empty<GUILayoutOption>());
			ItemEjectlistString = GUILayout.TextField(ItemEjectlistString, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.MinWidth(80f) });
			GUILayout.FlexibleSpace();
			if (GUILayout.Button("Apply", Array.Empty<GUILayoutOption>()))
			{
				GravityScoopEject.eject = GUIDManager.GetGUIDs(ItemEjectlistString);
				ItemEjectlistString = GUIDManager.GetDisplayNameList(GravityScoopEject.eject);
				ScoopConfig.ItemEjectlist.Value = ScoopConfig.GUIDsToHex(GUIDManager.GetGUIDs(ItemEjectlistString));
			}
			if (GUILayout.Button("Reset", Array.Empty<GUILayoutOption>()))
			{
				GravityScoopEject.eject = ScoopConfig.ItemEjectlistDefault;
				ScoopConfig.ItemEjectlist.Value = ScoopConfig.GUIDsToHex(GravityScoopEject.eject);
				ItemEjectlistString = GUIDManager.GetDisplayNameList(GravityScoopEject.eject);
			}
			GUILayout.EndHorizontal();
			GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
			GUILayout.Label("Max range multiplier:", Array.Empty<GUILayoutOption>());
			MaxRangeMultiplierString = GUILayout.TextField(MaxRangeMultiplierString, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.MinWidth(80f) });
			GUILayout.FlexibleSpace();
			if (GUILayout.Button("Apply", Array.Empty<GUILayoutOption>()) && float.TryParse(MaxRangeMultiplierString, out var maxRangeMultiplier))
			{
				ScoopConfig.MaxRangeMultiplier.Value = maxRangeMultiplier;
				IterateAttractors(delegate(CarryableAttractor attractor)
				{
					((ModifiablePrimitive<float, FloatModifier>)(object)attractor.MaxRange).SetBaseValue(200f * maxRangeMultiplier);
				});
			}
			if (GUILayout.Button("Reset", Array.Empty<GUILayoutOption>()))
			{
				ScoopConfig.MaxRangeMultiplier.Value = (float)((ConfigEntryBase)ScoopConfig.MaxRangeMultiplier).DefaultValue;
				MaxRangeMultiplierString = $"{ScoopConfig.MaxRangeMultiplier.Value}";
				IterateAttractors(delegate(CarryableAttractor attractor)
				{
					((ModifiablePrimitive<float, FloatModifier>)(object)attractor.MaxRange).SetBaseValue(200f * ScoopConfig.MaxRangeMultiplier.Value);
				});
			}
			GUILayout.EndHorizontal();
			GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
			GUILayout.Label("Pull velocity multiplier:", Array.Empty<GUILayoutOption>());
			PullVelocityMultiplierString = GUILayout.TextField(PullVelocityMultiplierString, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.MinWidth(80f) });
			GUILayout.FlexibleSpace();
			if (GUILayout.Button("Apply", Array.Empty<GUILayoutOption>()) && float.TryParse(PullVelocityMultiplierString, out var pullVelocityMultiplier))
			{
				ScoopConfig.PullVelocityMultiplier.Value = pullVelocityMultiplier;
				IterateAttractors(delegate(CarryableAttractor attractor)
				{
					//IL_0011: Unknown result type (might be due to invalid IL or missing references)
					//IL_002e: Expected O, but got Unknown
					((ModifiablePrimitive<float, FloatModifier>)(ModifiableFloat)PullVelocityField.GetValue(attractor)).SetBaseValue(10f * CarryableAttractorPatch.TierModifier(attractor) * pullVelocityMultiplier);
				});
			}
			if (GUILayout.Button("Reset", Array.Empty<GUILayoutOption>()))
			{
				ScoopConfig.PullVelocityMultiplier.Value = (float)((ConfigEntryBase)ScoopConfig.PullVelocityMultiplier).DefaultValue;
				PullVelocityMultiplierString = $"{ScoopConfig.PullVelocityMultiplier.Value}";
				IterateAttractors(delegate(CarryableAttractor attractor)
				{
					//IL_0011: Unknown result type (might be due to invalid IL or missing references)
					//IL_0032: Expected O, but got Unknown
					((ModifiablePrimitive<float, FloatModifier>)(ModifiableFloat)PullVelocityField.GetValue(attractor)).SetBaseValue(10f * CarryableAttractorPatch.TierModifier(attractor) * ScoopConfig.PullVelocityMultiplier.Value);
				});
			}
			GUILayout.EndHorizontal();
			GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
			GUILayout.Label("Catch radius multiplier:", Array.Empty<GUILayoutOption>());
			CatchRadiusMultiplierString = GUILayout.TextField(CatchRadiusMultiplierString, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.MinWidth(80f) });
			GUILayout.FlexibleSpace();
			if (GUILayout.Button("Apply", Array.Empty<GUILayoutOption>()) && float.TryParse(CatchRadiusMultiplierString, out var catchRadiusMultiplier))
			{
				ScoopConfig.CatchRadiusMultiplier.Value = catchRadiusMultiplier;
				IterateAttractors(delegate(CarryableAttractor attractor)
				{
					CatchRadiusField.SetValue(attractor, 3f * catchRadiusMultiplier);
				});
			}
			if (GUILayout.Button("Reset", Array.Empty<GUILayoutOption>()))
			{
				ScoopConfig.CatchRadiusMultiplier.Value = (float)((ConfigEntryBase)ScoopConfig.CatchRadiusMultiplier).DefaultValue;
				CatchRadiusMultiplierString = $"{ScoopConfig.CatchRadiusMultiplier.Value}";
				IterateAttractors(delegate(CarryableAttractor attractor)
				{
					CatchRadiusField.SetValue(attractor, 3f * ScoopConfig.CatchRadiusMultiplier.Value);
				});
			}
			GUILayout.EndHorizontal();
		}

		private void IterateAttractors(Action<CarryableAttractor> action)
		{
			ClientGame current = ClientGame.Current;
			object obj;
			if (current == null)
			{
				obj = null;
			}
			else
			{
				AbstractPlayerControlledShip playerShip = current.PlayerShip;
				obj = ((playerShip != null) ? ((Component)playerShip).GetComponentsInChildren<CarryableAttractor>() : null);
			}
			CarryableAttractor[] array = (CarryableAttractor[])obj;
			if (array != null)
			{
				CarryableAttractor[] array2 = array;
				foreach (CarryableAttractor obj2 in array2)
				{
					action(obj2);
				}
			}
		}
	}
	internal class GUIDManager
	{
		private static Dictionary<GUIDUnion, string> DisplayNames;

		public static void GenerateDictionaries()
		{
			List<CarryableDef> list = ((ResourceAssetContainer<CarryableContainer, AbstractCarryableObject, CarryableDef>)(object)ResourceAssetContainer<CarryableContainer, AbstractCarryableObject, CarryableDef>.Instance)?.AssetDescriptions;
			if (list == null || list.Count == 0)
			{
				BepinPlugin.Log.LogInfo((object)"GenerateDictionaries could not load AssetDescriptions");
				return;
			}
			DisplayNames = list.ToDictionary((CarryableDef item) => ((ResourceAssetDef<AbstractCarryableObject>)(object)item).AssetGuid, (CarryableDef item) => ((AbstractCloneStarObject)((ResourceAssetDef<AbstractCarryableObject>)(object)item).Asset).DisplayName);
		}

		public static List<GUIDUnion> GetGUIDs(string displayNameCSV)
		{
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			if (string.IsNullOrEmpty(displayNameCSV))
			{
				return new List<GUIDUnion>();
			}
			string[] array = displayNameCSV.Split(new char[1] { ',' });
			List<GUIDUnion> list = new List<GUIDUnion>();
			string[] array2 = array;
			foreach (string displayName in array2)
			{
				KeyValuePair<GUIDUnion, string> keyValuePair = DisplayNames.FirstOrDefault((KeyValuePair<GUIDUnion, string> kvp) => kvp.Value.ToLower().Contains(displayName.Trim().ToLower()));
				if (!string.IsNullOrEmpty(keyValuePair.Value))
				{
					list.Add(keyValuePair.Key);
				}
			}
			return list;
		}

		public static string GetDisplayNameList(List<GUIDUnion> guids)
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			List<string> list = new List<string>();
			foreach (GUIDUnion guid in guids)
			{
				if (DisplayNames.ContainsKey(guid))
				{
					list.Add(DisplayNames[guid]);
				}
			}
			return string.Join(", ", list);
		}
	}
	public class MyPluginInfo
	{
		public const string PLUGIN_GUID = "18107.ImprovedScoop";

		public const string PLUGIN_NAME = "ImprovedScoop";

		public const string USERS_PLUGIN_NAME = "Improved Scoop";

		public const string PLUGIN_VERSION = "0.1.3";

		public const string PLUGIN_DESCRIPTION = "Increases Range, Radius, and Pull speed of gravity scoops. Ignores Mission Items. Inspired by Maverik's 'Better Scoop'. Session Mod.";

		public const string PLUGIN_ORIGINAL_AUTHOR = "18107";

		public const string PLUGIN_AUTHORS = "18107, Dragon";

		public const string PLUGIN_THUNDERSTORE_ID = "VoidCrewModdingTeam/Improved_Scoop";
	}
	internal class ScoopConfig
	{
		internal static readonly List<GUIDUnion> ItemBlacklistDefault = new List<GUIDUnion>
		{
			new GUIDUnion("ee69440bbce371e458daeba6eee12a49"),
			new GUIDUnion("6c37b5363f7ef7844881a301dca76572"),
			new GUIDUnion("ec0fc0790a706ef4facab39da5d9de04"),
			new GUIDUnion("e1bdce573e8182b4d95aacb841301d7c")
		};

		internal static readonly List<GUIDUnion> ItemEjectlistDefault = new List<GUIDUnion>
		{
			new GUIDUnion("ee69440bbce371e458daeba6eee12a49")
		};

		internal const float maxRangeBase = 200f;

		internal const float pullVelocityBase = 10f;

		internal const float catchRadiusBase = 3f;

		internal static ConfigEntry<string> ItemBlacklist;

		internal static ConfigEntry<string> ItemEjectlist;

		internal static ConfigEntry<float> MaxRangeMultiplier;

		internal static ConfigEntry<float> PullVelocityMultiplier;

		internal static ConfigEntry<float> CatchRadiusMultiplier;

		internal static ConfigEntry<bool> ProcessAlloys;

		internal static ConfigEntry<bool> ProcessBiomass;

		internal static ConfigEntry<bool> ProcessShards;

		internal static ConfigEntry<bool> ProcessSummonShards;

		internal static ConfigEntry<bool> MoveToShelf;

		internal static void BindConfigs(BepinPlugin plugin)
		{
			ItemBlacklist = ((BaseUnityPlugin)plugin).Config.Bind<string>("GravityScoop", "ItemBlacklist", GUIDsToHex(ItemBlacklistDefault), (ConfigDescription)null);
			ItemEjectlist = ((BaseUnityPlugin)plugin).Config.Bind<string>("GravityScoop", "ItemEjectlist", GUIDsToHex(ItemEjectlistDefault), (ConfigDescription)null);
			MaxRangeMultiplier = ((BaseUnityPlugin)plugin).Config.Bind<float>("GravityScoop", "MaxRangeMultiplier", 2f, (ConfigDescription)null);
			PullVelocityMultiplier = ((BaseUnityPlugin)plugin).Config.Bind<float>("GravityScoop", "PullVelocityMultiplier", 3f, (ConfigDescription)null);
			CatchRadiusMultiplier = ((BaseUnityPlugin)plugin).Config.Bind<float>("GravityScoop", "CatchRadiusMultiplier", 1.5f, (ConfigDescription)null);
			ProcessAlloys = ((BaseUnityPlugin)plugin).Config.Bind<bool>("GravityScoop", "ProcessAlloys", false, (ConfigDescription)null);
			ProcessBiomass = ((BaseUnityPlugin)plugin).Config.Bind<bool>("GravityScoop", "ProcessBiomass", false, (ConfigDescription)null);
			ProcessShards = ((BaseUnityPlugin)plugin).Config.Bind<bool>("GravityScoop", "ProcessShards", false, (ConfigDescription)null);
			ProcessSummonShards = ((BaseUnityPlugin)plugin).Config.Bind<bool>("GravityScoop", "ProcessSummonShards", false, (ConfigDescription)null);
			MoveToShelf = ((BaseUnityPlugin)plugin).Config.Bind<bool>("GravityScoop", "MoveToShelf", false, (ConfigDescription)null);
		}

		internal static List<GUIDUnion> HexToGUIDs(string str)
		{
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			if (string.IsNullOrEmpty(str))
			{
				return new List<GUIDUnion>();
			}
			string[] array = str.Split(new char[1] { ',' });
			List<GUIDUnion> list = new List<GUIDUnion>();
			string[] array2 = array;
			foreach (string text in array2)
			{
				list.Add(new GUIDUnion(text));
			}
			return list;
		}

		internal static string GUIDsToHex(List<GUIDUnion> guids)
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			if (guids.Count == 0)
			{
				return "";
			}
			StringBuilder stringBuilder = new StringBuilder();
			foreach (GUIDUnion guid in guids)
			{
				GUIDUnion current = guid;
				stringBuilder.Append(((GUIDUnion)(ref current)).AsHex());
				stringBuilder.Append(",");
			}
			stringBuilder.Remove(stringBuilder.Length - 1, 1);
			return stringBuilder.ToString();
		}
	}
	public class VoidManagerPlugin : VoidPlugin
	{
		public override MultiplayerType MPType => (MultiplayerType)14;

		public override string Author => "18107, Dragon";

		public override string Description => "Increases Range, Radius, and Pull speed of gravity scoops. Ignores Mission Items. Inspired by Maverik's 'Better Scoop'. Session Mod.";

		public override string ThunderstoreID => "VoidCrewModdingTeam/Improved_Scoop";

		public VoidManagerPlugin()
		{
			GUIDManager.GenerateDictionaries();
		}
	}
}