Files
SnowcloakClient/Penumbra.Api/IpcSubscribers/ModSettings.cs

219 lines
11 KiB
C#
Raw Normal View History

2025-08-22 02:19:48 +01:00
using Dalamud.Plugin;
using Penumbra.Api.Api;
using Penumbra.Api.Enums;
using Penumbra.Api.Helpers;
namespace Penumbra.Api.IpcSubscribers;
using CurrentSettingsBase = ValueTuple<int, (bool, int, Dictionary<string, List<string>>, bool)?>;
using CurrentSettings = ValueTuple<PenumbraApiEc, (bool, int, Dictionary<string, List<string>>, bool)?>;
using CurrentSettingsTempBase = ValueTuple<int, (bool, int, Dictionary<string, List<string>>, bool, bool)?>;
using CurrentSettingsTemp = ValueTuple<PenumbraApiEc, (bool, int, Dictionary<string, List<string>>, bool, bool)?>;
/// <inheritdoc cref="IPenumbraApiModSettings.GetAvailableModSettings"/>
public sealed class GetAvailableModSettings(IDalamudPluginInterface pi)
: FuncSubscriber<string, string, IReadOnlyDictionary<string, (string[], int)>?>(pi, Label)
{
/// <summary> The label. </summary>
public const string Label = $"Penumbra.{nameof(GetAvailableModSettings)}.V5";
/// <inheritdoc cref="IPenumbraApiModSettings.GetAvailableModSettings"/>
public new IReadOnlyDictionary<string, (string[], GroupType)>? Invoke(string modDirectory, string modName = "")
=> AvailableModSettings.Create(base.Invoke(modDirectory, modName));
/// <summary> Create a provider. </summary>
public static FuncProvider<string, string, IReadOnlyDictionary<string, (string[], int)>?> Provider(IDalamudPluginInterface pi,
IPenumbraApiModSettings api)
=> new(pi, Label, (a, b) => api.GetAvailableModSettings(a, b)?.Original);
}
/// <inheritdoc cref="IPenumbraApiModSettings.GetCurrentModSettings"/>
public sealed class GetCurrentModSettings(IDalamudPluginInterface pi)
: FuncSubscriber<Guid, string, string, bool, CurrentSettingsBase>(pi, Label)
{
/// <summary> The label. </summary>
public const string Label = $"Penumbra.{nameof(GetCurrentModSettings)}.V5";
/// <inheritdoc cref="IPenumbraApiModSettings.GetCurrentModSettings"/>
public new CurrentSettings Invoke(Guid collectionId, string modDirectory, string modName = "", bool ignoreInheritance = false)
{
var (ret, t) = base.Invoke(collectionId, modDirectory, modName, ignoreInheritance);
return ((PenumbraApiEc)ret, t);
}
/// <summary> Create a provider. </summary>
public static FuncProvider<Guid, string, string, bool, CurrentSettingsBase> Provider(IDalamudPluginInterface pi,
IPenumbraApiModSettings api)
=> new(pi, Label, (a, b, c, d) =>
{
var (ret, t) = api.GetCurrentModSettings(a, b, c, d);
return ((int)ret, t);
});
}
/// <inheritdoc cref="IPenumbraApiModSettings.GetCurrentModSettingsWithTemp"/>
public sealed class GetCurrentModSettingsWithTemp(IDalamudPluginInterface pi)
: FuncSubscriber<Guid, string, string, bool, bool, int, CurrentSettingsTempBase>(pi, Label)
{
/// <summary> The label. </summary>
public const string Label = $"Penumbra.{nameof(GetCurrentModSettingsWithTemp)}";
/// <inheritdoc cref="IPenumbraApiModSettings.GetCurrentModSettingsWithTemp"/>
public new CurrentSettingsTemp Invoke(Guid collectionId, string modDirectory, string modName = "", bool ignoreInheritance = false,
bool ignoreTemporary = false, int key = 0)
{
var (ret, t) = base.Invoke(collectionId, modDirectory, modName, ignoreInheritance, ignoreTemporary, key);
return ((PenumbraApiEc)ret, t);
}
/// <summary> Create a provider. </summary>
public static FuncProvider<Guid, string, string, bool, bool, int, CurrentSettingsTempBase> Provider(IDalamudPluginInterface pi,
IPenumbraApiModSettings api)
=> new(pi, Label, (a, b, c, d, e, f) =>
{
var (ret, t) = api.GetCurrentModSettingsWithTemp(a, b, c, d, e, f);
return ((int)ret, t);
});
}
/// <inheritdoc cref="IPenumbraApiModSettings.GetAllModSettings"/>
public sealed class GetAllModSettings(IDalamudPluginInterface pi)
: FuncSubscriber<Guid, bool, bool, int, (int, Dictionary<string, (bool, int, Dictionary<string, List<string>>, bool, bool)>?)>(pi, Label)
{
/// <summary> The label. </summary>
public const string Label = $"Penumbra.{nameof(GetAllModSettings)}";
/// <inheritdoc cref="IPenumbraApiModSettings.GetAllModSettings"/>
public new (PenumbraApiEc, Dictionary<string, (bool, int, Dictionary<string, List<string>>, bool, bool)>?) Invoke(Guid collectionId,
bool ignoreInheritance = false, bool ignoreTemporary = false, int key = 0)
{
var (ret, t) = base.Invoke(collectionId, ignoreInheritance, ignoreTemporary, key);
return ((PenumbraApiEc)ret, t);
}
/// <summary> Create a provider. </summary>
public static FuncProvider<Guid, bool, bool, int, (int, Dictionary<string, (bool, int, Dictionary<string, List<string>>, bool, bool)>?)>
Provider(IDalamudPluginInterface pi,
IPenumbraApiModSettings api)
=> new(pi, Label, (a, b, c, d) =>
{
var (ret, t) = api.GetAllModSettings(a, b, c, d);
return ((int)ret, t);
});
}
/// <inheritdoc cref="IPenumbraApiModSettings.TryInheritMod"/>
public sealed class TryInheritMod(IDalamudPluginInterface pi)
: FuncSubscriber<Guid, string, string, bool, int>(pi, Label)
{
/// <summary> The label. </summary>
public const string Label = $"Penumbra.{nameof(TryInheritMod)}.V5";
/// <inheritdoc cref="IPenumbraApiModSettings.TryInheritMod"/>
public PenumbraApiEc Invoke(Guid collectionId, string modDirectory, bool inherit, string modName = "")
=> (PenumbraApiEc)Invoke(collectionId, modDirectory, modName, inherit);
/// <summary> Create a provider. </summary>
public static FuncProvider<Guid, string, string, bool, int> Provider(IDalamudPluginInterface pi, IPenumbraApiModSettings api)
=> new(pi, Label, (a, b, c, d) => (int)api.TryInheritMod(a, b, c, d));
}
/// <inheritdoc cref="IPenumbraApiModSettings.TrySetMod"/>
public sealed class TrySetMod(IDalamudPluginInterface pi)
: FuncSubscriber<Guid, string, string, bool, int>(pi, Label)
{
/// <summary> The label. </summary>
public const string Label = $"Penumbra.{nameof(TrySetMod)}.V5";
/// <inheritdoc cref="IPenumbraApiModSettings.TrySetMod"/>
public PenumbraApiEc Invoke(Guid collectionId, string modDirectory, bool inherit, string modName = "")
=> (PenumbraApiEc)Invoke(collectionId, modDirectory, modName, inherit);
/// <summary> Create a provider. </summary>
public static FuncProvider<Guid, string, string, bool, int> Provider(IDalamudPluginInterface pi, IPenumbraApiModSettings api)
=> new(pi, Label, (a, b, c, d) => (int)api.TrySetMod(a, b, c, d));
}
/// <inheritdoc cref="IPenumbraApiModSettings.TrySetModPriority"/>
public sealed class TrySetModPriority(IDalamudPluginInterface pi)
: FuncSubscriber<Guid, string, string, int, int>(pi, Label)
{
/// <summary> The label. </summary>
public const string Label = $"Penumbra.{nameof(TrySetModPriority)}.V5";
/// <inheritdoc cref="IPenumbraApiModSettings.TrySetModPriority"/>
public PenumbraApiEc Invoke(Guid collectionId, string modDirectory, int priority, string modName = "")
=> (PenumbraApiEc)Invoke(collectionId, modDirectory, modName, priority);
/// <summary> Create a provider. </summary>
public static FuncProvider<Guid, string, string, int, int> Provider(IDalamudPluginInterface pi, IPenumbraApiModSettings api)
=> new(pi, Label, (a, b, c, d) => (int)api.TrySetModPriority(a, b, c, d));
}
/// <inheritdoc cref="IPenumbraApiModSettings.TrySetModSetting"/>
public sealed class TrySetModSetting(IDalamudPluginInterface pi)
: FuncSubscriber<Guid, string, string, string, string, int>(pi, Label)
{
/// <summary> The label. </summary>
public const string Label = $"Penumbra.{nameof(TrySetModSetting)}.V5";
/// <inheritdoc cref="IPenumbraApiModSettings.TrySetModSetting"/>
public new PenumbraApiEc Invoke(Guid collectionId, string modDirectory, string optionGroupName, string optionName, string modName = "")
=> (PenumbraApiEc)base.Invoke(collectionId, modDirectory, modName, optionGroupName, optionName);
/// <summary> Create a provider. </summary>
public static FuncProvider<Guid, string, string, string, string, int> Provider(IDalamudPluginInterface pi, IPenumbraApiModSettings api)
=> new(pi, Label, (a, b, c, d, e) => (int)api.TrySetModSetting(a, b, c, d, e));
}
/// <inheritdoc cref="IPenumbraApiModSettings.TrySetModSettings"/>
public sealed class TrySetModSettings(IDalamudPluginInterface pi)
: FuncSubscriber<Guid, string, string, string, IReadOnlyList<string>, int>(pi, Label)
{
/// <summary> The label. </summary>
public const string Label = $"Penumbra.{nameof(TrySetModSettings)}.V5";
/// <inheritdoc cref="IPenumbraApiModSettings.TrySetModSettings"/>
public PenumbraApiEc Invoke(Guid collectionId, string modDirectory, string optionGroupName,
IReadOnlyList<string> optionNames, string modName = "")
=> (PenumbraApiEc)Invoke(collectionId, modDirectory, modName, optionGroupName, optionNames);
/// <summary> Create a provider. </summary>
public static FuncProvider<Guid, string, string, string, IReadOnlyList<string>, int> Provider(IDalamudPluginInterface pi,
IPenumbraApiModSettings api)
=> new(pi, Label, (a, b, c, d, e) => (int)api.TrySetModSettings(a, b, c, d, e));
}
/// <inheritdoc cref="IPenumbraApiModSettings.ModSettingChanged" />
public static class ModSettingChanged
{
/// <summary> The label. </summary>
public const string Label = $"Penumbra.{nameof(ModSettingChanged)}.V5";
/// <summary> Create a new event subscriber. </summary>
public static EventSubscriber<ModSettingChange, Guid, string, bool> Subscriber(IDalamudPluginInterface pi,
params Action<ModSettingChange, Guid, string, bool>[] actions)
=> new(pi, Label, actions);
/// <summary> Create a provider. </summary>
public static EventProvider<ModSettingChange, Guid, string, bool> Provider(IDalamudPluginInterface pi, IPenumbraApiModSettings api)
=> new(pi, Label, t => api.ModSettingChanged += t.Invoke, t => api.ModSettingChanged -= t.Invoke);
}
/// <inheritdoc cref="IPenumbraApiModSettings.CopyModSettings"/>
public sealed class CopyModSettings(IDalamudPluginInterface pi)
: FuncSubscriber<Guid?, string, string, int>(pi, Label)
{
/// <summary> The label. </summary>
public const string Label = $"Penumbra.{nameof(CopyModSettings)}.V5";
/// <inheritdoc cref="IPenumbraApiModSettings.CopyModSettings"/>
public new PenumbraApiEc Invoke(Guid? collectionId, string modDirectoryFrom, string modDirectoryTo)
=> (PenumbraApiEc)base.Invoke(collectionId, modDirectoryFrom, modDirectoryTo);
/// <summary> Create a provider. </summary>
public static FuncProvider<Guid?, string, string, int> Provider(IDalamudPluginInterface pi,
IPenumbraApiModSettings api)
=> new(pi, Label, (a, b, c) => (int)api.CopyModSettings(a, b, c));
}