Decompiled source of BiggerShip v1.0.5

BiggerShip.dll

Decompiled a week ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
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 BiggerShip.Compatibility;
using BiggerShip.Definitions;
using BiggerShip.Enums;
using BiggerShip.NetcodePatcher;
using BiggerShip.Patches.TooManySuit;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using MrovLib;
using MrovLib.Compatibility;
using MrovLib.Events;
using ScienceBirdTweaks.Patches;
using TooManySuits;
using Unity.AI.Navigation;
using UnityEngine;
using UnityEngine.AI;
using UniversalRadar.Patches;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("ClientNetworkTransform")]
[assembly: IgnoresAccessChecksTo("com.olegknyazev.softmask")]
[assembly: IgnoresAccessChecksTo("DissonanceVoip")]
[assembly: IgnoresAccessChecksTo("EasyTextEffects")]
[assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")]
[assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")]
[assembly: IgnoresAccessChecksTo("MrovLib")]
[assembly: IgnoresAccessChecksTo("ScienceBird.ScienceBirdTweaks")]
[assembly: IgnoresAccessChecksTo("ScienceBird.UniversalRadar")]
[assembly: IgnoresAccessChecksTo("TooManySuits")]
[assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")]
[assembly: IgnoresAccessChecksTo("Unity.Burst")]
[assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")]
[assembly: IgnoresAccessChecksTo("Unity.Collections")]
[assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")]
[assembly: IgnoresAccessChecksTo("Unity.Jobs")]
[assembly: IgnoresAccessChecksTo("Unity.Mathematics")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")]
[assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")]
[assembly: IgnoresAccessChecksTo("Unity.Services.QoS")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Relay")]
[assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")]
[assembly: IgnoresAccessChecksTo("Unity.Timeline")]
[assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UI")]
[assembly: IgnoresAccessChecksTo("WeatherRegistry")]
[assembly: AssemblyCompany("BiggerShip")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("A template for Lethal Company")]
[assembly: AssemblyFileVersion("1.0.5.0")]
[assembly: AssemblyInformationalVersion("1.0.5+64fe4c6e438d64ec44cfda8676b3d7ed36eb2e98")]
[assembly: AssemblyProduct("BiggerShip")]
[assembly: AssemblyTitle("BiggerShip")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/AndreyMrovol/LethalTemplate/")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: NetcodePatchedAssembly]
internal class <Module>
{
	static <Module>()
	{
	}
}
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 BiggerShip
{
	internal class BuildNavmesh
	{
		private static Dictionary<GameObject, Vector3> OriginalOffMeshLinkPositions = new Dictionary<GameObject, Vector3>();

		private static GameObject NavmeshBlockers;

		public static void ReplaceNavmeshes()
		{
			Stopwatch stopwatch = new Stopwatch();
			stopwatch.Start();
			GameObject val = GameObject.FindGameObjectWithTag("OutsideLevelNavMesh");
			if ((Object)(object)val == (Object)null)
			{
				((Logger)Plugin.debugLogger).LogWarning("No GameObject with tag 'OutsideLevelNavMesh' found");
				return;
			}
			RemoveVanillaNavmesh(val);
			ChangeOffMeshLinks(val);
			SpawnNavmeshBlockers(val);
			RebuildNavmesh(val);
			stopwatch.Stop();
			((Logger)Plugin.debugLogger).LogDebug($"Navmesh rebuilt in {stopwatch.ElapsedMilliseconds} ms");
		}

		public static void RemoveVanillaNavmesh(GameObject Environment)
		{
			GameObject gameObject = ((Component)Environment.transform.Find("NavMeshColliders")).gameObject;
			Transform val = gameObject.transform.Find("OffMeshLinks");
			if ((Object)(object)val == (Object)null)
			{
				((Logger)Plugin.debugLogger).LogWarning("No OffMeshLinks found under NavMeshColliders");
				return;
			}
			Transform obj = val.Find("ShipLadder");
			if (obj != null)
			{
				((Component)obj).gameObject.SetActive(false);
			}
			Transform obj2 = val.Find("ShipLadder2");
			if (obj2 != null)
			{
				((Component)obj2).gameObject.SetActive(false);
			}
			Transform val2 = gameObject.transform.Find("PlayerShipNavmesh");
			if (val2 != null)
			{
				((Component)val2).gameObject.SetActive(false);
			}
		}

		public static void ChangeOffMeshLinks(GameObject Environment)
		{
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Expected O, but got Unknown
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: 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)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: 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_00ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
			Transform val = Variables.HangarShip.transform.Find("ShipExtended(Clone)/ShipExtended/ShipNavmesh/OffMeshLinks");
			RaycastHit val3 = default(RaycastHit);
			foreach (Transform item in val)
			{
				Transform val2 = item;
				GameObject gameObject = ((Component)val2.Find("Bottom")).gameObject;
				OffMeshLink component = ((Component)val2).GetComponent<OffMeshLink>();
				Vector3 localPosition = component.endTransform.localPosition;
				OriginalOffMeshLinkPositions[((Component)val2).gameObject] = localPosition;
				if (Physics.Raycast(gameObject.transform.position, Vector3.down, ref val3, 5f, LayerMask.GetMask(new string[2] { "Default", "Room" })))
				{
					gameObject.transform.position = ((RaycastHit)(ref val3)).point;
					component.endTransform = gameObject.transform;
					((Logger)Plugin.debugLogger).LogDebug($"Adjusted OffMeshLink {((Object)val2).name} from {localPosition} to {component.endTransform.localPosition}");
				}
				if (component.costOverride != 0f)
				{
					component.costOverride = 0f;
				}
				component.UpdatePositions();
			}
		}

		public static void SpawnNavmeshBlockers(GameObject Environment)
		{
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = null;
			if ((Object)(object)NavmeshBlockers == (Object)null)
			{
				val = (NavmeshBlockers = Variables.BiggerShipBundle.LoadAsset<GameObject>("assets/lethalcompany/biggership/navmeshblockerextended.prefab"));
			}
			if ((Object)(object)val != (Object)null)
			{
				NavmeshBlockers = Object.Instantiate<GameObject>(val);
				NavmeshBlockers.transform.SetParent(Environment.transform);
				NavmeshBlockers.transform.position = new Vector3(3.5811f, 0.8754f, -14.5813f);
				NavmeshBlockers.transform.rotation = Quaternion.Euler(-90f, 0f, 0f);
				NavmeshBlockers.transform.localScale = new Vector3(100f, 100f, 100f);
				((Logger)Plugin.debugLogger).LogDebug($"Instantiated NavmeshBlockers at position {NavmeshBlockers.transform.position}");
			}
		}

		public static void RebuildNavmesh(GameObject Environment)
		{
			Environment.GetComponent<NavMeshSurface>().BuildNavMesh();
		}

		public static void RestoreOffMeshLinks()
		{
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			foreach (KeyValuePair<GameObject, Vector3> originalOffMeshLinkPosition in OriginalOffMeshLinkPositions)
			{
				if ((Object)(object)originalOffMeshLinkPosition.Key != (Object)null)
				{
					OffMeshLink component = originalOffMeshLinkPosition.Key.GetComponent<OffMeshLink>();
					if ((Object)(object)component != (Object)null)
					{
						component.endTransform.localPosition = originalOffMeshLinkPosition.Value;
						component.UpdatePositions();
					}
				}
			}
		}
	}
	internal class ConfigManager
	{
		public static ConfigFile configFile;

		internal static ConfigEntry<LoggingType> Debug { get; private set; }

		internal static ConfigEntry<ChargeStationPlacement> ChargeStation { get; private set; }

		internal static ConfigEntry<MagnetLeverPlacement> MagnetLever { get; private set; }

		internal static ConfigEntry<DoorControlPanelPlacement> DoorControlPanel { get; private set; }

		internal static ConfigEntry<bool> ShipPillars { get; private set; }

		internal static ConfigEntry<bool> SuitRack { get; private set; }

		public static ConfigManager Instance { get; private set; }

		private ConfigManager(ConfigFile config)
		{
			configFile = config;
			Debug = configFile.Bind<LoggingType>("General", "Logging levels", (LoggingType)0, "Enable debug logging");
			ChargeStation = configFile.Bind<ChargeStationPlacement>("Placement", "Charge Station", ChargeStationPlacement.Right, "Change the charge station's placement");
			MagnetLever = configFile.Bind<MagnetLeverPlacement>("Placement", "Magnet Lever", MagnetLeverPlacement.Front, "Change the magnet lever's placement");
			DoorControlPanel = configFile.Bind<DoorControlPanelPlacement>("Placement", "Door Control Panel", DoorControlPanelPlacement.Vanilla, "Change the door control panel's placement");
			ShipPillars = configFile.Bind<bool>("Placement", "Pillars", true, "Should the ship have pillars inside?");
			SuitRack = configFile.Bind<bool>("Placement", "Suit Rack", true, "Should the ship have a suit rack? This is only visual, the suits will still spawn!");
		}

		internal static void Init(ConfigFile config)
		{
			Instance = new ConfigManager(config);
		}
	}
	public class Logger : Logger
	{
		public Logger(string SourceName, LoggingType defaultLoggingType = 1)
			: base(SourceName, defaultLoggingType)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			((Logger)this).ModName = SourceName;
			((Logger)this).LogSource = Logger.CreateLogSource("BiggerShip");
			((Logger)this)._name = SourceName;
		}

		public override bool ShouldLog(LoggingType type)
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			return LocalConfigManager.Debug.Value >= type;
		}
	}
	public static class PlacementManager
	{
		public static Dictionary<MagnetLeverPlacement, ObjectNewPosition> MagnetLeverPositions = new Dictionary<MagnetLeverPlacement, ObjectNewPosition>
		{
			{
				MagnetLeverPlacement.Front,
				new ObjectNewPosition
				{
					Name = "MagnetLever",
					Position = new Vector3(-7.4955f, 2.114f, -9.733f),
					Rotation = new Vector3(90f, 180f, 0f)
				}
			},
			{
				MagnetLeverPlacement.Back,
				new ObjectNewPosition
				{
					Name = "MagnetLever",
					Position = new Vector3(10.499f, 1.614f, -10.033f),
					Rotation = new Vector3(90f, 57.878f, 0f)
				}
			},
			{
				MagnetLeverPlacement.Inside,
				new ObjectNewPosition
				{
					Name = "MagnetLever",
					Position = new Vector3(9.85f, 2.7868f, -5.5257f),
					Rotation = new Vector3(90f, 180f, 0f),
					Scale = new Vector3(1.2141f, 1.3141f, 1.4141f)
				}
			}
		};

		public static Dictionary<ChargeStationPlacement, ObjectNewPosition> ChargeStationPositions = new Dictionary<ChargeStationPlacement, ObjectNewPosition> { 
		{
			ChargeStationPlacement.Left,
			new ObjectNewPosition
			{
				Name = "ShipModels2b/ChargeStation",
				Position = new Vector3(-5.9898f, 1.2561f, -4.902f),
				Rotation = new Vector3(270f, 180f, 0f)
			}
		} };

		public static Dictionary<DoorControlPanelPlacement, List<ObjectNewPosition>> DoorControlPanelPositions = new Dictionary<DoorControlPanelPlacement, List<ObjectNewPosition>>
		{
			{
				DoorControlPanelPlacement.Vanilla,
				new List<ObjectNewPosition>
				{
					new ObjectNewPosition
					{
						Name = "ShipModels2b/MonitorWall/SingleScreen",
						Position = new Vector3(-11.798f, -1.186f, -5.1814f)
					},
					new ObjectNewPosition
					{
						Name = "AnimatedShipDoor/HangarDoorButtonPanel",
						Position = new Vector3(-5.4f, 2.2f, -10.1f)
					}
				}
			},
			{
				DoorControlPanelPlacement.Compact,
				new List<ObjectNewPosition>
				{
					new ObjectNewPosition
					{
						Name = "AnimatedShipDoor/HangarDoorButtonPanel",
						Position = new Vector3(-6f, 2.188f, -10.446f)
					},
					new ObjectNewPosition
					{
						Name = "ShipModels2b/MonitorWall/SingleScreen",
						Position = new Vector3(-12.269f, -1.267f, -5.525f)
					}
				}
			}
		};

		public static void SetNewPlacement(ObjectNewPosition position)
		{
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: 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_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0146: Unknown result type (might be due to invalid IL or missing references)
			Transform val = Variables.HangarShip.transform.Find(position.Name);
			if ((Object)(object)val == (Object)null)
			{
				Plugin.logger.LogWarning((object)("Object " + position.Name + " not found on ship, skipping."));
				return;
			}
			StringBuilder stringBuilder = new StringBuilder();
			stringBuilder.Append(position.Name + ": ");
			if (position.ToRemove)
			{
				stringBuilder.Append("has been removed.");
				Object.Destroy((Object)(object)((Component)val).gameObject);
				return;
			}
			GameObject gameObject = ((Component)val).gameObject;
			if (position.Position != Vector3.zero)
			{
				val.localPosition = position.Position;
				if ((Object)(object)gameObject.GetComponent<AutoParentToShip>() != (Object)null)
				{
					gameObject.GetComponent<AutoParentToShip>().positionOffset = position.Position;
				}
				stringBuilder.Append("position: " + ((object)(Vector3)(ref position.Position)).ToString() + "; ");
			}
			if (position.Rotation != Vector3.zero)
			{
				val.localEulerAngles = position.Rotation;
				stringBuilder.Append("rotation: " + ((object)(Vector3)(ref position.Rotation)).ToString() + "; ");
			}
			if (position.Scale != Vector3.zero)
			{
				val.localScale = position.Scale;
				stringBuilder.Append("scale: " + ((object)(Vector3)(ref position.Scale)).ToString() + "; ");
			}
			((Logger)Plugin.debugLogger).LogDebug(stringBuilder.ToString());
		}
	}
	[BepInPlugin("BiggerShip", "BiggerShip", "1.0.5")]
	[BepInIncompatibility("mborsh.WiderShipMod")]
	[BepInIncompatibility("MelanieMelicious.2StoryShip")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class Plugin : BaseUnityPlugin
	{
		internal static ManualLogSource logger;

		internal static Logger debugLogger = new Logger("Debug", (LoggingType)2);

		internal static Harmony harmony = new Harmony("BiggerShip");

		internal static TooManySuitsCompat TooManySuitsCompat;

		internal static ScienceBirdTweaksCompat ScienceBirdTweaksCompat;

		internal static UniversalRadarCompat UniversalRadarCompat;

		private void Awake()
		{
			logger = ((BaseUnityPlugin)this).Logger;
			harmony.PatchAll();
			ConfigManager.Init(((BaseUnityPlugin)this).Config);
			logger.LogWarning((object)"Enabling full debug logging!");
			ConfigManager.Debug.Value = (LoggingType)2;
			EventManager.SceneLoaded.AddListener((ParameterEvent<string>)delegate(string scene)
			{
				if (scene == "SampleSceneRelay")
				{
					ReplaceVanillaShip.Init();
				}
			});
			TooManySuitsCompat = new TooManySuitsCompat("TooManySuits");
			TooManySuitsCompat.Init();
			ScienceBirdTweaksCompat = new ScienceBirdTweaksCompat("ScienceBird.ScienceBirdTweaks");
			ScienceBirdTweaksCompat.Init();
			UniversalRadarCompat = new UniversalRadarCompat("ScienceBird.UniversalRadar");
			UniversalRadarCompat.Init();
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin BiggerShip is loaded!");
		}
	}
	public static class ReplaceVanillaShip
	{
		internal static Dictionary<ShipPart, GameObject> vanillaObjects = new Dictionary<ShipPart, GameObject>();

		internal static Dictionary<ShipPart, GameObject> replacementObjects = new Dictionary<ShipPart, GameObject>();

		internal static GameObject HangarShip
		{
			get
			{
				return Variables.HangarShip;
			}
			set
			{
				Variables.HangarShip = value;
			}
		}

		public static void Init()
		{
			HangarShip = GameObject.Find("HangarShip");
			vanillaObjects[ShipPart.Plane_001] = ((Component)HangarShip.transform.Find("Plane.001")).gameObject;
			vanillaObjects[ShipPart.ShipElectricLights] = ((Component)HangarShip.transform.Find("ShipElectricLights")).gameObject;
			if ((Object)(object)Variables.BiggerShipBundle == (Object)null)
			{
				string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
				string text = Path.Combine(directoryName, "biggership.assetbundle");
				Variables.BiggerShipBundle = AssetBundle.LoadFromFile(text);
				if ((Object)(object)Variables.BiggerShipBundle == (Object)null)
				{
					Plugin.logger.LogError((object)"Failed to load AssetBundle!!!");
					return;
				}
			}
			List<string> list = Variables.BiggerShipBundle.GetAllAssetNames().ToList();
			foreach (string item in list)
			{
				((Logger)Plugin.debugLogger).LogWarning("assetname: " + item);
			}
			ReplaceVanillaObjects();
			AlignShipPartsToBiggerShip();
		}

		public static void ReplaceVanillaObjects()
		{
			string text = "assets/lethalcompany/biggership/";
			foreach (ShipPart value2 in Enum.GetValues(typeof(ShipPart)))
			{
				GameObject value;
				GameObject val = (vanillaObjects.TryGetValue(value2, out value) ? value : null);
				string text2 = text + value2.ToString().ToLowerInvariant() + "extended.prefab";
				GameObject val2 = Variables.BiggerShipBundle.LoadAsset<GameObject>(text2);
				if ((Object)(object)val2 != (Object)null)
				{
					GameObject val3 = Object.Instantiate<GameObject>(val2, HangarShip.transform);
					val3.AddComponent<MeshCollider>();
					val3.GetComponent<MeshCollider>().convex = false;
					replacementObjects[value2] = val3;
					if ((Object)(object)val == (Object)null)
					{
						((Logger)Plugin.debugLogger).LogCustom($"Vanilla object for {value2} is null, skipping replacement.", (LogLevel)4, (LoggingType)1);
						continue;
					}
					val.SetActive(false);
					((Object)val3).name = ((Object)val).name;
					Object.Destroy((Object)(object)val);
				}
				else
				{
					Plugin.logger.LogError((object)("Failed to load asset for " + text2));
				}
			}
			Variables.RightmostSuitPosition = replacementObjects[ShipPart.SuitRack].transform.Find("RightmostSuitPlacement");
			Variables.ShipLights = ((Component)replacementObjects[ShipPart.ShipElectricLights].transform.Find("ShipElectricLights")).GetComponentInChildren<ShipLights>();
			if (!ConfigManager.ShipPillars.Value)
			{
				((Component)replacementObjects[ShipPart.Ship].transform.Find("ShipExtended/ShipWalls/ShipRibs")).gameObject.SetActive(false);
			}
			if (!ConfigManager.SuitRack.Value)
			{
				((Component)replacementObjects[ShipPart.SuitRack].transform).gameObject.SetActive(false);
			}
			Plugin.logger.LogInfo((object)"Replaced vanilla ship parts with bigger versions.");
		}

		public static void AlignShipPartsToBiggerShip()
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0156: Unknown result type (might be due to invalid IL or missing references)
			//IL_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_018c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0191: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0264: Unknown result type (might be due to invalid IL or missing references)
			//IL_0269: Unknown result type (might be due to invalid IL or missing references)
			//IL_027f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0284: Unknown result type (might be due to invalid IL or missing references)
			//IL_0306: Unknown result type (might be due to invalid IL or missing references)
			//IL_030b: Unknown result type (might be due to invalid IL or missing references)
			//IL_033c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0341: Unknown result type (might be due to invalid IL or missing references)
			//IL_0372: Unknown result type (might be due to invalid IL or missing references)
			//IL_0377: Unknown result type (might be due to invalid IL or missing references)
			//IL_038d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0392: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_042f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0434: Unknown result type (might be due to invalid IL or missing references)
			//IL_0465: Unknown result type (might be due to invalid IL or missing references)
			//IL_046a: Unknown result type (might be due to invalid IL or missing references)
			//IL_049b: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_04bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0522: Unknown result type (might be due to invalid IL or missing references)
			//IL_0527: Unknown result type (might be due to invalid IL or missing references)
			//IL_0558: Unknown result type (might be due to invalid IL or missing references)
			//IL_055d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0573: Unknown result type (might be due to invalid IL or missing references)
			//IL_0578: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_0666: Unknown result type (might be due to invalid IL or missing references)
			//IL_066b: Unknown result type (might be due to invalid IL or missing references)
			//IL_069c: Unknown result type (might be due to invalid IL or missing references)
			//IL_06a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_06d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_06d7: Unknown result type (might be due to invalid IL or missing references)
			List<ObjectNewPosition> list = new List<ObjectNewPosition>(44)
			{
				new ObjectNewPosition
				{
					Name = "AnimatedShipDoor/HangarDoorButtonPanel",
					Position = new Vector3(-6f, 2.188f, -10.446f)
				},
				new ObjectNewPosition
				{
					Name = "BezierCurve"
				},
				new ObjectNewPosition
				{
					Name = "CatwalkRailLining"
				},
				new ObjectNewPosition
				{
					Name = "CatwalkRailLiningB"
				},
				new ObjectNewPosition
				{
					Name = "CatwalkShip"
				},
				new ObjectNewPosition
				{
					Name = "CatwalkUnderneathSupports"
				},
				new ObjectNewPosition
				{
					Name = "Cube.005"
				},
				new ObjectNewPosition
				{
					Name = "Cube.006"
				},
				new ObjectNewPosition
				{
					Name = "Cube.007"
				},
				new ObjectNewPosition
				{
					Name = "Cube.008"
				},
				new ObjectNewPosition
				{
					Name = "GiantCylinderMagnet",
					Position = new Vector3(2.5f, 2.44f, -11.1f)
				},
				new ObjectNewPosition
				{
					Name = "LadderShort",
					Position = new Vector3(6.63f, -2.48f, -0.38f)
				},
				new ObjectNewPosition
				{
					Name = "LadderShort (1)",
					Position = new Vector3(-7f, -2.4955f, -12.2756f)
				},
				new ObjectNewPosition
				{
					Name = "LightSwitchContainer"
				},
				new ObjectNewPosition
				{
					Name = "MeterBoxDevice.001"
				},
				new ObjectNewPosition
				{
					Name = "NurbsPath.002"
				},
				new ObjectNewPosition
				{
					Name = "NurbsPath.004"
				},
				new ObjectNewPosition
				{
					Name = "OutsideShipRoom/Ladder",
					Position = new Vector3(-0.1785f, -0.1324f, -2.65f),
					Scale = new Vector3(0.5805f, 0.541f, 0.5805f)
				},
				new ObjectNewPosition
				{
					Name = "Pipework2.002"
				},
				new ObjectNewPosition
				{
					Name = "Railing"
				},
				new ObjectNewPosition
				{
					Name = "RightmostSuitPlacement"
				},
				new ObjectNewPosition
				{
					Name = "ScavengerModelSuitParts/Circle.004",
					Position = new Vector3(-7.26f, -3.37f, -3.98f)
				},
				new ObjectNewPosition
				{
					Name = "ShipElectricLights/LightSwitchContainer",
					Position = new Vector3(0.9935f, 1.4172f, -3.036f)
				},
				new ObjectNewPosition
				{
					Name = "ShipInnerRoomBoundsTrigger",
					Position = new Vector3(1.4367f, 1.781f, -6.7f),
					Scale = new Vector3(17.523226f, 5.341722f, 7.51f)
				},
				new ObjectNewPosition
				{
					Name = "ShipInside"
				},
				new ObjectNewPosition
				{
					Name = "ShipInside.001"
				},
				new ObjectNewPosition
				{
					Name = "ShipModels2b/ChargeStation",
					Position = new Vector3(0.957f, 1.2561f, -4.802f)
				},
				new ObjectNewPosition
				{
					Name = "ShipModels2b/Cube.005 (1)",
					Position = new Vector3(-6.192f, 2.637f, -5.18f)
				},
				new ObjectNewPosition
				{
					Name = "ShipModels2b/Cube.005 (2)",
					Position = new Vector3(-6.29f, 2.64f, -5.18f)
				},
				new ObjectNewPosition
				{
					Name = "ShipModels2b/Light",
					Position = new Vector3(-6.1517f, 3.23f, -4.5148f),
					Rotation = new Vector3(270f, 180f, 0f)
				},
				new ObjectNewPosition
				{
					Name = "ShipModels2b/Light (1)",
					Position = new Vector3(1.0879f, 3.0727f, -11.8577f)
				},
				new ObjectNewPosition
				{
					Name = "ShipModels2b/Light (2)",
					Position = new Vector3(-6.1443f, 3.25f, -10.9433f)
				},
				new ObjectNewPosition
				{
					Name = "ShipModels2b/Light (3)",
					Position = new Vector3(1.0957f, 3.13f, -4.399f),
					Rotation = new Vector3(270f, 0f, 0f)
				},
				new ObjectNewPosition
				{
					Name = "ShipModels2b/MonitorWall/SingleScreen",
					Position = new Vector3(-12.269f, -1.267f, -5.525f)
				},
				new ObjectNewPosition
				{
					Name = "ShipRailPosts"
				},
				new ObjectNewPosition
				{
					Name = "ShipRails"
				},
				new ObjectNewPosition
				{
					Name = "SideMachineryLeft"
				},
				new ObjectNewPosition
				{
					Name = "SideMachineryRight"
				},
				new ObjectNewPosition
				{
					Name = "Square"
				},
				new ObjectNewPosition
				{
					Name = "StorageCloset",
					Position = new Vector3(-3.2237f, -0.1303f, -3.3999f)
				},
				new ObjectNewPosition
				{
					Name = "Terminal",
					Position = new Vector3(6.2022f, 0.9266f, -9.3018f)
				},
				new ObjectNewPosition
				{
					Name = "VentEntrance",
					Position = new Vector3(1.499f, 0.693f, -10.473f)
				},
				new ObjectNewPosition
				{
					Name = "WallInsulator"
				},
				new ObjectNewPosition
				{
					Name = "WallInsulator2"
				}
			};
			foreach (ObjectNewPosition item in list)
			{
				PlacementManager.SetNewPlacement(item);
			}
			if (ConfigManager.MagnetLever.Value != 0)
			{
				MagnetLeverPlacement value = ConfigManager.MagnetLever.Value;
				if (PlacementManager.MagnetLeverPositions.TryGetValue(value, out var value2))
				{
					PlacementManager.SetNewPlacement(value2);
				}
			}
			if (ConfigManager.ChargeStation.Value != 0)
			{
				ChargeStationPlacement value3 = ConfigManager.ChargeStation.Value;
				if (PlacementManager.ChargeStationPositions.TryGetValue(value3, out var value4))
				{
					PlacementManager.SetNewPlacement(value4);
				}
			}
			DoorControlPanelPlacement value5 = ConfigManager.DoorControlPanel.Value;
			if (!PlacementManager.DoorControlPanelPositions.TryGetValue(value5, out var value6))
			{
				return;
			}
			foreach (ObjectNewPosition item2 in value6)
			{
				PlacementManager.SetNewPlacement(item2);
			}
		}
	}
	public static class Variables
	{
		public static AssetBundle BiggerShipBundle { get; internal set; }

		public static GameObject HangarShip { get; set; }

		public static Transform RightmostSuitPosition { get; internal set; }

		public static ShipLights ShipLights { get; internal set; }
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "BiggerShip";

		public const string PLUGIN_NAME = "BiggerShip";

		public const string PLUGIN_VERSION = "1.0.5";
	}
}
namespace BiggerShip.Patches
{
	[HarmonyPatch(typeof(HangarShipDoor))]
	public static class HangarShipDoorStartPatch
	{
		[HarmonyPostfix]
		[HarmonyPatch("Start")]
		public static void PatchMethod(HangarShipDoor __instance)
		{
			((Logger)Plugin.debugLogger).LogDebug("Applying HangarShipDoor Start Patch");
			if ((Object)(object)Variables.BiggerShipBundle == (Object)null)
			{
				Plugin.logger.LogError((object)"BiggerShipBundle is null in HangarShipDoor Start Patch!");
				return;
			}
			RuntimeAnimatorController val = Variables.BiggerShipBundle.LoadAsset<RuntimeAnimatorController>("assets/lethalcompany/biggership/assets/animatedshipdoor.controller");
			if ((Object)(object)val == (Object)null)
			{
				Plugin.logger.LogError((object)"Failed to load AnimatedShipDoor Animator Controller from AssetBundle!");
				return;
			}
			((Component)__instance).gameObject.GetComponent<Animator>().runtimeAnimatorController = val;
			if (((CompatibilityBase)Plugin.TooManySuitsCompat).IsModPresent)
			{
				((Logger)Plugin.debugLogger).LogDebug("Reloading TooManySuits!");
				Plugin.TooManySuitsCompat.ReloadSuitRack();
			}
		}
	}
	[HarmonyPatch(typeof(RoundManager))]
	public static class SpawnOutsideHazardsPatch
	{
		[HarmonyPostfix]
		[HarmonyPatch(typeof(RoundManager), "SpawnOutsideHazards")]
		public static void RebakeNavmeshOnLanding(RoundManager __instance)
		{
			((Logger)Plugin.debugLogger).LogDebug("Patching RoundManager.SpawnOutsideHazards");
			BuildNavmesh.ReplaceNavmeshes();
		}
	}
	[HarmonyPatch(typeof(StartOfRound))]
	internal class SetPlanetsWeatherPatch
	{
		[HarmonyPatch("SetPlanetsWeather")]
		[HarmonyPostfix]
		public static void RestoreOffLinks()
		{
			BuildNavmesh.RestoreOffMeshLinks();
		}
	}
	[HarmonyPatch(typeof(StartOfRound))]
	internal class SuitPositionPatch
	{
		[HarmonyPatch("PositionSuitsOnRack")]
		[HarmonyPostfix]
		public static void AdjustSuitPosition(StartOfRound __instance)
		{
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: 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_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: 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)
			if ((Object)(object)Variables.BiggerShipBundle == (Object)null)
			{
				Plugin.logger.LogError((object)"BiggerShipBundle is null, skipping!");
				return;
			}
			UnlockableSuit[] source = Object.FindObjectsOfType<UnlockableSuit>();
			UnlockableSuit[] array = source.OrderBy((UnlockableSuit suit) => suit.syncedSuitID.Value).ToArray();
			for (int i = 0; i < array.Length; i++)
			{
				UnlockableItem component = ((Component)array[i]).GetComponent<UnlockableItem>();
				AutoParentToShip component2 = ((Component)array[i]).gameObject.GetComponent<AutoParentToShip>();
				Vector3 positionOffset = __instance.rightmostSuitPosition.localPosition + __instance.rightmostSuitPosition.forward * 0.18f * (float)i;
				component2.positionOffset = positionOffset;
			}
		}
	}
	[HarmonyPatch(typeof(StartOfRound))]
	public static class StartOfRoundStartPatch
	{
		[HarmonyPrefix]
		[HarmonyPatch(typeof(StartOfRound), "Start")]
		[HarmonyBefore(new string[] { "TooManySuits", "mrov.TooManySuits" })]
		public static void ChangeRightMostPosition(StartOfRound __instance)
		{
			((Logger)Plugin.debugLogger).LogDebug("Patching StartOfRound.Start");
			__instance.rightmostSuitPosition = ReplaceVanillaShip.replacementObjects[ShipPart.SuitRack].transform.Find("RightmostSuitPlacement");
			__instance.shipRoomLights = Variables.ShipLights;
		}
	}
}
namespace BiggerShip.Patches.TooManySuit
{
	internal class TooManySuitsPatches
	{
		internal static bool DisplaySuitsPrefix(PaginationController __instance)
		{
			//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_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0143: Unknown result type (might be due to invalid IL or missing references)
			//IL_0152: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0162: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Unknown result type (might be due to invalid IL or missing references)
			//IL_017d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0182: Unknown result type (might be due to invalid IL or missing references)
			int num = __instance.CurrentPage * __instance.SuitsPerPage;
			int num2 = Mathf.Min(num + __instance.SuitsPerPage, __instance._allSuits.Length);
			Transform val = StartOfRound.Instance.rightmostSuitPosition.parent.Find("NurbsPath.002");
			Bounds bounds = ((Renderer)((Component)val).GetComponent<MeshRenderer>()).bounds;
			float num3 = ((Bounds)(ref bounds)).size.x - 0.3f;
			float num4 = num3 / (float)__instance.SuitsPerPage;
			int num5 = 0;
			for (int i = 0; i < __instance._allSuits.Length; i++)
			{
				UnlockableSuit val2 = __instance._allSuits[i];
				AutoParentToShip component = ((Component)val2).gameObject.GetComponent<AutoParentToShip>();
				if (!((Object)(object)component == (Object)null))
				{
					bool flag = i >= num && i < num2;
					Renderer[] componentsInChildren = ((Component)val2).gameObject.GetComponentsInChildren<Renderer>();
					foreach (Renderer val3 in componentsInChildren)
					{
						val3.enabled = flag;
					}
					Collider[] componentsInChildren2 = ((Component)val2).gameObject.GetComponentsInChildren<Collider>();
					foreach (Collider val4 in componentsInChildren2)
					{
						val4.enabled = flag;
					}
					InteractTrigger component2 = ((Component)val2).gameObject.GetComponent<InteractTrigger>();
					((Behaviour)component2).enabled = flag;
					component2.interactable = flag;
					if (flag)
					{
						component.overrideOffset = true;
						component.positionOffset = StartOfRound.Instance.rightmostSuitPosition.localPosition + StartOfRound.Instance.rightmostSuitPosition.forward * (num4 * (float)num5);
						component.rotationOffset = new Vector3(0f, 90f, 0f);
						num5++;
					}
				}
			}
			((MonoBehaviour)__instance).StartCoroutine(__instance.UpdateLabel());
			return false;
		}

		internal static bool PatchesPrefix(Patches __instance)
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Expected O, but got Unknown
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = new GameObject("TooManySuitsPageLabel");
			val.SetActive(false);
			RectTransform val2 = val.AddComponent<RectTransform>();
			((Transform)val2).SetParent(StartOfRound.Instance.rightmostSuitPosition, false);
			((Transform)val2).localPosition = Vector3.zero;
			((Transform)val2).localEulerAngles = Vector3.zero;
			((Transform)val2).localScale = Vector3.one * TooManySuits.Config.LabelScale * 0.05f;
			PaginationController val3 = val.AddComponent<PaginationController>();
			val3.SuitsPerPage = (int)((double)TooManySuits.Config.SuitsPerPage * 1.75);
			AutoParentToShip val4 = val.AddComponent<AutoParentToShip>();
			val4.overrideOffset = true;
			val4.positionOffset = new Vector3(-2.125f, 2.958f, -9.902f);
			val4.rotationOffset = new Vector3(0f, 180f, 0f);
			val.SetActive(true);
			TooManySuits.SuitManager.UpdateSuits();
			return false;
		}
	}
}
namespace BiggerShip.Enums
{
	public enum ChargeStationPlacement
	{
		Right,
		Left
	}
	public enum DoorControlPanelPlacement
	{
		Vanilla,
		Compact
	}
	public enum MagnetLeverPlacement
	{
		Back,
		Front,
		Inside
	}
	public enum ShipPart
	{
		Ship,
		ShipElectricLights,
		SideMachineries,
		SuitRack,
		Pipes,
		Plane_001
	}
}
namespace BiggerShip.Definitions
{
	public struct ObjectNewPosition
	{
		public Vector3 Position;

		public Vector3 Rotation;

		public Vector3 Scale;

		public string Name { get; set; }

		public bool ToRemove
		{
			get
			{
				//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_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_0025: Unknown result type (might be due to invalid IL or missing references)
				//IL_002a: Unknown result type (might be due to invalid IL or missing references)
				if (Position == Vector3.zero && Rotation == Vector3.zero)
				{
					return Scale == Vector3.zero;
				}
				return false;
			}
		}
	}
}
namespace BiggerShip.Compatibility
{
	internal class ScienceBirdTweaksCompat : CompatibilityBase
	{
		public ScienceBirdTweaksCompat(string guid, string version = null)
			: base(guid, version)
		{
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public void Init()
		{
			if (((CompatibilityBase)this).IsModPresent)
			{
				((Logger)Plugin.debugLogger).LogDebug("ScienceBirdTweaks detected, applying patches.");
				PatchThings();
			}
		}

		public void PatchThings()
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Expected O, but got Unknown
			Plugin.harmony.Patch((MethodBase)AccessTools.Method(typeof(OccupancyPatch), "UpdatePoster", (Type[])null, (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, new HarmonyMethod(typeof(ScienceBirdTweaksCompat), "OccupancyTranspiler", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null);
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static IEnumerable<CodeInstruction> OccupancyTranspiler(IEnumerable<CodeInstruction> instructions)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Expected O, but got Unknown
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Expected O, but got Unknown
			CodeMatcher val = new CodeMatcher(instructions, (ILGenerator)null);
			try
			{
				val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[2]
				{
					new CodeMatch((OpCode?)OpCodes.Stsfld, (object)AccessTools.Field(typeof(OccupancyPatch), "playerCount"), (string)null),
					new CodeMatch((OpCode?)OpCodes.Ldstr, (object)"HangarShip/Plane.001", (string)null)
				});
				if (val.IsInvalid)
				{
					((Logger)Plugin.debugLogger).LogWarning("OccupancyTranspiler: Could not find target pattern, returning original instructions");
					return instructions;
				}
				val.Advance(1);
				if (val.Opcode != OpCodes.Ldstr || (string)val.Operand != "HangarShip/Plane.001")
				{
					((Logger)Plugin.debugLogger).LogWarning("OccupancyTranspiler: Unexpected instruction found, returning original instructions");
					return instructions;
				}
				val.SetOperandAndAdvance((object)"HangarShip/Plane.001/Posters/Poster6");
				((Logger)Plugin.debugLogger).LogInfo("OccupancyTranspiler: Successfully replaced GameObject path");
			}
			catch (Exception ex)
			{
				((Logger)Plugin.debugLogger).LogError("OccupancyTranspiler: Exception occurred - " + ex.Message);
				return instructions;
			}
			return val.InstructionEnumeration();
		}
	}
	internal class TooManySuitsCompat : CompatibilityBase
	{
		public TooManySuitsCompat(string guid, string version = null)
			: base(guid, version)
		{
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public void Init()
		{
			if (((CompatibilityBase)this).IsModPresent)
			{
				PatchThings();
			}
		}

		public void PatchThings()
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Expected O, but got Unknown
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Expected O, but got Unknown
			Plugin.harmony.Patch((MethodBase)AccessTools.Method(typeof(PaginationController), "DisplayCurrentPage", (Type[])null, (Type[])null), new HarmonyMethod(typeof(TooManySuitsPatches), "DisplaySuitsPrefix", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
			Plugin.harmony.Patch((MethodBase)AccessTools.Method(typeof(Patches), "StartPatch", (Type[])null, (Type[])null), new HarmonyMethod(typeof(TooManySuitsPatches), "PatchesPrefix", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public void ReloadSuitRack()
		{
			if (((CompatibilityBase)this).IsModPresent)
			{
				PaginationController componentInChildren = ((Component)StartOfRound.Instance.rightmostSuitPosition).gameObject.GetComponentInChildren<PaginationController>();
				if (componentInChildren != null)
				{
					componentInChildren.UpdateSuits();
				}
			}
		}
	}
	internal class UniversalRadarCompat : CompatibilityBase
	{
		public UniversalRadarCompat(string guid, string version = null)
			: base(guid, version)
		{
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public void Init()
		{
			if (((CompatibilityBase)this).IsModPresent)
			{
				((Logger)Plugin.debugLogger).LogDebug("UniversalRadar detected, applying patches.");
				PatchThings();
			}
		}

		public void PatchThings()
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Expected O, but got Unknown
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Expected O, but got Unknown
			Plugin.harmony.Patch((MethodBase)AccessTools.Method(typeof(RadarExtraPatches), "SetCamParameters", (Type[])null, (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, new HarmonyMethod(typeof(UniversalRadarCompat), "ShipContourTranspiler", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null);
			Plugin.harmony.Patch((MethodBase)AccessTools.Method(typeof(RadarExtraPatches), "SetShipSpriteColour", (Type[])null, (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, new HarmonyMethod(typeof(UniversalRadarCompat), "ShipContourTranspiler", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null);
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static IEnumerable<CodeInstruction> ShipContourTranspiler(IEnumerable<CodeInstruction> instructions)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Expected O, but got Unknown
			CodeMatcher val = new CodeMatcher(instructions, (ILGenerator)null);
			try
			{
				val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[1]
				{
					new CodeMatch((OpCode?)OpCodes.Ldstr, (object)"Environment/HangarShip/Square", (string)null)
				});
				val.Repeat((Action<CodeMatcher>)delegate(CodeMatcher match)
				{
					match.SetOperandAndAdvance((object)"Environment/HangarShip/ShipExtended(Clone)/ShipExtended/ShipContour");
					((Logger)Plugin.debugLogger).LogInfo("ShipContourTranspiler: Replaced GameObject path");
				}, (Action<string>)null);
			}
			catch (Exception ex)
			{
				((Logger)Plugin.debugLogger).LogError("ShipContourTranspiler: Exception occurred - " + ex.Message);
				return instructions;
			}
			return val.InstructionEnumeration();
		}
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}
namespace BiggerShip.NetcodePatcher
{
	[AttributeUsage(AttributeTargets.Module)]
	internal class NetcodePatchedAssemblyAttribute : Attribute
	{
	}
}