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;