using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using HarmonyLib;
using UnityEngine;
using UnityEngine.SceneManagement;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("UCHMod1")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("UCHMod1")]
[assembly: AssemblyCopyright("Copyright © 2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("aa4e3efd-4ed5-4b66-a930-2838d695f27e")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace UCHMod1;
[BepInPlugin("judwickvonrossington.freeplayfreeplace", "Freeplay Freeplace", "1.4.0")]
public class Class1 : BaseUnityPlugin
{
private static Class1 Instance;
private static bool FreeplayPlacementActive;
private void Awake()
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Expected O, but got Unknown
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Expected O, but got Unknown
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_012e: Expected O, but got Unknown
//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
//IL_01d7: Expected O, but got Unknown
Instance = this;
Harmony val = new Harmony("judwickvonrossington.freeplayfreeplace");
SceneManager.sceneLoaded += OnSceneLoaded;
try
{
MethodInfo method = typeof(FreePlayControl).GetMethod("ToPlaceMode", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if (method == null)
{
((BaseUnityPlugin)this).Logger.LogError((object)"Could not find FreePlayControl.ToPlaceMode()!");
}
else
{
MethodInfo method2 = typeof(Class1).GetMethod("FreeplayToPlaceModePrefix", BindingFlags.Static | BindingFlags.NonPublic);
val.Patch((MethodBase)method, new HarmonyMethod(method2), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
((BaseUnityPlugin)this).Logger.LogInfo((object)"PATCH SUCCESS: FreePlayControl.ToPlaceMode()");
}
}
catch (Exception ex)
{
((BaseUnityPlugin)this).Logger.LogError((object)("PATCH FAILED: FreePlayControl.ToPlaceMode() - " + ex));
}
try
{
MethodInfo method3 = typeof(Placeable).GetMethod("CanPlaceCheck", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if (method3 == null)
{
((BaseUnityPlugin)this).Logger.LogError((object)"Could not find Placeable.CanPlaceCheck()!");
}
else
{
MethodInfo method4 = typeof(Class1).GetMethod("CanPlaceCheckPrefix", BindingFlags.Static | BindingFlags.NonPublic);
val.Patch((MethodBase)method3, new HarmonyMethod(method4), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
((BaseUnityPlugin)this).Logger.LogInfo((object)"PATCH SUCCESS: Placeable.CanPlaceCheck()");
}
}
catch (Exception ex2)
{
((BaseUnityPlugin)this).Logger.LogError((object)("PATCH FAILED: Placeable.CanPlaceCheck() - " + ex2));
}
try
{
MethodInfo method5 = typeof(Placeable).GetMethod("CanPlace", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if (method5 == null)
{
((BaseUnityPlugin)this).Logger.LogError((object)"Could not find Placeable.CanPlace()!");
}
else
{
MethodInfo method6 = typeof(Class1).GetMethod("CanPlacePrefix", BindingFlags.Static | BindingFlags.NonPublic);
val.Patch((MethodBase)method5, new HarmonyMethod(method6), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
((BaseUnityPlugin)this).Logger.LogInfo((object)"PATCH SUCCESS: Placeable.CanPlace()");
}
}
catch (Exception ex3)
{
((BaseUnityPlugin)this).Logger.LogError((object)("PATCH FAILED: Placeable.CanPlace() - " + ex3));
}
((BaseUnityPlugin)this).Logger.LogInfo((object)"Freeplay Freeplace v1.4.0 loaded.");
}
private static void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
FreeplayPlacementActive = false;
if ((Object)(object)Instance != (Object)null)
{
((BaseUnityPlugin)Instance).Logger.LogInfo((object)("[FreeplayFreeplace] Scene loaded: " + ((Scene)(ref scene)).name + " | Freeplay placement reset."));
}
}
private static void FreeplayToPlaceModePrefix()
{
FreeplayPlacementActive = true;
if ((Object)(object)Instance != (Object)null)
{
((BaseUnityPlugin)Instance).Logger.LogInfo((object)"[FreeplayFreeplace] Freeplay placement mode ACTIVE.");
}
}
private static bool CanPlaceCheckPrefix(ref bool __result)
{
if (FreeplayPlacementActive)
{
__result = true;
return false;
}
return true;
}
private static bool CanPlacePrefix(ref bool __result)
{
if (FreeplayPlacementActive)
{
__result = true;
return false;
}
return true;
}
}