Add DalamudSubstitutionProvider

This commit is contained in:
Ottermandias 2023-08-10 17:38:35 +02:00
parent df808187e2
commit 09ca32f33d
2 changed files with 58 additions and 7 deletions

View file

@ -0,0 +1,46 @@
using System;
using Dalamud.Plugin.Services;
using Penumbra.Collections.Manager;
using Penumbra.String.Classes;
namespace Penumbra.Api;
public class DalamudSubstitutionProvider : IDisposable
{
private readonly ITextureSubstitutionProvider _substitution;
private readonly ActiveCollectionData _activeCollectionData;
public DalamudSubstitutionProvider(ITextureSubstitutionProvider substitution, ActiveCollectionData activeCollectionData)
{
_substitution = substitution;
_activeCollectionData = activeCollectionData;
_substitution.InterceptTexDataLoad += Substitute;
}
public void Dispose()
=> _substitution.InterceptTexDataLoad -= Substitute;
private void Substitute(string path, ref string? replacementPath)
{
// Let other plugins prioritize replacement paths.
if (replacementPath != null)
return;
// Only replace interface textures.
if (!path.StartsWith("ui/") && !path.StartsWith("common/font/"))
return;
try
{
if (!Utf8GamePath.FromString(path, out var utf8Path, true))
return;
var resolved = _activeCollectionData.Interface.ResolvePath(utf8Path);
replacementPath = resolved?.FullName;
}
catch
{
// ignored
}
}
}

View file

@ -13,6 +13,7 @@ using Dalamud.Plugin;
using System.Linq;
using System.Reflection;
using Dalamud.Interface.DragDrop;
using Dalamud.Plugin.Services;
using Microsoft.Extensions.DependencyInjection;
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Local
@ -78,24 +79,28 @@ public class DalamudServices
services.AddSingleton(this);
services.AddSingleton(UiBuilder);
services.AddSingleton(DragDropManager);
services.AddSingleton(TextureProvider);
services.AddSingleton(TextureSubstitutionProvider);
}
// TODO remove static
// @formatter:off
[PluginService][RequiredVersion("1.0")] public DalamudPluginInterface PluginInterface { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public DalamudPluginInterface PluginInterface { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public CommandManager Commands { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public DataManager GameData { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public ClientState ClientState { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public ChatGui Chat { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public Framework Framework { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public Condition Conditions { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public ChatGui Chat { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public Framework Framework { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public Condition Conditions { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public TargetManager Targets { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public ObjectTable Objects { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public TitleScreenMenu TitleScreenMenu { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public TitleScreenMenu TitleScreenMenu { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public GameGui GameGui { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public KeyState KeyState { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public KeyState KeyState { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public SigScanner SigScanner { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public IDragDropManager DragDropManager { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public IDragDropManager DragDropManager { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public ITextureProvider TextureProvider { get; private set; } = null!;
[PluginService][RequiredVersion("1.0")] public ITextureSubstitutionProvider TextureSubstitutionProvider { get; private set; } = null!;
// @formatter:on
public UiBuilder UiBuilder