From 326188c7a09e4c4d3ddcde9a3902558e2986d5a2 Mon Sep 17 00:00:00 2001 From: Devin Zuczek Date: Wed, 8 Jul 2026 17:11:58 -0400 Subject: [PATCH] Initial RecNetPlugin --- .gitignore | 8 +- CannedNet.Client.sln | 16 - CannedNet.Client/CannedNet.Client.csproj | 454 --------- CannedNet.Client/Patches/SendRequestPatch.cs | 19 - CannedNet.Client/Plugin.cs | 20 - GamePath.props.example | 10 + LICENSE | 21 + .../DisableTLSPinning.cs | 10 +- Patches/EACPatches.cs | 29 + Patches/PhotonPatches.cs | 34 + Patches/PromisePatch.cs | 19 + Patches/SendRequestPatch.cs | 186 ++++ Plugin.cs | 60 ++ README.md | 123 +++ RecNetPlugin.csproj | 948 ++++++++++++++++++ 15 files changed, 1440 insertions(+), 517 deletions(-) delete mode 100644 CannedNet.Client.sln delete mode 100644 CannedNet.Client/CannedNet.Client.csproj delete mode 100644 CannedNet.Client/Patches/SendRequestPatch.cs delete mode 100644 CannedNet.Client/Plugin.cs create mode 100644 GamePath.props.example create mode 100644 LICENSE rename CannedNet.Client/Patches/FuckOffTLS.cs => Patches/DisableTLSPinning.cs (57%) create mode 100644 Patches/EACPatches.cs create mode 100644 Patches/PhotonPatches.cs create mode 100644 Patches/PromisePatch.cs create mode 100644 Patches/SendRequestPatch.cs create mode 100644 Plugin.cs create mode 100644 README.md create mode 100644 RecNetPlugin.csproj diff --git a/.gitignore b/.gitignore index add57be..3b1f71d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,3 @@ -bin/ -obj/ -/packages/ -riderModule.iml -/_ReSharper.Caches/ \ No newline at end of file +GamePath.props +obj +bin diff --git a/CannedNet.Client.sln b/CannedNet.Client.sln deleted file mode 100644 index 61bf44b..0000000 --- a/CannedNet.Client.sln +++ /dev/null @@ -1,16 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CannedNet.Client", "CannedNet.Client\CannedNet.Client.csproj", "{B6704474-3934-43AE-9E89-E5851F6A266B}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B6704474-3934-43AE-9E89-E5851F6A266B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B6704474-3934-43AE-9E89-E5851F6A266B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B6704474-3934-43AE-9E89-E5851F6A266B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B6704474-3934-43AE-9E89-E5851F6A266B}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection -EndGlobal diff --git a/CannedNet.Client/CannedNet.Client.csproj b/CannedNet.Client/CannedNet.Client.csproj deleted file mode 100644 index e86f65e..0000000 --- a/CannedNet.Client/CannedNet.Client.csproj +++ /dev/null @@ -1,454 +0,0 @@ - - - - net6.0 - CannedNet.Client - My first plugin - 1.0.0 - true - latest - - https://api.nuget.org/v3/index.json; - https://nuget.bepinex.dev/v3/index.json; - https://nuget.samboy.dev/v3/index.json - - CannedNet.Client - - - - - - - - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Assembly-CSharp.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Assembly-CSharp-firstpass.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\AstarPathfindingProject.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Bitpacker.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Circuits.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\CSCore.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\EasyAntiCheat.Client.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Google.Protobuf.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\ICSharpCode.SharpZipLib.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Il2CppMono.Security.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Il2Cppmscorlib.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Il2CppSystem.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Il2CppSystem.Configuration.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Il2CppSystem.Core.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Il2CppSystem.Drawing.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Il2CppSystem.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Il2CppSystem.Runtime.Serialization.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Il2CppSystem.Xml.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Oculus.Platform.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Oculus.VR.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\OSA.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Pathfinding.ClipperLib.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Pathfinding.Ionic.Zip.Reduced.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Pathfinding.Poly2Tri.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Photon3Unity3D.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\PhotonChat.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\PhotonRealtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\PhotonUnityNetworking.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\PhotonUnityNetworking.Utilities.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\PhotonVoice.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\PhotonVoice.API.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\PhotonVoice.PUN.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\PhotonWebSocket.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Pngcs.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Agdxgidisplays.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Agmobilear.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Assetbundles.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Async.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Circuitsv2.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.CultureUtil.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Datastructures.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.EditorHelpers.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.iOSNative.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Networking.DataTypes.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Networking.Mocks.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Networking.NetworkedObjects.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Networking.RPC.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Networking.SynchronizedFields.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.ProBuilderExtensions.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Promises.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.ResourceManagement.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Scheduler.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Streamingaudio.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Tmp_overrides.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Tweening.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Unityextensions.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\SA.Foundation.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\SA.Foundation.Network.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\SA.Foundation.Tests.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\SA.iOS.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\SA.iOS.XCode.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\SteamVR.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\SteamVR_Actions.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.Addressables.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.Burst.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.Burst.Unsafe.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.Collections.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.Jobs.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.Mathematics.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.Postprocessing.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.RenderPipeline.Universal.ShaderLibrary.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.RenderPipelines.Core.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.RenderPipelines.Universal.Runtime.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.ResourceManager.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.TextMeshPro.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.XR.ARFoundation.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.XR.ARSubsystems.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.XR.Management.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.AccessibilityModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.AIModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.AndroidJNIModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.AnimationModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.ARModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.AssetBundleModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.AudioModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.ClothModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.ClusterInputModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.ClusterRendererModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.CoreModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.CrashReportingModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.DirectorModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.DSPGraphModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.GameCenterModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.GridModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.HotReloadModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.ImageConversionModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.IMGUIModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.InputLegacyModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.InputModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.JSONSerializeModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.LocalizationModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.ParticleSystemModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.PerformanceReportingModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.Physics2DModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.PhysicsModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.ProfilerModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.ScreenCaptureModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.SharedInternalsModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.SpatialTracking.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.SpriteMaskModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.SpriteShapeModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.StreamingModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.SubstanceModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.SubsystemsModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.TerrainModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.TerrainPhysicsModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.TextCoreModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.TextRenderingModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.TilemapModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.TLSModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UI.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UIElementsModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UIModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UmbraModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UNETModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UnityAnalyticsModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UnityConnectModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UnityTestProtocolModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UnityWebRequestAssetBundleModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UnityWebRequestAudioModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UnityWebRequestModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UnityWebRequestTextureModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UnityWebRequestWWWModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.VehiclesModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.VFXModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.VideoModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.VRModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.WindModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.XR.LegacyInputHelpers.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.XRModule.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Valve.Newtonsoft.Json.dll - - - ..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\XboxUWP.dll - - - diff --git a/CannedNet.Client/Patches/SendRequestPatch.cs b/CannedNet.Client/Patches/SendRequestPatch.cs deleted file mode 100644 index ce8edf3..0000000 --- a/CannedNet.Client/Patches/SendRequestPatch.cs +++ /dev/null @@ -1,19 +0,0 @@ -using BestHTTP; -using HarmonyLib; - -namespace CannedNet.Client.Patches; - -public class SendRequestPatch -{ - [HarmonyPatch(typeof(HTTPManager), "SendRequest", [typeof(HTTPRequest)])] - public class ConnectToRecNetPatch - { - private static void Prefix(ref HTTPRequest request) - { - Plugin.Log.LogInfo($"hi {request.Uri.Host}"); - - if (request.Uri.Host.ToString().Contains("ns.rec.net")) - request.Uri = new Il2CppSystem.Uri("https://ns.lapis.codes"); - } - } -} \ No newline at end of file diff --git a/CannedNet.Client/Plugin.cs b/CannedNet.Client/Plugin.cs deleted file mode 100644 index 30db0f6..0000000 --- a/CannedNet.Client/Plugin.cs +++ /dev/null @@ -1,20 +0,0 @@ -using BepInEx; -using BepInEx.Logging; -using BepInEx.Unity.IL2CPP; -using HarmonyLib; - -namespace CannedNet.Client; - -[BepInPlugin("lapis.cannednet.client", "CannedNet Client", "1.0.0")] -public class Plugin : BasePlugin -{ - internal static new ManualLogSource Log; - - public override void Load() - { - Log = base.Log; - Log.LogInfo($"I JUST HIT THE JACKPOTTTT!!!!! YUH YUH YUH!"); - - Harmony.CreateAndPatchAll(typeof(Plugin).Assembly); - } -} \ No newline at end of file diff --git a/GamePath.props.example b/GamePath.props.example new file mode 100644 index 0000000..3d88d79 --- /dev/null +++ b/GamePath.props.example @@ -0,0 +1,10 @@ + + + + C:\Path\To\RecRoom + + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..93f1b33 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 djdevin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/CannedNet.Client/Patches/FuckOffTLS.cs b/Patches/DisableTLSPinning.cs similarity index 57% rename from CannedNet.Client/Patches/FuckOffTLS.cs rename to Patches/DisableTLSPinning.cs index e25cb61..ab28a4c 100644 --- a/CannedNet.Client/Patches/FuckOffTLS.cs +++ b/Patches/DisableTLSPinning.cs @@ -1,9 +1,13 @@ using HarmonyLib; using Org.BouncyCastle.Crypto.Tls; -namespace CannedNet.Client.Patches; +namespace RecNetPlugin.Patches; -public class FuckOffTLS +/** + Disables TLS certificate pinning. Even though we connect over SSL it seems some certificates + might be pinned. +*/ +public class DisableTLSPinning { [HarmonyPatch(typeof(LegacyTlsAuthentication), "NotifyServerCertificate")] public class TlsPatch @@ -13,4 +17,4 @@ private static bool Prefix() return false; } } -} \ No newline at end of file +} diff --git a/Patches/EACPatches.cs b/Patches/EACPatches.cs new file mode 100644 index 0000000..8a2f1b8 --- /dev/null +++ b/Patches/EACPatches.cs @@ -0,0 +1,29 @@ +using HarmonyLib; +using RecRoom.AntiCheat; +using System.Text; +using Il2CppSystem; + +namespace RecNetPlugin.Patches; + +[HarmonyPatch] +public static class EACPatches +{ + [HarmonyPrefix] + [HarmonyPatch(typeof(EACManager), "FJLMLEPOKGE")] + private static bool IsReadyPatch(ref bool __result) + { + __result = true; + return false; + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(EACManager), "GenerateChallengeResponse")] + private static bool GenerateChallengeResponsePatch(string PGCINMIEBJP, ref string __result) + { + if (!string.IsNullOrEmpty(PGCINMIEBJP)) + __result = Convert.ToBase64String(Encoding.UTF8.GetBytes(PGCINMIEBJP)); + else + __result = Convert.ToBase64String(Encoding.UTF8.GetBytes("nothing")); + return false; + } +} \ No newline at end of file diff --git a/Patches/PhotonPatches.cs b/Patches/PhotonPatches.cs new file mode 100644 index 0000000..4dee89a --- /dev/null +++ b/Patches/PhotonPatches.cs @@ -0,0 +1,34 @@ +using ExitGames.Client.Photon; +using HarmonyLib; +using Photon.Realtime; + +namespace RecNetPlugin.Patches; + +/** + Patches Photon to use the App IDs and server hostname/port specified in the plugin config. + */ +[HarmonyPatch(typeof(GPFPFDBGCEK), "AMOHMPKKGHL")] +public class PhotonPatches +{ + [HarmonyPostfix] + private static void Postfix(ref AppSettings __result) + { + if (__result != null) + { + __result.AppIdRealtime = Plugin.AppIdRT.Value; + __result.AppIdVoice = Plugin.AppIdVoice.Value; + __result.AppIdChat = Plugin.AppIdChat.Value; + __result.FixedRegion = "us"; + __result.UseNameServer = true; + __result.Protocol = ConnectionProtocol.Udp; + + if (Plugin.EnableAdvancedSettings.Value) + { + __result.Server = Plugin.PhotonHostname.Value; + __result.Port = Plugin.PhotonPort.Value == 0 + ? 4533 + : Plugin.PhotonPort.Value; + } + } + } +} diff --git a/Patches/PromisePatch.cs b/Patches/PromisePatch.cs new file mode 100644 index 0000000..a1aa19b --- /dev/null +++ b/Patches/PromisePatch.cs @@ -0,0 +1,19 @@ +using HarmonyLib; + +namespace RecNetPlugin.Patches; + +/** + * This allows the global-metadata.dat to be different on the client + * patched to allow a different modulus so we can sign images. +*/ +[HarmonyPatch(typeof(JAPJPGNBMNM), "JOKECJKBJGD")] +public static class PromisePatch +{ + public static bool Prefix(out HPHDJAFFHCN __result) + { + var result = JAPJPGNBMNM.AOFCCEACNNA.JGIHNLEFJEL(); + var promise = HAAHJPGNIMD.NMOOLKAJDOC(result); + __result = promise; + return false; + } +} diff --git a/Patches/SendRequestPatch.cs b/Patches/SendRequestPatch.cs new file mode 100644 index 0000000..c02dfc5 --- /dev/null +++ b/Patches/SendRequestPatch.cs @@ -0,0 +1,186 @@ +using System; +using BestHTTP; +using HarmonyLib; +using Il2CppInterop.Runtime; + +namespace RecNetPlugin.Patches; + +/** + Intercept a variety of HTTP requests and rewrite them to point to our own custom server. + */ +public class SendRequestPatch +{ + // Official name server host to redirect away from, swapped for the custom server. + private const string OfficialNameServer = "ns.rec.net"; + + // Skip when HTTP-logging so we don't spam the logs. + private static readonly string[] LogIgnoreSubstrings = + { + "/api/gamesight/event", + "/data/heartbeat", + "/identify", + "/httpapi", + "/data/event", + }; + + private static bool IsIgnoredForLogging(string url) + { + foreach (var s in LogIgnoreSubstrings) + if (url.Contains(s, StringComparison.OrdinalIgnoreCase)) + return true; + return false; + } + + // Cap logged bodies so a large response/request doesn't flood the log. + private const int MaxLoggedBodyLength = 1000; + + private static string Truncate(string s) + { + if (string.IsNullOrEmpty(s) || s.Length <= MaxLoggedBodyLength) + return s; + return s.Substring(0, MaxLoggedBodyLength) + $"... "; + } + + [HarmonyPatch(typeof(HTTPManager), "SendRequest", [typeof(HTTPRequest)])] + public class ConnectToRecNetPatch + { + private static void Prefix(ref HTTPRequest request) + { + var debug = Plugin.Debug.Value && !IsIgnoredForLogging(request.Uri.AbsoluteUri); + + if (debug) + { + var entityBody = request.GetEntityBody(); + string body; + if (entityBody == null) + body = ""; + else if (IsBinaryContentType(request.GetFirstHeaderValue("content-type")) || LooksBinary(entityBody)) + body = BinaryPreview(entityBody); + else + body = System.Text.Encoding.UTF8.GetString(entityBody); + Plugin.Log.LogInfo($"[HTTP] {request.MethodType} {request.Uri.AbsoluteUri} body={Truncate(body)}"); + } + + var host = request.Uri.Host; + if (host == OfficialNameServer) + { + // Redirect the nameserver lookup to the custom server, swapping only the host. + var newHost = new System.Uri(Plugin.ServerHostname.Value).Host; + var builder = new Il2CppSystem.UriBuilder(request.Uri) { Host = newHost }; + request.Uri = builder.Uri; + + if (debug) + Plugin.Log.LogInfo($"[HTTP] intercepted {host} -> {newHost}"); + } + + if (debug) + LogResponseWhenDone(request); + } + } + + // Wraps the request's completion callback so we log the response (status + body) when it + // finishes, then forwards to the game's original callback. This is how we see *which* + // request comes back empty (RecNet throws "Response was empty" on a blank body). + private static void LogResponseWhenDone(HTTPRequest request) + { + try + { + var original = request.Callback; + var url = request.Uri.AbsoluteUri; + + request.Callback = DelegateSupport.ConvertDelegate( + (Action)((req, resp) => + { + if (resp == null) + Plugin.Log.LogWarning($"[HTTP] <- {url} NO RESPONSE (state={req.State})"); + else + { + string text; + if (IsBinaryContentType(resp.GetFirstHeaderValue("content-type"))) + text = ""; + else + { + text = resp.DataAsText; + if (string.IsNullOrEmpty(text)) text = ""; + } + var msg = $"[HTTP] <- {resp.StatusCode} {url} body={Truncate(text)}"; + if (resp.StatusCode is >= 200 and < 300) + Plugin.Log.LogInfo(msg); + else + Plugin.Log.LogError(msg); + } + + original?.Invoke(req, resp); + })); + } + catch (Exception e) + { + Plugin.Log.LogError($"[HTTP] failed to attach response logger: {e}"); + } + } + + // Content-Type prefixes/keywords we treat as textual; anything else is logged as so we + // don't dump image/asset bytes into the log. + private static readonly string[] TextContentTypes = + { + "text/", "application/json", "application/xml", "application/javascript", + "application/x-www-form-urlencoded", "+json", "+xml", + }; + + // True if the body is (probably) binary and shouldn't be logged as text. Defaults to text when + // there's no Content-Type, so we err toward logging rather than hiding. + private static bool IsBinaryContentType(string contentType) + { + if (string.IsNullOrEmpty(contentType)) return false; + + foreach (var t in TextContentTypes) + if (contentType.Contains(t, StringComparison.OrdinalIgnoreCase)) + return false; + return true; + } + + // Render the leading bytes of a binary body as text so structured framing (e.g. multipart form + // boundaries and part headers) stays readable, while raw bytes are shown as \xNN escapes. Capped + // at MaxLoggedBodyLength since the interesting framing is at the front. + private static string BinaryPreview(byte[] data) + { + if (data.Length == 0) return ""; + + var sb = new System.Text.StringBuilder(MaxLoggedBodyLength + 32); + sb.Append(" "); + var i = 0; + // Cap on rendered length, not byte count: escapes expand a byte to 4 chars, so this keeps the + // preview near MaxLoggedBodyLength and avoids a second pass by Truncate at the log site. + for (; i < data.Length && sb.Length < MaxLoggedBodyLength; i++) + { + var b = data[i]; + if (b == 0x09 || b == 0x0A || b == 0x0D || (b >= 0x20 && b < 0x7F)) + sb.Append((char)b); + else + sb.Append("\\x").Append(b.ToString("x2")); + } + if (i < data.Length) + sb.Append($"... "); + return sb.ToString(); + } + + // Content sniff for raw request bytes — the Content-Type header isn't reliably set at + // SendRequest time (e.g. multipart form bodies set it lazily, and the body still embeds the + // raw image), so look at the bytes: a NUL byte, or a high ratio of non-text control bytes in + // the first chunk, means it's binary (or binary-mixed like a multipart upload). + private static bool LooksBinary(byte[] data) + { + if (data.Length == 0) return false; + + var sample = Math.Min(data.Length, 4096); + var nonText = 0; + for (var i = 0; i < sample; i++) + { + var b = data[i]; + if (b == 0) return true; + // Control chars other than tab/newline/carriage-return. + if (b < 0x20 && b != 0x09 && b != 0x0A && b != 0x0D) nonText++; + } + return nonText * 100 / sample > 10; + } +} diff --git a/Plugin.cs b/Plugin.cs new file mode 100644 index 0000000..f017b2f --- /dev/null +++ b/Plugin.cs @@ -0,0 +1,60 @@ +using System; +using BepInEx; +using BepInEx.Configuration; +using BepInEx.Logging; +using BepInEx.Unity.IL2CPP; +using HarmonyLib; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace RecNetPlugin; + +[BepInPlugin("net.rec.plugin", "RecNet Plugin", "1.0.0")] +public class Plugin : BasePlugin +{ + internal static new ManualLogSource Log; + + public static ConfigEntry AppIdRT { get; private set; } + public static ConfigEntry AppIdVoice { get; private set; } + public static ConfigEntry AppIdChat { get; private set; } + public static ConfigEntry ServerHostname { get; private set; } + public static ConfigEntry EnableAdvancedSettings { get; private set; } + public static ConfigEntry PhotonHostname { get; private set; } + public static ConfigEntry PhotonPort { get; private set; } + public static ConfigEntry Debug { get; private set; } + + public override void Load() + { + Log = base.Log; + + AppIdRT = Config.Bind("Photon", "App Id Realtime", "", "Photon Realtime App ID"); + AppIdVoice = Config.Bind("Photon", "App Id Voice", "", "Photon Voice App ID"); + AppIdChat = Config.Bind("Photon", "App Id Chat", "", "Photon Chat App ID"); + EnableAdvancedSettings = Config.Bind("Advanced", "Enabled Advanced Settings", false, "Allows other fields below in the advanced section to be modified."); + PhotonHostname = Config.Bind("Advanced", "Photon NameServer", "", "Custom Photon NameServer"); + PhotonPort = Config.Bind("Advanced", "Photon NameServer Port", 0, "Custom Photon NameServer Port (if 0, it will be default)"); + ServerHostname = Config.Bind("Server", "RecNet NameServer Host", "https://ns.rec.net", "Host for the RecNet NameServer."); + Debug = Config.Bind("Advanced", "Debug", false, "Show debug logs (HTTP tracing, etc. WARNING: will include sensitive information such as passwords and auth tokens in the logs, be careful when sharing them!)"); + + Harmony.CreateAndPatchAll(typeof(Plugin).Assembly); + + SceneManager.sceneLoaded += (Action)OnSceneLoaded; + } + + private void OnSceneLoaded(Scene scene, LoadSceneMode mode) + { + // CheatManager boots us out of rooms when it runs, but it's ALSO the DUID service the DI + // container resolves for account creation / login (destroying it removes that service). + // So instead of destroying it, *deactivate* the GameObject: it stops running (no Update / + // coroutines, so no boot) while the component still exists, so the DI container can still + // resolve PGECJHKNIEN and call its DUID methods. It's recreated per scene, so deactivate + // each freshly-spawned (active) instance on every load. (GameObject.Find only returns active + // objects, so once deactivated it isn't found again.) + var cheatMgr = GameObject.Find("GameRoot/(Startup)(Clone)/Core Systems/[CheatManager]"); + if (cheatMgr != null) + { + cheatMgr.SetActive(false); + Log.LogInfo("cheatmanager deactivated"); + } + } +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..0ea621c --- /dev/null +++ b/README.md @@ -0,0 +1,123 @@ +# RecNet Plugin + +A [BepInEx 6](https://github.com/BepInEx/BepInEx) (IL2CPP) plugin that points the Rec Room client at a self-hosted / private server. + +It does this entirely client-side with [Harmony](https://harmony.pardeike.net/) patches — no game files are modified on disk (except global-metadata.dat - needed for image signatures). The plugin rewrites the RecNet name-server lookups, swaps in your own Photon credentials, and disables the client-side guards (EasyAntiCheat, TLS certificate pinning) that would otherwise reject a non-official server. + +> ⚠️ This disables anti-cheat and certificate validation on the client. Use at your own risk. + +## Safety + +Using BepInEx plugins may cause anti-virus scanners or Windows Defender to pick it up as a threat. + +If you don't trust the complied .DLL, you can build it yourself. + +See https://github.com/djdevin/recnet-plugin#from-source + +## What it does + +| Patch | File | Effect | +| --- | --- | --- | +| Name-server redirect | `Patches/SendRequestPatch.cs` | Intercepts `BestHTTP` requests and rewrites the host `ns.rec.net` → your configured server. Also provides optional HTTP request/response logging for development. | +| Photon override | `Patches/PhotonPatches.cs` | Replaces the Realtime / Voice / Chat App IDs (and optionally the Photon name server + port) with your own. | +| EAC bypass | `Patches/EACPatches.cs` | Forces EasyAntiCheat "ready" and stubs the challenge-response so the client connects without the official anti-cheat. | +| TLS bypass | `Patches/FuckOffTLS.cs` | Skips server-certificate validation so a custom server's cert is accepted. | +| Promise stub | `Patches/PromisePatch.cs` | Allows custom global-metadata.dat files without the game crashing. | +| CheatManager handling | `Plugin.cs` | Deactivates the in-game `CheatManager` (which would otherwise boot you from rooms) while keeping it resolvable for account creation / login. | + +## Requirements + +- A Rec Room install set up with **BepInEx 6 (IL2CPP, bleeding-edge)**, launched at least once so the IL2CPP interop assemblies have been generated under `BepInEx/interop/`. +- **.NET 6 SDK** to build the plugin. +- Your own server endpoints: a RecNet name server, and [Photon](https://www.photonengine.com) app keys. + +_Looking for a custom RecNet server?_ Try https://github.com/djdevin/recflare + +## Installing + +1. Download the game using https://github.com/SteamRE/DepotDownloader. The manifest ID is `7859140924515540835`. +Example: `depotdownloader -app 471710 -depot 471711 -manifest 7859140924515540835` +**You must use this specific version.** +2. Install BepInEx to the game. See https://docs.bepinex.dev/articles/user_guide/installation/index.html. **Note that you must use version 6!** + +### From release + +1. Download a release from [/releases](/releases) +2. Drop the `.dll` file into `BepInEx/plugins/` + +### From source + +The project references the game's interop DLLs, so the build needs to know where your Rec Room install lives. Set `GamePath` using any one of: + +1. **A local props file** (recommended): + ```sh + cp GamePath.props.example GamePath.props + ``` + then edit `GamePath` in `GamePath.props` to point at your Rec Room install root. This file is local-only and stays out of the repo. + +2. **An environment variable:** + ```sh + set RECROOM_PATH=C:\Path\To\RecRoom # cmd + $env:RECROOM_PATH = "C:\Path\To\RecRoom" # PowerShell + ``` + +3. **On the command line:** + ```sh + dotnet build -p:GamePath="C:\Path\To\RecRoom" + ``` + +Then build: + +```sh +dotnet build +``` + +The build validates that `GamePath` is set and that `$(GamePath)\BepInEx\interop` exists, and fails with a clear message otherwise. + +A post-build step (the `DeployPlugin` target in the `.csproj`) automatically copies the built `RecNetPatcher.dll` into your Rec Room install's `BepInEx/plugins/` folder after every build. Since `GamePath` already points at your install, you don't need to copy anything by hand — just `dotnet build` and launch the game. + +If you need the DLL elsewhere, it's also left in `bin/Debug/net6.0/`. + +## Configuration + +Start the game for the first time. In `BepInEx` you should now see a `config` folder. If not, verify BepInEx installation and version. + +Inside `config`, edit the `net.rec.plugin.cfg` file and update as needed: + +**[Server]** +- `RecNet NameServer Host` — base URL of your RecNet name server (like `https://ns.rec.net`). + +**[Photon]** +- `App Id Realtime` — Photon Realtime App ID. +- `App Id Voice` — Photon Voice App ID. +- `App Id Chat` — Photon Chat App ID. + +**[Advanced]** +- `Enabled Advanced Settings` — must be `true` to apply the custom Photon name server / port below. +- `Photon NameServer` — custom Photon name server host. +- `Photon NameServer Port` — custom port (`0` uses the default, `4533`). +- `Debug` — verbose HTTP request/response logging (only needed for development) + > ⚠️ Debug logs include **sensitive data** (passwords, auth tokens). Be careful when sharing them. + +## Project layout + +| Path | Purpose | +| --- | --- | +| `Plugin.cs` | Plugin entry point, config bindings, Harmony bootstrap | +| `Patches/` | Harmony patches (HTTP, EAC, TLS, Photon) | +| `RecNetPlugin.csproj` | Build config + interop references (driven by `GamePath`), and the `DeployPlugin` post-build copy | +| `GamePath.props.example` | Template for your local `GamePath.props` | + +## FAQ + +**Can I use this for my own Rec Room server?** + +Yes. That's the point. + +## Credits + +Based on https://github.com/CannedNet/CannedNet.Client + +## License + +[MIT](LICENSE) diff --git a/RecNetPlugin.csproj b/RecNetPlugin.csproj new file mode 100644 index 0000000..7a2622a --- /dev/null +++ b/RecNetPlugin.csproj @@ -0,0 +1,948 @@ + + + + net6.0 + RecNetPlugin + RecNetPlugin + 1.0.0 + true + latest + + https://api.nuget.org/v3/index.json; + https://nuget.bepinex.dev/v3/index.json; + https://nuget.samboy.dev/v3/index.json + + RecNetPlugin + + + + + + + $(RECROOM_PATH) + + + + + + + + + + + + + + + $(GamePath)\BepInEx\interop\Assembly-CSharp.dll + + + $(GamePath)\BepInEx\interop\Assembly-CSharp-firstpass.dll + + + $(GamePath)\BepInEx\interop\AstarPathfindingProject.dll + + + $(GamePath)\BepInEx\interop\Backtrace.Unity.dll + + + $(GamePath)\BepInEx\interop\Circuits.All.Injection.Debugging.dll + + + $(GamePath)\BepInEx\interop\Circuits.All.Injection.PhotonNetSystem.dll + + + $(GamePath)\BepInEx\interop\Circuits.All.Injection.UnityEngine.dll + + + $(GamePath)\BepInEx\interop\Circuits.All.Mock.dll + + + $(GamePath)\BepInEx\interop\Circuits.All.RecRoom.dll + + + $(GamePath)\BepInEx\interop\Circuits.Dynamic.Core.NetSystem.dll + + + $(GamePath)\BepInEx\interop\Circuits.Dynamic.Mock.dll + + + $(GamePath)\BepInEx\interop\Circuits.Shared.Core.ByteCode.dll + + + $(GamePath)\BepInEx\interop\Circuits.Shared.CV2.Dependencies.dll + + + $(GamePath)\BepInEx\interop\Circuits.Shared.RecRoom.Engine.dll + + + $(GamePath)\BepInEx\interop\Circuits.Shared.RecRoom.Objects.dll + + + $(GamePath)\BepInEx\interop\Circuits.Shared.Utilities.dll + + + $(GamePath)\BepInEx\interop\Circuits.Static.Core.CompileSystem.dll + + + $(GamePath)\BepInEx\interop\Circuits.Static.Core.GraphSystem.dll + + + $(GamePath)\BepInEx\interop\Circuits.Static.Core.NetSystem.dll + + + $(GamePath)\BepInEx\interop\Circuits.Static.Core.RequestReduce.dll + + + $(GamePath)\BepInEx\interop\Circuits.Static.Core.TreeSystem.dll + + + $(GamePath)\BepInEx\interop\Circuits.Static.Core.TypeCheckSystem.dll + + + $(GamePath)\BepInEx\interop\Circuits.Static.Core.TypeSystem.dll + + + $(GamePath)\BepInEx\interop\Circuits.Static.Core.UnificationSystem.dll + + + $(GamePath)\BepInEx\interop\Circuits.Static.EV.dll + + + $(GamePath)\BepInEx\interop\Circuits.Static.RecRoom.dll + + + $(GamePath)\BepInEx\interop\Circuits.Static.Utilities.dll + + + $(GamePath)\BepInEx\interop\Circuits.V2.dll + + + $(GamePath)\BepInEx\interop\Codestage.Anticheattoolkit.Runtime.dll + + + $(GamePath)\BepInEx\interop\CSCore.dll + + + $(GamePath)\BepInEx\interop\EasyAntiCheat.Client.dll + + + $(GamePath)\BepInEx\interop\Google.Protobuf.dll + + + $(GamePath)\BepInEx\interop\ICSharpCode.SharpZipLib.dll + + + $(GamePath)\BepInEx\interop\Il2CppMicrosoft.Bcl.HashCode.dll + + + $(GamePath)\BepInEx\interop\Il2CppMicrosoft.CognitiveServices.Speech.csharp.dll + + + $(GamePath)\BepInEx\interop\Il2CppMicrosoft.Toolkit.HighPerformance.dll + + + $(GamePath)\BepInEx\interop\Il2CppMono.Security.dll + + + $(GamePath)\BepInEx\interop\Il2Cppmscorlib.dll + + + $(GamePath)\BepInEx\interop\Il2CppSystem.dll + + + $(GamePath)\BepInEx\interop\Il2CppSystem.Buffers.dll + + + $(GamePath)\BepInEx\interop\Il2CppSystem.Configuration.dll + + + $(GamePath)\BepInEx\interop\Il2CppSystem.Core.dll + + + $(GamePath)\BepInEx\interop\Il2CppSystem.Data.dll + + + $(GamePath)\BepInEx\interop\Il2CppSystem.Drawing.dll + + + $(GamePath)\BepInEx\interop\Il2CppSystem.Memory.dll + + + $(GamePath)\BepInEx\interop\Il2CppSystem.Numerics.dll + + + $(GamePath)\BepInEx\interop\Il2CppSystem.Numerics.Vectors.dll + + + $(GamePath)\BepInEx\interop\Il2CppSystem.Runtime.CompilerServices.Unsafe.dll + + + $(GamePath)\BepInEx\interop\Il2CppSystem.Runtime.Serialization.dll + + + $(GamePath)\BepInEx\interop\Il2CppSystem.Xml.dll + + + $(GamePath)\BepInEx\interop\Il2CppSystem.Xml.Linq.dll + + + $(GamePath)\BepInEx\interop\Kyub.EmojiSearch.dll + + + $(GamePath)\BepInEx\interop\Logger.Runtime.dll + + + $(GamePath)\BepInEx\interop\NewPlayerChallenges.Runtime.dll + + + $(GamePath)\BepInEx\interop\Newtonsoft.Json.dll + + + $(GamePath)\BepInEx\interop\Nito.Collections.Deque.dll + + + $(GamePath)\BepInEx\interop\Oculus.Platform.dll + + + $(GamePath)\BepInEx\interop\Oculus.VR.dll + + + $(GamePath)\BepInEx\interop\OSA.dll + + + $(GamePath)\BepInEx\interop\Pathfinding.ClipperLib.dll + + + $(GamePath)\BepInEx\interop\Pathfinding.Ionic.Zip.Reduced.dll + + + $(GamePath)\BepInEx\interop\Pathfinding.Poly2Tri.dll + + + $(GamePath)\BepInEx\interop\Photon3Unity3D.dll + + + $(GamePath)\BepInEx\interop\PhotonChat.dll + + + $(GamePath)\BepInEx\interop\PhotonRealtime.dll + + + $(GamePath)\BepInEx\interop\PhotonUnityNetworking.dll + + + $(GamePath)\BepInEx\interop\PhotonUnityNetworking.Utilities.dll + + + $(GamePath)\BepInEx\interop\PhotonVoice.dll + + + $(GamePath)\BepInEx\interop\PhotonVoice.API.dll + + + $(GamePath)\BepInEx\interop\PhotonVoice.PUN.dll + + + $(GamePath)\BepInEx\interop\Pngcs.dll + + + $(GamePath)\BepInEx\interop\RecNet.Interfaces.dll + + + $(GamePath)\BepInEx\interop\RecNet.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Agdxgidisplays.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.AgInitialization.Interfaces.dll + + + $(GamePath)\BepInEx\interop\RecRoom.AgInitialization.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Agmobilear.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Analytics.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ApplicationLifecycle.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Assetbundles.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Async.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Attributes.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Audio.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.AutomationTests.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.BitPacker.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Build.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Challenges.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Chat.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.CircuitsV1.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ClusterLods.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.CodeGen.Attributes.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Commandline.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.CommonDataTypes.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Configloader.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Connectables.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Content.Authoring.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Creation.Interfaces.UX.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Creation.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.CultureUtil.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Datastructures.CollisionMesh.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Datastructures.CullingGroupManager.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Datastructures.OverridableFields.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Datastructures.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Datastructures.Singletons.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Debugging.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.EditorHelpers.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Encoding.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Experiments.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.FastLines.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.FuzzySearch.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.GameSystems.Interfaces.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Imageutils.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Imposters.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Instantiation.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.iOSNative.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.JuniorAccountVisibility.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Keepsakes.Interfaces.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Keepsakes.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Keepsakes.UnityExtensions.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Localization.Service.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Maker.Core.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Maker.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.MemoryStats.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Minijson.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.MobileHome.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Nativemesh.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Networking.DataTypes.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Networking.NetworkedObjects.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Networking.PhotonImpl.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Networking.RoomLoading.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Networking.RPC.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Networking.SynchronizedFields.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.NoEngine.Algorithms.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.NoEngine.Common.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.NoEngine.DataStructures.Performance.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.NoEngine.DataStructures.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.NoEngine.Debugging.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.NoEngine.JetBrains.Annotations.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Attributes.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ObjectModel.BitPacker.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ObjectModel.ComponentData.Generated.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ObjectModel.ComponentData.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ObjectModel.ConfigUI.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Entities.Core.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Entities.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Interfaces.ConfigUI.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Interfaces.Prefabs.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Interfaces.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Prefabs.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Properties.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Protobufs.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ObjectModel.RendererV1.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Services.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Systems.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Telemetry.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Transmission.PUN.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Transmission.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ObjectPool.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Persistence.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.PlatformNotifications.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Preferences.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.PrefParsers.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ProgressionEvents.Interfaces.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ProgressionEvents.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Promises.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Protobuf.Debugging.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Protobuf.Extensions.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Protobuf.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Protobuf.UnityExtensions.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Rbex.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ResourceManagement.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.RoomLoading.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.RoomPermissions.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Rranticheat.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.RRUI.Core.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.RRUI.Data.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.RRUI.Navigation.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.RRUI.Theme.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Scheduling.Interface.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Scheduling.Scheduler.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Scheduling.Schedules.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.ShapeRendering.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Streamingaudio.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Studio.Common.LocalTesting.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Studio.Common.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.TagsAndLayers.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Time.Interfaces.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Time.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Tweening.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.UIInteraction.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Unityextensions.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.UrlHandler.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Utf8json.Interfaces.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Utf8json.Runtime.dll + + + $(GamePath)\BepInEx\interop\RecRoom.Versioning.Runtime.dll + + + $(GamePath)\BepInEx\interop\SA.Foundation.dll + + + $(GamePath)\BepInEx\interop\SA.Foundation.Network.dll + + + $(GamePath)\BepInEx\interop\SA.iOS.dll + + + $(GamePath)\BepInEx\interop\SA.iOS.XCode.dll + + + $(GamePath)\BepInEx\interop\Singular.dll + + + $(GamePath)\BepInEx\interop\StansAssets.Foundation.dll + + + $(GamePath)\BepInEx\interop\StansAssets.Plugins.dll + + + $(GamePath)\BepInEx\interop\StatsigUnity.Runtime.dll + + + $(GamePath)\BepInEx\interop\SteamVR.dll + + + $(GamePath)\BepInEx\interop\SteamVR_Actions.dll + + + $(GamePath)\BepInEx\interop\TextureTool.Runtime.dll + + + $(GamePath)\BepInEx\interop\ToxMod.dll + + + $(GamePath)\BepInEx\interop\UJect.Runtime.dll + + + $(GamePath)\BepInEx\interop\UJect.UnityExtensions.dll + + + $(GamePath)\BepInEx\interop\Unity.Addressables.dll + + + $(GamePath)\BepInEx\interop\Unity.Burst.dll + + + $(GamePath)\BepInEx\interop\Unity.Burst.Unsafe.dll + + + $(GamePath)\BepInEx\interop\Unity.Collections.dll + + + $(GamePath)\BepInEx\interop\Unity.Entities.dll + + + $(GamePath)\BepInEx\interop\Unity.InputSystem.dll + + + $(GamePath)\BepInEx\interop\Unity.Jobs.dll + + + $(GamePath)\BepInEx\interop\Unity.Localization.dll + + + $(GamePath)\BepInEx\interop\Unity.Mathematics.dll + + + $(GamePath)\BepInEx\interop\Unity.ProBuilder.dll + + + $(GamePath)\BepInEx\interop\Unity.Properties.dll + + + $(GamePath)\BepInEx\interop\Unity.RenderPipeline.Universal.ShaderLibrary.dll + + + $(GamePath)\BepInEx\interop\Unity.RenderPipelines.Core.Runtime.dll + + + $(GamePath)\BepInEx\interop\Unity.RenderPipelines.Universal.Runtime.dll + + + $(GamePath)\BepInEx\interop\Unity.ResourceManager.dll + + + $(GamePath)\BepInEx\interop\Unity.Serialization.dll + + + $(GamePath)\BepInEx\interop\Unity.TextMeshPro.dll + + + $(GamePath)\BepInEx\interop\Unity.XR.ARFoundation.dll + + + $(GamePath)\BepInEx\interop\Unity.XR.ARSubsystems.dll + + + $(GamePath)\BepInEx\interop\Unity.XR.Management.dll + + + $(GamePath)\BepInEx\interop\Unity.XR.Oculus.dll + + + $(GamePath)\BepInEx\interop\Unity.XR.OpenVR.dll + + + $(GamePath)\BepInEx\interop\Unity.XR.PSVR.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.AccessibilityModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.AIModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.AndroidJNIModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.AnimationModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.AssetBundleModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.AudioModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.ClothModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.ClusterInputModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.ClusterRendererModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.CoreModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.CrashReportingModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.DirectorModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.DSPGraphModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.GameCenterModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.GIModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.GridModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.HotReloadModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.ImageConversionModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.IMGUIModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.InputLegacyModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.InputModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.JSONSerializeModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.LocalizationModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.ParticleSystemModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.PerformanceReportingModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.Physics2DModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.PhysicsModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.ProfilerModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.ScreenCaptureModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.SharedInternalsModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.SpatialTracking.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.SpriteMaskModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.SpriteShapeModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.StreamingModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.SubstanceModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.SubsystemsModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.TerrainModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.TerrainPhysicsModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.TextCoreModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.TextRenderingModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.TilemapModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.TLSModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.UI.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.UIElementsModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.UIElementsNativeModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.UIModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.UmbraModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.UNETModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.UnityAnalyticsModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.UnityConnectModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.UnityCurlModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.UnityTestProtocolModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.UnityWebRequestAssetBundleModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.UnityWebRequestAudioModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.UnityWebRequestModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.UnityWebRequestTextureModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.UnityWebRequestWWWModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.VehiclesModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.VFXModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.VideoModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.VirtualTexturingModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.VRModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.WindModule.dll + + + $(GamePath)\BepInEx\interop\UnityEngine.XRModule.dll + + + $(GamePath)\BepInEx\interop\Valve.Newtonsoft.Json.dll + + + $(GamePath)\BepInEx\interop\XboxUWP.dll + + + + + + + +