Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8830516607 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,5 +1,4 @@
|
|||||||
.git/
|
.git/
|
||||||
bin/
|
bin/
|
||||||
lib/
|
|
||||||
obj/
|
obj/
|
||||||
*.sln
|
*.sln
|
||||||
16
CHANGELOG
Normal file
16
CHANGELOG
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [1.0.1] - 2026-04-04
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- fixed to work with the latest game version
|
||||||
|
|
||||||
|
## [1.0.0] - 2026-01-10
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Initial release
|
||||||
60
Plugin.cs
60
Plugin.cs
@@ -2,60 +2,83 @@
|
|||||||
using BepInEx.Configuration;
|
using BepInEx.Configuration;
|
||||||
using BepInEx.Logging;
|
using BepInEx.Logging;
|
||||||
using BepInEx.Unity.IL2CPP;
|
using BepInEx.Unity.IL2CPP;
|
||||||
using BepInEx.Unity.IL2CPP.UnityEngine;
|
|
||||||
using HarmonyLib;
|
using HarmonyLib;
|
||||||
using Il2CppInterop.Runtime.Injection;
|
using Il2CppInterop.Runtime.Injection;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using KeyCode = BepInEx.Unity.IL2CPP.UnityEngine.KeyCode;
|
|
||||||
|
|
||||||
namespace UnrestrictedPlacement;
|
namespace UnrestrictedPlacement;
|
||||||
|
|
||||||
[BepInPlugin(MyPluginInfo.PLUGIN_GUID, MyPluginInfo.PLUGIN_NAME, MyPluginInfo.PLUGIN_VERSION)]
|
[BepInPlugin(PLUGIN_GUID, PLUGIN_NAME, PLUGIN_VERSION)]
|
||||||
public class Plugin : BasePlugin
|
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;
|
internal static new ManualLogSource Log;
|
||||||
public static ConfigEntry<bool> Enabled {get; set;}
|
public static ConfigEntry<bool> Enabled;
|
||||||
private static bool Once = false;
|
public static ConfigEntry<KeyCode> SwitchKey;
|
||||||
public static ConfigEntry<KeyCode> SwitchKey {get; set;}
|
|
||||||
|
|
||||||
public override void Load()
|
public override void Load()
|
||||||
{
|
{
|
||||||
Log = base.Log;
|
Log = base.Log;
|
||||||
Log.LogInfo($"Plugin {MyPluginInfo.PLUGIN_GUID} is loaded!");
|
Log.LogInfo($"Plugin {PLUGIN_GUID} is loaded!");
|
||||||
Harmony harmony = new(MyPluginInfo.PLUGIN_GUID);
|
|
||||||
harmony.PatchAll();
|
|
||||||
|
|
||||||
ClassInjector.RegisterTypeInIl2Cpp<Plugin.Behaviour>();
|
ClassInjector.RegisterTypeInIl2Cpp<Behaviour>();
|
||||||
GameObject gameObject = new("UnrestrictedPlacementBehaviour");
|
GameObject gameObject = new("UnrestrictedPlacementBehaviour");
|
||||||
Object.DontDestroyOnLoad(gameObject);
|
Object.DontDestroyOnLoad(gameObject);
|
||||||
gameObject.AddComponent<Plugin.Behaviour>();
|
gameObject.AddComponent<Behaviour>();
|
||||||
|
|
||||||
Enabled = Config.Bind("Settings", "Enabled", true);
|
Enabled = Config.Bind("Settings", "Enabled", true);
|
||||||
SwitchKey = Config.Bind("Settings", "SwitchKey", KeyCode.F8, "The key with which to enable and disable the mod.");
|
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
|
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")]
|
[HarmonyPatch(typeof(FurniturePlacer), "PlacingRaycast")]
|
||||||
public static class FurniturePlacer_PlacingRaycast_Patch
|
public static class FurniturePlacer_PlacingRaycast_Patch
|
||||||
{
|
{
|
||||||
[HarmonyPostfix]
|
[HarmonyPostfix]
|
||||||
public static void Postfix(FurniturePlacer __instance)
|
public static void Postfix(FurniturePlacer __instance)
|
||||||
{
|
{
|
||||||
if (!Plugin.Enabled.Value) return;
|
if (!Enabled.Value) return;
|
||||||
__instance.m_CurrentPlacingMode.PlacedOnCorrectSurface = true;
|
__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")]
|
[HarmonyPatch(typeof(IPlacingMode), "UpdateHologramColor")]
|
||||||
public static class IPlacingMode_UpdateHologramColor_Patch
|
public static class IPlacingMode_UpdateHologramColor_Patch
|
||||||
{
|
{
|
||||||
[HarmonyPostfix]
|
[HarmonyPostfix]
|
||||||
public static void Postfix(IPlacingMode __instance)
|
public static void Postfix(IPlacingMode __instance)
|
||||||
{
|
{
|
||||||
if (!Plugin.Enabled.Value) return;
|
if (!Enabled.Value) return;
|
||||||
__instance.HologramColor = Color.green;
|
__instance.HologramColor = Color.green;
|
||||||
__instance.m_Triggers.Clear();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -64,15 +87,10 @@ public class Plugin : BasePlugin
|
|||||||
{
|
{
|
||||||
internal void Update()
|
internal void Update()
|
||||||
{
|
{
|
||||||
if(Input.GetKeyInt(Plugin.SwitchKey.Value) && !Once)
|
if(Input.GetKeyDown(SwitchKey.Value))
|
||||||
{
|
{
|
||||||
Enabled.Value = !Enabled.Value;
|
Enabled.Value = !Enabled.Value;
|
||||||
Log.LogError($"Plugin {MyPluginInfo.PLUGIN_GUID} is enabled: {Enabled}");
|
Log.LogError($"Plugin {PLUGIN_GUID} is enabled: {Enabled.Value}");
|
||||||
Once = true;
|
|
||||||
}
|
|
||||||
else if(!Input.GetKeyInt(Plugin.SwitchKey.Value) && Once)
|
|
||||||
{
|
|
||||||
Once = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
<AssemblyName>UnrestrictedPlacement</AssemblyName>
|
<AssemblyName>UnrestrictedPlacement</AssemblyName>
|
||||||
<Product>Unrestricted Placement</Product>
|
<Product>Unrestricted Placement</Product>
|
||||||
<Version>1.0.0</Version>
|
<Version>1.0.1</Version>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<LangVersion>latest</LangVersion>
|
<LangVersion>latest</LangVersion>
|
||||||
<RestoreAdditionalProjectSources>
|
<RestoreAdditionalProjectSources>
|
||||||
@@ -42,5 +42,8 @@
|
|||||||
<Reference Include="UnityEngine.AIModule" Publicize="true">
|
<Reference Include="UnityEngine.AIModule" Publicize="true">
|
||||||
<HintPath>..\lib\UnityEngine.AIModule.dll</HintPath>
|
<HintPath>..\lib\UnityEngine.AIModule.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="UnityEngine.InputLegacyModule" Publicize="true">
|
||||||
|
<HintPath>..\lib\UnityEngine.InputLegacyModule.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
Reference in New Issue
Block a user