using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using BepInEx.Unity.IL2CPP; using HarmonyLib; using Il2CppInterop.Runtime.Injection; using UnityEngine; namespace UnrestrictedPlacement; [BepInPlugin(PLUGIN_GUID, PLUGIN_NAME, PLUGIN_VERSION)] public class Plugin : BasePlugin { public const string PLUGIN_GUID = "de.mpburgmann.UnrestrictedPlacement"; public const string PLUGIN_NAME = "Unrestricted Placement"; public const string PLUGIN_VERSION = "1.0.1"; internal static new ManualLogSource Log; public static ConfigEntry Enabled; public static ConfigEntry SwitchKey; public override void Load() { Log = base.Log; Log.LogInfo($"Plugin {PLUGIN_GUID} is loaded!"); ClassInjector.RegisterTypeInIl2Cpp(); GameObject gameObject = new("UnrestrictedPlacementBehaviour"); Object.DontDestroyOnLoad(gameObject); gameObject.AddComponent(); Enabled = Config.Bind("Settings", "Enabled", true); SwitchKey = Config.Bind("Settings", "SwitchKey", KeyCode.F8, "The key with which to enable and disable the mod."); Harmony harmony = new(PLUGIN_GUID); harmony.PatchAll(); } public static class UnrestrictedPlacementPatch { [HarmonyPatch(typeof(FurniturePlacer), "PlaceFurniture")] public static class FurniturePlacer_PlaceFurniture_Patch { [HarmonyPrefix] public static void Prefix(FurniturePlacer __instance) { if (!Enabled.Value) return; __instance.m_CurrentPlacingMode.PlacedOnCorrectSurface = true; } } [HarmonyPatch(typeof(FurniturePlacer), "PlacingRaycast")] public static class FurniturePlacer_PlacingRaycast_Patch { [HarmonyPostfix] public static void Postfix(FurniturePlacer __instance) { if (!Enabled.Value) return; __instance.m_CurrentPlacingMode.PlacedOnCorrectSurface = true; } } [HarmonyPatch(typeof(IPlacingMode), "OverlapBoxes")] public static class IPlacingMode_OverlapsBoxes_Patch { [HarmonyPrefix] public static bool Prefix(IPlacingMode __instance) { if (!Enabled.Value) return true; __instance.m_Triggers.Clear(); return false; } } [HarmonyPatch(typeof(IPlacingMode), "UpdateHologramColor")] public static class IPlacingMode_UpdateHologramColor_Patch { [HarmonyPostfix] public static void Postfix(IPlacingMode __instance) { if (!Enabled.Value) return; __instance.HologramColor = Color.green; } } } public class Behaviour : MonoBehaviour { internal void Update() { if(Input.GetKeyDown(SwitchKey.Value)) { Enabled.Value = !Enabled.Value; Log.LogError($"Plugin {PLUGIN_GUID} is enabled: {Enabled.Value}"); } } } }