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);