diff --git a/DoubleTapJumpToExitSeat/DoubleTapJumpToExitSeat.csproj b/DoubleTapJumpToExitSeat/DoubleTapJumpToExitSeat.csproj deleted file mode 100644 index 5a8badc..0000000 --- a/DoubleTapJumpToExitSeat/DoubleTapJumpToExitSeat.csproj +++ /dev/null @@ -1,6 +0,0 @@ - - - - YouAreMineNow - - diff --git a/DoubleTapJumpToExitSeat/Main.cs b/DoubleTapJumpToExitSeat/Main.cs deleted file mode 100644 index 91c268e..0000000 --- a/DoubleTapJumpToExitSeat/Main.cs +++ /dev/null @@ -1,103 +0,0 @@ -using System.Reflection; -using ABI_RC.Core.InteractionSystem; -using ABI_RC.Core.Savior; -using ABI_RC.Systems.InputManagement; -using ABI_RC.Systems.Movement; -using HarmonyLib; -using MelonLoader; -using UnityEngine; - -namespace NAK.DoubleTapJumpToExitSeat; - -public class DoubleTapJumpToExitSeatMod : MelonMod -{ - #region Melon Preferences - - public static readonly MelonPreferences_Category Category = - MelonPreferences.CreateCategory(nameof(DoubleTapJumpToExitSeatMod)); - - public static readonly MelonPreferences_Entry EntryOnlyInVR = - Category.CreateEntry("only_in_vr", false, display_name: "Only In VR", description: "Should this behaviour only be active in VR?"); - - #endregion Melon Preferences - - #region Melon Events - - public override void OnInitializeMelon() - { - #region CVRSeat Patches - - HarmonyInstance.Patch( - typeof(CVRSeat).GetMethod(nameof(CVRSeat.Update), - BindingFlags.NonPublic | BindingFlags.Instance), - prefix: new HarmonyMethod(typeof(DoubleTapJumpToExitSeatMod).GetMethod(nameof(OnPreCVRSeatUpdate), - BindingFlags.NonPublic | BindingFlags.Static)) - ); - - #endregion CVRSeat Patches - - #region ViewManager Patches - - HarmonyInstance.Patch( - typeof(ViewManager).GetMethod(nameof(ViewManager.Update), - BindingFlags.NonPublic | BindingFlags.Instance), - prefix: new HarmonyMethod(typeof(DoubleTapJumpToExitSeatMod).GetMethod(nameof(OnPreViewManagerUpdate), - BindingFlags.NonPublic | BindingFlags.Static)), - postfix: new HarmonyMethod(typeof(DoubleTapJumpToExitSeatMod).GetMethod(nameof(OnPostViewManagerUpdate), - BindingFlags.NonPublic | BindingFlags.Static)) - ); - - #endregion ViewManager Patches - } - - #endregion Melon Events - - #region Harmony Patches - - private static float lastJumpTime = -1f; - private static bool wasJumping; - - private static bool OnPreCVRSeatUpdate(CVRSeat __instance) - { - if (!__instance.occupied) return false; - - // Crazy? - bool jumped = CVRInputManager.Instance.jump; - bool justJumped = jumped && !wasJumping; - wasJumping = jumped; - if (justJumped && (!EntryOnlyInVR.Value || MetaPort.Instance.isUsingVr)) - { - float t = Time.time; - if (t - lastJumpTime <= BetterBetterCharacterController.DoubleJumpFlightTimeOut) - { - lastJumpTime = -1f; - __instance.ExitSeat(); - return false; - } - lastJumpTime = t; - } - - // Double update this frame (this ensures Extrapolate / Every Frame Updated objects are seated correctly) - if (__instance.vrSitPosition.position != __instance._lastPosition || __instance.vrSitPosition.rotation != __instance._lastRotation) - __instance.MovePlayerToSeat(__instance.vrSitPositionReady ? __instance.vrSitPosition : __instance.transform); - - // Steal sync - if (__instance.lockControls) - { - if (__instance._spawnable != null) __instance._spawnable.ForceUpdate(4); - if (__instance._objectSync != null) __instance._objectSync.ForceUpdate(4); - } - - return false; // don't call original method - } - - // ReSharper disable once RedundantAssignment - private static void OnPreViewManagerUpdate(ref bool __state) - => (__state, BetterBetterCharacterController.Instance._isSitting) - = (BetterBetterCharacterController.Instance._isSitting, false); - - private static void OnPostViewManagerUpdate(ref bool __state) - => BetterBetterCharacterController.Instance._isSitting = __state; - - #endregion Harmony Patches -} \ No newline at end of file diff --git a/DoubleTapJumpToExitSeat/Properties/AssemblyInfo.cs b/DoubleTapJumpToExitSeat/Properties/AssemblyInfo.cs deleted file mode 100644 index fd30036..0000000 --- a/DoubleTapJumpToExitSeat/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,32 +0,0 @@ -using MelonLoader; -using NAK.DoubleTapJumpToExitSeat.Properties; -using System.Reflection; - -[assembly: AssemblyVersion(AssemblyInfoParams.Version)] -[assembly: AssemblyFileVersion(AssemblyInfoParams.Version)] -[assembly: AssemblyInformationalVersion(AssemblyInfoParams.Version)] -[assembly: AssemblyTitle(nameof(NAK.DoubleTapJumpToExitSeat))] -[assembly: AssemblyCompany(AssemblyInfoParams.Author)] -[assembly: AssemblyProduct(nameof(NAK.DoubleTapJumpToExitSeat))] - -[assembly: MelonInfo( - typeof(NAK.DoubleTapJumpToExitSeat.DoubleTapJumpToExitSeatMod), - nameof(NAK.DoubleTapJumpToExitSeat), - AssemblyInfoParams.Version, - AssemblyInfoParams.Author, - downloadLink: "https://github.com/NotAKidoS/NAK_CVR_Mods/tree/main/DoubleTapJumpToExitSeat" -)] - -[assembly: MelonGame("Alpha Blend Interactive", "ChilloutVR")] -[assembly: MelonPlatform(MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)] -[assembly: MelonPlatformDomain(MelonPlatformDomainAttribute.CompatibleDomains.MONO)] -[assembly: MelonColor(255, 246, 25, 99)] // red-pink -[assembly: MelonAuthorColor(255, 158, 21, 32)] // red -[assembly: HarmonyDontPatchAll] - -namespace NAK.DoubleTapJumpToExitSeat.Properties; -internal static class AssemblyInfoParams -{ - public const string Version = "1.0.0"; - public const string Author = "NotAKidoS"; -} \ No newline at end of file diff --git a/DoubleTapJumpToExitSeat/README.md b/DoubleTapJumpToExitSeat/README.md deleted file mode 100644 index df6f722..0000000 --- a/DoubleTapJumpToExitSeat/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# DoubleTapJumpToExitSeat - -Literally the mod name. - ---- - -Here is the block of text where I tell you this mod is not affiliated with or endorsed by ABI. -https://documentation.abinteractive.net/official/legal/tos/#7-modding-our-games - -> This mod is an independent creation not affiliated with, supported by, or approved by Alpha Blend Interactive. - -> Use of this mod is done so at the user's own risk and the creator cannot be held responsible for any issues arising from its use. - -> To the best of my knowledge, I have adhered to the Modding Guidelines established by Alpha Blend Interactive. diff --git a/DoubleTapJumpToExitSeat/format.json b/DoubleTapJumpToExitSeat/format.json deleted file mode 100644 index b7fa28e..0000000 --- a/DoubleTapJumpToExitSeat/format.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "_id": -1, - "name": "DoubleTapJumpToExitSeat", - "modversion": "1.0.0", - "gameversion": "2025r179", - "loaderversion": "0.6.1", - "modtype": "Mod", - "author": "NotAKidoS", - "description": "Literally the mod name.", - "searchtags": [ - "double", - "jump", - "chair", - "seat" - ], - "requirements": [ - "None" - ], - "downloadlink": "https://github.com/NotAKidoS/NAK_CVR_Mods/releases/download/r46/DoubleTapJumpToExitSeat.dll", - "sourcelink": "https://github.com/NotAKidoS/NAK_CVR_Mods/tree/main/DoubleTapJumpToExitSeat/", - "changelog": "- Initial Release", - "embedcolor": "#00FFFF" -} \ No newline at end of file diff --git a/README.md b/README.md index 56402aa..cb01fcb 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,6 @@ | [ASTExtension](ASTExtension/README.md) | Extension mod for [Avatar Scale Tool](https://github.com/NotAKidoS/AvatarScaleTool): | [Download](https://github.com/NotAKidoS/NAK_CVR_Mods/releases/download/r46/ASTExtension.dll) | | [AvatarQueueSystemTweaks](AvatarQueueSystemTweaks/README.md) | Small tweaks to the Avatar Queue System. | [Download](https://github.com/NotAKidoS/NAK_CVR_Mods/releases/download/r46/AvatarQueueSystemTweaks.dll) | | [CustomSpawnPoint](CustomSpawnPoint/README.md) | Replaces the unused Images button in the World Details page with a button to set a custom spawn point. | [Download](https://github.com/NotAKidoS/NAK_CVR_Mods/releases/download/r46/CustomSpawnPoint.dll) | -| [DoubleTapJumpToExitSeat](DoubleTapJumpToExitSeat/README.md) | Literally the mod name. | No Download | | [FuckToes](FuckToes/README.md) | Prevents VRIK from autodetecting toes in HalfbodyIK. | No Download | | [KeepVelocityOnExitFlight](KeepVelocityOnExitFlight/README.md) | Keeps the player's velocity when exiting flight mode. Makes it possible to fling yourself like in Garry's Mod. | [Download](https://github.com/NotAKidoS/NAK_CVR_Mods/releases/download/r46/KeepVelocityOnExitFlight.dll) | | [LazyPrune](LazyPrune/README.md) | Prevents loaded objects from immediately unloading on destruction. Should prevent needlessly unloading & reloading all avatars/props on world rejoin or GS reconnection. | [Download](https://github.com/NotAKidoS/NAK_CVR_Mods/releases/download/r46/LazyPrune.dll) | diff --git a/YouAreMyPropNowWeAreHavingSoftTacosLater/Main.cs b/YouAreMyPropNowWeAreHavingSoftTacosLater/Main.cs index b4f22de..645f7c0 100644 --- a/YouAreMyPropNowWeAreHavingSoftTacosLater/Main.cs +++ b/YouAreMyPropNowWeAreHavingSoftTacosLater/Main.cs @@ -21,25 +21,6 @@ namespace NAK.YouAreMyPropNowWeAreHavingSoftTacosLater; public class YouAreMyPropNowWeAreHavingSoftTacosLaterMod : MelonMod { - #region Melon Preferences - - public static readonly MelonPreferences_Category Category = - MelonPreferences.CreateCategory(nameof(YouAreMyPropNowWeAreHavingSoftTacosLaterMod)); - - public static readonly MelonPreferences_Entry EntryTrackPickups = - Category.CreateEntry("track_pickups", true, display_name: "Track Pickups", description: "Should pickups be tracked?"); - - public static readonly MelonPreferences_Entry EntryTrackAttachments = - Category.CreateEntry("track_attachments", true, display_name: "Track Attachments", description: "Should attachments be tracked?"); - - public static readonly MelonPreferences_Entry EntryTrackSeats = - Category.CreateEntry("track_seats", true, display_name: "Track Seats", description: "Should seats be tracked?"); - - public static readonly MelonPreferences_Entry EntryOnlySpawnedByMe = - Category.CreateEntry("only_spawned_by_me", true, display_name: "Only Spawned By Me", description: "Should only props spawned by me be tracked?"); - - #endregion Melon Preferences - #region Melon Events public override void OnInitializeMelon() @@ -77,24 +58,6 @@ public class YouAreMyPropNowWeAreHavingSoftTacosLaterMod : MelonMod ); #endregion CVRAttachment Patches - - #region CVRSeat Patches - - HarmonyInstance.Patch( - typeof(CVRSeat).GetMethod(nameof(CVRSeat.SitDown), - BindingFlags.Public | BindingFlags.Instance), - postfix: new HarmonyMethod(typeof(YouAreMyPropNowWeAreHavingSoftTacosLaterMod).GetMethod(nameof(OnCVRSeatSitDown), - BindingFlags.NonPublic | BindingFlags.Static)) - ); - - HarmonyInstance.Patch( - typeof(CVRSeat).GetMethod(nameof(CVRSeat.ExitSeat), - BindingFlags.Public | BindingFlags.Instance), - postfix: new HarmonyMethod(typeof(YouAreMyPropNowWeAreHavingSoftTacosLaterMod).GetMethod(nameof(OnCVRSeatExitSeat), - BindingFlags.NonPublic | BindingFlags.Static)) - ); - - #endregion CVRSeat Patches #region CVRSyncHelper Patches @@ -166,41 +129,26 @@ public class YouAreMyPropNowWeAreHavingSoftTacosLaterMod : MelonMod private static void OnCVRPickupObjectOnGrab(CVRPickupObject __instance) { - if (!EntryTrackPickups.Value) return; - if (!TryGetPropData(__instance.GetComponentInParent(true), out CVRSyncHelper.PropData propData)) return; + if (!GetPropData(__instance.GetComponentInParent(true), out CVRSyncHelper.PropData propData)) return; if (!_heldPropData.Contains(propData)) _heldPropData.Add(propData); } private static void OnCVRPickupObjectOnDrop(CVRPickupObject __instance) { - if (!TryGetPropData(__instance.GetComponentInParent(true), out CVRSyncHelper.PropData propData)) return; + if (!GetPropData(__instance.GetComponentInParent(true), out CVRSyncHelper.PropData propData)) return; if (_heldPropData.Contains(propData)) _heldPropData.Remove(propData); } private static void OnCVRAttachmentAttachInternal(CVRAttachment __instance) { - if (!EntryTrackAttachments.Value) return; - if (!TryGetPropData(__instance.GetComponentInParent(true), out CVRSyncHelper.PropData propData)) return; + if (!GetPropData(__instance.GetComponentInParent(true), out CVRSyncHelper.PropData propData)) return; if (!_heldPropData.Contains(propData)) _heldPropData.Add(propData); } private static void OnCVRAttachmentDeAttach(CVRAttachment __instance) { if (!__instance._isAttached) return; // Can invoke DeAttach without being attached - if (!TryGetPropData(__instance.GetComponentInParent(true), out CVRSyncHelper.PropData propData)) return; - if (_heldPropData.Contains(propData)) _heldPropData.Remove(propData); - } - - private static void OnCVRSeatSitDown(CVRSeat __instance) - { - if (!EntryTrackSeats.Value) return; - if (!TryGetPropData(__instance.GetComponentInParent(true), out CVRSyncHelper.PropData propData)) return; - if (!_heldPropData.Contains(propData)) _heldPropData.Add(propData); - } - - private static void OnCVRSeatExitSeat(CVRSeat __instance) - { - if (!TryGetPropData(__instance.GetComponentInParent(true), out CVRSyncHelper.PropData propData)) return; + if (!GetPropData(__instance.GetComponentInParent(true), out CVRSyncHelper.PropData propData)) return; if (_heldPropData.Contains(propData)) _heldPropData.Remove(propData); } @@ -213,7 +161,7 @@ public class YouAreMyPropNowWeAreHavingSoftTacosLaterMod : MelonMod if (type != DownloadTask.ObjectType.Prop) return true; // Only care about props // toAttach is our instanceId, lets find the propData - if (!TryGetPropDataById(toAttach, out CVRSyncHelper.PropData newPropData)) return true; + if (!GetPropDataById(toAttach, out CVRSyncHelper.PropData newPropData)) return true; // Check if this is a prop we requested to spawn Vector3 identity = GetIdentityKeyFromPropData(newPropData); @@ -359,18 +307,13 @@ public class YouAreMyPropNowWeAreHavingSoftTacosLaterMod : MelonMod #region Util - private static bool TryGetPropData(CVRSpawnable spawnable, out CVRSyncHelper.PropData propData) + private static bool GetPropData(CVRSpawnable spawnable, out CVRSyncHelper.PropData propData) { if (spawnable == null) { propData = null; return false; } - if (EntryOnlySpawnedByMe.Value && !spawnable.IsMine()) - { - propData = null; - return false; - } foreach (CVRSyncHelper.PropData data in CVRSyncHelper.Props) { if (data.InstanceId != spawnable.instanceId) continue; @@ -381,7 +324,7 @@ public class YouAreMyPropNowWeAreHavingSoftTacosLaterMod : MelonMod return false; } - private static bool TryGetPropDataById(string instanceId, out CVRSyncHelper.PropData propData) + private static bool GetPropDataById(string instanceId, out CVRSyncHelper.PropData propData) { foreach (CVRSyncHelper.PropData data in CVRSyncHelper.Props) {