Decompiled source of ShipSort v1.4.1

baer1.ShipSort.dll

Decompiled 3 hours 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 BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using ChatCommandAPI;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Unity.Netcode;
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("baer1.ShipSort")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.4.1.0")]
[assembly: AssemblyInformationalVersion("1.4.1+1befd951f352b895b03a5eb646a1a1d9aa1f1996")]
[assembly: AssemblyProduct("LethalShipSort")]
[assembly: AssemblyTitle("baer1.ShipSort")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.4.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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[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 LethalShipSort
{
	[BepInPlugin("baer1.ShipSort", "LethalShipSort", "1.4.1")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class LethalShipSort : BaseUnityPlugin
	{
		public static ConfigEntry<bool> AutoSort;

		public static LethalShipSort Instance { get; private set; }

		internal static ManualLogSource Logger { get; private set; }

		internal static Harmony? Harmony { get; set; }

		private void Awake()
		{
			Logger = ((BaseUnityPlugin)this).Logger;
			Instance = this;
			AutoSort = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "AutoSort", false, "Whether to automatically sort the ship when leaving a planet (toggle ingame with /autosort)");
			Patch();
			new SortItemsCommand();
			new AutoSortToggle();
			Logger.LogInfo((object)"baer1.ShipSort v1.4.1 has loaded!");
		}

		internal static void Patch()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Expected O, but got Unknown
			if (Harmony == null)
			{
				Harmony = new Harmony("baer1.ShipSort");
			}
			Logger.LogDebug((object)"Patching...");
			Harmony.PatchAll();
			Logger.LogDebug((object)"Finished patching!");
		}

		internal static void Unpatch()
		{
			Logger.LogDebug((object)"Unpatching...");
			Harmony? harmony = Harmony;
			if (harmony != null)
			{
				harmony.UnpatchSelf();
			}
			Logger.LogDebug((object)"Finished unpatching!");
		}
	}
	public class SortItemsCommand : Command
	{
		[HarmonyPatch(typeof(StartOfRound), "SetShipReadyToLand")]
		internal static class AutoSortPatch
		{
			private static void Prefix()
			{
				if (!LethalShipSort.AutoSort.Value)
				{
					return;
				}
				ChatCommandAPI.Print("Sorting all items...");
				try
				{
					if (!SortAllItems(all: false, out string error))
					{
						ChatCommandAPI.PrintError("Automatic sorting failed: " + error);
					}
					else
					{
						ChatCommandAPI.Print("Finished sorting items");
					}
				}
				catch (Exception arg)
				{
					ChatCommandAPI.PrintError("Automatic sorting failed due to an internal error, check the log for details");
					LethalShipSort.Logger.LogError((object)$"Error while autosorting items: {arg}");
				}
			}
		}

		public override string Name => "SortItems";

		public override string[] Commands => new string[3]
		{
			((Command)this).Name,
			"Sort",
			"Organize"
		};

		public override string Description => "Sorts all items on the ship\n-a: sort all items, even items on cruiser";

		public override string[] Syntax => new string[2] { "", "[ -a | --all ]" };

		public override bool Invoke(string[] args, Dictionary<string, string> kwargs, out string error)
		{
			error = "The ship must be in orbit";
			return StartOfRound.Instance.inShipPhase && SortAllItems(args.Contains("-a") || args.Contains("--all"), out error);
		}

		private static bool SortAllItems(bool all, out string error)
		{
			error = "No items to sort";
			GrabbableObject[] array = Object.FindObjectsOfType<GrabbableObject>();
			if (array == null)
			{
				return false;
			}
			array = array.Where((GrabbableObject i) => i != null && i.playerHeldBy == null && !(i is RagdollGrabbableObject)).ToArray();
			if (array.Length == 0)
			{
				return false;
			}
			VehicleController[] cars = Object.FindObjectsOfType<VehicleController>() ?? Array.Empty<VehicleController>();
			GrabbableObject[] array2 = array.Where((GrabbableObject i) => i.itemProperties.isScrap && (all || !(Utils.RemoveClone(((Object)i).name) == "ShotgunItem") || !cars.Any((VehicleController car) => (Object)(object)((Component)i).gameObject.transform.parent == (Object)(object)((Component)car).transform))).ToArray();
			int num = 0;
			int num2 = 0;
			if (array2.Length != 0)
			{
				num = SortItems(array2);
			}
			GrabbableObject[] array3 = array.Where((GrabbableObject i) => !i.itemProperties.isScrap && (all || cars.All((VehicleController car) => (Object)(object)((Component)i).gameObject.transform.parent != (Object)(object)((Component)car).gameObject.gameObject.transform))).ToArray();
			if (array3.Length != 0)
			{
				num2 = SortItems(array3);
			}
			error = ((num > 0) ? string.Format("{0} scrap items {1}", num, (num2 > 0) ? "and " : "") : "") + ((num2 > 0) ? $"{num2} tool items" : "") + " couldn't be sorted";
			return num == 0 && num2 == 0;
		}

		public static int SortItems(GrabbableObject[] items)
		{
			return items.Count((GrabbableObject item) => !Utils.MoveItem(item));
		}
	}
	public class AutoSortToggle : ToggleCommand
	{
		public override string Name => "AutoSort";

		public override string ToggleDescription => "Toggles automatic item sorting when leaving a planet";

		public override bool Value
		{
			get
			{
				return LethalShipSort.AutoSort.Value;
			}
			set
			{
				LethalShipSort.AutoSort.Value = value;
			}
		}
	}
	public static class Utils
	{
		private const string CLONE = "(Clone)";

		public static string RemoveClone(string name)
		{
			string result;
			if (!name.EndsWith("(Clone)"))
			{
				result = name;
			}
			else
			{
				int length = "(Clone)".Length;
				result = name.Substring(0, name.Length - length);
			}
			return result;
		}

		public static bool MoveItem(GrabbableObject item)
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			return item.itemProperties.isScrap ? MoveItem(item, Positions.GetPosition(item)) : MoveItemToCloset(item, Positions.GetPosition(item));
		}

		public static bool MoveItem(GrabbableObject item, Vector3 position)
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: 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_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: 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)
			LethalShipSort.Logger.LogDebug((object)$">> Moving item {RemoveClone(((Object)item).name)} to position {position}");
			Transform transform = GameObject.Find("Environment/HangarShip").transform;
			if ((Object)(object)transform != (Object)null)
			{
				RaycastHit val = default(RaycastHit);
				if (Physics.Raycast(transform.TransformPoint(position), Vector3.down, ref val, 80f, 268437760, (QueryTriggerInteraction)1))
				{
					position = Positions.Randomize(transform.InverseTransformPoint(((RaycastHit)(ref val)).point + item.itemProperties.verticalOffset * Vector3.up));
					GameNetworkManager.Instance.localPlayerController.SetObjectAsNoLongerHeld(true, true, position, item, -1);
					GameNetworkManager.Instance.localPlayerController.ThrowObjectServerRpc(NetworkObjectReference.op_Implicit(((NetworkBehaviour)item).NetworkObject), true, true, position, -1);
					return true;
				}
				LethalShipSort.Logger.LogWarning((object)"   Raycast unsuccessful");
				return false;
			}
			LethalShipSort.Logger.LogWarning((object)"   Couldn't find ship");
			return false;
		}

		public static bool MoveItemToCloset(GrabbableObject item, Vector3 position)
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_013e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0149: Unknown result type (might be due to invalid IL or missing references)
			//IL_014e: Unknown result type (might be due to invalid IL or missing references)
			LethalShipSort.Logger.LogDebug((object)$">> Moving item {RemoveClone(((Object)item).name)} to position {position} in closet");
			Transform transform = GameObject.Find("Environment/HangarShip/StorageCloset").transform;
			if ((Object)(object)transform != (Object)null)
			{
				RaycastHit val = default(RaycastHit);
				if (Physics.Raycast(transform.TransformPoint(position), Vector3.down, ref val, 80f, 1073744640, (QueryTriggerInteraction)1))
				{
					position = transform.InverseTransformPoint(Positions.Randomize(((RaycastHit)(ref val)).point + item.itemProperties.verticalOffset * Vector3.up - new Vector3(0f, 0.05f, 0f), 0.02f));
					GameNetworkManager.Instance.localPlayerController.SetObjectAsNoLongerHeld(true, true, position, item, 0);
					GameNetworkManager.Instance.localPlayerController.ThrowObjectServerRpc(NetworkObjectReference.op_Implicit(((NetworkBehaviour)item).NetworkObject), true, true, position, 0);
					GameNetworkManager.Instance.localPlayerController.PlaceGrabbableObject(transform, position, false, item);
					GameNetworkManager.Instance.localPlayerController.PlaceObjectServerRpc(NetworkObjectReference.op_Implicit(((NetworkBehaviour)item).NetworkObject), NetworkObjectReference.op_Implicit(((Component)transform).gameObject), position, false);
					return true;
				}
				LethalShipSort.Logger.LogWarning((object)"   Raycast unsuccessful");
				return false;
			}
			LethalShipSort.Logger.LogWarning((object)"   Couldn't find closet");
			return false;
		}
	}
	public static class Positions
	{
		private const float FLOOR_ABOVE = 3.2f;

		private const float FLOOR_TOP = 2.4f;

		private const float FLOOR_MIDDLE_1 = 2f;

		private const float FLOOR_MIDDLE_2 = 1.5f;

		private const float FLOOR_BOTTOM = 0.5f;

		[Obsolete("Use GetPosition() instead")]
		public static readonly (float, float) FALLBACK_POSITION = (2.86f, -6.08f);

		[Obsolete("Use GetPosition(item.name, item.itemProperties.twoHanded) instead")]
		public static readonly Dictionary<string, (float, float)> NAMED_POSITIONS = new Dictionary<string, (float, float)>
		{
			["Hairdryer"] = (-1.96f, -5.26f),
			["Hairbrush"] = (1.75f, -5.96f),
			["EasterEgg"] = (-6.32f, -7.1f),
			["Mug"] = (-2.45f, -6.87f),
			["Dentures"] = (-3.14f, -5.85f),
			["FancyLamp"] = (1.62f, -6.73f),
			["ComedyMask"] = (-3.92f, -7f),
			["FancyRing"] = (-3.33f, -6.91f),
			["TragedyMask"] = (-4.08f, -6.46f),
			["BinFullOfBottles"] = (-5.03f, -7.11f),
			["ToyCube"] = (-3.48f, -4.93f),
			["FancyGlass"] = (-5.9f, -4.88f),
			["FishTestProp"] = (-6.34f, -7.7f),
			["PerfumeBottle"] = (-1.25f, -8.46f),
			["Painting"] = (1.29f, -8.36f),
			["Airhorn"] = (-0.06f, -5.52f),
			["RedSodaCan"] = (-1.88f, -6.16f),
			["RubberDucky"] = (8.38f, -6.48f),
			["MagnifyingGlass"] = (-3.93f, -7.45f),
			["Toothpaste"] = (-4.95f, -7.78f),
			["Candy"] = (-3.57f, -8.46f),
			["RedLocustHive"] = (6.32f, -5.13f),
			["TeaKettle"] = (-4.98f, -6.25f),
			["HandBell"] = (-4.48f, -5.54f),
			["RobotToy"] = (-0.25f, -8.45f),
			["Clownhorn"] = (-0.06f, -5.52f),
			["OldPhone"] = (-1.8f, -7.05f),
			["LaserPointer"] = (-6.34f, -6.85f),
			["Magic7Ball"] = (-6.2f, -6.11f),
			["StopSign"] = (2.86f, -6.08f),
			["YieldSign"] = (2.86f, -6.08f),
			["CookieMoldPan"] = (2.86f, -6.08f),
			["DiyFlashbang"] = (2.86f, -6.08f),
			["PillBottle"] = (2.86f, -6.08f),
			["Dustpan"] = (2.86f, -6.08f),
			["SteeringWheel"] = (2.86f, -6.08f),
			["Remote"] = (2.86f, -6.08f),
			["ChemicalJug"] = (2.86f, -6.08f),
			["Flask"] = (2.86f, -6.08f),
			["EnginePart"] = (2.86f, -6.08f),
			["EggBeater"] = (2.86f, -6.08f),
			["BigBolt"] = (2.86f, -6.08f),
			["MetalSheet"] = (2.86f, -6.08f),
			["WhoopieCushion"] = (8.46f, -7.7f),
			["Cog"] = (2.86f, -6.08f)
		};

		public static Vector3 Randomize(Vector3 position, float maxDistance = 0.05f)
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			if (maxDistance <= 0f)
			{
				throw new ArgumentException("Invalid maxDistance (must be positive)");
			}
			Random random = new Random();
			return new Vector3(position.x + (float)random.NextDouble() * maxDistance * 2f - maxDistance, position.y, position.z + (float)random.NextDouble() * maxDistance * 2f - maxDistance);
		}

		public static Vector3 GetPosition()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			return GetPosition(null, twoHanded: false);
		}

		public static Vector3 GetPosition(string name, bool twoHanded = false)
		{
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_0101: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			string text = Utils.RemoveClone(name ?? "");
			if (1 == 0)
			{
			}
			Vector3 result = (Vector3)(text switch
			{
				"SoccerBall" => new Vector3(-6.8f, 4.4f, -7.75f), 
				"LungApparatusTurnedOff" => new Vector3(-6.8f, 4.4f, -6.65f), 
				"RedLocustHive" => new Vector3(-6.8f, 4.4f, -5.65f), 
				"WhoopieCushion" => new Vector3(9f, 2f, -8.25f), 
				"ShotgunItem" => new Vector3(8.75f, 2f, -5.5f), 
				_ => twoHanded ? new Vector3(-4.5f, 3f, -5.25f) : new Vector3(-2.25f, 2f, -5.25f), 
			});
			if (1 == 0)
			{
			}
			return result;
		}

		public static Vector3 GetToolPosition(string name)
		{
			//IL_0295: Unknown result type (might be due to invalid IL or missing references)
			//IL_029a: Unknown result type (might be due to invalid IL or missing references)
			//IL_027b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0280: Unknown result type (might be due to invalid IL or missing references)
			//IL_03aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_03af: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0302: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0393: Unknown result type (might be due to invalid IL or missing references)
			//IL_0398: Unknown result type (might be due to invalid IL or missing references)
			//IL_0261: Unknown result type (might be due to invalid IL or missing references)
			//IL_0266: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_0331: Unknown result type (might be due to invalid IL or missing references)
			//IL_0336: Unknown result type (might be due to invalid IL or missing references)
			//IL_034b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0350: Unknown result type (might be due to invalid IL or missing references)
			//IL_0317: Unknown result type (might be due to invalid IL or missing references)
			//IL_031c: Unknown result type (might be due to invalid IL or missing references)
			//IL_037c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0381: Unknown result type (might be due to invalid IL or missing references)
			//IL_02af: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0365: Unknown result type (might be due to invalid IL or missing references)
			//IL_036a: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c6: Unknown result type (might be due to invalid IL or missing references)
			string text = Utils.RemoveClone(name);
			if (1 == 0)
			{
			}
			Vector3 result = (Vector3)(text switch
			{
				"ShovelItem" => new Vector3(-1.5f, 0.3f, 1.5f), 
				"Key" => new Vector3(-0.3f, 0.6f, 1.5f), 
				"ShotgunShell" => new Vector3(-0.3f, 0.6f, 2f), 
				"Boombox" => new Vector3(-0.3f, 0.5f, 3.2f), 
				"JetpackItem" => new Vector3(-0.3f, 0.2f, 0.5f), 
				"WeedKillerItem" => new Vector3(-2.05f, 0.5f, 2f), 
				"SprayPaintItem" => new Vector3(-1.7f, 0.5f, 2f), 
				"BBFlashlight" => new Vector3(-1.3f, 0.2f, 2f), 
				"FlashlightItem" => new Vector3(-1.3f, 0.65f, 2f), 
				"StunGrenade" => new Vector3(-1.2f, 0.5f, 2f), 
				"TZPChemical" => new Vector3(-0.55f, 0.2f, 2f), 
				"LockPickerItem" => new Vector3(-2f, 0.5f, 2.4f), 
				"WalkieTalkie" => new Vector3(-1.4f, 0.6f, 2.4f), 
				"PatcherGunItem" => new Vector3(-1.1f, 0.6f, 2.4f), 
				"BeltBagItem" => new Vector3(-0.35f, 0.5f, 2.3000002f), 
				_ => new Vector3(-2f, 0.6f, 0.5f), 
			});
			if (1 == 0)
			{
			}
			return result;
		}

		public static Vector3 GetPosition(GrabbableObject item)
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			return item.itemProperties.isScrap ? GetPosition(((Object)item).name, item.itemProperties.twoHanded) : GetToolPosition(((Object)item).name);
		}
	}
	[Obsolete]
	internal static class ItemList
	{
		internal static readonly Dictionary<string, Vector3> GoodItems = new Dictionary<string, Vector3>
		{
			{
				"Hairdryer",
				new Vector3(-0.69f, 0.35f, -12.76f)
			},
			{
				"Hairbrush",
				new Vector3(3.02f, 0.38f, -13.46f)
			},
			{
				"EasterEgg",
				new Vector3(-5.05f, 0.35f, -14.6f)
			},
			{
				"Mug",
				new Vector3(-1.18f, 0.35f, -14.37f)
			},
			{
				"Dentures",
				new Vector3(-1.87f, 0.36f, -13.35f)
			},
			{
				"FancyLamp",
				new Vector3(2.89f, 0.29f, -14.23f)
			},
			{
				"ComedyMask",
				new Vector3(-2.65f, 0.35f, -14.5f)
			},
			{
				"FancyRing",
				new Vector3(-2.06f, 0.35f, -14.41f)
			},
			{
				"TragedyMask",
				new Vector3(-2.81f, 0.35f, -13.96f)
			},
			{
				"BinFullOfBottles",
				new Vector3(-3.76f, 0.35f, -14.61f)
			},
			{
				"ToyCube",
				new Vector3(-2.21f, 0.35f, -12.43f)
			},
			{
				"FancyGlass",
				new Vector3(-4.63f, 0.35f, -12.38f)
			},
			{
				"FishTestProp",
				new Vector3(-5.07f, 0.35f, -15.2f)
			},
			{
				"PerfumeBottle",
				new Vector3(0.02f, 0.35f, -15.96f)
			},
			{
				"Painting",
				new Vector3(2.56f, 0.29f, -15.86f)
			},
			{
				"Airhorn",
				new Vector3(1.21f, 0.35f, -13.02f)
			},
			{
				"RedSodaCan",
				new Vector3(-0.61f, 0.35f, -13.66f)
			},
			{
				"RubberDucky",
				new Vector3(9.65f, 1.73f, -13.98f)
			},
			{
				"MagnifyingGlass",
				new Vector3(-2.66f, 0.38f, -14.95f)
			},
			{
				"Toothpaste",
				new Vector3(-3.68f, 0.35f, -15.28f)
			},
			{
				"Candy",
				new Vector3(-2.3f, 0.35f, -15.96f)
			},
			{
				"RedLocustHive",
				new Vector3(7.59f, 0.29f, -12.63f)
			},
			{
				"TeaKettle",
				new Vector3(-3.71f, 0.35f, -13.75f)
			},
			{
				"HandBell",
				new Vector3(-3.21f, 0.35f, -13.04f)
			},
			{
				"RobotToy",
				new Vector3(1.02f, 0.29f, -15.95f)
			},
			{
				"Clownhorn",
				new Vector3(1.21f, 0.35f, -13.02f)
			},
			{
				"OldPhone",
				new Vector3(-0.53f, 0.35f, -14.55f)
			},
			{
				"LaserPointer",
				new Vector3(-5.07f, 0.35f, -14.35f)
			},
			{
				"Magic7Ball",
				new Vector3(-4.93f, 0.37f, -13.61f)
			}
		};

		internal static readonly Dictionary<string, Vector3> BadItems = new Dictionary<string, Vector3>
		{
			{
				"StopSign",
				new Vector3(4.13f, 0.37f, -13.58f)
			},
			{
				"YieldSign",
				new Vector3(4.13f, 0.37f, -13.58f)
			},
			{
				"CookieMoldPan",
				new Vector3(4.13f, 0.37f, -13.58f)
			},
			{
				"DiyFlashbang",
				new Vector3(4.13f, 0.37f, -13.58f)
			},
			{
				"PillBottle",
				new Vector3(4.13f, 0.37f, -13.58f)
			},
			{
				"Dustpan",
				new Vector3(4.13f, 0.37f, -13.58f)
			},
			{
				"SteeringWheel",
				new Vector3(4.13f, 0.37f, -13.58f)
			},
			{
				"Remote",
				new Vector3(4.13f, 0.37f, -13.58f)
			},
			{
				"ChemicalJug",
				new Vector3(4.13f, 0.37f, -13.58f)
			},
			{
				"Flask",
				new Vector3(4.13f, 0.37f, -13.58f)
			},
			{
				"EnginePart",
				new Vector3(4.13f, 0.37f, -13.58f)
			},
			{
				"EggBeater",
				new Vector3(4.13f, 0.37f, -13.58f)
			},
			{
				"BigBolt",
				new Vector3(4.13f, 0.37f, -13.58f)
			},
			{
				"MetalSheet",
				new Vector3(4.13f, 0.37f, -13.58f)
			},
			{
				"WhoopieCushion",
				new Vector3(9.73f, 1.74f, -15.2f)
			},
			{
				"Cog",
				new Vector3(4.13f, 0.37f, -13.58f)
			}
		};
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "baer1.ShipSort";

		public const string PLUGIN_NAME = "LethalShipSort";

		public const string PLUGIN_VERSION = "1.4.1";
	}
}