Mag sync epicly working

This commit is contained in:
2025-03-06 20:33:22 +02:00
parent 5f0b1d40fb
commit 44776c3499
3 changed files with 26 additions and 10 deletions

View File

@@ -14,7 +14,6 @@ using static MelonLoader.MelonLogger;
namespace BoneSync.Patching namespace BoneSync.Patching
{ {
[HarmonyPatch(typeof(AlignPlug))]
public static class AlignPlugPatches public static class AlignPlugPatches
{ {
public static void OnPlugSocketChange(AlignPlug plug, Socket socket) public static void OnPlugSocketChange(AlignPlug plug, Socket socket)
@@ -40,19 +39,22 @@ namespace BoneSync.Patching
if (!socketSyncable) if (!socketSyncable)
{ {
MelonLogger.Warning("SocketSyncable not found"); 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 plugSyncable.TryBecomeOwner(true); // forcefully take ownership of the plug
} }
byte plugId = plugSyncable.GetPlugId(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; if (!plugSyncable.isOwner) return;
@@ -60,7 +62,7 @@ namespace BoneSync.Patching
{ {
plugSyncId = plugSyncable.GetSyncId(), plugSyncId = plugSyncable.GetSyncId(),
plugIndex = plugId, plugIndex = plugId,
socketSyncId = socketSyncable ? socketSyncable.GetSyncId() : ushort.MinValue, socketSyncId = socketSyncable != null ? socketSyncable.GetSyncId() : ushort.MinValue,
socketIndex = socketId socketIndex = socketId
}; };

View File

@@ -41,8 +41,20 @@ namespace BoneSync.Sync.Components
public static bool SafeInsert(this AlignPlug plug, Socket socket) public static bool SafeInsert(this AlignPlug plug, Socket socket)
{ {
if (!socket) return false; if (!socket) return false;
if (socket.LockedPlug) return false; Plug lockedPlug = socket.LockedPlug;
if (plug.GetSocket() && plug._lastSocket != socket) if (lockedPlug && lockedPlug != plug)
{
AlignPlug alignPlug = lockedPlug.GetComponent<AlignPlug>();
if (alignPlug)
{
alignPlug.ForceEject();
} else
{
return false;
}
}
if (plug.GetSocket() != socket)
{ {
plug.ForceEject(); plug.ForceEject();
} }

View File

@@ -128,8 +128,10 @@ namespace BoneSync.Sync
Syncable subSyncable = subSyncables[i]; Syncable subSyncable = subSyncables[i];
if (subSyncable == syncable) continue; if (subSyncable == syncable) continue;
bool isRegistered = subSyncable.Registered; bool isRegistered = subSyncable.Registered;
MelonLogger.Msg("Discarding subSyncable: " + subSyncable.transform.GetPath() + " registered:" + isRegistered); bool isPlugged = subSyncable.IsPlugged();
if (isRegistered) continue;
MelonLogger.Msg("Discarding subSyncable: " + subSyncable.transform.GetPath() + " registered:" + isRegistered + " plugged:" + isPlugged);
if (isRegistered || isPlugged) continue;
subSyncable.DiscardSyncableImmediate(true, false); subSyncable.DiscardSyncableImmediate(true, false);
} }
} }