diff --git a/api/BSIPA_ModList.UI.ViewControllers.MarkdownView.html b/api/BSIPA_ModList.UI.ViewControllers.MarkdownView.html index fe550288..2153f345 100644 --- a/api/BSIPA_ModList.UI.ViewControllers.MarkdownView.html +++ b/api/BSIPA_ModList.UI.ViewControllers.MarkdownView.html @@ -395,7 +395,7 @@ public class MarkdownView : MonoBehaviour Improve this Doc - View Source + View Source
This function will be called whenever attempting to resolve an image URI, to ensure that the image exists in the embedded assembly.
@@ -446,7 +446,7 @@ public class MarkdownView : MonoBehaviour Improve this Doc - View Source + View Sourceparent
.<
Improve this Doc
- View Source
+ View Source
parent
Improve this Doc
- View Source
+ View Source
ToValue(TCollection, Object)
@@ -522,7 +522,7 @@ with the parent parent
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Config.Stores.Converters.CollectionConverter-3.html b/api/IPA.Config.Stores.Converters.CollectionConverter-3.html
index d3701b0d..9ebb7788 100644
--- a/api/IPA.Config.Stores.Converters.CollectionConverter-3.html
+++ b/api/IPA.Config.Stores.Converters.CollectionConverter-3.html
@@ -191,7 +191,7 @@
Improve this Doc
- View Source
+ View Source
CollectionConverter()
@@ -243,7 +243,7 @@ with a default-constructed Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Config.Stores.Converters.Converter-1.html b/api/IPA.Config.Stores.Converters.Converter-1.html
index a154cee4..55eb7371 100644
--- a/api/IPA.Config.Stores.Converters.Converter-1.html
+++ b/api/IPA.Config.Stores.Converters.Converter-1.html
@@ -145,7 +145,7 @@
Improve this Doc
- View Source
+ View Source
Default
@@ -182,7 +182,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Config.Stores.Converters.Converter.html b/api/IPA.Config.Stores.Converters.Converter.html
index adbb2722..171e4c85 100644
--- a/api/IPA.Config.Stores.Converters.Converter.html
+++ b/api/IPA.Config.Stores.Converters.Converter.html
@@ -129,7 +129,7 @@
Improve this Doc
- View Source
+ View Source
FloatValue(Value)
@@ -180,7 +180,7 @@ or null if Improve this Doc
- View Source
+ View Source
IntValue(Value)
@@ -237,7 +237,7 @@ or null if Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Config.Stores.Converters.CustomObjectConverter-1.html b/api/IPA.Config.Stores.Converters.CustomObjectConverter-1.html
index d7983390..0089a24e 100644
--- a/api/IPA.Config.Stores.Converters.CustomObjectConverter-1.html
+++ b/api/IPA.Config.Stores.Converters.CustomObjectConverter-1.html
@@ -159,7 +159,7 @@
Improve this Doc
- View Source
+ View Source
Deserialize(Value, Object)
@@ -219,7 +219,7 @@
Improve this Doc
- View Source
+ View Source
FromValue(Value, Object)
@@ -281,7 +281,7 @@
Improve this Doc
- View Source
+ View Source
Serialize(T, Object)
@@ -341,7 +341,7 @@
Improve this Doc
- View Source
+ View Source
ToValue(T, Object)
@@ -433,7 +433,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Config.Stores.Converters.IListConverter-1.html b/api/IPA.Config.Stores.Converters.IListConverter-1.html
index afd708df..4f0874bb 100644
--- a/api/IPA.Config.Stores.Converters.IListConverter-1.html
+++ b/api/IPA.Config.Stores.Converters.IListConverter-1.html
@@ -182,7 +182,7 @@
Improve this Doc
- View Source
+ View Source
IListConverter()
@@ -202,7 +202,7 @@
Improve this Doc
- View Source
+ View Source
IListConverter(ValueConverter<T>)
@@ -238,7 +238,7 @@
Improve this Doc
- View Source
+ View Source
Create(Int32, Object)
@@ -326,7 +326,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Config.Stores.Converters.IListConverter-2.html b/api/IPA.Config.Stores.Converters.IListConverter-2.html
index 8ed67d5e..d6920d67 100644
--- a/api/IPA.Config.Stores.Converters.IListConverter-2.html
+++ b/api/IPA.Config.Stores.Converters.IListConverter-2.html
@@ -190,7 +190,7 @@
Improve this Doc
- View Source
+ View Source
IListConverter()
@@ -242,7 +242,7 @@ with a default-constructed Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Config.Stores.Converters.ISetConverter-1.html b/api/IPA.Config.Stores.Converters.ISetConverter-1.html
index 2e75b61e..201cb47d 100644
--- a/api/IPA.Config.Stores.Converters.ISetConverter-1.html
+++ b/api/IPA.Config.Stores.Converters.ISetConverter-1.html
@@ -182,7 +182,7 @@
Improve this Doc
- View Source
+ View Source
ISetConverter()
@@ -202,7 +202,7 @@
Improve this Doc
- View Source
+ View Source
ISetConverter(ValueConverter<T>)
@@ -238,7 +238,7 @@
Improve this Doc
- View Source
+ View Source
Create(Int32, Object)
@@ -326,7 +326,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Config.Stores.Converters.ISetConverter-2.html b/api/IPA.Config.Stores.Converters.ISetConverter-2.html
index d8e90056..97708df5 100644
--- a/api/IPA.Config.Stores.Converters.ISetConverter-2.html
+++ b/api/IPA.Config.Stores.Converters.ISetConverter-2.html
@@ -190,7 +190,7 @@
Improve this Doc
- View Source
+ View Source
ISetConverter()
@@ -242,7 +242,7 @@ with a default-constructed Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Config.Stores.Converters.ListConverter-1.html b/api/IPA.Config.Stores.Converters.ListConverter-1.html
index 21c5fda2..6e2a4359 100644
--- a/api/IPA.Config.Stores.Converters.ListConverter-1.html
+++ b/api/IPA.Config.Stores.Converters.ListConverter-1.html
@@ -182,7 +182,7 @@
Improve this Doc
- View Source
+ View Source
ListConverter()
@@ -202,7 +202,7 @@
Improve this Doc
- View Source
+ View Source
ListConverter(ValueConverter<T>)
@@ -238,7 +238,7 @@
Improve this Doc
- View Source
+ View Source
Create(Int32, Object)
@@ -326,7 +326,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Config.Stores.Converters.ListConverter-2.html b/api/IPA.Config.Stores.Converters.ListConverter-2.html
index ea730a59..ac9be86f 100644
--- a/api/IPA.Config.Stores.Converters.ListConverter-2.html
+++ b/api/IPA.Config.Stores.Converters.ListConverter-2.html
@@ -190,7 +190,7 @@
Improve this Doc
- View Source
+ View Source
ListConverter()
@@ -242,7 +242,7 @@ with a default-constructed Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Config.Stores.Converters.NullableConverter-1.html b/api/IPA.Config.Stores.Converters.NullableConverter-1.html
index 2c612255..e287f84f 100644
--- a/api/IPA.Config.Stores.Converters.NullableConverter-1.html
+++ b/api/IPA.Config.Stores.Converters.NullableConverter-1.html
@@ -160,7 +160,7 @@
Improve this Doc
- View Source
+ View Source
NullableConverter()
@@ -183,7 +183,7 @@ Equivalent to
Improve this Doc
- View Source
+ View Source
NullableConverter(ValueConverter<T>)
@@ -219,7 +219,7 @@ Equivalent to
Improve this Doc
- View Source
+ View Source
FromValue(Value, Object)
@@ -277,7 +277,7 @@ Equivalent to
Improve this Doc
- View Source
+ View Source
ToValue(Nullable<T>, Object)
@@ -361,7 +361,7 @@ Equivalent to
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Config.Stores.Converters.NullableConverter-2.html b/api/IPA.Config.Stores.Converters.NullableConverter-2.html
index 0693a556..6115ad72 100644
--- a/api/IPA.Config.Stores.Converters.NullableConverter-2.html
+++ b/api/IPA.Config.Stores.Converters.NullableConverter-2.html
@@ -172,7 +172,7 @@ to use as the underlying converter. Use this in the Improve this Doc
- View Source
+ View Source
NullableConverter()
@@ -222,7 +222,7 @@ to use as the underlying converter. Use this in the Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Config.Stores.GeneratedStore.html b/api/IPA.Config.Stores.GeneratedStore.html
index b04b7802..ab2d1a02 100644
--- a/api/IPA.Config.Stores.GeneratedStore.html
+++ b/api/IPA.Config.Stores.GeneratedStore.html
@@ -130,7 +130,7 @@ config stores.
Improve this Doc
- View Source
+ View Source
AssemblyVisibilityTarget
The name of the assembly that internals must be visible to to allow internal protection.
@@ -162,7 +162,7 @@ config stores.
Improve this Doc
- View Source
+ View Source
Create<T>()
@@ -218,7 +218,7 @@ config stores.
Improve this Doc
- View Source
+ View Source
Generated<T>(Config, Boolean)
@@ -347,7 +347,7 @@ the resulting object will implement it and notify it too.
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Config.Stores.IValueConverter.html b/api/IPA.Config.Stores.IValueConverter.html
index 0e90c3c5..debb05c3 100644
--- a/api/IPA.Config.Stores.IValueConverter.html
+++ b/api/IPA.Config.Stores.IValueConverter.html
@@ -117,7 +117,7 @@ Converters do not need to perform null checks, as the serializer and de
Improve this Doc
- View Source
+ View Source
Type
@@ -150,7 +150,7 @@ Converters do not need to perform null checks, as the serializer and de
Improve this Doc
- View Source
+ View Source
FromValue(Value, Object)
@@ -206,7 +206,7 @@ Converters do not need to perform null checks, as the serializer and de
Improve this Doc
- View Source
+ View Source
ToValue(Object, Object)
@@ -284,7 +284,7 @@ Converters do not need to perform null checks, as the serializer and de
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Config.Stores.ValueConverter-1.html b/api/IPA.Config.Stores.ValueConverter-1.html
index 518aaeb5..e3ffa627 100644
--- a/api/IPA.Config.Stores.ValueConverter-1.html
+++ b/api/IPA.Config.Stores.ValueConverter-1.html
@@ -153,7 +153,7 @@
Improve this Doc
- View Source
+ View Source
FromValue(Value, Object)
@@ -213,7 +213,7 @@
Improve this Doc
- View Source
+ View Source
ToValue(T, Object)
@@ -275,7 +275,7 @@
Improve this Doc
- View Source
+ View Source
IValueConverter.FromValue(Value, Object)
@@ -327,7 +327,7 @@
Improve this Doc
- View Source
+ View Source
IValueConverter.ToValue(Object, Object)
@@ -379,7 +379,7 @@
Improve this Doc
- View Source
+ View Source
IValueConverter.Type
@@ -439,7 +439,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.InitAttribute.html b/api/IPA.InitAttribute.html
index 37a41371..d8f350f4 100644
--- a/api/IPA.InitAttribute.html
+++ b/api/IPA.InitAttribute.html
@@ -289,7 +289,7 @@ Parameter injection is done with Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Loader.CannotRuntimeDisableException.html b/api/IPA.Loader.CannotRuntimeDisableException.html
index 36a22c0f..fff7cfda 100644
--- a/api/IPA.Loader.CannotRuntimeDisableException.html
+++ b/api/IPA.Loader.CannotRuntimeDisableException.html
@@ -169,7 +169,7 @@ public class CannotRuntimeDisableException : Exception, ISerializable, _Exceptio
Improve this Doc
- View Source
+ View Source
CannotRuntimeDisableException(PluginMetadata)
@@ -203,7 +203,7 @@ public class CannotRuntimeDisableException : Exception, ISerializable, _Exceptio
Improve this Doc
- View Source
+ View Source
CannotRuntimeDisableException(SerializationInfo, StreamingContext)
@@ -258,7 +258,7 @@ public class CannotRuntimeDisableException : Exception, ISerializable, _Exceptio
Improve this Doc
- View Source
+ View Source
Plugin
@@ -318,7 +318,7 @@ public class CannotRuntimeDisableException : Exception, ISerializable, _Exceptio
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Loader.Features.Feature.html b/api/IPA.Loader.Features.Feature.html
index febfd807..ce8c003c 100644
--- a/api/IPA.Loader.Features.Feature.html
+++ b/api/IPA.Loader.Features.Feature.html
@@ -132,7 +132,7 @@
Improve this Doc
- View Source
+ View Source
InvalidMessage
@@ -165,7 +165,7 @@ This should also be set whenever either Improve this Doc
- View Source
+ View Source
StoreOnPlugin
@@ -199,7 +199,7 @@ This should also be set whenever either Improve this Doc
- View Source
+ View Source
AfterInit(PluginMetadata)
@@ -233,7 +233,7 @@ This should also be set whenever either Improve this Doc
- View Source
+ View Source
AfterInit(PluginMetadata, Object)
@@ -273,7 +273,7 @@ This should also be set whenever either Improve this Doc
- View Source
+ View Source
BeforeInit(PluginMetadata)
@@ -323,7 +323,7 @@ This should also be set whenever either Improve this Doc
- View Source
+ View Source
BeforeLoad(PluginMetadata)
@@ -377,7 +377,7 @@ Any features it defines, for example, will still be loaded.
Improve this Doc
- View Source
+ View Source
Evaluate()
@@ -410,7 +410,7 @@ Any features it defines, for example, will still be loaded.
Improve this Doc
- View Source
+ View Source
Initialize(PluginMetadata, String[])
@@ -471,7 +471,7 @@ Any features it defines, for example, will still be loaded.
Improve this Doc
- View Source
+ View Source
RequireLoaded(PluginMetadata)
@@ -527,7 +527,7 @@ Any features it defines, for example, will still be loaded.
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Loader.PluginInitInjector.InjectParameter.html b/api/IPA.Loader.PluginInitInjector.InjectParameter.html
index 2b61a28a..701caa20 100644
--- a/api/IPA.Loader.PluginInitInjector.InjectParameter.html
+++ b/api/IPA.Loader.PluginInitInjector.InjectParameter.html
@@ -166,7 +166,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Loader.PluginInitInjector.html b/api/IPA.Loader.PluginInitInjector.html
index 03ec6d1e..f520bec7 100644
--- a/api/IPA.Loader.PluginInitInjector.html
+++ b/api/IPA.Loader.PluginInitInjector.html
@@ -140,7 +140,7 @@ For all of the default injectors, only one of each will be generated, and any la
Improve this Doc
- View Source
+ View Source
AddInjector(Type, PluginInitInjector.InjectParameter)
@@ -186,7 +186,7 @@ For all of the default injectors, only one of each will be generated, and any la
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Loader.PluginManager.PluginDisableDelegate.html b/api/IPA.Loader.PluginManager.PluginDisableDelegate.html
index 42d0109b..c7db5113 100644
--- a/api/IPA.Loader.PluginManager.PluginDisableDelegate.html
+++ b/api/IPA.Loader.PluginManager.PluginDisableDelegate.html
@@ -144,7 +144,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Loader.PluginManager.PluginEnableDelegate.html b/api/IPA.Loader.PluginManager.PluginEnableDelegate.html
index 2803cf10..2031ef90 100644
--- a/api/IPA.Loader.PluginManager.PluginEnableDelegate.html
+++ b/api/IPA.Loader.PluginManager.PluginEnableDelegate.html
@@ -144,7 +144,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Loader.PluginManager.html b/api/IPA.Loader.PluginManager.html
index 46265d48..db5460f9 100644
--- a/api/IPA.Loader.PluginManager.html
+++ b/api/IPA.Loader.PluginManager.html
@@ -129,7 +129,7 @@
Improve this Doc
- View Source
+ View Source
AllPlugins
@@ -161,7 +161,7 @@
Improve this Doc
- View Source
+ View Source
DisabledPlugins
@@ -193,7 +193,7 @@
Improve this Doc
- View Source
+ View Source
Plugins
@@ -228,7 +228,7 @@ public static IEnumerable<IPlugin> Plugins { get; }
Improve this Doc
- View Source
+ View Source
GetDisabledPlugin(String)
@@ -278,7 +278,7 @@ public static IEnumerable<IPlugin> Plugins { get; }
Improve this Doc
- View Source
+ View Source
GetDisabledPluginFromId(String)
@@ -328,7 +328,7 @@ public static IEnumerable<IPlugin> Plugins { get; }
Improve this Doc
- View Source
+ View Source
GetPlugin(String)
@@ -378,7 +378,7 @@ public static IEnumerable<IPlugin> Plugins { get; }
Improve this Doc
- View Source
+ View Source
GetPluginFromId(String)
@@ -428,7 +428,7 @@ public static IEnumerable<IPlugin> Plugins { get; }
Improve this Doc
- View Source
+ View Source
IsDisabled(PluginMetadata)
@@ -478,7 +478,7 @@ public static IEnumerable<IPlugin> Plugins { get; }
Improve this Doc
- View Source
+ View Source
IsEnabled(PluginMetadata)
@@ -528,7 +528,7 @@ public static IEnumerable<IPlugin> Plugins { get; }
Improve this Doc
- View Source
+ View Source
PluginStateTransaction()
@@ -562,7 +562,7 @@ public static IEnumerable<IPlugin> Plugins { get; }
Improve this Doc
- View Source
+ View Source
Called whenever a plugin is disabled.
@@ -592,7 +592,7 @@ public static IEnumerable<IPlugin> Plugins { get; } Improve this Doc - View Source + View SourceCalled whenever a plugin is enabled.
@@ -628,7 +628,7 @@ public static IEnumerable<IPlugin> Plugins { get; } Improve this DocLog(Level.Critical, e);
Improve this Doc
- View Source
+ View Source
Log(Level.Critical, message);
Improve this Doc
- View Source
+ View Source
Log(Level.Debug, e);
Improve this Doc
- View Source
+ View Source
Log(Level.Debug, message);
Improve this Doc
- View Source
+ View Source
Log(Level.Error, e);
Improve this Doc
- View Source
+ View Source
Log(Level.Error, message);
Improve this Doc
- View Source
+ View Source
Log(Level.Info, e);
Improve this Doc
- View Source
+ View Source
Log(Level.Info, message);
Improve this Doc
- View Source
+ View Source
Log(Level.Info, message);
Improve this Doc
- View Source
+ View Source
Log(Level.Info, message);
Improve this Doc
- View Source
+ View Source
Log(Level.Notice, e);
Improve this Doc
- View Source
+ View Source
Log(Level.Notice, message);
Improve this Doc
- View Source
+ View Source
Log(Level.Trace, e);
Improve this Doc
- View Source
+ View Source
Log(Level.Trace, message);
Improve this Doc
- View Source
+ View Source
Log(Level.Warning, e);
Improve this Doc
- View Source
+ View Source
Log(Level.Warning, message);
Improve this Doc
The StreamWriter that writes to the GZip file.
@@ -176,7 +176,7 @@ Improve this Doc - View Source + View SourceImprove this Doc
- View Source
+ View Source
SemverValue
@@ -310,7 +310,7 @@ the storage mode specified in Improve this Doc
- View Source
+ View Source
StorageMode
@@ -342,7 +342,7 @@ the storage mode specified in Improve this Doc
- View Source
+ View Source
StringValue
@@ -376,7 +376,7 @@ the storage mode specified in Improve this Doc
- View Source
+ View Source
CompareTo(AlmostVersion)
@@ -434,7 +434,7 @@ or Improve this Doc
- View Source
+ View Source
CompareTo(SemVer.Version)
@@ -492,7 +492,7 @@ be thrown.
Improve this Doc
- View Source
+ View Source
Equals(Object)
@@ -551,7 +551,7 @@ be thrown.
Improve this Doc
- View Source
+ View Source
GetHashCode()
@@ -589,7 +589,7 @@ be thrown.
Improve this Doc
- View Source
+ View Source
ToString()
@@ -630,7 +630,7 @@ stored as a , it is equivalent to calling Improve this Doc
- View Source
+ View Source
Equality(AlmostVersion, AlmostVersion)
@@ -695,7 +695,7 @@ does not.
Improve this Doc
- View Source
+ View Source
Implicit(AlmostVersion to SemVer.Version)
@@ -749,7 +749,7 @@ If not applicable, returns null
Improve this Doc
- View Source
+ View Source
Implicit(SemVer.Version to AlmostVersion)
@@ -802,7 +802,7 @@ If not applicable, returns null
Improve this Doc
- View Source
+ View Source
Inequality(AlmostVersion, AlmostVersion)
@@ -891,7 +891,7 @@ If not applicable, returns null
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.AlmostVersionConverter.html b/api/IPA.Utilities.AlmostVersionConverter.html
index 8e6ed70f..73ea8167 100644
--- a/api/IPA.Utilities.AlmostVersionConverter.html
+++ b/api/IPA.Utilities.AlmostVersionConverter.html
@@ -143,7 +143,7 @@
Improve this Doc
- View Source
+ View Source
FromValue(Value, Object)
@@ -200,7 +200,7 @@
Improve this Doc
- View Source
+ View Source
ToValue(AlmostVersion, Object)
@@ -284,7 +284,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.Async.Coroutines.html b/api/IPA.Utilities.Async.Coroutines.html
index f15dda9e..21f9b64b 100644
--- a/api/IPA.Utilities.Async.Coroutines.html
+++ b/api/IPA.Utilities.Async.Coroutines.html
@@ -129,7 +129,7 @@
Improve this Doc
- View Source
+ View Source
WaitForTask(Task)
@@ -185,7 +185,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.Async.SingleThreadTaskScheduler.html b/api/IPA.Utilities.Async.SingleThreadTaskScheduler.html
index 613000cc..13750afb 100644
--- a/api/IPA.Utilities.Async.SingleThreadTaskScheduler.html
+++ b/api/IPA.Utilities.Async.SingleThreadTaskScheduler.html
@@ -158,7 +158,7 @@
Improve this Doc
- View Source
+ View Source
IsRunning
@@ -207,7 +207,7 @@
Improve this Doc
- View Source
+ View Source
Dispose()
@@ -223,7 +223,7 @@
Improve this Doc
- View Source
+ View Source
Dispose(Boolean)
@@ -257,7 +257,7 @@
Improve this Doc
- View Source
+ View Source
Exit()
@@ -308,7 +308,7 @@
Improve this Doc
- View Source
+ View Source
GetScheduledTasks()
@@ -358,7 +358,7 @@
Improve this Doc
- View Source
+ View Source
Join()
@@ -393,7 +393,7 @@
Improve this Doc
- View Source
+ View Source
QueueTask(Task)
@@ -446,7 +446,7 @@ scheduled for this Improve this Doc
- View Source
+ View Source
Start()
@@ -478,7 +478,7 @@ scheduled for this Improve this Doc
- View Source
+ View Source
TryExecuteTaskInline(Task, Boolean)
@@ -581,7 +581,7 @@ make sense to run it inline.
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.Async.Synchronization.MutexLocker.html b/api/IPA.Utilities.Async.Synchronization.MutexLocker.html
index b4b72db0..ae997fd2 100644
--- a/api/IPA.Utilities.Async.Synchronization.MutexLocker.html
+++ b/api/IPA.Utilities.Async.Synchronization.MutexLocker.html
@@ -126,7 +126,7 @@ Create this with Improve this Doc
- View Source
+ View Source
IDisposable.Dispose()
@@ -172,7 +172,7 @@ Create this with Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.Async.Synchronization.ReaderWriterLockSlimReadLocker.html b/api/IPA.Utilities.Async.Synchronization.ReaderWriterLockSlimReadLocker.html
index 439a8ff6..6926a740 100644
--- a/api/IPA.Utilities.Async.Synchronization.ReaderWriterLockSlimReadLocker.html
+++ b/api/IPA.Utilities.Async.Synchronization.ReaderWriterLockSlimReadLocker.html
@@ -126,7 +126,7 @@ it is disposed. Create this with Improve this Doc
- View Source
+ View Source
IDisposable.Dispose()
@@ -172,7 +172,7 @@ it is disposed. Create this with Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.Async.Synchronization.ReaderWriterLockSlimUpgradableReadLocker.html b/api/IPA.Utilities.Async.Synchronization.ReaderWriterLockSlimUpgradableReadLocker.html
index 8f05ebc6..e7d63280 100644
--- a/api/IPA.Utilities.Async.Synchronization.ReaderWriterLockSlimUpgradableReadLocker.html
+++ b/api/IPA.Utilities.Async.Synchronization.ReaderWriterLockSlimUpgradableReadLocker.html
@@ -126,7 +126,7 @@ when it is disposed. Create this with Improve this Doc
- View Source
+ View Source
Upgrade()
@@ -165,7 +165,7 @@ upgrading the current thread's lock.
Improve this Doc
- View Source
+ View Source
IDisposable.Dispose()
@@ -211,7 +211,7 @@ upgrading the current thread's lock.
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.Async.Synchronization.ReaderWriterLockSlimWriteLocker.html b/api/IPA.Utilities.Async.Synchronization.ReaderWriterLockSlimWriteLocker.html
index 23b54046..353a3a1f 100644
--- a/api/IPA.Utilities.Async.Synchronization.ReaderWriterLockSlimWriteLocker.html
+++ b/api/IPA.Utilities.Async.Synchronization.ReaderWriterLockSlimWriteLocker.html
@@ -126,7 +126,7 @@ it is disposed. Create this with Improve this Doc
- View Source
+ View Source
IDisposable.Dispose()
@@ -172,7 +172,7 @@ it is disposed. Create this with Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.Async.Synchronization.SemaphoreLocker.html b/api/IPA.Utilities.Async.Synchronization.SemaphoreLocker.html
index 4ebe1d0f..9d87270f 100644
--- a/api/IPA.Utilities.Async.Synchronization.SemaphoreLocker.html
+++ b/api/IPA.Utilities.Async.Synchronization.SemaphoreLocker.html
@@ -126,7 +126,7 @@ Create this with Improve this Doc
- View Source
+ View Source
IDisposable.Dispose()
@@ -172,7 +172,7 @@ Create this with Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.Async.Synchronization.SemaphoreSlimAsyncLocker.html b/api/IPA.Utilities.Async.Synchronization.SemaphoreSlimAsyncLocker.html
index 17866a9b..799d0107 100644
--- a/api/IPA.Utilities.Async.Synchronization.SemaphoreSlimAsyncLocker.html
+++ b/api/IPA.Utilities.Async.Synchronization.SemaphoreSlimAsyncLocker.html
@@ -126,7 +126,7 @@ when it is disposed. Create this with Improve this Doc
- View Source
+ View Source
IDisposable.Dispose()
@@ -172,7 +172,7 @@ when it is disposed. Create this with Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.Async.Synchronization.SemaphoreSlimLocker.html b/api/IPA.Utilities.Async.Synchronization.SemaphoreSlimLocker.html
index 018f111c..19eee126 100644
--- a/api/IPA.Utilities.Async.Synchronization.SemaphoreSlimLocker.html
+++ b/api/IPA.Utilities.Async.Synchronization.SemaphoreSlimLocker.html
@@ -126,7 +126,7 @@ Create this with Improve this Doc
- View Source
+ View Source
IDisposable.Dispose()
@@ -172,7 +172,7 @@ Create this with Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.Async.Synchronization.html b/api/IPA.Utilities.Async.Synchronization.html
index 869280fe..b83ce720 100644
--- a/api/IPA.Utilities.Async.Synchronization.html
+++ b/api/IPA.Utilities.Async.Synchronization.html
@@ -137,7 +137,7 @@ with whichever member you want to use, according to your lock type.
Improve this Doc
- View Source
+ View Source
Lock(Mutex)
@@ -187,7 +187,7 @@ with whichever member you want to use, according to your lock type.
Improve this Doc
- View Source
+ View Source
Lock(Semaphore)
@@ -237,7 +237,7 @@ with whichever member you want to use, according to your lock type.
Improve this Doc
- View Source
+ View Source
Lock(SemaphoreSlim)
@@ -287,7 +287,7 @@ with whichever member you want to use, according to your lock type.
Improve this Doc
- View Source
+ View Source
LockAsync(SemaphoreSlim)
@@ -337,7 +337,7 @@ with whichever member you want to use, according to your lock type.
Improve this Doc
- View Source
+ View Source
LockRead(ReaderWriterLockSlim)
@@ -387,7 +387,7 @@ with whichever member you want to use, according to your lock type.
Improve this Doc
- View Source
+ View Source
LockReadUpgradable(ReaderWriterLockSlim)
@@ -437,7 +437,7 @@ with whichever member you want to use, according to your lock type.
Improve this Doc
- View Source
+ View Source
LockWrite(ReaderWriterLockSlim)
@@ -493,7 +493,7 @@ with whichever member you want to use, according to your lock type.
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.Async.UnityMainThreadTaskScheduler.html b/api/IPA.Utilities.Async.UnityMainThreadTaskScheduler.html
index 8c953c81..8f139fa2 100644
--- a/api/IPA.Utilities.Async.UnityMainThreadTaskScheduler.html
+++ b/api/IPA.Utilities.Async.UnityMainThreadTaskScheduler.html
@@ -155,7 +155,7 @@
Improve this Doc
- View Source
+ View Source
Cancelling
@@ -187,7 +187,7 @@
Improve this Doc
- View Source
+ View Source
Default
@@ -219,7 +219,7 @@
Improve this Doc
- View Source
+ View Source
Factory
@@ -251,7 +251,7 @@
Improve this Doc
- View Source
+ View Source
IsRunning
@@ -283,7 +283,7 @@
Improve this Doc
- View Source
+ View Source
YieldAfterTasks
@@ -315,7 +315,7 @@
Improve this Doc
- View Source
+ View Source
YieldAfterTime
@@ -349,7 +349,7 @@
Improve this Doc
- View Source
+ View Source
Cancel()
@@ -387,7 +387,7 @@ All remaining tasks will be left in the queue.
Improve this Doc
- View Source
+ View Source
Coroutine()
@@ -451,7 +451,7 @@ exit on its own.
Improve this Doc
- View Source
+ View Source
Dispose()
@@ -467,7 +467,7 @@ exit on its own.
Improve this Doc
- View Source
+ View Source
Dispose(Boolean)
@@ -501,7 +501,7 @@ exit on its own.
Improve this Doc
- View Source
+ View Source
GetScheduledTasks()
@@ -551,7 +551,7 @@ exit on its own.
Improve this Doc
- View Source
+ View Source
QueueTask(Task)
@@ -604,7 +604,7 @@ scheduled for this Improve this Doc
- View Source
+ View Source
TryExecuteTaskInline(Task, Boolean)
@@ -707,7 +707,7 @@ make sense to run it inline.
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.CriticalSection.AutoExecuteSection.html b/api/IPA.Utilities.CriticalSection.AutoExecuteSection.html
index 6c20ed82..a8e015eb 100644
--- a/api/IPA.Utilities.CriticalSection.AutoExecuteSection.html
+++ b/api/IPA.Utilities.CriticalSection.AutoExecuteSection.html
@@ -125,7 +125,7 @@
Improve this Doc
- View Source
+ View Source
IDisposable.Dispose()
@@ -166,7 +166,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.CriticalSection.html b/api/IPA.Utilities.CriticalSection.html
index b727d1dc..8d13793c 100644
--- a/api/IPA.Utilities.CriticalSection.html
+++ b/api/IPA.Utilities.CriticalSection.html
@@ -129,7 +129,7 @@
Improve this Doc
- View Source
+ View Source
EnterExecuteSection()
@@ -145,7 +145,7 @@
Improve this Doc
- View Source
+ View Source
ExecuteSection()
@@ -177,7 +177,7 @@
Improve this Doc
- View Source
+ View Source
ExitExecuteSection()
@@ -199,7 +199,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.EnumerableExtensions.html b/api/IPA.Utilities.EnumerableExtensions.html
index bdece191..3427bb59 100644
--- a/api/IPA.Utilities.EnumerableExtensions.html
+++ b/api/IPA.Utilities.EnumerableExtensions.html
@@ -129,7 +129,7 @@
Improve this Doc
- View Source
+ View Source
Append<T>(IEnumerable<T>, T)
@@ -201,7 +201,7 @@
Improve this Doc
- View Source
+ View Source
NonNull<T>(IEnumerable<T>)
@@ -268,7 +268,7 @@
Improve this Doc
- View Source
+ View Source
NonNull<T>(IEnumerable<Nullable<T>>)
@@ -335,7 +335,7 @@
Improve this Doc
- View Source
+ View Source
NonNull<T, U>(IEnumerable<T>, Func<T, U>)
@@ -413,7 +413,7 @@
Improve this Doc
- View Source
+ View Source
Prepend<T>(IEnumerable<T>, T)
@@ -491,7 +491,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.Extensions.html b/api/IPA.Utilities.Extensions.html
index 8ef2b29e..ed3fa84e 100644
--- a/api/IPA.Utilities.Extensions.html
+++ b/api/IPA.Utilities.Extensions.html
@@ -129,7 +129,7 @@
Improve this Doc
- View Source
+ View Source
GetDefault(Type)
@@ -179,7 +179,7 @@
Improve this Doc
- View Source
+ View Source
IsSubPathOf(String, String)
@@ -234,7 +234,7 @@ only matches if the base dir folder name is matched exactly ("c:\foobar\fil
Improve this Doc
- View Source
+ View Source
Right(String, Int32)
@@ -290,7 +290,7 @@ only matches if the base dir folder name is matched exactly ("c:\foobar\fil
Improve this Doc
- View Source
+ View Source
Unwrap(Nullable<Boolean>)
@@ -340,7 +340,7 @@ only matches if the base dir folder name is matched exactly ("c:\foobar\fil
Improve this Doc
- View Source
+ View Source
WithEnding(String, String)
@@ -403,7 +403,7 @@ results in satisfying .EndsWith(ending).
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.FieldAccessor-2.Accessor.html b/api/IPA.Utilities.FieldAccessor-2.Accessor.html
index fba4297c..c3714246 100644
--- a/api/IPA.Utilities.FieldAccessor-2.Accessor.html
+++ b/api/IPA.Utilities.FieldAccessor-2.Accessor.html
@@ -154,7 +154,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.FieldAccessor-2.html b/api/IPA.Utilities.FieldAccessor-2.html
index d6261da1..c3784e17 100644
--- a/api/IPA.Utilities.FieldAccessor-2.html
+++ b/api/IPA.Utilities.FieldAccessor-2.html
@@ -150,7 +150,7 @@
Improve this Doc
- View Source
+ View Source
Access(ref T, String)
@@ -226,7 +226,7 @@
Improve this Doc
- View Source
+ View Source
Get(T, String)
@@ -304,7 +304,7 @@
Improve this Doc
- View Source
+ View Source
Get(ref T, String)
@@ -386,7 +386,7 @@ as it prevents a copy.
Improve this Doc
- View Source
+ View Source
GetAccessor(String)
@@ -452,7 +452,7 @@ as it prevents a copy.
Improve this Doc
- View Source
+ View Source
Set(T, String, U)
@@ -523,7 +523,7 @@ as it prevents a copy.
Improve this Doc
- View Source
+ View Source
Set(ref T, String, U)
@@ -604,7 +604,7 @@ as it prevents a copy.
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.MethodAccessor-2.html b/api/IPA.Utilities.MethodAccessor-2.html
index 7bdc6c44..887e17fd 100644
--- a/api/IPA.Utilities.MethodAccessor-2.html
+++ b/api/IPA.Utilities.MethodAccessor-2.html
@@ -151,7 +151,7 @@
Improve this Doc
- View Source
+ View Source
GetDelegate(String)
@@ -228,7 +228,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.PropertyAccessor-2.Getter.html b/api/IPA.Utilities.PropertyAccessor-2.Getter.html
index b654bbb2..65b12cd0 100644
--- a/api/IPA.Utilities.PropertyAccessor-2.Getter.html
+++ b/api/IPA.Utilities.PropertyAccessor-2.Getter.html
@@ -154,7 +154,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.PropertyAccessor-2.Setter.html b/api/IPA.Utilities.PropertyAccessor-2.Setter.html
index 8637fc7a..3cf9b412 100644
--- a/api/IPA.Utilities.PropertyAccessor-2.Setter.html
+++ b/api/IPA.Utilities.PropertyAccessor-2.Setter.html
@@ -144,7 +144,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.PropertyAccessor-2.html b/api/IPA.Utilities.PropertyAccessor-2.html
index 5095c7cb..23317422 100644
--- a/api/IPA.Utilities.PropertyAccessor-2.html
+++ b/api/IPA.Utilities.PropertyAccessor-2.html
@@ -150,7 +150,7 @@
Improve this Doc
- View Source
+ View Source
Get(T, String)
@@ -227,7 +227,7 @@
Improve this Doc
- View Source
+ View Source
Get(ref T, String)
@@ -308,7 +308,7 @@ it avoids a copy.
Improve this Doc
- View Source
+ View Source
GetGetter(String)
@@ -374,7 +374,7 @@ it avoids a copy.
Improve this Doc
- View Source
+ View Source
GetSetter(String)
@@ -440,7 +440,7 @@ it avoids a copy.
Improve this Doc
- View Source
+ View Source
Set(T, String, U)
@@ -510,7 +510,7 @@ it avoids a copy.
Improve this Doc
- View Source
+ View Source
Set(ref T, String, U)
@@ -586,7 +586,7 @@ it avoids a copy.
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.Ref-1.html b/api/IPA.Utilities.Ref-1.html
index 0203f569..7f717cbe 100644
--- a/api/IPA.Utilities.Ref-1.html
+++ b/api/IPA.Utilities.Ref-1.html
@@ -150,7 +150,7 @@
Improve this Doc
- View Source
+ View Source
Ref(T)
@@ -186,7 +186,7 @@
Improve this Doc
- View Source
+ View Source
Error
@@ -218,7 +218,7 @@
Improve this Doc
- View Source
+ View Source
Value
@@ -252,7 +252,7 @@
Improve this Doc
- View Source
+ View Source
CompareTo(T)
@@ -302,7 +302,7 @@
Improve this Doc
- View Source
+ View Source
CompareTo(Ref<T>)
@@ -352,7 +352,7 @@
Improve this Doc
- View Source
+ View Source
Verify()
@@ -370,7 +370,7 @@
Improve this Doc
- View Source
+ View Source
Implicit(T to Ref<T>)
@@ -420,7 +420,7 @@
Improve this Doc
- View Source
+ View Source
Implicit(Ref<T> to T)
@@ -499,7 +499,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.Ref.html b/api/IPA.Utilities.Ref.html
index 5c1ab155..d9a320a7 100644
--- a/api/IPA.Utilities.Ref.html
+++ b/api/IPA.Utilities.Ref.html
@@ -129,7 +129,7 @@
Improve this Doc
- View Source
+ View Source
Create<T>(T)
@@ -201,7 +201,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.ReflectionUtil.html b/api/IPA.Utilities.ReflectionUtil.html
index 05e70e4d..62c30349 100644
--- a/api/IPA.Utilities.ReflectionUtil.html
+++ b/api/IPA.Utilities.ReflectionUtil.html
@@ -129,7 +129,7 @@
Improve this Doc
- View Source
+ View Source
CopyComponent(Component, Type, GameObject, Type)
@@ -197,7 +197,7 @@
Improve this Doc
- View Source
+ View Source
CopyComponent<T>(Component, GameObject, Type)
@@ -280,7 +280,7 @@
Improve this Doc
- View Source
+ View Source
GetField<U, T>(T, String)
@@ -377,7 +377,7 @@
Improve this Doc
- View Source
+ View Source
GetProperty<U, T>(T, String)
@@ -474,7 +474,7 @@
Improve this Doc
- View Source
+ View Source
InvokeMethod<U, T>(T, String, Object[])
@@ -573,7 +573,7 @@
Improve this Doc
- View Source
+ View Source
SetField<T, U>(T, String, U)
@@ -660,7 +660,7 @@
Improve this Doc
- View Source
+ View Source
SetProperty<T, U>(T, String, U)
@@ -753,7 +753,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.UnityGame.Release.html b/api/IPA.Utilities.UnityGame.Release.html
index 376ee4cc..27b85c5d 100644
--- a/api/IPA.Utilities.UnityGame.Release.html
+++ b/api/IPA.Utilities.UnityGame.Release.html
@@ -142,7 +142,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.UnityGame.html b/api/IPA.Utilities.UnityGame.html
index 7839e742..9c67abe7 100644
--- a/api/IPA.Utilities.UnityGame.html
+++ b/api/IPA.Utilities.UnityGame.html
@@ -129,7 +129,7 @@
Improve this Doc
- View Source
+ View Source
GameVersion
@@ -161,7 +161,7 @@
Improve this Doc
- View Source
+ View Source
InstallPath
@@ -193,7 +193,7 @@
Improve this Doc
- View Source
+ View Source
LibraryPath
@@ -225,7 +225,7 @@
Improve this Doc
- View Source
+ View Source
NativeLibraryPath
@@ -257,7 +257,7 @@
Improve this Doc
- View Source
+ View Source
OnMainThread
@@ -289,7 +289,7 @@
Improve this Doc
- View Source
+ View Source
PluginsPath
@@ -321,7 +321,7 @@
Improve this Doc
- View Source
+ View Source
ReleaseType
@@ -356,7 +356,7 @@
Improve this Doc
- View Source
+ View Source
UserDataPath
@@ -394,7 +394,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.Utils.ScopeGuardObject.html b/api/IPA.Utilities.Utils.ScopeGuardObject.html
index e2b77d9a..a170a446 100644
--- a/api/IPA.Utilities.Utils.ScopeGuardObject.html
+++ b/api/IPA.Utilities.Utils.ScopeGuardObject.html
@@ -128,7 +128,7 @@
Improve this Doc
- View Source
+ View Source
ScopeGuardObject(Action)
@@ -164,7 +164,7 @@
Improve this Doc
- View Source
+ View Source
IDisposable.Dispose()
@@ -209,7 +209,7 @@
Improve this Doc
- View Source
+ View Source
diff --git a/api/IPA.Utilities.Utils.html b/api/IPA.Utilities.Utils.html
index 011cab52..4e321a15 100644
--- a/api/IPA.Utilities.Utils.html
+++ b/api/IPA.Utilities.Utils.html
@@ -129,7 +129,7 @@
Improve this Doc
- View Source
+ View Source
CanUseDateTimeNowSafely
@@ -163,7 +163,7 @@
Improve this Doc
- View Source
+ View Source
ByteArrayToString(Byte[])
@@ -213,7 +213,7 @@
Improve this Doc
- View Source
+ View Source
CopyAll(DirectoryInfo, DirectoryInfo, String, Func<Exception, FileInfo, Boolean>)
@@ -265,7 +265,7 @@
Improve this Doc
- View Source
+ View Source
CurrentTime()
@@ -299,7 +299,7 @@ the value will be greater than the previous result. Not suitable for timing.
Improve this Doc
- View Source
+ View Source
GetRelativePath(String, String)
@@ -355,7 +355,7 @@ the value will be greater than the previous result. Not suitable for timing.
Improve this Doc
- View Source
+ View Source
ScopeGuard(Action)
@@ -408,7 +408,7 @@ the value will be greater than the previous result. Not suitable for timing.
Improve this Doc
- View Source
+ View Source
StringToByteArray(String)
@@ -458,7 +458,7 @@ the value will be greater than the previous result. Not suitable for timing.
Improve this Doc
- View Source
+ View Source
UnsafeCompare(Byte[], Byte[])
@@ -514,7 +514,7 @@ the value will be greater than the previous result. Not suitable for timing.
Improve this Doc
- View Source
+ View Source
VersionCompareNoPrerelease(SemVer.Version, SemVer.Version)
@@ -576,7 +576,7 @@ the value will be greater than the previous result. Not suitable for timing.
Improve this Doc
- View Source
+ View Source
diff --git a/api/index.html b/api/index.html
index b36e0966..e0f0ec80 100644
--- a/api/index.html
+++ b/api/index.html
@@ -90,7 +90,7 @@ Select a namespace and a class on the left to get started.
diff --git a/articles/command-line.html b/articles/command-line.html
index 9f649d9a..df6906a1 100644
--- a/articles/command-line.html
+++ b/articles/command-line.html
@@ -183,7 +183,7 @@ avaliable. If there is, it will be downloaded and installed on the next run. Thi
diff --git a/articles/contributing.html b/articles/contributing.html
index 3bfd93e3..8f1bb431 100644
--- a/articles/contributing.html
+++ b/articles/contributing.html
@@ -117,7 +117,7 @@ should reference the copy in there. When building for Release, it just uses the
diff --git a/articles/dev-resources/description.html b/articles/dev-resources/description.html
index 1acfea18..699e696c 100644
--- a/articles/dev-resources/description.html
+++ b/articles/dev-resources/description.html
@@ -91,7 +91,7 @@
diff --git a/articles/index.html b/articles/index.html
index b6a3e15a..17a70428 100644
--- a/articles/index.html
+++ b/articles/index.html
@@ -94,7 +94,7 @@
diff --git a/articles/start-dev.html b/articles/start-dev.html
index c97c910e..58b2c9a5 100644
--- a/articles/start-dev.html
+++ b/articles/start-dev.html
@@ -517,7 +517,7 @@ namespace Demo
diff --git a/articles/start-user.html b/articles/start-user.html
index 34800d54..3a24e8ec 100644
--- a/articles/start-user.html
+++ b/articles/start-user.html
@@ -161,7 +161,7 @@ the game directory, though your plugins will be moved to a different folder when
diff --git a/index.html b/index.html
index f494dd73..90e9ba26 100644
--- a/index.html
+++ b/index.html
@@ -101,7 +101,7 @@
diff --git a/index.json b/index.json
index 96202673..589f9052 100644
--- a/index.json
+++ b/index.json
@@ -1,133 +1,8 @@
{
- "articles/start-dev.html": {
- "href": "articles/start-dev.html",
- "title": "Making your own mod",
- "keywords": "Making a mod Overview What follows is a very barebones, and frankly not very useful plugin class, even as a starting point, but it should be enough to give a decent idea of how to do quick upgrades of existing mods for those who want to. using System; using IPA; using IPA.Logging; namespace Demo { [Plugin(RuntimeOptions.SingleStartInit)] internal class Plugin { public static Logger log { get; private set; } [Init] public Plugin(Logger logger) { log = logger; log.Debug(\"Basic plugin running!\"); // setup that does not require game code // this is only called once ever, so do once-ever initialization } [OnStart] public void OnStart() { // setup that requires game code } [OnExit] public void OnExit() { // teardown } } } There are basically 4 major concepts here: Logger , the logging system. PluginAttribute , which declares that this class is a plugin and how it should behave. InitAttribute , which declares the constructor (and optionally other methods) as being used for initialization. The lifecycle event attributes OnStartAttribute and OnExitAttribute . I reccommend you read the docs for each of those to get an idea for what they do. It is worth noting that this example is of a mod that cannot be enabled and disabled at runtime, as marked by RuntimeOptions.SingleStartInit . What can be changed Before we go adding more functionality, its worth mentioning that that is not the only way to have a plugin set up. For starters, we can add another method marked [Init] , and it will be called after the constructor, with the same injected parameters, if those are applicable. [Init] public void Init(Logger logger) { // logger will be the same instance as log currently is } If you only had a method marked [Init] , and no constructors marked [Init] , then the plugin type must expose a public default constructor. If multiple constructors are marked [Init] , only the one with the most parameters will be called. You may also mark as many methods as you wish with [Init] and all of them will be called, in no well-defined order on initialization. The same is true for [OnStart] and [OnExit] , respectively. From Scratch If you are starting from scratch, you will need one other thing to get your plugin up and running: a manifest. A basic manifest for that might look a little like this: { \"author\": \"ExampleMan\", \"description\": [ \"A demo plugin written for the BSIPA basic tutorial.\" ], \"gameVersion\": \"1.6.0\", \"id\": null, \"name\": \"Demo Plugin\", \"version\": \"0.0.1\", \"features\": [ ], \"links\": { \"project-home\": \"https://example.com/demo-plugin\", \"project-source\": \"https://github.com/exampleman/demo-plugin/\", \"donate\": \"https://ko-fi.com/exampleman\" }, } There is a lot going on there, but most of it should be decently obvious. Among the things that aren't immediately obvious, are id : This represents a unique identifier for the mod, for use by package managers such as BeatMods. It may be null if the mod chooses not to support those. features : Don't worry about this for now, this is a not-very-simple thing that will be touched on later. In addition, there are a few gatchas with it: description : This can be either a string or an array representing different lines. Markdown formatting is permitted. gameVersion : This should match exactly with the application version of the game being targeted. While this is not enforced by BSIPA, mod repositories like BeatMods may require it match, and it is good practice regardless. version : This must be a valid SemVer version number for your mod. In order for your plugin to load, the manifest must be embedded into the plugin DLL as an embedded resource. This can be set in the Visual Studio file properties panel under Build Action , or in the .csproj like so:
At this point, if the main plugin source file and the manifest are in the same source location, and the plugin class is using the project's default namespace, the plugin will load just fine. However, this is somewhat difficult both to explain and verify, so I recommend you use the the misc.plugin-hint field in your manifest. It can be used like so: \"misc\": { \"plugin-hint\": \"Demo.Plugin\" } With this, you can set plugin-hint to the full typename of your plugin type, and it will correctly load. This is a hint though, and will also try it as a namespace if it fails to find the plugin type. If that fails, it will then fall back to using the manifest's embedded namespace. A less painful description If you want to have a relatively long or well-formatted description for your mod, it may start to become painful to embed it in a list of JSON strings in the manifest. Luckily, there is a way to handle this. The first step is to create another embedded file, but this time it should be a Markdown file, perhaps description.md . It may contain something like this: # Demo Plugin A little demo for the BSIPA modding introduction. --- WE CAN USE MARKDOWN!!! Then, in your manifest description, have the first line be something look like this, but replacing Demo.description.md with the fully namespaced name of the resource: \"#![Demo.description.md]\", Now, when loaded into memory, if anything reads your description metadata, they get the content of that file instead of the content of the manifest key. Configuring your plugin Something that many plugins want and need is configuration. Fortunately, BSIPA provides a fairly powerful configuration system out of the box. To start using it, first create a config class of some kind. Lets take a look at a fairly simple example of this: namespace Demo { public class PluginConfig { public static PluginConfig Instance { get; set; } public int IntValue { get; set; } = 42; public float FloatValue { get; set; } = 3.14159f; } } Notice how the class is both marked public and is not marked sealed . For the moment, both of these are necessary. Also notice that all of the members are properties. While this doesn't change much now, it will be significant in the near future. Now, how do we get this object off of disk? Simple. Back in your plugin class, change your [Init] constructor to look like this: [Init] public Plugin(Logger logger, Config conf) { log = logger; PluginConfig.Instance = conf.Generated(); log.Debug(\"Config loaded\"); // setup that does not require game code } For this to compile, though, we will need to add a few using s: using IPA.Config; using IPA.Config.Stores; With just this, you have your config automatically loading from disk! It's even reloaded when it gets changed mid-game! You can now access it from anywhere by simply accessing PluginConfig.Instance . Make sure you don't accidentally reassign this though, as then you will loose your only interaction with the user's preferences. By default, it will be named the same as is in your plugin's manifest's name field, and will use the built-in json provider. This means that the file that will be loaded from will be UserData/Demo Plugin.json for our demo plugin. You can, however, control both of those by applying attributes to the Config parameter, namely Config.NameAttribute to control the name, and Config.PreferAttribute to control the type. If the type preferences aren't registered though, it will just fall back to JSON. The config's behaviour can be found either later here, or in the remarks section of Generated(Config, Boolean) . At this point, your main plugin file should look something like this: using System; using IPA; using IPA.Logging; using IPA.Config; using IPA.Config.Stores; namespace Demo { [Plugin(RuntimeOptions.SingleStartInit)] internal class Plugin { public static Logger log { get; private set; } [Init] public Plugin(Logger logger, Config conf) { log = logger; PluginConfig.Instance = conf.Generated(); log.Debug(\"Config loaded\"); // setup that does not require game code } [OnStart] public void OnStart() { // setup that requires game code } [OnExit] public void OnExit() { // teardown } } } But what about more complex types than just int and float ? What if you want sub-objects? Those are supported natively, and so are very easy to set up. We just add this to the config class: public class SubThingsObject { public double DoubleValue { get; set; } = 2.718281828459045; } public SubThingsObject SubThings { get; set; } = new SubThingsObject(); Now this object will be automatically read from disk too. But there is one caveat to this: because SubThingsObject is a reference type, SubThings can be null . This is often undesireable. The obvious solution may be to simply change it to a struct , but that is both not supported and potentially undesirable for other reasons we'll get to later. Instead, you can use NonNullableAttribute . Change the definition of SubThings to this: [NonNullable] public SubThingsObject SubThings { get; set; } = new SubThingsObject(); And add this to the using s: using IPA.Config.Stores.Attributes; This attribute tells the serializer that null is an invalid value for the config object. This does, however, require that you take extra care ensure that it never becomes null in code, as that will break the serializer. What about collection types? Well, you can use those too, but you have to use something new: a converter. You may be familiar with them if you have used something like the popular Newtonsoft.Json library before. In BSIPA, they lie in the IPA.Config.Stores.Converters namespace. All converters either implement IValueConverter or derive from ValueConverter . You will mostly use them with an UseConverterAttribute . To use them, we'll want to import them: using System.Collections.Generic; using IPA.Config.Stores; using IPA.Config.Stores.Converters; Then add a field, for example a list field: [UseConverter(typeof(ListConverter))] public List ListValue { get; set; } = new List(); This uses a converter that is provided with BSIPA for List s specifically. It converts the list to an ordered array, which is then written to disk as a JSON array. We could also potentially want use something like a HashSet . Lets start by looking at the definition for such a member, then deciphering what exactly it means: [UseConverter(typeof(CollectionConverter>))] public HashSet SetValue { get; set; } = new HashSet(); The converter we're using here is CollectionConverter , a base type for converters of all kinds of collections. In fact, the ListConverter is derived from this, and uses it for most of its implementation. If a type implements ICollection , CollectionConverter can convert it. It, like most other BSIPA provided aggregate converters, provides a type argument overload CollectionConverter to compose other converters with it to handle unusual element types. Now after all that, your plugin class has not changed, and your config class should look something like this: using System.Collections.Generic; using IPA.Config.Stores; using IPA.Config.Stores.Attributes; using IPA.Config.Stores.Converters; namespace Demo { public class PluginConfig { public static PluginConfig Instance { get; set; } public class SubThingsObject { public double DoubleValue { get; set; } = 2.718281828459045; } public int IntValue { get; set; } = 42; public float FloatValue { get; set; } = 3.14159f; [NonNullable] public SubThingsObject SubThings { get; set; } = new SubThingsObject(); [UseConverter(typeof(ListConverter))] public List ListValue { get; set; } = new List(); [UseConverter(typeof(CollectionConverter>))] public HashSet SetValue { get; set; } = new HashSet(); } } I mentioned earlier that your config file will be automatically reloaded -- but isn't that a bad thing? Doesn't that mean that the config could change under your feet without you having a way to tell? Not so- I just haven't introduced the mechanism. Define a public or protected virtual method named OnReload : public virtual void OnReload() { // this is called whenever the config file is reloaded from disk // use it to tell all of your systems that something has changed // this is called off of the main thread, and is not safe to interact // with Unity in } This method will be called whenever BSIPA reloads your config from disk. When it is called, the object will already have been populated. Use it to notify all of your systems that configuration has changed. Now, we know how to read from disk, and how to use unusual types, but how do we write it back to disk? This config system is based on automatic saving (though we haven't quite gotten to the automatic part), and so the config is written to disk whenever the system recognizes that something has changed. To tell is as much, define a public or protected virtual method named Changed : public virtual void Changed() { // this is called whenever one of the virtual properties is changed // can be called to signal that the content has been changed } This method can be called to tell BSIPA that this config object has changed. Later, when we enable automated change tracking, this will also be called when one of the config's members changes. You can use this body to validate something or, for example, write a timestamp for last change. I just mentioned automated change tracking -- lets add that now. To do this, just make all of the properties virtual, like so: public class SubThingsObject { public virtual double DoubleValue { get; set; } = 2.718281828459045; } public virtual int IntValue { get; set; } = 42; public virtual float FloatValue { get; set; } = 3.14159f; [NonNullable] public virtual SubThingsObject SubThings { get; set; } = new SubThingsObject(); [UseConverter(typeof(ListConverter))] public virtual List ListValue { get; set; } = new List(); [UseConverter(typeof(CollectionConverter>))] public virtual HashSet SetValue { get; set; } = new HashSet(); Now, whenever you assign to any of those properties, your Changed method will be called, and the config object will be marked as changed and will be written to disk. Unfortunately, any properties that can be modified while only using the property getter do not trigger this, and so if you change any collections for example, you will have to manually call Changed . After doing all this, your config class should look something like this: using System.Collections.Generic; using IPA.Config.Stores; using IPA.Config.Stores.Attributes; using IPA.Config.Stores.Converters; namespace Demo { public class PluginConfig { public static PluginConfig Instance { get; set; } public class SubThingsObject { public virtual double DoubleValue { get; set; } = 2.718281828459045; } public virtual int IntValue { get; set; } = 42; public virtual float FloatValue { get; set; } = 3.14159f; [NonNullable] public virtual SubThingsObject SubThings { get; set; } = new SubThingsObject(); [UseConverter(typeof(ListConverter))] public virtual List ListValue { get; set; } = new List(); [UseConverter(typeof(CollectionConverter>))] public virtual HashSet SetValue { get; set; } = new HashSet(); public virtual void Changed() { // this is called whenever one of the virtual properties is changed // can be called to signal that the content has been changed } public virtual void OnReload() { // this is called whenever the config file is reloaded from disk // use it to tell all of your systems that something has changed // this is called off of the main thread, and is not safe to interact // with Unity in } } } There is one more major problem with this though: the main class is still public. Most configs shouldn't be. Lets make it internal. So we make it internal: internal class PluginConfig But to make it actually work, we add this outside the namespace declaration: using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo(GeneratedStore.AssemblyVisibilityTarget)] And now our full file looks like this: using System.Collections.Generic; using System.Runtime.CompilerServices; using IPA.Config.Stores; using IPA.Config.Stores.Attributes; using IPA.Config.Stores.Converters; [assembly: InternalsVisibleTo(GeneratedStore.AssemblyVisibilityTarget)] namespace Demo { internal class PluginConfig { public static PluginConfig Instance { get; set; } public class SubThingsObject { public virtual double DoubleValue { get; set; } = 2.718281828459045; } public virtual int IntValue { get; set; } = 42; public virtual float FloatValue { get; set; } = 3.14159f; [NonNullable] public virtual SubThingsObject SubThings { get; set; } = new SubThingsObject(); [UseConverter(typeof(ListConverter))] public virtual List ListValue { get; set; } = new List(); [UseConverter(typeof(CollectionConverter>))] public virtual HashSet SetValue { get; set; } = new HashSet(); public virtual void Changed() { // this is called whenever one of the virtual properties is changed // can be called to signal that the content has been changed } public virtual void OnReload() { // this is called whenever the config file is reloaded from disk // use it to tell all of your systems that something has changed // this is called off of the main thread, and is not safe to interact // with Unity in } } }"
- },
- "articles/index.html": {
- "href": "articles/index.html",
- "title": "Getting Started",
- "keywords": "Getting Started Starting out is quite simple. Just follow one of the following guides: Installing BSIPA Making your own mod Or, if you want to contribute, see Contributing ."
- },
- "articles/contributing.html": {
- "href": "articles/contributing.html",
- "title": "Contributing",
- "keywords": "Contributing Prerequisites Microsoft Visual Studio 2019 or later (2017 may work, no guarantees) Tools for C/C++ (MSVC) v141 .NET 4.6.1 SDK and .NET 4.7.2 SDK Beat Saber (if developing for .NET 4.5+) Muse Dash (if developing for .NET 3.5) Building Clone with git clone https://github.com/beat-saber-modding-group/BeatSaber-IPA-Reloaded.git --recursive Create a file, bsinstalldir.txt in the solution root. Do NOT create this in Visual Studio; VS adds a BOM at the begginning of the file that the tools used cannot read. It should contain the path to your Beat Saber installation, using forward slashes with a trailing slash. e.g. C:/Program Files (x86)/Steam/steamapps/common/Beat Saber/ If you intend to be doing .NET 3.5 centric development, you must put your Muse Dash installation folder in a file named mdinstalldir.txt that is otherwise identical to bsinstalldir.txt . Open BSIPA.sln in Visual Studio. Choose the configuration that you intend to target during development. Rebuild all. When you make a change somewhere in BSIPA itself, right click on BSIPA-Meta and click Build or Rebuild . This sets up the output in path/to/solution/BSIPA-Meta/bin/ to be what should be copied to the game directory. When making a change to Mod List, you only need to build Mod List itself. Install by copying everything in path/to/solution/BSIPA-ModList/bin/ to your game directory. When building a Debug build, all referenced assemblies from Beat Saber will be copied from the install directory provided in bsinstalldir.txt into Refs/ . Any new references should reference the copy in there. When building for Release, it just uses the files already in Refs/ ."
- },
- "articles/command-line.html": {
- "href": "articles/command-line.html",
- "title": "The Command Line",
- "keywords": "The Command Line BSIPA has 2 command lines: the installer, and the game. Their documentation is below. The Installer ( IPA.exe ) The Game The installer has quite a few options, which are documented inline with the -h or --help flag. This is what it currently looks like: usage: IPA.exe [FLAGS] [ARGUMENTS] flags: -h, --help prints this message -w, --waitfor=PID waits for the specified PID to exit -f, --force forces the operation to go through -r, --revert reverts the IPA installation -n, --nowait doesn't wait for user input after the operation -s, --start=ARGUMENTS uses the specified arguments to start the game after the patch/unpatch -l, --launch uses positional parameters as arguments to start the game after patch/unpatch -R, --no-revert prevents a normal installation from first reverting The game also gets quite a few command line options, though there isn't anything as convenient as a help page for them. Here's a quick list of what they are and what they do. --verbose Makes a console appear with log information at startup. --debug Enables the loading of debug information in Mono. The debugging information must be in the portable PDB format, in the same location as the DLL that it's for. This option also forces BSIPA to show all debug messages in the console, as well as where they were called. This overrides the config settings Debug.ShowDebug and Debug.ShowCallSource . --trace Enables trace level messages. By default, they do not ever enter the message queue, and thus cost almost nothing. When this or the config option is used, they are added and logged with the same rules as Debug messages. This overrides the config setting Debug.ShowTrace . --mono-debug Enables the built-in Mono soft debugger engine. By default, it acts as a client, and requires that there be a soft debugger server running on port 10000 on localhost . Implies --debug . --server Does nothing on its own. When paired with --mono-debug , this option makes the Mono soft debugger act in server mode. It begins listening on port 10000 on any address, and will pause startup (with no window) until a debugger is connected. I recommend using SDB, but that is a command line debugger and a lot of people don't care for those. --no-yeet Disables mod yeeting. By default, whenever BSIPA detects that the game is now running a newer version than previous runs, it will move all mods to another folder and not load them. (They still get checked for updates though.) When this is enabled, that behaviour is disabled. Overrides the config setting YeetMods . --condense-logs Reduces the number of log files BSIPA will output for a given session. By default, BSIPA will create a subfolder in the Logs folder for each mod sublog, as well as each mod. This disables that behaviour, and restricts it to only create a global log and mod logs. Overrides the config setting Debug.CondenseModLogs . --no-updates Disables automatic updating. By default, BSIPA will check BeatMods for all of the loaded mods to see if there is a new version avaliable. If there is, it will be downloaded and installed on the next run. This flag disables that behaviour. Overrides the config settings Updates.AutoCheckUpdates and Updates.AutoUpdate ."
- },
- "index.html": {
- "href": "index.html",
- "title": "BSIPA - Home",
- "keywords": "BSIPA - The Unity mod injector for the new age (pending confirmation). Assuming, that is, that Unity 2017 is \"new age\". How To Install See Installing How To Uninstall See Uninstalling Arguments See The Command Line . How To Develop See Developing for more information. How To Keep The Game Patched BSIPA will automatically repatch the game when it updates, as long as winhttp.dll is present in the install directory."
- },
- "api/index.html": {
- "href": "api/index.html",
- "title": "BSIPA API Documentation",
- "keywords": "BSIPA API Documentation Welcome to the full class documentation! To see guides, head over to the Articles tab . Select a namespace and a class on the left to get started."
- },
- "other_api/config/schema.html": {
- "href": "other_api/config/schema.html",
- "title": "Configuration File Schema",
- "keywords": "Configuration File Schema { \"definitions\": { \"Debug_\": { \"type\": \"object\", \"properties\": { \"ShowCallSource\": { \"type\": \"boolean\" }, \"ShowDebug\": { \"type\": \"boolean\" }, \"CondenseModLogs\": { \"type\": \"boolean\" }, \"ShowHandledErrorStackTraces\": { \"type\": \"boolean\" }, \"HideMessagesForPerformance\": { \"type\": \"boolean\" }, \"HideLogThreshold\": { \"type\": \"integer\" }, \"ShowTrace\": { \"type\": \"boolean\" } }, \"required\": [ \"ShowCallSource\", \"ShowDebug\", \"CondenseModLogs\", \"ShowHandledErrorStackTraces\", \"HideMessagesForPerformance\", \"HideLogThreshold\", \"ShowTrace\" ] }, \"Updates_\": { \"type\": \"object\", \"properties\": { \"AutoUpdate\": { \"type\": \"boolean\" }, \"AutoCheckUpdates\": { \"type\": \"boolean\" } }, \"required\": [ \"AutoUpdate\", \"AutoCheckUpdates\" ] } }, \"type\": \"object\", \"properties\": { \"Regenerate\": { \"type\": \"boolean\" }, \"Updates\": { \"$ref\": \"#/definitions/Updates_\" }, \"Debug\": { \"$ref\": \"#/definitions/Debug_\" }, \"YeetMods\": { \"type\": \"boolean\" }, \"GameAssemblies\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } }, \"LastGameVersion\": { \"type\": \"string\" } }, \"required\": [ \"Regenerate\", \"Updates\", \"Debug\", \"YeetMods\", \"GameAssemblies\" ] }"
- },
- "other_api/index.html": {
- "href": "other_api/index.html",
- "title": "",
- "keywords": ""
- },
- "articles/start-user.html": {
- "href": "articles/start-user.html",
- "title": "Installing BSIPA",
- "keywords": "Installing BSIPA Note This guide assumes that you are starting completely fresh. Grab a release from the GitHub Releases page . Make sure to download one of the BSIPA-*.zip s, as ModList.zip contains the Beat Saber mod for showing your mods in-game, not the loader itself. Note The specific ZIP you need to download varies on the game you will be patching. For example, if you are patching Beat Saber, you will need the file BSIPA-x64-Net4.zip . This is because Beat Saber is a 64 bit game running .NET 4. If you are patching Muse Dash, however, you nee the file BSIPA-x86-Net3.zip . Tip There are a few tricks for figuring out which file you need. If the game has a folder called MonoBleedingEdge in the install directory, then you need one of the Net4 builds. To determine which build to use, right click on the game executable, go to the Compatability tab, check the Run this program in compatability mode for checkbox, and look and see if the dropdown has any Windows XP emulation options. If it does, the application is 32 bit, and you need to get one of the x86 builds. Otherwise, get one of the x64 builds. Make sure to uncheck that checkbox before leaving the menu. Extract the zip into your game installation directory. There should now be a folder named IPA and a file named IPA.exe in the same folder as the game executable. For example, if you are installing BSIPA in Beat Saber, it might look like this after extraction: Run IPA.exe by double clicking it. A console window should pop up, and eventually, a gold message asking you to press a key will appear. Here is an example of a successful installation: Note In some cases, this may fail, something like this: In these cases, try dragging the game executable over IPA.exe . After installing, your game directory should look something like this: Note At this point it is recommended to run the game once before continuing, to ensure that things are installed correctly. The first run should create a UserData folder with Beat Saber IPA.json and Disabled Mods.json , as well as a Logs folder with several subfolders with their own files. If these are created, then the installation was very likely successful. Tip If you are not installing BSIPA on Beat Saber, you probably want to go to the config at UserData/Beat Saber IPA.json and set both of the following to false : { ... \"Updates\": { \"AutoUpdate\": false, \"AutoCheckUpdates\": false }, ... } Tip Depending on the game, you may have to set the config member GameAssemblies to the names of the assemblies that the game uses for BSIPA to virtualize them properly. For Beat Saber distrobutions, this will be set according to the version that it was built for by default. Otherwise, it will contain just Assembly-CSharp.dll since most games use that default. From here, just place all of your plugins in the Plugins folder, and you're all set! Many plugins will come in a zip such that the root of the zip represents the game install directory, so all you may have to do is extract the plugin into the game installation folder. Note For some reason, by default, Wine does not load DLLs in quite the same way that Windows does, causing issues with the injection. To make the injection work with Wine, winhttp has to have a DLL override set to native,builtin . This can be set either through Protontricks, or with the following .reg file. REGEDIT4 [HKEY_CURRENT_USER\\Software\\Wine\\DllOverrides] \"winhttp\"=\"native,builtin\" For Steam there's a per-game Wine prefix under compatdata . In this case SteamLibrary/steamapps/compatdata/620980/pfx/user.reg . Changes to this file will likely be ovewritten when the game updates or if local files are validated through Steam. Thats really all you have to do! The installation should persist across game updates for as long as winhttp.dll is present in the game directory, though your plugins will be moved to a different folder when it does update so things don't break horribly. Uninstalling Uninstalling is fairly simple, and can be done one of two ways: Drag the game executable over IPA.exe while holding Alt . Open a command prompt or Powershell terminal and run .\\IPA.exe -rn . (see The Command Line for what those options mean)"
- },
- "articles/dev-resources/description.html": {
- "href": "articles/dev-resources/description.html",
- "title": "Demo Plugin",
- "keywords": "Demo Plugin A little demo for the BSIPA modding introduction. WE CAN USE MARKDOWN!!!"
- },
- "api/IPA.Utilities.PropertyAccessor-2.Getter.html": {
- "href": "api/IPA.Utilities.PropertyAccessor-2.Getter.html",
- "title": "Delegate PropertyAccessor.Getter",
- "keywords": "Delegate PropertyAccessor.Getter A getter for a property. Namespace : IPA.Utilities Assembly : IPA.Loader.dll Syntax public delegate U Getter(ref T obj); Parameters Type Name Description T obj the object it is a member of Returns Type Description U the value of the property Extension Methods ReflectionUtil.SetField(T, String, U) ReflectionUtil.GetField(T, String) ReflectionUtil.SetProperty(T, String, U) ReflectionUtil.GetProperty(T, String) ReflectionUtil.InvokeMethod(T, String, Object[])"
- },
- "api/IPA.Utilities.MethodAccessor-2.html": {
- "href": "api/IPA.Utilities.MethodAccessor-2.html",
- "title": "Class MethodAccessor",
- "keywords": "Class MethodAccessor A type containing utilities for calling non-public methods on an object. Inheritance Object MethodAccessor Inherited Members Object.ToString() Object.Equals(Object) Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetHashCode() Object.GetType() Object.MemberwiseClone() Namespace : IPA.Utilities Assembly : IPA.Loader.dll Syntax public static class MethodAccessor where TDelegate : Delegate Type Parameters Name Description T the type to find the methods on TDelegate the delegate type to create, and to use as a signature to search for Methods | Improve this Doc View Source GetDelegate(String) Gets a delegate to the named method with the signature specified by TDelegate . Declaration public static TDelegate GetDelegate(string name) Parameters Type Name Description String name the name of the method to get Returns Type Description TDelegate a delegate that can call the specified method Exceptions Type Condition MissingMethodException if name does not represent the name of a method with the given signature ArgumentException if the method found returns a type incompatable with the return type of TDelegate"
- },
- "api/IPA.Utilities.CriticalSection.html": {
- "href": "api/IPA.Utilities.CriticalSection.html",
- "title": "Class CriticalSection",
- "keywords": "Class CriticalSection Provides utilities for managing various critical sections. Inheritance Object CriticalSection Inherited Members Object.ToString() Object.Equals(Object) Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetHashCode() Object.GetType() Object.MemberwiseClone() Namespace : IPA.Utilities Assembly : IPA.Loader.dll Syntax public static class CriticalSection Methods | Improve this Doc View Source EnterExecuteSection() Enters a critical execution section. Does not nest. Declaration public static void EnterExecuteSection() | Improve this Doc View Source ExecuteSection() Creates an CriticalSection.AutoExecuteSection for automated management of an execute section. Declaration public static CriticalSection.AutoExecuteSection ExecuteSection() Returns Type Description CriticalSection.AutoExecuteSection the new CriticalSection.AutoExecuteSection that manages the section | Improve this Doc View Source ExitExecuteSection() Exits a critical execution section. Does not nest. Declaration public static void ExitExecuteSection()"
- },
- "api/IPA.Utilities.CriticalSection.AutoExecuteSection.html": {
- "href": "api/IPA.Utilities.CriticalSection.AutoExecuteSection.html",
- "title": "Struct CriticalSection.AutoExecuteSection",
- "keywords": "Struct CriticalSection.AutoExecuteSection A struct that allows using blocks to manage an execute section. Implements IDisposable Inherited Members ValueType.Equals(Object) ValueType.GetHashCode() ValueType.ToString() Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetType() Namespace : IPA.Utilities Assembly : IPA.Loader.dll Syntax public struct AutoExecuteSection : IDisposable Explicit Interface Implementations | Improve this Doc View Source IDisposable.Dispose() Declaration void IDisposable.Dispose() Implements System.IDisposable Extension Methods ReflectionUtil.SetField(T, String, U) ReflectionUtil.GetField(T, String) ReflectionUtil.SetProperty(T, String, U) ReflectionUtil.GetProperty(T, String) ReflectionUtil.InvokeMethod(T, String, Object[])"
- },
- "api/IPA.Utilities.Async.html": {
- "href": "api/IPA.Utilities.Async.html",
- "title": "",
- "keywords": "Classes Coroutines A class providing coroutine helpers. SingleThreadTaskScheduler A single-threaded task scheduler that runs all of its tasks on the same thread. Synchronization Utilities for inter-thread synchronization. All Locker method acquire their object immediately, and should only be used with langword_csharp_using to automatically release them. UnityMainThreadTaskScheduler A task scheduler that runs tasks on the Unity main thread via coroutines. Structs Synchronization.MutexLocker A locker for a Mutex that automatically releases when it is disposed. Create this with Lock(Mutex) . Synchronization.ReaderWriterLockSlimReadLocker A locker for a read lock on a ReaderWriterLockSlim that automatically releases when it is disposed. Create this with LockRead(ReaderWriterLockSlim) . Synchronization.ReaderWriterLockSlimUpgradableReadLocker A locker for an upgradable read lock on a ReaderWriterLockSlim that automatically releases when it is disposed. Create this with LockReadUpgradable(ReaderWriterLockSlim) . Synchronization.ReaderWriterLockSlimWriteLocker A locker for a write lock on a ReaderWriterLockSlim that automatically releases when it is disposed. Create this with LockWrite(ReaderWriterLockSlim) . Synchronization.SemaphoreLocker A locker for a Semaphore that automatically releases when it is disposed. Create this with Lock(Semaphore) . Synchronization.SemaphoreSlimAsyncLocker A locker for a SemaphoreSlim that was created asynchronously and automatically releases when it is disposed. Create this with LockAsync(SemaphoreSlim) . Synchronization.SemaphoreSlimLocker A locker for a SemaphoreSlim that automatically releases when it is disposed. Create this with Lock(SemaphoreSlim) ."
- },
- "api/IPA.Utilities.Async.UnityMainThreadTaskScheduler.html": {
- "href": "api/IPA.Utilities.Async.UnityMainThreadTaskScheduler.html",
- "title": "Class UnityMainThreadTaskScheduler",
- "keywords": "Class UnityMainThreadTaskScheduler A task scheduler that runs tasks on the Unity main thread via coroutines. Inheritance Object TaskScheduler UnityMainThreadTaskScheduler Implements IDisposable Inherited Members TaskScheduler.TryDequeue(Task) TaskScheduler.FromCurrentSynchronizationContext() TaskScheduler.TryExecuteTask(Task) TaskScheduler.MaximumConcurrencyLevel TaskScheduler.Current TaskScheduler.Id TaskScheduler.UnobservedTaskException Object.ToString() Object.Equals(Object) Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetHashCode() Object.GetType() Object.MemberwiseClone() Namespace : IPA.Utilities.Async Assembly : IPA.Loader.dll Syntax public class UnityMainThreadTaskScheduler : TaskScheduler, IDisposable Properties | Improve this Doc View Source Cancelling Gets whether or not this scheduler is in the process of shutting down. Declaration public bool Cancelling { get; } Property Value Type Description Boolean true if the scheduler is shutting down, false otherwise | Improve this Doc View Source Default Gets the default main thread scheduler that is managed by BSIPA. Declaration public static TaskScheduler Default { get; } Property Value Type Description TaskScheduler a scheduler that is managed by BSIPA | Improve this Doc View Source Factory Gets a factory for creating tasks on Default . Declaration public static TaskFactory Factory { get; } Property Value Type Description TaskFactory a factory for creating tasks on the default scheduler | Improve this Doc View Source IsRunning Gets whether or not this scheduler is currently executing tasks. Declaration public bool IsRunning { get; } Property Value Type Description Boolean true if the scheduler is running, false otherwise | Improve this Doc View Source YieldAfterTasks Gets or sets the number of tasks to execute before yielding back to Unity. Declaration public int YieldAfterTasks { get; set; } Property Value Type Description Int32 the number of tasks to execute per resume | Improve this Doc View Source YieldAfterTime Gets or sets the amount of time to execute tasks for before yielding back to Unity. Default is 0.5ms. Declaration public TimeSpan YieldAfterTime { get; set; } Property Value Type Description TimeSpan the amount of time to execute tasks for before yielding back to Unity Methods | Improve this Doc View Source Cancel() Cancels the scheduler. If the scheduler is currently executing tasks, that batch will finish first. All remaining tasks will be left in the queue. Declaration public void Cancel() Exceptions Type Condition ObjectDisposedException if this scheduler is disposed InvalidOperationException if the scheduler is not running | Improve this Doc View Source Coroutine() When used as a Unity coroutine, runs the scheduler. Otherwise, this is an invalid call. Declaration public IEnumerator Coroutine() Returns Type Description IEnumerator a Unity coroutine Remarks Do not ever call UnityEngine.MonoBehaviour.StopCoroutine(System.Collections.IEnumerator) on this coroutine, nor UnityEngine.MonoBehaviour.StopAllCoroutines() on the behaviour hosting this coroutine. This has no way to detect this, and this object will become invalid. If you need to stop this coroutine, first call Cancel() , then wait for it to exit on its own. Exceptions Type Condition ObjectDisposedException if this scheduler is disposed InvalidOperationException if the scheduler is already running | Improve this Doc View Source Dispose() Disposes this object. This puts the object into an unusable state. Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Disposes this object. Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description Boolean disposing whether or not to dispose managed objects | Improve this Doc View Source GetScheduledTasks() Throws a NotSupportedException . Declaration protected override IEnumerable GetScheduledTasks() Returns Type Description IEnumerable < Task > nothing Overrides TaskScheduler.GetScheduledTasks() Exceptions Type Condition NotSupportedException Always. | Improve this Doc View Source QueueTask(Task) Queues a given Task to this scheduler. The Task must> be scheduled for this TaskScheduler by the runtime. Declaration protected override void QueueTask(Task task) Parameters Type Name Description Task task the Task to queue Overrides TaskScheduler.QueueTask(Task) Exceptions Type Condition ObjectDisposedException Thrown if this object has already been disposed. | Improve this Doc View Source TryExecuteTaskInline(Task, Boolean) Rejects any attempts to execute a task inline. Declaration protected override bool TryExecuteTaskInline(Task task, bool taskWasPreviouslyQueued) Parameters Type Name Description Task task the task to attempt to execute Boolean taskWasPreviouslyQueued whether the task was previously queued to this scheduler Returns Type Description Boolean false Overrides TaskScheduler.TryExecuteTaskInline(Task, Boolean) Remarks This task scheduler always runs its tasks on the thread that it manages, therefore it doesn't make sense to run it inline. Exceptions Type Condition ObjectDisposedException Thrown if this object has already been disposed. Implements System.IDisposable Extension Methods ReflectionUtil.SetField(T, String, U) ReflectionUtil.GetField(T, String) ReflectionUtil.SetProperty(T, String, U) ReflectionUtil.GetProperty(T, String) ReflectionUtil.InvokeMethod(T, String, Object[])"
- },
- "api/IPA.Utilities.Async.Synchronization.ReaderWriterLockSlimWriteLocker.html": {
- "href": "api/IPA.Utilities.Async.Synchronization.ReaderWriterLockSlimWriteLocker.html",
- "title": "Struct Synchronization.ReaderWriterLockSlimWriteLocker",
- "keywords": "Struct Synchronization.ReaderWriterLockSlimWriteLocker A locker for a write lock on a ReaderWriterLockSlim that automatically releases when it is disposed. Create this with LockWrite(ReaderWriterLockSlim) . Implements IDisposable Inherited Members ValueType.Equals(Object) ValueType.GetHashCode() ValueType.ToString() Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetType() Namespace : IPA.Utilities.Async Assembly : IPA.Loader.dll Syntax public struct ReaderWriterLockSlimWriteLocker : IDisposable Explicit Interface Implementations | Improve this Doc View Source IDisposable.Dispose() Declaration void IDisposable.Dispose() Implements System.IDisposable Extension Methods ReflectionUtil.SetField(T, String, U) ReflectionUtil.GetField(T, String) ReflectionUtil.SetProperty(T, String, U) ReflectionUtil.GetProperty(T, String) ReflectionUtil.InvokeMethod(T, String, Object[]) See Also Synchronization LockWrite(ReaderWriterLockSlim)"
- },
- "api/IPA.Utilities.Async.Synchronization.ReaderWriterLockSlimUpgradableReadLocker.html": {
- "href": "api/IPA.Utilities.Async.Synchronization.ReaderWriterLockSlimUpgradableReadLocker.html",
- "title": "Struct Synchronization.ReaderWriterLockSlimUpgradableReadLocker",
- "keywords": "Struct Synchronization.ReaderWriterLockSlimUpgradableReadLocker A locker for an upgradable read lock on a ReaderWriterLockSlim that automatically releases when it is disposed. Create this with LockReadUpgradable(ReaderWriterLockSlim) . Implements IDisposable Inherited Members ValueType.Equals(Object) ValueType.GetHashCode() ValueType.ToString() Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetType() Namespace : IPA.Utilities.Async Assembly : IPA.Loader.dll Syntax public struct ReaderWriterLockSlimUpgradableReadLocker : IDisposable Methods | Improve this Doc View Source Upgrade() Creates a locker for a write lock on the ReaderWriterLockSlim associated with this locker, upgrading the current thread's lock. Declaration public Synchronization.ReaderWriterLockSlimWriteLocker Upgrade() Returns Type Description Synchronization.ReaderWriterLockSlimWriteLocker a locker for the new write lock See Also Synchronization Explicit Interface Implementations | Improve this Doc View Source IDisposable.Dispose() Declaration void IDisposable.Dispose() Implements System.IDisposable Extension Methods ReflectionUtil.SetField(T, String, U) ReflectionUtil.GetField(T, String) ReflectionUtil.SetProperty(T, String, U) ReflectionUtil.GetProperty(T, String) ReflectionUtil.InvokeMethod(T, String, Object[]) See Also Synchronization LockReadUpgradable(ReaderWriterLockSlim)"
- },
- "api/IPA.Utilities.Async.Synchronization.ReaderWriterLockSlimReadLocker.html": {
- "href": "api/IPA.Utilities.Async.Synchronization.ReaderWriterLockSlimReadLocker.html",
- "title": "Struct Synchronization.ReaderWriterLockSlimReadLocker",
- "keywords": "Struct Synchronization.ReaderWriterLockSlimReadLocker A locker for a read lock on a ReaderWriterLockSlim that automatically releases when it is disposed. Create this with LockRead(ReaderWriterLockSlim) . Implements IDisposable Inherited Members ValueType.Equals(Object) ValueType.GetHashCode() ValueType.ToString() Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetType() Namespace : IPA.Utilities.Async Assembly : IPA.Loader.dll Syntax public struct ReaderWriterLockSlimReadLocker : IDisposable Explicit Interface Implementations | Improve this Doc View Source IDisposable.Dispose() Declaration void IDisposable.Dispose() Implements System.IDisposable Extension Methods ReflectionUtil.SetField(T, String, U) ReflectionUtil.GetField(T, String) ReflectionUtil.SetProperty(T, String, U) ReflectionUtil.GetProperty(T, String) ReflectionUtil.InvokeMethod(T, String, Object[]) See Also Synchronization LockRead(ReaderWriterLockSlim)"
- },
- "api/IPA.Utilities.Async.Synchronization.MutexLocker.html": {
- "href": "api/IPA.Utilities.Async.Synchronization.MutexLocker.html",
- "title": "Struct Synchronization.MutexLocker",
- "keywords": "Struct Synchronization.MutexLocker A locker for a Mutex that automatically releases when it is disposed. Create this with Lock(Mutex) . Implements IDisposable Inherited Members ValueType.Equals(Object) ValueType.GetHashCode() ValueType.ToString() Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetType() Namespace : IPA.Utilities.Async Assembly : IPA.Loader.dll Syntax public struct MutexLocker : IDisposable Explicit Interface Implementations | Improve this Doc View Source IDisposable.Dispose() Declaration void IDisposable.Dispose() Implements System.IDisposable Extension Methods ReflectionUtil.SetField(T, String, U) ReflectionUtil.GetField(T, String) ReflectionUtil.SetProperty(T, String, U) ReflectionUtil.GetProperty(T, String) ReflectionUtil.InvokeMethod(T, String, Object[]) See Also Synchronization Lock(Mutex)"
- },
- "api/IPA.Utilities.AlmostVersion.StoredAs.html": {
- "href": "api/IPA.Utilities.AlmostVersion.StoredAs.html",
- "title": "Enum AlmostVersion.StoredAs",
- "keywords": "Enum AlmostVersion.StoredAs Represents a storage type of either parsed object or raw String . Namespace : IPA.Utilities Assembly : IPA.Loader.dll Syntax public enum StoredAs Fields Name Description SemVer The version was stored as a . String The version was stored as a String . Extension Methods ReflectionUtil.SetField(String, U) ReflectionUtil.GetField(String) ReflectionUtil.SetProperty(String, U) ReflectionUtil.GetProperty(String) ReflectionUtil.InvokeMethod(String, Object[])"
- },
- "api/IPA.RuntimeOptions.html": {
- "href": "api/IPA.RuntimeOptions.html",
- "title": "Enum RuntimeOptions",
- "keywords": "Enum RuntimeOptions Options that a plugin must specify to describe how it expects to be run. Namespace : IPA Assembly : IPA.Loader.dll Syntax public enum RuntimeOptions Fields Name Description DynamicInit Indicates that this plugin supports runtime enabling and disabling. When this is set, the plugin may be disabled at reasonable points during runtime. As with SingleStartInit , it will be initialized and enabled with the game if it is enabled on startup, and disabled with the game if it is enabled on shutdown. When a plugin with this set is enabled mid-game, the first time it is enabled, its initialization methods will be called, then its enable methods. All subsequent enables will NOT re-initialize, however the enable methods will be called. When a plugin with this set is disabled mid-game, the plugin instance will NOT be destroyed, and will instead be re-used for subsequent enables. The plugin is expected to handle this gracefully, and behave in a way that makes sense. SingleStartInit Indicates that this plugin expects to be initialized and enabled with the game, and disabled with the game. With this option set, whether or not the plugin is disabled during a given run is constant for that entire run. See Also PluginAttribute InitAttribute OnEnableAttribute OnDisableAttribute OnStartAttribute OnExitAttribute Extension Methods ReflectionUtil.SetField(String, U) ReflectionUtil.GetField(String) ReflectionUtil.SetProperty(String, U) ReflectionUtil.GetProperty(String) ReflectionUtil.InvokeMethod(String, Object[])"
- },
- "api/IPA.PluginAttribute.html": {
- "href": "api/IPA.PluginAttribute.html",
- "title": "Class PluginAttribute",
- "keywords": "Class PluginAttribute Marks a class as being a BSIPA plugin. Inheritance Object Attribute PluginAttribute Implements _Attribute Inherited Members Attribute.GetCustomAttributes(MemberInfo, Type) Attribute.GetCustomAttributes(MemberInfo, Type, Boolean) Attribute.GetCustomAttributes(MemberInfo) Attribute.GetCustomAttributes(MemberInfo, Boolean) Attribute.IsDefined(MemberInfo, Type) Attribute.IsDefined(MemberInfo, Type, Boolean) Attribute.GetCustomAttribute(MemberInfo, Type) Attribute.GetCustomAttribute(MemberInfo, Type, Boolean) Attribute.GetCustomAttributes(ParameterInfo) Attribute.GetCustomAttributes(ParameterInfo, Type) Attribute.GetCustomAttributes(ParameterInfo, Type, Boolean) Attribute.GetCustomAttributes(ParameterInfo, Boolean) Attribute.IsDefined(ParameterInfo, Type) Attribute.IsDefined(ParameterInfo, Type, Boolean) Attribute.GetCustomAttribute(ParameterInfo, Type) Attribute.GetCustomAttribute(ParameterInfo, Type, Boolean) Attribute.GetCustomAttributes(Module, Type) Attribute.GetCustomAttributes(Module) Attribute.GetCustomAttributes(Module, Boolean) Attribute.GetCustomAttributes(Module, Type, Boolean) Attribute.IsDefined(Module, Type) Attribute.IsDefined(Module, Type, Boolean) Attribute.GetCustomAttribute(Module, Type) Attribute.GetCustomAttribute(Module, Type, Boolean) Attribute.GetCustomAttributes(Assembly, Type) Attribute.GetCustomAttributes(Assembly, Type, Boolean) Attribute.GetCustomAttributes(Assembly) Attribute.GetCustomAttributes(Assembly, Boolean) Attribute.IsDefined(Assembly, Type) Attribute.IsDefined(Assembly, Type, Boolean) Attribute.GetCustomAttribute(Assembly, Type) Attribute.GetCustomAttribute(Assembly, Type, Boolean) Attribute.Equals(Object) Attribute.GetHashCode() Attribute.Match(Object) Attribute.IsDefaultAttribute() Attribute._Attribute.GetTypeInfoCount(UInt32) Attribute._Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) Attribute._Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) Attribute._Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) Attribute.TypeId Object.ToString() Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetType() Object.MemberwiseClone() Namespace : IPA Assembly : IPA.Loader.dll Syntax [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)] public sealed class PluginAttribute : Attribute, _Attribute Constructors | Improve this Doc View Source PluginAttribute(RuntimeOptions) Initializes a PluginAttribute with the given RuntimeOptions to indicate the runtime capabilities of the plugin. Declaration public PluginAttribute(RuntimeOptions runtimeOptions) Parameters Type Name Description RuntimeOptions runtimeOptions the options to use for this plugin Properties | Improve this Doc View Source RuntimeOptions The RuntimeOptions passed into the constructor of this attribute. Declaration public RuntimeOptions RuntimeOptions { get; } Property Value Type Description RuntimeOptions Implements System.Runtime.InteropServices._Attribute Extension Methods ReflectionUtil.SetField(T, String, U) ReflectionUtil.GetField(T, String) ReflectionUtil.SetProperty(T, String, U) ReflectionUtil.GetProperty(T, String) ReflectionUtil.InvokeMethod(T, String, Object[]) See Also InitAttribute OnEnableAttribute OnDisableAttribute OnStartAttribute OnExitAttribute"
- },
- "api/IPA.OnStartAttribute.html": {
- "href": "api/IPA.OnStartAttribute.html",
- "title": "Class OnStartAttribute",
- "keywords": "Class OnStartAttribute Indicates that the target method should be called when the game starts. Inheritance Object Attribute OnStartAttribute Implements _Attribute Inherited Members Attribute.GetCustomAttributes(MemberInfo, Type) Attribute.GetCustomAttributes(MemberInfo, Type, Boolean) Attribute.GetCustomAttributes(MemberInfo) Attribute.GetCustomAttributes(MemberInfo, Boolean) Attribute.IsDefined(MemberInfo, Type) Attribute.IsDefined(MemberInfo, Type, Boolean) Attribute.GetCustomAttribute(MemberInfo, Type) Attribute.GetCustomAttribute(MemberInfo, Type, Boolean) Attribute.GetCustomAttributes(ParameterInfo) Attribute.GetCustomAttributes(ParameterInfo, Type) Attribute.GetCustomAttributes(ParameterInfo, Type, Boolean) Attribute.GetCustomAttributes(ParameterInfo, Boolean) Attribute.IsDefined(ParameterInfo, Type) Attribute.IsDefined(ParameterInfo, Type, Boolean) Attribute.GetCustomAttribute(ParameterInfo, Type) Attribute.GetCustomAttribute(ParameterInfo, Type, Boolean) Attribute.GetCustomAttributes(Module, Type) Attribute.GetCustomAttributes(Module) Attribute.GetCustomAttributes(Module, Boolean) Attribute.GetCustomAttributes(Module, Type, Boolean) Attribute.IsDefined(Module, Type) Attribute.IsDefined(Module, Type, Boolean) Attribute.GetCustomAttribute(Module, Type) Attribute.GetCustomAttribute(Module, Type, Boolean) Attribute.GetCustomAttributes(Assembly, Type) Attribute.GetCustomAttributes(Assembly, Type, Boolean) Attribute.GetCustomAttributes(Assembly) Attribute.GetCustomAttributes(Assembly, Boolean) Attribute.IsDefined(Assembly, Type) Attribute.IsDefined(Assembly, Type, Boolean) Attribute.GetCustomAttribute(Assembly, Type) Attribute.GetCustomAttribute(Assembly, Type, Boolean) Attribute.Equals(Object) Attribute.GetHashCode() Attribute.Match(Object) Attribute.IsDefaultAttribute() Attribute._Attribute.GetTypeInfoCount(UInt32) Attribute._Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) Attribute._Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) Attribute._Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) Attribute.TypeId Object.ToString() Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetType() Object.MemberwiseClone() Namespace : IPA Assembly : IPA.Loader.dll Syntax [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public sealed class OnStartAttribute : Attribute, _Attribute, IEdgeLifecycleAttribute Remarks This attribute is interchangable with OnEnableAttribute , and is treated identically. They are seperate to allow plugin code to more clearly describe the intent of the methods. Typically, this will be used when the RuntimeOptions parameter of the plugins's PluginAttribute is SingleStartInit . The method marked by this attribute will always be called from the Unity main thread. Implements System.Runtime.InteropServices._Attribute Extension Methods ReflectionUtil.SetField(T, String, U) ReflectionUtil.GetField(T, String) ReflectionUtil.SetProperty(T, String, U) ReflectionUtil.GetProperty(T, String) ReflectionUtil.InvokeMethod(T, String, Object[]) See Also PluginAttribute OnEnableAttribute"
- },
- "api/IPA.Old.IPlugin.html": {
- "href": "api/IPA.Old.IPlugin.html",
- "title": "Interface IPlugin",
- "keywords": "Interface IPlugin Interface for generic Illusion unity plugins. Every class that implements this will be loaded if the DLL is placed in Plugins. Namespace : IPA.Old Assembly : IPA.Loader.dll Syntax [Obsolete(\"When building plugins for Beat Saber, use IBeatSaberPlugin\")] public interface IPlugin Properties | Improve this Doc View Source Name Gets the name of the plugin. Declaration string Name { get; } Property Value Type Description String | Improve this Doc View Source Version Gets the version of the plugin. Declaration string Version { get; } Property Value Type Description String Methods | Improve this Doc View Source OnApplicationQuit() Gets invoked when the application is closed. Declaration void OnApplicationQuit() | Improve this Doc View Source OnApplicationStart() Gets invoked when the application is started. Declaration void OnApplicationStart() | Improve this Doc View Source OnFixedUpdate() Gets invoked on ever physics update. Declaration void OnFixedUpdate() | Improve this Doc View Source OnLevelWasInitialized(Int32) Gets invoked after the first update cycle after a level was loaded. Declaration void OnLevelWasInitialized(int level) Parameters Type Name Description Int32 level | Improve this Doc View Source OnLevelWasLoaded(Int32) Gets invoked whenever a level is loaded. Declaration void OnLevelWasLoaded(int level) Parameters Type Name Description Int32 level | Improve this Doc View Source OnUpdate() Gets invoked on every graphic update. Declaration void OnUpdate() Extension Methods ReflectionUtil.SetField(T, String, U) ReflectionUtil.GetField(T, String) ReflectionUtil.SetProperty(T, String, U) ReflectionUtil.GetProperty(T, String) ReflectionUtil.InvokeMethod(T, String, Object[])"
- },
- "api/IPA.Old.IEnhancedPlugin.html": {
- "href": "api/IPA.Old.IEnhancedPlugin.html",
- "title": "Interface IEnhancedPlugin",
- "keywords": "Interface IEnhancedPlugin An enhanced version of the standard IPA plugin. Inherited Members IPlugin.Name IPlugin.Version IPlugin.OnApplicationStart() IPlugin.OnApplicationQuit() IPlugin.OnLevelWasLoaded(Int32) IPlugin.OnLevelWasInitialized(Int32) IPlugin.OnUpdate() IPlugin.OnFixedUpdate() Namespace : IPA.Old Assembly : IPA.Loader.dll Syntax [Obsolete(\"When building plugins for Beat Saber, use IPA.IEnhancedPlugin\")] public interface IEnhancedPlugin : IPlugin Properties | Improve this Doc View Source Filter Gets a list of executables this plugin should be executed on (without the file ending) Declaration string[] Filter { get; } Property Value Type Description String [] Examples { \"PlayClub\", \"PlayClubStudio\" } Methods | Improve this Doc View Source OnLateUpdate() Called after Update. Declaration void OnLateUpdate() Extension Methods ReflectionUtil.SetField(T, String, U) ReflectionUtil.GetField(T, String) ReflectionUtil.SetProperty(T, String, U) ReflectionUtil.GetProperty(T, String) ReflectionUtil.InvokeMethod(T, String, Object[])"
+ "api/IPA.Logging.Logger.html": {
+ "href": "api/IPA.Logging.Logger.html",
+ "title": "Class Logger",
+ "keywords": "Class Logger The logger base class. Provides the format for console logs. Inheritance Object Logger StandardLogger Inherited Members Object.ToString() Object.Equals(Object) Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetHashCode() Object.GetType() Object.MemberwiseClone() Namespace : IPA.Logging Assembly : IPA.Loader.dll Syntax public abstract class Logger Properties | Improve this Doc View Source LogFormat The standard format for log messages. Declaration public static string LogFormat { get; protected set; } Property Value Type Description String the format for the standard loggers to print in Methods | Improve this Doc View Source Critical(Exception) Sends an exception as a critical message. Equivalent to Log(Level.Critical, e); Declaration public virtual void Critical(Exception e) Parameters Type Name Description Exception e the exception to log See Also Log(Logger.Level, Exception) | Improve this Doc View Source Critical(String) Sends a critical message. Equivalent to Log(Level.Critical, message); Declaration public virtual void Critical(string message) Parameters Type Name Description String message the message to log See Also Log(Logger.Level, String) | Improve this Doc View Source Debug(Exception) Sends an exception as a debug message. Equivalent to Log(Level.Debug, e); Declaration public virtual void Debug(Exception e) Parameters Type Name Description Exception e the exception to log See Also Log(Logger.Level, Exception) | Improve this Doc View Source Debug(String) Sends a debug message. Equivalent to Log(Level.Debug, message); Declaration public virtual void Debug(string message) Parameters Type Name Description String message the message to log See Also Log(Logger.Level, String) | Improve this Doc View Source Error(Exception) Sends an exception as an error message. Equivalent to Log(Level.Error, e); Declaration public virtual void Error(Exception e) Parameters Type Name Description Exception e the exception to log See Also Log(Logger.Level, Exception) | Improve this Doc View Source Error(String) Sends an error message. Equivalent to Log(Level.Error, message); Declaration public virtual void Error(string message) Parameters Type Name Description String message the message to log See Also Log(Logger.Level, String) | Improve this Doc View Source Info(Exception) Sends an exception as an info message. Equivalent to Log(Level.Info, e); Declaration public virtual void Info(Exception e) Parameters Type Name Description Exception e the exception to log See Also Log(Logger.Level, Exception) | Improve this Doc View Source Info(String) Sends an info message. Equivalent to Log(Level.Info, message); Declaration public virtual void Info(string message) Parameters Type Name Description String message the message to log See Also Log(Logger.Level, String) | Improve this Doc View Source Log(Logger.Level, Exception) A basic log function taking an exception to log. Declaration public virtual void Log(Logger.Level level, Exception e) Parameters Type Name Description Logger.Level level the level of the message Exception e the exception to log | Improve this Doc View Source Log(Logger.Level, String) A basic log function. Declaration public abstract void Log(Logger.Level level, string message) Parameters Type Name Description Logger.Level level the level of the message String message the message to log | Improve this Doc View Source Notice(Exception) Sends an exception as a notice message. Equivalent to Log(Level.Notice, e); Declaration public virtual void Notice(Exception e) Parameters Type Name Description Exception e the exception to log See Also Log(Logger.Level, Exception) | Improve this Doc View Source Notice(String) Sends a notice message. Equivalent to Log(Level.Notice, message); Declaration public virtual void Notice(string message) Parameters Type Name Description String message the message to log See Also Log(Logger.Level, String) | Improve this Doc View Source Trace(Exception) Sends an exception as a trace message. Equivalent to Log(Level.Trace, e); Declaration public virtual void Trace(Exception e) Parameters Type Name Description Exception e the exception to log See Also Log(Logger.Level, Exception) | Improve this Doc View Source Trace(String) Sends a trace message. Equivalent to Log(Level.Trace, message); Declaration public virtual void Trace(string message) Parameters Type Name Description String message the message to log See Also Log(Logger.Level, String) | Improve this Doc View Source Warn(Exception) Sends an exception as a warning message. Equivalent to Log(Level.Warning, e); Declaration public virtual void Warn(Exception e) Parameters Type Name Description Exception e the exception to log See Also Log(Logger.Level, Exception) | Improve this Doc View Source Warn(String) Sends a warning message. Equivalent to Log(Level.Warning, message); Declaration public virtual void Warn(string message) Parameters Type Name Description String message the message to log See Also Log(Logger.Level, String) Extension Methods LoggerExtensions.GetChildLogger(Logger, String) ReflectionUtil.SetField(T, String, U) ReflectionUtil.GetField(T, String) ReflectionUtil.SetProperty(T, String, U) ReflectionUtil.GetProperty(T, String) ReflectionUtil.InvokeMethod(T, String, Object[])"
},
"api/IPA.Loader.PluginMetadata.html": {
"href": "api/IPA.Loader.PluginMetadata.html",
@@ -149,56 +24,36 @@
"title": "Class Feature",
"keywords": "Class Feature The root interface for a mod Feature. Inheritance Object Feature Inherited Members Object.ToString() Object.Equals(Object) Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetHashCode() Object.GetType() Object.MemberwiseClone() Namespace : IPA.Loader.Features Assembly : IPA.Loader.dll Syntax public abstract class Feature Remarks Avoid storing any data in any subclasses. If you do, it may result in a failure to load the feature. Properties | Improve this Doc View Source InvalidMessage The message to be logged when the feature is not valid for a plugin. This should also be set whenever either BeforeLoad(PluginMetadata) or BeforeInit(PluginMetadata) returns false. Declaration public virtual string InvalidMessage { get; protected set; } Property Value Type Description String the message to show when the feature is marked invalid | Improve this Doc View Source StoreOnPlugin Defines whether or not this feature will be accessible from the plugin metadata once loaded. Declaration protected virtual bool StoreOnPlugin { get; } Property Value Type Description Boolean true if this Feature will be stored on the plugin metadata, false otherwise Methods | Improve this Doc View Source AfterInit(PluginMetadata) Called after a plugin has been fully initialized, whether or not there is an Init method. This should never throw an exception. Declaration public virtual void AfterInit(PluginMetadata plugin) Parameters Type Name Description PluginMetadata plugin the plugin that was just initialized | Improve this Doc View Source AfterInit(PluginMetadata, Object) Called after a plugin has been fully initialized, whether or not there is an Init method. This should never throw an exception. Declaration public virtual void AfterInit(PluginMetadata plugin, object pluginInstance) Parameters Type Name Description PluginMetadata plugin the plugin that was just initialized Object pluginInstance the instance of the plugin being initialized | Improve this Doc View Source BeforeInit(PluginMetadata) Called before a plugin's Init method is called. This will not be called if there is no Init method. This should never throw an exception. An exception will abort the loading of the plugin with an error. Declaration public virtual bool BeforeInit(PluginMetadata plugin) Parameters Type Name Description PluginMetadata plugin the plugin to be initialized Returns Type Description Boolean whether or not to call the Init method | Improve this Doc View Source BeforeLoad(PluginMetadata) Called before a plugin is loaded. This should never throw an exception. An exception will abort the loading of the plugin with an error. Declaration public virtual bool BeforeLoad(PluginMetadata plugin) Parameters Type Name Description PluginMetadata plugin the plugin about to be loaded Returns Type Description Boolean whether or not the plugin should be loaded Remarks The assembly will still be loaded, but the plugin will not be constructed if this returns false . Any features it defines, for example, will still be loaded. | Improve this Doc View Source Evaluate() Evaluates the Feature for use in conditional meta-Features. This should be re-calculated on every call, unless it can be proven to not change. This will be called on every feature that returns true from Initialize(PluginMetadata, String[]) Declaration public virtual bool Evaluate() Returns Type Description Boolean the truthiness of the Feature. | Improve this Doc View Source Initialize(PluginMetadata, String[]) Initializes the feature with the parameters provided in the definition. Note: When no parenthesis are provided, parameters is an empty array. Declaration public abstract bool Initialize(PluginMetadata meta, string[] parameters) Parameters Type Name Description PluginMetadata meta the metadata of the plugin that is being prepared String [] parameters the parameters passed to the feature definition, or null Returns Type Description Boolean true if the feature is valid for the plugin, false otherwise Remarks This gets called BEFORE your Init method. Returning false does not prevent the plugin from being loaded. It simply prevents the feature from being used. | Improve this Doc View Source RequireLoaded(PluginMetadata) Ensures a plugin's assembly is loaded. Do not use unless you need to. Declaration protected void RequireLoaded(PluginMetadata plugin) Parameters Type Name Description PluginMetadata plugin the plugin to ensure is loaded. Extension Methods ReflectionUtil.SetField(T, String, U) ReflectionUtil.GetField(T, String) ReflectionUtil.SetProperty(T, String, U) ReflectionUtil.GetProperty(T, String) ReflectionUtil.InvokeMethod(T, String, Object[])"
},
- "api/IPA.Config.html": {
- "href": "api/IPA.Config.html",
- "title": "",
- "keywords": "Classes Config An abstraction of a config file on disk, which handles synchronizing between a memory representation and the disk representation. Config.NameAttribute Specifies a preferred config name, instead of using the plugin's name. Config.PreferAttribute Specifies that a particular parameter is preferred to use a particular IConfigProvider . If it is not available, also specifies backups. If none are available, the default is used. ConfigProvider A wrapper for an IConfigProvider and the FileInfo to use with it. ModPrefs Allows to get and set preferences for your mod. Interfaces IConfigProvider An interface for configuration providers. IConfigStore A storage for a config structure. IModPrefs Allows to get and set preferences for your mod."
- },
- "api/IPA.Config.Stores.html": {
- "href": "api/IPA.Config.Stores.html",
- "title": "",
- "keywords": "Classes GeneratedStore A class providing an extension for Config to make it easy to use generated config stores. ValueConverter A strongly-typed IValueConverter . Interfaces IValueConverter The base interface for a value converter for use by objects generated by Generated(Config, Boolean) ."
- },
- "api/IPA.Config.Stores.GeneratedStore.html": {
- "href": "api/IPA.Config.Stores.GeneratedStore.html",
- "title": "Class GeneratedStore",
- "keywords": "Class GeneratedStore A class providing an extension for Config to make it easy to use generated config stores. Inheritance Object GeneratedStore Inherited Members Object.ToString() Object.Equals(Object) Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetHashCode() Object.GetType() Object.MemberwiseClone() Namespace : IPA.Config.Stores Assembly : IPA.Loader.dll Syntax public static class GeneratedStore Fields | Improve this Doc View Source AssemblyVisibilityTarget The name of the assembly that internals must be visible to to allow internal protection. Declaration public const string AssemblyVisibilityTarget = \"IPA.Config.Generated\" Field Value Type Description String Methods | Improve this Doc View Source Create() Creates a generated store outside of the context of the config system. Declaration public static T Create() where T : class Returns Type Description T a generated instance of T implementing functionality described by Generated(Config, Boolean) Type Parameters Name Description T the type to wrap Remarks See Generated(Config, Boolean) for more information about how it behaves. See Also Generated(Config, Boolean) | Improve this Doc View Source Generated(Config, Boolean) Creates a generated IConfigStore of type T , registers it to the Config object, and returns it. This also forces a synchronous config load via LoadSync() if loadSync is true . Declaration public static T Generated(this Config cfg, bool loadSync = true) where T : class Parameters Type Name Description Config cfg the Config to register to Boolean loadSync whether to synchronously load the content, or trigger an async load Returns Type Description T a generated instance of T as a special IConfigStore Type Parameters Name Description T the type to wrap Remarks T must be a public non- sealed class. It can also be internal, but in that case, then your assembly must have the following attribute to allow the generated code to reference it. [assembly: InternalsVisibleTo(IPA.Config.Stores.GeneratedStore.AssemblyVisibilityTarget)] Only fields and properties that are public or protected will be considered, and only properties where both the getter and setter are public or protected are considered. Any fields or properties with an IgnoreAttribute applied to them are also ignored. Having properties be virtual is not strictly necessary, however it allows the generated type to keep track of changes and lock around them so that the config will auto-save. All of the attributes in the IPA.Config.Stores.Attributes namespace are handled as described by them. If the T declares a public or protected, virtual method Changed() , then that method may be called to artificially signal to the runtime that the content of the object has changed. That method will also be called after the write locks are released when a property is set anywhere in the owning tree. This will only be called on the outermost generated object of the config structure, even if the change being signaled is somewhere deep into the tree. TODO: is this a good idea? Similarly, T can declare a public or protected, virtual method OnReload() , which will be called on the filesystem reader thread after the object has been repopulated with new data values. It will be called after the write lock for this object is released. This will only be called on the outermost generated object of the config structure. Similarly, T can declare a public or protected, virtual method CopyFrom(ConfigType) (the first parameter is the type it is defined on), which may be called to copy the properties from another object of its type easily, and more importantly, as only one change. Its body will be executed after the values have been copied. Similarly, T can declare a public or protected, virtual method ChangeTransaction() returning IDisposable , which may be called to get an object representing a transactional change. This may be used to change a lot of properties at once without triggering a save multiple times. Ideally, this is used in a langword_csharp_using block or declaration. The IDisposable returned from your implementation will have its Dispose() called after Changed() is called, but before the write lock is released. Unless you have a very good reason to use the nested IDisposable , avoid it. If T is marked with NotifyPropertyChangesAttribute , the resulting object will implement INotifyPropertyChanged . Similarly, if T implements INotifyPropertyChanged , the resulting object will implement it and notify it too."
- },
- "api/IPA.Config.Stores.Converters.html": {
- "href": "api/IPA.Config.Stores.Converters.html",
- "title": "",
- "keywords": "Classes CollectionConverter A base class for all ICollection type converters, providing most of the functionality. CollectionConverter A CollectionConverter which default constructs a converter for use as the value converter. Converter Provides utility functions for custom converters. Converter Provides generic utilities for converters for certain types. CustomObjectConverter A ValueConverter for objects normally serialized to config via Generated(Config, Boolean) . IListConverter A CollectionConverter for an IList , creating a List when deserializing. IListConverter An IListConverter which default constructs a converter for use as the value converter. ISetConverter A CollectionConverter for an ISet , creating a HashSet when deserializing. ISetConverter An ISetConverter which default constructs a converter for use as the value converter. ListConverter A CollectionConverter for a List . ListConverter A ListConverter which default constructs a converter for use as the value converter. NullableConverter A converter for a Nullable . NullableConverter A converter for a Nullable that default-constructs a converter of type TConverter to use as the underlying converter. Use this in the UseConverterAttribute ."
+ "api/IPA.Config.Stores.Converters.ListConverter-2.html": {
+ "href": "api/IPA.Config.Stores.Converters.ListConverter-2.html",
+ "title": "Class ListConverter",
+ "keywords": "Class ListConverter A ListConverter which default constructs a converter for use as the value converter. Inheritance Object ValueConverter < List > CollectionConverter > ListConverter ListConverter Implements IValueConverter Inherited Members ListConverter.Create(Int32, Object) CollectionConverter>.BaseConverter CollectionConverter>.Create(Int32, Object) CollectionConverter>.PopulateFromValue(List, List, Object) CollectionConverter>.FromValue(Value, Object) CollectionConverter>.ToValue(List, Object) ValueConverter>.ToValue(List, Object) ValueConverter>.FromValue(Value, Object) ValueConverter>.IValueConverter.ToValue(Object, Object) ValueConverter>.IValueConverter.FromValue(Value, Object) ValueConverter>.IValueConverter.Type Object.ToString() Object.Equals(Object) Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetHashCode() Object.GetType() Object.MemberwiseClone() Namespace : IPA.Config.Stores.Converters Assembly : IPA.Loader.dll Syntax public sealed class ListConverter : ListConverter, IValueConverter where TConverter : ValueConverter, new() Type Parameters Name Description T the value type of the collection TConverter the type of the converter to use for T Constructors | Improve this Doc View Source ListConverter() Creates an ListConverter using a default constructed TConverter element type. Equivalent to calling ListConverter(ValueConverter) with a default-constructed TConverter . Declaration public ListConverter() See Also ListConverter(ValueConverter) Implements IValueConverter Extension Methods ReflectionUtil.SetField(T, String, U) ReflectionUtil.GetField(T, String) ReflectionUtil.SetProperty(T, String, U) ReflectionUtil.GetProperty(T, String) ReflectionUtil.InvokeMethod(T, String, Object[]) See Also ListConverter "
},
- "api/IPA.Config.Stores.Attributes.IgnoreAttribute.html": {
- "href": "api/IPA.Config.Stores.Attributes.IgnoreAttribute.html",
- "title": "Class IgnoreAttribute",
- "keywords": "Class IgnoreAttribute Causes a field or property in an object being wrapped by Generated(Config, Boolean) to be ignored during serialization and deserialization. Inheritance Object Attribute IgnoreAttribute Implements _Attribute Inherited Members Attribute.GetCustomAttributes(MemberInfo, Type) Attribute.GetCustomAttributes(MemberInfo, Type, Boolean) Attribute.GetCustomAttributes(MemberInfo) Attribute.GetCustomAttributes(MemberInfo, Boolean) Attribute.IsDefined(MemberInfo, Type) Attribute.IsDefined(MemberInfo, Type, Boolean) Attribute.GetCustomAttribute(MemberInfo, Type) Attribute.GetCustomAttribute(MemberInfo, Type, Boolean) Attribute.GetCustomAttributes(ParameterInfo) Attribute.GetCustomAttributes(ParameterInfo, Type) Attribute.GetCustomAttributes(ParameterInfo, Type, Boolean) Attribute.GetCustomAttributes(ParameterInfo, Boolean) Attribute.IsDefined(ParameterInfo, Type) Attribute.IsDefined(ParameterInfo, Type, Boolean) Attribute.GetCustomAttribute(ParameterInfo, Type) Attribute.GetCustomAttribute(ParameterInfo, Type, Boolean) Attribute.GetCustomAttributes(Module, Type) Attribute.GetCustomAttributes(Module) Attribute.GetCustomAttributes(Module, Boolean) Attribute.GetCustomAttributes(Module, Type, Boolean) Attribute.IsDefined(Module, Type) Attribute.IsDefined(Module, Type, Boolean) Attribute.GetCustomAttribute(Module, Type) Attribute.GetCustomAttribute(Module, Type, Boolean) Attribute.GetCustomAttributes(Assembly, Type) Attribute.GetCustomAttributes(Assembly, Type, Boolean) Attribute.GetCustomAttributes(Assembly) Attribute.GetCustomAttributes(Assembly, Boolean) Attribute.IsDefined(Assembly, Type) Attribute.IsDefined(Assembly, Type, Boolean) Attribute.GetCustomAttribute(Assembly, Type) Attribute.GetCustomAttribute(Assembly, Type, Boolean) Attribute.Equals(Object) Attribute.GetHashCode() Attribute.Match(Object) Attribute.IsDefaultAttribute() Attribute._Attribute.GetTypeInfoCount(UInt32) Attribute._Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) Attribute._Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) Attribute._Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) Attribute.TypeId Object.ToString() Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetType() Object.MemberwiseClone() Namespace : IPA.Config.Stores.Attributes Assembly : IPA.Loader.dll Syntax [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false, Inherited = true)] public sealed class IgnoreAttribute : Attribute, _Attribute Implements System.Runtime.InteropServices._Attribute Extension Methods ReflectionUtil.SetField(T, String, U) ReflectionUtil.GetField(T, String) ReflectionUtil.SetProperty(T, String, U) ReflectionUtil.GetProperty(T, String) ReflectionUtil.InvokeMethod(T, String, Object[])"
+ "api/IPA.Config.Stores.Converters.ListConverter-1.html": {
+ "href": "api/IPA.Config.Stores.Converters.ListConverter-1.html",
+ "title": "Class ListConverter",
+ "keywords": "Class ListConverter A CollectionConverter for a List . Inheritance Object ValueConverter < List > CollectionConverter > ListConverter ListConverter Implements IValueConverter Inherited Members CollectionConverter>.BaseConverter CollectionConverter>.Create(Int32, Object) CollectionConverter>.PopulateFromValue(List, List, Object) CollectionConverter>.FromValue(Value, Object) CollectionConverter>.ToValue(List, Object) ValueConverter>.ToValue(List, Object) ValueConverter>.FromValue(Value, Object) ValueConverter>.IValueConverter.ToValue(Object, Object) ValueConverter>.IValueConverter.FromValue(Value, Object) ValueConverter>.IValueConverter.Type Object.ToString() Object.Equals(Object) Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetHashCode() Object.GetType() Object.MemberwiseClone() Namespace : IPA.Config.Stores.Converters Assembly : IPA.Loader.dll Syntax public class ListConverter : CollectionConverter>, IValueConverter Type Parameters Name Description T the element type of the List Constructors | Improve this Doc View Source ListConverter() Creates an ListConverter using the default converter for T . Declaration public ListConverter() See Also CollectionConverter() | Improve this Doc View Source ListConverter(ValueConverter) Creates an ListConverter using the specified underlying converter for values. Declaration public ListConverter(ValueConverter underlying) Parameters Type Name Description ValueConverter underlying the underlying ValueConverter to use for the values Methods | Improve this Doc View Source Create(Int32, Object) Creates a new List for deserialization. Declaration protected override List Create(int size, object parent) Parameters Type Name Description Int32 size the size to initialize it to Object parent the object that will own the new object Returns Type Description List the new List Overrides IPA.Config.Stores.Converters.CollectionConverter>.Create(System.Int32, System.Object) Implements IValueConverter Extension Methods ReflectionUtil.SetField(T, String, U) ReflectionUtil.GetField(T, String) ReflectionUtil.SetProperty(T, String, U) ReflectionUtil.GetProperty(T, String) ReflectionUtil.InvokeMethod(T, String, Object[]) See Also CollectionConverter "
},
- "api/IPA.Config.ModPrefs.html": {
- "href": "api/IPA.Config.ModPrefs.html",
- "title": "Class ModPrefs",
- "keywords": "Class ModPrefs Allows to get and set preferences for your mod. Inheritance Object ModPrefs Implements IModPrefs Inherited Members Object.ToString() Object.Equals(Object) Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetHashCode() Object.GetType() Object.MemberwiseClone() Namespace : IPA.Config Assembly : IPA.Loader.dll Syntax [Obsolete(\"Uses IniFile, which uses 16 bit system calls. Use BS Utils INI system for now.\")] public class ModPrefs : IModPrefs Constructors | Improve this Doc View Source ModPrefs(PluginMetadata) Constructs a ModPrefs object for the provide plugin. Declaration public ModPrefs(PluginMetadata plugin) Parameters Type Name Description PluginMetadata plugin the plugin to get the preferences file for Methods | Improve this Doc View Source GetBool(String, String, Boolean, Boolean) Gets a bool from the ini. Declaration public static bool GetBool(string section, string name, bool defaultValue = false, bool autoSave = false) Parameters Type Name Description String section Section of the key. String name Name of the key. Boolean defaultValue Value that should be used when no value is found. Boolean autoSave Whether or not the default value should be written if no value is found. Returns Type Description Boolean | Improve this Doc View Source GetFloat(String, String, Single, Boolean) Gets a float from the ini. Declaration public static float GetFloat(string section, string name, float defaultValue = 0F, bool autoSave = false) Parameters Type Name Description String section Section of the key. String name Name of the key. Single defaultValue Value that should be used when no value is found. Boolean autoSave Whether or not the default value should be written if no value is found. Returns Type Description Single | Improve this Doc View Source GetInt(String, String, Int32, Boolean) Gets an int from the ini. Declaration public static int GetInt(string section, string name, int defaultValue = 0, bool autoSave = false) Parameters Type Name Description String section Section of the key. String name Name of the key. Int32 defaultValue Value that should be used when no value is found. Boolean autoSave Whether or not the default value should be written if no value is found. Returns Type Description Int32 | Improve this Doc View Source GetString(String, String, String, Boolean) Gets a string from the ini. Declaration public static string GetString(string section, string name, string defaultValue = \"\", bool autoSave = false) Parameters Type Name Description String section Section of the key. String name Name of the key. String defaultValue Value that should be used when no value is found. Boolean autoSave Whether or not the default value should be written if no value is found. Returns Type Description String | Improve this Doc View Source HasKey(String, String) Checks whether or not a key exists in the ini. Declaration public static bool HasKey(string section, string name) Parameters Type Name Description String section Section of the key. String name Name of the key. Returns Type Description Boolean | Improve this Doc View Source SetBool(String, String, Boolean) Sets a bool in the ini. Declaration public static void SetBool(string section, string name, bool value) Parameters Type Name Description String section Section of the key. String name Name of the key. Boolean value Value that should be written. | Improve this Doc View Source SetFloat(String, String, Single) Sets a float in the ini. Declaration public static void SetFloat(string section, string name, float value) Parameters Type Name Description String section Section of the key. String name Name of the key. Single value Value that should be written. | Improve this Doc View Source SetInt(String, String, Int32) Sets an int in the ini. Declaration public static void SetInt(string section, string name, int value) Parameters Type Name Description String section Section of the key. String name Name of the key. Int32 value Value that should be written. | Improve this Doc View Source SetString(String, String, String) Sets a string in the ini. Declaration public static void SetString(string section, string name, string value) Parameters Type Name Description String section Section of the key. String name Name of the key. String value Value that should be written. Explicit Interface Implementations | Improve this Doc View Source IModPrefs.GetBool(String, String, Boolean, Boolean) Declaration bool IModPrefs.GetBool(string section, string name, bool defaultValue, bool autoSave) Parameters Type Name Description String section String name Boolean defaultValue Boolean autoSave Returns Type Description Boolean | Improve this Doc View Source IModPrefs.GetFloat(String, String, Single, Boolean) Declaration float IModPrefs.GetFloat(string section, string name, float defaultValue, bool autoSave) Parameters Type Name Description String section String name Single defaultValue Boolean autoSave Returns Type Description Single | Improve this Doc View Source IModPrefs.GetInt(String, String, Int32, Boolean) Declaration int IModPrefs.GetInt(string section, string name, int defaultValue, bool autoSave) Parameters Type Name Description String section String name Int32 defaultValue Boolean autoSave Returns Type Description Int32 | Improve this Doc View Source IModPrefs.GetString(String, String, String, Boolean) Declaration string IModPrefs.GetString(string section, string name, string defaultValue, bool autoSave) Parameters Type Name Description String section String name String defaultValue Boolean autoSave Returns Type Description String | Improve this Doc View Source IModPrefs.HasKey(String, String) Declaration bool IModPrefs.HasKey(string section, string name) Parameters Type Name Description String section String name Returns Type Description Boolean | Improve this Doc View Source IModPrefs.SetBool(String, String, Boolean) Declaration void IModPrefs.SetBool(string section, string name, bool value) Parameters Type Name Description String section String name Boolean value | Improve this Doc View Source IModPrefs.SetFloat(String, String, Single) Declaration void IModPrefs.SetFloat(string section, string name, float value) Parameters Type Name Description String section String name Single value | Improve this Doc View Source IModPrefs.SetInt(String, String, Int32) Declaration void IModPrefs.SetInt(string section, string name, int value) Parameters Type Name Description String section String name Int32 value | Improve this Doc View Source IModPrefs.SetString(String, String, String) Declaration void IModPrefs.SetString(string section, string name, string value) Parameters Type Name Description String section String name String value Implements IModPrefs Extension Methods ReflectionUtil.SetField(T, String, U) ReflectionUtil.GetField(T, String) ReflectionUtil.SetProperty(T, String, U) ReflectionUtil.GetProperty(T, String) ReflectionUtil.InvokeMethod(T, String, Object[])"
+ "api/IPA.Config.Stores.Attributes.UseConverterAttribute.html": {
+ "href": "api/IPA.Config.Stores.Attributes.UseConverterAttribute.html",
+ "title": "Class UseConverterAttribute",
+ "keywords": "Class UseConverterAttribute Indicates that a given field or property in an object being wrapped by Generated(Config, Boolean) should be serialized and deserialized using the provided converter instead of the default mechanism. Inheritance Object Attribute UseConverterAttribute Implements _Attribute Inherited Members Attribute.GetCustomAttributes(MemberInfo, Type) Attribute.GetCustomAttributes(MemberInfo, Type, Boolean) Attribute.GetCustomAttributes(MemberInfo) Attribute.GetCustomAttributes(MemberInfo, Boolean) Attribute.IsDefined(MemberInfo, Type) Attribute.IsDefined(MemberInfo, Type, Boolean) Attribute.GetCustomAttribute(MemberInfo, Type) Attribute.GetCustomAttribute(MemberInfo, Type, Boolean) Attribute.GetCustomAttributes(ParameterInfo) Attribute.GetCustomAttributes(ParameterInfo, Type) Attribute.GetCustomAttributes(ParameterInfo, Type, Boolean) Attribute.GetCustomAttributes(ParameterInfo, Boolean) Attribute.IsDefined(ParameterInfo, Type) Attribute.IsDefined(ParameterInfo, Type, Boolean) Attribute.GetCustomAttribute(ParameterInfo, Type) Attribute.GetCustomAttribute(ParameterInfo, Type, Boolean) Attribute.GetCustomAttributes(Module, Type) Attribute.GetCustomAttributes(Module) Attribute.GetCustomAttributes(Module, Boolean) Attribute.GetCustomAttributes(Module, Type, Boolean) Attribute.IsDefined(Module, Type) Attribute.IsDefined(Module, Type, Boolean) Attribute.GetCustomAttribute(Module, Type) Attribute.GetCustomAttribute(Module, Type, Boolean) Attribute.GetCustomAttributes(Assembly, Type) Attribute.GetCustomAttributes(Assembly, Type, Boolean) Attribute.GetCustomAttributes(Assembly) Attribute.GetCustomAttributes(Assembly, Boolean) Attribute.IsDefined(Assembly, Type) Attribute.IsDefined(Assembly, Type, Boolean) Attribute.GetCustomAttribute(Assembly, Type) Attribute.GetCustomAttribute(Assembly, Type, Boolean) Attribute.Equals(Object) Attribute.GetHashCode() Attribute.Match(Object) Attribute.IsDefaultAttribute() Attribute._Attribute.GetTypeInfoCount(UInt32) Attribute._Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) Attribute._Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) Attribute._Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) Attribute.TypeId Object.ToString() Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetType() Object.MemberwiseClone() Namespace : IPA.Config.Stores.Attributes Assembly : IPA.Loader.dll Syntax [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false, Inherited = true)] public sealed class UseConverterAttribute : Attribute, _Attribute Constructors | Improve this Doc View Source UseConverterAttribute(Type) Creates a new UseConverterAttribute with a given ConverterType . Declaration public UseConverterAttribute(Type converterType) Parameters Type Name Description Type converterType the type to assign to ConverterType Properties | Improve this Doc View Source ConverterTargetType Gets the target type of the converter if it is avaliable at instantiation time, otherwise null . Declaration public Type ConverterTargetType { get; } Property Value Type Description Type | Improve this Doc View Source ConverterType Gets the type of the converter to use. Declaration public Type ConverterType { get; } Property Value Type Description Type | Improve this Doc View Source IsGenericConverter Gets whether or not this converter is a generic ValueConverter . Declaration public bool IsGenericConverter { get; } Property Value Type Description Boolean Implements System.Runtime.InteropServices._Attribute Extension Methods ReflectionUtil.SetField