This commit is contained in:
Ottermandias 2022-10-29 16:02:18 +02:00
parent 35baba18bf
commit 3c0cdc3d0a
31 changed files with 0 additions and 2687 deletions

View file

@ -1,85 +0,0 @@
[*]
charset=utf-8
end_of_line=lf
trim_trailing_whitespace=true
insert_final_newline=false
indent_style=space
indent_size=4
# Microsoft .NET properties
csharp_new_line_before_members_in_object_initializers=false
csharp_preferred_modifier_order=public, private, protected, internal, new, abstract, virtual, sealed, override, static, readonly, extern, unsafe, volatile, async:suggestion
csharp_prefer_braces=true:none
csharp_space_after_cast=false
csharp_space_after_keywords_in_control_flow_statements=false
csharp_space_between_method_call_parameter_list_parentheses=true
csharp_space_between_method_declaration_parameter_list_parentheses=true
csharp_space_between_parentheses=control_flow_statements,expressions,type_casts
csharp_style_var_elsewhere=true:suggestion
csharp_style_var_for_built_in_types=true:suggestion
csharp_style_var_when_type_is_apparent=true:suggestion
dotnet_style_parentheses_in_arithmetic_binary_operators=never_if_unnecessary:none
dotnet_style_parentheses_in_other_binary_operators=never_if_unnecessary:none
dotnet_style_parentheses_in_relational_binary_operators=never_if_unnecessary:none
dotnet_style_predefined_type_for_locals_parameters_members=true:suggestion
dotnet_style_predefined_type_for_member_access=true:suggestion
dotnet_style_qualification_for_event=false:suggestion
dotnet_style_qualification_for_field=false:suggestion
dotnet_style_qualification_for_method=false:suggestion
dotnet_style_qualification_for_property=false:suggestion
dotnet_style_require_accessibility_modifiers=for_non_interface_members:suggestion
# ReSharper properties
resharper_align_multiline_binary_expressions_chain=false
resharper_align_multiline_calls_chain=false
resharper_autodetect_indent_settings=true
resharper_braces_redundant=true
resharper_constructor_or_destructor_body=expression_body
resharper_csharp_empty_block_style=together
resharper_csharp_max_line_length=180
resharper_csharp_space_within_array_access_brackets=true
resharper_enforce_line_ending_style=true
resharper_int_align_assignments=true
resharper_int_align_comments=true
resharper_int_align_fields=true
resharper_int_align_invocations=false
resharper_int_align_nested_ternary=true
resharper_int_align_properties=false
resharper_int_align_switch_expressions=true
resharper_int_align_switch_sections=true
resharper_int_align_variables=true
resharper_local_function_body=expression_body
resharper_method_or_operator_body=expression_body
resharper_place_attribute_on_same_line=false
resharper_space_after_cast=false
resharper_space_within_checked_parentheses=true
resharper_space_within_default_parentheses=true
resharper_space_within_nameof_parentheses=true
resharper_space_within_single_line_array_initializer_braces=true
resharper_space_within_sizeof_parentheses=true
resharper_space_within_typeof_parentheses=true
resharper_space_within_type_argument_angles=true
resharper_space_within_type_parameter_angles=true
resharper_use_indent_from_vs=false
resharper_wrap_lines=true
# ReSharper inspection severities
resharper_arrange_redundant_parentheses_highlighting=hint
resharper_arrange_this_qualifier_highlighting=hint
resharper_arrange_type_member_modifiers_highlighting=hint
resharper_arrange_type_modifiers_highlighting=hint
resharper_built_in_type_reference_style_for_member_access_highlighting=hint
resharper_built_in_type_reference_style_highlighting=hint
resharper_redundant_base_qualifier_highlighting=warning
resharper_suggest_var_or_type_built_in_types_highlighting=hint
resharper_suggest_var_or_type_elsewhere_highlighting=hint
resharper_suggest_var_or_type_simple_types_highlighting=hint
resharper_web_config_module_not_resolved_highlighting=warning
resharper_web_config_type_not_resolved_highlighting=warning
resharper_web_config_wrong_module_highlighting=warning
[*.{appxmanifest,asax,ascx,aspx,build,cg,cginc,compute,cs,cshtml,dtd,hlsl,hlsli,hlslinc,master,nuspec,razor,resw,resx,shader,skin,usf,ush,vb,xaml,xamlx,xoml,xsd}]
indent_style=space
indent_size=4
tab_width=4

3
tmp/.gitignore vendored
View file

@ -1,3 +0,0 @@
bin/
obj/
.vs/

View file

@ -1,16 +0,0 @@
using System;
using Penumbra.Api.Enums;
namespace Penumbra.Api;
// Delegates used by different events.
public delegate void ChangedItemHover( object? item );
public delegate void ChangedItemClick( MouseButton button, object? item );
public delegate void GameObjectRedrawn( IntPtr objectPtr, int objectTableIndex );
public delegate void ModSettingChanged( ModSettingChange type, string collectionName, string modDirectory, bool inherited );
public delegate void CreatingCharacterBaseDelegate( IntPtr gameObject, string collectionName, IntPtr modelId, IntPtr customize,
IntPtr equipData );
public delegate void CreatedCharacterBaseDelegate( IntPtr gameObject, string collectionName, IntPtr drawObject );
public delegate void GameObjectResourceResolvedDelegate( IntPtr gameObject, string gamePath, string localPath );

View file

@ -1,9 +0,0 @@
namespace Penumbra.Api.Enums;
public enum ChangedItemType
{
None,
Item,
Action,
Customization,
}

View file

@ -1,7 +0,0 @@
namespace Penumbra.Api.Enums;
public enum GroupType
{
Single,
Multi,
}

View file

@ -1,12 +0,0 @@
namespace Penumbra.Api.Enums;
// Different types a mod setting can change:
public enum ModSettingChange
{
Inheritance, // it was set to inherit from other collections or not inherit anymore
EnableState, // it was enabled or disabled
Priority, // its priority was changed
Setting, // a specific setting was changed
MultiInheritance, // multiple mods were set to inherit from other collections or not inherit anymore.
MultiEnableState, // multiple mods were enabled or disabled at once.
}

View file

@ -1,9 +0,0 @@
namespace Penumbra.Api.Enums;
public enum MouseButton
{
None,
Left,
Right,
Middle,
}

View file

@ -1,20 +0,0 @@
namespace Penumbra.Api.Enums;
public enum PenumbraApiEc
{
Success = 0,
NothingChanged = 1,
CollectionMissing = 2,
ModMissing = 3,
OptionGroupMissing = 4,
OptionMissing = 5,
CharacterCollectionExists = 6,
LowerPriority = 7,
InvalidGamePath = 8,
FileMissing = 9,
InvalidManipulation = 10,
InvalidArgument = 11,
PathRenameFailed = 12,
UnknownError = 255,
}

View file

@ -1,7 +0,0 @@
namespace Penumbra.Api.Enums;
public enum RedrawType
{
Redraw,
AfterGPose,
}

View file

@ -1,66 +0,0 @@
using System;
using Dalamud.Logging;
using Dalamud.Plugin;
using Dalamud.Plugin.Ipc;
namespace Penumbra.Api.Helpers;
public sealed class ActionProvider<T1> : IDisposable
{
private ICallGateProvider<T1, object?>? _provider;
public ActionProvider( DalamudPluginInterface pi, string label, Action<T1> action )
{
try
{
_provider = pi.GetIpcProvider<T1, object?>( label );
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
_provider = null;
}
_provider?.RegisterAction( action );
}
public void Dispose()
{
_provider?.UnregisterAction();
_provider = null;
GC.SuppressFinalize( this );
}
~ActionProvider()
=> Dispose();
}
public sealed class ActionProvider< T1, T2 > : IDisposable
{
private ICallGateProvider< T1, T2, object? >? _provider;
public ActionProvider( DalamudPluginInterface pi, string label, Action< T1, T2 > action )
{
try
{
_provider = pi.GetIpcProvider< T1, T2, object? >( label );
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
_provider = null;
}
_provider?.RegisterAction( action );
}
public void Dispose()
{
_provider?.UnregisterAction();
_provider = null;
GC.SuppressFinalize( this );
}
~ActionProvider()
=> Dispose();
}

View file

@ -1,54 +0,0 @@
using System;
using Dalamud.Logging;
using Dalamud.Plugin;
using Dalamud.Plugin.Ipc;
namespace Penumbra.Api.Helpers;
public readonly struct ActionSubscriber< T1 >
{
private readonly ICallGateSubscriber< T1, object? >? _subscriber;
public bool Valid
=> _subscriber != null;
public ActionSubscriber( DalamudPluginInterface pi, string label )
{
try
{
_subscriber = pi.GetIpcSubscriber< T1, object? >( label );
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
_subscriber = null;
}
}
public void Invoke( T1 a )
=> _subscriber?.InvokeAction( a );
}
public readonly struct ActionSubscriber< T1, T2 >
{
private readonly ICallGateSubscriber< T1, T2, object? >? _subscriber;
public bool Valid
=> _subscriber != null;
public ActionSubscriber( DalamudPluginInterface pi, string label )
{
try
{
_subscriber = pi.GetIpcSubscriber< T1, T2, object? >( label );
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
_subscriber = null;
}
}
public void Invoke( T1 a, T2 b )
=> _subscriber?.InvokeAction( a, b );
}

View file

@ -1,376 +0,0 @@
using System;
using Dalamud.Logging;
using Dalamud.Plugin;
using Dalamud.Plugin.Ipc;
namespace Penumbra.Api.Helpers;
public sealed class EventProvider : IDisposable
{
private ICallGateProvider< object? >? _provider;
private Delegate? _unsubscriber;
public EventProvider( DalamudPluginInterface pi, string label, (Action< Action > Add, Action< Action > Del)? subscribe = null )
{
_unsubscriber = null;
try
{
_provider = pi.GetIpcProvider< object? >( label );
subscribe?.Add( Invoke );
_unsubscriber = subscribe?.Del;
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
_provider = null;
}
}
public EventProvider( DalamudPluginInterface pi, string label, Action add, Action del )
{
_unsubscriber = null;
try
{
_provider = pi.GetIpcProvider< object? >( label );
add();
_unsubscriber = del;
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
_provider = null;
}
}
public void Invoke()
=> _provider?.SendMessage();
public void Dispose()
{
switch( _unsubscriber )
{
case Action< Action > a:
a( Invoke );
break;
case Action b:
b();
break;
}
_unsubscriber = null;
_provider = null;
GC.SuppressFinalize( this );
}
~EventProvider()
=> Dispose();
}
public sealed class EventProvider< T1 > : IDisposable
{
private ICallGateProvider< T1, object? >? _provider;
private Delegate? _unsubscriber;
public EventProvider( DalamudPluginInterface pi, string label, (Action< Action< T1 > > Add, Action< Action< T1 > > Del)? subscribe = null )
{
_unsubscriber = null;
try
{
_provider = pi.GetIpcProvider< T1, object? >( label );
subscribe?.Add( Invoke );
_unsubscriber = subscribe?.Del;
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
_provider = null;
}
}
public EventProvider( DalamudPluginInterface pi, string label, Action add, Action del )
{
_unsubscriber = null;
try
{
_provider = pi.GetIpcProvider< T1, object? >( label );
add();
_unsubscriber = del;
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
_provider = null;
}
}
public void Invoke( T1 a )
=> _provider?.SendMessage( a );
public void Dispose()
{
switch( _unsubscriber )
{
case Action< Action< T1 > > a:
a( Invoke );
break;
case Action b:
b();
break;
}
_unsubscriber = null;
_provider = null;
GC.SuppressFinalize( this );
}
~EventProvider()
=> Dispose();
}
public sealed class EventProvider< T1, T2 > : IDisposable
{
private ICallGateProvider< T1, T2, object? >? _provider;
private Delegate? _unsubscriber;
public EventProvider( DalamudPluginInterface pi, string label,
(Action< Action< T1, T2 > > Add, Action< Action< T1, T2 > > Del)? subscribe = null )
{
_unsubscriber = null;
try
{
_provider = pi.GetIpcProvider< T1, T2, object? >( label );
subscribe?.Add( Invoke );
_unsubscriber = subscribe?.Del;
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
_provider = null;
}
}
public EventProvider( DalamudPluginInterface pi, string label, Action add, Action del )
{
_unsubscriber = null;
try
{
_provider = pi.GetIpcProvider< T1, T2, object? >( label );
add();
_unsubscriber = del;
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
_provider = null;
}
}
public void Invoke( T1 a, T2 b )
=> _provider?.SendMessage( a, b );
public void Dispose()
{
switch( _unsubscriber )
{
case Action< Action< T1, T2 > > a:
a( Invoke );
break;
case Action b:
b();
break;
}
_unsubscriber = null;
_provider = null;
GC.SuppressFinalize( this );
}
~EventProvider()
=> Dispose();
}
public sealed class EventProvider< T1, T2, T3 > : IDisposable
{
private ICallGateProvider< T1, T2, T3, object? >? _provider;
private Delegate? _unsubscriber;
public EventProvider( DalamudPluginInterface pi, string label,
(Action< Action< T1, T2, T3 > > Add, Action< Action< T1, T2, T3 > > Del)? subscribe = null )
{
_unsubscriber = null;
try
{
_provider = pi.GetIpcProvider< T1, T2, T3, object? >( label );
subscribe?.Add( Invoke );
_unsubscriber = subscribe?.Del;
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
_provider = null;
}
}
public EventProvider( DalamudPluginInterface pi, string label, Action add, Action del )
{
_unsubscriber = null;
try
{
_provider = pi.GetIpcProvider< T1, T2, T3, object? >( label );
add();
_unsubscriber = del;
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
_provider = null;
}
}
public void Invoke( T1 a, T2 b, T3 c )
=> _provider?.SendMessage( a, b, c );
public void Dispose()
{
switch( _unsubscriber )
{
case Action< Action< T1, T2, T3 > > a:
a( Invoke );
break;
case Action b:
b();
break;
}
_unsubscriber = null;
_provider = null;
GC.SuppressFinalize( this );
}
~EventProvider()
=> Dispose();
}
public sealed class EventProvider< T1, T2, T3, T4 > : IDisposable
{
private ICallGateProvider< T1, T2, T3, T4, object? >? _provider;
private Delegate? _unsubscriber;
public EventProvider( DalamudPluginInterface pi, string label,
(Action< Action< T1, T2, T3, T4 > > Add, Action< Action< T1, T2, T3, T4 > > Del)? subscribe = null )
{
_unsubscriber = null;
try
{
_provider = pi.GetIpcProvider< T1, T2, T3, T4, object? >( label );
subscribe?.Add( Invoke );
_unsubscriber = subscribe?.Del;
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
_provider = null;
}
}
public EventProvider( DalamudPluginInterface pi, string label, Action add, Action del )
{
_unsubscriber = null;
try
{
_provider = pi.GetIpcProvider< T1, T2, T3, T4, object? >( label );
add();
_unsubscriber = del;
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
_provider = null;
}
}
public void Invoke( T1 a, T2 b, T3 c, T4 d )
=> _provider?.SendMessage( a, b, c, d );
public void Dispose()
{
switch( _unsubscriber )
{
case Action< Action< T1, T2, T3, T4 > > a:
a( Invoke );
break;
case Action b:
b();
break;
}
_unsubscriber = null;
_provider = null;
GC.SuppressFinalize( this );
}
~EventProvider()
=> Dispose();
}
public sealed class EventProvider< T1, T2, T3, T4, T5 > : IDisposable
{
private ICallGateProvider< T1, T2, T3, T4, T5, object? >? _provider;
private Delegate? _unsubscriber;
public EventProvider( DalamudPluginInterface pi, string label,
(Action< Action< T1, T2, T3, T4, T5 > > Add, Action< Action< T1, T2, T3, T4, T5 > > Del)? subscribe = null )
{
_unsubscriber = null;
try
{
_provider = pi.GetIpcProvider< T1, T2, T3, T4, T5, object? >( label );
subscribe?.Add( Invoke );
_unsubscriber = subscribe?.Del;
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
_provider = null;
}
}
public EventProvider( DalamudPluginInterface pi, string label, Action add, Action del )
{
_unsubscriber = null;
try
{
_provider = pi.GetIpcProvider< T1, T2, T3, T4, T5, object? >( label );
add();
_unsubscriber = del;
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
_provider = null;
}
}
public void Invoke( T1 a, T2 b, T3 c, T4 d, T5 e )
=> _provider?.SendMessage( a, b, c, d, e );
public void Dispose()
{
switch( _unsubscriber )
{
case Action< Action< T1, T2, T3, T4, T5 > > a:
a( Invoke );
break;
case Action b:
b();
break;
}
_unsubscriber = null;
_provider = null;
GC.SuppressFinalize( this );
}
~EventProvider()
=> Dispose();
}

View file

@ -1,607 +0,0 @@
using System;
using System.Collections.Generic;
using Dalamud.Logging;
using Dalamud.Plugin;
using Dalamud.Plugin.Ipc;
namespace Penumbra.Api.Helpers;
public sealed class EventSubscriber : IDisposable
{
private readonly string _label;
private readonly Dictionary< Action, Action > _delegates = new();
private ICallGateSubscriber< object? >? _subscriber;
private bool _disabled;
public EventSubscriber( DalamudPluginInterface pi, string label, params Action[] actions )
{
_label = label;
try
{
_subscriber = pi.GetIpcSubscriber< object? >( label );
foreach( var action in actions )
{
Event += action;
}
_disabled = false;
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
_subscriber = null;
}
}
public void Enable()
{
if( _disabled && _subscriber != null )
{
foreach( var action in _delegates.Keys )
{
_subscriber.Subscribe( action );
}
_disabled = false;
}
}
public void Disable()
{
if( !_disabled )
{
if( _subscriber != null )
{
foreach( var action in _delegates.Keys )
{
_subscriber.Unsubscribe( action );
}
}
_disabled = true;
}
}
public event Action Event
{
add
{
if( _subscriber != null && !_delegates.ContainsKey( value ) )
{
void Action()
{
try
{
value();
}
catch( Exception e )
{
PluginLog.Error( $"Exception invoking IPC event {_label}:\n{e}" );
}
}
if( _delegates.TryAdd( value, Action ) && !_disabled )
{
_subscriber.Subscribe( Action );
}
}
}
remove
{
if( _subscriber != null && _delegates.Remove( value, out var action ) )
{
_subscriber.Unsubscribe( action );
}
}
}
public void Dispose()
{
Disable();
_subscriber = null;
_delegates.Clear();
}
~EventSubscriber()
=> Dispose();
}
public sealed class EventSubscriber< T1 > : IDisposable
{
private readonly string _label;
private readonly Dictionary< Action< T1 >, Action< T1 > > _delegates = new();
private ICallGateSubscriber< T1, object? >? _subscriber;
private bool _disabled;
public EventSubscriber( DalamudPluginInterface pi, string label, params Action< T1 >[] actions )
{
_label = label;
try
{
_subscriber = pi.GetIpcSubscriber< T1, object? >( label );
foreach( var action in actions )
{
Event += action;
}
_disabled = false;
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
_subscriber = null;
}
}
public void Enable()
{
if( _disabled && _subscriber != null )
{
foreach( var action in _delegates.Keys )
{
_subscriber.Subscribe( action );
}
_disabled = false;
}
}
public void Disable()
{
if( !_disabled )
{
if( _subscriber != null )
{
foreach( var action in _delegates.Keys )
{
_subscriber.Unsubscribe( action );
}
}
_disabled = true;
}
}
public event Action< T1 > Event
{
add
{
if( _subscriber != null && !_delegates.ContainsKey( value ) )
{
void Action( T1 a )
{
try
{
value( a );
}
catch( Exception e )
{
PluginLog.Error( $"Exception invoking IPC event {_label}:\n{e}" );
}
}
if( _delegates.TryAdd( value, Action ) && !_disabled )
{
_subscriber.Subscribe( Action );
}
}
}
remove
{
if( _subscriber != null && _delegates.Remove( value, out var action ) )
{
_subscriber.Unsubscribe( action );
}
}
}
public void Dispose()
{
Disable();
_subscriber = null;
_delegates.Clear();
}
~EventSubscriber()
=> Dispose();
}
public sealed class EventSubscriber< T1, T2 > : IDisposable
{
private readonly string _label;
private readonly Dictionary< Action< T1, T2 >, Action< T1, T2 > > _delegates = new();
private ICallGateSubscriber< T1, T2, object? >? _subscriber;
private bool _disabled;
public EventSubscriber( DalamudPluginInterface pi, string label, params Action< T1, T2 >[] actions )
{
_label = label;
try
{
_subscriber = pi.GetIpcSubscriber< T1, T2, object? >( label );
foreach( var action in actions )
{
Event += action;
}
_disabled = false;
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
_subscriber = null;
}
}
public void Enable()
{
if( _disabled && _subscriber != null )
{
foreach( var action in _delegates.Keys )
{
_subscriber.Subscribe( action );
}
_disabled = false;
}
}
public void Disable()
{
if( !_disabled )
{
if( _subscriber != null )
{
foreach( var action in _delegates.Keys )
{
_subscriber.Unsubscribe( action );
}
}
_disabled = true;
}
}
public event Action< T1, T2 > Event
{
add
{
if( _subscriber != null && !_delegates.ContainsKey( value ) )
{
void Action( T1 a, T2 b )
{
try
{
value( a, b );
}
catch( Exception e )
{
PluginLog.Error( $"Exception invoking IPC event {_label}:\n{e}" );
}
}
if( _delegates.TryAdd( value, Action ) && !_disabled )
{
_subscriber.Subscribe( Action );
}
}
}
remove
{
if( _subscriber != null && _delegates.Remove( value, out var action ) )
{
_subscriber.Unsubscribe( action );
}
}
}
public void Dispose()
{
Disable();
_subscriber = null;
_delegates.Clear();
}
~EventSubscriber()
=> Dispose();
}
public sealed class EventSubscriber< T1, T2, T3 > : IDisposable
{
private readonly string _label;
private readonly Dictionary< Action< T1, T2, T3 >, Action< T1, T2, T3 > > _delegates = new();
private ICallGateSubscriber< T1, T2, T3, object? >? _subscriber;
private bool _disabled;
public EventSubscriber( DalamudPluginInterface pi, string label, params Action< T1, T2, T3 >[] actions )
{
_label = label;
try
{
_subscriber = pi.GetIpcSubscriber< T1, T2, T3, object? >( label );
foreach( var action in actions )
{
Event += action;
}
_disabled = false;
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
_subscriber = null;
}
}
public void Enable()
{
if( _disabled && _subscriber != null )
{
foreach( var action in _delegates.Keys )
{
_subscriber.Subscribe( action );
}
_disabled = false;
}
}
public void Disable()
{
if( !_disabled )
{
if( _subscriber != null )
{
foreach( var action in _delegates.Keys )
{
_subscriber.Unsubscribe( action );
}
}
_disabled = true;
}
}
public event Action< T1, T2, T3 > Event
{
add
{
if( _subscriber != null && !_delegates.ContainsKey( value ) )
{
void Action( T1 a, T2 b, T3 c )
{
try
{
value( a, b, c );
}
catch( Exception e )
{
PluginLog.Error( $"Exception invoking IPC event {_label}:\n{e}" );
}
}
if( _delegates.TryAdd( value, Action ) && !_disabled )
{
_subscriber.Subscribe( Action );
}
}
}
remove
{
if( _subscriber != null && _delegates.Remove( value, out var action ) )
{
_subscriber.Unsubscribe( action );
}
}
}
public void Dispose()
{
Disable();
_subscriber = null;
_delegates.Clear();
}
~EventSubscriber()
=> Dispose();
}
public sealed class EventSubscriber< T1, T2, T3, T4 > : IDisposable
{
private readonly string _label;
private readonly Dictionary< Action< T1, T2, T3, T4 >, Action< T1, T2, T3, T4 > > _delegates = new();
private ICallGateSubscriber< T1, T2, T3, T4, object? >? _subscriber;
private bool _disabled;
public EventSubscriber( DalamudPluginInterface pi, string label, params Action< T1, T2, T3, T4 >[] actions )
{
_label = label;
try
{
_subscriber = pi.GetIpcSubscriber< T1, T2, T3, T4, object? >( label );
foreach( var action in actions )
{
Event += action;
}
_disabled = false;
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
_subscriber = null;
}
}
public void Enable()
{
if( _disabled && _subscriber != null )
{
foreach( var action in _delegates.Keys )
{
_subscriber.Subscribe( action );
}
_disabled = false;
}
}
public void Disable()
{
if( !_disabled )
{
if( _subscriber != null )
{
foreach( var action in _delegates.Keys )
{
_subscriber.Unsubscribe( action );
}
}
_disabled = true;
}
}
public event Action< T1, T2, T3, T4 > Event
{
add
{
if( _subscriber != null && !_delegates.ContainsKey( value ) )
{
void Action( T1 a, T2 b, T3 c, T4 d )
{
try
{
value( a, b, c, d );
}
catch( Exception e )
{
PluginLog.Error( $"Exception invoking IPC event {_label}:\n{e}" );
}
}
if( _delegates.TryAdd( value, Action ) && !_disabled )
{
_subscriber.Subscribe( Action );
}
}
}
remove
{
if( _subscriber != null && _delegates.Remove( value, out var action ) )
{
_subscriber.Unsubscribe( action );
}
}
}
public void Dispose()
{
Disable();
_subscriber = null;
_delegates.Clear();
}
~EventSubscriber()
=> Dispose();
}
public sealed class EventSubscriber< T1, T2, T3, T4, T5 > : IDisposable
{
private readonly string _label;
private readonly Dictionary< Action< T1, T2, T3, T4, T5 >, Action< T1, T2, T3, T4, T5 > > _delegates = new();
private ICallGateSubscriber< T1, T2, T3, T4, T5, object? >? _subscriber;
private bool _disabled;
public EventSubscriber( DalamudPluginInterface pi, string label, params Action< T1, T2, T3, T4, T5 >[] actions )
{
_label = label;
try
{
_subscriber = pi.GetIpcSubscriber< T1, T2, T3, T4, T5, object? >( label );
foreach( var action in actions )
{
Event += action;
}
_disabled = false;
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
_subscriber = null;
}
}
public void Enable()
{
if( _disabled && _subscriber != null )
{
foreach( var action in _delegates.Keys )
{
_subscriber.Subscribe( action );
}
_disabled = false;
}
}
public void Disable()
{
if( !_disabled )
{
if( _subscriber != null )
{
foreach( var action in _delegates.Keys )
{
_subscriber.Unsubscribe( action );
}
}
_disabled = true;
}
}
public event Action< T1, T2, T3, T4, T5 > Event
{
add
{
if( _subscriber != null && !_delegates.ContainsKey( value ) )
{
void Action( T1 a, T2 b, T3 c, T4 d, T5 e )
{
try
{
value( a, b, c, d, e );
}
catch( Exception ex )
{
PluginLog.Error( $"Exception invoking IPC event {_label}:\n{ex}" );
}
}
if( _delegates.TryAdd( value, Action ) && !_disabled )
{
_subscriber.Subscribe( Action );
}
}
}
remove
{
if( _subscriber != null && _delegates.Remove( value, out var action ) )
{
_subscriber.Unsubscribe( action );
}
}
}
public void Dispose()
{
Disable();
_subscriber = null;
_delegates.Clear();
}
~EventSubscriber()
=> Dispose();
}

View file

@ -1,186 +0,0 @@
using System;
using Dalamud.Logging;
using Dalamud.Plugin;
using Dalamud.Plugin.Ipc;
namespace Penumbra.Api.Helpers;
public sealed class FuncProvider< TRet > : IDisposable
{
private ICallGateProvider< TRet >? _provider;
public FuncProvider( DalamudPluginInterface pi, string label, Func< TRet > func )
{
try
{
_provider = pi.GetIpcProvider< TRet >( label );
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
_provider = null;
}
_provider?.RegisterFunc( func );
}
public void Dispose()
{
_provider?.UnregisterFunc();
_provider = null;
GC.SuppressFinalize( this );
}
~FuncProvider()
=> Dispose();
}
public sealed class FuncProvider< T1, TRet > : IDisposable
{
private ICallGateProvider< T1, TRet >? _provider;
public FuncProvider( DalamudPluginInterface pi, string label, Func< T1, TRet > func )
{
try
{
_provider = pi.GetIpcProvider< T1, TRet >( label );
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
_provider = null;
}
_provider?.RegisterFunc( func );
}
public void Dispose()
{
_provider?.UnregisterFunc();
_provider = null;
GC.SuppressFinalize( this );
}
~FuncProvider()
=> Dispose();
}
public sealed class FuncProvider< T1, T2, TRet > : IDisposable
{
private ICallGateProvider< T1, T2, TRet >? _provider;
public FuncProvider( DalamudPluginInterface pi, string label, Func< T1, T2, TRet > func )
{
try
{
_provider = pi.GetIpcProvider< T1, T2, TRet >( label );
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
_provider = null;
}
_provider?.RegisterFunc( func );
}
public void Dispose()
{
_provider?.UnregisterFunc();
_provider = null;
GC.SuppressFinalize( this );
}
~FuncProvider()
=> Dispose();
}
public sealed class FuncProvider< T1, T2, T3, TRet > : IDisposable
{
private ICallGateProvider< T1, T2, T3, TRet >? _provider;
public FuncProvider( DalamudPluginInterface pi, string label, Func< T1, T2, T3, TRet > func )
{
try
{
_provider = pi.GetIpcProvider< T1, T2, T3, TRet >( label );
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
_provider = null;
}
_provider?.RegisterFunc( func );
}
public void Dispose()
{
_provider?.UnregisterFunc();
_provider = null;
GC.SuppressFinalize( this );
}
~FuncProvider()
=> Dispose();
}
public sealed class FuncProvider< T1, T2, T3, T4, TRet > : IDisposable
{
private ICallGateProvider< T1, T2, T3, T4, TRet >? _provider;
public FuncProvider( DalamudPluginInterface pi, string label, Func< T1, T2, T3, T4, TRet > func )
{
try
{
_provider = pi.GetIpcProvider< T1, T2, T3, T4, TRet >( label );
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
_provider = null;
}
_provider?.RegisterFunc( func );
}
public void Dispose()
{
_provider?.UnregisterFunc();
_provider = null;
GC.SuppressFinalize( this );
}
~FuncProvider()
=> Dispose();
}
public sealed class FuncProvider< T1, T2, T3, T4, T5, TRet > : IDisposable
{
private ICallGateProvider< T1, T2, T3, T4, T5, TRet >? _provider;
public FuncProvider( DalamudPluginInterface pi, string label, Func< T1, T2, T3, T4, T5, TRet > func )
{
try
{
_provider = pi.GetIpcProvider< T1, T2, T3, T4, T5, TRet >( label );
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
_provider = null;
}
_provider?.RegisterFunc( func );
}
public void Dispose()
{
_provider?.UnregisterFunc();
_provider = null;
GC.SuppressFinalize( this );
}
~FuncProvider()
=> Dispose();
}

View file

@ -1,163 +0,0 @@
using System;
using Dalamud.Logging;
using Dalamud.Plugin;
using Dalamud.Plugin.Ipc;
using Dalamud.Plugin.Ipc.Exceptions;
namespace Penumbra.Api.Helpers;
public readonly struct FuncSubscriber< TRet >
{
private readonly string _label;
private readonly ICallGateSubscriber< TRet >? _subscriber;
public bool Valid
=> _subscriber != null;
public FuncSubscriber( DalamudPluginInterface pi, string label )
{
_label = label;
try
{
_subscriber = pi.GetIpcSubscriber< TRet >( label );
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
_subscriber = null;
}
}
public TRet Invoke()
=> _subscriber != null ? _subscriber.InvokeFunc() : throw new IpcNotReadyError( _label );
}
public readonly struct FuncSubscriber< T1, TRet >
{
private readonly string _label;
private readonly ICallGateSubscriber< T1, TRet >? _subscriber;
public bool Valid
=> _subscriber != null;
public FuncSubscriber( DalamudPluginInterface pi, string label )
{
_label = label;
try
{
_subscriber = pi.GetIpcSubscriber< T1, TRet >( label );
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
_subscriber = null;
}
}
public TRet Invoke( T1 a )
=> _subscriber != null ? _subscriber.InvokeFunc( a ) : throw new IpcNotReadyError( _label );
}
public readonly struct FuncSubscriber< T1, T2, TRet >
{
private readonly string _label;
private readonly ICallGateSubscriber< T1, T2, TRet >? _subscriber;
public bool Valid
=> _subscriber != null;
public FuncSubscriber( DalamudPluginInterface pi, string label )
{
_label = label;
try
{
_subscriber = pi.GetIpcSubscriber< T1, T2, TRet >( label );
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
_subscriber = null;
}
}
public TRet Invoke( T1 a, T2 b )
=> _subscriber != null ? _subscriber.InvokeFunc( a, b ) : throw new IpcNotReadyError( _label );
}
public readonly struct FuncSubscriber< T1, T2, T3, TRet >
{
private readonly string _label;
private readonly ICallGateSubscriber< T1, T2, T3, TRet >? _subscriber;
public bool Valid
=> _subscriber != null;
public FuncSubscriber( DalamudPluginInterface pi, string label )
{
_label = label;
try
{
_subscriber = pi.GetIpcSubscriber< T1, T2, T3, TRet >( label );
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
_subscriber = null;
}
}
public TRet Invoke( T1 a, T2 b, T3 c )
=> _subscriber != null ? _subscriber.InvokeFunc( a, b, c ) : throw new IpcNotReadyError( _label );
}
public readonly struct FuncSubscriber< T1, T2, T3, T4, TRet >
{
private readonly string _label;
private readonly ICallGateSubscriber< T1, T2, T3, T4, TRet >? _subscriber;
public bool Valid
=> _subscriber != null;
public FuncSubscriber( DalamudPluginInterface pi, string label )
{
_label = label;
try
{
_subscriber = pi.GetIpcSubscriber< T1, T2, T3, T4, TRet >( label );
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
_subscriber = null;
}
}
public TRet Invoke( T1 a, T2 b, T3 c, T4 d )
=> _subscriber != null ? _subscriber.InvokeFunc( a, b, c, d ) : throw new IpcNotReadyError( _label );
}
public readonly struct FuncSubscriber< T1, T2, T3, T4, T5, TRet >
{
private readonly string _label;
private readonly ICallGateSubscriber< T1, T2, T3, T4, T5, TRet >? _subscriber;
public bool Valid
=> _subscriber != null;
public FuncSubscriber( DalamudPluginInterface pi, string label )
{
_label = label;
try
{
_subscriber = pi.GetIpcSubscriber< T1, T2, T3, T4, T5, TRet >( label );
}
catch( Exception e )
{
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
_subscriber = null;
}
}
public TRet Invoke( T1 a, T2 b, T3 c, T4 d, T5 e )
=> _subscriber != null ? _subscriber.InvokeFunc( a, b, c, d, e ) : throw new IpcNotReadyError( _label );
}

View file

@ -1,250 +0,0 @@
using Dalamud.Game.ClientState.Objects.Types;
using Lumina.Data;
using System;
using System.Collections.Generic;
using Penumbra.Api.Enums;
namespace Penumbra.Api;
public interface IPenumbraApi : IPenumbraApiBase
{
#region Game State
// Obtain the currently set mod directory from the configuration.
public string GetModDirectory();
// Obtain the entire current penumbra configuration as a json encoded string.
public string GetConfiguration();
// Fired whenever a mod directory change is finished.
// Gives the full path of the mod directory and whether Penumbra treats it as valid.
public event Action< string, bool >? ModDirectoryChanged;
#endregion
#region UI
// Triggered when the user hovers over a listed changed object in a mod tab.
// Can be used to append tooltips.
public event ChangedItemHover? ChangedItemTooltip;
// Events that are fired before and after the content of a mod settings panel are drawn.
// Both are fired inside the child window of the settings panel itself.
public event Action< string >? PreSettingsPanelDraw;
public event Action< string >? PostSettingsPanelDraw;
// Triggered when the user clicks a listed changed object in a mod tab.
public event ChangedItemClick? ChangedItemClicked;
#endregion
#region Redrawing
// Queue redrawing of all actors of the given name with the given RedrawType.
public void RedrawObject( string name, RedrawType setting );
// Queue redrawing of the specific actor with the given RedrawType. Should only be used when the actor is sure to be valid.
public void RedrawObject( GameObject gameObject, RedrawType setting );
// Queue redrawing of the actor with the given object table index, if it exists, with the given RedrawType.
public void RedrawObject( int tableIndex, RedrawType setting );
// Queue redrawing of all currently available actors with the given RedrawType.
public void RedrawAll( RedrawType setting );
// Triggered whenever a game object is redrawn via Penumbra.
public event GameObjectRedrawn? GameObjectRedrawn;
#endregion
#region Game State
// Obtain the game object associated with a given draw object and the name of the collection associated with this game object.
public (IntPtr, string) GetDrawObjectInfo( IntPtr drawObject );
// Obtain the parent game object index for an unnamed cutscene actor by its index.
public int GetCutsceneParentIndex( int actor );
// Triggered when a character base is created and a corresponding gameObject could be found,
// before the Draw Object is actually created, so customize and equipdata can be manipulated beforehand.
public event CreatingCharacterBaseDelegate? CreatingCharacterBase;
// Triggered after a character base was created if a corresponding gameObject could be found,
// so you can apply flag changes after finishing.
public event CreatedCharacterBaseDelegate? CreatedCharacterBase;
// Triggered whenever a resource is redirected by Penumbra for a specific, identified game object.
// Does not trigger if the resource is not requested for a known game object.
public event GameObjectResourceResolvedDelegate? GameObjectResourceResolved;
#endregion
#region Resolving
// Resolve a given gamePath via Penumbra using the Default collection.
// Returns the given gamePath if penumbra would not manipulate it.
public string ResolveDefaultPath( string gamePath );
// Resolve a given gamePath via Penumbra using the Interface collection.
// Returns the given gamePath if penumbra would not manipulate it.
public string ResolveInterfacePath( string gamePath );
// Resolve a given gamePath via Penumbra using the character collection for the given name (if it exists) and the Forced collections.
// Returns the given gamePath if penumbra would not manipulate it.
public string ResolvePath( string gamePath, string characterName );
// Resolve a given gamePath via Penumbra using any applicable character collections for the current character.
// Returns the given gamePath if penumbra would not manipulate it.
public string ResolvePlayerPath( string gamePath );
// Reverse resolves a given modded local path into its replacement in form of all applicable game paths for given character collection.
public string[] ReverseResolvePath( string moddedPath, string characterName );
// Reverse resolves a given modded local path into its replacement in form of all applicable game paths
// using the collection applying to the player character.
public string[] ReverseResolvePlayerPath( string moddedPath );
// Try to load a given gamePath with the resolved path from Penumbra.
public T? GetFile< T >( string gamePath ) where T : FileResource;
// Try to load a given gamePath with the resolved path from Penumbra.
public T? GetFile< T >( string gamePath, string characterName ) where T : FileResource;
#endregion
#region Collections
// Obtain a list of the names of all currently installed collections.
public IList< string > GetCollections();
// Obtain the name of the currently selected collection.
public string GetCurrentCollection();
// Obtain the name of the default collection.
public string GetDefaultCollection();
// Obtain the name of the interface collection.
public string GetInterfaceCollection();
// Obtain the name of the collection associated with characterName and whether it is configured or inferred from default.
public (string, bool) GetCharacterCollection( string characterName );
// Gets a dictionary of effected items from a collection
public IReadOnlyDictionary< string, object? > GetChangedItemsForCollection( string collectionName );
#endregion
#region Meta
// Obtain a base64 encoded, zipped json-string with a prepended version-byte of the current manipulations
// for the collection currently associated with the player.
public string GetPlayerMetaManipulations();
// Obtain a base64 encoded, zipped json-string with a prepended version-byte of the current manipulations
// for the given collection associated with the character name, or the default collection.
public string GetMetaManipulations( string characterName );
#endregion
#region Mods
// Obtain a list of all installed mods. The first string is their directory name, the second string is their mod name.
public IList< (string, string) > GetModList();
// Try to reload an existing mod by its directory name or mod name.
// Can return ModMissing or success.
// Reload is the same as if triggered by button press and might delete the mod if it is not valid anymore.
public PenumbraApiEc ReloadMod( string modDirectory, string modName );
// Try to add a new mod inside the mod root directory (modDirectory should only be the name, not the full name).
// Returns FileMissing if the directory does not exist or success otherwise.
// Note that success does only imply a successful call, not a successful mod load.
public PenumbraApiEc AddMod( string modDirectory );
// Try to delete a mod given by its modDirectory or its name.
// Returns NothingDone if the mod can not be found or success otherwise.
// Note that success does only imply a successful call, not successful deletion.
public PenumbraApiEc DeleteMod( string modDirectory, string modName );
// Get the internal full filesystem path including search order for the specified mod.
// If success is returned, the second return value contains the full path
// and a bool indicating whether this is the default path (false) or a manually set one (true).
// Can return ModMissing or Success.
public (PenumbraApiEc, string, bool) GetModPath( string modDirectory, string modName );
// Set the internal search order and filesystem path of the specified mod to the given path.
// Returns InvalidArgument if newPath is empty, ModMissing if the mod can not be found,
// PathRenameFailed if newPath could not be set and Success otherwise.
public PenumbraApiEc SetModPath( string modDirectory, string modName, string newPath );
#endregion
#region Mod Settings
// Obtain the potential settings of a mod specified by its directory name first or mod name second.
// Returns null if the mod could not be found.
public IDictionary< string, (IList< string >, GroupType) >? GetAvailableModSettings( string modDirectory, string modName );
// Obtain the enabled state, the priority, the settings of a mod specified by its directory name first or mod name second,
// and whether these settings are inherited, or null if the collection does not set them at all.
// If allowInheritance is false, only the collection itself will be checked.
public (PenumbraApiEc, (bool, int, IDictionary< string, IList< string > >, bool)?) GetCurrentModSettings( string collectionName,
string modDirectory, string modName, bool allowInheritance );
// Try to set the inheritance state in the given collection of a mod specified by its directory name first or mod name second.
// Returns Okay, NothingChanged, CollectionMissing or ModMissing.
public PenumbraApiEc TryInheritMod( string collectionName, string modDirectory, string modName, bool inherit );
// Try to set the enabled state in the given collection of a mod specified by its directory name first or mod name second. Also removes inheritance.
// Returns Okay, NothingChanged, CollectionMissing or ModMissing.
public PenumbraApiEc TrySetMod( string collectionName, string modDirectory, string modName, bool enabled );
// Try to set the priority in the given collection of a mod specified by its directory name first or mod name second. Also removes inheritance.
// Returns Okay, NothingChanged, CollectionMissing or ModMissing.
public PenumbraApiEc TrySetModPriority( string collectionName, string modDirectory, string modName, int priority );
// Try to set a specific option group in the given collection of a mod specified by its directory name first or mod name second. Also removes inheritance.
// If the group is a Single Selection group, options should be a single string, otherwise the array of enabled options.
// Returns Okay, NothingChanged, CollectionMissing or ModMissing, OptionGroupMissing or SettingMissing.
// If any setting can not be found, it will not change anything.
public PenumbraApiEc TrySetModSetting( string collectionName, string modDirectory, string modName, string optionGroupName, string option );
public PenumbraApiEc TrySetModSettings( string collectionName, string modDirectory, string modName, string optionGroupName,
IReadOnlyList< string > options );
// This event gets fired when any setting in any collection changes.
public event ModSettingChanged? ModSettingChanged;
#endregion
#region Temporary
// Create a temporary collection without actual settings but with a cache.
// If no character collection for this character exists or forceOverwriteCharacter is true,
// associate this collection to a specific character.
// Can return Okay, CharacterCollectionExists or NothingChanged, as well as the name of the new temporary collection on success.
public (PenumbraApiEc, string) CreateTemporaryCollection( string tag, string character, bool forceOverwriteCharacter );
// Remove the temporary collection associated with characterName if it exists.
// Can return Okay or NothingChanged.
public PenumbraApiEc RemoveTemporaryCollection( string characterName );
// Set a temporary mod with the given paths, manipulations and priority and the name tag to all collections.
// Can return Okay, InvalidGamePath, or InvalidManipulation.
public PenumbraApiEc AddTemporaryModAll( string tag, Dictionary< string, string > paths, string manipString, int priority );
// Set a temporary mod with the given paths, manipulations and priority and the name tag to the collection with the given name, which can be temporary.
// Can return Okay, MissingCollection InvalidGamePath, or InvalidManipulation.
public PenumbraApiEc AddTemporaryMod( string tag, string collectionName, Dictionary< string, string > paths, string manipString,
int priority );
// Remove the temporary mod with the given tag and priority from the temporary mods applying to all collections, if it exists.
// Can return Okay or NothingDone.
public PenumbraApiEc RemoveTemporaryModAll( string tag, int priority );
// Remove the temporary mod with the given tag and priority from the temporary mods applying to the collection of the given name, which can be temporary.
// Can return Okay or NothingDone.
public PenumbraApiEc RemoveTemporaryMod( string tag, string collectionName, int priority );
#endregion
}

View file

@ -1,11 +0,0 @@
namespace Penumbra.Api;
public interface IPenumbraApiBase
{
// The API version is staggered in two parts.
// The major/Breaking version only increments if there are changes breaking backwards compatibility.
// The minor/Feature version increments any time there is something added
// and resets when Breaking is incremented.
public (int Breaking, int Feature) ApiVersion { get; }
public bool Valid { get; }
}

View file

@ -1,76 +0,0 @@
using System;
using System.Collections.Generic;
using Dalamud.Plugin;
using Penumbra.Api.Helpers;
namespace Penumbra.Api;
public static partial class Ipc
{
public static class GetCollections
{
public const string Label = $"Penumbra.{nameof( GetCollections )}";
public static FuncProvider< IList< string > > Provider( DalamudPluginInterface pi, Func< IList< string > > func )
=> new(pi, Label, func);
public static FuncSubscriber< IList< string > > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class GetCurrentCollectionName
{
public const string Label = $"Penumbra.{nameof( GetCurrentCollectionName )}";
public static FuncProvider< string > Provider( DalamudPluginInterface pi, Func< string > func )
=> new(pi, Label, func);
public static FuncSubscriber< string > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class GetDefaultCollectionName
{
public const string Label = $"Penumbra.{nameof( GetDefaultCollectionName )}";
public static FuncProvider< string > Provider( DalamudPluginInterface pi, Func< string > func )
=> new(pi, Label, func);
public static FuncSubscriber< string > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class GetInterfaceCollectionName
{
public const string Label = $"Penumbra.{nameof( GetInterfaceCollectionName )}";
public static FuncProvider< string > Provider( DalamudPluginInterface pi, Func< string > func )
=> new(pi, Label, func);
public static FuncSubscriber< string > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class GetCharacterCollectionName
{
public const string Label = $"Penumbra.{nameof( GetCharacterCollectionName )}";
public static FuncProvider< string, (string, bool) > Provider( DalamudPluginInterface pi, Func< string, (string, bool) > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, (string, bool) > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class GetChangedItems
{
public const string Label = $"Penumbra.{nameof( GetChangedItems )}";
public static FuncProvider< string, IReadOnlyDictionary< string, object? > > Provider( DalamudPluginInterface pi,
Func< string, IReadOnlyDictionary< string, object? > > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, IReadOnlyDictionary< string, object? > > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
}

View file

@ -1,42 +0,0 @@
using System;
using Dalamud.Plugin;
using Penumbra.Api.Helpers;
namespace Penumbra.Api;
public static partial class Ipc
{
public static class GetModDirectory
{
public const string Label = $"Penumbra.{nameof( GetModDirectory )}";
public static FuncProvider< string > Provider( DalamudPluginInterface pi, Func< string > func )
=> new(pi, Label, func);
public static FuncSubscriber< string > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class GetConfiguration
{
public const string Label = $"Penumbra.{nameof( GetConfiguration )}";
public static FuncProvider< string > Provider( DalamudPluginInterface pi, Func< string > func )
=> new(pi, Label, func);
public static FuncSubscriber< string > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class ModDirectoryChanged
{
public const string Label = $"Penumbra.{nameof( ModDirectoryChanged )}";
public static EventProvider< string, bool > Provider( DalamudPluginInterface pi,
Action< Action< string, bool > > sub, Action< Action< string, bool > > unsub )
=> new(pi, Label, ( sub, unsub ));
public static EventSubscriber< string, bool > Subscriber( DalamudPluginInterface pi, params Action< string, bool >[] actions )
=> new(pi, Label, actions);
}
}

View file

@ -1,63 +0,0 @@
using System;
using Dalamud.Plugin;
using Penumbra.Api.Helpers;
namespace Penumbra.Api;
public static partial class Ipc
{
public static class GetDrawObjectInfo
{
public const string Label = $"Penumbra.{nameof( GetDrawObjectInfo )}";
public static FuncProvider< nint, (nint, string) > Provider( DalamudPluginInterface pi, Func< nint, (nint, string) > func )
=> new(pi, Label, func);
public static FuncSubscriber< nint, (nint, string) > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class GetCutsceneParentIndex
{
public const string Label = $"Penumbra.{nameof( GetCutsceneParentIndex )}";
public static FuncProvider< int, int > Provider( DalamudPluginInterface pi, Func< int, int > func )
=> new(pi, Label, func);
public static FuncSubscriber< int, int > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class CreatingCharacterBase
{
public const string Label = $"Penumbra.{nameof( CreatingCharacterBase )}";
public static EventProvider< nint, string, nint, nint, nint > Provider( DalamudPluginInterface pi, Action add, Action del )
=> new(pi, Label, add, del);
public static EventSubscriber< nint, string, nint, nint, nint > Subscriber( DalamudPluginInterface pi, params Action< nint, string, nint, nint, nint >[] actions )
=> new(pi, Label, actions);
}
public static class CreatedCharacterBase
{
public const string Label = $"Penumbra.{nameof( CreatedCharacterBase )}";
public static EventProvider< nint, string, nint > Provider( DalamudPluginInterface pi, Action add, Action del )
=> new(pi, Label, add, del);
public static EventSubscriber< nint, string, nint > Subscriber( DalamudPluginInterface pi, params Action< nint, string, nint >[] actions )
=> new(pi, Label, actions);
}
public static class GameObjectResourcePathResolved
{
public const string Label = $"Penumbra.{nameof( GameObjectResourcePathResolved )}";
public static EventProvider< nint, string, string > Provider( DalamudPluginInterface pi, Action add, Action del )
=> new(pi, Label, add, del);
public static EventSubscriber< nint, string, string > Subscriber( DalamudPluginInterface pi, params Action< nint, string, string >[] actions )
=> new(pi, Label, actions);
}
}

View file

@ -1,30 +0,0 @@
using System;
using Dalamud.Plugin;
using Penumbra.Api.Helpers;
namespace Penumbra.Api;
public static partial class Ipc
{
public static class GetPlayerMetaManipulations
{
public const string Label = $"Penumbra.{nameof( GetPlayerMetaManipulations )}";
public static FuncProvider< string > Provider( DalamudPluginInterface pi, Func< string > func )
=> new(pi, Label, func);
public static FuncSubscriber< string > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class GetMetaManipulations
{
public const string Label = $"Penumbra.{nameof( GetMetaManipulations )}";
public static FuncProvider< string, string > Provider( DalamudPluginInterface pi, Func< string, string > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, string > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
}

View file

@ -1,116 +0,0 @@
using System;
using System.Collections.Generic;
using Dalamud.Plugin;
using Penumbra.Api.Enums;
using Penumbra.Api.Helpers;
namespace Penumbra.Api;
using CurrentSettings = ValueTuple< PenumbraApiEc, (bool, int, IDictionary< string, IList< string > >, bool)? >;
public static partial class Ipc
{
public static class GetAvailableModSettings
{
public const string Label = $"Penumbra.{nameof( GetAvailableModSettings )}";
public static FuncProvider< string, string, IDictionary< string, (IList< string >, GroupType) >? > Provider(
DalamudPluginInterface pi, Func< string, string, IDictionary< string, (IList< string >, GroupType) >? > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, string, IDictionary< string, (IList< string >, GroupType) >? > Subscriber(
DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class GetCurrentModSettings
{
public const string Label = $"Penumbra.{nameof( GetCurrentModSettings )}";
public static FuncProvider< string, string, string, bool, CurrentSettings > Provider( DalamudPluginInterface pi,
Func< string, string, string, bool, CurrentSettings > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, string, string, bool, CurrentSettings > Subscriber(
DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class TryInheritMod
{
public const string Label = $"Penumbra.{nameof( TryInheritMod )}";
public static FuncProvider< string, string, string, bool, PenumbraApiEc > Provider( DalamudPluginInterface pi,
Func< string, string, string, bool, PenumbraApiEc > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, string, string, bool, PenumbraApiEc > Subscriber(
DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class TrySetMod
{
public const string Label = $"Penumbra.{nameof( TrySetMod )}";
public static FuncProvider< string, string, string, bool, PenumbraApiEc > Provider( DalamudPluginInterface pi,
Func< string, string, string, bool, PenumbraApiEc > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, string, string, bool, PenumbraApiEc > Subscriber(
DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class TrySetModPriority
{
public const string Label = $"Penumbra.{nameof( TrySetModPriority )}";
public static FuncProvider< string, string, string, int, PenumbraApiEc > Provider( DalamudPluginInterface pi,
Func< string, string, string, int, PenumbraApiEc > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, string, string, int, PenumbraApiEc > Subscriber(
DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class TrySetModSetting
{
public const string Label = $"Penumbra.{nameof( TrySetModSetting )}";
public static FuncProvider< string, string, string, string, string, PenumbraApiEc > Provider( DalamudPluginInterface pi,
Func< string, string, string, string, string, PenumbraApiEc > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, string, string, string, string, PenumbraApiEc > Subscriber(
DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class TrySetModSettings
{
public const string Label = $"Penumbra.{nameof( TrySetModSettings )}";
public static FuncProvider< string, string, string, string, IReadOnlyList< string >, PenumbraApiEc > Provider(
DalamudPluginInterface pi,
Func< string, string, string, string, IReadOnlyList< string >, PenumbraApiEc > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, string, string, string, IReadOnlyList< string >, PenumbraApiEc > Subscriber(
DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class ModSettingChanged
{
public const string Label = $"Penumbra.{nameof( ModSettingChanged )}";
public static EventProvider< ModSettingChange, string, string, bool > Provider( DalamudPluginInterface pi, Action add, Action del )
=> new(pi, Label, add, del);
public static EventSubscriber< ModSettingChange, string, string, bool > Subscriber( DalamudPluginInterface pi,
params Action< ModSettingChange, string, string, bool >[] actions )
=> new(pi, Label, actions);
}
}

View file

@ -1,81 +0,0 @@
using System;
using System.Collections.Generic;
using Dalamud.Plugin;
using Penumbra.Api.Enums;
using Penumbra.Api.Helpers;
namespace Penumbra.Api;
public static partial class Ipc
{
public static class GetMods
{
public const string Label = $"Penumbra.{nameof( GetMods )}";
public static FuncProvider< IList< (string, string) > > Provider( DalamudPluginInterface pi, Func< IList< (string, string) > > func )
=> new(pi, Label, func);
public static FuncSubscriber< IList< (string, string) > > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class ReloadMod
{
public const string Label = $"Penumbra.{nameof( ReloadMod )}";
public static FuncProvider< string, string, PenumbraApiEc > Provider( DalamudPluginInterface pi,
Func< string, string, PenumbraApiEc > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, string, PenumbraApiEc > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class AddMod
{
public const string Label = $"Penumbra.{nameof( AddMod )}";
public static FuncProvider< string, PenumbraApiEc > Provider( DalamudPluginInterface pi,
Func< string, PenumbraApiEc > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, PenumbraApiEc > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class DeleteMod
{
public const string Label = $"Penumbra.{nameof( DeleteMod )}";
public static FuncProvider< string, string, PenumbraApiEc > Provider( DalamudPluginInterface pi,
Func< string, string, PenumbraApiEc > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, string, PenumbraApiEc > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class GetModPath
{
public const string Label = $"Penumbra.{nameof( GetModPath )}";
public static FuncProvider< string, string, (PenumbraApiEc, string, bool) > Provider( DalamudPluginInterface pi,
Func< string, string, (PenumbraApiEc, string, bool) > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, string, (PenumbraApiEc, string, bool) > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class SetModPath
{
public const string Label = $"Penumbra.{nameof( SetModPath )}";
public static FuncProvider< string, string, string, PenumbraApiEc > Provider( DalamudPluginInterface pi,
Func< string, string, string, PenumbraApiEc > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, string, string, PenumbraApiEc > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
}

View file

@ -1,68 +0,0 @@
using System;
using Dalamud.Plugin;
using Penumbra.Api.Helpers;
namespace Penumbra.Api;
public static partial class Ipc
{
public static class Initialized
{
public const string Label = $"Penumbra.{nameof( Initialized )}";
public static EventProvider Provider( DalamudPluginInterface pi )
=> new(pi, Label);
public static EventSubscriber Subscriber( DalamudPluginInterface pi, params Action[] actions )
{
var ret = new EventSubscriber( pi, Label );
foreach( var action in actions )
{
ret.Event += action;
}
return ret;
}
}
public static class Disposed
{
public const string Label = $"Penumbra.{nameof( Disposed )}";
public static EventProvider Provider( DalamudPluginInterface pi )
=> new(pi, Label);
public static EventSubscriber Subscriber( DalamudPluginInterface pi, params Action[] actions )
{
var ret = new EventSubscriber( pi, Label );
foreach( var action in actions )
{
ret.Event += action;
}
return ret;
}
}
public static class ApiVersion
{
public const string Label = $"Penumbra.{nameof( ApiVersion )}";
public static FuncProvider< int > Provider( DalamudPluginInterface pi, Func< int > func )
=> new(pi, Label, func);
public static FuncSubscriber< int > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class ApiVersions
{
public const string Label = $"Penumbra.{nameof( ApiVersions )}";
public static FuncProvider< (int Breaking, int Features) > Provider( DalamudPluginInterface pi, Func< (int, int) > func )
=> new(pi, Label, func);
public static FuncSubscriber< (int Breaking, int Features) > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
}

View file

@ -1,65 +0,0 @@
using System;
using Dalamud.Game.ClientState.Objects.Types;
using Dalamud.Plugin;
using Penumbra.Api.Enums;
using Penumbra.Api.Helpers;
namespace Penumbra.Api;
public static partial class Ipc
{
public static class RedrawAll
{
public const string Label = $"Penumbra.{nameof( RedrawAll )}";
public static ActionProvider< RedrawType > Provider( DalamudPluginInterface pi, Action< RedrawType > action )
=> new(pi, Label, action);
public static ActionSubscriber< RedrawType > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class RedrawObject
{
public const string Label = $"Penumbra.{nameof( RedrawObject )}";
public static ActionProvider< GameObject, RedrawType > Provider( DalamudPluginInterface pi, Action< GameObject, RedrawType > action )
=> new(pi, Label, action);
public static ActionSubscriber< GameObject, RedrawType > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class RedrawObjectByIndex
{
public const string Label = $"Penumbra.{nameof( RedrawObjectByIndex )}";
public static ActionProvider< int, RedrawType > Provider( DalamudPluginInterface pi, Action< int, RedrawType > action )
=> new(pi, Label, action);
public static ActionSubscriber< int, RedrawType > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class RedrawObjectByName
{
public const string Label = $"Penumbra.{nameof( RedrawObjectByName )}";
public static ActionProvider< string, RedrawType > Provider( DalamudPluginInterface pi, Action< string, RedrawType > action )
=> new(pi, Label, action);
public static ActionSubscriber< string, RedrawType > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class GameObjectRedrawn
{
public const string Label = $"Penumbra.{nameof( GameObjectRedrawn )}";
public static EventProvider< nint, int > Provider( DalamudPluginInterface pi, Action add, Action del )
=> new(pi, Label, add, del);
public static EventSubscriber< nint, int > Subscriber( DalamudPluginInterface pi, params Action< nint, int >[] actions )
=> new(pi, Label, actions);
}
}

View file

@ -1,74 +0,0 @@
using System;
using Dalamud.Plugin;
using Penumbra.Api.Helpers;
namespace Penumbra.Api;
public static partial class Ipc
{
public static class ResolveDefaultPath
{
public const string Label = $"Penumbra.{nameof( ResolveDefaultPath )}";
public static FuncProvider< string, string > Provider( DalamudPluginInterface pi, Func< string, string > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, string > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class ResolveInterfacePath
{
public const string Label = $"Penumbra.{nameof( ResolveInterfacePath )}";
public static FuncProvider< string, string > Provider( DalamudPluginInterface pi, Func< string, string > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, string > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class ResolvePlayerPath
{
public const string Label = $"Penumbra.{nameof( ResolvePlayerPath )}";
public static FuncProvider< string, string > Provider( DalamudPluginInterface pi, Func< string, string > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, string > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class ResolveCharacterPath
{
public const string Label = $"Penumbra.{nameof( ResolveCharacterPath )}";
public static FuncProvider< string, string, string > Provider( DalamudPluginInterface pi, Func< string, string, string > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, string, string > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class ReverseResolvePath
{
public const string Label = $"Penumbra.{nameof( ReverseResolvePath )}";
public static FuncProvider< string, string, string[] > Provider( DalamudPluginInterface pi, Func< string, string, string[] > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, string, string[] > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class ReverseResolvePlayerPath
{
public const string Label = $"Penumbra.{nameof( ReverseResolvePlayerPath )}";
public static FuncProvider< string, string[] > Provider( DalamudPluginInterface pi, Func< string, string[] > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, string[] > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
}

View file

@ -1,83 +0,0 @@
using System;
using System.Collections.Generic;
using Dalamud.Plugin;
using Penumbra.Api.Enums;
using Penumbra.Api.Helpers;
namespace Penumbra.Api;
public static partial class Ipc
{
public static class CreateTemporaryCollection
{
public const string Label = $"Penumbra.{nameof( CreateTemporaryCollection )}";
public static FuncProvider< string, string, bool, (PenumbraApiEc, string) > Provider( DalamudPluginInterface pi,
Func< string, string, bool, (PenumbraApiEc, string) > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, string, bool, (PenumbraApiEc, string) > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class RemoveTemporaryCollection
{
public const string Label = $"Penumbra.{nameof( RemoveTemporaryCollection )}";
public static FuncProvider< string, PenumbraApiEc > Provider( DalamudPluginInterface pi,
Func< string, PenumbraApiEc > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, PenumbraApiEc > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class AddTemporaryModAll
{
public const string Label = $"Penumbra.{nameof( AddTemporaryModAll )}";
public static FuncProvider< string, Dictionary< string, string >, string, int, PenumbraApiEc > Provider(
DalamudPluginInterface pi, Func< string, Dictionary< string, string >, string, int, PenumbraApiEc > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, Dictionary< string, string >, string, int, PenumbraApiEc > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class AddTemporaryMod
{
public const string Label = $"Penumbra.{nameof( AddTemporaryMod )}";
public static FuncProvider< string, string, Dictionary< string, string >, string, int, PenumbraApiEc > Provider(
DalamudPluginInterface pi, Func< string, string, Dictionary< string, string >, string, int, PenumbraApiEc > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, string, Dictionary< string, string >, string, int, PenumbraApiEc > Subscriber(
DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class RemoveTemporaryModAll
{
public const string Label = $"Penumbra.{nameof( RemoveTemporaryModAll )}";
public static FuncProvider< string, int, PenumbraApiEc > Provider(
DalamudPluginInterface pi, Func< string, int, PenumbraApiEc > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, int, PenumbraApiEc > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
public static class RemoveTemporaryMod
{
public const string Label = $"Penumbra.{nameof( RemoveTemporaryMod )}";
public static FuncProvider< string, string, int, PenumbraApiEc > Provider(
DalamudPluginInterface pi, Func< string, string, int, PenumbraApiEc > func )
=> new(pi, Label, func);
public static FuncSubscriber< string, string, int, PenumbraApiEc > Subscriber( DalamudPluginInterface pi )
=> new(pi, Label);
}
}

View file

@ -1,55 +0,0 @@
using System;
using Dalamud.Plugin;
using Penumbra.Api.Enums;
using Penumbra.Api.Helpers;
namespace Penumbra.Api;
public static partial class Ipc
{
public static class PreSettingsDraw
{
public const string Label = $"Penumbra.{nameof( PreSettingsDraw )}";
public static EventProvider< string > Provider( DalamudPluginInterface pi, Action< Action< string > > sub,
Action< Action< string > > unsub )
=> new(pi, Label, ( sub, unsub ));
public static EventSubscriber< string > Subscriber( DalamudPluginInterface pi, params Action< string >[] actions )
=> new(pi, Label, actions);
}
public static class PostSettingsDraw
{
public const string Label = $"Penumbra.{nameof( PostSettingsDraw )}";
public static EventProvider< string > Provider( DalamudPluginInterface pi, Action< Action< string > > sub,
Action< Action< string > > unsub )
=> new(pi, Label, ( sub, unsub ));
public static EventSubscriber< string > Subscriber( DalamudPluginInterface pi, params Action< string >[] actions )
=> new(pi, Label, actions);
}
public static class ChangedItemTooltip
{
public const string Label = $"Penumbra.{nameof( ChangedItemTooltip )}";
public static EventProvider< ChangedItemType, uint > Provider( DalamudPluginInterface pi, Action add, Action del )
=> new(pi, Label, add, del);
public static EventSubscriber< ChangedItemType, uint > Subscriber( DalamudPluginInterface pi, params Action< ChangedItemType, uint >[] actions )
=> new(pi, Label, actions);
}
public static class ChangedItemClick
{
public const string Label = $"Penumbra.{nameof( ChangedItemClick )}";
public static EventProvider< MouseButton, ChangedItemType, uint > Provider( DalamudPluginInterface pi, Action add, Action del )
=> new(pi, Label, add, del);
public static EventSubscriber< MouseButton, ChangedItemType, uint > Subscriber( DalamudPluginInterface pi, params Action< MouseButton, ChangedItemType, uint >[] actions )
=> new(pi, Label, actions);
}
}

View file

@ -1,47 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0-windows</TargetFramework>
<LangVersion>preview</LangVersion>
<PlatformTarget>x64</PlatformTarget>
<AssemblyTitle>Penumbra.Api</AssemblyTitle>
<Company>absolute gangstas</Company>
<Product>Penumbra</Product>
<Copyright>Copyright © 2022</Copyright>
<FileVersion>1.0.0.0</FileVersion>
<AssemblyVersion>1.0.0.0</AssemblyVersion>
<OutputPath>bin\$(Configuration)\</OutputPath>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Nullable>enable</Nullable>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<ProduceReferenceAssembly>false</ProduceReferenceAssembly>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugType>full</DebugType>
<DefineConstants>DEBUG;TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
</PropertyGroup>
<PropertyGroup>
<MSBuildWarningsAsMessages>$(MSBuildWarningsAsMessages);MSB3277</MSBuildWarningsAsMessages>
</PropertyGroup>
<PropertyGroup>
<DalamudLibPath>$(AppData)\XIVLauncher\addon\Hooks\dev\</DalamudLibPath>
</PropertyGroup>
<ItemGroup>
<Reference Include="Dalamud">
<HintPath>$(DalamudLibPath)Dalamud.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="Lumina">
<HintPath>$(DalamudLibPath)Lumina.dll</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup>
</Project>

View file

@ -1,2 +0,0 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=ipc/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

View file

@ -1,4 +0,0 @@
# Penumbra
This is an auxiliary repository for Penumbras external API.
For more information, see the [main repo](https://github.com/xivdev/Penumbra).