diff --git a/xivModdingFramework/Cache/XivCache.cs b/xivModdingFramework/Cache/XivCache.cs
index 760641ae..106db806 100644
--- a/xivModdingFramework/Cache/XivCache.cs
+++ b/xivModdingFramework/Cache/XivCache.cs
@@ -67,6 +67,14 @@ public EModelingTool ModelingTool
public XivTexFormat DefaultTextureFormat { get; set; } = XivTexFormat.A8R8G8B8;
+ public enum EPenumbraRedrawMode
+ {
+ RedrawAll,
+ RedrawSelf,
+ NoRedraw,
+ }
+
+ public EPenumbraRedrawMode PenumbraRedrawMode { get; set; } = EPenumbraRedrawMode.RedrawAll;
}
///
diff --git a/xivModdingFramework/Helpers/PenumbraAPI.cs b/xivModdingFramework/Helpers/PenumbraAPI.cs
index 8d946758..c91e0636 100644
--- a/xivModdingFramework/Helpers/PenumbraAPI.cs
+++ b/xivModdingFramework/Helpers/PenumbraAPI.cs
@@ -17,7 +17,6 @@ namespace xivModdingFramework.Helpers
///
public static class PenumbraAPI
{
-
///
/// Calls /redraw on the Penumbra API.
///
@@ -28,6 +27,19 @@ public static async Task Redraw()
}
+ ///
+ /// Calls /redraw on the Penumbra API to redraw only the local player.
+ ///
+ ///
+ public static async Task RedrawSelf()
+ {
+ Dictionary args = new()
+ {
+ { "ObjectTableIndex", "0" }
+ };
+ return await Request("/redraw", args);
+ }
+
///
/// Calls /reloadmod on the Penumbra API.
///
diff --git a/xivModdingFramework/Helpers/PenumbraAttachHandler.cs b/xivModdingFramework/Helpers/PenumbraAttachHandler.cs
index 67a4d3bf..0a4d26f0 100644
--- a/xivModdingFramework/Helpers/PenumbraAttachHandler.cs
+++ b/xivModdingFramework/Helpers/PenumbraAttachHandler.cs
@@ -7,6 +7,7 @@
using System.Text;
using System.Threading;
using System.Threading.Tasks;
+using xivModdingFramework.Cache;
using xivModdingFramework.Mods;
using xivModdingFramework.Mods.FileTypes;
using xivModdingFramework.Mods.FileTypes.PMP;
@@ -361,7 +362,10 @@ private static async Task PenumbraRefresh(bool reload = false)
{
await PenumbraAPI.ReloadMod(folder);
}
- await PenumbraAPI.Redraw();
+ if (XivCache.FrameworkSettings.PenumbraRedrawMode == FrameworkSettings.EPenumbraRedrawMode.RedrawAll)
+ await PenumbraAPI.Redraw();
+ else if (XivCache.FrameworkSettings.PenumbraRedrawMode == FrameworkSettings.EPenumbraRedrawMode.RedrawSelf)
+ await PenumbraAPI.RedrawSelf();
}
}
catch
diff --git a/xivModdingFramework/SqPack/FileTypes/TransactionDataHandler.cs b/xivModdingFramework/SqPack/FileTypes/TransactionDataHandler.cs
index 8c55a828..493a2b5c 100644
--- a/xivModdingFramework/SqPack/FileTypes/TransactionDataHandler.cs
+++ b/xivModdingFramework/SqPack/FileTypes/TransactionDataHandler.cs
@@ -847,7 +847,10 @@ internal void UNSAFE_AddFileInfo(FileStorageInformation storageInfo, XivDataFile
await PMP.CreateSimplePmp(settings.TargetPath, mpack, dict, null, false);
await PenumbraAPI.ReloadMod(di.Name);
- await PenumbraAPI.Redraw();
+ if (XivCache.FrameworkSettings.PenumbraRedrawMode == FrameworkSettings.EPenumbraRedrawMode.RedrawAll)
+ await PenumbraAPI.Redraw();
+ else if (XivCache.FrameworkSettings.PenumbraRedrawMode == FrameworkSettings.EPenumbraRedrawMode.RedrawSelf)
+ await PenumbraAPI.RedrawSelf();
// Don't have real offsets to update to, since we don't write to game files.
return null;