using System;
using System.Collections;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using DarthLilo.MagnetLock.NetcodePatcher;
using HarmonyLib;
using MagnetLock.Patches;
using Microsoft.CodeAnalysis;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("DarthLilo.MagnetLock")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.2.0.0")]
[assembly: AssemblyInformationalVersion("1.2.0+e3ae0dc060f8586374cdbb17b5e55f831a1c65f9")]
[assembly: AssemblyProduct("MagnetLock")]
[assembly: AssemblyTitle("DarthLilo.MagnetLock")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.2.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 MagnetLock
{
[BepInPlugin("DarthLilo.MagnetLock", "MagnetLock", "1.2.0")]
public class MagnetLock : BaseUnityPlugin
{
public static MagnetLock Instance { get; private set; }
internal static ManualLogSource Logger { get; private set; }
internal static Harmony? Harmony { get; set; }
private void Awake()
{
Logger = ((BaseUnityPlugin)this).Logger;
Instance = this;
Patch();
PatchMagnet.Initialize();
Logger.LogInfo((object)"Running netcode patchers");
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);
}
}
}
Logger.LogInfo((object)"DarthLilo.MagnetLock v1.2.0 has loaded!");
}
internal static void Patch()
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Expected O, but got Unknown
if (Harmony == null)
{
Harmony = new Harmony("DarthLilo.MagnetLock");
}
Logger.LogDebug((object)"Patching...");
Harmony.PatchAll();
Logger.LogDebug((object)"Finished patching!");
}
}
public static class MyPluginInfo
{
public const string PLUGIN_GUID = "DarthLilo.MagnetLock";
public const string PLUGIN_NAME = "MagnetLock";
public const string PLUGIN_VERSION = "1.2.0";
}
}
namespace MagnetLock.Patches
{
public class PatchMagnet
{
public static Sprite? defaultHoverIcon;
public static Sprite? defaultDisabledHoverIcon;
public static InteractTrigger? magnetLeverTrigger;
public static void Initialize()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Expected O, but got Unknown
Harmony val = new Harmony("DarthLilo.MagnetLock");
val.PatchAll(typeof(PatchMagnet));
}
[HarmonyPatch(typeof(StartOfRound), "Awake")]
[HarmonyPostfix]
private static void UpdateMagnetStateOrbitInit()
{
InteractTrigger component = ((Component)StartOfRound.Instance.magnetLever).GetComponent<InteractTrigger>();
if ((Object)(object)component != (Object)null)
{
defaultHoverIcon = component.hoverIcon;
defaultDisabledHoverIcon = component.disabledHoverIcon;
magnetLeverTrigger = component;
}
MagnetLock.Logger.LogInfo((object)"Awake() patch triggered");
ChangeMagnetState(enabled: false);
}
[HarmonyPatch(typeof(RoundManager), "FinishGeneratingNewLevelClientRpc")]
[HarmonyPostfix]
private static void UpdateMagnetStateGameStart()
{
((MonoBehaviour)GameNetworkManager.Instance).StartCoroutine(EnableMagnetLever());
}
[HarmonyPatch(typeof(StartMatchLever), "EndGame")]
[HarmonyPrefix]
private static void EnableMagnetOnShipLeave()
{
StartOfRound.Instance.SetMagnetOnServerRpc(true);
}
[HarmonyPatch(typeof(StartOfRound), "EndGameClientRpc")]
[HarmonyPrefix]
private static void UpdateMagnetStateGameEnd()
{
MagnetLock.Logger.LogInfo((object)"Lever disabled");
ChangeMagnetState(enabled: false);
}
[HarmonyPatch(typeof(StartOfRound), "SetMagnetOnServerRpc")]
[HarmonyPrefix]
private static bool AllowMagnetInteraction(StartOfRound __instance)
{
return __instance.shipHasLanded;
}
private static IEnumerator EnableMagnetLever()
{
yield return (object)new WaitUntil((Func<bool>)(() => StartOfRound.Instance.shipHasLanded));
ChangeMagnetState(enabled: true);
MagnetLock.Logger.LogInfo((object)"Lever enabled");
}
private static void ChangeMagnetState(bool enabled)
{
if ((Object)(object)magnetLeverTrigger != (Object)null)
{
if (enabled)
{
magnetLeverTrigger.interactable = true;
magnetLeverTrigger.hoverIcon = defaultHoverIcon;
magnetLeverTrigger.disabledHoverIcon = defaultDisabledHoverIcon;
}
else
{
magnetLeverTrigger.interactable = false;
magnetLeverTrigger.hoverIcon = null;
magnetLeverTrigger.disabledHoverIcon = null;
}
}
}
}
}
namespace DarthLilo.MagnetLock.NetcodePatcher
{
[AttributeUsage(AttributeTargets.Module)]
internal class NetcodePatchedAssemblyAttribute : Attribute
{
}
}