diff --git a/QSB/API/Messages/AddonCustomDataSyncMessage.cs b/QSB/API/Messages/AddonCustomDataSyncMessage.cs index f36e00db..74edc5a4 100644 --- a/QSB/API/Messages/AddonCustomDataSyncMessage.cs +++ b/QSB/API/Messages/AddonCustomDataSyncMessage.cs @@ -7,6 +7,5 @@ namespace QSB.API.Messages; public class AddonCustomDataSyncMessage : QSBMessage<(uint playerId, string key, byte[] data)> { public AddonCustomDataSyncMessage(uint playerId, string key, object data) : base((playerId, key, data.ToBytes())) { } - public override void OnReceiveRemote() => QSBPlayerManager.GetPlayer(Data.playerId).SetCustomData(Data.key, Data.data.ToObject()); } diff --git a/QSB/API/QSBAPI.cs b/QSB/API/QSBAPI.cs index 13fd1cd2..c66df79f 100644 --- a/QSB/API/QSBAPI.cs +++ b/QSB/API/QSBAPI.cs @@ -1,9 +1,9 @@ -using System; -using System.Linq; -using OWML.Common; +using OWML.Common; using QSB.API.Messages; using QSB.Messaging; using QSB.Player; +using System; +using System.Linq; using UnityEngine.Events; namespace QSB.API; @@ -26,11 +26,8 @@ public class QSBAPI : IQSBAPI public UnityEvent OnPlayerJoin() => QSBAPIEvents.OnPlayerJoinEvent; public UnityEvent OnPlayerLeave() => QSBAPIEvents.OnPlayerLeaveEvent; - public void SetCustomData(uint playerId, string key, T data) - => QSBPlayerManager.GetPlayer(playerId).SetCustomData(key, data); - - public T GetCustomData(uint playerId, string key) - => QSBPlayerManager.GetPlayer(playerId).GetCustomData(key); + public void SetCustomData(uint playerId, string key, T data) => QSBPlayerManager.GetPlayer(playerId).SetCustomData(key, data); + public T GetCustomData(uint playerId, string key) => QSBPlayerManager.GetPlayer(playerId).GetCustomData(key); public void SendMessage(string messageType, T data, uint to = uint.MaxValue, bool receiveLocally = false) => new AddonDataMessage(messageType, data, receiveLocally) { To = to }.Send(); diff --git a/QSB/Player/Messages/RequestStateResyncMessage.cs b/QSB/Player/Messages/RequestStateResyncMessage.cs index 28f3e8fe..347e5317 100644 --- a/QSB/Player/Messages/RequestStateResyncMessage.cs +++ b/QSB/Player/Messages/RequestStateResyncMessage.cs @@ -53,10 +53,9 @@ public class RequestStateResyncMessage : QSBMessage new PlayerInformationMessage { To = From }.Send(); // Initial sync of all custom data from APIs - foreach (var key in QSBPlayerManager.LocalPlayer.GetCustomDataKeys()) + foreach (var kvp in QSBPlayerManager.LocalPlayer._customData) { - var data = QSBPlayerManager.LocalPlayer.GetCustomData(key); - new AddonCustomDataSyncMessage(QSBPlayerManager.LocalPlayerId, key, data) { To = From }.Send(); + new AddonCustomDataSyncMessage(QSBPlayerManager.LocalPlayerId, kvp.Key, kvp.Value) { To = From }.Send(); } } } \ No newline at end of file diff --git a/QSB/Player/PlayerInfo.cs b/QSB/Player/PlayerInfo.cs index 5b2cd9f6..585ac2af 100644 --- a/QSB/Player/PlayerInfo.cs +++ b/QSB/Player/PlayerInfo.cs @@ -181,7 +181,8 @@ public partial class PlayerInfo HUDBox.OnRespawn(); } - private Dictionary _customData = new(); + // internal for message + internal readonly Dictionary _customData = new(); public void SetCustomData(string key, T data) { @@ -193,7 +194,6 @@ public partial class PlayerInfo } } - public T GetCustomData(string key) { if (!_customData.TryGetValue(key, out var value)) @@ -204,7 +204,5 @@ public partial class PlayerInfo return (T)value; } - public IEnumerable GetCustomDataKeys() => _customData.Keys; - public override string ToString() => $"{PlayerId}:{GetType().Name} ({Name})"; } diff --git a/QSB/Utility/Extensions.cs b/QSB/Utility/Extensions.cs index d3d591bf..9677e30c 100644 --- a/QSB/Utility/Extensions.cs +++ b/QSB/Utility/Extensions.cs @@ -239,6 +239,9 @@ public static class Extensions return sb.ToString(); } + /// + /// only works for c# serializable objects + /// public static byte[] ToBytes(this object obj) { using var ms = new MemoryStream(); @@ -248,6 +251,9 @@ public static class Extensions return bytes; } + /// + /// only works for c# serializable objects + /// public static object ToObject(this byte[] bytes) { using var ms = new MemoryStream(bytes);