using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using BepInEx.Unity.IL2CPP; using BepInEx.Unity.IL2CPP.UnityEngine; using HarmonyLib; using Il2CppInterop.Runtime.Injection; using UnityEngine; using KeyCode = BepInEx.Unity.IL2CPP.UnityEngine.KeyCode; namespace UnrestrictedPlacement; [BepInPlugin(MyPluginInfo.PLUGIN_GUID, MyPluginInfo.PLUGIN_NAME, MyPluginInfo.PLUGIN_VERSION)] public class Plugin : BasePlugin { internal static new ManualLogSource Log; public static ConfigEntry Enabled {get; set;} private static bool Once = false; public static ConfigEntry SwitchKey {get; set;} public override void Load() { Log = base.Log; Log.LogInfo($"Plugin {MyPluginInfo.PLUGIN_GUID} is loaded!"); Harmony harmony = new(MyPluginInfo.PLUGIN_GUID); harmony.PatchAll(); 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."); } public static class UnrestrictedPlacementPatch { [HarmonyPatch(typeof(FurniturePlacer), "PlacingRaycast")] public static class FurniturePlacer_PlacingRaycast_Patch { [HarmonyPostfix] public static void Postfix(FurniturePlacer __instance) { if (!Plugin.Enabled.Value) return; __instance.m_CurrentPlacingMode.PlacedOnCorrectSurface = true; } } [HarmonyPatch(typeof(IPlacingMode), "UpdateHologramColor")] public static class IPlacingMode_UpdateHologramColor_Patch { [HarmonyPostfix] public static void Postfix(IPlacingMode __instance) { if (!Plugin.Enabled.Value) return; __instance.HologramColor = Color.green; __instance.m_Triggers.Clear(); } } } public class Behaviour : MonoBehaviour { internal void Update() { if(Input.GetKeyInt(Plugin.SwitchKey.Value) && !Once) { Enabled.Value = !Enabled.Value; Log.LogError($"Plugin {MyPluginInfo.PLUGIN_GUID} is enabled: {Enabled}"); Once = true; } else if(!Input.GetKeyInt(Plugin.SwitchKey.Value) && Once) { Once = false; } } } }