From 13f9fc109338018f0748b48f81cbc50586fe2dff Mon Sep 17 00:00:00 2001 From: clodanSPT Date: Tue, 6 May 2025 19:08:26 +0100 Subject: [PATCH] =?UTF-8?q?Added=20an=20option=20for=20modders=20to=20add?= =?UTF-8?q?=20their=20own=20Data=20handlers=20for=20ItemEv=E2=80=A6=20(#24?= =?UTF-8?q?1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added an option for modders to add their own Data handlers for ItemEventRouter handling serialization * Made return type for func nullable --------- Co-authored-by: Alex Co-authored-by: Alex --- .../BaseInteractionRequestDataConverter.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/BaseInteractionRequestDataConverter.cs b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/BaseInteractionRequestDataConverter.cs index 1ea78cd8..82442a76 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/BaseInteractionRequestDataConverter.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/BaseInteractionRequestDataConverter.cs @@ -18,6 +18,7 @@ namespace SPTarkov.Server.Core.Utils.Json.Converters; public class BaseInteractionRequestDataConverter : JsonConverter { + private static Dictionary> _modHandlers = new(); public override BaseInteractionRequestData? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { using var jsonDocument = JsonDocument.ParseValue(ref reader); @@ -177,12 +178,24 @@ public class BaseInteractionRequestDataConverter : JsonConverter(jsonText); default: + if (_modHandlers.TryGetValue(action, out var handler)) + { + return handler(jsonText); + } throw new Exception( $"Unhandled action type {action}, make sure the BaseInteractionRequestDataConverter has the deserialization for this action handled." ); } } + public static void RegisterModDataHandler(string action, Func handler) + { + if (!_modHandlers.TryAdd(action, handler)) + { + throw new Exception($"Unable to register action {action} to BaseInteractionRequestDataConverter as it already exists."); + } + } + public override void Write(Utf8JsonWriter writer, BaseInteractionRequestData value, JsonSerializerOptions options) { JsonSerializer.Serialize(writer, value, options);