Decompiled source of Entrance Blocker v1.0.4

EntranceBlocker.dll

Decompiled 2 days ago
using System;
using System.Collections;
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 BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using EntranceBlocker.Compatibility.EntranceTeleportOptimizations;
using EntranceBlocker.Components;
using EntranceBlocker.NetcodePatcher;
using EntranceBlocker.Patches;
using EntranceBlocker.Utils;
using EntranceTeleportOptimizations.Patches;
using GameNetcodeStuff;
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: 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("EntranceTeleportOptimizations")]
[assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")]
[assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")]
[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: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("EntranceBlocker")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+fb6875ec1ddbacf4362fb55d087fe6fd61e830ca")]
[assembly: AssemblyProduct("EntranceBlocker")]
[assembly: AssemblyTitle("EntranceBlocker")]
[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.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 EntranceBlocker
{
	internal class EBConfig
	{
		internal static ConfigEntry<float> blockChance = null;

		internal static ConfigEntry<string> blacklistedMoons = null;

		internal static ConfigEntry<string> blacklistedMoonsInside = null;

		internal static List<string> blacklistedMoonsList = new List<string>();

		internal static List<string> blacklistedMoonsInsideList = new List<string>();

		internal static ConfigEntry<bool> blockOutsideMainEntrance = null;

		internal static ConfigEntry<bool> blockInsideMainEntrance = null;

		internal static ConfigEntry<bool> blockOutsideFireExit = null;

		internal static ConfigEntry<bool> blockInsideFireExit = null;

		internal static void CreateConfig(ConfigFile cfg)
		{
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Expected O, but got Unknown
			blockChance = cfg.Bind<float>("General", "Chance", 0.6f, new ConfigDescription("...what's not clear? Why are you looking at this description?", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			blacklistedMoons = cfg.Bind<string>("General", "Blacklisted moons - outside entrances and fire exits", "823 Bozoros,8 Titan,5 Embrion", (ConfigDescription)null);
			blacklistedMoonsInside = cfg.Bind<string>("General", "Blacklisted moons - inside entrances and fire exits", "", (ConfigDescription)null);
			blockOutsideMainEntrance = cfg.Bind<bool>("General", "Block outside main entrance", false, (ConfigDescription)null);
			blockInsideMainEntrance = cfg.Bind<bool>("General", "Block inside main entrance", false, (ConfigDescription)null);
			blockOutsideFireExit = cfg.Bind<bool>("General", "Block outside fire exit", true, (ConfigDescription)null);
			blockInsideFireExit = cfg.Bind<bool>("General", "Block inside fire exit", false, (ConfigDescription)null);
			blacklistedMoonsList = blacklistedMoons.Value.Split(',').ToList();
			blacklistedMoonsInsideList = blacklistedMoonsInside.Value.Split(',').ToList();
			if (blockInsideMainEntrance.Value && blockInsideFireExit.Value)
			{
				EntranceBlockerPlugin.mls.LogError((object)"You tried to block all exits in the interior. This is not supported. Continue at your own risk.");
			}
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("mborsh.EntranceBlocker", "EntranceBlocker", "1.0.3")]
	public class EntranceBlockerPlugin : BaseUnityPlugin
	{
		public const string modGUID = "mborsh.EntranceBlocker";

		public const string modName = "EntranceBlocker";

		public const string modVersion = "1.0.3";

		public static EntranceBlockerPlugin Instance = null;

		internal static ManualLogSource mls = null;

		internal static readonly Harmony harmony = new Harmony("mborsh.EntranceBlocker");

		internal static AssetBundle assetBundle = null;

		internal static string assemblyLocation = null;

		internal static GameObject networkManagerPrefab = null;

		internal static GameObject entranceBlockerPrefab = null;

		internal static EntranceBlockerNO networkManager = null;

		private void Awake()
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Expected O, but got Unknown
			if ((Object)(object)Instance == (Object)null)
			{
				Instance = this;
			}
			mls = ((BaseUnityPlugin)this).Logger;
			ConfigFile cfg = new ConfigFile(Path.Combine(Paths.ConfigPath, "mborsh.EntranceBlocker.cfg"), true);
			EBConfig.CreateConfig(cfg);
			assemblyLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
			assetBundle = AssetBundle.LoadFromFile(Path.Combine(assemblyLocation, "entranceblockerassetbundle"));
			if (Chainloader.PluginInfos.ContainsKey("mattymatty.EntranceTeleportOptimizations"))
			{
				harmony.PatchAll(typeof(mattymattyEntranceTeleportPatch));
			}
			else
			{
				harmony.PatchAll(typeof(EntranceTeleportPatch));
			}
			harmony.PatchAll(typeof(EntranceTeleportMainPatch));
			harmony.PatchAll(typeof(GameNetworkManagerPatch));
			NetcodePatcher();
		}

		private static void NetcodePatcher()
		{
			Type[] types = Assembly.GetExecutingAssembly().GetTypes();
			Type[] array = types;
			foreach (Type type in array)
			{
				MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
				MethodInfo[] array2 = methods;
				foreach (MethodInfo methodInfo in array2)
				{
					object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false);
					if (customAttributes.Length != 0)
					{
						methodInfo.Invoke(null, null);
					}
				}
			}
		}
	}
}
namespace EntranceBlocker.Utils
{
	internal class UtilsStuff
	{
		internal static Vector3 DoMath(EntranceTeleport __instance)
		{
			//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_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: 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_0062: 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_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_0075: 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_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val = ((Component)__instance).transform.InverseTransformPoint(__instance.entrancePoint.position);
			val.y = 0f;
			float magnitude = ((Vector3)(ref val)).magnitude;
			float num = Mathf.Atan2(val.x, val.z) * 57.29578f;
			float num2 = Mathf.Round(num / 90f) * 90f;
			Vector3 val2 = Quaternion.Euler(0f, num2, 0f) * Vector3.forward;
			val2 = ((Vector3)(ref val2)).normalized * magnitude;
			return ((Component)__instance).transform.TransformPoint(val2);
		}

		internal static Vector3 DoRaycast(EntranceTeleport __instance)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: 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_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//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)
			//IL_0031: 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_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: 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_0040: 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_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: 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_00f6: 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_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: 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)
			Vector3 position = __instance.entrancePoint.position;
			Vector3 position2 = ((Component)__instance).transform.position;
			position.y = position2.y;
			Vector3 val = position2 - position;
			Vector3 normalized = ((Vector3)(ref val)).normalized;
			float num = Vector3.Distance(position, position2);
			RaycastHit[] array = Physics.RaycastAll(position, normalized, num, 257);
			RaycastHit[] array2 = array;
			for (int i = 0; i < array2.Length; i++)
			{
				RaycastHit val2 = array2[i];
				if (((Component)((RaycastHit)(ref val2)).transform).gameObject.layer == 0 || ((Component)((RaycastHit)(ref val2)).transform).gameObject.layer == 8)
				{
					float x = ((RaycastHit)(ref val2)).point.x;
					Bounds bounds = ((Collider)((Component)__instance.triggerScript).GetComponent<BoxCollider>()).bounds;
					return new Vector3(x, ((Bounds)(ref bounds)).center.y, ((RaycastHit)(ref val2)).point.z);
				}
			}
			return Vector3.Lerp(position, position2, 0.85f);
		}

		internal static void FunnyMethod()
		{
		}
	}
}
namespace EntranceBlocker.Patches
{
	internal class EntranceTeleportMainPatch
	{
		[HarmonyPostfix]
		[HarmonyPatch(typeof(EntranceTeleport), "Awake")]
		private static void EntranceTeleportAwakePatch(EntranceTeleport __instance)
		{
			if (GameNetworkManager.Instance.isHostingGame && (!__instance.isEntranceToBuilding || __instance.entranceId != 0 || (!EBConfig.blacklistedMoonsList.Contains(StartOfRound.Instance.currentLevel.PlanetName) && EBConfig.blockOutsideMainEntrance.Value)) && (!__instance.isEntranceToBuilding || __instance.entranceId == 0 || (!EBConfig.blacklistedMoonsList.Contains(StartOfRound.Instance.currentLevel.PlanetName) && EBConfig.blockOutsideFireExit.Value)) && (__instance.isEntranceToBuilding || __instance.entranceId != 0 || (!EBConfig.blacklistedMoonsInsideList.Contains(StartOfRound.Instance.currentLevel.PlanetName) && EBConfig.blockInsideMainEntrance.Value)) && (__instance.isEntranceToBuilding || __instance.entranceId == 0 || (!EBConfig.blacklistedMoonsInsideList.Contains(StartOfRound.Instance.currentLevel.PlanetName) && EBConfig.blockInsideFireExit.Value)) && !(Random.Range(0f, 1f) > EBConfig.blockChance.Value))
			{
				((MonoBehaviour)EntranceBlockerPlugin.networkManager).StartCoroutine(EntranceBlockerPlugin.networkManager.WaitForNetworkSpawnServer(__instance));
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(NetworkBehaviour), "OnDestroy")]
		private static void OnTeleportDestroy(NetworkBehaviour __instance)
		{
			EntranceTeleport val = (EntranceTeleport)(object)((__instance is EntranceTeleport) ? __instance : null);
			if (val != null)
			{
				if (EntranceBlockerPlugin.networkManager.blockersDict.TryGetValue(((NetworkBehaviour)val).NetworkObjectId, out EntranceBlocker.Components.EntranceBlocker value))
				{
					Object.Destroy((Object)(object)((Component)value).gameObject);
				}
				EntranceBlockerPlugin.networkManager.entranceTeleportsBoolMap.Remove(val);
				EntranceBlockerPlugin.networkManager.entranceTeleports.Remove(val);
			}
		}

		[HarmonyBefore(new string[] { "mattymatty.EntranceTeleportOptimizations" })]
		[HarmonyTranspiler]
		[HarmonyPatch(typeof(EntranceTeleport), "Update")]
		private static IEnumerable<CodeInstruction> UpdateTranspiler(IEnumerable<CodeInstruction> instructions)
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Expected O, but got Unknown
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Expected O, but got Unknown
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Expected O, but got Unknown
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Expected O, but got Unknown
			MethodInfo methodInfo = AccessTools.Method(typeof(EntranceBlockerNO), "CheckEntrances", (Type[])null, (Type[])null);
			CodeMatcher val = new CodeMatcher(instructions, (ILGenerator)null);
			val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[1]
			{
				new CodeMatch((OpCode?)OpCodes.Call, (object)AccessTools.Method(typeof(EntranceTeleport), "FindExitPoint", (Type[])null, (Type[])null), (string)null)
			}).RemoveInstruction().Insert((CodeInstruction[])(object)new CodeInstruction[1]
			{
				new CodeInstruction(OpCodes.Ldarg_0, (object)null)
			})
				.SetInstruction(new CodeInstruction(OpCodes.Call, (object)methodInfo));
			return val.InstructionEnumeration();
		}

		[HarmonyTranspiler]
		[HarmonyPatch(typeof(EntranceTeleport), "FindExitPoint")]
		private static IEnumerable<CodeInstruction> FindExitPointTranspiler(IEnumerable<CodeInstruction> instructions)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: 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
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Expected O, but got Unknown
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Expected O, but got Unknown
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Expected O, but got Unknown
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Expected O, but got Unknown
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Expected O, but got Unknown
			CodeMatcher val = new CodeMatcher(instructions, (ILGenerator)null);
			MethodInfo methodInfo = AccessTools.Method(typeof(EntranceBlockerNO), "AddEntrances", (Type[])null, (Type[])null);
			val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[1]
			{
				new CodeMatch((OpCode?)OpCodes.Stfld, (object)AccessTools.Field(typeof(EntranceTeleport), "exitPoint"), (string)null)
			}).Advance(1).Insert((CodeInstruction[])(object)new CodeInstruction[5]
			{
				new CodeInstruction(OpCodes.Ldarg_0, (object)null),
				new CodeInstruction(OpCodes.Ldloc_0, (object)null),
				new CodeInstruction(OpCodes.Ldloc_1, (object)null),
				new CodeInstruction(OpCodes.Ldelem_Ref, (object)null),
				new CodeInstruction(OpCodes.Call, (object)methodInfo)
			});
			return val.InstructionEnumeration();
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(NetworkBehaviour), "OnNetworkSpawn")]
		private static void OnTeleportSpawn(NetworkBehaviour __instance)
		{
			EntranceTeleport val = (EntranceTeleport)(object)((__instance is EntranceTeleport) ? __instance : null);
			if (val != null)
			{
				EntranceBlockerPlugin.networkManager.entranceTeleportsBoolMap.Add(val, value: true);
			}
		}
	}
	internal class EntranceTeleportPatch
	{
		[HarmonyPostfix]
		[HarmonyPatch(typeof(EntranceTeleport), "FindExitPoint")]
		private static void FindExitPointPostfix(ref bool __result, EntranceTeleport __instance)
		{
			bool flag = __result && EntranceBlockerNO.CheckEntrances(__instance);
			EntranceBlockerPlugin.mls.LogInfo((object)$"__result = {__result}, value = {flag}, check = {EntranceBlockerNO.CheckEntrances(__instance)}");
			__result = flag;
		}
	}
	internal class GameNetworkManagerPatch
	{
		[HarmonyPostfix]
		[HarmonyPatch(typeof(GameNetworkManager), "Start")]
		private static void GameNetworkManagerStartPatch()
		{
			EntranceBlockerPlugin.entranceBlockerPrefab = EntranceBlockerPlugin.assetBundle.LoadAsset<GameObject>("planks.prefab");
			EntranceBlockerPlugin.networkManagerPrefab = EntranceBlockerPlugin.assetBundle.LoadAsset<GameObject>("nobject.prefab");
			NetworkManager.Singleton.AddNetworkPrefab(EntranceBlockerPlugin.networkManagerPrefab);
			EntranceBlockerPlugin.mls.LogInfo((object)"Unloading assetbundles...");
			EntranceBlockerPlugin.assetBundle.UnloadAsync(false);
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(GameNetworkManager), "Disconnect")]
		public static void GameNetworkManagerDisconnectPatch(GameNetworkManager __instance)
		{
			if (!__instance.isHostingGame)
			{
				EntranceBlockerPlugin.networkManager = null;
			}
			else
			{
				((NetworkBehaviour)EntranceBlockerPlugin.networkManager).NetworkObject.Despawn(true);
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(GameNetworkManager), "SetLobbyJoinable")]
		public static void GameNetworkManagerSetLobbyJoinablePatch(GameNetworkManager __instance)
		{
			if (__instance.isHostingGame)
			{
				if (Object.op_Implicit((Object)(object)EntranceBlockerPlugin.networkManager) && Object.op_Implicit((Object)(object)((NetworkBehaviour)EntranceBlockerPlugin.networkManager).NetworkObject))
				{
					EntranceBlockerPlugin.mls.LogDebug((object)"Network manager already exists! Destroying...");
					((NetworkBehaviour)EntranceBlockerPlugin.networkManager).NetworkObject.Despawn(true);
				}
				GameObject val = Object.Instantiate<GameObject>(EntranceBlockerPlugin.networkManagerPrefab);
				NetworkObject component = val.GetComponent<NetworkObject>();
				component.Spawn(false);
				Object.DontDestroyOnLoad((Object)(object)val);
			}
		}
	}
}
namespace EntranceBlocker.Components
{
	internal class EntranceBlocker : MonoBehaviour, IHittable
	{
		public List<GameObject> blockers = new List<GameObject>();

		internal EntranceTeleport entranceTeleport = null;

		internal EntranceTeleport exitSideTeleport = null;

		private bool canHit = false;

		private bool isWaitingForSpawn = true;

		public bool Hit(int force, Vector3 hitDirection, PlayerControllerB playerWhoHit, bool playHitSFX, int hitID)
		{
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: 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)
			if ((Object)(object)playerWhoHit != (Object)null)
			{
				EntranceBlockerPlugin.mls.LogInfo((object)$"Hit! Source: {playerWhoHit.playerUsername}, canHit: {canHit}");
			}
			else
			{
				EntranceBlockerPlugin.mls.LogInfo((object)$"Hit! Source: NOT PLAYER, canHit: {canHit}");
			}
			if (!canHit)
			{
				return true;
			}
			NetworkObjectReference noRef = EntranceBlockerPlugin.networkManager.reverseBlockersDict[this];
			EntranceBlockerPlugin.networkManager.OnHitServerRpc(noRef);
			return true;
		}

		private IEnumerator WaitForNetworkSpawn()
		{
			yield return (object)new WaitUntil((Func<bool>)(() => (Object)(object)entranceTeleport != (Object)null));
			EntranceBlockerPlugin.mls.LogInfo((object)$"EntranceTeleport {((Object)((Component)entranceTeleport).gameObject).name} with id: {entranceTeleport.entranceId} is now networked and ready for block");
			EntranceBlockerPlugin.networkManager.blockersDict.Add(((NetworkBehaviour)entranceTeleport).NetworkObjectId, this);
			EntranceBlockerPlugin.networkManager.reverseBlockersDict.Add(this, new NetworkObjectReference(((NetworkBehaviour)entranceTeleport).NetworkObject));
			EntranceBlockerPlugin.networkManager.entranceTeleportsBoolMap[entranceTeleport] = false;
			canHit = true;
			isWaitingForSpawn = false;
			entranceTeleport.triggerScript.interactable = false;
		}

		private void Awake()
		{
			EntranceBlockerPlugin.mls.LogInfo((object)"EntranceBlocker awake!");
			((MonoBehaviour)this).StartCoroutine(WaitForNetworkSpawn());
		}

		private void OnDestroy()
		{
			entranceTeleport.triggerScript.interactable = true;
			EntranceBlockerPlugin.networkManager.blockersDict.Remove(((NetworkBehaviour)entranceTeleport).NetworkObjectId);
			EntranceBlockerPlugin.networkManager.reverseBlockersDict.Remove(this);
			EntranceBlockerPlugin.networkManager.entranceTeleportsBoolMap[entranceTeleport] = true;
			EntranceBlockerPlugin.mls.LogInfo((object)"Entrance blocker destroyed");
		}
	}
	internal class EntranceBlockerNO : NetworkBehaviour
	{
		internal Dictionary<EntranceTeleport, EntranceTeleport> entranceTeleports = new Dictionary<EntranceTeleport, EntranceTeleport>();

		internal Dictionary<EntranceTeleport, bool> entranceTeleportsBoolMap = new Dictionary<EntranceTeleport, bool>();

		internal Dictionary<ulong, EntranceBlocker> blockersDict = new Dictionary<ulong, EntranceBlocker>();

		internal Dictionary<EntranceBlocker, NetworkObjectReference> reverseBlockersDict = new Dictionary<EntranceBlocker, NetworkObjectReference>();

		public override void OnNetworkSpawn()
		{
			((NetworkBehaviour)this).OnNetworkSpawn();
			EntranceBlockerPlugin.networkManager = this;
		}

		[ClientRpc]
		internal void SpawnBlockerClientRpc(NetworkBehaviourReference noRef)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: 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_00d9: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2498473435u, val, (RpcDelivery)0);
					((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkBehaviourReference>(ref noRef, default(ForNetworkSerializable));
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2498473435u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					((MonoBehaviour)this).StartCoroutine(WaitForNetworkSpawnClient(noRef));
				}
			}
		}

		internal IEnumerator WaitForNetworkSpawnServer(EntranceTeleport entranceTeleport)
		{
			EntranceTeleport entranceTeleport2 = entranceTeleport;
			yield return (object)new WaitUntil((Func<bool>)(() => ((NetworkBehaviour)entranceTeleport2).NetworkObject.IsSpawned));
			SpawnBlockerClientRpc(NetworkBehaviourReference.op_Implicit((NetworkBehaviour)(object)entranceTeleport2));
		}

		internal IEnumerator WaitForNetworkSpawnClient(NetworkBehaviourReference noRef)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			EntranceTeleport val = default(EntranceTeleport);
			yield return (object)new WaitUntil((Func<bool>)(() => ((NetworkBehaviourReference)(ref noRef)).TryGet<EntranceTeleport>(ref val, (NetworkManager)null)));
			EntranceTeleport __instance = default(EntranceTeleport);
			((NetworkBehaviourReference)(ref noRef)).TryGet<EntranceTeleport>(ref __instance, (NetworkManager)null);
			GameObject gameobject = Object.Instantiate<GameObject>(EntranceBlockerPlugin.entranceBlockerPrefab);
			gameobject.GetComponent<EntranceBlocker>().entranceTeleport = __instance;
			Vector3 globalPosition = UtilsStuff.DoMath(__instance);
			gameobject.transform.position = ((Component)__instance).transform.position;
			gameobject.transform.LookAt(globalPosition);
			gameobject.transform.position = UtilsStuff.DoRaycast(__instance);
			gameobject.transform.localScale = new Vector3((__instance.entranceId == 0) ? 1.3f : 0.75f, 1f, 1f);
			EntranceBlockerPlugin.mls.LogDebug((object)("Spawn entranceBlocker! Entrance name: " + ((Object)((Component)__instance).gameObject).name + ";" + $" EntranceID: {__instance.entranceId}; entranceBlocker position: {gameobject.transform.position}; LookAt() position: {globalPosition}"));
		}

		[ServerRpc(RequireOwnership = false)]
		internal void OnHitServerRpc(NetworkObjectReference noRef)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: 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_00fd: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
			{
				ServerRpcParams val = default(ServerRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1190935226u, val, (RpcDelivery)0);
				((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref noRef, default(ForNetworkSerializable));
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1190935226u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				EntranceBlocker entranceBlocker = blockersDict[((NetworkObjectReference)(ref noRef)).NetworkObjectId];
				if (entranceBlocker.blockers.Count == 1)
				{
					DestroyClientRpc(noRef);
					return;
				}
				int random = Random.Range(0, entranceBlocker.blockers.Count);
				OnHitClientRpc(random, ((NetworkObjectReference)(ref noRef)).NetworkObjectId);
			}
		}

		[ClientRpc]
		private void OnHitClientRpc(int random, ulong noID)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: 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_007e: 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)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(722915830u, val, (RpcDelivery)0);
					BytePacker.WriteValueBitPacked(val2, random);
					BytePacker.WriteValueBitPacked(val2, noID);
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 722915830u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					EntranceBlocker entranceBlocker = blockersDict[noID];
					entranceBlocker.blockers[random].SetActive(false);
					entranceBlocker.blockers.Remove(entranceBlocker.blockers[random]);
				}
			}
		}

		[ClientRpc]
		private void DestroyClientRpc(NetworkObjectReference noRef)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: 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)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3636066996u, val, (RpcDelivery)0);
					((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref noRef, default(ForNetworkSerializable));
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3636066996u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					EntranceBlocker entranceBlocker = blockersDict[((NetworkObjectReference)(ref noRef)).NetworkObjectId];
					NetworkObject val3 = default(NetworkObject);
					((NetworkObjectReference)(ref noRef)).TryGet(ref val3, (NetworkManager)null);
					entranceTeleports.Remove(((Component)val3).GetComponent<EntranceTeleport>());
					reverseBlockersDict.Remove(entranceBlocker);
					blockersDict.Remove(((NetworkObjectReference)(ref noRef)).NetworkObjectId);
					Object.Destroy((Object)(object)((Component)entranceBlocker).gameObject);
				}
			}
		}

		public static void AddEntrances(EntranceTeleport entrance, EntranceTeleport exit)
		{
			EntranceBlockerPlugin.networkManager.entranceTeleports.TryAdd(entrance, exit);
		}

		public static bool CheckEntrances(EntranceTeleport entrance)
		{
			EntranceBlockerNO networkManager = EntranceBlockerPlugin.networkManager;
			bool flag = true;
			if (!networkManager.entranceTeleports.TryGetValue(entrance, out EntranceTeleport value))
			{
				return false;
			}
			networkManager.entranceTeleportsBoolMap.TryGetValue(entrance, out var value2);
			flag = flag && value2;
			networkManager.entranceTeleportsBoolMap.TryGetValue(value, out value2);
			return flag && value2;
		}

		protected override void __initializeVariables()
		{
			((NetworkBehaviour)this).__initializeVariables();
		}

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_EntranceBlockerNO()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Expected O, but got Unknown
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Expected O, but got Unknown
			NetworkManager.__rpc_func_table.Add(2498473435u, new RpcReceiveHandler(__rpc_handler_2498473435));
			NetworkManager.__rpc_func_table.Add(1190935226u, new RpcReceiveHandler(__rpc_handler_1190935226));
			NetworkManager.__rpc_func_table.Add(722915830u, new RpcReceiveHandler(__rpc_handler_722915830));
			NetworkManager.__rpc_func_table.Add(3636066996u, new RpcReceiveHandler(__rpc_handler_3636066996));
		}

		private static void __rpc_handler_2498473435(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: 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_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				NetworkBehaviourReference noRef = default(NetworkBehaviourReference);
				((FastBufferReader)(ref reader)).ReadValueSafe<NetworkBehaviourReference>(ref noRef, default(ForNetworkSerializable));
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((EntranceBlockerNO)(object)target).SpawnBlockerClientRpc(noRef);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_1190935226(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: 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_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				NetworkObjectReference noRef = default(NetworkObjectReference);
				((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref noRef, default(ForNetworkSerializable));
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((EntranceBlockerNO)(object)target).OnHitServerRpc(noRef);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_722915830(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: 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)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				int random = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref random);
				ulong noID = default(ulong);
				ByteUnpacker.ReadValueBitPacked(reader, ref noID);
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((EntranceBlockerNO)(object)target).OnHitClientRpc(random, noID);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_3636066996(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: 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_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				NetworkObjectReference noRef = default(NetworkObjectReference);
				((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref noRef, default(ForNetworkSerializable));
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((EntranceBlockerNO)(object)target).DestroyClientRpc(noRef);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		[MethodImpl(MethodImplOptions.NoInlining)]
		protected internal override string __getTypeName()
		{
			return "EntranceBlockerNO";
		}
	}
}
namespace EntranceBlocker.Compatibility.Mimics
{
	internal class MimicPatches
	{
	}
}
namespace EntranceBlocker.Compatibility.EntranceTeleportOptimizations
{
	internal class mattymattyEntranceTeleportPatch
	{
		public static bool CheckEntrances(EntranceTeleport entrance)
		{
			EntranceBlockerNO networkManager = EntranceBlockerPlugin.networkManager;
			bool flag = true;
			networkManager.entranceTeleports = EntranceTeleportPatches.TeleportMap;
			if (!networkManager.entranceTeleports.TryGetValue(entrance, out EntranceTeleport value))
			{
				return false;
			}
			networkManager.entranceTeleportsBoolMap.TryGetValue(entrance, out var value2);
			flag = flag && value2;
			networkManager.entranceTeleportsBoolMap.TryGetValue(value, out value2);
			return flag && value2;
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(EntranceTeleport), "FindExitPoint")]
		private static void FindExitPointPostfix(ref bool __result, EntranceTeleport __instance)
		{
			bool flag = __result && CheckEntrances(__instance);
			EntranceBlockerPlugin.mls.LogInfo((object)$"mattymatty__result = {__result}, value = {flag}, check = {EntranceBlockerNO.CheckEntrances(__instance)}");
			__result = flag;
		}
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}
namespace EntranceBlocker.NetcodePatcher
{
	[AttributeUsage(AttributeTargets.Module)]
	internal class NetcodePatchedAssemblyAttribute : Attribute
	{
	}
}