From 44776c34990244c60d31e89cfe77af31d294f399 Mon Sep 17 00:00:00 2001 From: Aaro Varis Date: Thu, 6 Mar 2025 20:33:22 +0200 Subject: [PATCH] Mag sync epicly working --- BoneSync/Patching/PlugPatches.cs | 14 ++++++++------ BoneSync/Sync/Components/SyncablePlugs.cs | 16 ++++++++++++++-- BoneSync/Sync/ObjectSync.cs | 6 ++++-- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/BoneSync/Patching/PlugPatches.cs b/BoneSync/Patching/PlugPatches.cs index 5e7c662..cfad389 100644 --- a/BoneSync/Patching/PlugPatches.cs +++ b/BoneSync/Patching/PlugPatches.cs @@ -14,7 +14,6 @@ using static MelonLoader.MelonLogger; namespace BoneSync.Patching { - [HarmonyPatch(typeof(AlignPlug))] public static class AlignPlugPatches { public static void OnPlugSocketChange(AlignPlug plug, Socket socket) @@ -40,19 +39,22 @@ namespace BoneSync.Patching if (!socketSyncable) { MelonLogger.Warning("SocketSyncable not found"); + } else + { + socketSyncable.FindAndUpdateComponents(); } - plugSyncable.FindAndUpdateComponents(); + - if (socketSyncable && socketSyncable.isOwner && !plugSyncable.isOwner) + if (socketSyncable != null && socketSyncable.isOwner && !plugSyncable.isOwner) { plugSyncable.TryBecomeOwner(true); // forcefully take ownership of the plug } byte plugId = plugSyncable.GetPlugId(plug); - byte socketId = socketSyncable ? socketSyncable.GetSocketId(socket) : byte.MaxValue; + byte socketId = socketSyncable != null ? socketSyncable.GetSocketId(socket) : byte.MaxValue; - MelonLogger.Msg("AlignPlug state: " + plug.transform.GetPath() + " Socket: " + socket.transform.GetPath() + " Plug ID: " + plugId + " Socket ID: " + socketId); + MelonLogger.Msg("AlignPlug state:" + plug.transform.GetPath() + " Socket:" + socket?.transform?.GetPath() + " PlugID:" + plugId + " SocketID:" + socketId); if (!plugSyncable.isOwner) return; @@ -60,7 +62,7 @@ namespace BoneSync.Patching { plugSyncId = plugSyncable.GetSyncId(), plugIndex = plugId, - socketSyncId = socketSyncable ? socketSyncable.GetSyncId() : ushort.MinValue, + socketSyncId = socketSyncable != null ? socketSyncable.GetSyncId() : ushort.MinValue, socketIndex = socketId }; diff --git a/BoneSync/Sync/Components/SyncablePlugs.cs b/BoneSync/Sync/Components/SyncablePlugs.cs index aeb4257..b5b5148 100644 --- a/BoneSync/Sync/Components/SyncablePlugs.cs +++ b/BoneSync/Sync/Components/SyncablePlugs.cs @@ -41,8 +41,20 @@ namespace BoneSync.Sync.Components public static bool SafeInsert(this AlignPlug plug, Socket socket) { if (!socket) return false; - if (socket.LockedPlug) return false; - if (plug.GetSocket() && plug._lastSocket != socket) + Plug lockedPlug = socket.LockedPlug; + if (lockedPlug && lockedPlug != plug) + { + AlignPlug alignPlug = lockedPlug.GetComponent(); + if (alignPlug) + { + alignPlug.ForceEject(); + } else + { + return false; + } + } + + if (plug.GetSocket() != socket) { plug.ForceEject(); } diff --git a/BoneSync/Sync/ObjectSync.cs b/BoneSync/Sync/ObjectSync.cs index 7019960..f75e37c 100644 --- a/BoneSync/Sync/ObjectSync.cs +++ b/BoneSync/Sync/ObjectSync.cs @@ -128,8 +128,10 @@ namespace BoneSync.Sync Syncable subSyncable = subSyncables[i]; if (subSyncable == syncable) continue; bool isRegistered = subSyncable.Registered; - MelonLogger.Msg("Discarding subSyncable: " + subSyncable.transform.GetPath() + " registered:" + isRegistered); - if (isRegistered) continue; + bool isPlugged = subSyncable.IsPlugged(); + + MelonLogger.Msg("Discarding subSyncable: " + subSyncable.transform.GetPath() + " registered:" + isRegistered + " plugged:" + isPlugged); + if (isRegistered || isPlugged) continue; subSyncable.DiscardSyncableImmediate(true, false); } }