Added ObjectExtensions functions to deal with ExtensionData dictionaries within the project
This commit is contained in:
@@ -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 "$(Configuration)" "$(MSBuildProjectDirectory)/../../Patches/Ceciler.JsonExtensionData/Ceciler.JsonExtensionData.csproj""
|
||||
/>
|
||||
<Exec
|
||||
Condition="'$(Configuration)' == 'Release'"
|
||||
ConsoleToMsBuild="true"
|
||||
Command="dotnet "$(MSBuildProjectDirectory)/../../Ceciler/Ceciler.Launcher.dll" "$(OutDir)SPTarkov.Server.Core.dll" "$(MSBuildProjectDirectory)/../../Patches/Ceciler.JsonExtensionData/bin/$(Configuration)/$(TargetFramework)/Ceciler.JsonExtensionData.dll""
|
||||
/>
|
||||
|
||||
Reference in New Issue
Block a user