Added ObjectExtensions functions to deal with ExtensionData dictionaries within the project

This commit is contained in:
Alex
2025-08-21 13:15:44 +01:00
parent 59cf92bbcb
commit f617fa13f2
3 changed files with 53 additions and 4 deletions
@@ -121,4 +121,48 @@ public static class ObjectExtensions
var json = element.GetRawText();
return JsonSerializer.Deserialize<T>(json);
}
public static object AddAllToExtensionData(this object obj, Dictionary<string, object> extensionData)
{
foreach (var keyValuePair in extensionData)
{
obj.AddToExtensionData(keyValuePair.Key, keyValuePair.Value);
}
return obj;
}
public static object AddToExtensionData(this object obj, string key, object value)
{
obj.GetExtensionData().Add(key, value);
return obj;
}
public static object RemoveFromExtensionData(this object obj, string key)
{
obj.GetExtensionData().Remove(key);
return obj;
}
public static object RemoveAllFromExtensionData(this object obj)
{
obj.GetExtensionData().Clear();
return obj;
}
public static Dictionary<string, object> GetExtensionData(this object obj)
{
if (!obj.TryGetExtensionData(out var extensionData))
{
throw new Exception($"Attempted to get from extension data for type {obj.GetType().FullName}, but the type doesnt contain ExtensionData or it is null");
}
return extensionData!;
}
public static bool TryGetExtensionData(this object obj, out Dictionary<string, object>? extensionData)
{
extensionData = obj.GetType().GetProperty("ExtensionData", BindingFlags.Instance | BindingFlags.Public)?.GetValue(obj) as
Dictionary<string, object>;
return extensionData is not null;
}
}
@@ -330,7 +330,7 @@ public static class ItemExtensions
/// <returns>Converted SptLootItem</returns>
public static SptLootItem ToLootItem(this Item item)
{
return new SptLootItem
var lootItem = new SptLootItem
{
ComposedKey = null,
Id = item.Id,
@@ -339,9 +339,13 @@ public static class ItemExtensions
ParentId = item.ParentId,
SlotId = item.SlotId,
Location = item.Location,
Desc = item.Desc,
// TODO: re-enable ExtensionData = item.ExtensionData,
Desc = item.Desc
};
if (item.TryGetExtensionData(out var extensionData))
{
lootItem.AddAllToExtensionData(extensionData!);
}
return lootItem;
}
public static ItemLocation? GetParsedLocation(this Item item)
@@ -43,10 +43,11 @@
<!-- Run ExtensionData patch -->
<Exec
ConsoleToMsBuild="true"
Condition="'$(IsPublish)' == 'true'"
Condition="'$(IsPublish)' == 'true' and '$(Configuration)' == 'Release'"
Command="dotnet build -c &quot;$(Configuration)&quot; &quot;$(MSBuildProjectDirectory)/../../Patches/Ceciler.JsonExtensionData/Ceciler.JsonExtensionData.csproj&quot;"
/>
<Exec
Condition="'$(Configuration)' == 'Release'"
ConsoleToMsBuild="true"
Command="dotnet &quot;$(MSBuildProjectDirectory)/../../Ceciler/Ceciler.Launcher.dll&quot; &quot;$(OutDir)SPTarkov.Server.Core.dll&quot; &quot;$(MSBuildProjectDirectory)/../../Patches/Ceciler.JsonExtensionData/bin/$(Configuration)/$(TargetFramework)/Ceciler.JsonExtensionData.dll&quot;"
/>